@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.56
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/README.md +11 -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,68 +1,68 @@
|
|
|
1
|
-
# Pattern Templates
|
|
2
|
-
|
|
3
|
-
> **Reusable integration patterns for common scenarios**
|
|
4
|
-
> Production-ready templates for CSV validation, error handling, field mapping, and more
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This directory contains production-ready pattern templates that demonstrate best practices for common integration scenarios. Each pattern is self-contained and can be adapted to your specific needs.
|
|
9
|
-
|
|
10
|
-
## Available Patterns
|
|
11
|
-
|
|
12
|
-
| Pattern | Description | Complexity | Use Case |
|
|
13
|
-
|---------|-------------|------------|----------|
|
|
14
|
-
| **[CSV Schema Validation](./csv-schema-validation-and-rejection-report.md)** | Validate CSV data against schema, generate rejection reports | Medium | Data quality enforcement |
|
|
15
|
-
| **[Custom Resolvers](./custom-resolvers.md)** | Build custom transformation functions | Advanced | Complex business logic |
|
|
16
|
-
| **[Error Handling & Retry](./error-handling-retry.md)** | Implement robust error handling with retry logic | Medium | Production reliability |
|
|
17
|
-
| **[Field Mapping Universal](./field-mapping-universal.md)** | Transform data with UniversalMapper | Beginner | Data transformation |
|
|
18
|
-
| **[Large File Splitting](./large-file-splitting.md)** | Split large files into manageable chunks | Advanced | Memory efficiency |
|
|
19
|
-
| **[Pagination & Streaming](./pagination-streaming.md)** | Stream large datasets efficiently | Intermediate | Large data processing |
|
|
20
|
-
| **[State & Duplicate Prevention](./state-duplicate-prevention.md)** | Prevent duplicate processing with state management | Medium | Idempotent workflows |
|
|
21
|
-
| **[Master Data ETL](./master-data-etl.md)** | Complete ETL pipeline for master data | Advanced | Enterprise integration |
|
|
22
|
-
|
|
23
|
-
## Quick Navigation
|
|
24
|
-
|
|
25
|
-
### By Use Case
|
|
26
|
-
|
|
27
|
-
| I Want To... | Pattern | Complexity |
|
|
28
|
-
|--|--|--|
|
|
29
|
-
| **Validate CSV data** | [CSV Schema Validation](./csv-schema-validation-and-rejection-report.md) | Medium |
|
|
30
|
-
| **Transform data fields** | [Field Mapping Universal](./field-mapping-universal.md) | Beginner |
|
|
31
|
-
| **Handle errors gracefully** | [Error Handling & Retry](./error-handling-retry.md) | Medium |
|
|
32
|
-
| **Prevent duplicates** | [State & Duplicate Prevention](./state-duplicate-prevention.md) | Medium |
|
|
33
|
-
| **Process large files** | [Large File Splitting](./large-file-splitting.md) | Advanced |
|
|
34
|
-
| **Stream large datasets** | [Pagination & Streaming](./pagination-streaming.md) | Intermediate |
|
|
35
|
-
| **Custom transformations** | [Custom Resolvers](./custom-resolvers.md) | Advanced |
|
|
36
|
-
| **Build ETL pipeline** | [Master Data ETL](./master-data-etl.md) | Advanced |
|
|
37
|
-
|
|
38
|
-
## Pattern Structure
|
|
39
|
-
|
|
40
|
-
Each pattern includes:
|
|
41
|
-
- **Problem Statement** - What problem does this solve?
|
|
42
|
-
- **Solution Overview** - High-level approach
|
|
43
|
-
- **Complete Code** - Production-ready implementation
|
|
44
|
-
- **Configuration** - Required settings
|
|
45
|
-
- **Testing** - How to test the pattern
|
|
46
|
-
- **Troubleshooting** - Common issues and fixes
|
|
47
|
-
|
|
48
|
-
## Using These Patterns
|
|
49
|
-
|
|
50
|
-
1. **Choose a pattern** that matches your use case
|
|
51
|
-
2. **Copy the code** to your project
|
|
52
|
-
3. **Customize** for your specific needs
|
|
53
|
-
4. **Test** with sample data
|
|
54
|
-
5. **Deploy** to production
|
|
55
|
-
|
|
56
|
-
## Related Documentation
|
|
57
|
-
|
|
58
|
-
- [Versori Patterns](../versori/patterns/) - Versori-specific patterns
|
|
59
|
-
- [Standalone Templates](../standalone/) - Node.js/Deno templates
|
|
60
|
-
- [Versori Workflows](../versori/workflows/) - Scheduled workflows
|
|
61
|
-
|
|
62
|
-
## Support
|
|
63
|
-
|
|
64
|
-
Need help implementing these patterns?
|
|
65
|
-
- Review the complete code in each pattern
|
|
66
|
-
- Check troubleshooting sections
|
|
67
|
-
- See related documentation links
|
|
68
|
-
- Contact support@fluentcommerce.com
|
|
1
|
+
# Pattern Templates
|
|
2
|
+
|
|
3
|
+
> **Reusable integration patterns for common scenarios**
|
|
4
|
+
> Production-ready templates for CSV validation, error handling, field mapping, and more
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This directory contains production-ready pattern templates that demonstrate best practices for common integration scenarios. Each pattern is self-contained and can be adapted to your specific needs.
|
|
9
|
+
|
|
10
|
+
## Available Patterns
|
|
11
|
+
|
|
12
|
+
| Pattern | Description | Complexity | Use Case |
|
|
13
|
+
|---------|-------------|------------|----------|
|
|
14
|
+
| **[CSV Schema Validation](./csv-schema-validation-and-rejection-report.md)** | Validate CSV data against schema, generate rejection reports | Medium | Data quality enforcement |
|
|
15
|
+
| **[Custom Resolvers](./custom-resolvers.md)** | Build custom transformation functions | Advanced | Complex business logic |
|
|
16
|
+
| **[Error Handling & Retry](./error-handling-retry.md)** | Implement robust error handling with retry logic | Medium | Production reliability |
|
|
17
|
+
| **[Field Mapping Universal](./field-mapping-universal.md)** | Transform data with UniversalMapper | Beginner | Data transformation |
|
|
18
|
+
| **[Large File Splitting](./large-file-splitting.md)** | Split large files into manageable chunks | Advanced | Memory efficiency |
|
|
19
|
+
| **[Pagination & Streaming](./pagination-streaming.md)** | Stream large datasets efficiently | Intermediate | Large data processing |
|
|
20
|
+
| **[State & Duplicate Prevention](./state-duplicate-prevention.md)** | Prevent duplicate processing with state management | Medium | Idempotent workflows |
|
|
21
|
+
| **[Master Data ETL](./master-data-etl.md)** | Complete ETL pipeline for master data | Advanced | Enterprise integration |
|
|
22
|
+
|
|
23
|
+
## Quick Navigation
|
|
24
|
+
|
|
25
|
+
### By Use Case
|
|
26
|
+
|
|
27
|
+
| I Want To... | Pattern | Complexity |
|
|
28
|
+
|--|--|--|
|
|
29
|
+
| **Validate CSV data** | [CSV Schema Validation](./csv-schema-validation-and-rejection-report.md) | Medium |
|
|
30
|
+
| **Transform data fields** | [Field Mapping Universal](./field-mapping-universal.md) | Beginner |
|
|
31
|
+
| **Handle errors gracefully** | [Error Handling & Retry](./error-handling-retry.md) | Medium |
|
|
32
|
+
| **Prevent duplicates** | [State & Duplicate Prevention](./state-duplicate-prevention.md) | Medium |
|
|
33
|
+
| **Process large files** | [Large File Splitting](./large-file-splitting.md) | Advanced |
|
|
34
|
+
| **Stream large datasets** | [Pagination & Streaming](./pagination-streaming.md) | Intermediate |
|
|
35
|
+
| **Custom transformations** | [Custom Resolvers](./custom-resolvers.md) | Advanced |
|
|
36
|
+
| **Build ETL pipeline** | [Master Data ETL](./master-data-etl.md) | Advanced |
|
|
37
|
+
|
|
38
|
+
## Pattern Structure
|
|
39
|
+
|
|
40
|
+
Each pattern includes:
|
|
41
|
+
- **Problem Statement** - What problem does this solve?
|
|
42
|
+
- **Solution Overview** - High-level approach
|
|
43
|
+
- **Complete Code** - Production-ready implementation
|
|
44
|
+
- **Configuration** - Required settings
|
|
45
|
+
- **Testing** - How to test the pattern
|
|
46
|
+
- **Troubleshooting** - Common issues and fixes
|
|
47
|
+
|
|
48
|
+
## Using These Patterns
|
|
49
|
+
|
|
50
|
+
1. **Choose a pattern** that matches your use case
|
|
51
|
+
2. **Copy the code** to your project
|
|
52
|
+
3. **Customize** for your specific needs
|
|
53
|
+
4. **Test** with sample data
|
|
54
|
+
5. **Deploy** to production
|
|
55
|
+
|
|
56
|
+
## Related Documentation
|
|
57
|
+
|
|
58
|
+
- [Versori Patterns](../versori/patterns/) - Versori-specific patterns
|
|
59
|
+
- [Standalone Templates](../standalone/) - Node.js/Deno templates
|
|
60
|
+
- [Versori Workflows](../versori/workflows/) - Scheduled workflows
|
|
61
|
+
|
|
62
|
+
## Support
|
|
63
|
+
|
|
64
|
+
Need help implementing these patterns?
|
|
65
|
+
- Review the complete code in each pattern
|
|
66
|
+
- Check troubleshooting sections
|
|
67
|
+
- See related documentation links
|
|
68
|
+
- Contact support@fluentcommerce.com
|
|
@@ -1,233 +1,233 @@
|
|
|
1
|
-
# Pattern: CSV Schema Validation + Rejection Report to S3
|
|
2
|
-
|
|
3
|
-
**FC Connect SDK Use Case Guide**
|
|
4
|
-
|
|
5
|
-
> **SDK**: [@fluentcommerce/fc-connect-sdk](https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk)
|
|
6
|
-
> **Version**: Use latest - `npm install @fluentcommerce/fc-connect-sdk@latest`
|
|
7
|
-
|
|
8
|
-
**Context**: Validate CSV files (columns and row-level checks) before ingestion. Generate a rejection report CSV for invalid rows and upload to S3 for operators.
|
|
9
|
-
|
|
10
|
-
**Type**: Reusable Pattern
|
|
11
|
-
|
|
12
|
-
**Complexity**: Low-Medium
|
|
13
|
-
|
|
14
|
-
**Lines**: ~220
|
|
15
|
-
|
|
16
|
-
## When to Use
|
|
17
|
-
|
|
18
|
-
- Upstream sends variable/messy CSV formats
|
|
19
|
-
- Need deterministic validation and operator feedback
|
|
20
|
-
- Want to avoid partial ingestion or silent skips
|
|
21
|
-
|
|
22
|
-
## Validation Model
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
interface ColumnRule {
|
|
26
|
-
name: string; // CSV header name
|
|
27
|
-
required?: boolean; // Must exist and be non-empty
|
|
28
|
-
type?: 'string' | 'number' | 'integer' | 'date' | 'boolean';
|
|
29
|
-
regex?: string; // Optional format regex
|
|
30
|
-
min?: number; // For number/integer
|
|
31
|
-
max?: number; // For number/integer
|
|
32
|
-
allowed?: string[]; // Enumerated values
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
interface Schema {
|
|
36
|
-
columns: ColumnRule[];
|
|
37
|
-
allowExtraColumns?: boolean;
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Example Schema (inventory.csv)
|
|
42
|
-
|
|
43
|
-
```json
|
|
44
|
-
{
|
|
45
|
-
"columns": [
|
|
46
|
-
{ "name": "sku", "required": true },
|
|
47
|
-
{ "name": "location", "required": true },
|
|
48
|
-
{ "name": "quantity", "required": true, "type": "integer", "min": 0 },
|
|
49
|
-
{ "name": "status", "type": "string", "allowed": ["ACTIVE", "INACTIVE"] },
|
|
50
|
-
{ "name": "expected_date", "type": "date" }
|
|
51
|
-
],
|
|
52
|
-
"allowExtraColumns": false
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Implementation Snippet
|
|
57
|
-
|
|
58
|
-
> **⚠️ RUNTIME COMPATIBILITY NOTE:**
|
|
59
|
-
> This pattern includes `import { Buffer } from 'node:buffer';` for Deno/Versori compatibility.
|
|
60
|
-
> While Buffer is globally available in Node.js, including this import ensures the code works
|
|
61
|
-
> across all runtimes (Node.js, Deno, Versori) without modification.
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
// FC Connect SDK (latest)
|
|
65
|
-
// Install: npm install @fluentcommerce/fc-connect-sdk@latest
|
|
66
|
-
// Docs: https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk
|
|
67
|
-
// GitHub: https://github.com/fluentcommerce/fc-connect-sdk
|
|
68
|
-
|
|
69
|
-
import { Buffer } from 'node:buffer'; // Required for Deno/Versori compatibility
|
|
70
|
-
import {
|
|
71
|
-
CSVParserService,
|
|
72
|
-
S3DataSource,
|
|
73
|
-
createConsoleLogger,
|
|
74
|
-
toStructuredLogger
|
|
75
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
76
|
-
|
|
77
|
-
async function validateCsvAndReport(
|
|
78
|
-
s3: S3DataSource,
|
|
79
|
-
inputKey: string,
|
|
80
|
-
outputPrefix: string,
|
|
81
|
-
schema: Schema,
|
|
82
|
-
delimiter = ','
|
|
83
|
-
) {
|
|
84
|
-
const logging = createConsoleLogger();
|
|
85
|
-
const logger = logging.createServiceLogger('csv-validation');
|
|
86
|
-
|
|
87
|
-
// Download CSV
|
|
88
|
-
const csvContent = (await s3.downloadFile(inputKey, { encoding: 'utf8' })) as string;
|
|
89
|
-
|
|
90
|
-
// Parse
|
|
91
|
-
const parser = new CSVParserService();
|
|
92
|
-
const rows = await parser.parse(csvContent, {
|
|
93
|
-
columns: true,
|
|
94
|
-
skip_empty_lines: true,
|
|
95
|
-
trim: true,
|
|
96
|
-
delimiter,
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
if (rows.length === 0) {
|
|
100
|
-
return { validCount: 0, invalidCount: 0, reportKey: null };
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Header validation
|
|
104
|
-
const headers = Object.keys(rows[0]);
|
|
105
|
-
const requiredMissing = schema.columns
|
|
106
|
-
.filter(c => c.required)
|
|
107
|
-
.map(c => c.name)
|
|
108
|
-
.filter(name => !headers.includes(name));
|
|
109
|
-
|
|
110
|
-
if (requiredMissing.length > 0) {
|
|
111
|
-
throw new Error(`Missing required columns: ${requiredMissing.join(', ')}`);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (schema.allowExtraColumns === false) {
|
|
115
|
-
const allowed = new Set(schema.columns.map(c => c.name));
|
|
116
|
-
const extra = headers.filter(h => !allowed.has(h));
|
|
117
|
-
if (extra.length > 0) {
|
|
118
|
-
throw new Error(`Unexpected columns present: ${extra.join(', ')}`);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Row validation
|
|
123
|
-
const invalid: any[] = [];
|
|
124
|
-
const valid: any[] = [];
|
|
125
|
-
|
|
126
|
-
for (let i = 0; i < rows.length; i++) {
|
|
127
|
-
const r = rows[i];
|
|
128
|
-
const rowErrors: string[] = [];
|
|
129
|
-
|
|
130
|
-
for (const col of schema.columns) {
|
|
131
|
-
const v = r[col.name];
|
|
132
|
-
|
|
133
|
-
if (col.required && (v === undefined || v === null || String(v).trim() === '')) {
|
|
134
|
-
rowErrors.push(`${col.name}: required`);
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (v === undefined || v === null || String(v).trim() === '') continue;
|
|
139
|
-
|
|
140
|
-
if (col.type === 'integer') {
|
|
141
|
-
const n = Number(v);
|
|
142
|
-
if (!Number.isInteger(n)) rowErrors.push(`${col.name}: not integer`);
|
|
143
|
-
if (col.min !== undefined && n < col.min) rowErrors.push(`${col.name}: < min`);
|
|
144
|
-
if (col.max !== undefined && n > col.max) rowErrors.push(`${col.name}: > max`);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (col.type === 'number') {
|
|
148
|
-
const n = Number(v);
|
|
149
|
-
if (Number.isNaN(n)) rowErrors.push(`${col.name}: not number`);
|
|
150
|
-
if (col.min !== undefined && n < col.min) rowErrors.push(`${col.name}: < min`);
|
|
151
|
-
if (col.max !== undefined && n > col.max) rowErrors.push(`${col.name}: > max`);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if (col.type === 'date') {
|
|
155
|
-
const d = new Date(String(v));
|
|
156
|
-
if (Number.isNaN(d.getTime())) rowErrors.push(`${col.name}: invalid date`);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (col.type === 'boolean') {
|
|
160
|
-
const s = String(v).toLowerCase();
|
|
161
|
-
if (!['true', 'false', '1', '0', 'yes', 'no'].includes(s))
|
|
162
|
-
rowErrors.push(`${col.name}: invalid boolean`);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if (col.regex) {
|
|
166
|
-
const re = new RegExp(col.regex);
|
|
167
|
-
if (!re.test(String(v))) rowErrors.push(`${col.name}: regex mismatch`);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (col.allowed && !col.allowed.includes(String(v))) {
|
|
171
|
-
rowErrors.push(`${col.name}: not in allowed set`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
if (rowErrors.length > 0) invalid.push({ ...r, __errors: rowErrors.join('; ') });
|
|
176
|
-
else valid.push(r);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Rejection report
|
|
180
|
-
let reportKey: string | null = null;
|
|
181
|
-
if (invalid.length > 0) {
|
|
182
|
-
const header = [...headers, '__errors'];
|
|
183
|
-
const lines = [header.join(',')];
|
|
184
|
-
|
|
185
|
-
for (const row of invalid) {
|
|
186
|
-
const fields = header.map(h => String(row[h] ?? '').replace(/"/g, '""'));
|
|
187
|
-
lines.push('"' + fields.join('","') + '"');
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
const reportCsv = lines.join('\n');
|
|
191
|
-
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
192
|
-
reportKey = `${outputPrefix}rejections/rejections_${ts}.csv`;
|
|
193
|
-
|
|
194
|
-
await s3.uploadFile(reportKey, Buffer.from(reportCsv, 'utf8'), {
|
|
195
|
-
contentType: 'text/csv; charset=utf-8',
|
|
196
|
-
metadata: { 'row-count': String(invalid.length) },
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
logger.info('CSV validation summary', {
|
|
201
|
-
valid: valid.length,
|
|
202
|
-
invalid: invalid.length,
|
|
203
|
-
reportKey,
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
return {
|
|
207
|
-
validCount: valid.length,
|
|
208
|
-
invalidCount: invalid.length,
|
|
209
|
-
reportKey,
|
|
210
|
-
validRows: valid,
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## Integration Points
|
|
216
|
-
|
|
217
|
-
- S3 ingestion: run validation before mapping; push only `validRows` to `UniversalMapper`
|
|
218
|
-
- SFTP ingestion: upload rejection report to target S3 bucket for operators
|
|
219
|
-
- Versori response: include `reportKey` in JSON result for quick access
|
|
220
|
-
|
|
221
|
-
## Best Practices
|
|
222
|
-
|
|
223
|
-
- Fail fast on missing required columns; do not ingest
|
|
224
|
-
- Keep a minimal, clear error per row (`__errors` field)
|
|
225
|
-
- Version schemas if upstream changes are frequent
|
|
226
|
-
- Store rejection reports under a date-partitioned prefix
|
|
227
|
-
- Alert when invalidCount exceeds threshold
|
|
228
|
-
|
|
229
|
-
## Related
|
|
230
|
-
|
|
231
|
-
- CSV Parser options: `../../02-CORE-GUIDES/parsers/modules/02-csv-parser.md`
|
|
232
|
-
- Ingestion guides: S3 and SFTP use-cases
|
|
233
|
-
- Error handling pattern: `docs/use-cases/patterns/error-handling-retry.md`
|
|
1
|
+
# Pattern: CSV Schema Validation + Rejection Report to S3
|
|
2
|
+
|
|
3
|
+
**FC Connect SDK Use Case Guide**
|
|
4
|
+
|
|
5
|
+
> **SDK**: [@fluentcommerce/fc-connect-sdk](https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk)
|
|
6
|
+
> **Version**: Use latest - `npm install @fluentcommerce/fc-connect-sdk@latest`
|
|
7
|
+
|
|
8
|
+
**Context**: Validate CSV files (columns and row-level checks) before ingestion. Generate a rejection report CSV for invalid rows and upload to S3 for operators.
|
|
9
|
+
|
|
10
|
+
**Type**: Reusable Pattern
|
|
11
|
+
|
|
12
|
+
**Complexity**: Low-Medium
|
|
13
|
+
|
|
14
|
+
**Lines**: ~220
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- Upstream sends variable/messy CSV formats
|
|
19
|
+
- Need deterministic validation and operator feedback
|
|
20
|
+
- Want to avoid partial ingestion or silent skips
|
|
21
|
+
|
|
22
|
+
## Validation Model
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
interface ColumnRule {
|
|
26
|
+
name: string; // CSV header name
|
|
27
|
+
required?: boolean; // Must exist and be non-empty
|
|
28
|
+
type?: 'string' | 'number' | 'integer' | 'date' | 'boolean';
|
|
29
|
+
regex?: string; // Optional format regex
|
|
30
|
+
min?: number; // For number/integer
|
|
31
|
+
max?: number; // For number/integer
|
|
32
|
+
allowed?: string[]; // Enumerated values
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface Schema {
|
|
36
|
+
columns: ColumnRule[];
|
|
37
|
+
allowExtraColumns?: boolean;
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Example Schema (inventory.csv)
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"columns": [
|
|
46
|
+
{ "name": "sku", "required": true },
|
|
47
|
+
{ "name": "location", "required": true },
|
|
48
|
+
{ "name": "quantity", "required": true, "type": "integer", "min": 0 },
|
|
49
|
+
{ "name": "status", "type": "string", "allowed": ["ACTIVE", "INACTIVE"] },
|
|
50
|
+
{ "name": "expected_date", "type": "date" }
|
|
51
|
+
],
|
|
52
|
+
"allowExtraColumns": false
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Implementation Snippet
|
|
57
|
+
|
|
58
|
+
> **⚠️ RUNTIME COMPATIBILITY NOTE:**
|
|
59
|
+
> This pattern includes `import { Buffer } from 'node:buffer';` for Deno/Versori compatibility.
|
|
60
|
+
> While Buffer is globally available in Node.js, including this import ensures the code works
|
|
61
|
+
> across all runtimes (Node.js, Deno, Versori) without modification.
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
// FC Connect SDK (latest)
|
|
65
|
+
// Install: npm install @fluentcommerce/fc-connect-sdk@latest
|
|
66
|
+
// Docs: https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk
|
|
67
|
+
// GitHub: https://github.com/fluentcommerce/fc-connect-sdk
|
|
68
|
+
|
|
69
|
+
import { Buffer } from 'node:buffer'; // Required for Deno/Versori compatibility
|
|
70
|
+
import {
|
|
71
|
+
CSVParserService,
|
|
72
|
+
S3DataSource,
|
|
73
|
+
createConsoleLogger,
|
|
74
|
+
toStructuredLogger
|
|
75
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
76
|
+
|
|
77
|
+
async function validateCsvAndReport(
|
|
78
|
+
s3: S3DataSource,
|
|
79
|
+
inputKey: string,
|
|
80
|
+
outputPrefix: string,
|
|
81
|
+
schema: Schema,
|
|
82
|
+
delimiter = ','
|
|
83
|
+
) {
|
|
84
|
+
const logging = createConsoleLogger();
|
|
85
|
+
const logger = logging.createServiceLogger('csv-validation');
|
|
86
|
+
|
|
87
|
+
// Download CSV
|
|
88
|
+
const csvContent = (await s3.downloadFile(inputKey, { encoding: 'utf8' })) as string;
|
|
89
|
+
|
|
90
|
+
// Parse
|
|
91
|
+
const parser = new CSVParserService();
|
|
92
|
+
const rows = await parser.parse(csvContent, {
|
|
93
|
+
columns: true,
|
|
94
|
+
skip_empty_lines: true,
|
|
95
|
+
trim: true,
|
|
96
|
+
delimiter,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
if (rows.length === 0) {
|
|
100
|
+
return { validCount: 0, invalidCount: 0, reportKey: null };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Header validation
|
|
104
|
+
const headers = Object.keys(rows[0]);
|
|
105
|
+
const requiredMissing = schema.columns
|
|
106
|
+
.filter(c => c.required)
|
|
107
|
+
.map(c => c.name)
|
|
108
|
+
.filter(name => !headers.includes(name));
|
|
109
|
+
|
|
110
|
+
if (requiredMissing.length > 0) {
|
|
111
|
+
throw new Error(`Missing required columns: ${requiredMissing.join(', ')}`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (schema.allowExtraColumns === false) {
|
|
115
|
+
const allowed = new Set(schema.columns.map(c => c.name));
|
|
116
|
+
const extra = headers.filter(h => !allowed.has(h));
|
|
117
|
+
if (extra.length > 0) {
|
|
118
|
+
throw new Error(`Unexpected columns present: ${extra.join(', ')}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Row validation
|
|
123
|
+
const invalid: any[] = [];
|
|
124
|
+
const valid: any[] = [];
|
|
125
|
+
|
|
126
|
+
for (let i = 0; i < rows.length; i++) {
|
|
127
|
+
const r = rows[i];
|
|
128
|
+
const rowErrors: string[] = [];
|
|
129
|
+
|
|
130
|
+
for (const col of schema.columns) {
|
|
131
|
+
const v = r[col.name];
|
|
132
|
+
|
|
133
|
+
if (col.required && (v === undefined || v === null || String(v).trim() === '')) {
|
|
134
|
+
rowErrors.push(`${col.name}: required`);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (v === undefined || v === null || String(v).trim() === '') continue;
|
|
139
|
+
|
|
140
|
+
if (col.type === 'integer') {
|
|
141
|
+
const n = Number(v);
|
|
142
|
+
if (!Number.isInteger(n)) rowErrors.push(`${col.name}: not integer`);
|
|
143
|
+
if (col.min !== undefined && n < col.min) rowErrors.push(`${col.name}: < min`);
|
|
144
|
+
if (col.max !== undefined && n > col.max) rowErrors.push(`${col.name}: > max`);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (col.type === 'number') {
|
|
148
|
+
const n = Number(v);
|
|
149
|
+
if (Number.isNaN(n)) rowErrors.push(`${col.name}: not number`);
|
|
150
|
+
if (col.min !== undefined && n < col.min) rowErrors.push(`${col.name}: < min`);
|
|
151
|
+
if (col.max !== undefined && n > col.max) rowErrors.push(`${col.name}: > max`);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (col.type === 'date') {
|
|
155
|
+
const d = new Date(String(v));
|
|
156
|
+
if (Number.isNaN(d.getTime())) rowErrors.push(`${col.name}: invalid date`);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (col.type === 'boolean') {
|
|
160
|
+
const s = String(v).toLowerCase();
|
|
161
|
+
if (!['true', 'false', '1', '0', 'yes', 'no'].includes(s))
|
|
162
|
+
rowErrors.push(`${col.name}: invalid boolean`);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (col.regex) {
|
|
166
|
+
const re = new RegExp(col.regex);
|
|
167
|
+
if (!re.test(String(v))) rowErrors.push(`${col.name}: regex mismatch`);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (col.allowed && !col.allowed.includes(String(v))) {
|
|
171
|
+
rowErrors.push(`${col.name}: not in allowed set`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (rowErrors.length > 0) invalid.push({ ...r, __errors: rowErrors.join('; ') });
|
|
176
|
+
else valid.push(r);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Rejection report
|
|
180
|
+
let reportKey: string | null = null;
|
|
181
|
+
if (invalid.length > 0) {
|
|
182
|
+
const header = [...headers, '__errors'];
|
|
183
|
+
const lines = [header.join(',')];
|
|
184
|
+
|
|
185
|
+
for (const row of invalid) {
|
|
186
|
+
const fields = header.map(h => String(row[h] ?? '').replace(/"/g, '""'));
|
|
187
|
+
lines.push('"' + fields.join('","') + '"');
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const reportCsv = lines.join('\n');
|
|
191
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
192
|
+
reportKey = `${outputPrefix}rejections/rejections_${ts}.csv`;
|
|
193
|
+
|
|
194
|
+
await s3.uploadFile(reportKey, Buffer.from(reportCsv, 'utf8'), {
|
|
195
|
+
contentType: 'text/csv; charset=utf-8',
|
|
196
|
+
metadata: { 'row-count': String(invalid.length) },
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
logger.info('CSV validation summary', {
|
|
201
|
+
valid: valid.length,
|
|
202
|
+
invalid: invalid.length,
|
|
203
|
+
reportKey,
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
return {
|
|
207
|
+
validCount: valid.length,
|
|
208
|
+
invalidCount: invalid.length,
|
|
209
|
+
reportKey,
|
|
210
|
+
validRows: valid,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Integration Points
|
|
216
|
+
|
|
217
|
+
- S3 ingestion: run validation before mapping; push only `validRows` to `UniversalMapper`
|
|
218
|
+
- SFTP ingestion: upload rejection report to target S3 bucket for operators
|
|
219
|
+
- Versori response: include `reportKey` in JSON result for quick access
|
|
220
|
+
|
|
221
|
+
## Best Practices
|
|
222
|
+
|
|
223
|
+
- Fail fast on missing required columns; do not ingest
|
|
224
|
+
- Keep a minimal, clear error per row (`__errors` field)
|
|
225
|
+
- Version schemas if upstream changes are frequent
|
|
226
|
+
- Store rejection reports under a date-partitioned prefix
|
|
227
|
+
- Alert when invalidCount exceeds threshold
|
|
228
|
+
|
|
229
|
+
## Related
|
|
230
|
+
|
|
231
|
+
- CSV Parser options: `../../02-CORE-GUIDES/parsers/modules/02-csv-parser.md`
|
|
232
|
+
- Ingestion guides: S3 and SFTP use-cases
|
|
233
|
+
- Error handling pattern: `docs/use-cases/patterns/error-handling-retry.md`
|