@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,655 +1,655 @@
|
|
|
1
|
-
# Integration Architecture
|
|
2
|
-
|
|
3
|
-
This document explains how the FC Connect SDK integrates with external systems including Fluent Commerce, Amazon S3, SFTP servers, and the Versori platform.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The SDK provides robust integration capabilities across multiple systems:
|
|
8
|
-
|
|
9
|
-
```mermaid
|
|
10
|
-
graph TB
|
|
11
|
-
SDK[FC Connect SDK]
|
|
12
|
-
|
|
13
|
-
subgraph "External Systems"
|
|
14
|
-
FLUENT[Fluent Commerce API]
|
|
15
|
-
S3[Amazon S3]
|
|
16
|
-
SFTP[SFTP Servers]
|
|
17
|
-
VERSORI[Versori Platform]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
subgraph "Integration Methods"
|
|
21
|
-
AUTH[Authentication]
|
|
22
|
-
API[API Communication]
|
|
23
|
-
STORAGE[File Storage]
|
|
24
|
-
PLATFORM[Platform Services]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
SDK --> FLUENT
|
|
28
|
-
SDK --> S3
|
|
29
|
-
SDK --> SFTP
|
|
30
|
-
SDK --> VERSORI
|
|
31
|
-
|
|
32
|
-
FLUENT --> AUTH
|
|
33
|
-
S3 --> STORAGE
|
|
34
|
-
SFTP --> STORAGE
|
|
35
|
-
VERSORI --> PLATFORM
|
|
36
|
-
|
|
37
|
-
AUTH --> OAUTH[OAuth2]
|
|
38
|
-
AUTH --> CONN[Connection-based]
|
|
39
|
-
|
|
40
|
-
STORAGE --> PRESIGN[Presigned URLs]
|
|
41
|
-
STORAGE --> SDK_UPLOAD[SDK Upload]
|
|
42
|
-
STORAGE --> SSH[SSH Keys]
|
|
43
|
-
|
|
44
|
-
PLATFORM --> KV[KV Storage]
|
|
45
|
-
PLATFORM --> WEBHOOK[Webhooks]
|
|
46
|
-
PLATFORM --> LOG[Logging]
|
|
47
|
-
|
|
48
|
-
style SDK fill:#e3f2fd
|
|
49
|
-
style FLUENT fill:#ffebee
|
|
50
|
-
style S3 fill:#fff3e0
|
|
51
|
-
style SFTP fill:#f3e5f5
|
|
52
|
-
style VERSORI fill:#e8f5e9
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Fluent Commerce Integration
|
|
56
|
-
|
|
57
|
-
### Authentication Flows
|
|
58
|
-
|
|
59
|
-
```mermaid
|
|
60
|
-
sequenceDiagram
|
|
61
|
-
participant SDK
|
|
62
|
-
participant AuthService
|
|
63
|
-
participant FluentOAuth
|
|
64
|
-
participant FluentAPI
|
|
65
|
-
|
|
66
|
-
Note over SDK,FluentAPI: OAuth2 Client Credentials Flow
|
|
67
|
-
|
|
68
|
-
SDK->>AuthService: Initialize with credentials
|
|
69
|
-
AuthService->>AuthService: Store clientId, clientSecret
|
|
70
|
-
|
|
71
|
-
SDK->>AuthService: Request access token
|
|
72
|
-
AuthService->>FluentOAuth: POST /oauth/token
|
|
73
|
-
Note right of AuthService: grant_type: client_credentials<br/>client_id: xxx<br/>client_secret: yyy
|
|
74
|
-
|
|
75
|
-
FluentOAuth-->>AuthService: { access_token, expires_in }
|
|
76
|
-
AuthService->>AuthService: Cache token with expiry
|
|
77
|
-
|
|
78
|
-
SDK->>AuthService: Get token for API call
|
|
79
|
-
AuthService->>AuthService: Check token expiry
|
|
80
|
-
|
|
81
|
-
alt Token Valid
|
|
82
|
-
AuthService-->>SDK: Return cached token
|
|
83
|
-
else Token Expired
|
|
84
|
-
AuthService->>FluentOAuth: Request new token
|
|
85
|
-
FluentOAuth-->>AuthService: New token
|
|
86
|
-
AuthService->>AuthService: Update cache
|
|
87
|
-
AuthService-->>SDK: Return new token
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
SDK->>FluentAPI: GraphQL request (Bearer token)
|
|
91
|
-
FluentAPI-->>SDK: Response
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### API Communication Patterns
|
|
95
|
-
|
|
96
|
-
```mermaid
|
|
97
|
-
graph TB
|
|
98
|
-
SDK[SDK] --> DECIDE{Operation Type}
|
|
99
|
-
|
|
100
|
-
DECIDE -->|Batch| BATCH[Batch API]
|
|
101
|
-
DECIDE -->|Query| GRAPHQL[GraphQL API]
|
|
102
|
-
DECIDE -->|Mutation| GRAPHQL
|
|
103
|
-
|
|
104
|
-
BATCH --> JOB[Create Job]
|
|
105
|
-
JOB --> SEND[Send Batches]
|
|
106
|
-
SEND --> POLL[Poll Status]
|
|
107
|
-
|
|
108
|
-
GRAPHQL --> BUILD[Build Query/Mutation]
|
|
109
|
-
BUILD --> EXECUTE[Execute Request]
|
|
110
|
-
EXECUTE --> PAGINATE{More Pages?}
|
|
111
|
-
|
|
112
|
-
PAGINATE -->|Yes| CURSOR[Fetch Next Cursor]
|
|
113
|
-
PAGINATE -->|No| COMPLETE[Return Results]
|
|
114
|
-
|
|
115
|
-
CURSOR --> EXECUTE
|
|
116
|
-
|
|
117
|
-
style SDK fill:#e3f2fd
|
|
118
|
-
style BATCH fill:#fff3e0
|
|
119
|
-
style GRAPHQL fill:#f3e5f5
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
**Batch API Flow:**
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
// 1. Create job
|
|
126
|
-
const job = await client.createJob({
|
|
127
|
-
name: 'inventory-sync',
|
|
128
|
-
retailerId: 'my-retailer',
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
// 2. Send batches
|
|
132
|
-
const batch = await client.sendBatch(job.id, {
|
|
133
|
-
entities: inventoryData,
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
// 3. Poll status
|
|
137
|
-
const status = await client.getBatchStatus(job.id, batch.id);
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**GraphQL Flow:**
|
|
141
|
-
|
|
142
|
-
```typescript
|
|
143
|
-
// Query with pagination (auto-enabled for queries that include pagination vars)
|
|
144
|
-
const results = await client.graphql({
|
|
145
|
-
query: `
|
|
146
|
-
query GetInventory($first: Int!, $after: String) {
|
|
147
|
-
inventories(first: $first, after: $after) {
|
|
148
|
-
edges {
|
|
149
|
-
cursor
|
|
150
|
-
node { id ref productRef locationRef qty }
|
|
151
|
-
}
|
|
152
|
-
pageInfo { hasNextPage }
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
`,
|
|
156
|
-
variables: { first: 100 },
|
|
157
|
-
// To opt out: pagination: { enabled: false }
|
|
158
|
-
});
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### Error Handling & Retry Logic
|
|
162
|
-
|
|
163
|
-
**Retry Configuration:**
|
|
164
|
-
|
|
165
|
-
```typescript
|
|
166
|
-
const client = await createClient({
|
|
167
|
-
config: {
|
|
168
|
-
baseUrl: 'https://api.fluentcommerce.com',
|
|
169
|
-
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
170
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
171
|
-
retryAttempts: 3,
|
|
172
|
-
retryDelay: 1000,
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## Amazon S3 Integration
|
|
178
|
-
|
|
179
|
-
### Dual S3 Implementation
|
|
180
|
-
|
|
181
|
-
The SDK supports two S3 integration methods:
|
|
182
|
-
|
|
183
|
-
```mermaid
|
|
184
|
-
graph TB
|
|
185
|
-
SDK[SDK] --> CHOOSE{S3 Method}
|
|
186
|
-
|
|
187
|
-
CHOOSE -->|Default| PRESIGN[Presigned URLs<br/>No AWS credentials needed]
|
|
188
|
-
CHOOSE -->|Optional| AWS_SDK[AWS SDK v3<br/>Direct S3 access]
|
|
189
|
-
|
|
190
|
-
PRESIGN --> SIG_SERVICE[S3PresignService]
|
|
191
|
-
SIG_SERVICE --> GENERATE[Generate SigV4 URL]
|
|
192
|
-
GENERATE --> HTTP[Standard HTTP Upload/Download]
|
|
193
|
-
|
|
194
|
-
AWS_SDK --> S3_CLIENT[S3Client]
|
|
195
|
-
S3_CLIENT --> PUT[PutObject]
|
|
196
|
-
S3_CLIENT --> GET[GetObject]
|
|
197
|
-
S3_CLIENT --> LIST[ListObjects]
|
|
198
|
-
|
|
199
|
-
HTTP --> WORKS[Works Everywhere<br/>Node.js, Deno, Versori]
|
|
200
|
-
PUT --> WORKS2[Requires AWS SDK<br/>More features]
|
|
201
|
-
|
|
202
|
-
style PRESIGN fill:#e8f5e9
|
|
203
|
-
style AWS_SDK fill:#fff3e0
|
|
204
|
-
style WORKS fill:#e3f2fd
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### Presigned URL Flow
|
|
208
|
-
|
|
209
|
-
```mermaid
|
|
210
|
-
sequenceDiagram
|
|
211
|
-
participant SDK
|
|
212
|
-
participant PresignService
|
|
213
|
-
participant S3
|
|
214
|
-
|
|
215
|
-
Note over SDK,S3: Upload Flow with Presigned URLs
|
|
216
|
-
|
|
217
|
-
SDK->>PresignService: getPresignedUploadUrl(bucket, key, expiry)
|
|
218
|
-
PresignService->>PresignService: Generate SigV4 signature
|
|
219
|
-
PresignService-->>SDK: Presigned PUT URL (valid 1 hour)
|
|
220
|
-
|
|
221
|
-
SDK->>S3: PUT {presigned_url} (file data)
|
|
222
|
-
S3-->>SDK: 200 OK
|
|
223
|
-
|
|
224
|
-
Note over SDK,S3: Download Flow with Presigned URLs
|
|
225
|
-
|
|
226
|
-
SDK->>PresignService: getPresignedDownloadUrl(bucket, key, expiry)
|
|
227
|
-
PresignService->>PresignService: Generate SigV4 signature
|
|
228
|
-
PresignService-->>SDK: Presigned GET URL (valid 1 hour)
|
|
229
|
-
|
|
230
|
-
SDK->>S3: GET {presigned_url}
|
|
231
|
-
S3-->>SDK: File data
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
**Presigned URL Benefits:**
|
|
235
|
-
|
|
236
|
-
- No AWS credentials needed in application
|
|
237
|
-
- Works in restricted environments (Versori, browser)
|
|
238
|
-
- Temporary, secure access
|
|
239
|
-
- Cross-account and cross-region support
|
|
240
|
-
|
|
241
|
-
**Example:**
|
|
242
|
-
|
|
243
|
-
```typescript
|
|
244
|
-
const presignService = new S3PresignService({
|
|
245
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
246
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
247
|
-
region: 'us-east-1',
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
// Upload
|
|
251
|
-
const uploadUrl = await presignService.getPresignedUploadUrl(
|
|
252
|
-
'my-bucket',
|
|
253
|
-
'path/to/file.csv',
|
|
254
|
-
3600 // 1 hour
|
|
255
|
-
);
|
|
256
|
-
|
|
257
|
-
await fetch(uploadUrl, {
|
|
258
|
-
method: 'PUT',
|
|
259
|
-
body: fileData,
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
// Download
|
|
263
|
-
const downloadUrl = await presignService.getPresignedDownloadUrl(
|
|
264
|
-
'my-bucket',
|
|
265
|
-
'path/to/file.csv',
|
|
266
|
-
3600
|
|
267
|
-
);
|
|
268
|
-
|
|
269
|
-
const response = await fetch(downloadUrl);
|
|
270
|
-
const data = await response.text();
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### S3 Operations
|
|
274
|
-
|
|
275
|
-
```mermaid
|
|
276
|
-
graph TB
|
|
277
|
-
S3_SOURCE[S3DataSource]
|
|
278
|
-
|
|
279
|
-
S3_SOURCE --> LIST[List Files]
|
|
280
|
-
S3_SOURCE --> DOWNLOAD[Download]
|
|
281
|
-
S3_SOURCE --> UPLOAD[Upload]
|
|
282
|
-
S3_SOURCE --> ARCHIVE[Archive]
|
|
283
|
-
|
|
284
|
-
LIST --> PREFIX[Prefix Filtering<br/>folder/]
|
|
285
|
-
|
|
286
|
-
style S3_SOURCE fill:#e3f2fd
|
|
287
|
-
style LIST fill:#fff3e0
|
|
288
|
-
style DOWNLOAD fill:#f3e5f5
|
|
289
|
-
style UPLOAD fill:#e8f5e9
|
|
290
|
-
style ARCHIVE fill:#fce4ec
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
- Note: S3 supports prefix filtering (e.g., `prefix: 'folder/'`). Wildcard patterns (e.g., `*.csv`) are not supported on S3.
|
|
294
|
-
|
|
295
|
-
## SFTP Integration
|
|
296
|
-
|
|
297
|
-
### Connection Management
|
|
298
|
-
|
|
299
|
-
```mermaid
|
|
300
|
-
sequenceDiagram
|
|
301
|
-
participant SDK
|
|
302
|
-
participant SftpDataSource
|
|
303
|
-
participant SSHClient
|
|
304
|
-
participant SftpServer
|
|
305
|
-
|
|
306
|
-
SDK->>SftpDataSource: Initialize connection
|
|
307
|
-
SftpDataSource->>SftpDataSource: Load SSH key or password
|
|
308
|
-
|
|
309
|
-
SftpDataSource->>SSHClient: Connect
|
|
310
|
-
SSHClient->>SftpServer: SSH handshake
|
|
311
|
-
|
|
312
|
-
alt Key-based Auth
|
|
313
|
-
SSHClient->>SftpServer: Authenticate with SSH key
|
|
314
|
-
else Password Auth
|
|
315
|
-
SSHClient->>SftpServer: Authenticate with password
|
|
316
|
-
end
|
|
317
|
-
|
|
318
|
-
SftpServer-->>SSHClient: Authentication success
|
|
319
|
-
SSHClient-->>SftpDataSource: Connection established
|
|
320
|
-
|
|
321
|
-
SDK->>SftpDataSource: listFiles(pattern)
|
|
322
|
-
SftpDataSource->>SftpServer: List directory
|
|
323
|
-
SftpServer-->>SftpDataSource: File list
|
|
324
|
-
SftpDataSource-->>SDK: Matching files
|
|
325
|
-
|
|
326
|
-
SDK->>SftpDataSource: downloadFile(path)
|
|
327
|
-
SftpDataSource->>SftpServer: Get file
|
|
328
|
-
SftpServer-->>SftpDataSource: File stream
|
|
329
|
-
SftpDataSource-->>SDK: File data
|
|
330
|
-
|
|
331
|
-
SDK->>SftpDataSource: Disconnect
|
|
332
|
-
SftpDataSource->>SSHClient: Close connection
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
**Configuration:**
|
|
336
|
-
|
|
337
|
-
```typescript
|
|
338
|
-
const sftp = new SftpDataSource(
|
|
339
|
-
{
|
|
340
|
-
/* host, auth, path, filePattern */
|
|
341
|
-
},
|
|
342
|
-
logger
|
|
343
|
-
);
|
|
344
|
-
|
|
345
|
-
// List files with wildcards
|
|
346
|
-
const files = await sftp.listFiles({ remotePath: '/incoming', filePattern: '*.csv' });
|
|
347
|
-
|
|
348
|
-
// Download file (Buffer or string depending on options)
|
|
349
|
-
const content = await sftp.downloadFile('/incoming/file.csv');
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
### SFTP Operations
|
|
353
|
-
|
|
354
|
-
```mermaid
|
|
355
|
-
graph TB
|
|
356
|
-
SFTP[SftpDataSource]
|
|
357
|
-
|
|
358
|
-
SFTP --> CONN[Connection Pool]
|
|
359
|
-
SFTP --> LIST[List Files]
|
|
360
|
-
SFTP --> DOWN[Download]
|
|
361
|
-
SFTP --> UP[Upload]
|
|
362
|
-
SFTP --> DEL[Delete]
|
|
363
|
-
|
|
364
|
-
CONN --> REUSE[Reuse Connections]
|
|
365
|
-
CONN --> TIMEOUT[Auto-disconnect on Idle]
|
|
366
|
-
|
|
367
|
-
LIST --> FILTER[Pattern Filtering<br/>*.csv, *.xml]
|
|
368
|
-
DOWN --> STREAM[Streaming Support]
|
|
369
|
-
UP --> RETRY[Retry on Failure]
|
|
370
|
-
DEL --> SAFE[Safe Delete with Verification]
|
|
371
|
-
|
|
372
|
-
style SFTP fill:#e3f2fd
|
|
373
|
-
style CONN fill:#fff3e0
|
|
374
|
-
style LIST fill:#f3e5f5
|
|
375
|
-
style DOWN fill:#e8f5e9
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
## Versori Platform Integration
|
|
379
|
-
|
|
380
|
-
### Platform Context Detection
|
|
381
|
-
|
|
382
|
-
```mermaid
|
|
383
|
-
flowchart TD
|
|
384
|
-
START[SDK Initialization] --> DETECT{Detect Context}
|
|
385
|
-
|
|
386
|
-
DETECT -->|Has 'activation'| VERSORI[Versori Platform]
|
|
387
|
-
DETECT -->|No 'activation'| STANDALONE[Standalone Runtime]
|
|
388
|
-
|
|
389
|
-
VERSORI --> PLATFORM_SERVICES[Platform Services]
|
|
390
|
-
STANDALONE --> MANUAL_CONFIG[Manual Configuration]
|
|
391
|
-
|
|
392
|
-
PLATFORM_SERVICES --> KV[KV Storage]
|
|
393
|
-
PLATFORM_SERVICES --> LOGGER[Platform Logger]
|
|
394
|
-
PLATFORM_SERVICES --> FETCH[Authenticated Fetch]
|
|
395
|
-
PLATFORM_SERVICES --> CONN[Connections]
|
|
396
|
-
|
|
397
|
-
MANUAL_CONFIG --> ENV[Environment Variables]
|
|
398
|
-
MANUAL_CONFIG --> CONFIG[Config Objects]
|
|
399
|
-
|
|
400
|
-
style START fill:#e3f2fd
|
|
401
|
-
style VERSORI fill:#e8f5e9
|
|
402
|
-
style STANDALONE fill:#fff3e0
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
### Versori Services Integration
|
|
406
|
-
|
|
407
|
-
```mermaid
|
|
408
|
-
graph TB
|
|
409
|
-
subgraph "Versori Platform"
|
|
410
|
-
HTTP[HTTP Webhook]
|
|
411
|
-
SCHEDULE[Scheduled Workflow]
|
|
412
|
-
KV_STORE[KV Storage]
|
|
413
|
-
CONNECTIONS[Connections]
|
|
414
|
-
LOGGING[Platform Logging]
|
|
415
|
-
end
|
|
416
|
-
|
|
417
|
-
subgraph "SDK Adapters"
|
|
418
|
-
KV_ADAPTER[VersoriKVAdapter]
|
|
419
|
-
FILE_TRACKER[VersoriFileTracker]
|
|
420
|
-
CLIENT[FluentVersoriClient]
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
HTTP --> CLIENT
|
|
424
|
-
SCHEDULE --> CLIENT
|
|
425
|
-
KV_STORE --> KV_ADAPTER
|
|
426
|
-
KV_ADAPTER --> FILE_TRACKER
|
|
427
|
-
CONNECTIONS --> CLIENT
|
|
428
|
-
LOGGING --> CLIENT
|
|
429
|
-
|
|
430
|
-
CLIENT --> FLUENT[Fluent Commerce]
|
|
431
|
-
|
|
432
|
-
style HTTP fill:#e3f2fd
|
|
433
|
-
style KV_STORE fill:#fff3e0
|
|
434
|
-
style CONNECTIONS fill:#f3e5f5
|
|
435
|
-
style CLIENT fill:#e8f5e9
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
### KV Storage Adapter
|
|
439
|
-
|
|
440
|
-
```mermaid
|
|
441
|
-
sequenceDiagram
|
|
442
|
-
participant SDK
|
|
443
|
-
participant VersoriKVAdapter
|
|
444
|
-
participant VersoriKV
|
|
445
|
-
|
|
446
|
-
SDK->>VersoriKVAdapter: Initialize with openKv()
|
|
447
|
-
VersoriKVAdapter->>VersoriKV: Open KV store
|
|
448
|
-
|
|
449
|
-
SDK->>VersoriKVAdapter: get('state')
|
|
450
|
-
VersoriKVAdapter->>VersoriKV: Read key
|
|
451
|
-
VersoriKV-->>VersoriKVAdapter: Value
|
|
452
|
-
VersoriKVAdapter-->>SDK: Parsed state object
|
|
453
|
-
|
|
454
|
-
SDK->>VersoriKVAdapter: set('state', newState)
|
|
455
|
-
VersoriKVAdapter->>VersoriKV: Write key
|
|
456
|
-
VersoriKV-->>VersoriKVAdapter: Confirmation
|
|
457
|
-
VersoriKVAdapter-->>SDK: Success
|
|
458
|
-
|
|
459
|
-
SDK->>VersoriKVAdapter: delete('old-key')
|
|
460
|
-
VersoriKVAdapter->>VersoriKV: Delete key
|
|
461
|
-
VersoriKV-->>VersoriKVAdapter: Deleted
|
|
462
|
-
VersoriKVAdapter-->>SDK: Success
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
**Usage:**
|
|
466
|
-
|
|
467
|
-
```typescript
|
|
468
|
-
import { VersoriKVAdapter, StateService } from '@fluentcommerce/fc-connect-sdk';
|
|
469
|
-
// ✅ CORRECT: Access openKv from Versori context
|
|
470
|
-
// import { openKv } from '@versori/run'; // ❌ WRONG - Not a direct export
|
|
471
|
-
|
|
472
|
-
// In Versori workflow handler:
|
|
473
|
-
const { openKv } = ctx;
|
|
474
|
-
const kvAdapter = new VersoriKVAdapter(openKv(':project:'));
|
|
475
|
-
const stateService = new StateService(logger); // logger is optional
|
|
476
|
-
|
|
477
|
-
// Use state service for deduplication (kv is first parameter)
|
|
478
|
-
const processed = await stateService.isFileProcessed(kvAdapter, 'file-key', 'my-workflow');
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
### Webhook Integration
|
|
482
|
-
|
|
483
|
-
```mermaid
|
|
484
|
-
sequenceDiagram
|
|
485
|
-
participant External
|
|
486
|
-
participant Versori
|
|
487
|
-
participant SDK
|
|
488
|
-
participant FluentAPI
|
|
489
|
-
|
|
490
|
-
External->>Versori: POST /webhook (data)
|
|
491
|
-
Versori->>Versori: Validate signature
|
|
492
|
-
Versori->>SDK: Trigger workflow
|
|
493
|
-
|
|
494
|
-
SDK->>SDK: Parse webhook payload
|
|
495
|
-
SDK->>SDK: Apply field mappings
|
|
496
|
-
SDK->>SDK: Build GraphQL mutation
|
|
497
|
-
|
|
498
|
-
SDK->>FluentAPI: Execute mutation
|
|
499
|
-
FluentAPI-->>SDK: Result
|
|
500
|
-
|
|
501
|
-
SDK-->>Versori: Response
|
|
502
|
-
Versori-->>External: 200 OK
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
**Webhook Example:**
|
|
506
|
-
|
|
507
|
-
```typescript
|
|
508
|
-
import { webhook } from '@versori/run';
|
|
509
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
510
|
-
|
|
511
|
-
export const processOrder = webhook('process-order', async ctx => {
|
|
512
|
-
const client = await createClient(ctx);
|
|
513
|
-
|
|
514
|
-
// Parse webhook payload
|
|
515
|
-
const orderData = await ctx.request.json();
|
|
516
|
-
|
|
517
|
-
// Transform and send to Fluent via GraphQL
|
|
518
|
-
const result = await client.graphql({
|
|
519
|
-
query: `mutation($input: CreateOrderInput!) { createOrder(input: $input) { id } }`,
|
|
520
|
-
variables: { input: orderData },
|
|
521
|
-
});
|
|
522
|
-
|
|
523
|
-
return { success: true, orderId: (result.data as any)?.createOrder?.id };
|
|
524
|
-
});
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
## Cross-System Data Flows
|
|
528
|
-
|
|
529
|
-
### Ingestion Flow (S3 → Fluent)
|
|
530
|
-
|
|
531
|
-
```mermaid
|
|
532
|
-
sequenceDiagram
|
|
533
|
-
participant S3
|
|
534
|
-
participant SDK
|
|
535
|
-
participant State
|
|
536
|
-
participant Fluent
|
|
537
|
-
|
|
538
|
-
SDK->>S3: List files
|
|
539
|
-
S3-->>SDK: [file1.csv, file2.csv]
|
|
540
|
-
|
|
541
|
-
loop For Each File
|
|
542
|
-
SDK->>State: isFileProcessed(file)
|
|
543
|
-
State-->>SDK: false
|
|
544
|
-
|
|
545
|
-
SDK->>S3: Download file
|
|
546
|
-
S3-->>SDK: File data
|
|
547
|
-
|
|
548
|
-
SDK->>SDK: Parse CSV
|
|
549
|
-
SDK->>SDK: Map fields
|
|
550
|
-
|
|
551
|
-
SDK->>Fluent: Create job
|
|
552
|
-
Fluent-->>SDK: Job ID
|
|
553
|
-
|
|
554
|
-
SDK->>Fluent: Send batches
|
|
555
|
-
Fluent-->>SDK: Batch IDs
|
|
556
|
-
|
|
557
|
-
SDK->>State: updateSyncState(kv, processedFiles)
|
|
558
|
-
SDK->>S3: Archive file
|
|
559
|
-
end
|
|
560
|
-
```
|
|
561
|
-
|
|
562
|
-
### Extraction Flow (Fluent → S3)
|
|
563
|
-
|
|
564
|
-
```mermaid
|
|
565
|
-
sequenceDiagram
|
|
566
|
-
participant SDK
|
|
567
|
-
participant Fluent
|
|
568
|
-
participant S3
|
|
569
|
-
|
|
570
|
-
SDK->>Fluent: Execute query (page 1)
|
|
571
|
-
Fluent-->>SDK: Results + cursor
|
|
572
|
-
|
|
573
|
-
loop Pagination
|
|
574
|
-
SDK->>Fluent: Fetch next page
|
|
575
|
-
Fluent-->>SDK: Results + cursor
|
|
576
|
-
end
|
|
577
|
-
|
|
578
|
-
SDK->>SDK: Transform data
|
|
579
|
-
SDK->>SDK: Apply mappings
|
|
580
|
-
|
|
581
|
-
SDK->>S3: Upload JSON
|
|
582
|
-
S3-->>SDK: Upload confirmation
|
|
583
|
-
```
|
|
584
|
-
|
|
585
|
-
### Transformation Flow (External → Fluent)
|
|
586
|
-
|
|
587
|
-
```mermaid
|
|
588
|
-
sequenceDiagram
|
|
589
|
-
participant External
|
|
590
|
-
participant SDK
|
|
591
|
-
participant Fluent
|
|
592
|
-
|
|
593
|
-
External->>SDK: POST webhook (XML/JSON)
|
|
594
|
-
SDK->>SDK: Parse input
|
|
595
|
-
SDK->>SDK: Load mapping config
|
|
596
|
-
SDK->>SDK: Build GraphQL mutation
|
|
597
|
-
|
|
598
|
-
SDK->>Fluent: Execute mutation
|
|
599
|
-
Fluent-->>SDK: Created entity
|
|
600
|
-
|
|
601
|
-
SDK-->>External: 200 OK (entity ID)
|
|
602
|
-
```
|
|
603
|
-
|
|
604
|
-
## Security Considerations
|
|
605
|
-
|
|
606
|
-
### Authentication Security
|
|
607
|
-
|
|
608
|
-
```mermaid
|
|
609
|
-
graph TB
|
|
610
|
-
SECURITY[Security Measures]
|
|
611
|
-
|
|
612
|
-
SECURITY --> TOKEN[Token Management]
|
|
613
|
-
SECURITY --> CREDS[Credential Storage]
|
|
614
|
-
SECURITY --> NETWORK[Network Security]
|
|
615
|
-
|
|
616
|
-
TOKEN --> CACHE[In-memory Cache Only]
|
|
617
|
-
TOKEN --> REFRESH[Auto-refresh Before Expiry]
|
|
618
|
-
TOKEN --> EXPIRE[Short-lived Tokens]
|
|
619
|
-
|
|
620
|
-
CREDS --> ENV[Environment Variables]
|
|
621
|
-
CREDS --> VAULT[Secret Vaults]
|
|
622
|
-
CREDS --> NEVER[Never Hardcode]
|
|
623
|
-
|
|
624
|
-
NETWORK --> HTTPS[HTTPS Only]
|
|
625
|
-
NETWORK --> VALIDATE[Validate Certificates]
|
|
626
|
-
NETWORK --> TIMEOUT[Request Timeouts]
|
|
627
|
-
|
|
628
|
-
style SECURITY fill:#ffebee
|
|
629
|
-
style TOKEN fill:#fff3e0
|
|
630
|
-
style CREDS fill:#f3e5f5
|
|
631
|
-
style NETWORK fill:#e8f5e9
|
|
632
|
-
```
|
|
633
|
-
|
|
634
|
-
**Best Practices:**
|
|
635
|
-
|
|
636
|
-
- Store credentials in environment variables or secret managers
|
|
637
|
-
- Use short-lived OAuth2 tokens (auto-refreshed)
|
|
638
|
-
- Enable HTTPS for all API communication
|
|
639
|
-
- Implement request timeouts
|
|
640
|
-
- Validate webhook signatures (Versori)
|
|
641
|
-
- Use presigned URLs with expiration for S3
|
|
642
|
-
|
|
643
|
-
**Versori Client Features:**
|
|
644
|
-
|
|
645
|
-
- GraphQL auto-pagination parity with standalone client
|
|
646
|
-
- Excludes internal fields from responses
|
|
647
|
-
- Aligned endpoints (sendBatch uses POST, status endpoints)
|
|
648
|
-
- Automatic retry/backoff for 5xx errors
|
|
649
|
-
- Exposes `validateWebhook()` for signature validation
|
|
650
|
-
|
|
651
|
-
## Next Steps
|
|
652
|
-
|
|
653
|
-
- [State Management](./architecture-06-state-management.md) - Distributed state and deduplication
|
|
654
|
-
- [Client Architecture](./architecture-02-client-architecture.md) - Client layer details
|
|
655
|
-
- [Data Flow](./architecture-03-data-flow.md) - Data processing patterns
|
|
1
|
+
# Integration Architecture
|
|
2
|
+
|
|
3
|
+
This document explains how the FC Connect SDK integrates with external systems including Fluent Commerce, Amazon S3, SFTP servers, and the Versori platform.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The SDK provides robust integration capabilities across multiple systems:
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
graph TB
|
|
11
|
+
SDK[FC Connect SDK]
|
|
12
|
+
|
|
13
|
+
subgraph "External Systems"
|
|
14
|
+
FLUENT[Fluent Commerce API]
|
|
15
|
+
S3[Amazon S3]
|
|
16
|
+
SFTP[SFTP Servers]
|
|
17
|
+
VERSORI[Versori Platform]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
subgraph "Integration Methods"
|
|
21
|
+
AUTH[Authentication]
|
|
22
|
+
API[API Communication]
|
|
23
|
+
STORAGE[File Storage]
|
|
24
|
+
PLATFORM[Platform Services]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
SDK --> FLUENT
|
|
28
|
+
SDK --> S3
|
|
29
|
+
SDK --> SFTP
|
|
30
|
+
SDK --> VERSORI
|
|
31
|
+
|
|
32
|
+
FLUENT --> AUTH
|
|
33
|
+
S3 --> STORAGE
|
|
34
|
+
SFTP --> STORAGE
|
|
35
|
+
VERSORI --> PLATFORM
|
|
36
|
+
|
|
37
|
+
AUTH --> OAUTH[OAuth2]
|
|
38
|
+
AUTH --> CONN[Connection-based]
|
|
39
|
+
|
|
40
|
+
STORAGE --> PRESIGN[Presigned URLs]
|
|
41
|
+
STORAGE --> SDK_UPLOAD[SDK Upload]
|
|
42
|
+
STORAGE --> SSH[SSH Keys]
|
|
43
|
+
|
|
44
|
+
PLATFORM --> KV[KV Storage]
|
|
45
|
+
PLATFORM --> WEBHOOK[Webhooks]
|
|
46
|
+
PLATFORM --> LOG[Logging]
|
|
47
|
+
|
|
48
|
+
style SDK fill:#e3f2fd
|
|
49
|
+
style FLUENT fill:#ffebee
|
|
50
|
+
style S3 fill:#fff3e0
|
|
51
|
+
style SFTP fill:#f3e5f5
|
|
52
|
+
style VERSORI fill:#e8f5e9
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Fluent Commerce Integration
|
|
56
|
+
|
|
57
|
+
### Authentication Flows
|
|
58
|
+
|
|
59
|
+
```mermaid
|
|
60
|
+
sequenceDiagram
|
|
61
|
+
participant SDK
|
|
62
|
+
participant AuthService
|
|
63
|
+
participant FluentOAuth
|
|
64
|
+
participant FluentAPI
|
|
65
|
+
|
|
66
|
+
Note over SDK,FluentAPI: OAuth2 Client Credentials Flow
|
|
67
|
+
|
|
68
|
+
SDK->>AuthService: Initialize with credentials
|
|
69
|
+
AuthService->>AuthService: Store clientId, clientSecret
|
|
70
|
+
|
|
71
|
+
SDK->>AuthService: Request access token
|
|
72
|
+
AuthService->>FluentOAuth: POST /oauth/token
|
|
73
|
+
Note right of AuthService: grant_type: client_credentials<br/>client_id: xxx<br/>client_secret: yyy
|
|
74
|
+
|
|
75
|
+
FluentOAuth-->>AuthService: { access_token, expires_in }
|
|
76
|
+
AuthService->>AuthService: Cache token with expiry
|
|
77
|
+
|
|
78
|
+
SDK->>AuthService: Get token for API call
|
|
79
|
+
AuthService->>AuthService: Check token expiry
|
|
80
|
+
|
|
81
|
+
alt Token Valid
|
|
82
|
+
AuthService-->>SDK: Return cached token
|
|
83
|
+
else Token Expired
|
|
84
|
+
AuthService->>FluentOAuth: Request new token
|
|
85
|
+
FluentOAuth-->>AuthService: New token
|
|
86
|
+
AuthService->>AuthService: Update cache
|
|
87
|
+
AuthService-->>SDK: Return new token
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
SDK->>FluentAPI: GraphQL request (Bearer token)
|
|
91
|
+
FluentAPI-->>SDK: Response
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### API Communication Patterns
|
|
95
|
+
|
|
96
|
+
```mermaid
|
|
97
|
+
graph TB
|
|
98
|
+
SDK[SDK] --> DECIDE{Operation Type}
|
|
99
|
+
|
|
100
|
+
DECIDE -->|Batch| BATCH[Batch API]
|
|
101
|
+
DECIDE -->|Query| GRAPHQL[GraphQL API]
|
|
102
|
+
DECIDE -->|Mutation| GRAPHQL
|
|
103
|
+
|
|
104
|
+
BATCH --> JOB[Create Job]
|
|
105
|
+
JOB --> SEND[Send Batches]
|
|
106
|
+
SEND --> POLL[Poll Status]
|
|
107
|
+
|
|
108
|
+
GRAPHQL --> BUILD[Build Query/Mutation]
|
|
109
|
+
BUILD --> EXECUTE[Execute Request]
|
|
110
|
+
EXECUTE --> PAGINATE{More Pages?}
|
|
111
|
+
|
|
112
|
+
PAGINATE -->|Yes| CURSOR[Fetch Next Cursor]
|
|
113
|
+
PAGINATE -->|No| COMPLETE[Return Results]
|
|
114
|
+
|
|
115
|
+
CURSOR --> EXECUTE
|
|
116
|
+
|
|
117
|
+
style SDK fill:#e3f2fd
|
|
118
|
+
style BATCH fill:#fff3e0
|
|
119
|
+
style GRAPHQL fill:#f3e5f5
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Batch API Flow:**
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// 1. Create job
|
|
126
|
+
const job = await client.createJob({
|
|
127
|
+
name: 'inventory-sync',
|
|
128
|
+
retailerId: 'my-retailer',
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// 2. Send batches
|
|
132
|
+
const batch = await client.sendBatch(job.id, {
|
|
133
|
+
entities: inventoryData,
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
// 3. Poll status
|
|
137
|
+
const status = await client.getBatchStatus(job.id, batch.id);
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**GraphQL Flow:**
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
// Query with pagination (auto-enabled for queries that include pagination vars)
|
|
144
|
+
const results = await client.graphql({
|
|
145
|
+
query: `
|
|
146
|
+
query GetInventory($first: Int!, $after: String) {
|
|
147
|
+
inventories(first: $first, after: $after) {
|
|
148
|
+
edges {
|
|
149
|
+
cursor
|
|
150
|
+
node { id ref productRef locationRef qty }
|
|
151
|
+
}
|
|
152
|
+
pageInfo { hasNextPage }
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
`,
|
|
156
|
+
variables: { first: 100 },
|
|
157
|
+
// To opt out: pagination: { enabled: false }
|
|
158
|
+
});
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Error Handling & Retry Logic
|
|
162
|
+
|
|
163
|
+
**Retry Configuration:**
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
const client = await createClient({
|
|
167
|
+
config: {
|
|
168
|
+
baseUrl: 'https://api.fluentcommerce.com',
|
|
169
|
+
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
170
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
171
|
+
retryAttempts: 3,
|
|
172
|
+
retryDelay: 1000,
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Amazon S3 Integration
|
|
178
|
+
|
|
179
|
+
### Dual S3 Implementation
|
|
180
|
+
|
|
181
|
+
The SDK supports two S3 integration methods:
|
|
182
|
+
|
|
183
|
+
```mermaid
|
|
184
|
+
graph TB
|
|
185
|
+
SDK[SDK] --> CHOOSE{S3 Method}
|
|
186
|
+
|
|
187
|
+
CHOOSE -->|Default| PRESIGN[Presigned URLs<br/>No AWS credentials needed]
|
|
188
|
+
CHOOSE -->|Optional| AWS_SDK[AWS SDK v3<br/>Direct S3 access]
|
|
189
|
+
|
|
190
|
+
PRESIGN --> SIG_SERVICE[S3PresignService]
|
|
191
|
+
SIG_SERVICE --> GENERATE[Generate SigV4 URL]
|
|
192
|
+
GENERATE --> HTTP[Standard HTTP Upload/Download]
|
|
193
|
+
|
|
194
|
+
AWS_SDK --> S3_CLIENT[S3Client]
|
|
195
|
+
S3_CLIENT --> PUT[PutObject]
|
|
196
|
+
S3_CLIENT --> GET[GetObject]
|
|
197
|
+
S3_CLIENT --> LIST[ListObjects]
|
|
198
|
+
|
|
199
|
+
HTTP --> WORKS[Works Everywhere<br/>Node.js, Deno, Versori]
|
|
200
|
+
PUT --> WORKS2[Requires AWS SDK<br/>More features]
|
|
201
|
+
|
|
202
|
+
style PRESIGN fill:#e8f5e9
|
|
203
|
+
style AWS_SDK fill:#fff3e0
|
|
204
|
+
style WORKS fill:#e3f2fd
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Presigned URL Flow
|
|
208
|
+
|
|
209
|
+
```mermaid
|
|
210
|
+
sequenceDiagram
|
|
211
|
+
participant SDK
|
|
212
|
+
participant PresignService
|
|
213
|
+
participant S3
|
|
214
|
+
|
|
215
|
+
Note over SDK,S3: Upload Flow with Presigned URLs
|
|
216
|
+
|
|
217
|
+
SDK->>PresignService: getPresignedUploadUrl(bucket, key, expiry)
|
|
218
|
+
PresignService->>PresignService: Generate SigV4 signature
|
|
219
|
+
PresignService-->>SDK: Presigned PUT URL (valid 1 hour)
|
|
220
|
+
|
|
221
|
+
SDK->>S3: PUT {presigned_url} (file data)
|
|
222
|
+
S3-->>SDK: 200 OK
|
|
223
|
+
|
|
224
|
+
Note over SDK,S3: Download Flow with Presigned URLs
|
|
225
|
+
|
|
226
|
+
SDK->>PresignService: getPresignedDownloadUrl(bucket, key, expiry)
|
|
227
|
+
PresignService->>PresignService: Generate SigV4 signature
|
|
228
|
+
PresignService-->>SDK: Presigned GET URL (valid 1 hour)
|
|
229
|
+
|
|
230
|
+
SDK->>S3: GET {presigned_url}
|
|
231
|
+
S3-->>SDK: File data
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Presigned URL Benefits:**
|
|
235
|
+
|
|
236
|
+
- No AWS credentials needed in application
|
|
237
|
+
- Works in restricted environments (Versori, browser)
|
|
238
|
+
- Temporary, secure access
|
|
239
|
+
- Cross-account and cross-region support
|
|
240
|
+
|
|
241
|
+
**Example:**
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
const presignService = new S3PresignService({
|
|
245
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
246
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
247
|
+
region: 'us-east-1',
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// Upload
|
|
251
|
+
const uploadUrl = await presignService.getPresignedUploadUrl(
|
|
252
|
+
'my-bucket',
|
|
253
|
+
'path/to/file.csv',
|
|
254
|
+
3600 // 1 hour
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
await fetch(uploadUrl, {
|
|
258
|
+
method: 'PUT',
|
|
259
|
+
body: fileData,
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
// Download
|
|
263
|
+
const downloadUrl = await presignService.getPresignedDownloadUrl(
|
|
264
|
+
'my-bucket',
|
|
265
|
+
'path/to/file.csv',
|
|
266
|
+
3600
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
const response = await fetch(downloadUrl);
|
|
270
|
+
const data = await response.text();
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### S3 Operations
|
|
274
|
+
|
|
275
|
+
```mermaid
|
|
276
|
+
graph TB
|
|
277
|
+
S3_SOURCE[S3DataSource]
|
|
278
|
+
|
|
279
|
+
S3_SOURCE --> LIST[List Files]
|
|
280
|
+
S3_SOURCE --> DOWNLOAD[Download]
|
|
281
|
+
S3_SOURCE --> UPLOAD[Upload]
|
|
282
|
+
S3_SOURCE --> ARCHIVE[Archive]
|
|
283
|
+
|
|
284
|
+
LIST --> PREFIX[Prefix Filtering<br/>folder/]
|
|
285
|
+
|
|
286
|
+
style S3_SOURCE fill:#e3f2fd
|
|
287
|
+
style LIST fill:#fff3e0
|
|
288
|
+
style DOWNLOAD fill:#f3e5f5
|
|
289
|
+
style UPLOAD fill:#e8f5e9
|
|
290
|
+
style ARCHIVE fill:#fce4ec
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
- Note: S3 supports prefix filtering (e.g., `prefix: 'folder/'`). Wildcard patterns (e.g., `*.csv`) are not supported on S3.
|
|
294
|
+
|
|
295
|
+
## SFTP Integration
|
|
296
|
+
|
|
297
|
+
### Connection Management
|
|
298
|
+
|
|
299
|
+
```mermaid
|
|
300
|
+
sequenceDiagram
|
|
301
|
+
participant SDK
|
|
302
|
+
participant SftpDataSource
|
|
303
|
+
participant SSHClient
|
|
304
|
+
participant SftpServer
|
|
305
|
+
|
|
306
|
+
SDK->>SftpDataSource: Initialize connection
|
|
307
|
+
SftpDataSource->>SftpDataSource: Load SSH key or password
|
|
308
|
+
|
|
309
|
+
SftpDataSource->>SSHClient: Connect
|
|
310
|
+
SSHClient->>SftpServer: SSH handshake
|
|
311
|
+
|
|
312
|
+
alt Key-based Auth
|
|
313
|
+
SSHClient->>SftpServer: Authenticate with SSH key
|
|
314
|
+
else Password Auth
|
|
315
|
+
SSHClient->>SftpServer: Authenticate with password
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
SftpServer-->>SSHClient: Authentication success
|
|
319
|
+
SSHClient-->>SftpDataSource: Connection established
|
|
320
|
+
|
|
321
|
+
SDK->>SftpDataSource: listFiles(pattern)
|
|
322
|
+
SftpDataSource->>SftpServer: List directory
|
|
323
|
+
SftpServer-->>SftpDataSource: File list
|
|
324
|
+
SftpDataSource-->>SDK: Matching files
|
|
325
|
+
|
|
326
|
+
SDK->>SftpDataSource: downloadFile(path)
|
|
327
|
+
SftpDataSource->>SftpServer: Get file
|
|
328
|
+
SftpServer-->>SftpDataSource: File stream
|
|
329
|
+
SftpDataSource-->>SDK: File data
|
|
330
|
+
|
|
331
|
+
SDK->>SftpDataSource: Disconnect
|
|
332
|
+
SftpDataSource->>SSHClient: Close connection
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Configuration:**
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
const sftp = new SftpDataSource(
|
|
339
|
+
{
|
|
340
|
+
/* host, auth, path, filePattern */
|
|
341
|
+
},
|
|
342
|
+
logger
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
// List files with wildcards
|
|
346
|
+
const files = await sftp.listFiles({ remotePath: '/incoming', filePattern: '*.csv' });
|
|
347
|
+
|
|
348
|
+
// Download file (Buffer or string depending on options)
|
|
349
|
+
const content = await sftp.downloadFile('/incoming/file.csv');
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### SFTP Operations
|
|
353
|
+
|
|
354
|
+
```mermaid
|
|
355
|
+
graph TB
|
|
356
|
+
SFTP[SftpDataSource]
|
|
357
|
+
|
|
358
|
+
SFTP --> CONN[Connection Pool]
|
|
359
|
+
SFTP --> LIST[List Files]
|
|
360
|
+
SFTP --> DOWN[Download]
|
|
361
|
+
SFTP --> UP[Upload]
|
|
362
|
+
SFTP --> DEL[Delete]
|
|
363
|
+
|
|
364
|
+
CONN --> REUSE[Reuse Connections]
|
|
365
|
+
CONN --> TIMEOUT[Auto-disconnect on Idle]
|
|
366
|
+
|
|
367
|
+
LIST --> FILTER[Pattern Filtering<br/>*.csv, *.xml]
|
|
368
|
+
DOWN --> STREAM[Streaming Support]
|
|
369
|
+
UP --> RETRY[Retry on Failure]
|
|
370
|
+
DEL --> SAFE[Safe Delete with Verification]
|
|
371
|
+
|
|
372
|
+
style SFTP fill:#e3f2fd
|
|
373
|
+
style CONN fill:#fff3e0
|
|
374
|
+
style LIST fill:#f3e5f5
|
|
375
|
+
style DOWN fill:#e8f5e9
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
## Versori Platform Integration
|
|
379
|
+
|
|
380
|
+
### Platform Context Detection
|
|
381
|
+
|
|
382
|
+
```mermaid
|
|
383
|
+
flowchart TD
|
|
384
|
+
START[SDK Initialization] --> DETECT{Detect Context}
|
|
385
|
+
|
|
386
|
+
DETECT -->|Has 'activation'| VERSORI[Versori Platform]
|
|
387
|
+
DETECT -->|No 'activation'| STANDALONE[Standalone Runtime]
|
|
388
|
+
|
|
389
|
+
VERSORI --> PLATFORM_SERVICES[Platform Services]
|
|
390
|
+
STANDALONE --> MANUAL_CONFIG[Manual Configuration]
|
|
391
|
+
|
|
392
|
+
PLATFORM_SERVICES --> KV[KV Storage]
|
|
393
|
+
PLATFORM_SERVICES --> LOGGER[Platform Logger]
|
|
394
|
+
PLATFORM_SERVICES --> FETCH[Authenticated Fetch]
|
|
395
|
+
PLATFORM_SERVICES --> CONN[Connections]
|
|
396
|
+
|
|
397
|
+
MANUAL_CONFIG --> ENV[Environment Variables]
|
|
398
|
+
MANUAL_CONFIG --> CONFIG[Config Objects]
|
|
399
|
+
|
|
400
|
+
style START fill:#e3f2fd
|
|
401
|
+
style VERSORI fill:#e8f5e9
|
|
402
|
+
style STANDALONE fill:#fff3e0
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Versori Services Integration
|
|
406
|
+
|
|
407
|
+
```mermaid
|
|
408
|
+
graph TB
|
|
409
|
+
subgraph "Versori Platform"
|
|
410
|
+
HTTP[HTTP Webhook]
|
|
411
|
+
SCHEDULE[Scheduled Workflow]
|
|
412
|
+
KV_STORE[KV Storage]
|
|
413
|
+
CONNECTIONS[Connections]
|
|
414
|
+
LOGGING[Platform Logging]
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
subgraph "SDK Adapters"
|
|
418
|
+
KV_ADAPTER[VersoriKVAdapter]
|
|
419
|
+
FILE_TRACKER[VersoriFileTracker]
|
|
420
|
+
CLIENT[FluentVersoriClient]
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
HTTP --> CLIENT
|
|
424
|
+
SCHEDULE --> CLIENT
|
|
425
|
+
KV_STORE --> KV_ADAPTER
|
|
426
|
+
KV_ADAPTER --> FILE_TRACKER
|
|
427
|
+
CONNECTIONS --> CLIENT
|
|
428
|
+
LOGGING --> CLIENT
|
|
429
|
+
|
|
430
|
+
CLIENT --> FLUENT[Fluent Commerce]
|
|
431
|
+
|
|
432
|
+
style HTTP fill:#e3f2fd
|
|
433
|
+
style KV_STORE fill:#fff3e0
|
|
434
|
+
style CONNECTIONS fill:#f3e5f5
|
|
435
|
+
style CLIENT fill:#e8f5e9
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### KV Storage Adapter
|
|
439
|
+
|
|
440
|
+
```mermaid
|
|
441
|
+
sequenceDiagram
|
|
442
|
+
participant SDK
|
|
443
|
+
participant VersoriKVAdapter
|
|
444
|
+
participant VersoriKV
|
|
445
|
+
|
|
446
|
+
SDK->>VersoriKVAdapter: Initialize with openKv()
|
|
447
|
+
VersoriKVAdapter->>VersoriKV: Open KV store
|
|
448
|
+
|
|
449
|
+
SDK->>VersoriKVAdapter: get('state')
|
|
450
|
+
VersoriKVAdapter->>VersoriKV: Read key
|
|
451
|
+
VersoriKV-->>VersoriKVAdapter: Value
|
|
452
|
+
VersoriKVAdapter-->>SDK: Parsed state object
|
|
453
|
+
|
|
454
|
+
SDK->>VersoriKVAdapter: set('state', newState)
|
|
455
|
+
VersoriKVAdapter->>VersoriKV: Write key
|
|
456
|
+
VersoriKV-->>VersoriKVAdapter: Confirmation
|
|
457
|
+
VersoriKVAdapter-->>SDK: Success
|
|
458
|
+
|
|
459
|
+
SDK->>VersoriKVAdapter: delete('old-key')
|
|
460
|
+
VersoriKVAdapter->>VersoriKV: Delete key
|
|
461
|
+
VersoriKV-->>VersoriKVAdapter: Deleted
|
|
462
|
+
VersoriKVAdapter-->>SDK: Success
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
**Usage:**
|
|
466
|
+
|
|
467
|
+
```typescript
|
|
468
|
+
import { VersoriKVAdapter, StateService } from '@fluentcommerce/fc-connect-sdk';
|
|
469
|
+
// ✅ CORRECT: Access openKv from Versori context
|
|
470
|
+
// import { openKv } from '@versori/run'; // ❌ WRONG - Not a direct export
|
|
471
|
+
|
|
472
|
+
// In Versori workflow handler:
|
|
473
|
+
const { openKv } = ctx;
|
|
474
|
+
const kvAdapter = new VersoriKVAdapter(openKv(':project:'));
|
|
475
|
+
const stateService = new StateService(logger); // logger is optional
|
|
476
|
+
|
|
477
|
+
// Use state service for deduplication (kv is first parameter)
|
|
478
|
+
const processed = await stateService.isFileProcessed(kvAdapter, 'file-key', 'my-workflow');
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### Webhook Integration
|
|
482
|
+
|
|
483
|
+
```mermaid
|
|
484
|
+
sequenceDiagram
|
|
485
|
+
participant External
|
|
486
|
+
participant Versori
|
|
487
|
+
participant SDK
|
|
488
|
+
participant FluentAPI
|
|
489
|
+
|
|
490
|
+
External->>Versori: POST /webhook (data)
|
|
491
|
+
Versori->>Versori: Validate signature
|
|
492
|
+
Versori->>SDK: Trigger workflow
|
|
493
|
+
|
|
494
|
+
SDK->>SDK: Parse webhook payload
|
|
495
|
+
SDK->>SDK: Apply field mappings
|
|
496
|
+
SDK->>SDK: Build GraphQL mutation
|
|
497
|
+
|
|
498
|
+
SDK->>FluentAPI: Execute mutation
|
|
499
|
+
FluentAPI-->>SDK: Result
|
|
500
|
+
|
|
501
|
+
SDK-->>Versori: Response
|
|
502
|
+
Versori-->>External: 200 OK
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Webhook Example:**
|
|
506
|
+
|
|
507
|
+
```typescript
|
|
508
|
+
import { webhook } from '@versori/run';
|
|
509
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
510
|
+
|
|
511
|
+
export const processOrder = webhook('process-order', async ctx => {
|
|
512
|
+
const client = await createClient(ctx);
|
|
513
|
+
|
|
514
|
+
// Parse webhook payload
|
|
515
|
+
const orderData = await ctx.request.json();
|
|
516
|
+
|
|
517
|
+
// Transform and send to Fluent via GraphQL
|
|
518
|
+
const result = await client.graphql({
|
|
519
|
+
query: `mutation($input: CreateOrderInput!) { createOrder(input: $input) { id } }`,
|
|
520
|
+
variables: { input: orderData },
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
return { success: true, orderId: (result.data as any)?.createOrder?.id };
|
|
524
|
+
});
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
## Cross-System Data Flows
|
|
528
|
+
|
|
529
|
+
### Ingestion Flow (S3 → Fluent)
|
|
530
|
+
|
|
531
|
+
```mermaid
|
|
532
|
+
sequenceDiagram
|
|
533
|
+
participant S3
|
|
534
|
+
participant SDK
|
|
535
|
+
participant State
|
|
536
|
+
participant Fluent
|
|
537
|
+
|
|
538
|
+
SDK->>S3: List files
|
|
539
|
+
S3-->>SDK: [file1.csv, file2.csv]
|
|
540
|
+
|
|
541
|
+
loop For Each File
|
|
542
|
+
SDK->>State: isFileProcessed(file)
|
|
543
|
+
State-->>SDK: false
|
|
544
|
+
|
|
545
|
+
SDK->>S3: Download file
|
|
546
|
+
S3-->>SDK: File data
|
|
547
|
+
|
|
548
|
+
SDK->>SDK: Parse CSV
|
|
549
|
+
SDK->>SDK: Map fields
|
|
550
|
+
|
|
551
|
+
SDK->>Fluent: Create job
|
|
552
|
+
Fluent-->>SDK: Job ID
|
|
553
|
+
|
|
554
|
+
SDK->>Fluent: Send batches
|
|
555
|
+
Fluent-->>SDK: Batch IDs
|
|
556
|
+
|
|
557
|
+
SDK->>State: updateSyncState(kv, processedFiles)
|
|
558
|
+
SDK->>S3: Archive file
|
|
559
|
+
end
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
### Extraction Flow (Fluent → S3)
|
|
563
|
+
|
|
564
|
+
```mermaid
|
|
565
|
+
sequenceDiagram
|
|
566
|
+
participant SDK
|
|
567
|
+
participant Fluent
|
|
568
|
+
participant S3
|
|
569
|
+
|
|
570
|
+
SDK->>Fluent: Execute query (page 1)
|
|
571
|
+
Fluent-->>SDK: Results + cursor
|
|
572
|
+
|
|
573
|
+
loop Pagination
|
|
574
|
+
SDK->>Fluent: Fetch next page
|
|
575
|
+
Fluent-->>SDK: Results + cursor
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
SDK->>SDK: Transform data
|
|
579
|
+
SDK->>SDK: Apply mappings
|
|
580
|
+
|
|
581
|
+
SDK->>S3: Upload JSON
|
|
582
|
+
S3-->>SDK: Upload confirmation
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
### Transformation Flow (External → Fluent)
|
|
586
|
+
|
|
587
|
+
```mermaid
|
|
588
|
+
sequenceDiagram
|
|
589
|
+
participant External
|
|
590
|
+
participant SDK
|
|
591
|
+
participant Fluent
|
|
592
|
+
|
|
593
|
+
External->>SDK: POST webhook (XML/JSON)
|
|
594
|
+
SDK->>SDK: Parse input
|
|
595
|
+
SDK->>SDK: Load mapping config
|
|
596
|
+
SDK->>SDK: Build GraphQL mutation
|
|
597
|
+
|
|
598
|
+
SDK->>Fluent: Execute mutation
|
|
599
|
+
Fluent-->>SDK: Created entity
|
|
600
|
+
|
|
601
|
+
SDK-->>External: 200 OK (entity ID)
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
## Security Considerations
|
|
605
|
+
|
|
606
|
+
### Authentication Security
|
|
607
|
+
|
|
608
|
+
```mermaid
|
|
609
|
+
graph TB
|
|
610
|
+
SECURITY[Security Measures]
|
|
611
|
+
|
|
612
|
+
SECURITY --> TOKEN[Token Management]
|
|
613
|
+
SECURITY --> CREDS[Credential Storage]
|
|
614
|
+
SECURITY --> NETWORK[Network Security]
|
|
615
|
+
|
|
616
|
+
TOKEN --> CACHE[In-memory Cache Only]
|
|
617
|
+
TOKEN --> REFRESH[Auto-refresh Before Expiry]
|
|
618
|
+
TOKEN --> EXPIRE[Short-lived Tokens]
|
|
619
|
+
|
|
620
|
+
CREDS --> ENV[Environment Variables]
|
|
621
|
+
CREDS --> VAULT[Secret Vaults]
|
|
622
|
+
CREDS --> NEVER[Never Hardcode]
|
|
623
|
+
|
|
624
|
+
NETWORK --> HTTPS[HTTPS Only]
|
|
625
|
+
NETWORK --> VALIDATE[Validate Certificates]
|
|
626
|
+
NETWORK --> TIMEOUT[Request Timeouts]
|
|
627
|
+
|
|
628
|
+
style SECURITY fill:#ffebee
|
|
629
|
+
style TOKEN fill:#fff3e0
|
|
630
|
+
style CREDS fill:#f3e5f5
|
|
631
|
+
style NETWORK fill:#e8f5e9
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
**Best Practices:**
|
|
635
|
+
|
|
636
|
+
- Store credentials in environment variables or secret managers
|
|
637
|
+
- Use short-lived OAuth2 tokens (auto-refreshed)
|
|
638
|
+
- Enable HTTPS for all API communication
|
|
639
|
+
- Implement request timeouts
|
|
640
|
+
- Validate webhook signatures (Versori)
|
|
641
|
+
- Use presigned URLs with expiration for S3
|
|
642
|
+
|
|
643
|
+
**Versori Client Features:**
|
|
644
|
+
|
|
645
|
+
- GraphQL auto-pagination parity with standalone client
|
|
646
|
+
- Excludes internal fields from responses
|
|
647
|
+
- Aligned endpoints (sendBatch uses POST, status endpoints)
|
|
648
|
+
- Automatic retry/backoff for 5xx errors
|
|
649
|
+
- Exposes `validateWebhook()` for signature validation
|
|
650
|
+
|
|
651
|
+
## Next Steps
|
|
652
|
+
|
|
653
|
+
- [State Management](./architecture-06-state-management.md) - Distributed state and deduplication
|
|
654
|
+
- [Client Architecture](./architecture-02-client-architecture.md) - Client layer details
|
|
655
|
+
- [Data Flow](./architecture-03-data-flow.md) - Data processing patterns
|