@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +11 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/utils/pagination-helpers.js +38 -2
- package/dist/esm/versori/fluent-versori-client.js +11 -5
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/docs/00-START-HERE/EXPORT-VALIDATION.md +158 -158
- package/docs/00-START-HERE/cli-analyze-source-structure-guide.md +655 -655
- package/docs/00-START-HERE/cli-documentation-index.md +202 -202
- package/docs/00-START-HERE/cli-quick-reference.md +252 -252
- package/docs/00-START-HERE/decision-tree.md +552 -552
- package/docs/00-START-HERE/getting-started.md +1070 -1070
- package/docs/00-START-HERE/mapper-quick-decision-guide.md +235 -235
- package/docs/00-START-HERE/readme.md +237 -237
- package/docs/00-START-HERE/retailerid-configuration.md +404 -404
- package/docs/00-START-HERE/sdk-philosophy.md +794 -794
- package/docs/00-START-HERE/troubleshooting-quick-reference.md +1086 -1086
- package/docs/01-TEMPLATES/faq.md +686 -686
- package/docs/01-TEMPLATES/patterns/pattern-templates-guide.md +68 -68
- package/docs/01-TEMPLATES/patterns/patterns-csv-schema-validation-and-rejection-report.md +233 -233
- package/docs/01-TEMPLATES/patterns/patterns-custom-resolvers.md +407 -407
- package/docs/01-TEMPLATES/patterns/patterns-error-handling-retry.md +511 -511
- package/docs/01-TEMPLATES/patterns/patterns-field-mapping-universal.md +701 -701
- package/docs/01-TEMPLATES/patterns/patterns-large-file-splitting.md +1430 -1430
- package/docs/01-TEMPLATES/patterns/patterns-master-data-etl.md +2399 -2399
- package/docs/01-TEMPLATES/patterns/patterns-pagination-streaming.md +447 -447
- package/docs/01-TEMPLATES/patterns/patterns-state-duplicate-prevention.md +385 -385
- package/docs/01-TEMPLATES/readme.md +957 -957
- package/docs/01-TEMPLATES/standalone/standalone-asn-inbound-processing.md +1209 -1209
- package/docs/01-TEMPLATES/standalone/standalone-graphql-query-export.md +1140 -1140
- package/docs/01-TEMPLATES/standalone/standalone-graphql-to-parquet-partitioned-s3.md +432 -432
- package/docs/01-TEMPLATES/standalone/standalone-multi-channel-inventory-sync.md +1185 -1185
- package/docs/01-TEMPLATES/standalone/standalone-multi-source-aggregation.md +1462 -1462
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-batch-api.md +1390 -1390
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-inventory-to-batch.md +330 -330
- package/docs/01-TEMPLATES/standalone/standalone-scripts-guide.md +87 -87
- package/docs/01-TEMPLATES/standalone/standalone-sftp-xml-graphql.md +1444 -1444
- package/docs/01-TEMPLATES/standalone/standalone-webhook-payload-processing.md +688 -688
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-dropship-order-routing.md +193 -193
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-graphql-parquet-extraction.md +518 -518
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-inter-location-transfers.md +2162 -2162
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-pre-order-allocation.md +2226 -2226
- package/docs/01-TEMPLATES/versori/business-examples/business-scenarios-guide.md +87 -87
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md +656 -656
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-dual-workflow-connector.md +835 -835
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-guide.md +108 -108
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-kv-state-management.md +1533 -1533
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-xml-response-patterns.md +1160 -1160
- package/docs/01-TEMPLATES/versori/versori-platform-guide.md +201 -201
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-asn-purchase-order.md +1906 -1906
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-dropship-routing.md +1074 -1074
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-flash-sale-reserve.md +1395 -1395
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-generic-xml-order.md +888 -888
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-payment-gateway-integration.md +2478 -2478
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-rma-returns-comprehensive.md +2240 -2240
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md +2029 -2029
- package/docs/01-TEMPLATES/versori/webhooks/webhook-templates-guide.md +140 -140
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/inventory-mapping.json +20 -20
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/products_2025-01-22.csv +11 -11
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/sample-data-guide.md +34 -34
- package/docs/01-TEMPLATES/versori/workflows/_examples/workflow-examples-guide.md +36 -36
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-modes-guide.md +1038 -1038
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-workflows-guide.md +138 -138
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/graphql-extraction-guide.md +63 -63
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-csv.md +2062 -2062
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-xml.md +2294 -2294
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-s3-csv.md +2461 -2461
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-sftp-xml.md +2529 -2529
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-csv.md +2464 -2464
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-json.md +1959 -1959
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-s3-csv.md +1953 -1953
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-sftp-xml.md +2541 -2541
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-s3-json.md +2384 -2384
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-sftp-xml.md +2445 -2445
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-csv.md +2355 -2355
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-json.md +2042 -2042
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-sftp-xml.md +2726 -2726
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md +206 -206
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md +2030 -2030
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md +1882 -1882
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md +2827 -2827
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-json-inventory-batch.md +1952 -1952
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-xml-inventory-batch.md +3289 -3289
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md +3064 -3064
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-json-inventory-batch.md +3238 -3238
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md +2977 -2977
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md +321 -321
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-json-order-cancel-event.md +959 -959
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-xml-order-cancel-event.md +1170 -1170
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md +2312 -2312
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md +2999 -2999
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md +2836 -2836
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md +2395 -2395
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md +2295 -2295
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md +2602 -2602
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md +2589 -2589
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md +3578 -3578
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/graphql-mutations-guide.md +93 -93
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-json-order-update-graphql.md +1260 -1260
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-xml-order-update-graphql.md +1472 -1472
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md +2417 -2417
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md +2811 -2811
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md +2619 -2619
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md +2807 -2807
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md +2373 -2373
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md +2740 -2740
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md +2760 -2760
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md +1710 -1710
- package/docs/01-TEMPLATES/versori/workflows/ingestion/ingestion-workflows-guide.md +136 -136
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/rubix-webhooks-guide.md +520 -520
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-inline.md +1418 -1418
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-universal-mapper.md +1785 -1785
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-order-attribute-update.md +824 -824
- package/docs/01-TEMPLATES/versori/workflows/workflows-overview-guide.md +646 -646
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-batch-archival.md +724 -724
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-job-tracker.md +627 -627
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-partial-batch-recovery.md +561 -561
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-quick-reference.md +367 -367
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-readme.md +407 -407
- package/docs/02-CORE-GUIDES/advanced-services/readme.md +49 -49
- package/docs/02-CORE-GUIDES/api-reference/api-reference-quick-reference.md +548 -548
- package/docs/02-CORE-GUIDES/api-reference/event-api-input-output-reference.md +702 -1171
- package/docs/02-CORE-GUIDES/api-reference/examples/client-initialization.ts +286 -286
- package/docs/02-CORE-GUIDES/api-reference/graphql-error-classification.md +337 -337
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md +399 -520
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md +199 -199
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-04-graphql-mapping.md +925 -925
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-05-services.md +1198 -1198
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-06-data-sources.md +1083 -1083
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-07-parsers.md +1097 -1097
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-pagination.md +513 -513
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-types.md +545 -597
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-error-handling.md +527 -527
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-webhook-validation.md +514 -514
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-extraction.md +557 -557
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-utilities.md +412 -412
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-cli-tools.md +423 -423
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-error-handling.md +716 -716
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-analyze-source-structure.md +518 -518
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-partial-responses.md +212 -212
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-testing.md +300 -300
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-13-resolver-builder.md +322 -322
- package/docs/02-CORE-GUIDES/api-reference/readme.md +279 -279
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-quick-reference.md +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md +277 -277
- package/docs/02-CORE-GUIDES/auto-pagination/examples/auto-pagination-readme.md +178 -178
- package/docs/02-CORE-GUIDES/auto-pagination/examples/common-patterns.ts +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-products.ts +384 -384
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-virtual-positions.ts +308 -308
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-01-foundations.md +470 -470
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-02-quick-start.md +713 -713
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-03-configuration.md +754 -754
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-04-advanced-patterns.md +732 -732
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-05-sdk-integration.md +847 -847
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-06-troubleshooting.md +359 -359
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-07-api-reference.md +462 -462
- package/docs/02-CORE-GUIDES/auto-pagination/readme.md +54 -54
- package/docs/02-CORE-GUIDES/data-sources/data-sources-file-operations-error-handling.md +1487 -1487
- package/docs/02-CORE-GUIDES/data-sources/data-sources-quick-reference.md +836 -836
- package/docs/02-CORE-GUIDES/data-sources/data-sources-readme.md +276 -276
- package/docs/02-CORE-GUIDES/data-sources/data-sources-sftp-credential-access-security.md +553 -553
- package/docs/02-CORE-GUIDES/data-sources/examples/common-patterns.ts +409 -409
- package/docs/02-CORE-GUIDES/data-sources/examples/data-sources-readme.md +178 -178
- package/docs/02-CORE-GUIDES/data-sources/examples/s3-operations.ts +308 -308
- package/docs/02-CORE-GUIDES/data-sources/examples/sftp-operations.ts +371 -371
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-01-foundations.md +735 -735
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-02-s3-operations.md +1302 -1302
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-03-sftp-operations.md +1379 -1379
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-04-file-patterns.md +941 -941
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-05-advanced-topics.md +813 -813
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-06-integration-patterns.md +486 -486
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-07-troubleshooting.md +387 -387
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-08-api-reference.md +417 -417
- package/docs/02-CORE-GUIDES/data-sources/readme.md +77 -77
- package/docs/02-CORE-GUIDES/error-handling-guide.md +936 -936
- package/docs/02-CORE-GUIDES/extraction/examples/02-core-guides-extraction-readme.md +116 -116
- package/docs/02-CORE-GUIDES/extraction/examples/common-patterns.ts +428 -428
- package/docs/02-CORE-GUIDES/extraction/examples/extract-inventory-basic.ts +187 -187
- package/docs/02-CORE-GUIDES/extraction/extraction-quick-reference.md +596 -596
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-01-foundations.md +514 -514
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-02-basic-extraction.md +823 -823
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-03-parquet-processing.md +507 -507
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-04-data-enrichment.md +546 -546
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-05-transformation.md +494 -494
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md +458 -458
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-performance.md +138 -138
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-api-reference.md +148 -148
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-optimization.md +692 -692
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md +1008 -1008
- package/docs/02-CORE-GUIDES/extraction/readme.md +151 -151
- package/docs/02-CORE-GUIDES/ingestion/examples/_simple-kv-store.ts +40 -40
- package/docs/02-CORE-GUIDES/ingestion/examples/error-recovery.ts +728 -728
- package/docs/02-CORE-GUIDES/ingestion/examples/event-driven.ts +501 -501
- package/docs/02-CORE-GUIDES/ingestion/examples/local-file-ingestion.ts +88 -88
- package/docs/02-CORE-GUIDES/ingestion/examples/parquet-ingestion.ts +117 -117
- package/docs/02-CORE-GUIDES/ingestion/examples/performance-optimized.ts +647 -647
- package/docs/02-CORE-GUIDES/ingestion/examples/s3-csv-ingestion.ts +169 -169
- package/docs/02-CORE-GUIDES/ingestion/examples/sftp-csv-ingestion.ts +134 -134
- package/docs/02-CORE-GUIDES/ingestion/ingestion-quick-reference.md +546 -546
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-01-introduction.md +626 -626
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-02-quick-start.md +658 -658
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-03-data-sources.md +1052 -1052
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-04-field-mapping.md +763 -763
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-05-advanced-parsers.md +676 -676
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-06-batch-api.md +1295 -1295
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-api-reference.md +138 -138
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md +1037 -1037
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md +1349 -1349
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-09-best-practices.md +1893 -1893
- package/docs/02-CORE-GUIDES/ingestion/readme.md +160 -160
- package/docs/02-CORE-GUIDES/logging-guide.md +585 -585
- package/docs/02-CORE-GUIDES/mapping/error-handling-patterns.md +401 -401
- package/docs/02-CORE-GUIDES/mapping/examples/02-core-guides-mapping-readme.md +128 -128
- package/docs/02-CORE-GUIDES/mapping/examples/common-patterns.ts +273 -273
- package/docs/02-CORE-GUIDES/mapping/examples/csv-location-ingestion.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/csv-mapping.ts +242 -242
- package/docs/02-CORE-GUIDES/mapping/examples/graphql-to-parquet-extraction.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/json-mapping.ts +213 -213
- package/docs/02-CORE-GUIDES/mapping/examples/json-product-to-mutation.json +48 -48
- package/docs/02-CORE-GUIDES/mapping/examples/xml-mapping.ts +291 -291
- package/docs/02-CORE-GUIDES/mapping/examples/xml-order-to-mutation.json +45 -45
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-quick-reference.md +463 -463
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md +227 -227
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-01-introduction.md +222 -222
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-02-quick-start.md +351 -351
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-03-schema-validation.md +569 -569
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-04-mapping-patterns.md +471 -471
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-05-configuration-reference.md +611 -611
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-advanced-xpath.md +148 -148
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-path-syntax.md +464 -464
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-api-reference.md +94 -94
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-array-handling.md +307 -307
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-08-custom-resolvers.md +544 -544
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-09-advanced-patterns.md +427 -427
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-10-hooks-and-variables.md +336 -336
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-11-error-handling.md +488 -488
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-12-arguments-vs-nodes.md +383 -383
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-13-best-practices.md +477 -477
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/readme.md +62 -62
- package/docs/02-CORE-GUIDES/mapping/mapping-format-decision-tree.md +480 -480
- package/docs/02-CORE-GUIDES/mapping/mapping-graphql-alias-batching-guide.md +820 -820
- package/docs/02-CORE-GUIDES/mapping/mapping-javascript-objects.md +2369 -2369
- package/docs/02-CORE-GUIDES/mapping/mapping-mapper-comparison-guide.md +682 -682
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-07-api-reference.md +1327 -1327
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-08-error-handling.md +1142 -1142
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-04-use-cases.md +891 -891
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-helpers-resolvers.md +1126 -1126
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-sdk-resolvers.md +199 -199
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-07-api-reference.md +1319 -1319
- package/docs/02-CORE-GUIDES/mapping/readme.md +178 -178
- package/docs/02-CORE-GUIDES/mapping/resolver-registration.md +410 -410
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/common-patterns.ts +226 -226
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/custom-resolvers.ts +227 -227
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/sdk-resolvers-usage.ts +203 -203
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-readme.md +274 -274
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-api-reference.md +679 -679
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-cookbook.md +826 -826
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md +1330 -1330
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-helpers-reference.md +1437 -1437
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md +553 -553
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-troubleshooting.md +854 -854
- package/docs/02-CORE-GUIDES/mapping/resolvers/readme.md +75 -75
- package/docs/02-CORE-GUIDES/parsers/examples/02-core-guides-parsers-readme.md +161 -161
- package/docs/02-CORE-GUIDES/parsers/examples/csv-parser-examples.ts +110 -110
- package/docs/02-CORE-GUIDES/parsers/examples/json-parser-examples.ts +33 -33
- package/docs/02-CORE-GUIDES/parsers/examples/parquet-parser-examples.ts +47 -47
- package/docs/02-CORE-GUIDES/parsers/examples/xml-parser-examples.ts +38 -38
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-01-foundations.md +355 -355
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md +772 -772
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-03-json-parser.md +789 -789
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md +857 -857
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md +603 -603
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-integration-patterns.md +702 -702
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-streaming.md +121 -121
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-api-reference.md +89 -89
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-troubleshooting.md +727 -727
- package/docs/02-CORE-GUIDES/parsers/parsers-quick-reference.md +482 -482
- package/docs/02-CORE-GUIDES/parsers/parsers-readme.md +258 -258
- package/docs/02-CORE-GUIDES/parsers/readme.md +65 -65
- package/docs/02-CORE-GUIDES/readme.md +194 -194
- package/docs/02-CORE-GUIDES/webhook-validation/examples/basic-validation.ts +108 -108
- package/docs/02-CORE-GUIDES/webhook-validation/examples/common-patterns.ts +316 -316
- package/docs/02-CORE-GUIDES/webhook-validation/examples/webhook-validation-readme.md +61 -61
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-01-foundations.md +440 -440
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-02-quick-start.md +525 -525
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-03-versori-integration.md +741 -741
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-04-platform-integration.md +629 -629
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md +535 -535
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-error-handling.md +611 -611
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-troubleshooting.md +124 -124
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-07-api-reference.md +511 -511
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-08-rubix-webhooks.md +590 -590
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-09-rubix-event-vs-http-call.md +432 -432
- package/docs/02-CORE-GUIDES/webhook-validation/readme.md +239 -239
- package/docs/02-CORE-GUIDES/webhook-validation/webhook-validation-quick-reference.md +392 -392
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-quick-reference.md +498 -498
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-readme.md +313 -313
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/common-patterns.ts +612 -612
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/connector-scenarios-readme.md +253 -253
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md +452 -452
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-02-simple-scenarios.md +681 -681
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-03-intermediate-scenarios.md +637 -637
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-04-advanced-scenarios.md +650 -650
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-05-bidirectional-sync.md +233 -233
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-06-production-patterns.md +442 -442
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-07-reference.md +445 -445
- package/docs/03-PATTERN-GUIDES/connector-scenarios/readme.md +31 -31
- package/docs/03-PATTERN-GUIDES/enterprise-integration-patterns.md +1528 -1528
- package/docs/03-PATTERN-GUIDES/error-handling/comprehensive-error-handling-guide.md +1437 -1437
- package/docs/03-PATTERN-GUIDES/error-handling/error-handling-quick-reference.md +390 -390
- package/docs/03-PATTERN-GUIDES/error-handling/examples/common-patterns.ts +438 -438
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-01-foundations.md +362 -362
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-02-error-types.md +850 -850
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-03-utf8-handling.md +456 -456
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-04-error-scenarios.md +658 -658
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-05-calling-patterns.md +671 -671
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-06-retry-strategies.md +1034 -1034
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-07-monitoring.md +653 -653
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md +847 -847
- package/docs/03-PATTERN-GUIDES/error-handling/readme.md +36 -36
- package/docs/03-PATTERN-GUIDES/examples/__tests__/readme.md +40 -40
- package/docs/03-PATTERN-GUIDES/examples/__tests__/resolver-examples.test.js +282 -282
- package/docs/03-PATTERN-GUIDES/examples/test-data/03-pattern-guides-readme.md +110 -110
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-inventory.json +123 -123
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-order.json +171 -171
- package/docs/03-PATTERN-GUIDES/examples/test-data/readme.md +28 -28
- package/docs/03-PATTERN-GUIDES/extraction/extraction-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/extraction/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/file-operations/examples/common-patterns.ts +407 -407
- package/docs/03-PATTERN-GUIDES/file-operations/examples/file-operations-readme.md +142 -142
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-quick-reference.md +462 -462
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-readme.md +379 -379
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-01-foundations.md +430 -430
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-02-quick-start.md +484 -484
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-03-s3-operations.md +507 -507
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-04-sftp-operations.md +963 -963
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-05-streaming-performance.md +503 -503
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-archive-patterns.md +386 -386
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-error-handling.md +117 -117
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-api-reference.md +78 -78
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-testing-troubleshooting.md +567 -567
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-08-api-reference.md +1055 -1055
- package/docs/03-PATTERN-GUIDES/file-operations/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/ingestion/ingestion-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/ingestion/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/batch-processing.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/common-patterns.ts +360 -360
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/delta-sync.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/integration-patterns-readme.md +100 -100
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/real-time-webhook.ts +398 -398
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-quick-reference.md +962 -962
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-readme.md +134 -134
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md +991 -991
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-02-batch-processing.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-03-delta-sync.md +1108 -1108
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-04-webhook-patterns.md +1181 -1181
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-05-error-handling.md +1061 -1061
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-advanced-integration-services.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-performance.md +109 -109
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-07-api-reference.md +34 -34
- package/docs/03-PATTERN-GUIDES/integration-patterns/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/logging-minimal-mode.md +128 -128
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/common-patterns.ts +380 -380
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/multiple-connections-readme.md +139 -139
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/parallel-root-connections.ts +149 -149
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/real-world-scenarios.ts +405 -405
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-01-foundations.md +378 -378
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-02-quick-start.md +566 -566
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-03-targeting-connections.md +659 -659
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-04-parallel-queries.md +656 -656
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-05-best-practices.md +624 -624
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-api-reference.md +824 -824
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-versori.md +119 -119
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-07-api-reference.md +87 -87
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-quick-reference.md +353 -353
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md +270 -270
- package/docs/03-PATTERN-GUIDES/multiple-connections/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/pagination/pagination-readme.md +14 -14
- package/docs/03-PATTERN-GUIDES/pagination/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/parquet/examples/common-patterns.ts +180 -180
- package/docs/03-PATTERN-GUIDES/parquet/examples/read-parquet.ts +48 -48
- package/docs/03-PATTERN-GUIDES/parquet/examples/write-parquet.ts +65 -65
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-01-introduction.md +393 -393
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-02-quick-start.md +572 -572
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-03-reading-parquet.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-04-writing-parquet.md +554 -554
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-05-graphql-extraction.md +405 -405
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-performance.md +104 -104
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-s3-integration.md +511 -511
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-api-reference.md +90 -90
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-performance-optimization.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-08-best-practices.md +712 -712
- package/docs/03-PATTERN-GUIDES/parquet/parquet-quick-reference.md +683 -683
- package/docs/03-PATTERN-GUIDES/parquet/parquet-readme.md +248 -248
- package/docs/03-PATTERN-GUIDES/parquet/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/parsers/parsers-readme.md +12 -12
- package/docs/03-PATTERN-GUIDES/parsers/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/readme.md +159 -159
- package/docs/03-PATTERN-GUIDES/webhooks/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/webhooks/webhooks-readme.md +8 -8
- package/docs/04-REFERENCE/architecture/architecture-01-overview.md +427 -427
- package/docs/04-REFERENCE/architecture/architecture-02-client-architecture.md +424 -424
- package/docs/04-REFERENCE/architecture/architecture-03-data-flow.md +690 -690
- package/docs/04-REFERENCE/architecture/architecture-04-service-layer.md +834 -834
- package/docs/04-REFERENCE/architecture/architecture-05-integration-architecture.md +655 -655
- package/docs/04-REFERENCE/architecture/architecture-06-state-management.md +653 -653
- package/docs/04-REFERENCE/architecture/architecture-adding-new-data-sources.md +686 -686
- package/docs/04-REFERENCE/architecture/readme.md +279 -279
- package/docs/04-REFERENCE/platforms/deno/readme.md +117 -117
- package/docs/04-REFERENCE/platforms/nodejs/readme.md +146 -146
- package/docs/04-REFERENCE/platforms/readme.md +135 -135
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-01-introduction.md +398 -398
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-02-quick-start.md +560 -560
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-03-authentication.md +757 -757
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-04-workflows.md +2476 -2476
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-05-connections.md +1167 -1167
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-kv-storage.md +990 -990
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-state-management.md +121 -121
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-api-reference.md +68 -68
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-deployment.md +731 -731
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-08-best-practices.md +1111 -1111
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-09-signature-reference.md +766 -766
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-readme.md +299 -299
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-s3-sftp-configuration-guide.md +1425 -1425
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-api-key-security.md +816 -816
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-connection-security.md +681 -681
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-workflow-task-types.md +708 -708
- package/docs/04-REFERENCE/platforms/versori/readme.md +108 -108
- package/docs/04-REFERENCE/readme.md +148 -148
- package/docs/04-REFERENCE/resolver-signature/examples/advanced-resolvers.ts +482 -482
- package/docs/04-REFERENCE/resolver-signature/examples/async-resolvers.ts +496 -496
- package/docs/04-REFERENCE/resolver-signature/examples/basic-resolvers.ts +343 -343
- package/docs/04-REFERENCE/resolver-signature/examples/resolver-signature-readme.md +188 -188
- package/docs/04-REFERENCE/resolver-signature/examples/testing-resolvers.ts +463 -463
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-01-foundations.md +286 -286
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-02-parameter-reference.md +643 -643
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-03-basic-examples.md +521 -521
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-04-advanced-patterns.md +739 -739
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-05-sdk-resolvers.md +531 -531
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-migration-guide.md +650 -650
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-testing.md +125 -125
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-07-api-reference.md +794 -794
- package/docs/04-REFERENCE/resolver-signature/readme.md +64 -64
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-quick-reference.md +270 -270
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-readme.md +351 -351
- package/docs/04-REFERENCE/schema/fluent-commerce-schema.json +764 -764
- package/docs/04-REFERENCE/schema/readme.md +141 -141
- package/docs/04-REFERENCE/testing/examples/04-reference-testing-readme.md +158 -158
- package/docs/04-REFERENCE/testing/examples/fluent-testing.ts +62 -62
- package/docs/04-REFERENCE/testing/examples/health-check.ts +155 -155
- package/docs/04-REFERENCE/testing/examples/integration-test.ts +119 -119
- package/docs/04-REFERENCE/testing/examples/performance-test.ts +183 -183
- package/docs/04-REFERENCE/testing/examples/s3-testing.ts +127 -127
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-01-foundations.md +267 -267
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-02-s3-testing.md +599 -599
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-03-fluent-testing.md +589 -589
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-04-integration-testing.md +699 -699
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-05-debugging.md +478 -478
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-cicd-integration.md +463 -463
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-preflight-validation.md +131 -131
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-best-practices.md +499 -499
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-coverage-ci.md +165 -165
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-08-api-reference.md +634 -634
- package/docs/04-REFERENCE/testing/readme.md +86 -86
- package/docs/04-REFERENCE/testing/testing-quick-reference.md +667 -667
- package/docs/04-REFERENCE/testing/testing-readme.md +286 -286
- package/docs/04-REFERENCE/troubleshooting/readme.md +144 -144
- package/docs/04-REFERENCE/troubleshooting/troubleshooting-deno-sftp-compatibility.md +392 -392
- package/docs/template-loading-matrix.md +242 -242
- package/package.json +5 -3
- package/docs/02-CORE-GUIDES/api-reference/cli-profile-integration.md +0 -377
|
@@ -1,585 +1,585 @@
|
|
|
1
|
-
# Logging Guide
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The fc-connect-sdk provides minimal logging utilities designed for flexibility and extensibility. The logging approach differs based on your deployment environment:
|
|
6
|
-
|
|
7
|
-
- **Versori Platform**: Use native `log` from context (recommended)
|
|
8
|
-
- **Standalone (Node.js/Deno)**: Use SDK's lightweight utilities
|
|
9
|
-
- **Other Platforms**: Implement the `Logger` interface for your platform
|
|
10
|
-
|
|
11
|
-
## Philosophy
|
|
12
|
-
|
|
13
|
-
**Keep it simple:**
|
|
14
|
-
|
|
15
|
-
- No global state
|
|
16
|
-
- No logger caching
|
|
17
|
-
- Pure functions over classes
|
|
18
|
-
- Platform-agnostic interface
|
|
19
|
-
- Easy to extend
|
|
20
|
-
|
|
21
|
-
The SDK provides just two core functions for standalone environments, while Versori users should use the platform's native logger directly.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Quick Start
|
|
26
|
-
|
|
27
|
-
### Versori Platform (Recommended)
|
|
28
|
-
|
|
29
|
-
**Always use the native `log` from context** - don't wrap it:
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
import { schedule, http } from '@versori/run';
|
|
33
|
-
import { createClient, SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
34
|
-
|
|
35
|
-
export const workflow = schedule('daily-sync', '0 0 * * *').then(
|
|
36
|
-
http('process', { connection: 'fluent' }, async ctx => {
|
|
37
|
-
const { log, openKv, activation } = ctx;
|
|
38
|
-
|
|
39
|
-
// ✅ Pass native log directly to SDK services
|
|
40
|
-
const client = await createClient(ctx); // Auto-detects Versori context
|
|
41
|
-
const sftp = new SftpDataSource(config, log);
|
|
42
|
-
|
|
43
|
-
log.info('Processing started', { workflow: 'daily-sync' });
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
const files = await sftp.listFiles({ directory: '/inbound' });
|
|
47
|
-
log.info('Files found', { count: files.length });
|
|
48
|
-
|
|
49
|
-
// Process files...
|
|
50
|
-
|
|
51
|
-
log.info('Processing complete', { filesProcessed: files.length });
|
|
52
|
-
} catch (error) {
|
|
53
|
-
log.error('Processing failed', error);
|
|
54
|
-
throw error;
|
|
55
|
-
}
|
|
56
|
-
})
|
|
57
|
-
);
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**Why native log?**
|
|
61
|
-
|
|
62
|
-
- Automatically flows to Versori monitoring dashboard
|
|
63
|
-
- Includes execution context
|
|
64
|
-
- No overhead
|
|
65
|
-
- Simpler code
|
|
66
|
-
|
|
67
|
-
### Standalone Node.js/Deno
|
|
68
|
-
|
|
69
|
-
**Use the SDK's minimal utilities:**
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
import {
|
|
73
|
-
createClient,
|
|
74
|
-
createConsoleLogger,
|
|
75
|
-
toStructuredLogger,
|
|
76
|
-
generateCorrelationId,
|
|
77
|
-
SftpDataSource,
|
|
78
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
79
|
-
|
|
80
|
-
// 1. Create a console logger
|
|
81
|
-
const logger = createConsoleLogger();
|
|
82
|
-
logger.info('Application started');
|
|
83
|
-
|
|
84
|
-
// 2. Or wrap with context for richer logs
|
|
85
|
-
const contextLogger = toStructuredLogger(logger, {
|
|
86
|
-
service: 'InventorySync',
|
|
87
|
-
correlationId: generateCorrelationId(),
|
|
88
|
-
logLevel: 'debug',
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
contextLogger.info('Processing file', { file: 'data.csv' });
|
|
92
|
-
// Output: [2025-01-27T10:00:00.000Z] [INFO] Processing file
|
|
93
|
-
// {"service":"InventorySync","correlationId":"...","file":"data.csv"}
|
|
94
|
-
|
|
95
|
-
// 3. Pass to SDK services
|
|
96
|
-
const client = await createClient({
|
|
97
|
-
config: config,
|
|
98
|
-
logger: contextLogger,
|
|
99
|
-
});
|
|
100
|
-
const sftp = new SftpDataSource(sftpConfig, contextLogger);
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
**Note:** `createClient` automatically logs client creation success/failure when a logger is provided.
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## Core Functions
|
|
108
|
-
|
|
109
|
-
### `createConsoleLogger()`
|
|
110
|
-
|
|
111
|
-
Creates a simple console-based logger for standalone environments.
|
|
112
|
-
|
|
113
|
-
**Signature:**
|
|
114
|
-
|
|
115
|
-
```typescript
|
|
116
|
-
function createConsoleLogger(): Logger;
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
**Output format:** `[timestamp] [LEVEL] message metadata`
|
|
120
|
-
|
|
121
|
-
**Example:**
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
const logger = createConsoleLogger();
|
|
125
|
-
|
|
126
|
-
logger.info('Processing started', { file: 'inventory.csv' });
|
|
127
|
-
// [2025-01-27T10:00:00.000Z] [INFO] Processing started {"file":"inventory.csv"}
|
|
128
|
-
|
|
129
|
-
logger.error('Failed to parse', new Error('Invalid CSV'), { line: 42 });
|
|
130
|
-
// [2025-01-27T10:00:00.000Z] [ERROR] Failed to parse {"line":42}
|
|
131
|
-
// Error: Invalid CSV
|
|
132
|
-
// at <stack trace>
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### `toStructuredLogger()`
|
|
136
|
-
|
|
137
|
-
Wraps a logger with base context that will be merged into all log calls.
|
|
138
|
-
|
|
139
|
-
**Signature:**
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
function toStructuredLogger(rootLogger: Logger, options?: LoggerConfig & LogContext): Logger;
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
**Parameters:**
|
|
146
|
-
|
|
147
|
-
- `rootLogger`: The underlying logger implementation
|
|
148
|
-
- `options`: Configuration and context in a single object
|
|
149
|
-
- Config: `logLevel`, `includeTimestamp`, `debugMode`
|
|
150
|
-
- Context: `service`, `correlationId`, `workflow`, or any custom keys
|
|
151
|
-
|
|
152
|
-
**Context hierarchy:** `baseContext` → `per-message metadata`
|
|
153
|
-
|
|
154
|
-
**Example:**
|
|
155
|
-
|
|
156
|
-
```typescript
|
|
157
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
158
|
-
service: 'S3Ingestion',
|
|
159
|
-
correlationId: generateCorrelationId(),
|
|
160
|
-
logLevel: 'debug',
|
|
161
|
-
environment: 'production',
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
logger.info('File processed', { file: 'data.csv', size: 1024 });
|
|
165
|
-
// All logs include: service, correlationId, environment + per-message metadata
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### `generateCorrelationId()`
|
|
169
|
-
|
|
170
|
-
Generates a unique correlation ID for tracking requests across logs.
|
|
171
|
-
|
|
172
|
-
**Signature:**
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
function generateCorrelationId(): string;
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**Format:** `{timestamp}-{random}` (e.g., "1706356800000-k9f3x2p1q")
|
|
179
|
-
|
|
180
|
-
**Example:**
|
|
181
|
-
|
|
182
|
-
```typescript
|
|
183
|
-
const correlationId = generateCorrelationId();
|
|
184
|
-
// "1706356800000-k9f3x2p1q"
|
|
185
|
-
|
|
186
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
187
|
-
correlationId,
|
|
188
|
-
service: 'OrderProcessor',
|
|
189
|
-
});
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## Logger Interface
|
|
195
|
-
|
|
196
|
-
All loggers implement this simple interface:
|
|
197
|
-
|
|
198
|
-
```typescript
|
|
199
|
-
interface Logger {
|
|
200
|
-
debug(message: string, meta?: Record<string, unknown>): void;
|
|
201
|
-
info(message: string, meta?: Record<string, unknown>): void;
|
|
202
|
-
warn(message: string, meta?: Record<string, unknown>): void;
|
|
203
|
-
error(message: string, error?: Error, meta?: Record<string, unknown>): void;
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
**Key points:**
|
|
208
|
-
|
|
209
|
-
- `error()` accepts an optional `Error` object as the second parameter
|
|
210
|
-
- Metadata is always optional
|
|
211
|
-
- Platform-agnostic - works everywhere
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## Extending for New Platforms
|
|
216
|
-
|
|
217
|
-
### Vercel Edge Functions
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
import { Logger } from '@fluentcommerce/fc-connect-sdk';
|
|
221
|
-
|
|
222
|
-
function createVercelLogger(): Logger {
|
|
223
|
-
return {
|
|
224
|
-
debug: (msg, meta) => console.debug(msg, meta),
|
|
225
|
-
info: (msg, meta) => console.info(msg, meta),
|
|
226
|
-
warn: (msg, meta) => console.warn(msg, meta),
|
|
227
|
-
error: (msg, err, meta) => console.error(msg, err, meta),
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// Usage
|
|
232
|
-
export default async function handler(req: Request) {
|
|
233
|
-
const logger = toStructuredLogger(createVercelLogger(), {
|
|
234
|
-
edge: 'iad1',
|
|
235
|
-
requestId: req.headers.get('x-vercel-id'),
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
logger.info('Request received', { url: req.url });
|
|
239
|
-
// Process...
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### Cloudflare Workers
|
|
244
|
-
|
|
245
|
-
```typescript
|
|
246
|
-
function createCloudflareLogger(env: Env): Logger {
|
|
247
|
-
return {
|
|
248
|
-
debug: (msg, meta) => console.debug(JSON.stringify({ level: 'debug', msg, ...meta })),
|
|
249
|
-
info: (msg, meta) => console.info(JSON.stringify({ level: 'info', msg, ...meta })),
|
|
250
|
-
warn: (msg, meta) => console.warn(JSON.stringify({ level: 'warn', msg, ...meta })),
|
|
251
|
-
error: (msg, err, meta) =>
|
|
252
|
-
console.error(
|
|
253
|
-
JSON.stringify({
|
|
254
|
-
level: 'error',
|
|
255
|
-
msg,
|
|
256
|
-
...meta,
|
|
257
|
-
error: err?.message,
|
|
258
|
-
stack: err?.stack,
|
|
259
|
-
})
|
|
260
|
-
),
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Usage
|
|
265
|
-
export default {
|
|
266
|
-
async fetch(request: Request, env: Env) {
|
|
267
|
-
const logger = toStructuredLogger(createCloudflareLogger(env), {
|
|
268
|
-
worker: 'inventory-sync',
|
|
269
|
-
rayId: request.headers.get('cf-ray'),
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
logger.info('Worker invoked');
|
|
273
|
-
// Process...
|
|
274
|
-
},
|
|
275
|
-
};
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Third-party Loggers (Pino, Winston, Bunyan)
|
|
279
|
-
|
|
280
|
-
#### Pino
|
|
281
|
-
|
|
282
|
-
```typescript
|
|
283
|
-
import pino from 'pino';
|
|
284
|
-
|
|
285
|
-
function createPinoLogger(options?: pino.LoggerOptions): Logger {
|
|
286
|
-
const log = pino(options);
|
|
287
|
-
return {
|
|
288
|
-
debug: (msg, meta) => log.debug(meta, msg),
|
|
289
|
-
info: (msg, meta) => log.info(meta, msg),
|
|
290
|
-
warn: (msg, meta) => log.warn(meta, msg),
|
|
291
|
-
error: (msg, err, meta) => log.error({ ...meta, err }, msg),
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Usage with context
|
|
296
|
-
const logger = toStructuredLogger(createPinoLogger(), {
|
|
297
|
-
service: 'api-gateway',
|
|
298
|
-
version: '2.0.0',
|
|
299
|
-
});
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
#### Winston
|
|
303
|
-
|
|
304
|
-
```typescript
|
|
305
|
-
import winston from 'winston';
|
|
306
|
-
|
|
307
|
-
function createWinstonLogger(): Logger {
|
|
308
|
-
const log = winston.createLogger({
|
|
309
|
-
format: winston.format.json(),
|
|
310
|
-
transports: [new winston.transports.Console()],
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
return {
|
|
314
|
-
debug: (msg, meta) => log.debug(msg, meta),
|
|
315
|
-
info: (msg, meta) => log.info(msg, meta),
|
|
316
|
-
warn: (msg, meta) => log.warn(msg, meta),
|
|
317
|
-
error: (msg, err, meta) => log.error(msg, { ...meta, error: err }),
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
#### Bunyan
|
|
323
|
-
|
|
324
|
-
```typescript
|
|
325
|
-
import bunyan from 'bunyan';
|
|
326
|
-
|
|
327
|
-
function createBunyanLogger(name: string): Logger {
|
|
328
|
-
const log = bunyan.createLogger({ name });
|
|
329
|
-
|
|
330
|
-
return {
|
|
331
|
-
debug: (msg, meta) => log.debug(meta, msg),
|
|
332
|
-
info: (msg, meta) => log.info(meta, msg),
|
|
333
|
-
warn: (msg, meta) => log.warn(meta, msg),
|
|
334
|
-
error: (msg, err, meta) => log.error({ ...meta, err }, msg),
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
---
|
|
340
|
-
|
|
341
|
-
## Log Levels
|
|
342
|
-
|
|
343
|
-
Supported log levels (in order of severity):
|
|
344
|
-
|
|
345
|
-
1. `debug` - Detailed diagnostic information
|
|
346
|
-
2. `info` - Informational messages (default)
|
|
347
|
-
3. `warn` - Warning messages
|
|
348
|
-
4. `error` - Error messages
|
|
349
|
-
|
|
350
|
-
**Level filtering:**
|
|
351
|
-
|
|
352
|
-
```typescript
|
|
353
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
354
|
-
logLevel: 'warn', // Only warn and error will be logged
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
logger.debug('This will not appear');
|
|
358
|
-
logger.info('This will not appear');
|
|
359
|
-
logger.warn('This will appear');
|
|
360
|
-
logger.error('This will appear');
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
---
|
|
364
|
-
|
|
365
|
-
## Common Patterns
|
|
366
|
-
|
|
367
|
-
### Per-Request Logging
|
|
368
|
-
|
|
369
|
-
```typescript
|
|
370
|
-
app.use((req, res, next) => {
|
|
371
|
-
const requestLogger = toStructuredLogger(logger, {
|
|
372
|
-
requestId: req.id,
|
|
373
|
-
method: req.method,
|
|
374
|
-
path: req.path,
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
req.logger = requestLogger;
|
|
378
|
-
next();
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
// In route handler
|
|
382
|
-
req.logger.info('Processing request'); // Includes requestId, method, path
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
### Service-Level Logging
|
|
386
|
-
|
|
387
|
-
```typescript
|
|
388
|
-
class InventoryService {
|
|
389
|
-
private logger: Logger;
|
|
390
|
-
|
|
391
|
-
constructor(logger: Logger) {
|
|
392
|
-
this.logger = toStructuredLogger(logger, {
|
|
393
|
-
service: 'InventoryService',
|
|
394
|
-
correlationId: generateCorrelationId(),
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
async syncInventory(location: string) {
|
|
399
|
-
this.logger.info('Starting sync', { location });
|
|
400
|
-
|
|
401
|
-
try {
|
|
402
|
-
// Process...
|
|
403
|
-
this.logger.info('Sync complete', { location, itemsProcessed: 100 });
|
|
404
|
-
} catch (error) {
|
|
405
|
-
this.logger.error('Sync failed', error, { location });
|
|
406
|
-
throw error;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
### Error Handling
|
|
413
|
-
|
|
414
|
-
```typescript
|
|
415
|
-
try {
|
|
416
|
-
await processFile(file);
|
|
417
|
-
} catch (error) {
|
|
418
|
-
// ✅ GOOD - Pass Error object
|
|
419
|
-
logger.error('Failed to process file', error, { file: file.name });
|
|
420
|
-
|
|
421
|
-
// Error details (message, stack) are automatically included
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
// Multiple error contexts
|
|
425
|
-
try {
|
|
426
|
-
await apiCall();
|
|
427
|
-
} catch (error) {
|
|
428
|
-
logger.error('API call failed', error, {
|
|
429
|
-
endpoint: '/api/inventory',
|
|
430
|
-
retries: 3,
|
|
431
|
-
timeout: 5000,
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
### Debug Mode
|
|
437
|
-
|
|
438
|
-
```typescript
|
|
439
|
-
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
440
|
-
|
|
441
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
442
|
-
logLevel: isDevelopment ? 'debug' : 'info',
|
|
443
|
-
environment: process.env.NODE_ENV,
|
|
444
|
-
});
|
|
445
|
-
|
|
446
|
-
logger.debug('Detailed info', { config }); // Only in development
|
|
447
|
-
logger.info('Processing started'); // Always logged
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
---
|
|
451
|
-
|
|
452
|
-
## Migration from Old LoggingService
|
|
453
|
-
|
|
454
|
-
### Before (Old Class-Based Approach)
|
|
455
|
-
|
|
456
|
-
```typescript
|
|
457
|
-
import { LoggingService } from '@fluentcommerce/fc-connect-sdk';
|
|
458
|
-
|
|
459
|
-
// Old: LoggingService class (removed)
|
|
460
|
-
const logger = new LoggingService({
|
|
461
|
-
service: 'MyService',
|
|
462
|
-
debug: true
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
logger.info('Processing');
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
### After (New Function-Based Approach)
|
|
469
|
-
|
|
470
|
-
```typescript
|
|
471
|
-
import { createConsoleLogger, toStructuredLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
472
|
-
|
|
473
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
474
|
-
logLevel: 'info',
|
|
475
|
-
service: 'MyService',
|
|
476
|
-
});
|
|
477
|
-
|
|
478
|
-
logger.info('Processing');
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
**Changes:**
|
|
482
|
-
|
|
483
|
-
- No `LoggingService` class instantiation
|
|
484
|
-
- Single function call instead of two
|
|
485
|
-
- Config and context merged into one parameter
|
|
486
|
-
- Simpler, more functional approach
|
|
487
|
-
|
|
488
|
-
**Note:** The old `LoggingService` class has been removed. Use minimal utilities in standalone (Node/Deno) and the native `log` on Versori.
|
|
489
|
-
|
|
490
|
-
---
|
|
491
|
-
|
|
492
|
-
## Best Practices
|
|
493
|
-
|
|
494
|
-
### ✅ DO
|
|
495
|
-
|
|
496
|
-
```typescript
|
|
497
|
-
// Use native Versori log on Versori platform
|
|
498
|
-
const { log } = ctx;
|
|
499
|
-
const client = await createClient(ctx); // Auto-detects Versori context - log is included
|
|
500
|
-
|
|
501
|
-
// Create logger once per service/workflow
|
|
502
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'InventorySync' });
|
|
503
|
-
|
|
504
|
-
// Pass Error objects to error()
|
|
505
|
-
logger.error('Failed', error, { context: 'value' });
|
|
506
|
-
|
|
507
|
-
// Include relevant context
|
|
508
|
-
logger.info('Processing file', { file, size, location });
|
|
509
|
-
|
|
510
|
-
// Use correlation IDs for request tracking
|
|
511
|
-
const correlationId = generateCorrelationId();
|
|
512
|
-
```
|
|
513
|
-
|
|
514
|
-
### ❌ DON'T
|
|
515
|
-
|
|
516
|
-
```typescript
|
|
517
|
-
// Versori: use native log
|
|
518
|
-
const { log } = ctx;
|
|
519
|
-
|
|
520
|
-
// Standalone: use utilities
|
|
521
|
-
import { createConsoleLogger, toStructuredLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
522
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
523
|
-
service: 'my-workflow',
|
|
524
|
-
logLevel: 'info',
|
|
525
|
-
});
|
|
526
|
-
```
|
|
527
|
-
|
|
528
|
-
---
|
|
529
|
-
|
|
530
|
-
## Troubleshooting
|
|
531
|
-
|
|
532
|
-
### Logs not appearing in Versori
|
|
533
|
-
|
|
534
|
-
**Problem:** Logs not showing in Versori monitoring dashboard
|
|
535
|
-
|
|
536
|
-
**Solution:** Use native `log` from context, not wrapped:
|
|
537
|
-
|
|
538
|
-
```typescript
|
|
539
|
-
// ❌ Wrong
|
|
540
|
-
const logging = ctx.log;
|
|
541
|
-
|
|
542
|
-
// ✅ Right
|
|
543
|
-
const { log } = ctx;
|
|
544
|
-
const client = await createClient(ctx); // Auto-detects Versori context - log is included
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
### Missing metadata in logs
|
|
548
|
-
|
|
549
|
-
**Problem:** Context not appearing in log output
|
|
550
|
-
|
|
551
|
-
**Solution:** Check you're using `toStructuredLogger` with options:
|
|
552
|
-
|
|
553
|
-
```typescript
|
|
554
|
-
// ❌ No context
|
|
555
|
-
const logger = createConsoleLogger();
|
|
556
|
-
|
|
557
|
-
// ✅ With context
|
|
558
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
559
|
-
service: 'MyService',
|
|
560
|
-
});
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
### Log level too verbose
|
|
564
|
-
|
|
565
|
-
**Problem:** Too many debug logs in production
|
|
566
|
-
|
|
567
|
-
**Solution:** Set appropriate log level:
|
|
568
|
-
|
|
569
|
-
```typescript
|
|
570
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
571
|
-
logLevel: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
|
|
572
|
-
});
|
|
573
|
-
```
|
|
574
|
-
|
|
575
|
-
---
|
|
576
|
-
|
|
577
|
-
## Summary
|
|
578
|
-
|
|
579
|
-
- **Versori:** Use native `log` from context
|
|
580
|
-
- **Standalone:** Use `createConsoleLogger()` and `toStructuredLogger()`
|
|
581
|
-
- **Extension:** Implement `Logger` interface for new platforms
|
|
582
|
-
- **Keep it simple:** Pure functions, no state, easy composition
|
|
583
|
-
- **Future-proof:** Easy to extend without breaking changes
|
|
584
|
-
|
|
585
|
-
The logging system is intentionally minimal - it provides just enough structure for consistency while staying out of your way.
|
|
1
|
+
# Logging Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The fc-connect-sdk provides minimal logging utilities designed for flexibility and extensibility. The logging approach differs based on your deployment environment:
|
|
6
|
+
|
|
7
|
+
- **Versori Platform**: Use native `log` from context (recommended)
|
|
8
|
+
- **Standalone (Node.js/Deno)**: Use SDK's lightweight utilities
|
|
9
|
+
- **Other Platforms**: Implement the `Logger` interface for your platform
|
|
10
|
+
|
|
11
|
+
## Philosophy
|
|
12
|
+
|
|
13
|
+
**Keep it simple:**
|
|
14
|
+
|
|
15
|
+
- No global state
|
|
16
|
+
- No logger caching
|
|
17
|
+
- Pure functions over classes
|
|
18
|
+
- Platform-agnostic interface
|
|
19
|
+
- Easy to extend
|
|
20
|
+
|
|
21
|
+
The SDK provides just two core functions for standalone environments, while Versori users should use the platform's native logger directly.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
### Versori Platform (Recommended)
|
|
28
|
+
|
|
29
|
+
**Always use the native `log` from context** - don't wrap it:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { schedule, http } from '@versori/run';
|
|
33
|
+
import { createClient, SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
34
|
+
|
|
35
|
+
export const workflow = schedule('daily-sync', '0 0 * * *').then(
|
|
36
|
+
http('process', { connection: 'fluent' }, async ctx => {
|
|
37
|
+
const { log, openKv, activation } = ctx;
|
|
38
|
+
|
|
39
|
+
// ✅ Pass native log directly to SDK services
|
|
40
|
+
const client = await createClient(ctx); // Auto-detects Versori context
|
|
41
|
+
const sftp = new SftpDataSource(config, log);
|
|
42
|
+
|
|
43
|
+
log.info('Processing started', { workflow: 'daily-sync' });
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const files = await sftp.listFiles({ directory: '/inbound' });
|
|
47
|
+
log.info('Files found', { count: files.length });
|
|
48
|
+
|
|
49
|
+
// Process files...
|
|
50
|
+
|
|
51
|
+
log.info('Processing complete', { filesProcessed: files.length });
|
|
52
|
+
} catch (error) {
|
|
53
|
+
log.error('Processing failed', error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Why native log?**
|
|
61
|
+
|
|
62
|
+
- Automatically flows to Versori monitoring dashboard
|
|
63
|
+
- Includes execution context
|
|
64
|
+
- No overhead
|
|
65
|
+
- Simpler code
|
|
66
|
+
|
|
67
|
+
### Standalone Node.js/Deno
|
|
68
|
+
|
|
69
|
+
**Use the SDK's minimal utilities:**
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import {
|
|
73
|
+
createClient,
|
|
74
|
+
createConsoleLogger,
|
|
75
|
+
toStructuredLogger,
|
|
76
|
+
generateCorrelationId,
|
|
77
|
+
SftpDataSource,
|
|
78
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
79
|
+
|
|
80
|
+
// 1. Create a console logger
|
|
81
|
+
const logger = createConsoleLogger();
|
|
82
|
+
logger.info('Application started');
|
|
83
|
+
|
|
84
|
+
// 2. Or wrap with context for richer logs
|
|
85
|
+
const contextLogger = toStructuredLogger(logger, {
|
|
86
|
+
service: 'InventorySync',
|
|
87
|
+
correlationId: generateCorrelationId(),
|
|
88
|
+
logLevel: 'debug',
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
contextLogger.info('Processing file', { file: 'data.csv' });
|
|
92
|
+
// Output: [2025-01-27T10:00:00.000Z] [INFO] Processing file
|
|
93
|
+
// {"service":"InventorySync","correlationId":"...","file":"data.csv"}
|
|
94
|
+
|
|
95
|
+
// 3. Pass to SDK services
|
|
96
|
+
const client = await createClient({
|
|
97
|
+
config: config,
|
|
98
|
+
logger: contextLogger,
|
|
99
|
+
});
|
|
100
|
+
const sftp = new SftpDataSource(sftpConfig, contextLogger);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Note:** `createClient` automatically logs client creation success/failure when a logger is provided.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Core Functions
|
|
108
|
+
|
|
109
|
+
### `createConsoleLogger()`
|
|
110
|
+
|
|
111
|
+
Creates a simple console-based logger for standalone environments.
|
|
112
|
+
|
|
113
|
+
**Signature:**
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
function createConsoleLogger(): Logger;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Output format:** `[timestamp] [LEVEL] message metadata`
|
|
120
|
+
|
|
121
|
+
**Example:**
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
const logger = createConsoleLogger();
|
|
125
|
+
|
|
126
|
+
logger.info('Processing started', { file: 'inventory.csv' });
|
|
127
|
+
// [2025-01-27T10:00:00.000Z] [INFO] Processing started {"file":"inventory.csv"}
|
|
128
|
+
|
|
129
|
+
logger.error('Failed to parse', new Error('Invalid CSV'), { line: 42 });
|
|
130
|
+
// [2025-01-27T10:00:00.000Z] [ERROR] Failed to parse {"line":42}
|
|
131
|
+
// Error: Invalid CSV
|
|
132
|
+
// at <stack trace>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### `toStructuredLogger()`
|
|
136
|
+
|
|
137
|
+
Wraps a logger with base context that will be merged into all log calls.
|
|
138
|
+
|
|
139
|
+
**Signature:**
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
function toStructuredLogger(rootLogger: Logger, options?: LoggerConfig & LogContext): Logger;
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Parameters:**
|
|
146
|
+
|
|
147
|
+
- `rootLogger`: The underlying logger implementation
|
|
148
|
+
- `options`: Configuration and context in a single object
|
|
149
|
+
- Config: `logLevel`, `includeTimestamp`, `debugMode`
|
|
150
|
+
- Context: `service`, `correlationId`, `workflow`, or any custom keys
|
|
151
|
+
|
|
152
|
+
**Context hierarchy:** `baseContext` → `per-message metadata`
|
|
153
|
+
|
|
154
|
+
**Example:**
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
158
|
+
service: 'S3Ingestion',
|
|
159
|
+
correlationId: generateCorrelationId(),
|
|
160
|
+
logLevel: 'debug',
|
|
161
|
+
environment: 'production',
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
logger.info('File processed', { file: 'data.csv', size: 1024 });
|
|
165
|
+
// All logs include: service, correlationId, environment + per-message metadata
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### `generateCorrelationId()`
|
|
169
|
+
|
|
170
|
+
Generates a unique correlation ID for tracking requests across logs.
|
|
171
|
+
|
|
172
|
+
**Signature:**
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
function generateCorrelationId(): string;
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Format:** `{timestamp}-{random}` (e.g., "1706356800000-k9f3x2p1q")
|
|
179
|
+
|
|
180
|
+
**Example:**
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
const correlationId = generateCorrelationId();
|
|
184
|
+
// "1706356800000-k9f3x2p1q"
|
|
185
|
+
|
|
186
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
187
|
+
correlationId,
|
|
188
|
+
service: 'OrderProcessor',
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Logger Interface
|
|
195
|
+
|
|
196
|
+
All loggers implement this simple interface:
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
interface Logger {
|
|
200
|
+
debug(message: string, meta?: Record<string, unknown>): void;
|
|
201
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
202
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
203
|
+
error(message: string, error?: Error, meta?: Record<string, unknown>): void;
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Key points:**
|
|
208
|
+
|
|
209
|
+
- `error()` accepts an optional `Error` object as the second parameter
|
|
210
|
+
- Metadata is always optional
|
|
211
|
+
- Platform-agnostic - works everywhere
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Extending for New Platforms
|
|
216
|
+
|
|
217
|
+
### Vercel Edge Functions
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
import { Logger } from '@fluentcommerce/fc-connect-sdk';
|
|
221
|
+
|
|
222
|
+
function createVercelLogger(): Logger {
|
|
223
|
+
return {
|
|
224
|
+
debug: (msg, meta) => console.debug(msg, meta),
|
|
225
|
+
info: (msg, meta) => console.info(msg, meta),
|
|
226
|
+
warn: (msg, meta) => console.warn(msg, meta),
|
|
227
|
+
error: (msg, err, meta) => console.error(msg, err, meta),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Usage
|
|
232
|
+
export default async function handler(req: Request) {
|
|
233
|
+
const logger = toStructuredLogger(createVercelLogger(), {
|
|
234
|
+
edge: 'iad1',
|
|
235
|
+
requestId: req.headers.get('x-vercel-id'),
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
logger.info('Request received', { url: req.url });
|
|
239
|
+
// Process...
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Cloudflare Workers
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
function createCloudflareLogger(env: Env): Logger {
|
|
247
|
+
return {
|
|
248
|
+
debug: (msg, meta) => console.debug(JSON.stringify({ level: 'debug', msg, ...meta })),
|
|
249
|
+
info: (msg, meta) => console.info(JSON.stringify({ level: 'info', msg, ...meta })),
|
|
250
|
+
warn: (msg, meta) => console.warn(JSON.stringify({ level: 'warn', msg, ...meta })),
|
|
251
|
+
error: (msg, err, meta) =>
|
|
252
|
+
console.error(
|
|
253
|
+
JSON.stringify({
|
|
254
|
+
level: 'error',
|
|
255
|
+
msg,
|
|
256
|
+
...meta,
|
|
257
|
+
error: err?.message,
|
|
258
|
+
stack: err?.stack,
|
|
259
|
+
})
|
|
260
|
+
),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Usage
|
|
265
|
+
export default {
|
|
266
|
+
async fetch(request: Request, env: Env) {
|
|
267
|
+
const logger = toStructuredLogger(createCloudflareLogger(env), {
|
|
268
|
+
worker: 'inventory-sync',
|
|
269
|
+
rayId: request.headers.get('cf-ray'),
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
logger.info('Worker invoked');
|
|
273
|
+
// Process...
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Third-party Loggers (Pino, Winston, Bunyan)
|
|
279
|
+
|
|
280
|
+
#### Pino
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
import pino from 'pino';
|
|
284
|
+
|
|
285
|
+
function createPinoLogger(options?: pino.LoggerOptions): Logger {
|
|
286
|
+
const log = pino(options);
|
|
287
|
+
return {
|
|
288
|
+
debug: (msg, meta) => log.debug(meta, msg),
|
|
289
|
+
info: (msg, meta) => log.info(meta, msg),
|
|
290
|
+
warn: (msg, meta) => log.warn(meta, msg),
|
|
291
|
+
error: (msg, err, meta) => log.error({ ...meta, err }, msg),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Usage with context
|
|
296
|
+
const logger = toStructuredLogger(createPinoLogger(), {
|
|
297
|
+
service: 'api-gateway',
|
|
298
|
+
version: '2.0.0',
|
|
299
|
+
});
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
#### Winston
|
|
303
|
+
|
|
304
|
+
```typescript
|
|
305
|
+
import winston from 'winston';
|
|
306
|
+
|
|
307
|
+
function createWinstonLogger(): Logger {
|
|
308
|
+
const log = winston.createLogger({
|
|
309
|
+
format: winston.format.json(),
|
|
310
|
+
transports: [new winston.transports.Console()],
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
return {
|
|
314
|
+
debug: (msg, meta) => log.debug(msg, meta),
|
|
315
|
+
info: (msg, meta) => log.info(msg, meta),
|
|
316
|
+
warn: (msg, meta) => log.warn(msg, meta),
|
|
317
|
+
error: (msg, err, meta) => log.error(msg, { ...meta, error: err }),
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
#### Bunyan
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
import bunyan from 'bunyan';
|
|
326
|
+
|
|
327
|
+
function createBunyanLogger(name: string): Logger {
|
|
328
|
+
const log = bunyan.createLogger({ name });
|
|
329
|
+
|
|
330
|
+
return {
|
|
331
|
+
debug: (msg, meta) => log.debug(meta, msg),
|
|
332
|
+
info: (msg, meta) => log.info(meta, msg),
|
|
333
|
+
warn: (msg, meta) => log.warn(meta, msg),
|
|
334
|
+
error: (msg, err, meta) => log.error({ ...meta, err }, msg),
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Log Levels
|
|
342
|
+
|
|
343
|
+
Supported log levels (in order of severity):
|
|
344
|
+
|
|
345
|
+
1. `debug` - Detailed diagnostic information
|
|
346
|
+
2. `info` - Informational messages (default)
|
|
347
|
+
3. `warn` - Warning messages
|
|
348
|
+
4. `error` - Error messages
|
|
349
|
+
|
|
350
|
+
**Level filtering:**
|
|
351
|
+
|
|
352
|
+
```typescript
|
|
353
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
354
|
+
logLevel: 'warn', // Only warn and error will be logged
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
logger.debug('This will not appear');
|
|
358
|
+
logger.info('This will not appear');
|
|
359
|
+
logger.warn('This will appear');
|
|
360
|
+
logger.error('This will appear');
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Common Patterns
|
|
366
|
+
|
|
367
|
+
### Per-Request Logging
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
app.use((req, res, next) => {
|
|
371
|
+
const requestLogger = toStructuredLogger(logger, {
|
|
372
|
+
requestId: req.id,
|
|
373
|
+
method: req.method,
|
|
374
|
+
path: req.path,
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
req.logger = requestLogger;
|
|
378
|
+
next();
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
// In route handler
|
|
382
|
+
req.logger.info('Processing request'); // Includes requestId, method, path
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### Service-Level Logging
|
|
386
|
+
|
|
387
|
+
```typescript
|
|
388
|
+
class InventoryService {
|
|
389
|
+
private logger: Logger;
|
|
390
|
+
|
|
391
|
+
constructor(logger: Logger) {
|
|
392
|
+
this.logger = toStructuredLogger(logger, {
|
|
393
|
+
service: 'InventoryService',
|
|
394
|
+
correlationId: generateCorrelationId(),
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
async syncInventory(location: string) {
|
|
399
|
+
this.logger.info('Starting sync', { location });
|
|
400
|
+
|
|
401
|
+
try {
|
|
402
|
+
// Process...
|
|
403
|
+
this.logger.info('Sync complete', { location, itemsProcessed: 100 });
|
|
404
|
+
} catch (error) {
|
|
405
|
+
this.logger.error('Sync failed', error, { location });
|
|
406
|
+
throw error;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Error Handling
|
|
413
|
+
|
|
414
|
+
```typescript
|
|
415
|
+
try {
|
|
416
|
+
await processFile(file);
|
|
417
|
+
} catch (error) {
|
|
418
|
+
// ✅ GOOD - Pass Error object
|
|
419
|
+
logger.error('Failed to process file', error, { file: file.name });
|
|
420
|
+
|
|
421
|
+
// Error details (message, stack) are automatically included
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// Multiple error contexts
|
|
425
|
+
try {
|
|
426
|
+
await apiCall();
|
|
427
|
+
} catch (error) {
|
|
428
|
+
logger.error('API call failed', error, {
|
|
429
|
+
endpoint: '/api/inventory',
|
|
430
|
+
retries: 3,
|
|
431
|
+
timeout: 5000,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Debug Mode
|
|
437
|
+
|
|
438
|
+
```typescript
|
|
439
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
440
|
+
|
|
441
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
442
|
+
logLevel: isDevelopment ? 'debug' : 'info',
|
|
443
|
+
environment: process.env.NODE_ENV,
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
logger.debug('Detailed info', { config }); // Only in development
|
|
447
|
+
logger.info('Processing started'); // Always logged
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Migration from Old LoggingService
|
|
453
|
+
|
|
454
|
+
### Before (Old Class-Based Approach)
|
|
455
|
+
|
|
456
|
+
```typescript
|
|
457
|
+
import { LoggingService } from '@fluentcommerce/fc-connect-sdk';
|
|
458
|
+
|
|
459
|
+
// Old: LoggingService class (removed)
|
|
460
|
+
const logger = new LoggingService({
|
|
461
|
+
service: 'MyService',
|
|
462
|
+
debug: true
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
logger.info('Processing');
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### After (New Function-Based Approach)
|
|
469
|
+
|
|
470
|
+
```typescript
|
|
471
|
+
import { createConsoleLogger, toStructuredLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
472
|
+
|
|
473
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
474
|
+
logLevel: 'info',
|
|
475
|
+
service: 'MyService',
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
logger.info('Processing');
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
**Changes:**
|
|
482
|
+
|
|
483
|
+
- No `LoggingService` class instantiation
|
|
484
|
+
- Single function call instead of two
|
|
485
|
+
- Config and context merged into one parameter
|
|
486
|
+
- Simpler, more functional approach
|
|
487
|
+
|
|
488
|
+
**Note:** The old `LoggingService` class has been removed. Use minimal utilities in standalone (Node/Deno) and the native `log` on Versori.
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## Best Practices
|
|
493
|
+
|
|
494
|
+
### ✅ DO
|
|
495
|
+
|
|
496
|
+
```typescript
|
|
497
|
+
// Use native Versori log on Versori platform
|
|
498
|
+
const { log } = ctx;
|
|
499
|
+
const client = await createClient(ctx); // Auto-detects Versori context - log is included
|
|
500
|
+
|
|
501
|
+
// Create logger once per service/workflow
|
|
502
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'InventorySync' });
|
|
503
|
+
|
|
504
|
+
// Pass Error objects to error()
|
|
505
|
+
logger.error('Failed', error, { context: 'value' });
|
|
506
|
+
|
|
507
|
+
// Include relevant context
|
|
508
|
+
logger.info('Processing file', { file, size, location });
|
|
509
|
+
|
|
510
|
+
// Use correlation IDs for request tracking
|
|
511
|
+
const correlationId = generateCorrelationId();
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
### ❌ DON'T
|
|
515
|
+
|
|
516
|
+
```typescript
|
|
517
|
+
// Versori: use native log
|
|
518
|
+
const { log } = ctx;
|
|
519
|
+
|
|
520
|
+
// Standalone: use utilities
|
|
521
|
+
import { createConsoleLogger, toStructuredLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
522
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
523
|
+
service: 'my-workflow',
|
|
524
|
+
logLevel: 'info',
|
|
525
|
+
});
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Troubleshooting
|
|
531
|
+
|
|
532
|
+
### Logs not appearing in Versori
|
|
533
|
+
|
|
534
|
+
**Problem:** Logs not showing in Versori monitoring dashboard
|
|
535
|
+
|
|
536
|
+
**Solution:** Use native `log` from context, not wrapped:
|
|
537
|
+
|
|
538
|
+
```typescript
|
|
539
|
+
// ❌ Wrong
|
|
540
|
+
const logging = ctx.log;
|
|
541
|
+
|
|
542
|
+
// ✅ Right
|
|
543
|
+
const { log } = ctx;
|
|
544
|
+
const client = await createClient(ctx); // Auto-detects Versori context - log is included
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
### Missing metadata in logs
|
|
548
|
+
|
|
549
|
+
**Problem:** Context not appearing in log output
|
|
550
|
+
|
|
551
|
+
**Solution:** Check you're using `toStructuredLogger` with options:
|
|
552
|
+
|
|
553
|
+
```typescript
|
|
554
|
+
// ❌ No context
|
|
555
|
+
const logger = createConsoleLogger();
|
|
556
|
+
|
|
557
|
+
// ✅ With context
|
|
558
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
559
|
+
service: 'MyService',
|
|
560
|
+
});
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
### Log level too verbose
|
|
564
|
+
|
|
565
|
+
**Problem:** Too many debug logs in production
|
|
566
|
+
|
|
567
|
+
**Solution:** Set appropriate log level:
|
|
568
|
+
|
|
569
|
+
```typescript
|
|
570
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
571
|
+
logLevel: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
|
|
572
|
+
});
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
---
|
|
576
|
+
|
|
577
|
+
## Summary
|
|
578
|
+
|
|
579
|
+
- **Versori:** Use native `log` from context
|
|
580
|
+
- **Standalone:** Use `createConsoleLogger()` and `toStructuredLogger()`
|
|
581
|
+
- **Extension:** Implement `Logger` interface for new platforms
|
|
582
|
+
- **Keep it simple:** Pure functions, no state, easy composition
|
|
583
|
+
- **Future-proof:** Easy to extend without breaking changes
|
|
584
|
+
|
|
585
|
+
The logging system is intentionally minimal - it provides just enough structure for consistency while staying out of your way.
|