@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,731 +1,731 @@
|
|
|
1
|
-
# Module 7: Deployment, Monitoring & Operations
|
|
2
|
-
|
|
3
|
-
[← Back to Versori Platform Guide](../platforms-versori-readme.md)
|
|
4
|
-
|
|
5
|
-
**Module 7 of 8** | **Level**: Advanced | **Time**: 30 minutes
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Learning Objectives
|
|
10
|
-
|
|
11
|
-
By the end of this module, you will:
|
|
12
|
-
- ✅ Deploy connectors to Versori Platform
|
|
13
|
-
- ✅ Monitor workflow execution and logs
|
|
14
|
-
- ✅ Implement CI/CD pipelines for automated deployment
|
|
15
|
-
- ✅ Manage environment-specific configurations
|
|
16
|
-
- ✅ Handle versioning and rollback strategies
|
|
17
|
-
- ✅ Debug production issues effectively
|
|
18
|
-
- ✅ Optimize deployment for performance
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Deployment Workflow
|
|
23
|
-
|
|
24
|
-
### Pre-Deployment Checklist
|
|
25
|
-
|
|
26
|
-
Before deploying to Versori, ensure:
|
|
27
|
-
|
|
28
|
-
- [ ] All TypeScript code compiles without errors
|
|
29
|
-
- [ ] Connections configured in Versori UI
|
|
30
|
-
- [ ] Connector variables set (secrets, config)
|
|
31
|
-
- [ ] `package.json` has correct `versori.workflows` entry
|
|
32
|
-
- [ ] Environment-specific settings verified
|
|
33
|
-
- [ ] Test workflows validated locally
|
|
34
|
-
- [ ] Documentation updated
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Local Development & Testing
|
|
39
|
-
|
|
40
|
-
### Project Structure
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
my-fluent-connector/
|
|
44
|
-
├── src/
|
|
45
|
-
│ ├── index.ts # Main entry point
|
|
46
|
-
│ ├── workflows/
|
|
47
|
-
│ │ ├── inventory-sync.ts # Scheduled workflows
|
|
48
|
-
│ │ ├── order-webhook.ts # Webhook receivers
|
|
49
|
-
│ │ └── query-api.ts # HTTP workflows
|
|
50
|
-
│ ├── config/
|
|
51
|
-
│ │ ├── mappings.json # Field mappings
|
|
52
|
-
│ │ └── constants.ts # Configuration constants
|
|
53
|
-
│ └── utils/
|
|
54
|
-
│ ├── transformers.ts # Data transformation helpers
|
|
55
|
-
│ └── validators.ts # Validation utilities
|
|
56
|
-
├── dist/ # Build output (gitignored)
|
|
57
|
-
├── node_modules/ # Dependencies (gitignored)
|
|
58
|
-
├── package.json # Package configuration
|
|
59
|
-
├── tsconfig.json # TypeScript configuration
|
|
60
|
-
├── .env.example # Environment variable template
|
|
61
|
-
└── readme.md # Connector documentation
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Package.json Configuration
|
|
65
|
-
|
|
66
|
-
```json
|
|
67
|
-
{
|
|
68
|
-
"name": "fluent-inventory-connector",
|
|
69
|
-
"version": "1.0.0",
|
|
70
|
-
"description": "Fluent Commerce inventory integration",
|
|
71
|
-
"main": "dist/index.js",
|
|
72
|
-
"scripts": {
|
|
73
|
-
"build": "tsc",
|
|
74
|
-
"deploy": "npm run build && versori deploy",
|
|
75
|
-
"logs": "versori logs --follow",
|
|
76
|
-
"validate": "tsc --noEmit",
|
|
77
|
-
"test": "jest",
|
|
78
|
-
"lint": "eslint src/**/*.ts"
|
|
79
|
-
},
|
|
80
|
-
"dependencies": {
|
|
81
|
-
"@fluentcommerce/fc-connect-sdk": "latest",
|
|
82
|
-
"@versori/run": "^0.4.4"
|
|
83
|
-
},
|
|
84
|
-
"devDependencies": {
|
|
85
|
-
"typescript": "^5.0.0",
|
|
86
|
-
"@types/node": "^20.0.0",
|
|
87
|
-
"eslint": "^8.0.0",
|
|
88
|
-
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
89
|
-
"@typescript-eslint/parser": "^6.0.0",
|
|
90
|
-
"jest": "^29.0.0"
|
|
91
|
-
},
|
|
92
|
-
"versori": {
|
|
93
|
-
"workflows": "dist/index.js"
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**CRITICAL**: The `versori.workflows` field tells Versori where to find exported workflows.
|
|
99
|
-
|
|
100
|
-
### TypeScript Build
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
# Compile TypeScript
|
|
104
|
-
npm run build
|
|
105
|
-
|
|
106
|
-
# Validate without building
|
|
107
|
-
npm run validate
|
|
108
|
-
|
|
109
|
-
# Watch mode for development
|
|
110
|
-
tsc --watch
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Deploying to Versori
|
|
116
|
-
|
|
117
|
-
### Manual Deployment
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
# 1. Build TypeScript
|
|
121
|
-
npm run build
|
|
122
|
-
|
|
123
|
-
# 2. Deploy to Versori
|
|
124
|
-
versori deploy
|
|
125
|
-
|
|
126
|
-
# Expected output:
|
|
127
|
-
# ✓ Building project...
|
|
128
|
-
# ✓ Uploading to Versori...
|
|
129
|
-
# ✓ Deployment successful
|
|
130
|
-
#
|
|
131
|
-
# Workflows deployed:
|
|
132
|
-
# - query-inventory (HTTP)
|
|
133
|
-
# URL: https://{workspace}.versori.run/query-inventory
|
|
134
|
-
# - receive-order (Webhook)
|
|
135
|
-
# URL: https://{workspace}.versori.run/receive-order
|
|
136
|
-
# - daily-sync (Scheduled)
|
|
137
|
-
# Schedule: 0 2 * * *
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### Deploy Script
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
# Combined build + deploy
|
|
144
|
-
npm run deploy
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### Deployment Output
|
|
148
|
-
|
|
149
|
-
Versori deployment creates:
|
|
150
|
-
- **HTTP endpoints** for `http()` workflows
|
|
151
|
-
- **Webhook URLs** for `webhook()` workflows
|
|
152
|
-
- **Scheduled jobs** for `schedule()` workflows
|
|
153
|
-
- **Internal functions** (not exposed) for `fn()` workflows
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Environment Management
|
|
158
|
-
|
|
159
|
-
### Environment-Specific Configurations
|
|
160
|
-
|
|
161
|
-
Maintain separate configurations per environment:
|
|
162
|
-
|
|
163
|
-
```typescript
|
|
164
|
-
// src/config/environments.ts
|
|
165
|
-
export const environments = {
|
|
166
|
-
development: {
|
|
167
|
-
fluentConnection: 'fluent_commerce_dev',
|
|
168
|
-
s3Bucket: 'inventory-dev',
|
|
169
|
-
logLevel: 'debug',
|
|
170
|
-
batchSize: 10
|
|
171
|
-
},
|
|
172
|
-
staging: {
|
|
173
|
-
fluentConnection: 'fluent_commerce_staging',
|
|
174
|
-
s3Bucket: 'inventory-staging',
|
|
175
|
-
logLevel: 'info',
|
|
176
|
-
batchSize: 50
|
|
177
|
-
},
|
|
178
|
-
production: {
|
|
179
|
-
fluentConnection: 'fluent_commerce_prod',
|
|
180
|
-
s3Bucket: 'inventory-prod',
|
|
181
|
-
logLevel: 'warn',
|
|
182
|
-
batchSize: 100
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
export function getConfig(env: string = 'production') {
|
|
187
|
-
return environments[env as keyof typeof environments] || environments.production;
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### Using Environment Configuration
|
|
192
|
-
|
|
193
|
-
```typescript
|
|
194
|
-
import { http } from '@versori/run';
|
|
195
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
196
|
-
import { getConfig } from './config/environments';
|
|
197
|
-
|
|
198
|
-
export const envAwareWorkflow = http('env-aware', async (ctx) => {
|
|
199
|
-
// Get environment from connector variable or default to production
|
|
200
|
-
const env = ctx.vars?.ENVIRONMENT || 'production';
|
|
201
|
-
const config = getConfig(env);
|
|
202
|
-
|
|
203
|
-
ctx.log('info', 'Running in environment', { env, config });
|
|
204
|
-
|
|
205
|
-
// Use environment-specific connection
|
|
206
|
-
const client = await createClient({
|
|
207
|
-
connection: ctx.connections?.[config.fluentConnection],
|
|
208
|
-
log: ctx.log
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
// Use environment-specific settings
|
|
212
|
-
const batchSize = config.batchSize;
|
|
213
|
-
|
|
214
|
-
// ... rest of workflow
|
|
215
|
-
});
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### Connector Variables in Versori
|
|
219
|
-
|
|
220
|
-
Set environment-specific variables in Versori UI:
|
|
221
|
-
|
|
222
|
-
**Development**:
|
|
223
|
-
```
|
|
224
|
-
ENVIRONMENT=development
|
|
225
|
-
FLUENT_RETAILER_ID=1
|
|
226
|
-
LOG_LEVEL=debug
|
|
227
|
-
AWS_S3_BUCKET=inventory-dev
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
**Production**:
|
|
231
|
-
```
|
|
232
|
-
ENVIRONMENT=production
|
|
233
|
-
FLUENT_RETAILER_ID=1
|
|
234
|
-
LOG_LEVEL=warn
|
|
235
|
-
AWS_S3_BUCKET=inventory-prod
|
|
236
|
-
FLUENT_WEBHOOK_PUBLIC_KEY=-----BEGIN PUBLIC KEY-----...
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## Monitoring & Logging
|
|
242
|
-
|
|
243
|
-
### Viewing Logs
|
|
244
|
-
|
|
245
|
-
#### Versori Dashboard
|
|
246
|
-
|
|
247
|
-
1. Navigate to **Workflows** tab
|
|
248
|
-
2. Select workflow
|
|
249
|
-
3. Click **Executions** tab
|
|
250
|
-
4. View:
|
|
251
|
-
- Execution timestamp
|
|
252
|
-
- Duration (ms)
|
|
253
|
-
- Status (success/error)
|
|
254
|
-
- Logs (`ctx.log()` calls)
|
|
255
|
-
- Input/output data
|
|
256
|
-
|
|
257
|
-
#### CLI Logs
|
|
258
|
-
|
|
259
|
-
```bash
|
|
260
|
-
# Follow logs in real-time
|
|
261
|
-
versori logs --follow
|
|
262
|
-
|
|
263
|
-
# Filter by workflow
|
|
264
|
-
versori logs --workflow query-inventory
|
|
265
|
-
|
|
266
|
-
# Filter by level
|
|
267
|
-
versori logs --level error
|
|
268
|
-
|
|
269
|
-
# Show last N entries
|
|
270
|
-
versori logs --tail 100
|
|
271
|
-
|
|
272
|
-
# Filter by date range
|
|
273
|
-
versori logs --since 2025-01-15 --until 2025-01-16
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### Structured Logging Best Practices
|
|
277
|
-
|
|
278
|
-
```typescript
|
|
279
|
-
export const wellLogged = http('well-logged', {
|
|
280
|
-
connection: 'fluent_commerce'
|
|
281
|
-
}, async (ctx) => {
|
|
282
|
-
// Log workflow start with context
|
|
283
|
-
ctx.log('info', 'Workflow started', {
|
|
284
|
-
workflow: 'well-logged',
|
|
285
|
-
executionId: ctx.executionId,
|
|
286
|
-
timestamp: new Date().toISOString()
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
const startTime = Date.now();
|
|
290
|
-
|
|
291
|
-
try {
|
|
292
|
-
const client = await createClient(ctx);
|
|
293
|
-
|
|
294
|
-
// Log before expensive operations
|
|
295
|
-
ctx.log('debug', 'Fetching data from Fluent API');
|
|
296
|
-
|
|
297
|
-
const result = await client.graphql({
|
|
298
|
-
query: `query { products(first: 100) { edges { node { id ref } } } }`
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
const duration = Date.now() - startTime;
|
|
302
|
-
|
|
303
|
-
// Log success with metrics
|
|
304
|
-
ctx.log('info', 'Workflow completed successfully', {
|
|
305
|
-
duration,
|
|
306
|
-
recordCount: result.data.products.edges.length,
|
|
307
|
-
status: 'success'
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
return result.data;
|
|
311
|
-
|
|
312
|
-
} catch (error) {
|
|
313
|
-
const duration = Date.now() - startTime;
|
|
314
|
-
|
|
315
|
-
// Log error with full context
|
|
316
|
-
ctx.log('error', 'Workflow failed', {
|
|
317
|
-
duration,
|
|
318
|
-
error: error instanceof Error ? error.message : String(error),
|
|
319
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
320
|
-
status: 'error'
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
throw error;
|
|
324
|
-
}
|
|
325
|
-
});
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Log Levels
|
|
329
|
-
|
|
330
|
-
| Level | Use Case | Example |
|
|
331
|
-
|-------|----------|---------|
|
|
332
|
-
| **debug** | Detailed diagnostics | Variable values, flow control |
|
|
333
|
-
| **info** | General information | Workflow start/end, record counts |
|
|
334
|
-
| **warn** | Potentially harmful situations | Rate limits approaching, fallback used |
|
|
335
|
-
| **error** | Error events | API failures, validation errors |
|
|
336
|
-
|
|
337
|
-
---
|
|
338
|
-
|
|
339
|
-
## Performance Monitoring
|
|
340
|
-
|
|
341
|
-
### Execution Metrics
|
|
342
|
-
|
|
343
|
-
```typescript
|
|
344
|
-
import { http } from '@versori/run';
|
|
345
|
-
import { VersoriKVAdapter } from '@fluentcommerce/fc-connect-sdk';
|
|
346
|
-
|
|
347
|
-
export const monitoredWorkflow = http('monitored', {
|
|
348
|
-
connection: 'fluent_commerce'
|
|
349
|
-
}, async (ctx) => {
|
|
350
|
-
const kv = ctx.openKv(':project:');
|
|
351
|
-
const adapter = new VersoriKVAdapter(kv);
|
|
352
|
-
|
|
353
|
-
const startTime = Date.now();
|
|
354
|
-
const metricsKey = `metrics:${ctx.workflow?.name}`;
|
|
355
|
-
|
|
356
|
-
try {
|
|
357
|
-
// Execute workflow
|
|
358
|
-
const result = await executeWorkflow(ctx);
|
|
359
|
-
|
|
360
|
-
const duration = Date.now() - startTime;
|
|
361
|
-
|
|
362
|
-
// Store metrics
|
|
363
|
-
const metrics = await adapter.get(metricsKey) || { executions: [] };
|
|
364
|
-
metrics.executions.push({
|
|
365
|
-
timestamp: Date.now(),
|
|
366
|
-
duration,
|
|
367
|
-
status: 'success',
|
|
368
|
-
recordCount: result.count
|
|
369
|
-
});
|
|
370
|
-
|
|
371
|
-
// Keep last 100 executions
|
|
372
|
-
if (metrics.executions.length > 100) {
|
|
373
|
-
metrics.executions = metrics.executions.slice(-100);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
await adapter.set(metricsKey, metrics);
|
|
377
|
-
|
|
378
|
-
// Calculate stats
|
|
379
|
-
const avgDuration = metrics.executions.reduce((sum, e) => sum + e.duration, 0) / metrics.executions.length;
|
|
380
|
-
const successRate = metrics.executions.filter(e => e.status === 'success').length / metrics.executions.length;
|
|
381
|
-
|
|
382
|
-
ctx.log('info', 'Workflow metrics', {
|
|
383
|
-
duration,
|
|
384
|
-
avgDuration: Math.round(avgDuration),
|
|
385
|
-
successRate: (successRate * 100).toFixed(2) + '%',
|
|
386
|
-
totalExecutions: metrics.executions.length
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
return result;
|
|
390
|
-
|
|
391
|
-
} catch (error) {
|
|
392
|
-
const duration = Date.now() - startTime;
|
|
393
|
-
|
|
394
|
-
// Store error metrics
|
|
395
|
-
const metrics = await adapter.get(metricsKey) || { executions: [] };
|
|
396
|
-
metrics.executions.push({
|
|
397
|
-
timestamp: Date.now(),
|
|
398
|
-
duration,
|
|
399
|
-
status: 'error',
|
|
400
|
-
error: error instanceof Error ? error.message : String(error)
|
|
401
|
-
});
|
|
402
|
-
|
|
403
|
-
await adapter.set(metricsKey, metrics);
|
|
404
|
-
|
|
405
|
-
throw error;
|
|
406
|
-
}
|
|
407
|
-
});
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### Health Check Endpoint
|
|
411
|
-
|
|
412
|
-
```typescript
|
|
413
|
-
export const healthCheck = http('health', {
|
|
414
|
-
connection: 'fluent_commerce'
|
|
415
|
-
}, async (ctx) => {
|
|
416
|
-
const checks = {
|
|
417
|
-
fluentConnection: false,
|
|
418
|
-
kvStorage: false,
|
|
419
|
-
environment: ctx.vars?.ENVIRONMENT || 'unknown'
|
|
420
|
-
};
|
|
421
|
-
|
|
422
|
-
// Check Fluent connection
|
|
423
|
-
try {
|
|
424
|
-
const client = await createClient(ctx);
|
|
425
|
-
await client.graphql({ query: `query { __typename }` });
|
|
426
|
-
checks.fluentConnection = true;
|
|
427
|
-
} catch (error) {
|
|
428
|
-
ctx.log('error', 'Fluent connection check failed', { error });
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// Check KV storage
|
|
432
|
-
try {
|
|
433
|
-
const kv = ctx.openKv(':project:');
|
|
434
|
-
await kv.set('health:check', Date.now(), { ttl: 60000 });
|
|
435
|
-
const value = await kv.get('health:check');
|
|
436
|
-
checks.kvStorage = !!value;
|
|
437
|
-
} catch (error) {
|
|
438
|
-
ctx.log('error', 'KV storage check failed', { error });
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
const healthy = checks.fluentConnection && checks.kvStorage;
|
|
442
|
-
|
|
443
|
-
return {
|
|
444
|
-
status: healthy ? 'healthy' : 'unhealthy',
|
|
445
|
-
timestamp: new Date().toISOString(),
|
|
446
|
-
checks
|
|
447
|
-
};
|
|
448
|
-
});
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
---
|
|
452
|
-
|
|
453
|
-
## CI/CD Integration
|
|
454
|
-
|
|
455
|
-
### GitHub Actions Example
|
|
456
|
-
|
|
457
|
-
```yaml
|
|
458
|
-
# .github/workflows/deploy-versori.yml
|
|
459
|
-
name: Deploy to Versori
|
|
460
|
-
|
|
461
|
-
on:
|
|
462
|
-
push:
|
|
463
|
-
branches:
|
|
464
|
-
- main
|
|
465
|
-
- staging
|
|
466
|
-
|
|
467
|
-
jobs:
|
|
468
|
-
deploy:
|
|
469
|
-
runs-on: ubuntu-latest
|
|
470
|
-
|
|
471
|
-
steps:
|
|
472
|
-
- name: Checkout code
|
|
473
|
-
uses: actions/checkout@v4
|
|
474
|
-
|
|
475
|
-
- name: Setup Node.js
|
|
476
|
-
uses: actions/setup-node@v4
|
|
477
|
-
with:
|
|
478
|
-
node-version: '20'
|
|
479
|
-
|
|
480
|
-
- name: Install dependencies
|
|
481
|
-
run: npm ci
|
|
482
|
-
|
|
483
|
-
- name: Lint code
|
|
484
|
-
run: npm run lint
|
|
485
|
-
|
|
486
|
-
- name: Type check
|
|
487
|
-
run: npm run validate
|
|
488
|
-
|
|
489
|
-
- name: Run tests
|
|
490
|
-
run: npm test
|
|
491
|
-
|
|
492
|
-
- name: Build project
|
|
493
|
-
run: npm run build
|
|
494
|
-
|
|
495
|
-
- name: Deploy to Versori (Production)
|
|
496
|
-
if: github.ref == 'refs/heads/main'
|
|
497
|
-
env:
|
|
498
|
-
VERSORI_API_KEY: ${{ secrets.VERSORI_API_KEY_PROD }}
|
|
499
|
-
run: versori deploy --env production
|
|
500
|
-
|
|
501
|
-
- name: Deploy to Versori (Staging)
|
|
502
|
-
if: github.ref == 'refs/heads/staging'
|
|
503
|
-
env:
|
|
504
|
-
VERSORI_API_KEY: ${{ secrets.VERSORI_API_KEY_STAGING }}
|
|
505
|
-
run: versori deploy --env staging
|
|
506
|
-
|
|
507
|
-
- name: Notify deployment
|
|
508
|
-
if: success()
|
|
509
|
-
run: |
|
|
510
|
-
echo "Deployment successful to ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}"
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
### GitLab CI Example
|
|
514
|
-
|
|
515
|
-
```yaml
|
|
516
|
-
# .gitlab-ci.yml
|
|
517
|
-
stages:
|
|
518
|
-
- build
|
|
519
|
-
- test
|
|
520
|
-
- deploy
|
|
521
|
-
|
|
522
|
-
variables:
|
|
523
|
-
NODE_VERSION: "20"
|
|
524
|
-
|
|
525
|
-
build:
|
|
526
|
-
stage: build
|
|
527
|
-
image: node:${NODE_VERSION}
|
|
528
|
-
script:
|
|
529
|
-
- npm ci
|
|
530
|
-
- npm run build
|
|
531
|
-
artifacts:
|
|
532
|
-
paths:
|
|
533
|
-
- dist/
|
|
534
|
-
expire_in: 1 hour
|
|
535
|
-
|
|
536
|
-
test:
|
|
537
|
-
stage: test
|
|
538
|
-
image: node:${NODE_VERSION}
|
|
539
|
-
script:
|
|
540
|
-
- npm ci
|
|
541
|
-
- npm run lint
|
|
542
|
-
- npm run validate
|
|
543
|
-
- npm test
|
|
544
|
-
|
|
545
|
-
deploy_staging:
|
|
546
|
-
stage: deploy
|
|
547
|
-
image: node:${NODE_VERSION}
|
|
548
|
-
only:
|
|
549
|
-
- staging
|
|
550
|
-
script:
|
|
551
|
-
- npm ci
|
|
552
|
-
- versori deploy --env staging
|
|
553
|
-
environment:
|
|
554
|
-
name: staging
|
|
555
|
-
|
|
556
|
-
deploy_production:
|
|
557
|
-
stage: deploy
|
|
558
|
-
image: node:${NODE_VERSION}
|
|
559
|
-
only:
|
|
560
|
-
- main
|
|
561
|
-
script:
|
|
562
|
-
- npm ci
|
|
563
|
-
- versori deploy --env production
|
|
564
|
-
environment:
|
|
565
|
-
name: production
|
|
566
|
-
when: manual
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
---
|
|
570
|
-
|
|
571
|
-
## Versioning & Rollback
|
|
572
|
-
|
|
573
|
-
### Versioning Strategy
|
|
574
|
-
|
|
575
|
-
Use semantic versioning in `package.json`:
|
|
576
|
-
|
|
577
|
-
```json
|
|
578
|
-
{
|
|
579
|
-
"version": "1.2.3"
|
|
580
|
-
}
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
- **Major** (1.x.x): Breaking changes
|
|
584
|
-
- **Minor** (x.2.x): New features, maintains API stability
|
|
585
|
-
- **Patch** (x.x.3): Bug fixes
|
|
586
|
-
|
|
587
|
-
### Deployment Tags
|
|
588
|
-
|
|
589
|
-
Tag deployments in Git:
|
|
590
|
-
|
|
591
|
-
```bash
|
|
592
|
-
# Create version tag
|
|
593
|
-
git tag v1.2.3
|
|
594
|
-
|
|
595
|
-
# Push tag
|
|
596
|
-
git push origin v1.2.3
|
|
597
|
-
|
|
598
|
-
# Deploy specific version
|
|
599
|
-
git checkout v1.2.3
|
|
600
|
-
npm run deploy
|
|
601
|
-
```
|
|
602
|
-
|
|
603
|
-
### Rollback Strategy
|
|
604
|
-
|
|
605
|
-
```bash
|
|
606
|
-
# 1. Identify last known good version
|
|
607
|
-
git log --oneline
|
|
608
|
-
|
|
609
|
-
# 2. Checkout previous version
|
|
610
|
-
git checkout v1.2.2
|
|
611
|
-
|
|
612
|
-
# 3. Redeploy
|
|
613
|
-
npm run build
|
|
614
|
-
versori deploy
|
|
615
|
-
|
|
616
|
-
# 4. Verify deployment
|
|
617
|
-
versori logs --tail 50
|
|
618
|
-
|
|
619
|
-
# 5. Tag rollback (optional)
|
|
620
|
-
git tag v1.2.3-rollback
|
|
621
|
-
git push origin v1.2.3-rollback
|
|
622
|
-
```
|
|
623
|
-
|
|
624
|
-
---
|
|
625
|
-
|
|
626
|
-
## Troubleshooting Production Issues
|
|
627
|
-
|
|
628
|
-
### Debug Workflow Execution
|
|
629
|
-
|
|
630
|
-
```typescript
|
|
631
|
-
export const debugExecution = http('debug-execution', {
|
|
632
|
-
connection: 'fluent_commerce'
|
|
633
|
-
}, async (ctx) => {
|
|
634
|
-
// Log all context information
|
|
635
|
-
const req = ctx.request();
|
|
636
|
-
ctx.log('debug', 'Full context dump', {
|
|
637
|
-
executionId: ctx.executionId,
|
|
638
|
-
workflow: ctx.workflow?.name,
|
|
639
|
-
query: ctx.query,
|
|
640
|
-
data: ctx.data,
|
|
641
|
-
headers: req?.headers || {},
|
|
642
|
-
vars: Object.keys(ctx.vars || {}), // Don't log secret values
|
|
643
|
-
connectionNames: Object.keys(ctx.connections || {})
|
|
644
|
-
});
|
|
645
|
-
|
|
646
|
-
// Test connection
|
|
647
|
-
try {
|
|
648
|
-
const client = await createClient(ctx);
|
|
649
|
-
ctx.log('debug', 'Client created successfully');
|
|
650
|
-
|
|
651
|
-
const result = await client.graphql({
|
|
652
|
-
query: `query { __typename }`
|
|
653
|
-
});
|
|
654
|
-
|
|
655
|
-
ctx.log('debug', 'GraphQL test successful', result);
|
|
656
|
-
|
|
657
|
-
} catch (error) {
|
|
658
|
-
ctx.log('error', 'Debug test failed', {
|
|
659
|
-
error: error instanceof Error ? error.message : String(error),
|
|
660
|
-
stack: error instanceof Error ? error.stack : undefined
|
|
661
|
-
});
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
return { debug: 'complete' };
|
|
665
|
-
});
|
|
666
|
-
```
|
|
667
|
-
|
|
668
|
-
### Common Production Issues
|
|
669
|
-
|
|
670
|
-
| Issue | Symptoms | Solution |
|
|
671
|
-
|-------|----------|----------|
|
|
672
|
-
| **Timeout errors** | Workflow exceeds time limit | Optimize queries, use pagination, increase timeout |
|
|
673
|
-
| **Memory errors** | Out of memory failures | Process in smaller batches, use streaming |
|
|
674
|
-
| **Rate limiting** | 429 errors from Fluent API | Implement backoff, reduce request frequency |
|
|
675
|
-
| **Connection failures** | Authentication errors | Verify credentials, check token expiration |
|
|
676
|
-
| **Duplicate processing** | Files processed multiple times | Use VersoriFileTracker, implement idempotency |
|
|
677
|
-
|
|
678
|
-
---
|
|
679
|
-
|
|
680
|
-
## Key Takeaways
|
|
681
|
-
|
|
682
|
-
- 🎯 **Package.json** must have `versori.workflows` entry pointing to built JS
|
|
683
|
-
- 🎯 **Environment management** via connector variables and environment-specific connections
|
|
684
|
-
- 🎯 **Structured logging** with ctx.log() provides visibility into workflow execution
|
|
685
|
-
- 🎯 **CI/CD pipelines** automate build, test, and deployment processes
|
|
686
|
-
- 🎯 **Versioning strategy** enables controlled releases and rollbacks
|
|
687
|
-
- 🎯 **Health checks** ensure system readiness and component status
|
|
688
|
-
- 🎯 **Monitoring metrics** track performance and identify issues
|
|
689
|
-
|
|
690
|
-
---
|
|
691
|
-
|
|
692
|
-
## Practice Exercise
|
|
693
|
-
|
|
694
|
-
Create a deployment pipeline that:
|
|
695
|
-
1. Validates TypeScript compilation
|
|
696
|
-
2. Runs automated tests
|
|
697
|
-
3. Deploys to staging on push to `staging` branch
|
|
698
|
-
4. Deploys to production on manual approval
|
|
699
|
-
5. Implements health check endpoint
|
|
700
|
-
6. Tracks deployment metrics in KV storage
|
|
701
|
-
7. Provides rollback capability
|
|
702
|
-
|
|
703
|
-
**Hints**:
|
|
704
|
-
- Use GitHub Actions or GitLab CI
|
|
705
|
-
- Implement environment-specific configurations
|
|
706
|
-
- Add health check workflow
|
|
707
|
-
- Store deployment history in KV
|
|
708
|
-
- Tag releases in Git
|
|
709
|
-
|
|
710
|
-
**Solution** available in [Module 8: Best Practices](./platforms-versori-08-best-practices.md#practice-solutions)
|
|
711
|
-
|
|
712
|
-
---
|
|
713
|
-
|
|
714
|
-
## Next Steps
|
|
715
|
-
|
|
716
|
-
Now that you understand deployment and monitoring, let's explore production best practices and advanced patterns.
|
|
717
|
-
|
|
718
|
-
Continue to [Module 8: Best Practices →](./platforms-versori-08-best-practices.md) to learn about production patterns, error handling, security hardening, and troubleshooting.
|
|
719
|
-
|
|
720
|
-
---
|
|
721
|
-
|
|
722
|
-
## Related Documentation
|
|
723
|
-
|
|
724
|
-
- [Module 6: KV Storage](./platforms-versori-06-kv-storage.md) - State management for monitoring
|
|
725
|
-
- [Module 8: Best Practices](./platforms-versori-08-best-practices.md) - Production patterns
|
|
726
|
-
- [Getting Started Guide](../../../../00-START-HERE/getting-started.md) - SDK basics
|
|
727
|
-
- [API Reference](../../../../02-CORE-GUIDES/api-reference/api-reference-readme.md) - Complete SDK API
|
|
728
|
-
|
|
729
|
-
---
|
|
730
|
-
|
|
731
|
-
[← Previous: Module 6](./platforms-versori-06-kv-storage.md) | [Back to Guide](../platforms-versori-readme.md) | [Next: Module 8: Best Practices →](./platforms-versori-08-best-practices.md)
|
|
1
|
+
# Module 7: Deployment, Monitoring & Operations
|
|
2
|
+
|
|
3
|
+
[← Back to Versori Platform Guide](../platforms-versori-readme.md)
|
|
4
|
+
|
|
5
|
+
**Module 7 of 8** | **Level**: Advanced | **Time**: 30 minutes
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Learning Objectives
|
|
10
|
+
|
|
11
|
+
By the end of this module, you will:
|
|
12
|
+
- ✅ Deploy connectors to Versori Platform
|
|
13
|
+
- ✅ Monitor workflow execution and logs
|
|
14
|
+
- ✅ Implement CI/CD pipelines for automated deployment
|
|
15
|
+
- ✅ Manage environment-specific configurations
|
|
16
|
+
- ✅ Handle versioning and rollback strategies
|
|
17
|
+
- ✅ Debug production issues effectively
|
|
18
|
+
- ✅ Optimize deployment for performance
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Deployment Workflow
|
|
23
|
+
|
|
24
|
+
### Pre-Deployment Checklist
|
|
25
|
+
|
|
26
|
+
Before deploying to Versori, ensure:
|
|
27
|
+
|
|
28
|
+
- [ ] All TypeScript code compiles without errors
|
|
29
|
+
- [ ] Connections configured in Versori UI
|
|
30
|
+
- [ ] Connector variables set (secrets, config)
|
|
31
|
+
- [ ] `package.json` has correct `versori.workflows` entry
|
|
32
|
+
- [ ] Environment-specific settings verified
|
|
33
|
+
- [ ] Test workflows validated locally
|
|
34
|
+
- [ ] Documentation updated
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Local Development & Testing
|
|
39
|
+
|
|
40
|
+
### Project Structure
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
my-fluent-connector/
|
|
44
|
+
├── src/
|
|
45
|
+
│ ├── index.ts # Main entry point
|
|
46
|
+
│ ├── workflows/
|
|
47
|
+
│ │ ├── inventory-sync.ts # Scheduled workflows
|
|
48
|
+
│ │ ├── order-webhook.ts # Webhook receivers
|
|
49
|
+
│ │ └── query-api.ts # HTTP workflows
|
|
50
|
+
│ ├── config/
|
|
51
|
+
│ │ ├── mappings.json # Field mappings
|
|
52
|
+
│ │ └── constants.ts # Configuration constants
|
|
53
|
+
│ └── utils/
|
|
54
|
+
│ ├── transformers.ts # Data transformation helpers
|
|
55
|
+
│ └── validators.ts # Validation utilities
|
|
56
|
+
├── dist/ # Build output (gitignored)
|
|
57
|
+
├── node_modules/ # Dependencies (gitignored)
|
|
58
|
+
├── package.json # Package configuration
|
|
59
|
+
├── tsconfig.json # TypeScript configuration
|
|
60
|
+
├── .env.example # Environment variable template
|
|
61
|
+
└── readme.md # Connector documentation
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Package.json Configuration
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"name": "fluent-inventory-connector",
|
|
69
|
+
"version": "1.0.0",
|
|
70
|
+
"description": "Fluent Commerce inventory integration",
|
|
71
|
+
"main": "dist/index.js",
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "tsc",
|
|
74
|
+
"deploy": "npm run build && versori deploy",
|
|
75
|
+
"logs": "versori logs --follow",
|
|
76
|
+
"validate": "tsc --noEmit",
|
|
77
|
+
"test": "jest",
|
|
78
|
+
"lint": "eslint src/**/*.ts"
|
|
79
|
+
},
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"@fluentcommerce/fc-connect-sdk": "latest",
|
|
82
|
+
"@versori/run": "^0.4.4"
|
|
83
|
+
},
|
|
84
|
+
"devDependencies": {
|
|
85
|
+
"typescript": "^5.0.0",
|
|
86
|
+
"@types/node": "^20.0.0",
|
|
87
|
+
"eslint": "^8.0.0",
|
|
88
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
89
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
90
|
+
"jest": "^29.0.0"
|
|
91
|
+
},
|
|
92
|
+
"versori": {
|
|
93
|
+
"workflows": "dist/index.js"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**CRITICAL**: The `versori.workflows` field tells Versori where to find exported workflows.
|
|
99
|
+
|
|
100
|
+
### TypeScript Build
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Compile TypeScript
|
|
104
|
+
npm run build
|
|
105
|
+
|
|
106
|
+
# Validate without building
|
|
107
|
+
npm run validate
|
|
108
|
+
|
|
109
|
+
# Watch mode for development
|
|
110
|
+
tsc --watch
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Deploying to Versori
|
|
116
|
+
|
|
117
|
+
### Manual Deployment
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 1. Build TypeScript
|
|
121
|
+
npm run build
|
|
122
|
+
|
|
123
|
+
# 2. Deploy to Versori
|
|
124
|
+
versori deploy
|
|
125
|
+
|
|
126
|
+
# Expected output:
|
|
127
|
+
# ✓ Building project...
|
|
128
|
+
# ✓ Uploading to Versori...
|
|
129
|
+
# ✓ Deployment successful
|
|
130
|
+
#
|
|
131
|
+
# Workflows deployed:
|
|
132
|
+
# - query-inventory (HTTP)
|
|
133
|
+
# URL: https://{workspace}.versori.run/query-inventory
|
|
134
|
+
# - receive-order (Webhook)
|
|
135
|
+
# URL: https://{workspace}.versori.run/receive-order
|
|
136
|
+
# - daily-sync (Scheduled)
|
|
137
|
+
# Schedule: 0 2 * * *
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Deploy Script
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Combined build + deploy
|
|
144
|
+
npm run deploy
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Deployment Output
|
|
148
|
+
|
|
149
|
+
Versori deployment creates:
|
|
150
|
+
- **HTTP endpoints** for `http()` workflows
|
|
151
|
+
- **Webhook URLs** for `webhook()` workflows
|
|
152
|
+
- **Scheduled jobs** for `schedule()` workflows
|
|
153
|
+
- **Internal functions** (not exposed) for `fn()` workflows
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Environment Management
|
|
158
|
+
|
|
159
|
+
### Environment-Specific Configurations
|
|
160
|
+
|
|
161
|
+
Maintain separate configurations per environment:
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
// src/config/environments.ts
|
|
165
|
+
export const environments = {
|
|
166
|
+
development: {
|
|
167
|
+
fluentConnection: 'fluent_commerce_dev',
|
|
168
|
+
s3Bucket: 'inventory-dev',
|
|
169
|
+
logLevel: 'debug',
|
|
170
|
+
batchSize: 10
|
|
171
|
+
},
|
|
172
|
+
staging: {
|
|
173
|
+
fluentConnection: 'fluent_commerce_staging',
|
|
174
|
+
s3Bucket: 'inventory-staging',
|
|
175
|
+
logLevel: 'info',
|
|
176
|
+
batchSize: 50
|
|
177
|
+
},
|
|
178
|
+
production: {
|
|
179
|
+
fluentConnection: 'fluent_commerce_prod',
|
|
180
|
+
s3Bucket: 'inventory-prod',
|
|
181
|
+
logLevel: 'warn',
|
|
182
|
+
batchSize: 100
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export function getConfig(env: string = 'production') {
|
|
187
|
+
return environments[env as keyof typeof environments] || environments.production;
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Using Environment Configuration
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import { http } from '@versori/run';
|
|
195
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
196
|
+
import { getConfig } from './config/environments';
|
|
197
|
+
|
|
198
|
+
export const envAwareWorkflow = http('env-aware', async (ctx) => {
|
|
199
|
+
// Get environment from connector variable or default to production
|
|
200
|
+
const env = ctx.vars?.ENVIRONMENT || 'production';
|
|
201
|
+
const config = getConfig(env);
|
|
202
|
+
|
|
203
|
+
ctx.log('info', 'Running in environment', { env, config });
|
|
204
|
+
|
|
205
|
+
// Use environment-specific connection
|
|
206
|
+
const client = await createClient({
|
|
207
|
+
connection: ctx.connections?.[config.fluentConnection],
|
|
208
|
+
log: ctx.log
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
// Use environment-specific settings
|
|
212
|
+
const batchSize = config.batchSize;
|
|
213
|
+
|
|
214
|
+
// ... rest of workflow
|
|
215
|
+
});
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Connector Variables in Versori
|
|
219
|
+
|
|
220
|
+
Set environment-specific variables in Versori UI:
|
|
221
|
+
|
|
222
|
+
**Development**:
|
|
223
|
+
```
|
|
224
|
+
ENVIRONMENT=development
|
|
225
|
+
FLUENT_RETAILER_ID=1
|
|
226
|
+
LOG_LEVEL=debug
|
|
227
|
+
AWS_S3_BUCKET=inventory-dev
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Production**:
|
|
231
|
+
```
|
|
232
|
+
ENVIRONMENT=production
|
|
233
|
+
FLUENT_RETAILER_ID=1
|
|
234
|
+
LOG_LEVEL=warn
|
|
235
|
+
AWS_S3_BUCKET=inventory-prod
|
|
236
|
+
FLUENT_WEBHOOK_PUBLIC_KEY=-----BEGIN PUBLIC KEY-----...
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Monitoring & Logging
|
|
242
|
+
|
|
243
|
+
### Viewing Logs
|
|
244
|
+
|
|
245
|
+
#### Versori Dashboard
|
|
246
|
+
|
|
247
|
+
1. Navigate to **Workflows** tab
|
|
248
|
+
2. Select workflow
|
|
249
|
+
3. Click **Executions** tab
|
|
250
|
+
4. View:
|
|
251
|
+
- Execution timestamp
|
|
252
|
+
- Duration (ms)
|
|
253
|
+
- Status (success/error)
|
|
254
|
+
- Logs (`ctx.log()` calls)
|
|
255
|
+
- Input/output data
|
|
256
|
+
|
|
257
|
+
#### CLI Logs
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# Follow logs in real-time
|
|
261
|
+
versori logs --follow
|
|
262
|
+
|
|
263
|
+
# Filter by workflow
|
|
264
|
+
versori logs --workflow query-inventory
|
|
265
|
+
|
|
266
|
+
# Filter by level
|
|
267
|
+
versori logs --level error
|
|
268
|
+
|
|
269
|
+
# Show last N entries
|
|
270
|
+
versori logs --tail 100
|
|
271
|
+
|
|
272
|
+
# Filter by date range
|
|
273
|
+
versori logs --since 2025-01-15 --until 2025-01-16
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Structured Logging Best Practices
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
export const wellLogged = http('well-logged', {
|
|
280
|
+
connection: 'fluent_commerce'
|
|
281
|
+
}, async (ctx) => {
|
|
282
|
+
// Log workflow start with context
|
|
283
|
+
ctx.log('info', 'Workflow started', {
|
|
284
|
+
workflow: 'well-logged',
|
|
285
|
+
executionId: ctx.executionId,
|
|
286
|
+
timestamp: new Date().toISOString()
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
const startTime = Date.now();
|
|
290
|
+
|
|
291
|
+
try {
|
|
292
|
+
const client = await createClient(ctx);
|
|
293
|
+
|
|
294
|
+
// Log before expensive operations
|
|
295
|
+
ctx.log('debug', 'Fetching data from Fluent API');
|
|
296
|
+
|
|
297
|
+
const result = await client.graphql({
|
|
298
|
+
query: `query { products(first: 100) { edges { node { id ref } } } }`
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
const duration = Date.now() - startTime;
|
|
302
|
+
|
|
303
|
+
// Log success with metrics
|
|
304
|
+
ctx.log('info', 'Workflow completed successfully', {
|
|
305
|
+
duration,
|
|
306
|
+
recordCount: result.data.products.edges.length,
|
|
307
|
+
status: 'success'
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
return result.data;
|
|
311
|
+
|
|
312
|
+
} catch (error) {
|
|
313
|
+
const duration = Date.now() - startTime;
|
|
314
|
+
|
|
315
|
+
// Log error with full context
|
|
316
|
+
ctx.log('error', 'Workflow failed', {
|
|
317
|
+
duration,
|
|
318
|
+
error: error instanceof Error ? error.message : String(error),
|
|
319
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
320
|
+
status: 'error'
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Log Levels
|
|
329
|
+
|
|
330
|
+
| Level | Use Case | Example |
|
|
331
|
+
|-------|----------|---------|
|
|
332
|
+
| **debug** | Detailed diagnostics | Variable values, flow control |
|
|
333
|
+
| **info** | General information | Workflow start/end, record counts |
|
|
334
|
+
| **warn** | Potentially harmful situations | Rate limits approaching, fallback used |
|
|
335
|
+
| **error** | Error events | API failures, validation errors |
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Performance Monitoring
|
|
340
|
+
|
|
341
|
+
### Execution Metrics
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
import { http } from '@versori/run';
|
|
345
|
+
import { VersoriKVAdapter } from '@fluentcommerce/fc-connect-sdk';
|
|
346
|
+
|
|
347
|
+
export const monitoredWorkflow = http('monitored', {
|
|
348
|
+
connection: 'fluent_commerce'
|
|
349
|
+
}, async (ctx) => {
|
|
350
|
+
const kv = ctx.openKv(':project:');
|
|
351
|
+
const adapter = new VersoriKVAdapter(kv);
|
|
352
|
+
|
|
353
|
+
const startTime = Date.now();
|
|
354
|
+
const metricsKey = `metrics:${ctx.workflow?.name}`;
|
|
355
|
+
|
|
356
|
+
try {
|
|
357
|
+
// Execute workflow
|
|
358
|
+
const result = await executeWorkflow(ctx);
|
|
359
|
+
|
|
360
|
+
const duration = Date.now() - startTime;
|
|
361
|
+
|
|
362
|
+
// Store metrics
|
|
363
|
+
const metrics = await adapter.get(metricsKey) || { executions: [] };
|
|
364
|
+
metrics.executions.push({
|
|
365
|
+
timestamp: Date.now(),
|
|
366
|
+
duration,
|
|
367
|
+
status: 'success',
|
|
368
|
+
recordCount: result.count
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
// Keep last 100 executions
|
|
372
|
+
if (metrics.executions.length > 100) {
|
|
373
|
+
metrics.executions = metrics.executions.slice(-100);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
await adapter.set(metricsKey, metrics);
|
|
377
|
+
|
|
378
|
+
// Calculate stats
|
|
379
|
+
const avgDuration = metrics.executions.reduce((sum, e) => sum + e.duration, 0) / metrics.executions.length;
|
|
380
|
+
const successRate = metrics.executions.filter(e => e.status === 'success').length / metrics.executions.length;
|
|
381
|
+
|
|
382
|
+
ctx.log('info', 'Workflow metrics', {
|
|
383
|
+
duration,
|
|
384
|
+
avgDuration: Math.round(avgDuration),
|
|
385
|
+
successRate: (successRate * 100).toFixed(2) + '%',
|
|
386
|
+
totalExecutions: metrics.executions.length
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
return result;
|
|
390
|
+
|
|
391
|
+
} catch (error) {
|
|
392
|
+
const duration = Date.now() - startTime;
|
|
393
|
+
|
|
394
|
+
// Store error metrics
|
|
395
|
+
const metrics = await adapter.get(metricsKey) || { executions: [] };
|
|
396
|
+
metrics.executions.push({
|
|
397
|
+
timestamp: Date.now(),
|
|
398
|
+
duration,
|
|
399
|
+
status: 'error',
|
|
400
|
+
error: error instanceof Error ? error.message : String(error)
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
await adapter.set(metricsKey, metrics);
|
|
404
|
+
|
|
405
|
+
throw error;
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Health Check Endpoint
|
|
411
|
+
|
|
412
|
+
```typescript
|
|
413
|
+
export const healthCheck = http('health', {
|
|
414
|
+
connection: 'fluent_commerce'
|
|
415
|
+
}, async (ctx) => {
|
|
416
|
+
const checks = {
|
|
417
|
+
fluentConnection: false,
|
|
418
|
+
kvStorage: false,
|
|
419
|
+
environment: ctx.vars?.ENVIRONMENT || 'unknown'
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
// Check Fluent connection
|
|
423
|
+
try {
|
|
424
|
+
const client = await createClient(ctx);
|
|
425
|
+
await client.graphql({ query: `query { __typename }` });
|
|
426
|
+
checks.fluentConnection = true;
|
|
427
|
+
} catch (error) {
|
|
428
|
+
ctx.log('error', 'Fluent connection check failed', { error });
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Check KV storage
|
|
432
|
+
try {
|
|
433
|
+
const kv = ctx.openKv(':project:');
|
|
434
|
+
await kv.set('health:check', Date.now(), { ttl: 60000 });
|
|
435
|
+
const value = await kv.get('health:check');
|
|
436
|
+
checks.kvStorage = !!value;
|
|
437
|
+
} catch (error) {
|
|
438
|
+
ctx.log('error', 'KV storage check failed', { error });
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
const healthy = checks.fluentConnection && checks.kvStorage;
|
|
442
|
+
|
|
443
|
+
return {
|
|
444
|
+
status: healthy ? 'healthy' : 'unhealthy',
|
|
445
|
+
timestamp: new Date().toISOString(),
|
|
446
|
+
checks
|
|
447
|
+
};
|
|
448
|
+
});
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## CI/CD Integration
|
|
454
|
+
|
|
455
|
+
### GitHub Actions Example
|
|
456
|
+
|
|
457
|
+
```yaml
|
|
458
|
+
# .github/workflows/deploy-versori.yml
|
|
459
|
+
name: Deploy to Versori
|
|
460
|
+
|
|
461
|
+
on:
|
|
462
|
+
push:
|
|
463
|
+
branches:
|
|
464
|
+
- main
|
|
465
|
+
- staging
|
|
466
|
+
|
|
467
|
+
jobs:
|
|
468
|
+
deploy:
|
|
469
|
+
runs-on: ubuntu-latest
|
|
470
|
+
|
|
471
|
+
steps:
|
|
472
|
+
- name: Checkout code
|
|
473
|
+
uses: actions/checkout@v4
|
|
474
|
+
|
|
475
|
+
- name: Setup Node.js
|
|
476
|
+
uses: actions/setup-node@v4
|
|
477
|
+
with:
|
|
478
|
+
node-version: '20'
|
|
479
|
+
|
|
480
|
+
- name: Install dependencies
|
|
481
|
+
run: npm ci
|
|
482
|
+
|
|
483
|
+
- name: Lint code
|
|
484
|
+
run: npm run lint
|
|
485
|
+
|
|
486
|
+
- name: Type check
|
|
487
|
+
run: npm run validate
|
|
488
|
+
|
|
489
|
+
- name: Run tests
|
|
490
|
+
run: npm test
|
|
491
|
+
|
|
492
|
+
- name: Build project
|
|
493
|
+
run: npm run build
|
|
494
|
+
|
|
495
|
+
- name: Deploy to Versori (Production)
|
|
496
|
+
if: github.ref == 'refs/heads/main'
|
|
497
|
+
env:
|
|
498
|
+
VERSORI_API_KEY: ${{ secrets.VERSORI_API_KEY_PROD }}
|
|
499
|
+
run: versori deploy --env production
|
|
500
|
+
|
|
501
|
+
- name: Deploy to Versori (Staging)
|
|
502
|
+
if: github.ref == 'refs/heads/staging'
|
|
503
|
+
env:
|
|
504
|
+
VERSORI_API_KEY: ${{ secrets.VERSORI_API_KEY_STAGING }}
|
|
505
|
+
run: versori deploy --env staging
|
|
506
|
+
|
|
507
|
+
- name: Notify deployment
|
|
508
|
+
if: success()
|
|
509
|
+
run: |
|
|
510
|
+
echo "Deployment successful to ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}"
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### GitLab CI Example
|
|
514
|
+
|
|
515
|
+
```yaml
|
|
516
|
+
# .gitlab-ci.yml
|
|
517
|
+
stages:
|
|
518
|
+
- build
|
|
519
|
+
- test
|
|
520
|
+
- deploy
|
|
521
|
+
|
|
522
|
+
variables:
|
|
523
|
+
NODE_VERSION: "20"
|
|
524
|
+
|
|
525
|
+
build:
|
|
526
|
+
stage: build
|
|
527
|
+
image: node:${NODE_VERSION}
|
|
528
|
+
script:
|
|
529
|
+
- npm ci
|
|
530
|
+
- npm run build
|
|
531
|
+
artifacts:
|
|
532
|
+
paths:
|
|
533
|
+
- dist/
|
|
534
|
+
expire_in: 1 hour
|
|
535
|
+
|
|
536
|
+
test:
|
|
537
|
+
stage: test
|
|
538
|
+
image: node:${NODE_VERSION}
|
|
539
|
+
script:
|
|
540
|
+
- npm ci
|
|
541
|
+
- npm run lint
|
|
542
|
+
- npm run validate
|
|
543
|
+
- npm test
|
|
544
|
+
|
|
545
|
+
deploy_staging:
|
|
546
|
+
stage: deploy
|
|
547
|
+
image: node:${NODE_VERSION}
|
|
548
|
+
only:
|
|
549
|
+
- staging
|
|
550
|
+
script:
|
|
551
|
+
- npm ci
|
|
552
|
+
- versori deploy --env staging
|
|
553
|
+
environment:
|
|
554
|
+
name: staging
|
|
555
|
+
|
|
556
|
+
deploy_production:
|
|
557
|
+
stage: deploy
|
|
558
|
+
image: node:${NODE_VERSION}
|
|
559
|
+
only:
|
|
560
|
+
- main
|
|
561
|
+
script:
|
|
562
|
+
- npm ci
|
|
563
|
+
- versori deploy --env production
|
|
564
|
+
environment:
|
|
565
|
+
name: production
|
|
566
|
+
when: manual
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
571
|
+
## Versioning & Rollback
|
|
572
|
+
|
|
573
|
+
### Versioning Strategy
|
|
574
|
+
|
|
575
|
+
Use semantic versioning in `package.json`:
|
|
576
|
+
|
|
577
|
+
```json
|
|
578
|
+
{
|
|
579
|
+
"version": "1.2.3"
|
|
580
|
+
}
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
- **Major** (1.x.x): Breaking changes
|
|
584
|
+
- **Minor** (x.2.x): New features, maintains API stability
|
|
585
|
+
- **Patch** (x.x.3): Bug fixes
|
|
586
|
+
|
|
587
|
+
### Deployment Tags
|
|
588
|
+
|
|
589
|
+
Tag deployments in Git:
|
|
590
|
+
|
|
591
|
+
```bash
|
|
592
|
+
# Create version tag
|
|
593
|
+
git tag v1.2.3
|
|
594
|
+
|
|
595
|
+
# Push tag
|
|
596
|
+
git push origin v1.2.3
|
|
597
|
+
|
|
598
|
+
# Deploy specific version
|
|
599
|
+
git checkout v1.2.3
|
|
600
|
+
npm run deploy
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### Rollback Strategy
|
|
604
|
+
|
|
605
|
+
```bash
|
|
606
|
+
# 1. Identify last known good version
|
|
607
|
+
git log --oneline
|
|
608
|
+
|
|
609
|
+
# 2. Checkout previous version
|
|
610
|
+
git checkout v1.2.2
|
|
611
|
+
|
|
612
|
+
# 3. Redeploy
|
|
613
|
+
npm run build
|
|
614
|
+
versori deploy
|
|
615
|
+
|
|
616
|
+
# 4. Verify deployment
|
|
617
|
+
versori logs --tail 50
|
|
618
|
+
|
|
619
|
+
# 5. Tag rollback (optional)
|
|
620
|
+
git tag v1.2.3-rollback
|
|
621
|
+
git push origin v1.2.3-rollback
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
## Troubleshooting Production Issues
|
|
627
|
+
|
|
628
|
+
### Debug Workflow Execution
|
|
629
|
+
|
|
630
|
+
```typescript
|
|
631
|
+
export const debugExecution = http('debug-execution', {
|
|
632
|
+
connection: 'fluent_commerce'
|
|
633
|
+
}, async (ctx) => {
|
|
634
|
+
// Log all context information
|
|
635
|
+
const req = ctx.request();
|
|
636
|
+
ctx.log('debug', 'Full context dump', {
|
|
637
|
+
executionId: ctx.executionId,
|
|
638
|
+
workflow: ctx.workflow?.name,
|
|
639
|
+
query: ctx.query,
|
|
640
|
+
data: ctx.data,
|
|
641
|
+
headers: req?.headers || {},
|
|
642
|
+
vars: Object.keys(ctx.vars || {}), // Don't log secret values
|
|
643
|
+
connectionNames: Object.keys(ctx.connections || {})
|
|
644
|
+
});
|
|
645
|
+
|
|
646
|
+
// Test connection
|
|
647
|
+
try {
|
|
648
|
+
const client = await createClient(ctx);
|
|
649
|
+
ctx.log('debug', 'Client created successfully');
|
|
650
|
+
|
|
651
|
+
const result = await client.graphql({
|
|
652
|
+
query: `query { __typename }`
|
|
653
|
+
});
|
|
654
|
+
|
|
655
|
+
ctx.log('debug', 'GraphQL test successful', result);
|
|
656
|
+
|
|
657
|
+
} catch (error) {
|
|
658
|
+
ctx.log('error', 'Debug test failed', {
|
|
659
|
+
error: error instanceof Error ? error.message : String(error),
|
|
660
|
+
stack: error instanceof Error ? error.stack : undefined
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
return { debug: 'complete' };
|
|
665
|
+
});
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### Common Production Issues
|
|
669
|
+
|
|
670
|
+
| Issue | Symptoms | Solution |
|
|
671
|
+
|-------|----------|----------|
|
|
672
|
+
| **Timeout errors** | Workflow exceeds time limit | Optimize queries, use pagination, increase timeout |
|
|
673
|
+
| **Memory errors** | Out of memory failures | Process in smaller batches, use streaming |
|
|
674
|
+
| **Rate limiting** | 429 errors from Fluent API | Implement backoff, reduce request frequency |
|
|
675
|
+
| **Connection failures** | Authentication errors | Verify credentials, check token expiration |
|
|
676
|
+
| **Duplicate processing** | Files processed multiple times | Use VersoriFileTracker, implement idempotency |
|
|
677
|
+
|
|
678
|
+
---
|
|
679
|
+
|
|
680
|
+
## Key Takeaways
|
|
681
|
+
|
|
682
|
+
- 🎯 **Package.json** must have `versori.workflows` entry pointing to built JS
|
|
683
|
+
- 🎯 **Environment management** via connector variables and environment-specific connections
|
|
684
|
+
- 🎯 **Structured logging** with ctx.log() provides visibility into workflow execution
|
|
685
|
+
- 🎯 **CI/CD pipelines** automate build, test, and deployment processes
|
|
686
|
+
- 🎯 **Versioning strategy** enables controlled releases and rollbacks
|
|
687
|
+
- 🎯 **Health checks** ensure system readiness and component status
|
|
688
|
+
- 🎯 **Monitoring metrics** track performance and identify issues
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
## Practice Exercise
|
|
693
|
+
|
|
694
|
+
Create a deployment pipeline that:
|
|
695
|
+
1. Validates TypeScript compilation
|
|
696
|
+
2. Runs automated tests
|
|
697
|
+
3. Deploys to staging on push to `staging` branch
|
|
698
|
+
4. Deploys to production on manual approval
|
|
699
|
+
5. Implements health check endpoint
|
|
700
|
+
6. Tracks deployment metrics in KV storage
|
|
701
|
+
7. Provides rollback capability
|
|
702
|
+
|
|
703
|
+
**Hints**:
|
|
704
|
+
- Use GitHub Actions or GitLab CI
|
|
705
|
+
- Implement environment-specific configurations
|
|
706
|
+
- Add health check workflow
|
|
707
|
+
- Store deployment history in KV
|
|
708
|
+
- Tag releases in Git
|
|
709
|
+
|
|
710
|
+
**Solution** available in [Module 8: Best Practices](./platforms-versori-08-best-practices.md#practice-solutions)
|
|
711
|
+
|
|
712
|
+
---
|
|
713
|
+
|
|
714
|
+
## Next Steps
|
|
715
|
+
|
|
716
|
+
Now that you understand deployment and monitoring, let's explore production best practices and advanced patterns.
|
|
717
|
+
|
|
718
|
+
Continue to [Module 8: Best Practices →](./platforms-versori-08-best-practices.md) to learn about production patterns, error handling, security hardening, and troubleshooting.
|
|
719
|
+
|
|
720
|
+
---
|
|
721
|
+
|
|
722
|
+
## Related Documentation
|
|
723
|
+
|
|
724
|
+
- [Module 6: KV Storage](./platforms-versori-06-kv-storage.md) - State management for monitoring
|
|
725
|
+
- [Module 8: Best Practices](./platforms-versori-08-best-practices.md) - Production patterns
|
|
726
|
+
- [Getting Started Guide](../../../../00-START-HERE/getting-started.md) - SDK basics
|
|
727
|
+
- [API Reference](../../../../02-CORE-GUIDES/api-reference/api-reference-readme.md) - Complete SDK API
|
|
728
|
+
|
|
729
|
+
---
|
|
730
|
+
|
|
731
|
+
[← Previous: Module 6](./platforms-versori-06-kv-storage.md) | [Back to Guide](../platforms-versori-readme.md) | [Next: Module 8: Best Practices →](./platforms-versori-08-best-practices.md)
|