@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,957 +1,957 @@
|
|
|
1
|
-
# FC Connect SDK - Template Guides
|
|
2
|
-
|
|
3
|
-
**Complete catalog of production-ready templates** for building Fluent Commerce integrations.
|
|
4
|
-
|
|
5
|
-
Last Updated: 2025-01-27
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 🎯 Quick Decision Tree
|
|
10
|
-
|
|
11
|
-
**Not sure which template to use?** Follow this flowchart:
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
START: What do you want to build?
|
|
15
|
-
│
|
|
16
|
-
├─ I need a PATTERN (concept/technique) ────────────────────────┐
|
|
17
|
-
│ │
|
|
18
|
-
├─ I'm building for VERSORI PLATFORM ────────────────────────────┤
|
|
19
|
-
│ │
|
|
20
|
-
└─ I'm building STANDALONE (Node.js/Deno) ───────────────────────┤
|
|
21
|
-
│
|
|
22
|
-
▼
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### 1️⃣ What Runtime Are You Using?
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
┌──────────────────────────────────────────────────────────────┐
|
|
29
|
-
│ Where will your integration run? │
|
|
30
|
-
└──────────────────────────────────────────────────────────────┘
|
|
31
|
-
│
|
|
32
|
-
┌─────────────────┼─────────────────┐
|
|
33
|
-
│ │ │
|
|
34
|
-
▼ ▼ ▼
|
|
35
|
-
VERSORI STANDALONE JUST A
|
|
36
|
-
PLATFORM NODE.JS/DENO PATTERN
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 🅰️ Versori Platform Templates
|
|
42
|
-
|
|
43
|
-
### Webhook-Triggered Workflows (7)
|
|
44
|
-
|
|
45
|
-
#### XML Order Ingestion
|
|
46
|
-
**File**: [`versori/webhooks/template-webhook-xml-order-ingestion.md`](versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
47
|
-
|
|
48
|
-
**Description**: Build a Versori HTTP webhook that receives SFCC/Radial XML orders and creates orders in Fluent Commerce using GraphQL mutations. Includes nodes processing for nested XML extraction, custom resolvers with async API calls, and complete audit trail.
|
|
49
|
-
|
|
50
|
-
**Complexity**: Medium | **Lines**: ~500
|
|
51
|
-
|
|
52
|
-
**SDK Methods**:
|
|
53
|
-
- `createClient(ctx)` - Versori context auto-detected
|
|
54
|
-
- `GraphQLMutationMapper(config, logger, { fluentClient, customResolvers })` - XML → GraphQL mapping
|
|
55
|
-
- `mapper.mapWithNodes(data)` - Process nodes config (resolvers from constructor)
|
|
56
|
-
- `mapWithNodes()` returns query automatically (no need for buildMutation())
|
|
57
|
-
- `client.graphql({ query, variables })` - Execute mutation
|
|
58
|
-
|
|
59
|
-
**Key Patterns**:
|
|
60
|
-
- Versori connection setup with auto-authentication
|
|
61
|
-
- Nodes configuration (extracting nested/escaped XML)
|
|
62
|
-
- Custom resolvers with context and async API calls
|
|
63
|
-
- GraphQL mutation generation and execution
|
|
64
|
-
- Error handling with structured responses
|
|
65
|
-
|
|
66
|
-
**Use When**: Receiving XML webhooks (SFCC, Radial, custom), need to extract nested XML documents, transforming XML to Fluent orders/entities
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
#### Generic XML Order
|
|
71
|
-
**File**: [`versori/webhooks/template-webhook-generic-xml-order.md`](versori/webhooks/template-webhook-generic-xml-order.md)
|
|
72
|
-
|
|
73
|
-
**Description**: Generic, vendor-agnostic XML order ingestion via Versori webhook using `GraphQLMutationMapper`. Includes optional nodes extraction, custom resolvers, audit trail, and robust error handling.
|
|
74
|
-
|
|
75
|
-
**Complexity**: Medium | **Lines**: ~450
|
|
76
|
-
|
|
77
|
-
**Use When**: Any XML order format (not SFCC-specific)
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
#### ASN/Purchase Order
|
|
82
|
-
**File**: [`versori/webhooks/template-webhook-asn-purchase-order.md`](versori/webhooks/template-webhook-asn-purchase-order.md)
|
|
83
|
-
|
|
84
|
-
**Description**: Advanced Shipping Notice (ASN) webhook processing with purchase order matching, shipment tracking, and inventory receiving workflows.
|
|
85
|
-
|
|
86
|
-
**Complexity**: Medium | **Lines**: ~600
|
|
87
|
-
|
|
88
|
-
**Use When**: Processing Advanced Shipping Notices
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
#### Dropship Routing
|
|
93
|
-
**File**: [`versori/webhooks/template-webhook-dropship-routing.md`](versori/webhooks/template-webhook-dropship-routing.md)
|
|
94
|
-
|
|
95
|
-
**Description**: Supplier selection logic, PO submission, fallback to warehouse, and order status updates for dropship fulfillment.
|
|
96
|
-
|
|
97
|
-
**Complexity**: High | **Lines**: ~700
|
|
98
|
-
|
|
99
|
-
**Use When**: Routing orders to suppliers with fallback
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
#### Flash Sale Inventory Reserve
|
|
104
|
-
**File**: [`versori/webhooks/template-webhook-flash-sale-reserve.md`](versori/webhooks/template-webhook-flash-sale-reserve.md)
|
|
105
|
-
|
|
106
|
-
**Description**: Time-bound inventory reservations, distributed locking, real-time decrement pattern, and periodic reconciliation for flash sales.
|
|
107
|
-
|
|
108
|
-
**Complexity**: High | **Lines**: ~700
|
|
109
|
-
|
|
110
|
-
**SDK Methods**:
|
|
111
|
-
- `createClient(ctx)`
|
|
112
|
-
- `VersoriKVAdapter` - Distributed locking
|
|
113
|
-
- `StateService` - Reservation tracking
|
|
114
|
-
- Custom resolvers (time-bound checks, quantity validation)
|
|
115
|
-
|
|
116
|
-
**Key Patterns**:
|
|
117
|
-
- Time-bound reservations (expiry logic)
|
|
118
|
-
- Distributed locking (prevent overselling)
|
|
119
|
-
- Real-time inventory decrement
|
|
120
|
-
- Periodic reconciliation workflow
|
|
121
|
-
|
|
122
|
-
**Use When**: Managing high-velocity flash sale inventory
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
#### RMA/Returns Processing (Comprehensive)
|
|
127
|
-
**File**: [`versori/webhooks/template-webhook-rma-returns-comprehensive.md`](versori/webhooks/template-webhook-rma-returns-comprehensive.md)
|
|
128
|
-
|
|
129
|
-
**Description**: Complete RMA lifecycle: return initiation → RMA creation → shipping label → quality inspection → refund/exchange → inventory restock. Includes 5 separate webhooks for full workflow.
|
|
130
|
-
|
|
131
|
-
**Complexity**: Medium-High | **Lines**: ~1700
|
|
132
|
-
|
|
133
|
-
**Webhooks**:
|
|
134
|
-
1. `createRmaFromReturn` - Creates RMA from return request
|
|
135
|
-
2. `trackReturnShipment` - Tracks return shipment
|
|
136
|
-
3. `qualityInspection` - Processes warehouse inspection
|
|
137
|
-
4. `processRefundOrExchange` - Handles refund/exchange
|
|
138
|
-
5. `getRmaStatus` - Query endpoint for RMA status
|
|
139
|
-
|
|
140
|
-
**Use When**: Full return/exchange workflow
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
#### Payment Gateway Integration (Adyen)
|
|
145
|
-
**File**: [`versori/webhooks/template-webhook-payment-gateway-integration.md`](versori/webhooks/template-webhook-payment-gateway-integration.md)
|
|
146
|
-
|
|
147
|
-
**Description**: Complete payment gateway integration with 4 webhooks: Capture, Refund, Auth Cancel, and ReAuth. Modular architecture allows easy swapping of payment providers (Adyen → Stripe).
|
|
148
|
-
|
|
149
|
-
**Complexity**: Medium-High | **Lines**: ~1500
|
|
150
|
-
|
|
151
|
-
**SDK Methods**:
|
|
152
|
-
- `createClient(ctx)` - Versori context auto-detected
|
|
153
|
-
- `client.setRetailerId()` - Required for Event API
|
|
154
|
-
- `client.sendEvent()` - Send events to Fluent Commerce Event API
|
|
155
|
-
- `VersoriKVAdapter(ctx.openKv(':project:'))` - Idempotency tracking
|
|
156
|
-
|
|
157
|
-
**Key Patterns**:
|
|
158
|
-
- Payment provider abstraction (easy to swap Adyen → Stripe)
|
|
159
|
-
- Trigger source validation (ORDER_FULFILLMENT vs PAYMENT_ENTITY)
|
|
160
|
-
- Shared services (webhook validation, event sending, idempotency)
|
|
161
|
-
- Event mapping (payment provider → Fluent event format)
|
|
162
|
-
|
|
163
|
-
**Use When**: Integrating payment gateways (Adyen, Stripe, PayPal)
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
### Scheduled Workflows (6)
|
|
168
|
-
|
|
169
|
-
#### CSV Inventory Sync (S3)
|
|
170
|
-
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md`](versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md)
|
|
171
|
-
|
|
172
|
-
**Description**: Build a Versori scheduled workflow (cron-based) that reads inventory CSV files from S3 and updates Fluent Commerce inventory via Batch API. Includes VersoriKV state management for duplicate prevention and file archival.
|
|
173
|
-
|
|
174
|
-
**Complexity**: Medium | **Lines**: ~600
|
|
175
|
-
|
|
176
|
-
**SDK Methods**:
|
|
177
|
-
- `createClient(ctx)` - Versori client
|
|
178
|
-
- `S3DataSource(config, logger)` - S3 operations
|
|
179
|
-
- `UniversalMapper(mappingConfig)` - Field transformations
|
|
180
|
-
- `mapper.map(record)` - Transform record
|
|
181
|
-
- `client.createJob({ name, retailerId })` - Create Batch job
|
|
182
|
-
- `client.sendBatch(jobId, { entities })` - Send inventory batch
|
|
183
|
-
- `VersoriKVAdapter(openKv())` - State management
|
|
184
|
-
- `VersoriFileTracker` - File tracking
|
|
185
|
-
|
|
186
|
-
**Key Patterns**:
|
|
187
|
-
- Versori scheduled triggers (cron expressions)
|
|
188
|
-
- S3 file operations (list, download, archive)
|
|
189
|
-
- UniversalMapper with SDK resolvers
|
|
190
|
-
- Batch API processing with chunking
|
|
191
|
-
- VersoriKV state management (duplicate prevention)
|
|
192
|
-
- File archival after processing
|
|
193
|
-
|
|
194
|
-
**Use When**: Scheduled inventory sync (daily, hourly), reading CSV from S3, need duplicate prevention
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
#### SFTP CSV Ingestion
|
|
199
|
-
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md`](versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md)
|
|
200
|
-
|
|
201
|
-
**Description**: Scheduled/manual ingestion from SFTP CSV with `CSVParserService` and `UniversalMapper`, duplicate prevention with `VersoriFileTracker`, and robust retry/backoff for downloads and batch sends.
|
|
202
|
-
|
|
203
|
-
**Complexity**: Medium | **Lines**: ~700
|
|
204
|
-
|
|
205
|
-
**SDK Methods**:
|
|
206
|
-
- `createClient(ctx)`
|
|
207
|
-
- `SftpDataSource.listFiles`, `downloadFile`, `moveFile`
|
|
208
|
-
- `CSVParserService.parse`
|
|
209
|
-
- `UniversalMapper.map`
|
|
210
|
-
- `VersoriFileTracker`, `VersoriKVAdapter`, `StateService`
|
|
211
|
-
- `client.createJob`, `client.sendBatch`
|
|
212
|
-
|
|
213
|
-
**Key Patterns**:
|
|
214
|
-
- SFTP connection and file operations
|
|
215
|
-
- CSV parsing with validation
|
|
216
|
-
- File tracking and duplicate prevention
|
|
217
|
-
- Retry logic with exponential backoff
|
|
218
|
-
- File archival (processed/error folders)
|
|
219
|
-
|
|
220
|
-
**Use When**: Scheduled SFTP polling for CSV files
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
#### Cycle Count Reconciliation
|
|
225
|
-
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md`](versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md)
|
|
226
|
-
|
|
227
|
-
**Description**: Scheduled cycle count import with variance detection, adjustment workflows, and reporting.
|
|
228
|
-
|
|
229
|
-
**Complexity**: Medium | **Lines**: ~650
|
|
230
|
-
|
|
231
|
-
**Use When**: Scheduled cycle count imports with variance handling
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
#### Multi-Channel Inventory Sync
|
|
236
|
-
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md`](versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md)
|
|
237
|
-
|
|
238
|
-
**Description**: ATP computation, channel-specific allocation rules, delta sync optimization, and rate-limit handling for multi-channel inventory distribution.
|
|
239
|
-
|
|
240
|
-
**Complexity**: High | **Lines**: ~750
|
|
241
|
-
|
|
242
|
-
**SDK Methods**:
|
|
243
|
-
- `createClient(ctx)`
|
|
244
|
-
- `client.graphql` - Query inventory
|
|
245
|
-
- `UniversalMapper` - Transform for channels
|
|
246
|
-
- Channel-specific custom resolvers
|
|
247
|
-
- Rate limiting logic
|
|
248
|
-
|
|
249
|
-
**Key Patterns**:
|
|
250
|
-
- ATP (Available-To-Promise) calculation
|
|
251
|
-
- Channel allocation rules
|
|
252
|
-
- Delta sync (only changed inventory)
|
|
253
|
-
- Rate limiting per channel
|
|
254
|
-
- Multi-channel distribution
|
|
255
|
-
|
|
256
|
-
**Use When**: Distributing inventory across multiple sales channels
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
#### Event API Templates
|
|
261
|
-
**File**: [`versori/workflows/ingestion/event-api/`](versori/workflows/ingestion/event-api/)
|
|
262
|
-
|
|
263
|
-
**Description**: Product, location, and control entity ingestion via Event API with GraphQL mutations. Supports CSV, JSON, XML, and Parquet formats from S3 and SFTP sources.
|
|
264
|
-
|
|
265
|
-
**Available Templates**:
|
|
266
|
-
- S3 CSV Product Event → [`template-ingestion-s3-csv-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md)
|
|
267
|
-
- SFTP CSV Product Event → [`template-ingestion-sftp-csv-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md)
|
|
268
|
-
- S3 JSON Product Event → [`template-ingestion-s3-json-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md)
|
|
269
|
-
- SFTP JSON Product Event → [`template-ingestion-sftp-json-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md)
|
|
270
|
-
- S3 XML Product Event → [`template-ingestion-s3-xml-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md)
|
|
271
|
-
- SFTP XML Product Event → [`template-ingestion-sftp-xml-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md)
|
|
272
|
-
- S3 Parquet Product Event → [`template-ingestion-s3-parquet-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md)
|
|
273
|
-
- SFTP Parquet Product Event → [`template-ingestion-sftp-parquet-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md)
|
|
274
|
-
|
|
275
|
-
**Complexity**: Medium | **Lines**: ~550-700
|
|
276
|
-
|
|
277
|
-
**Use When**: Ingesting products, locations, or control entities via Event API
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
#### GraphQL Mutation Templates
|
|
282
|
-
**File**: [`versori/workflows/ingestion/graphql-mutations/`](versori/workflows/ingestion/graphql-mutations/)
|
|
283
|
-
|
|
284
|
-
**Description**: Direct GraphQL mutation templates for creating/updating locations, prices, and control entities.
|
|
285
|
-
|
|
286
|
-
**Available Templates**:
|
|
287
|
-
- S3 CSV Location GraphQL → [`template-ingestion-s3-csv-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md)
|
|
288
|
-
- SFTP CSV Location GraphQL → [`template-ingestion-sftp-csv-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md)
|
|
289
|
-
- S3 JSON Location GraphQL → [`template-ingestion-s3-json-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md)
|
|
290
|
-
- SFTP JSON Location GraphQL → [`template-ingestion-sftp-json-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md)
|
|
291
|
-
- S3 XML Location GraphQL → [`template-ingestion-s3-xml-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md)
|
|
292
|
-
- S3 CSV Price GraphQL → [`template-ingestion-s3-csv-price-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md)
|
|
293
|
-
- S3 CSV Control GraphQL → [`template-ingestion-s3-csv-control-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md)
|
|
294
|
-
- SFTP CSV Control GraphQL → [`template-ingestion-sftp-csv-control-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md)
|
|
295
|
-
|
|
296
|
-
**Complexity**: Medium | **Lines**: ~600-800
|
|
297
|
-
|
|
298
|
-
**Use When**: Direct GraphQL mutations for entities not supported by Event API
|
|
299
|
-
|
|
300
|
-
---
|
|
301
|
-
|
|
302
|
-
### Versori Patterns (3)
|
|
303
|
-
|
|
304
|
-
#### KV State Management
|
|
305
|
-
**File**: [`versori/patterns/kv-state-management.md`](versori/patterns/kv-state-management.md)
|
|
306
|
-
|
|
307
|
-
**Description**: Comprehensive guide on using Versori KV storage for state management, duplicate prevention, checkpoints, and file tracking. Includes 6 complete patterns from simple file tracking to advanced indexed tracking.
|
|
308
|
-
|
|
309
|
-
**Complexity**: Low-Medium | **Lines**: ~400
|
|
310
|
-
|
|
311
|
-
**SDK Methods**:
|
|
312
|
-
- `VersoriKVAdapter(openKv())` - Wrap Versori KV
|
|
313
|
-
- `VersoriFileTracker(kvAdapter)` - Track files
|
|
314
|
-
- `StateService(kvAdapter)` - High-level state operations
|
|
315
|
-
- `stateService.isFileProcessed(key)` - Check if processed
|
|
316
|
-
- `stateService.markFileProcessed(key, metadata)` - Mark complete
|
|
317
|
-
- `stateService.saveCheckpoint(key, data)` - Save checkpoint
|
|
318
|
-
- `stateService.getCheckpoint(key)` - Restore checkpoint
|
|
319
|
-
|
|
320
|
-
**Key Patterns**:
|
|
321
|
-
- Simple file duplicate prevention
|
|
322
|
-
- Distributed locking (prevent concurrent workflows)
|
|
323
|
-
- Checkpoint & resume (long-running workflows)
|
|
324
|
-
- Daily job management (reuse jobs)
|
|
325
|
-
- Error state management (retry logic)
|
|
326
|
-
- Advanced indexed tracking (list files)
|
|
327
|
-
|
|
328
|
-
**Use When**: Preventing duplicate file processing, need checkpoint/resume capabilities, distributed workflow coordination
|
|
329
|
-
|
|
330
|
-
---
|
|
331
|
-
|
|
332
|
-
#### XML Response Patterns
|
|
333
|
-
**File**: [`versori/patterns/xml-response-patterns.md`](versori/patterns/xml-response-patterns.md)
|
|
334
|
-
|
|
335
|
-
**Description**: CRITICAL guide on returning non-JSON content (XML, HTML, CSV) from Versori webhooks using custom Response objects.
|
|
336
|
-
|
|
337
|
-
**Complexity**: Low-Medium | **Lines**: ~300
|
|
338
|
-
|
|
339
|
-
**SDK Methods**:
|
|
340
|
-
- `webhook('name', { response: { mode, onSuccess, onError } })` - Custom handlers
|
|
341
|
-
- `XMLBuilder(options)` - Build XML responses
|
|
342
|
-
- `builder.build(data)` - Generate XML string
|
|
343
|
-
- `new Response(body, { status, headers })` - Custom response objects
|
|
344
|
-
|
|
345
|
-
**Key Patterns**:
|
|
346
|
-
- Why custom Response objects are needed (JSON encoding problem)
|
|
347
|
-
- onSuccess handler pattern (return Response)
|
|
348
|
-
- onError handler pattern (error responses)
|
|
349
|
-
- Content-Type headers (application/xml, text/html, text/csv)
|
|
350
|
-
|
|
351
|
-
**Use When**: Returning XML responses (SOAP, RSS, custom), HTML status pages, CSV downloads, CRITICAL for SFCC order detail responses
|
|
352
|
-
|
|
353
|
-
---
|
|
354
|
-
|
|
355
|
-
#### Dual Workflow Connector
|
|
356
|
-
**File**: [`versori/patterns/dual-workflow-connector.md`](versori/patterns/dual-workflow-connector.md)
|
|
357
|
-
|
|
358
|
-
**Description**: Build a complete Versori connector with multiple workflows (ingestion + extraction), shared resolvers, proper index.ts structure, and package.json configuration.
|
|
359
|
-
|
|
360
|
-
**Complexity**: Medium | **Lines**: ~500
|
|
361
|
-
|
|
362
|
-
**Key Patterns**:
|
|
363
|
-
- Multi-workflow index structure (clean exports)
|
|
364
|
-
- Shared resolvers library (domain-organized)
|
|
365
|
-
- Bidirectional data flow (ingestion vs extraction)
|
|
366
|
-
- Package.json configuration (Versori-specific)
|
|
367
|
-
- Testing multi-workflow connectors
|
|
368
|
-
|
|
369
|
-
**Use When**: Building complete bidirectional integration, multiple workflows sharing code, production Versori connector
|
|
370
|
-
|
|
371
|
-
---
|
|
372
|
-
|
|
373
|
-
### Business Use Case Examples (4)
|
|
374
|
-
|
|
375
|
-
#### GraphQL → Parquet Extraction
|
|
376
|
-
**File**: [`versori/business-examples/graphql-parquet-extraction.md`](versori/business-examples/graphql-parquet-extraction.md)
|
|
377
|
-
|
|
378
|
-
**Description**: Scheduled/manual Versori workflow that extracts via GraphQL with auto-pagination, transforms with `UniversalMapper`, partitions by date/entity/size, and uploads Parquet parts to S3 with incremental KV state.
|
|
379
|
-
|
|
380
|
-
**Complexity**: Medium | **Lines**: ~600
|
|
381
|
-
|
|
382
|
-
**SDK Methods**:
|
|
383
|
-
- `createClient(ctx)` with Versori connection
|
|
384
|
-
- `client.graphql({ pagination })`
|
|
385
|
-
- `UniversalMapper`
|
|
386
|
-
- `VersoriKVAdapter`, `StateService`
|
|
387
|
-
- `S3DataSource.writeParquetContent`, `S3DataSource.uploadFile`
|
|
388
|
-
|
|
389
|
-
**Key Patterns**:
|
|
390
|
-
- Auto-pagination extraction
|
|
391
|
-
- Data transformation with UniversalMapper
|
|
392
|
-
- Parquet file generation
|
|
393
|
-
- Partitioning strategies (date, entity, size)
|
|
394
|
-
- Incremental state tracking
|
|
395
|
-
|
|
396
|
-
**Use When**: Extracting data from Fluent to data warehouse
|
|
397
|
-
|
|
398
|
-
---
|
|
399
|
-
|
|
400
|
-
#### Dropship Order Routing
|
|
401
|
-
**File**: [`versori/business-examples/dropship-order-routing.md`](versori/business-examples/dropship-order-routing.md)
|
|
402
|
-
|
|
403
|
-
**Description**: Intelligent supplier selection with fallback logic and complete order orchestration workflow.
|
|
404
|
-
|
|
405
|
-
**Complexity**: High | **Lines**: ~700
|
|
406
|
-
|
|
407
|
-
**Use When**: Complex dropship routing with fallback logic
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
#### Inter-Location Transfers
|
|
412
|
-
**File**: [`versori/business-examples/inter-location-transfers.md`](versori/business-examples/inter-location-transfers.md)
|
|
413
|
-
|
|
414
|
-
**Description**: Transfer order creation, fulfillment workflow, and receiving processes for inter-location inventory movement.
|
|
415
|
-
|
|
416
|
-
**Complexity**: Medium-High | **Lines**: ~650
|
|
417
|
-
|
|
418
|
-
**Use When**: Moving inventory between locations
|
|
419
|
-
|
|
420
|
-
---
|
|
421
|
-
|
|
422
|
-
#### Pre-Order Allocation
|
|
423
|
-
**File**: [`versori/business-examples/pre-order-allocation.md`](versori/business-examples/pre-order-allocation.md)
|
|
424
|
-
|
|
425
|
-
**Description**: Pre-order reservation system, allocation rules engine, and fulfillment on inventory availability.
|
|
426
|
-
|
|
427
|
-
**Complexity**: High | **Lines**: ~750
|
|
428
|
-
|
|
429
|
-
**SDK Methods**:
|
|
430
|
-
- `createClient(ctx)`
|
|
431
|
-
- `VersoriKVAdapter` - Reservation tracking
|
|
432
|
-
- Allocation rules engine
|
|
433
|
-
- Fulfillment triggers
|
|
434
|
-
|
|
435
|
-
**Use When**: Managing pre-orders with allocation logic
|
|
436
|
-
|
|
437
|
-
---
|
|
438
|
-
|
|
439
|
-
## 🅱️ Standalone Node.js / Deno Templates
|
|
440
|
-
|
|
441
|
-
### Ingestion (External → Fluent)
|
|
442
|
-
|
|
443
|
-
#### S3 CSV → Batch API
|
|
444
|
-
**File**: [`standalone/s3-csv-batch-api.md`](standalone/s3-csv-batch-api.md)
|
|
445
|
-
|
|
446
|
-
**Description**: Read CSV inventory files from S3, transform with `UniversalMapper`, and update Fluent via Batch API with chunking and archival.
|
|
447
|
-
|
|
448
|
-
**Complexity**: Medium | **Lines**: ~450-500
|
|
449
|
-
|
|
450
|
-
**SDK Methods**:
|
|
451
|
-
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })`
|
|
452
|
-
- `S3DataSource`, `CSVParserService`, `UniversalMapper`
|
|
453
|
-
- `client.createJob`, `client.sendBatch`
|
|
454
|
-
|
|
455
|
-
**Use When**: Simple S3 CSV ingestion with field mapping
|
|
456
|
-
|
|
457
|
-
---
|
|
458
|
-
|
|
459
|
-
#### SFTP XML → GraphQL Mutation
|
|
460
|
-
**File**: [`standalone/sftp-xml-graphql.md`](standalone/sftp-xml-graphql.md)
|
|
461
|
-
|
|
462
|
-
**Description**: Standalone Node.js script that reads XML order files from SFTP and creates orders in Fluent Commerce using GraphQL mutations. Includes SFTP connection, XML parsing, and file archival.
|
|
463
|
-
|
|
464
|
-
**Complexity**: Medium | **Lines**: ~600
|
|
465
|
-
|
|
466
|
-
**SDK Methods**:
|
|
467
|
-
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2
|
|
468
|
-
- `SftpDataSource(config, logger)` - SFTP operations
|
|
469
|
-
- `XMLParserService` - XML parsing
|
|
470
|
-
- `GraphQLMutationMapper(config, logger, { fluentClient, customResolvers })` - XML → GraphQL
|
|
471
|
-
- `mapper.mapWithNodes(xmlData)` - Transform with custom resolvers (from constructor)
|
|
472
|
-
- `mapper.map(xmlData)` - Transform without custom resolvers (built-in SDK resolvers only)
|
|
473
|
-
- `client.graphql({ query, variables })` - Execute mutation
|
|
474
|
-
|
|
475
|
-
**Key Patterns**:
|
|
476
|
-
- SFTP connection & file operations
|
|
477
|
-
- XML parsing & validation
|
|
478
|
-
- GraphQL mutation mapping
|
|
479
|
-
- Custom resolvers for complex logic
|
|
480
|
-
- File management (archive/error folders)
|
|
481
|
-
|
|
482
|
-
**Deployment**: Local, Docker, Cron/Systemd
|
|
483
|
-
|
|
484
|
-
**Use When**: Polling SFTP for XML orders
|
|
485
|
-
|
|
486
|
-
---
|
|
487
|
-
|
|
488
|
-
#### Webhook Payload Processing
|
|
489
|
-
**File**: [`standalone/webhook-payload-processing.md`](standalone/webhook-payload-processing.md)
|
|
490
|
-
|
|
491
|
-
**Description**: Process stored webhook payloads offline with signature validation, payload parsing, and file-based queue.
|
|
492
|
-
|
|
493
|
-
**Complexity**: Low-Medium | **Lines**: ~250
|
|
494
|
-
|
|
495
|
-
**Use When**: Processing stored webhook payloads offline
|
|
496
|
-
|
|
497
|
-
---
|
|
498
|
-
|
|
499
|
-
#### ASN Inbound Processing
|
|
500
|
-
**File**: [`standalone/asn-inbound-processing.md`](standalone/asn-inbound-processing.md)
|
|
501
|
-
|
|
502
|
-
**Description**: Process Advanced Shipping Notice (ASN) files with PO matching and inventory updates.
|
|
503
|
-
|
|
504
|
-
**Complexity**: Medium | **Lines**: ~500
|
|
505
|
-
|
|
506
|
-
**Use When**: Processing inbound shipment notices
|
|
507
|
-
|
|
508
|
-
---
|
|
509
|
-
|
|
510
|
-
### Extraction (Fluent → External)
|
|
511
|
-
|
|
512
|
-
#### GraphQL Query → Parquet Export
|
|
513
|
-
**File**: [`standalone/graphql-query-export.md`](standalone/graphql-query-export.md)
|
|
514
|
-
|
|
515
|
-
**Description**: Standalone Node.js script that extracts inventory/orders from Fluent Commerce via GraphQL queries and exports to S3 as Parquet files. Includes auto-pagination and incremental extraction.
|
|
516
|
-
|
|
517
|
-
**Complexity**: Medium | **Lines**: ~500
|
|
518
|
-
|
|
519
|
-
**SDK Methods**:
|
|
520
|
-
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2
|
|
521
|
-
- `client.graphql({ query, variables })` - Execute GraphQL query
|
|
522
|
-
- `detectPaginationVariables(query)` - Auto-detect pagination
|
|
523
|
-
- `hasMorePages(response)` - Check for next page
|
|
524
|
-
- `UniversalMapper(extractionConfig)` - Transform for export
|
|
525
|
-
- `ParquetParserService.write(data, outputPath)` - Generate Parquet
|
|
526
|
-
- `S3DataSource.uploadFile(path, buffer)` - Upload to S3
|
|
527
|
-
|
|
528
|
-
**Deployment**: Local, Scheduled (cron), AWS Lambda
|
|
529
|
-
|
|
530
|
-
**Use When**: Extracting inventory/orders to S3 as Parquet
|
|
531
|
-
|
|
532
|
-
---
|
|
533
|
-
|
|
534
|
-
#### GraphQL → Partitioned Parquet on S3
|
|
535
|
-
**File**: [`standalone/graphql-to-parquet-partitioned-s3.md`](standalone/graphql-to-parquet-partitioned-s3.md)
|
|
536
|
-
|
|
537
|
-
**Description**: Extract entities via GraphQL with auto-pagination, transform with `UniversalMapper`, and write multiple Parquet files to S3 with date/entity/size partitioning and incremental state.
|
|
538
|
-
|
|
539
|
-
**Complexity**: Medium | **Lines**: ~550
|
|
540
|
-
|
|
541
|
-
**SDK Methods**:
|
|
542
|
-
- `createClient`, `client.graphql({ pagination })`
|
|
543
|
-
- `UniversalMapper`
|
|
544
|
-
- `S3DataSource.writeParquetContent`, `S3DataSource.uploadFile`
|
|
545
|
-
|
|
546
|
-
**Key Patterns**:
|
|
547
|
-
- Auto-pagination extraction
|
|
548
|
-
- Data transformation with UniversalMapper
|
|
549
|
-
- Parquet file generation
|
|
550
|
-
- Partitioning strategies (date, entity, size)
|
|
551
|
-
- Incremental state tracking
|
|
552
|
-
|
|
553
|
-
**Use When**: Large-scale extraction with date/entity partitioning
|
|
554
|
-
|
|
555
|
-
---
|
|
556
|
-
|
|
557
|
-
### Complex Workflows
|
|
558
|
-
|
|
559
|
-
#### Multi-Source Aggregation
|
|
560
|
-
**File**: [`standalone/multi-source-aggregation.md`](standalone/multi-source-aggregation.md)
|
|
561
|
-
|
|
562
|
-
**Description**: Standalone Node.js script that aggregates inventory from multiple sources (SFTP CSV + S3 JSON), reconciles with Fluent Commerce current state, and updates differences. Includes comprehensive reporting.
|
|
563
|
-
|
|
564
|
-
**Complexity**: High | **Lines**: ~800
|
|
565
|
-
|
|
566
|
-
**SDK Methods**:
|
|
567
|
-
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2
|
|
568
|
-
- `SftpDataSource(...)` - SFTP operations
|
|
569
|
-
- `S3DataSource(...)` - S3 operations
|
|
570
|
-
- `CSVParserService` - Parse SFTP CSV
|
|
571
|
-
- `client.graphql({ query, variables })` - Query current inventory
|
|
572
|
-
- `UniversalMapper(...)` - Transform aggregated data
|
|
573
|
-
|
|
574
|
-
**Deployment**: Scheduled (hourly), Manual, Containerized
|
|
575
|
-
|
|
576
|
-
**Use When**: Combining inventory from multiple sources
|
|
577
|
-
|
|
578
|
-
---
|
|
579
|
-
|
|
580
|
-
#### Multi-Channel Inventory Sync
|
|
581
|
-
**File**: [`standalone/multi-channel-inventory-sync.md`](standalone/multi-channel-inventory-sync.md)
|
|
582
|
-
|
|
583
|
-
**Description**: Node.js script that aggregates Available-to-Promise (ATP) inventory from Fluent Commerce and pushes real-time updates to multiple marketplaces (Amazon, eBay, Walmart).
|
|
584
|
-
|
|
585
|
-
**Complexity**: High | **Lines**: ~950
|
|
586
|
-
|
|
587
|
-
**SDK Methods**:
|
|
588
|
-
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2 client
|
|
589
|
-
- `client.graphql({ query, variables, pagination })` - Query with auto-pagination
|
|
590
|
-
- `UniversalMapper(mappingConfig)` - Transform Fluent data to marketplace formats
|
|
591
|
-
- `createConsoleLogger()` - Simple console logger
|
|
592
|
-
- `toStructuredLogger(logger, context)` - Add context to logs
|
|
593
|
-
- `generateCorrelationId()` - Generate unique correlation IDs
|
|
594
|
-
- State tracking for incremental updates
|
|
595
|
-
|
|
596
|
-
**Key Patterns**:
|
|
597
|
-
- GraphQL pagination → external marketplace APIs
|
|
598
|
-
- ATP (Available-to-Promise) aggregation across multiple locations
|
|
599
|
-
- Marketplace-specific buffer stock calculations
|
|
600
|
-
- Parallel marketplace updates with rate limiting
|
|
601
|
-
- Per-marketplace error handling and retry logic
|
|
602
|
-
- SLA tracking (15-minute sync requirement)
|
|
603
|
-
|
|
604
|
-
**Use When**: Standalone multi-channel distribution (different from Versori template - this pushes TO marketplaces)
|
|
605
|
-
|
|
606
|
-
---
|
|
607
|
-
|
|
608
|
-
## 🅲️ Pattern Guides (Reusable Concepts)
|
|
609
|
-
|
|
610
|
-
### Universal Field Mapping
|
|
611
|
-
**File**: [`patterns/field-mapping-universal.md`](patterns/field-mapping-universal.md)
|
|
612
|
-
|
|
613
|
-
**Description**: Focused guide on UniversalMapper for field transformations. Covers basic mapping, SDK resolvers, custom resolvers, nested fields, arrays, and error handling.
|
|
614
|
-
|
|
615
|
-
**Lines**: ~150-200
|
|
616
|
-
|
|
617
|
-
**SDK Methods**:
|
|
618
|
-
- `UniversalMapper(config)` - Create mapper
|
|
619
|
-
- `mapper.map(sourceData)` - Transform record
|
|
620
|
-
- SDK Resolvers: `sdk.*` prefix (15+ built-in)
|
|
621
|
-
- Custom resolvers: User-defined functions
|
|
622
|
-
|
|
623
|
-
**Patterns Covered**:
|
|
624
|
-
- Basic field mapping
|
|
625
|
-
- SDK resolver usage (string, number, date, type, utility)
|
|
626
|
-
- Custom resolver patterns (simple, helper-based, context-aware)
|
|
627
|
-
- Nested field mapping (dot notation)
|
|
628
|
-
- Array transformations
|
|
629
|
-
- Error handling in mapping
|
|
630
|
-
|
|
631
|
-
---
|
|
632
|
-
|
|
633
|
-
### Custom Resolvers
|
|
634
|
-
**File**: [`patterns/custom-resolvers.md`](patterns/custom-resolvers.md)
|
|
635
|
-
|
|
636
|
-
**Description**: Focused guide on writing custom resolvers. Covers 4-parameter signature, async resolvers, helper functions, and best practices.
|
|
637
|
-
|
|
638
|
-
**Lines**: ~100-150
|
|
639
|
-
|
|
640
|
-
**Resolver Signature**:
|
|
641
|
-
```typescript
|
|
642
|
-
(value, sourceData, helpers, config) => any | Promise<any>
|
|
643
|
-
```
|
|
644
|
-
|
|
645
|
-
**Helper Functions**:
|
|
646
|
-
- Path access (get, set)
|
|
647
|
-
- Type coercion (parseFloatSafe, parseIntSafe, parseBool)
|
|
648
|
-
- Date operations (formatDate, parseDate, addDays)
|
|
649
|
-
- Array operations (ensureArray, coalesce, groupBy)
|
|
650
|
-
- String operations (toCamelCase, toSnakeCase, template)
|
|
651
|
-
|
|
652
|
-
---
|
|
653
|
-
|
|
654
|
-
### Error Handling & Retry Strategies
|
|
655
|
-
**File**: [`patterns/error-handling-retry.md`](patterns/error-handling-retry.md)
|
|
656
|
-
|
|
657
|
-
**Description**: Focused guide on error handling and retry strategies. Covers try/catch, exponential backoff, circuit breaker, batch error isolation, and graceful degradation.
|
|
658
|
-
|
|
659
|
-
**Lines**: ~100-150
|
|
660
|
-
|
|
661
|
-
**SDK Error Classes**:
|
|
662
|
-
- `ConfigurationError` - Config validation
|
|
663
|
-
- `AggregateIngestionError` - Multiple failures
|
|
664
|
-
- `IngestionErrorFactory` - Create structured errors
|
|
665
|
-
|
|
666
|
-
**Patterns Covered**:
|
|
667
|
-
- Basic try/catch with logging
|
|
668
|
-
- Exponential backoff retry
|
|
669
|
-
- Circuit breaker pattern
|
|
670
|
-
- Batch error isolation
|
|
671
|
-
- Graceful degradation
|
|
672
|
-
|
|
673
|
-
---
|
|
674
|
-
|
|
675
|
-
### State Management & Duplicate Prevention
|
|
676
|
-
**File**: [`patterns/state-duplicate-prevention.md`](patterns/state-duplicate-prevention.md)
|
|
677
|
-
|
|
678
|
-
**Description**: Focused guide on state management and duplicate prevention. Covers file tracking, checkpoints, distributed locking, and idempotency.
|
|
679
|
-
|
|
680
|
-
**Lines**: ~100-150
|
|
681
|
-
|
|
682
|
-
**SDK Methods**:
|
|
683
|
-
- `StateService(kvAdapter)` - State management
|
|
684
|
-
- `VersoriKVAdapter(openKv())` - Versori KV wrapper
|
|
685
|
-
- `VersoriFileTracker` - File tracking
|
|
686
|
-
|
|
687
|
-
---
|
|
688
|
-
|
|
689
|
-
### Pagination & Streaming
|
|
690
|
-
**File**: [`patterns/pagination-streaming.md`](patterns/pagination-streaming.md)
|
|
691
|
-
|
|
692
|
-
**Description**: Focused guide on handling large datasets with pagination and streaming. Covers GraphQL auto-pagination, CSV/Parquet streaming, and memory optimization.
|
|
693
|
-
|
|
694
|
-
**Lines**: ~150-200
|
|
695
|
-
|
|
696
|
-
**SDK Methods**:
|
|
697
|
-
- `detectPaginationVariables(query)` - Auto-detect
|
|
698
|
-
- `hasMorePages(response)` - Check for next page
|
|
699
|
-
- `extractCursor(response)` - Get cursor
|
|
700
|
-
- `buildPaginationVariables(variables, cursor)` - Build next query
|
|
701
|
-
- CSV/Parquet streaming APIs
|
|
702
|
-
|
|
703
|
-
---
|
|
704
|
-
|
|
705
|
-
### CSV Schema Validation + Rejection Report
|
|
706
|
-
**File**: [`patterns/csv-schema-validation-and-rejection-report.md`](patterns/csv-schema-validation-and-rejection-report.md)
|
|
707
|
-
|
|
708
|
-
**Description**: Validate CSV headers and rows; generate a rejection report CSV and upload to S3. Fits into both S3 and SFTP ingestion flows before mapping.
|
|
709
|
-
|
|
710
|
-
**Complexity**: Low-Medium | **Lines**: ~220
|
|
711
|
-
|
|
712
|
-
---
|
|
713
|
-
|
|
714
|
-
### Large File Splitting
|
|
715
|
-
**File**: [`patterns/large-file-splitting.md`](patterns/large-file-splitting.md)
|
|
716
|
-
|
|
717
|
-
**Description**: Chunk large files for memory-efficient processing.
|
|
718
|
-
|
|
719
|
-
**Use When**: Handling files too large for memory
|
|
720
|
-
|
|
721
|
-
---
|
|
722
|
-
|
|
723
|
-
### Master Data ETL
|
|
724
|
-
**File**: [`patterns/master-data-etl.md`](patterns/master-data-etl.md)
|
|
725
|
-
|
|
726
|
-
**Description**: Generic patterns for products, locations, networks ingestion.
|
|
727
|
-
|
|
728
|
-
**Use When**: Master data ingestion best practices
|
|
729
|
-
|
|
730
|
-
---
|
|
731
|
-
|
|
732
|
-
## 🔍 Find Templates By Use Case
|
|
733
|
-
|
|
734
|
-
### I want to...
|
|
735
|
-
|
|
736
|
-
#### Import Inventory
|
|
737
|
-
- **From S3 CSV** → [S3 CSV Inventory Batch](versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md) (Versori) or [S3 CSV Batch API](standalone/s3-csv-batch-api.md) (Standalone)
|
|
738
|
-
- **From SFTP CSV** → [SFTP CSV Ingestion](versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md)
|
|
739
|
-
- **From Multiple Sources** → [Multi-Source Aggregation](standalone/multi-source-aggregation.md)
|
|
740
|
-
|
|
741
|
-
#### Import Orders
|
|
742
|
-
- **From XML Webhooks** → [XML Order Ingestion](versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
743
|
-
- **From SFTP XML** → [SFTP XML GraphQL](standalone/sftp-xml-graphql.md)
|
|
744
|
-
- **Generic XML** → [Generic XML Order](versori/webhooks/template-webhook-generic-xml-order.md)
|
|
745
|
-
|
|
746
|
-
#### Import Products/Locations
|
|
747
|
-
- **Event API** → [Event API Templates](versori/workflows/ingestion/event-api/)
|
|
748
|
-
- **GraphQL Mutations** → [GraphQL Mutation Templates](versori/workflows/ingestion/graphql-mutations/)
|
|
749
|
-
|
|
750
|
-
#### Export Data
|
|
751
|
-
- **To Parquet** → [GraphQL Query Export](standalone/graphql-query-export.md)
|
|
752
|
-
- **To Partitioned Parquet** → [GraphQL to Parquet Partitioned S3](standalone/graphql-to-parquet-partitioned-s3.md)
|
|
753
|
-
- **With Versori** → [GraphQL Parquet Extraction](versori/business-examples/graphql-parquet-extraction.md)
|
|
754
|
-
|
|
755
|
-
#### Process Returns
|
|
756
|
-
- **Complete RMA Flow** → [RMA Returns Comprehensive](versori/webhooks/template-webhook-rma-returns-comprehensive.md)
|
|
757
|
-
|
|
758
|
-
#### Manage Pricing
|
|
759
|
-
- **Bulk Updates** → [S3 CSV Price GraphQL](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md)
|
|
760
|
-
|
|
761
|
-
#### Advanced Workflows
|
|
762
|
-
- **Dropship Routing** → [Dropship Routing](versori/webhooks/template-webhook-dropship-routing.md) or [Business Example](versori/business-examples/dropship-order-routing.md)
|
|
763
|
-
- **Flash Sales** → [Flash Sale Reserve](versori/webhooks/template-webhook-flash-sale-reserve.md)
|
|
764
|
-
- **Multi-Channel Sync** → [Multi-Channel Sync](versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md) (Versori) or [Standalone](standalone/multi-channel-inventory-sync.md)
|
|
765
|
-
- **Inter-Location Transfers** → [Inter-Location Transfers](versori/business-examples/inter-location-transfers.md)
|
|
766
|
-
- **Pre-Orders** → [Pre-Order Allocation](versori/business-examples/pre-order-allocation.md)
|
|
767
|
-
|
|
768
|
-
---
|
|
769
|
-
|
|
770
|
-
## 💡 Quick Recommendations
|
|
771
|
-
|
|
772
|
-
### For Beginners
|
|
773
|
-
Start with these guides (easiest to hardest):
|
|
774
|
-
|
|
775
|
-
1. **[Field Mapping Universal](patterns/field-mapping-universal.md)** - Learn core mapping concepts
|
|
776
|
-
2. **[S3 CSV Batch API](standalone/s3-csv-batch-api.md)** - Simple standalone ingestion
|
|
777
|
-
3. **[CSV Inventory Sync](versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md)** - Versori scheduled workflow
|
|
778
|
-
4. **[XML Order Ingestion](versori/webhooks/template-webhook-xml-order-ingestion.md)** - Webhook with advanced features
|
|
779
|
-
|
|
780
|
-
### For Production Deployments
|
|
781
|
-
These guides are production-tested:
|
|
782
|
-
|
|
783
|
-
- **Inventory Ingestion**: [SFTP CSV Ingestion](versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md)
|
|
784
|
-
- **Order Processing**: [XML Order Ingestion](versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
785
|
-
- **Data Extraction**: [GraphQL to Parquet Partitioned S3](standalone/graphql-to-parquet-partitioned-s3.md)
|
|
786
|
-
- **State Management**: [KV State Management](versori/patterns/kv-state-management.md)
|
|
787
|
-
|
|
788
|
-
### For Complex Integrations
|
|
789
|
-
These guides show advanced patterns:
|
|
790
|
-
|
|
791
|
-
- [Multi-Source Aggregation](standalone/multi-source-aggregation.md)
|
|
792
|
-
- [Dropship Order Routing](versori/business-examples/dropship-order-routing.md)
|
|
793
|
-
- [Flash Sale Reserve](versori/webhooks/template-webhook-flash-sale-reserve.md)
|
|
794
|
-
- [Pre-Order Allocation](versori/business-examples/pre-order-allocation.md)
|
|
795
|
-
|
|
796
|
-
---
|
|
797
|
-
|
|
798
|
-
## 📖 How to Use These Templates
|
|
799
|
-
|
|
800
|
-
### For Developers
|
|
801
|
-
|
|
802
|
-
1. **Pick a template** - Use the decision tree above or browse by use case
|
|
803
|
-
2. **Copy the code** - All examples are production-ready
|
|
804
|
-
3. **Customize** environment variables and configurations
|
|
805
|
-
4. **Test locally** with provided sample data
|
|
806
|
-
5. **Deploy** using deployment options in each guide
|
|
807
|
-
|
|
808
|
-
**Need Help?** Check our comprehensive [**FAQ**](faq.md) for troubleshooting.
|
|
809
|
-
|
|
810
|
-
### For AI / LLM Prompts
|
|
811
|
-
|
|
812
|
-
These templates are optimized for AI consumption:
|
|
813
|
-
|
|
814
|
-
```
|
|
815
|
-
Build a Versori connector that receives SFCC XML orders via HTTP webhook
|
|
816
|
-
and creates orders in Fluent Commerce.
|
|
817
|
-
|
|
818
|
-
Context: Use patterns from docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md
|
|
819
|
-
```
|
|
820
|
-
|
|
821
|
-
AI gets **focused context** without API reference overload.
|
|
822
|
-
|
|
823
|
-
---
|
|
824
|
-
|
|
825
|
-
## ✅ What's Included in Each Template
|
|
826
|
-
|
|
827
|
-
Every template provides:
|
|
828
|
-
|
|
829
|
-
- ✅ **Complete working code** (400-800 lines)
|
|
830
|
-
- ✅ **Real SDK methods** with proper usage
|
|
831
|
-
- ✅ **Production patterns** from actual connectors
|
|
832
|
-
- ✅ **Environment setup** and configuration
|
|
833
|
-
- ✅ **Testing instructions** with sample data
|
|
834
|
-
- ✅ **Deployment options** (Docker, Lambda, cron, etc.)
|
|
835
|
-
- ✅ **Common issues** with solutions
|
|
836
|
-
- ✅ **Related guides** for deeper dives
|
|
837
|
-
|
|
838
|
-
---
|
|
839
|
-
|
|
840
|
-
## 🚀 Quick Start Examples
|
|
841
|
-
|
|
842
|
-
### Versori HTTP Webhook
|
|
843
|
-
|
|
844
|
-
```typescript
|
|
845
|
-
import { createClient, GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
846
|
-
|
|
847
|
-
export default async function processOrder(ctx) {
|
|
848
|
-
const client = await createClient(ctx); // Auto-detects Versori context
|
|
849
|
-
const mapper = new GraphQLMutationMapper(mappingConfig, ctx.log, { fluentClient: client });
|
|
850
|
-
const result = await mapper.mapWithNodes(ctx.body, customResolvers);
|
|
851
|
-
|
|
852
|
-
// Check success (errors are returned, not thrown)
|
|
853
|
-
if (!result.success) {
|
|
854
|
-
throw new Error(`Mapping failed: ${result.errors?.join(', ')}`);
|
|
855
|
-
}
|
|
856
|
-
|
|
857
|
-
// Execute mutation (query is auto-generated in result)
|
|
858
|
-
return await client.graphql({
|
|
859
|
-
query: result.query,
|
|
860
|
-
variables: result.variables // ✅ Use variables (wrapped if fields pattern)
|
|
861
|
-
});
|
|
862
|
-
}
|
|
863
|
-
```
|
|
864
|
-
|
|
865
|
-
### Standalone Node.js Script
|
|
866
|
-
|
|
867
|
-
```typescript
|
|
868
|
-
import { createClient, S3DataSource, UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
869
|
-
|
|
870
|
-
const client = await createClient({
|
|
871
|
-
config: {
|
|
872
|
-
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
873
|
-
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
874
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
875
|
-
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
876
|
-
},
|
|
877
|
-
});
|
|
878
|
-
|
|
879
|
-
const s3Source = new S3DataSource(config, logger);
|
|
880
|
-
const mapper = new UniversalMapper(mappingConfig);
|
|
881
|
-
const files = await s3Source.listFiles();
|
|
882
|
-
// ... process files
|
|
883
|
-
```
|
|
884
|
-
|
|
885
|
-
---
|
|
886
|
-
|
|
887
|
-
## 📚 Additional Resources
|
|
888
|
-
|
|
889
|
-
- **[FAQ - Troubleshooting](faq.md)** - Consolidated solutions to common issues
|
|
890
|
-
- **[API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md)** - Complete SDK method reference
|
|
891
|
-
- **[SDK Philosophy](../00-START-HERE/sdk-philosophy.md)** - Design principles
|
|
892
|
-
- **[Complete Documentation](../readme.md)** - All guides and references
|
|
893
|
-
|
|
894
|
-
---
|
|
895
|
-
|
|
896
|
-
## 🎓 Learning Path
|
|
897
|
-
|
|
898
|
-
**New to SDK?**
|
|
899
|
-
|
|
900
|
-
1. Start with [SDK Philosophy](../00-START-HERE/sdk-philosophy.md)
|
|
901
|
-
2. Read [Getting Started](../00-START-HERE/getting-started.md)
|
|
902
|
-
3. Pick a **Standalone** template (simpler, no Versori)
|
|
903
|
-
4. Try a **Versori** template if deploying to Versori
|
|
904
|
-
5. Use **Pattern** guides for specific concepts
|
|
905
|
-
|
|
906
|
-
**Building Connectors?**
|
|
907
|
-
|
|
908
|
-
1. Pick matching use case template
|
|
909
|
-
2. Review **Pattern** guides for concepts
|
|
910
|
-
3. Check [API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md) for details
|
|
911
|
-
4. Deploy and monitor
|
|
912
|
-
|
|
913
|
-
---
|
|
914
|
-
|
|
915
|
-
## 📊 Template Statistics
|
|
916
|
-
|
|
917
|
-
- **38+ Total Templates**
|
|
918
|
-
- 20 Versori Platform templates
|
|
919
|
-
- 7 Webhook-triggered workflows
|
|
920
|
-
- 6 Scheduled workflows (Batch API)
|
|
921
|
-
- 8 Event API templates
|
|
922
|
-
- 9 GraphQL mutation templates
|
|
923
|
-
- 3 Versori patterns
|
|
924
|
-
- 4 Business use case examples
|
|
925
|
-
- 9 Standalone Node.js/Deno templates
|
|
926
|
-
- 9 Reusable Pattern guides
|
|
927
|
-
- **~15,000+ lines** of production-ready code
|
|
928
|
-
- **100% tested** patterns from real connectors
|
|
929
|
-
- **Organized by trigger type** for easy navigation
|
|
930
|
-
|
|
931
|
-
---
|
|
932
|
-
|
|
933
|
-
## 🆘 Still Can't Decide?
|
|
934
|
-
|
|
935
|
-
### Answer These Questions:
|
|
936
|
-
|
|
937
|
-
1. **Runtime**: Versori or Standalone?
|
|
938
|
-
2. **Direction**: Ingestion (IN) or Extraction (OUT)?
|
|
939
|
-
3. **Trigger**: Webhook, Schedule, or Manual?
|
|
940
|
-
4. **Format**: CSV, XML, JSON, or Parquet?
|
|
941
|
-
5. **Complexity**: Simple, Medium, or High?
|
|
942
|
-
|
|
943
|
-
**Then use the decision tree above to find your template!**
|
|
944
|
-
|
|
945
|
-
---
|
|
946
|
-
|
|
947
|
-
## 🆘 Need Help?
|
|
948
|
-
|
|
949
|
-
- **Issues**: [GitHub Issues](https://github.com/fluentcommerce/fc-connect-sdk/issues)
|
|
950
|
-
- **Documentation**: [Complete Docs](../readme.md)
|
|
951
|
-
- **API Reference**: [API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md)
|
|
952
|
-
- **Troubleshooting**: [FAQ](faq.md)
|
|
953
|
-
- **Examples**: Check individual template files
|
|
954
|
-
|
|
955
|
-
---
|
|
956
|
-
|
|
957
|
-
*Last Updated: 2025-01-27*
|
|
1
|
+
# FC Connect SDK - Template Guides
|
|
2
|
+
|
|
3
|
+
**Complete catalog of production-ready templates** for building Fluent Commerce integrations.
|
|
4
|
+
|
|
5
|
+
Last Updated: 2025-01-27
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🎯 Quick Decision Tree
|
|
10
|
+
|
|
11
|
+
**Not sure which template to use?** Follow this flowchart:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
START: What do you want to build?
|
|
15
|
+
│
|
|
16
|
+
├─ I need a PATTERN (concept/technique) ────────────────────────┐
|
|
17
|
+
│ │
|
|
18
|
+
├─ I'm building for VERSORI PLATFORM ────────────────────────────┤
|
|
19
|
+
│ │
|
|
20
|
+
└─ I'm building STANDALONE (Node.js/Deno) ───────────────────────┤
|
|
21
|
+
│
|
|
22
|
+
▼
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 1️⃣ What Runtime Are You Using?
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
29
|
+
│ Where will your integration run? │
|
|
30
|
+
└──────────────────────────────────────────────────────────────┘
|
|
31
|
+
│
|
|
32
|
+
┌─────────────────┼─────────────────┐
|
|
33
|
+
│ │ │
|
|
34
|
+
▼ ▼ ▼
|
|
35
|
+
VERSORI STANDALONE JUST A
|
|
36
|
+
PLATFORM NODE.JS/DENO PATTERN
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 🅰️ Versori Platform Templates
|
|
42
|
+
|
|
43
|
+
### Webhook-Triggered Workflows (7)
|
|
44
|
+
|
|
45
|
+
#### XML Order Ingestion
|
|
46
|
+
**File**: [`versori/webhooks/template-webhook-xml-order-ingestion.md`](versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
47
|
+
|
|
48
|
+
**Description**: Build a Versori HTTP webhook that receives SFCC/Radial XML orders and creates orders in Fluent Commerce using GraphQL mutations. Includes nodes processing for nested XML extraction, custom resolvers with async API calls, and complete audit trail.
|
|
49
|
+
|
|
50
|
+
**Complexity**: Medium | **Lines**: ~500
|
|
51
|
+
|
|
52
|
+
**SDK Methods**:
|
|
53
|
+
- `createClient(ctx)` - Versori context auto-detected
|
|
54
|
+
- `GraphQLMutationMapper(config, logger, { fluentClient, customResolvers })` - XML → GraphQL mapping
|
|
55
|
+
- `mapper.mapWithNodes(data)` - Process nodes config (resolvers from constructor)
|
|
56
|
+
- `mapWithNodes()` returns query automatically (no need for buildMutation())
|
|
57
|
+
- `client.graphql({ query, variables })` - Execute mutation
|
|
58
|
+
|
|
59
|
+
**Key Patterns**:
|
|
60
|
+
- Versori connection setup with auto-authentication
|
|
61
|
+
- Nodes configuration (extracting nested/escaped XML)
|
|
62
|
+
- Custom resolvers with context and async API calls
|
|
63
|
+
- GraphQL mutation generation and execution
|
|
64
|
+
- Error handling with structured responses
|
|
65
|
+
|
|
66
|
+
**Use When**: Receiving XML webhooks (SFCC, Radial, custom), need to extract nested XML documents, transforming XML to Fluent orders/entities
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
#### Generic XML Order
|
|
71
|
+
**File**: [`versori/webhooks/template-webhook-generic-xml-order.md`](versori/webhooks/template-webhook-generic-xml-order.md)
|
|
72
|
+
|
|
73
|
+
**Description**: Generic, vendor-agnostic XML order ingestion via Versori webhook using `GraphQLMutationMapper`. Includes optional nodes extraction, custom resolvers, audit trail, and robust error handling.
|
|
74
|
+
|
|
75
|
+
**Complexity**: Medium | **Lines**: ~450
|
|
76
|
+
|
|
77
|
+
**Use When**: Any XML order format (not SFCC-specific)
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
#### ASN/Purchase Order
|
|
82
|
+
**File**: [`versori/webhooks/template-webhook-asn-purchase-order.md`](versori/webhooks/template-webhook-asn-purchase-order.md)
|
|
83
|
+
|
|
84
|
+
**Description**: Advanced Shipping Notice (ASN) webhook processing with purchase order matching, shipment tracking, and inventory receiving workflows.
|
|
85
|
+
|
|
86
|
+
**Complexity**: Medium | **Lines**: ~600
|
|
87
|
+
|
|
88
|
+
**Use When**: Processing Advanced Shipping Notices
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
#### Dropship Routing
|
|
93
|
+
**File**: [`versori/webhooks/template-webhook-dropship-routing.md`](versori/webhooks/template-webhook-dropship-routing.md)
|
|
94
|
+
|
|
95
|
+
**Description**: Supplier selection logic, PO submission, fallback to warehouse, and order status updates for dropship fulfillment.
|
|
96
|
+
|
|
97
|
+
**Complexity**: High | **Lines**: ~700
|
|
98
|
+
|
|
99
|
+
**Use When**: Routing orders to suppliers with fallback
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
#### Flash Sale Inventory Reserve
|
|
104
|
+
**File**: [`versori/webhooks/template-webhook-flash-sale-reserve.md`](versori/webhooks/template-webhook-flash-sale-reserve.md)
|
|
105
|
+
|
|
106
|
+
**Description**: Time-bound inventory reservations, distributed locking, real-time decrement pattern, and periodic reconciliation for flash sales.
|
|
107
|
+
|
|
108
|
+
**Complexity**: High | **Lines**: ~700
|
|
109
|
+
|
|
110
|
+
**SDK Methods**:
|
|
111
|
+
- `createClient(ctx)`
|
|
112
|
+
- `VersoriKVAdapter` - Distributed locking
|
|
113
|
+
- `StateService` - Reservation tracking
|
|
114
|
+
- Custom resolvers (time-bound checks, quantity validation)
|
|
115
|
+
|
|
116
|
+
**Key Patterns**:
|
|
117
|
+
- Time-bound reservations (expiry logic)
|
|
118
|
+
- Distributed locking (prevent overselling)
|
|
119
|
+
- Real-time inventory decrement
|
|
120
|
+
- Periodic reconciliation workflow
|
|
121
|
+
|
|
122
|
+
**Use When**: Managing high-velocity flash sale inventory
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
#### RMA/Returns Processing (Comprehensive)
|
|
127
|
+
**File**: [`versori/webhooks/template-webhook-rma-returns-comprehensive.md`](versori/webhooks/template-webhook-rma-returns-comprehensive.md)
|
|
128
|
+
|
|
129
|
+
**Description**: Complete RMA lifecycle: return initiation → RMA creation → shipping label → quality inspection → refund/exchange → inventory restock. Includes 5 separate webhooks for full workflow.
|
|
130
|
+
|
|
131
|
+
**Complexity**: Medium-High | **Lines**: ~1700
|
|
132
|
+
|
|
133
|
+
**Webhooks**:
|
|
134
|
+
1. `createRmaFromReturn` - Creates RMA from return request
|
|
135
|
+
2. `trackReturnShipment` - Tracks return shipment
|
|
136
|
+
3. `qualityInspection` - Processes warehouse inspection
|
|
137
|
+
4. `processRefundOrExchange` - Handles refund/exchange
|
|
138
|
+
5. `getRmaStatus` - Query endpoint for RMA status
|
|
139
|
+
|
|
140
|
+
**Use When**: Full return/exchange workflow
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
#### Payment Gateway Integration (Adyen)
|
|
145
|
+
**File**: [`versori/webhooks/template-webhook-payment-gateway-integration.md`](versori/webhooks/template-webhook-payment-gateway-integration.md)
|
|
146
|
+
|
|
147
|
+
**Description**: Complete payment gateway integration with 4 webhooks: Capture, Refund, Auth Cancel, and ReAuth. Modular architecture allows easy swapping of payment providers (Adyen → Stripe).
|
|
148
|
+
|
|
149
|
+
**Complexity**: Medium-High | **Lines**: ~1500
|
|
150
|
+
|
|
151
|
+
**SDK Methods**:
|
|
152
|
+
- `createClient(ctx)` - Versori context auto-detected
|
|
153
|
+
- `client.setRetailerId()` - Required for Event API
|
|
154
|
+
- `client.sendEvent()` - Send events to Fluent Commerce Event API
|
|
155
|
+
- `VersoriKVAdapter(ctx.openKv(':project:'))` - Idempotency tracking
|
|
156
|
+
|
|
157
|
+
**Key Patterns**:
|
|
158
|
+
- Payment provider abstraction (easy to swap Adyen → Stripe)
|
|
159
|
+
- Trigger source validation (ORDER_FULFILLMENT vs PAYMENT_ENTITY)
|
|
160
|
+
- Shared services (webhook validation, event sending, idempotency)
|
|
161
|
+
- Event mapping (payment provider → Fluent event format)
|
|
162
|
+
|
|
163
|
+
**Use When**: Integrating payment gateways (Adyen, Stripe, PayPal)
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### Scheduled Workflows (6)
|
|
168
|
+
|
|
169
|
+
#### CSV Inventory Sync (S3)
|
|
170
|
+
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md`](versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md)
|
|
171
|
+
|
|
172
|
+
**Description**: Build a Versori scheduled workflow (cron-based) that reads inventory CSV files from S3 and updates Fluent Commerce inventory via Batch API. Includes VersoriKV state management for duplicate prevention and file archival.
|
|
173
|
+
|
|
174
|
+
**Complexity**: Medium | **Lines**: ~600
|
|
175
|
+
|
|
176
|
+
**SDK Methods**:
|
|
177
|
+
- `createClient(ctx)` - Versori client
|
|
178
|
+
- `S3DataSource(config, logger)` - S3 operations
|
|
179
|
+
- `UniversalMapper(mappingConfig)` - Field transformations
|
|
180
|
+
- `mapper.map(record)` - Transform record
|
|
181
|
+
- `client.createJob({ name, retailerId })` - Create Batch job
|
|
182
|
+
- `client.sendBatch(jobId, { entities })` - Send inventory batch
|
|
183
|
+
- `VersoriKVAdapter(openKv())` - State management
|
|
184
|
+
- `VersoriFileTracker` - File tracking
|
|
185
|
+
|
|
186
|
+
**Key Patterns**:
|
|
187
|
+
- Versori scheduled triggers (cron expressions)
|
|
188
|
+
- S3 file operations (list, download, archive)
|
|
189
|
+
- UniversalMapper with SDK resolvers
|
|
190
|
+
- Batch API processing with chunking
|
|
191
|
+
- VersoriKV state management (duplicate prevention)
|
|
192
|
+
- File archival after processing
|
|
193
|
+
|
|
194
|
+
**Use When**: Scheduled inventory sync (daily, hourly), reading CSV from S3, need duplicate prevention
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
#### SFTP CSV Ingestion
|
|
199
|
+
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md`](versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md)
|
|
200
|
+
|
|
201
|
+
**Description**: Scheduled/manual ingestion from SFTP CSV with `CSVParserService` and `UniversalMapper`, duplicate prevention with `VersoriFileTracker`, and robust retry/backoff for downloads and batch sends.
|
|
202
|
+
|
|
203
|
+
**Complexity**: Medium | **Lines**: ~700
|
|
204
|
+
|
|
205
|
+
**SDK Methods**:
|
|
206
|
+
- `createClient(ctx)`
|
|
207
|
+
- `SftpDataSource.listFiles`, `downloadFile`, `moveFile`
|
|
208
|
+
- `CSVParserService.parse`
|
|
209
|
+
- `UniversalMapper.map`
|
|
210
|
+
- `VersoriFileTracker`, `VersoriKVAdapter`, `StateService`
|
|
211
|
+
- `client.createJob`, `client.sendBatch`
|
|
212
|
+
|
|
213
|
+
**Key Patterns**:
|
|
214
|
+
- SFTP connection and file operations
|
|
215
|
+
- CSV parsing with validation
|
|
216
|
+
- File tracking and duplicate prevention
|
|
217
|
+
- Retry logic with exponential backoff
|
|
218
|
+
- File archival (processed/error folders)
|
|
219
|
+
|
|
220
|
+
**Use When**: Scheduled SFTP polling for CSV files
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
#### Cycle Count Reconciliation
|
|
225
|
+
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md`](versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md)
|
|
226
|
+
|
|
227
|
+
**Description**: Scheduled cycle count import with variance detection, adjustment workflows, and reporting.
|
|
228
|
+
|
|
229
|
+
**Complexity**: Medium | **Lines**: ~650
|
|
230
|
+
|
|
231
|
+
**Use When**: Scheduled cycle count imports with variance handling
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
#### Multi-Channel Inventory Sync
|
|
236
|
+
**File**: [`versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md`](versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md)
|
|
237
|
+
|
|
238
|
+
**Description**: ATP computation, channel-specific allocation rules, delta sync optimization, and rate-limit handling for multi-channel inventory distribution.
|
|
239
|
+
|
|
240
|
+
**Complexity**: High | **Lines**: ~750
|
|
241
|
+
|
|
242
|
+
**SDK Methods**:
|
|
243
|
+
- `createClient(ctx)`
|
|
244
|
+
- `client.graphql` - Query inventory
|
|
245
|
+
- `UniversalMapper` - Transform for channels
|
|
246
|
+
- Channel-specific custom resolvers
|
|
247
|
+
- Rate limiting logic
|
|
248
|
+
|
|
249
|
+
**Key Patterns**:
|
|
250
|
+
- ATP (Available-To-Promise) calculation
|
|
251
|
+
- Channel allocation rules
|
|
252
|
+
- Delta sync (only changed inventory)
|
|
253
|
+
- Rate limiting per channel
|
|
254
|
+
- Multi-channel distribution
|
|
255
|
+
|
|
256
|
+
**Use When**: Distributing inventory across multiple sales channels
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
#### Event API Templates
|
|
261
|
+
**File**: [`versori/workflows/ingestion/event-api/`](versori/workflows/ingestion/event-api/)
|
|
262
|
+
|
|
263
|
+
**Description**: Product, location, and control entity ingestion via Event API with GraphQL mutations. Supports CSV, JSON, XML, and Parquet formats from S3 and SFTP sources.
|
|
264
|
+
|
|
265
|
+
**Available Templates**:
|
|
266
|
+
- S3 CSV Product Event → [`template-ingestion-s3-csv-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md)
|
|
267
|
+
- SFTP CSV Product Event → [`template-ingestion-sftp-csv-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md)
|
|
268
|
+
- S3 JSON Product Event → [`template-ingestion-s3-json-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md)
|
|
269
|
+
- SFTP JSON Product Event → [`template-ingestion-sftp-json-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md)
|
|
270
|
+
- S3 XML Product Event → [`template-ingestion-s3-xml-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md)
|
|
271
|
+
- SFTP XML Product Event → [`template-ingestion-sftp-xml-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md)
|
|
272
|
+
- S3 Parquet Product Event → [`template-ingestion-s3-parquet-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md)
|
|
273
|
+
- SFTP Parquet Product Event → [`template-ingestion-sftp-parquet-product-event.md`](versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md)
|
|
274
|
+
|
|
275
|
+
**Complexity**: Medium | **Lines**: ~550-700
|
|
276
|
+
|
|
277
|
+
**Use When**: Ingesting products, locations, or control entities via Event API
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
#### GraphQL Mutation Templates
|
|
282
|
+
**File**: [`versori/workflows/ingestion/graphql-mutations/`](versori/workflows/ingestion/graphql-mutations/)
|
|
283
|
+
|
|
284
|
+
**Description**: Direct GraphQL mutation templates for creating/updating locations, prices, and control entities.
|
|
285
|
+
|
|
286
|
+
**Available Templates**:
|
|
287
|
+
- S3 CSV Location GraphQL → [`template-ingestion-s3-csv-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md)
|
|
288
|
+
- SFTP CSV Location GraphQL → [`template-ingestion-sftp-csv-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md)
|
|
289
|
+
- S3 JSON Location GraphQL → [`template-ingestion-s3-json-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md)
|
|
290
|
+
- SFTP JSON Location GraphQL → [`template-ingestion-sftp-json-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md)
|
|
291
|
+
- S3 XML Location GraphQL → [`template-ingestion-s3-xml-location-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md)
|
|
292
|
+
- S3 CSV Price GraphQL → [`template-ingestion-s3-csv-price-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md)
|
|
293
|
+
- S3 CSV Control GraphQL → [`template-ingestion-s3-csv-control-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md)
|
|
294
|
+
- SFTP CSV Control GraphQL → [`template-ingestion-sftp-csv-control-graphql.md`](versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md)
|
|
295
|
+
|
|
296
|
+
**Complexity**: Medium | **Lines**: ~600-800
|
|
297
|
+
|
|
298
|
+
**Use When**: Direct GraphQL mutations for entities not supported by Event API
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### Versori Patterns (3)
|
|
303
|
+
|
|
304
|
+
#### KV State Management
|
|
305
|
+
**File**: [`versori/patterns/kv-state-management.md`](versori/patterns/kv-state-management.md)
|
|
306
|
+
|
|
307
|
+
**Description**: Comprehensive guide on using Versori KV storage for state management, duplicate prevention, checkpoints, and file tracking. Includes 6 complete patterns from simple file tracking to advanced indexed tracking.
|
|
308
|
+
|
|
309
|
+
**Complexity**: Low-Medium | **Lines**: ~400
|
|
310
|
+
|
|
311
|
+
**SDK Methods**:
|
|
312
|
+
- `VersoriKVAdapter(openKv())` - Wrap Versori KV
|
|
313
|
+
- `VersoriFileTracker(kvAdapter)` - Track files
|
|
314
|
+
- `StateService(kvAdapter)` - High-level state operations
|
|
315
|
+
- `stateService.isFileProcessed(key)` - Check if processed
|
|
316
|
+
- `stateService.markFileProcessed(key, metadata)` - Mark complete
|
|
317
|
+
- `stateService.saveCheckpoint(key, data)` - Save checkpoint
|
|
318
|
+
- `stateService.getCheckpoint(key)` - Restore checkpoint
|
|
319
|
+
|
|
320
|
+
**Key Patterns**:
|
|
321
|
+
- Simple file duplicate prevention
|
|
322
|
+
- Distributed locking (prevent concurrent workflows)
|
|
323
|
+
- Checkpoint & resume (long-running workflows)
|
|
324
|
+
- Daily job management (reuse jobs)
|
|
325
|
+
- Error state management (retry logic)
|
|
326
|
+
- Advanced indexed tracking (list files)
|
|
327
|
+
|
|
328
|
+
**Use When**: Preventing duplicate file processing, need checkpoint/resume capabilities, distributed workflow coordination
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
#### XML Response Patterns
|
|
333
|
+
**File**: [`versori/patterns/xml-response-patterns.md`](versori/patterns/xml-response-patterns.md)
|
|
334
|
+
|
|
335
|
+
**Description**: CRITICAL guide on returning non-JSON content (XML, HTML, CSV) from Versori webhooks using custom Response objects.
|
|
336
|
+
|
|
337
|
+
**Complexity**: Low-Medium | **Lines**: ~300
|
|
338
|
+
|
|
339
|
+
**SDK Methods**:
|
|
340
|
+
- `webhook('name', { response: { mode, onSuccess, onError } })` - Custom handlers
|
|
341
|
+
- `XMLBuilder(options)` - Build XML responses
|
|
342
|
+
- `builder.build(data)` - Generate XML string
|
|
343
|
+
- `new Response(body, { status, headers })` - Custom response objects
|
|
344
|
+
|
|
345
|
+
**Key Patterns**:
|
|
346
|
+
- Why custom Response objects are needed (JSON encoding problem)
|
|
347
|
+
- onSuccess handler pattern (return Response)
|
|
348
|
+
- onError handler pattern (error responses)
|
|
349
|
+
- Content-Type headers (application/xml, text/html, text/csv)
|
|
350
|
+
|
|
351
|
+
**Use When**: Returning XML responses (SOAP, RSS, custom), HTML status pages, CSV downloads, CRITICAL for SFCC order detail responses
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
#### Dual Workflow Connector
|
|
356
|
+
**File**: [`versori/patterns/dual-workflow-connector.md`](versori/patterns/dual-workflow-connector.md)
|
|
357
|
+
|
|
358
|
+
**Description**: Build a complete Versori connector with multiple workflows (ingestion + extraction), shared resolvers, proper index.ts structure, and package.json configuration.
|
|
359
|
+
|
|
360
|
+
**Complexity**: Medium | **Lines**: ~500
|
|
361
|
+
|
|
362
|
+
**Key Patterns**:
|
|
363
|
+
- Multi-workflow index structure (clean exports)
|
|
364
|
+
- Shared resolvers library (domain-organized)
|
|
365
|
+
- Bidirectional data flow (ingestion vs extraction)
|
|
366
|
+
- Package.json configuration (Versori-specific)
|
|
367
|
+
- Testing multi-workflow connectors
|
|
368
|
+
|
|
369
|
+
**Use When**: Building complete bidirectional integration, multiple workflows sharing code, production Versori connector
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
### Business Use Case Examples (4)
|
|
374
|
+
|
|
375
|
+
#### GraphQL → Parquet Extraction
|
|
376
|
+
**File**: [`versori/business-examples/graphql-parquet-extraction.md`](versori/business-examples/graphql-parquet-extraction.md)
|
|
377
|
+
|
|
378
|
+
**Description**: Scheduled/manual Versori workflow that extracts via GraphQL with auto-pagination, transforms with `UniversalMapper`, partitions by date/entity/size, and uploads Parquet parts to S3 with incremental KV state.
|
|
379
|
+
|
|
380
|
+
**Complexity**: Medium | **Lines**: ~600
|
|
381
|
+
|
|
382
|
+
**SDK Methods**:
|
|
383
|
+
- `createClient(ctx)` with Versori connection
|
|
384
|
+
- `client.graphql({ pagination })`
|
|
385
|
+
- `UniversalMapper`
|
|
386
|
+
- `VersoriKVAdapter`, `StateService`
|
|
387
|
+
- `S3DataSource.writeParquetContent`, `S3DataSource.uploadFile`
|
|
388
|
+
|
|
389
|
+
**Key Patterns**:
|
|
390
|
+
- Auto-pagination extraction
|
|
391
|
+
- Data transformation with UniversalMapper
|
|
392
|
+
- Parquet file generation
|
|
393
|
+
- Partitioning strategies (date, entity, size)
|
|
394
|
+
- Incremental state tracking
|
|
395
|
+
|
|
396
|
+
**Use When**: Extracting data from Fluent to data warehouse
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
#### Dropship Order Routing
|
|
401
|
+
**File**: [`versori/business-examples/dropship-order-routing.md`](versori/business-examples/dropship-order-routing.md)
|
|
402
|
+
|
|
403
|
+
**Description**: Intelligent supplier selection with fallback logic and complete order orchestration workflow.
|
|
404
|
+
|
|
405
|
+
**Complexity**: High | **Lines**: ~700
|
|
406
|
+
|
|
407
|
+
**Use When**: Complex dropship routing with fallback logic
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
#### Inter-Location Transfers
|
|
412
|
+
**File**: [`versori/business-examples/inter-location-transfers.md`](versori/business-examples/inter-location-transfers.md)
|
|
413
|
+
|
|
414
|
+
**Description**: Transfer order creation, fulfillment workflow, and receiving processes for inter-location inventory movement.
|
|
415
|
+
|
|
416
|
+
**Complexity**: Medium-High | **Lines**: ~650
|
|
417
|
+
|
|
418
|
+
**Use When**: Moving inventory between locations
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
#### Pre-Order Allocation
|
|
423
|
+
**File**: [`versori/business-examples/pre-order-allocation.md`](versori/business-examples/pre-order-allocation.md)
|
|
424
|
+
|
|
425
|
+
**Description**: Pre-order reservation system, allocation rules engine, and fulfillment on inventory availability.
|
|
426
|
+
|
|
427
|
+
**Complexity**: High | **Lines**: ~750
|
|
428
|
+
|
|
429
|
+
**SDK Methods**:
|
|
430
|
+
- `createClient(ctx)`
|
|
431
|
+
- `VersoriKVAdapter` - Reservation tracking
|
|
432
|
+
- Allocation rules engine
|
|
433
|
+
- Fulfillment triggers
|
|
434
|
+
|
|
435
|
+
**Use When**: Managing pre-orders with allocation logic
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## 🅱️ Standalone Node.js / Deno Templates
|
|
440
|
+
|
|
441
|
+
### Ingestion (External → Fluent)
|
|
442
|
+
|
|
443
|
+
#### S3 CSV → Batch API
|
|
444
|
+
**File**: [`standalone/s3-csv-batch-api.md`](standalone/s3-csv-batch-api.md)
|
|
445
|
+
|
|
446
|
+
**Description**: Read CSV inventory files from S3, transform with `UniversalMapper`, and update Fluent via Batch API with chunking and archival.
|
|
447
|
+
|
|
448
|
+
**Complexity**: Medium | **Lines**: ~450-500
|
|
449
|
+
|
|
450
|
+
**SDK Methods**:
|
|
451
|
+
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })`
|
|
452
|
+
- `S3DataSource`, `CSVParserService`, `UniversalMapper`
|
|
453
|
+
- `client.createJob`, `client.sendBatch`
|
|
454
|
+
|
|
455
|
+
**Use When**: Simple S3 CSV ingestion with field mapping
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
#### SFTP XML → GraphQL Mutation
|
|
460
|
+
**File**: [`standalone/sftp-xml-graphql.md`](standalone/sftp-xml-graphql.md)
|
|
461
|
+
|
|
462
|
+
**Description**: Standalone Node.js script that reads XML order files from SFTP and creates orders in Fluent Commerce using GraphQL mutations. Includes SFTP connection, XML parsing, and file archival.
|
|
463
|
+
|
|
464
|
+
**Complexity**: Medium | **Lines**: ~600
|
|
465
|
+
|
|
466
|
+
**SDK Methods**:
|
|
467
|
+
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2
|
|
468
|
+
- `SftpDataSource(config, logger)` - SFTP operations
|
|
469
|
+
- `XMLParserService` - XML parsing
|
|
470
|
+
- `GraphQLMutationMapper(config, logger, { fluentClient, customResolvers })` - XML → GraphQL
|
|
471
|
+
- `mapper.mapWithNodes(xmlData)` - Transform with custom resolvers (from constructor)
|
|
472
|
+
- `mapper.map(xmlData)` - Transform without custom resolvers (built-in SDK resolvers only)
|
|
473
|
+
- `client.graphql({ query, variables })` - Execute mutation
|
|
474
|
+
|
|
475
|
+
**Key Patterns**:
|
|
476
|
+
- SFTP connection & file operations
|
|
477
|
+
- XML parsing & validation
|
|
478
|
+
- GraphQL mutation mapping
|
|
479
|
+
- Custom resolvers for complex logic
|
|
480
|
+
- File management (archive/error folders)
|
|
481
|
+
|
|
482
|
+
**Deployment**: Local, Docker, Cron/Systemd
|
|
483
|
+
|
|
484
|
+
**Use When**: Polling SFTP for XML orders
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
#### Webhook Payload Processing
|
|
489
|
+
**File**: [`standalone/webhook-payload-processing.md`](standalone/webhook-payload-processing.md)
|
|
490
|
+
|
|
491
|
+
**Description**: Process stored webhook payloads offline with signature validation, payload parsing, and file-based queue.
|
|
492
|
+
|
|
493
|
+
**Complexity**: Low-Medium | **Lines**: ~250
|
|
494
|
+
|
|
495
|
+
**Use When**: Processing stored webhook payloads offline
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
#### ASN Inbound Processing
|
|
500
|
+
**File**: [`standalone/asn-inbound-processing.md`](standalone/asn-inbound-processing.md)
|
|
501
|
+
|
|
502
|
+
**Description**: Process Advanced Shipping Notice (ASN) files with PO matching and inventory updates.
|
|
503
|
+
|
|
504
|
+
**Complexity**: Medium | **Lines**: ~500
|
|
505
|
+
|
|
506
|
+
**Use When**: Processing inbound shipment notices
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
### Extraction (Fluent → External)
|
|
511
|
+
|
|
512
|
+
#### GraphQL Query → Parquet Export
|
|
513
|
+
**File**: [`standalone/graphql-query-export.md`](standalone/graphql-query-export.md)
|
|
514
|
+
|
|
515
|
+
**Description**: Standalone Node.js script that extracts inventory/orders from Fluent Commerce via GraphQL queries and exports to S3 as Parquet files. Includes auto-pagination and incremental extraction.
|
|
516
|
+
|
|
517
|
+
**Complexity**: Medium | **Lines**: ~500
|
|
518
|
+
|
|
519
|
+
**SDK Methods**:
|
|
520
|
+
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2
|
|
521
|
+
- `client.graphql({ query, variables })` - Execute GraphQL query
|
|
522
|
+
- `detectPaginationVariables(query)` - Auto-detect pagination
|
|
523
|
+
- `hasMorePages(response)` - Check for next page
|
|
524
|
+
- `UniversalMapper(extractionConfig)` - Transform for export
|
|
525
|
+
- `ParquetParserService.write(data, outputPath)` - Generate Parquet
|
|
526
|
+
- `S3DataSource.uploadFile(path, buffer)` - Upload to S3
|
|
527
|
+
|
|
528
|
+
**Deployment**: Local, Scheduled (cron), AWS Lambda
|
|
529
|
+
|
|
530
|
+
**Use When**: Extracting inventory/orders to S3 as Parquet
|
|
531
|
+
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
#### GraphQL → Partitioned Parquet on S3
|
|
535
|
+
**File**: [`standalone/graphql-to-parquet-partitioned-s3.md`](standalone/graphql-to-parquet-partitioned-s3.md)
|
|
536
|
+
|
|
537
|
+
**Description**: Extract entities via GraphQL with auto-pagination, transform with `UniversalMapper`, and write multiple Parquet files to S3 with date/entity/size partitioning and incremental state.
|
|
538
|
+
|
|
539
|
+
**Complexity**: Medium | **Lines**: ~550
|
|
540
|
+
|
|
541
|
+
**SDK Methods**:
|
|
542
|
+
- `createClient`, `client.graphql({ pagination })`
|
|
543
|
+
- `UniversalMapper`
|
|
544
|
+
- `S3DataSource.writeParquetContent`, `S3DataSource.uploadFile`
|
|
545
|
+
|
|
546
|
+
**Key Patterns**:
|
|
547
|
+
- Auto-pagination extraction
|
|
548
|
+
- Data transformation with UniversalMapper
|
|
549
|
+
- Parquet file generation
|
|
550
|
+
- Partitioning strategies (date, entity, size)
|
|
551
|
+
- Incremental state tracking
|
|
552
|
+
|
|
553
|
+
**Use When**: Large-scale extraction with date/entity partitioning
|
|
554
|
+
|
|
555
|
+
---
|
|
556
|
+
|
|
557
|
+
### Complex Workflows
|
|
558
|
+
|
|
559
|
+
#### Multi-Source Aggregation
|
|
560
|
+
**File**: [`standalone/multi-source-aggregation.md`](standalone/multi-source-aggregation.md)
|
|
561
|
+
|
|
562
|
+
**Description**: Standalone Node.js script that aggregates inventory from multiple sources (SFTP CSV + S3 JSON), reconciles with Fluent Commerce current state, and updates differences. Includes comprehensive reporting.
|
|
563
|
+
|
|
564
|
+
**Complexity**: High | **Lines**: ~800
|
|
565
|
+
|
|
566
|
+
**SDK Methods**:
|
|
567
|
+
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2
|
|
568
|
+
- `SftpDataSource(...)` - SFTP operations
|
|
569
|
+
- `S3DataSource(...)` - S3 operations
|
|
570
|
+
- `CSVParserService` - Parse SFTP CSV
|
|
571
|
+
- `client.graphql({ query, variables })` - Query current inventory
|
|
572
|
+
- `UniversalMapper(...)` - Transform aggregated data
|
|
573
|
+
|
|
574
|
+
**Deployment**: Scheduled (hourly), Manual, Containerized
|
|
575
|
+
|
|
576
|
+
**Use When**: Combining inventory from multiple sources
|
|
577
|
+
|
|
578
|
+
---
|
|
579
|
+
|
|
580
|
+
#### Multi-Channel Inventory Sync
|
|
581
|
+
**File**: [`standalone/multi-channel-inventory-sync.md`](standalone/multi-channel-inventory-sync.md)
|
|
582
|
+
|
|
583
|
+
**Description**: Node.js script that aggregates Available-to-Promise (ATP) inventory from Fluent Commerce and pushes real-time updates to multiple marketplaces (Amazon, eBay, Walmart).
|
|
584
|
+
|
|
585
|
+
**Complexity**: High | **Lines**: ~950
|
|
586
|
+
|
|
587
|
+
**SDK Methods**:
|
|
588
|
+
- `createClient({ config: { baseUrl, clientId, clientSecret, retailerId } })` - OAuth2 client
|
|
589
|
+
- `client.graphql({ query, variables, pagination })` - Query with auto-pagination
|
|
590
|
+
- `UniversalMapper(mappingConfig)` - Transform Fluent data to marketplace formats
|
|
591
|
+
- `createConsoleLogger()` - Simple console logger
|
|
592
|
+
- `toStructuredLogger(logger, context)` - Add context to logs
|
|
593
|
+
- `generateCorrelationId()` - Generate unique correlation IDs
|
|
594
|
+
- State tracking for incremental updates
|
|
595
|
+
|
|
596
|
+
**Key Patterns**:
|
|
597
|
+
- GraphQL pagination → external marketplace APIs
|
|
598
|
+
- ATP (Available-to-Promise) aggregation across multiple locations
|
|
599
|
+
- Marketplace-specific buffer stock calculations
|
|
600
|
+
- Parallel marketplace updates with rate limiting
|
|
601
|
+
- Per-marketplace error handling and retry logic
|
|
602
|
+
- SLA tracking (15-minute sync requirement)
|
|
603
|
+
|
|
604
|
+
**Use When**: Standalone multi-channel distribution (different from Versori template - this pushes TO marketplaces)
|
|
605
|
+
|
|
606
|
+
---
|
|
607
|
+
|
|
608
|
+
## 🅲️ Pattern Guides (Reusable Concepts)
|
|
609
|
+
|
|
610
|
+
### Universal Field Mapping
|
|
611
|
+
**File**: [`patterns/field-mapping-universal.md`](patterns/field-mapping-universal.md)
|
|
612
|
+
|
|
613
|
+
**Description**: Focused guide on UniversalMapper for field transformations. Covers basic mapping, SDK resolvers, custom resolvers, nested fields, arrays, and error handling.
|
|
614
|
+
|
|
615
|
+
**Lines**: ~150-200
|
|
616
|
+
|
|
617
|
+
**SDK Methods**:
|
|
618
|
+
- `UniversalMapper(config)` - Create mapper
|
|
619
|
+
- `mapper.map(sourceData)` - Transform record
|
|
620
|
+
- SDK Resolvers: `sdk.*` prefix (15+ built-in)
|
|
621
|
+
- Custom resolvers: User-defined functions
|
|
622
|
+
|
|
623
|
+
**Patterns Covered**:
|
|
624
|
+
- Basic field mapping
|
|
625
|
+
- SDK resolver usage (string, number, date, type, utility)
|
|
626
|
+
- Custom resolver patterns (simple, helper-based, context-aware)
|
|
627
|
+
- Nested field mapping (dot notation)
|
|
628
|
+
- Array transformations
|
|
629
|
+
- Error handling in mapping
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
### Custom Resolvers
|
|
634
|
+
**File**: [`patterns/custom-resolvers.md`](patterns/custom-resolvers.md)
|
|
635
|
+
|
|
636
|
+
**Description**: Focused guide on writing custom resolvers. Covers 4-parameter signature, async resolvers, helper functions, and best practices.
|
|
637
|
+
|
|
638
|
+
**Lines**: ~100-150
|
|
639
|
+
|
|
640
|
+
**Resolver Signature**:
|
|
641
|
+
```typescript
|
|
642
|
+
(value, sourceData, helpers, config) => any | Promise<any>
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
**Helper Functions**:
|
|
646
|
+
- Path access (get, set)
|
|
647
|
+
- Type coercion (parseFloatSafe, parseIntSafe, parseBool)
|
|
648
|
+
- Date operations (formatDate, parseDate, addDays)
|
|
649
|
+
- Array operations (ensureArray, coalesce, groupBy)
|
|
650
|
+
- String operations (toCamelCase, toSnakeCase, template)
|
|
651
|
+
|
|
652
|
+
---
|
|
653
|
+
|
|
654
|
+
### Error Handling & Retry Strategies
|
|
655
|
+
**File**: [`patterns/error-handling-retry.md`](patterns/error-handling-retry.md)
|
|
656
|
+
|
|
657
|
+
**Description**: Focused guide on error handling and retry strategies. Covers try/catch, exponential backoff, circuit breaker, batch error isolation, and graceful degradation.
|
|
658
|
+
|
|
659
|
+
**Lines**: ~100-150
|
|
660
|
+
|
|
661
|
+
**SDK Error Classes**:
|
|
662
|
+
- `ConfigurationError` - Config validation
|
|
663
|
+
- `AggregateIngestionError` - Multiple failures
|
|
664
|
+
- `IngestionErrorFactory` - Create structured errors
|
|
665
|
+
|
|
666
|
+
**Patterns Covered**:
|
|
667
|
+
- Basic try/catch with logging
|
|
668
|
+
- Exponential backoff retry
|
|
669
|
+
- Circuit breaker pattern
|
|
670
|
+
- Batch error isolation
|
|
671
|
+
- Graceful degradation
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
### State Management & Duplicate Prevention
|
|
676
|
+
**File**: [`patterns/state-duplicate-prevention.md`](patterns/state-duplicate-prevention.md)
|
|
677
|
+
|
|
678
|
+
**Description**: Focused guide on state management and duplicate prevention. Covers file tracking, checkpoints, distributed locking, and idempotency.
|
|
679
|
+
|
|
680
|
+
**Lines**: ~100-150
|
|
681
|
+
|
|
682
|
+
**SDK Methods**:
|
|
683
|
+
- `StateService(kvAdapter)` - State management
|
|
684
|
+
- `VersoriKVAdapter(openKv())` - Versori KV wrapper
|
|
685
|
+
- `VersoriFileTracker` - File tracking
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
689
|
+
### Pagination & Streaming
|
|
690
|
+
**File**: [`patterns/pagination-streaming.md`](patterns/pagination-streaming.md)
|
|
691
|
+
|
|
692
|
+
**Description**: Focused guide on handling large datasets with pagination and streaming. Covers GraphQL auto-pagination, CSV/Parquet streaming, and memory optimization.
|
|
693
|
+
|
|
694
|
+
**Lines**: ~150-200
|
|
695
|
+
|
|
696
|
+
**SDK Methods**:
|
|
697
|
+
- `detectPaginationVariables(query)` - Auto-detect
|
|
698
|
+
- `hasMorePages(response)` - Check for next page
|
|
699
|
+
- `extractCursor(response)` - Get cursor
|
|
700
|
+
- `buildPaginationVariables(variables, cursor)` - Build next query
|
|
701
|
+
- CSV/Parquet streaming APIs
|
|
702
|
+
|
|
703
|
+
---
|
|
704
|
+
|
|
705
|
+
### CSV Schema Validation + Rejection Report
|
|
706
|
+
**File**: [`patterns/csv-schema-validation-and-rejection-report.md`](patterns/csv-schema-validation-and-rejection-report.md)
|
|
707
|
+
|
|
708
|
+
**Description**: Validate CSV headers and rows; generate a rejection report CSV and upload to S3. Fits into both S3 and SFTP ingestion flows before mapping.
|
|
709
|
+
|
|
710
|
+
**Complexity**: Low-Medium | **Lines**: ~220
|
|
711
|
+
|
|
712
|
+
---
|
|
713
|
+
|
|
714
|
+
### Large File Splitting
|
|
715
|
+
**File**: [`patterns/large-file-splitting.md`](patterns/large-file-splitting.md)
|
|
716
|
+
|
|
717
|
+
**Description**: Chunk large files for memory-efficient processing.
|
|
718
|
+
|
|
719
|
+
**Use When**: Handling files too large for memory
|
|
720
|
+
|
|
721
|
+
---
|
|
722
|
+
|
|
723
|
+
### Master Data ETL
|
|
724
|
+
**File**: [`patterns/master-data-etl.md`](patterns/master-data-etl.md)
|
|
725
|
+
|
|
726
|
+
**Description**: Generic patterns for products, locations, networks ingestion.
|
|
727
|
+
|
|
728
|
+
**Use When**: Master data ingestion best practices
|
|
729
|
+
|
|
730
|
+
---
|
|
731
|
+
|
|
732
|
+
## 🔍 Find Templates By Use Case
|
|
733
|
+
|
|
734
|
+
### I want to...
|
|
735
|
+
|
|
736
|
+
#### Import Inventory
|
|
737
|
+
- **From S3 CSV** → [S3 CSV Inventory Batch](versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md) (Versori) or [S3 CSV Batch API](standalone/s3-csv-batch-api.md) (Standalone)
|
|
738
|
+
- **From SFTP CSV** → [SFTP CSV Ingestion](versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md)
|
|
739
|
+
- **From Multiple Sources** → [Multi-Source Aggregation](standalone/multi-source-aggregation.md)
|
|
740
|
+
|
|
741
|
+
#### Import Orders
|
|
742
|
+
- **From XML Webhooks** → [XML Order Ingestion](versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
743
|
+
- **From SFTP XML** → [SFTP XML GraphQL](standalone/sftp-xml-graphql.md)
|
|
744
|
+
- **Generic XML** → [Generic XML Order](versori/webhooks/template-webhook-generic-xml-order.md)
|
|
745
|
+
|
|
746
|
+
#### Import Products/Locations
|
|
747
|
+
- **Event API** → [Event API Templates](versori/workflows/ingestion/event-api/)
|
|
748
|
+
- **GraphQL Mutations** → [GraphQL Mutation Templates](versori/workflows/ingestion/graphql-mutations/)
|
|
749
|
+
|
|
750
|
+
#### Export Data
|
|
751
|
+
- **To Parquet** → [GraphQL Query Export](standalone/graphql-query-export.md)
|
|
752
|
+
- **To Partitioned Parquet** → [GraphQL to Parquet Partitioned S3](standalone/graphql-to-parquet-partitioned-s3.md)
|
|
753
|
+
- **With Versori** → [GraphQL Parquet Extraction](versori/business-examples/graphql-parquet-extraction.md)
|
|
754
|
+
|
|
755
|
+
#### Process Returns
|
|
756
|
+
- **Complete RMA Flow** → [RMA Returns Comprehensive](versori/webhooks/template-webhook-rma-returns-comprehensive.md)
|
|
757
|
+
|
|
758
|
+
#### Manage Pricing
|
|
759
|
+
- **Bulk Updates** → [S3 CSV Price GraphQL](versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md)
|
|
760
|
+
|
|
761
|
+
#### Advanced Workflows
|
|
762
|
+
- **Dropship Routing** → [Dropship Routing](versori/webhooks/template-webhook-dropship-routing.md) or [Business Example](versori/business-examples/dropship-order-routing.md)
|
|
763
|
+
- **Flash Sales** → [Flash Sale Reserve](versori/webhooks/template-webhook-flash-sale-reserve.md)
|
|
764
|
+
- **Multi-Channel Sync** → [Multi-Channel Sync](versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md) (Versori) or [Standalone](standalone/multi-channel-inventory-sync.md)
|
|
765
|
+
- **Inter-Location Transfers** → [Inter-Location Transfers](versori/business-examples/inter-location-transfers.md)
|
|
766
|
+
- **Pre-Orders** → [Pre-Order Allocation](versori/business-examples/pre-order-allocation.md)
|
|
767
|
+
|
|
768
|
+
---
|
|
769
|
+
|
|
770
|
+
## 💡 Quick Recommendations
|
|
771
|
+
|
|
772
|
+
### For Beginners
|
|
773
|
+
Start with these guides (easiest to hardest):
|
|
774
|
+
|
|
775
|
+
1. **[Field Mapping Universal](patterns/field-mapping-universal.md)** - Learn core mapping concepts
|
|
776
|
+
2. **[S3 CSV Batch API](standalone/s3-csv-batch-api.md)** - Simple standalone ingestion
|
|
777
|
+
3. **[CSV Inventory Sync](versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md)** - Versori scheduled workflow
|
|
778
|
+
4. **[XML Order Ingestion](versori/webhooks/template-webhook-xml-order-ingestion.md)** - Webhook with advanced features
|
|
779
|
+
|
|
780
|
+
### For Production Deployments
|
|
781
|
+
These guides are production-tested:
|
|
782
|
+
|
|
783
|
+
- **Inventory Ingestion**: [SFTP CSV Ingestion](versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md)
|
|
784
|
+
- **Order Processing**: [XML Order Ingestion](versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
785
|
+
- **Data Extraction**: [GraphQL to Parquet Partitioned S3](standalone/graphql-to-parquet-partitioned-s3.md)
|
|
786
|
+
- **State Management**: [KV State Management](versori/patterns/kv-state-management.md)
|
|
787
|
+
|
|
788
|
+
### For Complex Integrations
|
|
789
|
+
These guides show advanced patterns:
|
|
790
|
+
|
|
791
|
+
- [Multi-Source Aggregation](standalone/multi-source-aggregation.md)
|
|
792
|
+
- [Dropship Order Routing](versori/business-examples/dropship-order-routing.md)
|
|
793
|
+
- [Flash Sale Reserve](versori/webhooks/template-webhook-flash-sale-reserve.md)
|
|
794
|
+
- [Pre-Order Allocation](versori/business-examples/pre-order-allocation.md)
|
|
795
|
+
|
|
796
|
+
---
|
|
797
|
+
|
|
798
|
+
## 📖 How to Use These Templates
|
|
799
|
+
|
|
800
|
+
### For Developers
|
|
801
|
+
|
|
802
|
+
1. **Pick a template** - Use the decision tree above or browse by use case
|
|
803
|
+
2. **Copy the code** - All examples are production-ready
|
|
804
|
+
3. **Customize** environment variables and configurations
|
|
805
|
+
4. **Test locally** with provided sample data
|
|
806
|
+
5. **Deploy** using deployment options in each guide
|
|
807
|
+
|
|
808
|
+
**Need Help?** Check our comprehensive [**FAQ**](faq.md) for troubleshooting.
|
|
809
|
+
|
|
810
|
+
### For AI / LLM Prompts
|
|
811
|
+
|
|
812
|
+
These templates are optimized for AI consumption:
|
|
813
|
+
|
|
814
|
+
```
|
|
815
|
+
Build a Versori connector that receives SFCC XML orders via HTTP webhook
|
|
816
|
+
and creates orders in Fluent Commerce.
|
|
817
|
+
|
|
818
|
+
Context: Use patterns from docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
AI gets **focused context** without API reference overload.
|
|
822
|
+
|
|
823
|
+
---
|
|
824
|
+
|
|
825
|
+
## ✅ What's Included in Each Template
|
|
826
|
+
|
|
827
|
+
Every template provides:
|
|
828
|
+
|
|
829
|
+
- ✅ **Complete working code** (400-800 lines)
|
|
830
|
+
- ✅ **Real SDK methods** with proper usage
|
|
831
|
+
- ✅ **Production patterns** from actual connectors
|
|
832
|
+
- ✅ **Environment setup** and configuration
|
|
833
|
+
- ✅ **Testing instructions** with sample data
|
|
834
|
+
- ✅ **Deployment options** (Docker, Lambda, cron, etc.)
|
|
835
|
+
- ✅ **Common issues** with solutions
|
|
836
|
+
- ✅ **Related guides** for deeper dives
|
|
837
|
+
|
|
838
|
+
---
|
|
839
|
+
|
|
840
|
+
## 🚀 Quick Start Examples
|
|
841
|
+
|
|
842
|
+
### Versori HTTP Webhook
|
|
843
|
+
|
|
844
|
+
```typescript
|
|
845
|
+
import { createClient, GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
846
|
+
|
|
847
|
+
export default async function processOrder(ctx) {
|
|
848
|
+
const client = await createClient(ctx); // Auto-detects Versori context
|
|
849
|
+
const mapper = new GraphQLMutationMapper(mappingConfig, ctx.log, { fluentClient: client });
|
|
850
|
+
const result = await mapper.mapWithNodes(ctx.body, customResolvers);
|
|
851
|
+
|
|
852
|
+
// Check success (errors are returned, not thrown)
|
|
853
|
+
if (!result.success) {
|
|
854
|
+
throw new Error(`Mapping failed: ${result.errors?.join(', ')}`);
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
// Execute mutation (query is auto-generated in result)
|
|
858
|
+
return await client.graphql({
|
|
859
|
+
query: result.query,
|
|
860
|
+
variables: result.variables // ✅ Use variables (wrapped if fields pattern)
|
|
861
|
+
});
|
|
862
|
+
}
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
### Standalone Node.js Script
|
|
866
|
+
|
|
867
|
+
```typescript
|
|
868
|
+
import { createClient, S3DataSource, UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
869
|
+
|
|
870
|
+
const client = await createClient({
|
|
871
|
+
config: {
|
|
872
|
+
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
873
|
+
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
874
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
875
|
+
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
876
|
+
},
|
|
877
|
+
});
|
|
878
|
+
|
|
879
|
+
const s3Source = new S3DataSource(config, logger);
|
|
880
|
+
const mapper = new UniversalMapper(mappingConfig);
|
|
881
|
+
const files = await s3Source.listFiles();
|
|
882
|
+
// ... process files
|
|
883
|
+
```
|
|
884
|
+
|
|
885
|
+
---
|
|
886
|
+
|
|
887
|
+
## 📚 Additional Resources
|
|
888
|
+
|
|
889
|
+
- **[FAQ - Troubleshooting](faq.md)** - Consolidated solutions to common issues
|
|
890
|
+
- **[API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md)** - Complete SDK method reference
|
|
891
|
+
- **[SDK Philosophy](../00-START-HERE/sdk-philosophy.md)** - Design principles
|
|
892
|
+
- **[Complete Documentation](../readme.md)** - All guides and references
|
|
893
|
+
|
|
894
|
+
---
|
|
895
|
+
|
|
896
|
+
## 🎓 Learning Path
|
|
897
|
+
|
|
898
|
+
**New to SDK?**
|
|
899
|
+
|
|
900
|
+
1. Start with [SDK Philosophy](../00-START-HERE/sdk-philosophy.md)
|
|
901
|
+
2. Read [Getting Started](../00-START-HERE/getting-started.md)
|
|
902
|
+
3. Pick a **Standalone** template (simpler, no Versori)
|
|
903
|
+
4. Try a **Versori** template if deploying to Versori
|
|
904
|
+
5. Use **Pattern** guides for specific concepts
|
|
905
|
+
|
|
906
|
+
**Building Connectors?**
|
|
907
|
+
|
|
908
|
+
1. Pick matching use case template
|
|
909
|
+
2. Review **Pattern** guides for concepts
|
|
910
|
+
3. Check [API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md) for details
|
|
911
|
+
4. Deploy and monitor
|
|
912
|
+
|
|
913
|
+
---
|
|
914
|
+
|
|
915
|
+
## 📊 Template Statistics
|
|
916
|
+
|
|
917
|
+
- **38+ Total Templates**
|
|
918
|
+
- 20 Versori Platform templates
|
|
919
|
+
- 7 Webhook-triggered workflows
|
|
920
|
+
- 6 Scheduled workflows (Batch API)
|
|
921
|
+
- 8 Event API templates
|
|
922
|
+
- 9 GraphQL mutation templates
|
|
923
|
+
- 3 Versori patterns
|
|
924
|
+
- 4 Business use case examples
|
|
925
|
+
- 9 Standalone Node.js/Deno templates
|
|
926
|
+
- 9 Reusable Pattern guides
|
|
927
|
+
- **~15,000+ lines** of production-ready code
|
|
928
|
+
- **100% tested** patterns from real connectors
|
|
929
|
+
- **Organized by trigger type** for easy navigation
|
|
930
|
+
|
|
931
|
+
---
|
|
932
|
+
|
|
933
|
+
## 🆘 Still Can't Decide?
|
|
934
|
+
|
|
935
|
+
### Answer These Questions:
|
|
936
|
+
|
|
937
|
+
1. **Runtime**: Versori or Standalone?
|
|
938
|
+
2. **Direction**: Ingestion (IN) or Extraction (OUT)?
|
|
939
|
+
3. **Trigger**: Webhook, Schedule, or Manual?
|
|
940
|
+
4. **Format**: CSV, XML, JSON, or Parquet?
|
|
941
|
+
5. **Complexity**: Simple, Medium, or High?
|
|
942
|
+
|
|
943
|
+
**Then use the decision tree above to find your template!**
|
|
944
|
+
|
|
945
|
+
---
|
|
946
|
+
|
|
947
|
+
## 🆘 Need Help?
|
|
948
|
+
|
|
949
|
+
- **Issues**: [GitHub Issues](https://github.com/fluentcommerce/fc-connect-sdk/issues)
|
|
950
|
+
- **Documentation**: [Complete Docs](../readme.md)
|
|
951
|
+
- **API Reference**: [API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md)
|
|
952
|
+
- **Troubleshooting**: [FAQ](faq.md)
|
|
953
|
+
- **Examples**: Check individual template files
|
|
954
|
+
|
|
955
|
+
---
|
|
956
|
+
|
|
957
|
+
*Last Updated: 2025-01-27*
|