couchbase 4.4.6 → 4.5.0

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.
Files changed (139) hide show
  1. package/deps/couchbase-cxx-cache/mozilla-ca-bundle.crt +3 -165
  2. package/deps/couchbase-cxx-cache/mozilla-ca-bundle.sha256 +1 -1
  3. package/deps/couchbase-cxx-client/CMakeLists.txt +12 -1
  4. package/deps/couchbase-cxx-client/README.md +2 -2
  5. package/deps/couchbase-cxx-client/cmake/Profiler.cmake +15 -0
  6. package/deps/couchbase-cxx-client/core/app_telemetry_address.cxx +55 -0
  7. package/deps/couchbase-cxx-client/core/app_telemetry_address.hxx +39 -0
  8. package/deps/couchbase-cxx-client/core/app_telemetry_meter.cxx +753 -0
  9. package/deps/couchbase-cxx-client/core/app_telemetry_meter.hxx +198 -0
  10. package/deps/couchbase-cxx-client/core/app_telemetry_reporter.cxx +895 -0
  11. package/deps/couchbase-cxx-client/core/app_telemetry_reporter.hxx +59 -0
  12. package/deps/couchbase-cxx-client/core/bucket.cxx +77 -35
  13. package/deps/couchbase-cxx-client/core/bucket.hxx +17 -10
  14. package/deps/couchbase-cxx-client/core/cluster.cxx +54 -16
  15. package/deps/couchbase-cxx-client/core/cluster_credentials.cxx +27 -0
  16. package/deps/couchbase-cxx-client/core/cluster_credentials.hxx +36 -0
  17. package/deps/couchbase-cxx-client/core/cluster_options.hxx +12 -0
  18. package/deps/couchbase-cxx-client/core/collections_component.cxx +7 -5
  19. package/deps/couchbase-cxx-client/core/http_component.cxx +6 -0
  20. package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +2 -0
  21. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +9 -0
  22. package/deps/couchbase-cxx-client/core/impl/collection.cxx +2 -0
  23. package/deps/couchbase-cxx-client/core/impl/error.cxx +1 -0
  24. package/deps/couchbase-cxx-client/core/impl/logger.cxx +51 -0
  25. package/deps/couchbase-cxx-client/core/impl/replica_utils.cxx +1 -1
  26. package/deps/couchbase-cxx-client/core/impl/transaction_get_multi_replicas_from_preferred_server_group_spec.cxx +32 -0
  27. package/deps/couchbase-cxx-client/core/impl/transaction_get_multi_spec.cxx +30 -0
  28. package/deps/couchbase-cxx-client/core/impl/transaction_op_error_category.cxx +2 -0
  29. package/deps/couchbase-cxx-client/core/io/config_tracker.cxx +6 -6
  30. package/deps/couchbase-cxx-client/core/io/http_command.hxx +35 -11
  31. package/deps/couchbase-cxx-client/core/io/http_session.cxx +10 -0
  32. package/deps/couchbase-cxx-client/core/io/http_session.hxx +4 -0
  33. package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +83 -34
  34. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +41 -2
  35. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +52 -19
  36. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +3 -0
  37. package/deps/couchbase-cxx-client/core/logger/logger.cxx +46 -0
  38. package/deps/couchbase-cxx-client/core/logger/logger.hxx +41 -1
  39. package/deps/couchbase-cxx-client/core/management/bucket_settings.hxx +1 -0
  40. package/deps/couchbase-cxx-client/core/management/bucket_settings_json.hxx +4 -0
  41. package/deps/couchbase-cxx-client/core/meta/features.hxx +32 -0
  42. package/deps/couchbase-cxx-client/core/operations/document_analytics.cxx +9 -9
  43. package/deps/couchbase-cxx-client/core/operations/document_get_all_replicas.hxx +10 -2
  44. package/deps/couchbase-cxx-client/core/operations/document_lookup_in.cxx +4 -0
  45. package/deps/couchbase-cxx-client/core/operations/document_lookup_in_all_replicas.hxx +14 -2
  46. package/deps/couchbase-cxx-client/core/operations/document_lookup_in_any_replica.hxx +4 -0
  47. package/deps/couchbase-cxx-client/core/operations/document_mutate_in.cxx +4 -0
  48. package/deps/couchbase-cxx-client/core/operations/document_mutate_in.hxx +1 -0
  49. package/deps/couchbase-cxx-client/core/operations/document_query.cxx +12 -10
  50. package/deps/couchbase-cxx-client/core/operations/http_noop.cxx +1 -0
  51. package/deps/couchbase-cxx-client/core/operations/management/bucket_create.cxx +3 -0
  52. package/deps/couchbase-cxx-client/core/operations/management/bucket_update.cxx +3 -0
  53. package/deps/couchbase-cxx-client/core/origin.cxx +0 -5
  54. package/deps/couchbase-cxx-client/core/origin.hxx +2 -11
  55. package/deps/couchbase-cxx-client/core/platform/random.cc +6 -3
  56. package/deps/couchbase-cxx-client/core/platform/random.h +2 -2
  57. package/deps/couchbase-cxx-client/core/protocol/cmd_mutate_in.hxx +9 -0
  58. package/deps/couchbase-cxx-client/core/timeout_defaults.hxx +4 -0
  59. package/deps/couchbase-cxx-client/core/topology/configuration.cxx +10 -13
  60. package/deps/couchbase-cxx-client/core/topology/configuration.hxx +14 -15
  61. package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +6 -0
  62. package/deps/couchbase-cxx-client/core/transactions/async_attempt_context.hxx +22 -2
  63. package/deps/couchbase-cxx-client/core/transactions/attempt_context.hxx +25 -7
  64. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +688 -238
  65. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +91 -12
  66. package/deps/couchbase-cxx-client/core/transactions/exceptions.cxx +5 -0
  67. package/deps/couchbase-cxx-client/core/transactions/exceptions.hxx +20 -0
  68. package/deps/couchbase-cxx-client/core/transactions/exceptions_fmt.hxx +3 -0
  69. package/deps/couchbase-cxx-client/core/transactions/forward_compat.cxx +71 -6
  70. package/deps/couchbase-cxx-client/core/transactions/forward_compat.hxx +45 -59
  71. package/deps/couchbase-cxx-client/core/transactions/get_multi_orchestrator.cxx +616 -0
  72. package/deps/couchbase-cxx-client/core/transactions/get_multi_orchestrator.hxx +61 -0
  73. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.cxx +8 -0
  74. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.hxx +16 -5
  75. package/deps/couchbase-cxx-client/core/transactions/internal/exceptions_internal.hxx +12 -0
  76. package/deps/couchbase-cxx-client/core/transactions/internal/transaction_context.hxx +13 -0
  77. package/deps/couchbase-cxx-client/core/transactions/internal/transaction_fields.hxx +1 -0
  78. package/deps/couchbase-cxx-client/core/transactions/staged_mutation.cxx +277 -96
  79. package/deps/couchbase-cxx-client/core/transactions/staged_mutation.hxx +28 -76
  80. package/deps/couchbase-cxx-client/core/transactions/transaction_context.cxx +33 -0
  81. package/deps/couchbase-cxx-client/core/transactions/transaction_get_multi_mode.hxx +28 -0
  82. package/deps/couchbase-cxx-client/core/transactions/transaction_get_multi_replicas_from_preferred_server_group_mode.hxx +27 -0
  83. package/deps/couchbase-cxx-client/core/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +71 -0
  84. package/deps/couchbase-cxx-client/core/transactions/transaction_get_multi_result.hxx +66 -0
  85. package/deps/couchbase-cxx-client/core/transactions/transaction_links.hxx +10 -0
  86. package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +8 -3
  87. package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +4 -0
  88. package/deps/couchbase-cxx-client/core/utils/url_codec.cxx +26 -0
  89. package/deps/couchbase-cxx-client/core/utils/url_codec.hxx +11 -0
  90. package/deps/couchbase-cxx-client/core/websocket_codec.cxx +647 -0
  91. package/deps/couchbase-cxx-client/core/websocket_codec.hxx +77 -0
  92. package/deps/couchbase-cxx-client/couchbase/analytics_options.hxx +70 -6
  93. package/deps/couchbase-cxx-client/couchbase/application_telemetry_options.hxx +124 -0
  94. package/deps/couchbase-cxx-client/couchbase/cluster_options.hxx +17 -0
  95. package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +1 -0
  96. package/deps/couchbase-cxx-client/couchbase/logger.hxx +16 -0
  97. package/deps/couchbase-cxx-client/couchbase/management/bucket_settings.hxx +1 -0
  98. package/deps/couchbase-cxx-client/couchbase/query_options.hxx +70 -6
  99. package/deps/couchbase-cxx-client/couchbase/transactions/async_attempt_context.hxx +29 -5
  100. package/deps/couchbase-cxx-client/couchbase/transactions/attempt_context.hxx +24 -7
  101. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_mode.hxx +47 -0
  102. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_options.hxx +44 -0
  103. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_mode.hxx +46 -0
  104. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_options.hxx +48 -0
  105. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +109 -0
  106. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_spec.hxx +47 -0
  107. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_result.hxx +102 -0
  108. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_get_multi_spec.hxx +45 -0
  109. package/dist/analyticsindexmanager.d.ts +1 -0
  110. package/dist/binarycollection.d.ts +1 -0
  111. package/dist/binding.d.ts +82 -38
  112. package/dist/binding.js +14 -7
  113. package/dist/bindingutilities.d.ts +16 -4
  114. package/dist/bindingutilities.js +233 -31
  115. package/dist/cluster.d.ts +39 -0
  116. package/dist/cluster.js +21 -3
  117. package/dist/collection.d.ts +20 -1
  118. package/dist/collection.js +13 -0
  119. package/dist/errorcontexts.d.ts +24 -0
  120. package/dist/errorcontexts.js +12 -6
  121. package/dist/generaltypes.d.ts +16 -0
  122. package/dist/generaltypes.js +18 -1
  123. package/dist/httpexecutor.d.ts +1 -2
  124. package/dist/httpexecutor.js +0 -9
  125. package/dist/streamablepromises.d.ts +25 -7
  126. package/dist/streamablepromises.js +32 -7
  127. package/dist/transactions.d.ts +239 -1
  128. package/dist/transactions.js +316 -2
  129. package/dist/transcoders.d.ts +1 -0
  130. package/dist/utilities.d.ts +1 -0
  131. package/package.json +24 -24
  132. package/src/connection.cpp +34 -4
  133. package/src/constants.cpp +124 -0
  134. package/src/jstocbpp_autogen.hpp +22 -8
  135. package/src/jstocbpp_transactions.hpp +76 -2
  136. package/src/transaction.cpp +101 -0
  137. package/src/transaction.hpp +5 -0
  138. package/tools/gen-bindings-js.js +2 -1
  139. package/tools/gen-bindings-json.py +28 -3
@@ -27,7 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.eventingFunctionLanguageCompatibilityFromCpp = exports.eventingFunctionLanguageCompatibilityToCpp = exports.eventingFunctionLogLevelFromCpp = exports.eventingFunctionLogLevelToCpp = exports.eventingFunctionProcessingStatusFromCpp = exports.eventingFunctionProcessingStatusToCpp = exports.eventingFunctionDeploymentStatusFromCpp = exports.eventingFunctionDeploymentStatusToCpp = exports.eventingFunctionDcpBoundaryFromCpp = exports.eventingFunctionDcpBoundaryToCpp = exports.eventingBucketBindingAccessFromCpp = exports.eventingBucketBindingAccessToCpp = exports.transactionKeyspaceToCpp = exports.designDocumentNamespaceToCpp = exports.designDocumentNamespaceFromCpp = exports.vectorQueryCombinationToCpp = exports.bucketConflictResolutionTypeFromCpp = exports.bucketConflictResolutionTypeToCpp = exports.bucketStorageBackendFromCpp = exports.bucketStorageBackendToCpp = exports.bucketEvictionPolicyFromCpp = exports.bucketEvictionPolicyToCpp = exports.bucketCompressionModeFromCpp = exports.bucketCompressionModeToCpp = exports.bucketTypeFromCpp = exports.bucketTypeToCpp = exports.scanTypeToCpp = exports.errorFromCpp = exports.contextFromCpp = exports.pingStateFromCpp = exports.txnOpExeptionFromCpp = exports.txnExternalExceptionStringFromCpp = exports.endpointStateFromCpp = exports.serviceTypeFromCpp = exports.serviceTypeToCpp = exports.mutationStateToCpp = exports.searchHighlightStyleToCpp = exports.searchScanConsistencyToCpp = exports.analyticsStatusFromCpp = exports.analyticsScanConsistencyToCpp = exports.queryProfileToCpp = exports.queryScanConsistencyFromCpp = exports.queryScanConsistencyToCpp = exports.viewOrderingToCpp = exports.viewScanConsistencyToCpp = exports.storeSemanticToCpp = exports.replicateToToCpp = exports.persistToToCpp = exports.durabilityFromCpp = exports.durabilityToCpp = void 0;
30
- exports.authDomainFromCpp = exports.authDomainToCpp = exports.encryptionSettingsFromCpp = exports.encryptionSettingsToCpp = exports.encryptionLevelToCpp = exports.couchbaseLinkEncryptionLevelFromCpp = exports.eventingFunctionStatusFromCpp = void 0;
30
+ exports.transactionGetMultiReplicasFromPreferredServerGroupModeToCpp = exports.transactionGetMultiModeToCpp = exports.readPreferenceToCpp = exports.authDomainFromCpp = exports.authDomainToCpp = exports.encryptionSettingsFromCpp = exports.encryptionSettingsToCpp = exports.encryptionLevelToCpp = exports.couchbaseLinkEncryptionLevelFromCpp = exports.eventingFunctionStatusFromCpp = void 0;
31
31
  const analyticstypes_1 = require("./analyticstypes");
32
32
  const analyticsindexmanager_1 = require("./analyticsindexmanager");
33
33
  const binding_1 = __importDefault(require("./binding"));
@@ -39,6 +39,7 @@ const generaltypes_1 = require("./generaltypes");
39
39
  const querytypes_1 = require("./querytypes");
40
40
  const rangeScan_1 = require("./rangeScan");
41
41
  const searchtypes_1 = require("./searchtypes");
42
+ const transactions_1 = require("./transactions");
42
43
  const utilities_1 = require("./utilities");
43
44
  const vectorsearch_1 = require("./vectorsearch");
44
45
  const viewtypes_1 = require("./viewtypes");
@@ -432,78 +433,93 @@ exports.endpointStateFromCpp = endpointStateFromCpp;
432
433
  * @internal
433
434
  */
434
435
  function txnExternalExceptionStringFromCpp(cause, message) {
435
- if (cause === binding_1.default.txn_external_exception.unknown) {
436
+ if (cause === binding_1.default.transactions_external_exception.UNKNOWN) {
436
437
  if (message) {
437
438
  return message;
438
439
  }
439
440
  return 'unknown';
440
441
  }
441
442
  else if (cause ===
442
- binding_1.default.txn_external_exception.active_transaction_record_entry_not_found) {
443
+ binding_1.default.transactions_external_exception
444
+ .ACTIVE_TRANSACTION_RECORD_ENTRY_NOT_FOUND) {
443
445
  return 'active_transaction_record_entry_not_found';
444
446
  }
445
- else if (cause === binding_1.default.txn_external_exception.active_transaction_record_full) {
447
+ else if (cause ===
448
+ binding_1.default.transactions_external_exception.ACTIVE_TRANSACTION_RECORD_FULL) {
446
449
  return 'active_transaction_record_full';
447
450
  }
448
- else if (cause === binding_1.default.txn_external_exception.active_transaction_record_not_found) {
451
+ else if (cause ===
452
+ binding_1.default.transactions_external_exception.ACTIVE_TRANSACTION_RECORD_NOT_FOUND) {
449
453
  return 'active_transaction_record_not_found';
450
454
  }
451
- else if (cause === binding_1.default.txn_external_exception.document_already_in_transaction) {
455
+ else if (cause ===
456
+ binding_1.default.transactions_external_exception.DOCUMENT_ALREADY_IN_TRANSACTION) {
452
457
  return 'document_already_in_transaction';
453
458
  }
454
- else if (cause === binding_1.default.txn_external_exception.document_exists_exception) {
459
+ else if (cause === binding_1.default.transactions_external_exception.DOCUMENT_EXISTS_EXCEPTION) {
455
460
  return 'document_exists_exception';
456
461
  }
457
- else if (cause === binding_1.default.txn_external_exception.document_not_found_exception) {
462
+ else if (cause ===
463
+ binding_1.default.transactions_external_exception.DOCUMENT_NOT_FOUND_EXCEPTION) {
458
464
  return 'document_not_found_exception';
459
465
  }
460
- else if (cause === binding_1.default.txn_external_exception.not_set) {
466
+ else if (cause === binding_1.default.transactions_external_exception.NOT_SET) {
461
467
  return 'not_set';
462
468
  }
463
- else if (cause === binding_1.default.txn_external_exception.feature_not_available_exception) {
469
+ else if (cause ===
470
+ binding_1.default.transactions_external_exception.FEATURE_NOT_AVAILABLE_EXCEPTION) {
464
471
  return 'feature_not_available_exception';
465
472
  }
466
- else if (cause === binding_1.default.txn_external_exception.transaction_aborted_externally) {
473
+ else if (cause ===
474
+ binding_1.default.transactions_external_exception.TRANSACTION_ABORTED_EXTERNALLY) {
467
475
  return 'transaction_aborted_externally';
468
476
  }
469
- else if (cause === binding_1.default.txn_external_exception.previous_operation_failed) {
477
+ else if (cause === binding_1.default.transactions_external_exception.PREVIOUS_OPERATION_FAILED) {
470
478
  return 'previous_operation_failed';
471
479
  }
472
- else if (cause === binding_1.default.txn_external_exception.forward_compatibility_failure) {
480
+ else if (cause ===
481
+ binding_1.default.transactions_external_exception.FORWARD_COMPATIBILITY_FAILURE) {
473
482
  return 'forward_compatibility_failure';
474
483
  }
475
- else if (cause === binding_1.default.txn_external_exception.parsing_failure) {
484
+ else if (cause === binding_1.default.transactions_external_exception.PARSING_FAILURE) {
476
485
  return 'parsing_failure';
477
486
  }
478
- else if (cause === binding_1.default.txn_external_exception.illegal_state_exception) {
487
+ else if (cause === binding_1.default.transactions_external_exception.ILLEGAL_STATE_EXCEPTION) {
479
488
  return 'illegal_state_exception';
480
489
  }
481
- else if (cause === binding_1.default.txn_external_exception.couchbase_exception) {
490
+ else if (cause === binding_1.default.transactions_external_exception.COUCHBASE_EXCEPTION) {
482
491
  return 'couchbase_exception';
483
492
  }
484
- else if (cause === binding_1.default.txn_external_exception.service_not_available_exception) {
493
+ else if (cause ===
494
+ binding_1.default.transactions_external_exception.SERVICE_NOT_AVAILABLE_EXCEPTION) {
485
495
  return 'service_not_available_exception';
486
496
  }
487
- else if (cause === binding_1.default.txn_external_exception.request_canceled_exception) {
497
+ else if (cause === binding_1.default.transactions_external_exception.REQUEST_CANCELED_EXCEPTION) {
488
498
  return 'request_canceled_exception';
489
499
  }
490
500
  else if (cause ===
491
- binding_1.default.txn_external_exception
492
- .concurrent_operations_detected_on_same_document) {
501
+ binding_1.default.transactions_external_exception
502
+ .CONCURRENT_OPERATIONS_DETECTED_ON_SAME_DOCUMENT) {
493
503
  return 'concurrent_operations_detected_on_same_document';
494
504
  }
495
- else if (cause === binding_1.default.txn_external_exception.commit_not_permitted) {
505
+ else if (cause === binding_1.default.transactions_external_exception.COMMIT_NOT_PERMITTED) {
496
506
  return 'commit_not_permitted';
497
507
  }
498
- else if (cause === binding_1.default.txn_external_exception.rollback_not_permitted) {
508
+ else if (cause === binding_1.default.transactions_external_exception.ROLLBACK_NOT_PERMITTED) {
499
509
  return 'rollback_not_permitted';
500
510
  }
501
- else if (cause === binding_1.default.txn_external_exception.transaction_already_aborted) {
511
+ else if (cause ===
512
+ binding_1.default.transactions_external_exception.TRANSACTION_ALREADY_ABORTED) {
502
513
  return 'transaction_already_aborted';
503
514
  }
504
- else if (cause === binding_1.default.txn_external_exception.transaction_already_committed) {
515
+ else if (cause ===
516
+ binding_1.default.transactions_external_exception.TRANSACTION_ALREADY_COMMITTED) {
505
517
  return 'transaction_already_committed';
506
518
  }
519
+ else if (cause ===
520
+ binding_1.default.transactions_external_exception.DOCUMENT_UNRETRIEVABLE_EXCEPTION) {
521
+ return 'document_unretrievable_exception';
522
+ }
507
523
  return 'unknown';
508
524
  }
509
525
  exports.txnExternalExceptionStringFromCpp = txnExternalExceptionStringFromCpp;
@@ -515,19 +531,25 @@ function txnOpExeptionFromCpp(err, ctx) {
515
531
  return null;
516
532
  }
517
533
  const context = ctx ? ctx : undefined;
518
- if (err.cause === binding_1.default.txn_external_exception.document_exists_exception) {
534
+ if (err.cause ===
535
+ binding_1.default.transactions_external_exception.DOCUMENT_EXISTS_EXCEPTION) {
519
536
  return new errs.DocumentExistsError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)), context);
520
537
  }
521
- else if (err.cause === binding_1.default.txn_external_exception.document_not_found_exception) {
538
+ else if (err.cause ===
539
+ binding_1.default.transactions_external_exception.DOCUMENT_NOT_FOUND_EXCEPTION) {
522
540
  return new errs.DocumentNotFoundError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)), context);
523
541
  }
524
- else if (err.cause === binding_1.default.txn_external_exception.parsing_failure) {
542
+ else if (err.cause === binding_1.default.transactions_external_exception.PARSING_FAILURE) {
525
543
  return new errs.ParsingFailureError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)), context);
526
544
  }
527
- else if (err.cause === binding_1.default.txn_external_exception.couchbase_exception) {
545
+ else if (err.cause === binding_1.default.transactions_external_exception.COUCHBASE_EXCEPTION) {
528
546
  const cause = txnExternalExceptionStringFromCpp(err.cause, err.message);
529
547
  return new errs.CouchbaseError(cause, new Error(cause), context);
530
548
  }
549
+ else if (err.cause ===
550
+ binding_1.default.transactions_external_exception.DOCUMENT_UNRETRIEVABLE_EXCEPTION) {
551
+ return new errs.DocumentUnretrievableError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)), context);
552
+ }
531
553
  return err;
532
554
  }
533
555
  exports.txnOpExeptionFromCpp = txnOpExeptionFromCpp;
@@ -554,6 +576,10 @@ function contextFromCpp(err) {
554
576
  if (!err) {
555
577
  return null;
556
578
  }
579
+ let retry_reasons = [];
580
+ if ('retry_reasons' in err) {
581
+ retry_reasons = err.retry_reasons.map(retryReasonFromCpp);
582
+ }
557
583
  let context = null;
558
584
  if (err.ctxtype === 'key_value') {
559
585
  context = new errctxs.KeyValueErrorContext({
@@ -566,6 +592,12 @@ function contextFromCpp(err) {
566
592
  scope: err.id ? err.id.scope : '',
567
593
  context: err.enhanced_error_info ? err.enhanced_error_info.context : '',
568
594
  ref: err.enhanced_error_info ? err.enhanced_error_info.reference : '',
595
+ last_dispatched_from: err.last_dispatched_from
596
+ ? err.last_dispatched_from
597
+ : '',
598
+ last_dispatched_to: err.last_dispatched_to ? err.last_dispatched_to : '',
599
+ retry_attempts: err.retry_attempts ? err.retry_attempts : 0,
600
+ retry_reasons: retry_reasons,
569
601
  });
570
602
  }
571
603
  else if (err.ctxtype === 'view') {
@@ -575,6 +607,12 @@ function contextFromCpp(err) {
575
607
  parameters: err.query_string,
576
608
  http_response_code: err.http_status,
577
609
  http_response_body: err.http_body,
610
+ last_dispatched_from: err.last_dispatched_from
611
+ ? err.last_dispatched_from
612
+ : '',
613
+ last_dispatched_to: err.last_dispatched_to ? err.last_dispatched_to : '',
614
+ retry_attempts: err.retry_attempts ? err.retry_attempts : 0,
615
+ retry_reasons: retry_reasons,
578
616
  });
579
617
  }
580
618
  else if (err.ctxtype === 'query') {
@@ -584,6 +622,12 @@ function contextFromCpp(err) {
584
622
  parameters: err.parameters,
585
623
  http_response_code: err.http_status,
586
624
  http_response_body: err.http_body,
625
+ last_dispatched_from: err.last_dispatched_from
626
+ ? err.last_dispatched_from
627
+ : '',
628
+ last_dispatched_to: err.last_dispatched_to ? err.last_dispatched_to : '',
629
+ retry_attempts: err.retry_attempts ? err.retry_attempts : 0,
630
+ retry_reasons: retry_reasons,
587
631
  });
588
632
  }
589
633
  else if (err.ctxtype === 'search') {
@@ -593,6 +637,12 @@ function contextFromCpp(err) {
593
637
  parameters: err.parameters,
594
638
  http_response_code: err.http_status,
595
639
  http_response_body: err.http_body,
640
+ last_dispatched_from: err.last_dispatched_from
641
+ ? err.last_dispatched_from
642
+ : '',
643
+ last_dispatched_to: err.last_dispatched_to ? err.last_dispatched_to : '',
644
+ retry_attempts: err.retry_attempts ? err.retry_attempts : 0,
645
+ retry_reasons: retry_reasons,
596
646
  });
597
647
  }
598
648
  else if (err.ctxtype === 'analytics') {
@@ -602,6 +652,12 @@ function contextFromCpp(err) {
602
652
  parameters: err.parameters,
603
653
  http_response_code: err.http_status,
604
654
  http_response_body: err.http_body,
655
+ last_dispatched_from: err.last_dispatched_from
656
+ ? err.last_dispatched_from
657
+ : '',
658
+ last_dispatched_to: err.last_dispatched_to ? err.last_dispatched_to : '',
659
+ retry_attempts: err.retry_attempts ? err.retry_attempts : 0,
660
+ retry_reasons: retry_reasons,
605
661
  });
606
662
  }
607
663
  else if (err.ctxtype === 'http') {
@@ -610,11 +666,88 @@ function contextFromCpp(err) {
610
666
  request_path: err.path,
611
667
  response_code: err.http_status,
612
668
  response_body: err.http_body,
669
+ last_dispatched_from: err.last_dispatched_from
670
+ ? err.last_dispatched_from
671
+ : '',
672
+ last_dispatched_to: err.last_dispatched_to ? err.last_dispatched_to : '',
673
+ retry_attempts: err.retry_attempts ? err.retry_attempts : 0,
674
+ retry_reasons: retry_reasons,
613
675
  });
614
676
  }
615
677
  return context;
616
678
  }
617
679
  exports.contextFromCpp = contextFromCpp;
680
+ /**
681
+ * @internal
682
+ */
683
+ function retryReasonFromCpp(reason) {
684
+ if (reason === binding_1.default.retry_reason.do_not_retry) {
685
+ return 'do_not_retry';
686
+ }
687
+ else if (reason === binding_1.default.retry_reason.unknown) {
688
+ return 'unknown';
689
+ }
690
+ else if (reason === binding_1.default.retry_reason.socket_not_available) {
691
+ return 'socket_not_available';
692
+ }
693
+ else if (reason === binding_1.default.retry_reason.service_not_available) {
694
+ return 'service_not_available';
695
+ }
696
+ else if (reason === binding_1.default.retry_reason.node_not_available) {
697
+ return 'node_not_available';
698
+ }
699
+ else if (reason === binding_1.default.retry_reason.key_value_not_my_vbucket) {
700
+ return 'key_value_not_my_vbucket';
701
+ }
702
+ else if (reason === binding_1.default.retry_reason.key_value_collection_outdated) {
703
+ return 'key_value_collection_outdated';
704
+ }
705
+ else if (reason === binding_1.default.retry_reason.key_value_error_map_retry_indicated) {
706
+ return 'key_value_error_map_retry_indicated';
707
+ }
708
+ else if (reason === binding_1.default.retry_reason.key_value_locked) {
709
+ return 'key_value_locked';
710
+ }
711
+ else if (reason === binding_1.default.retry_reason.key_value_temporary_failure) {
712
+ return 'key_value_temporary_failure';
713
+ }
714
+ else if (reason === binding_1.default.retry_reason.key_value_sync_write_in_progress) {
715
+ return 'key_value_sync_write_in_progress';
716
+ }
717
+ else if (reason === binding_1.default.retry_reason.key_value_sync_write_re_commit_in_progress) {
718
+ return 'key_value_sync_write_re_commit_in_progress';
719
+ }
720
+ else if (reason === binding_1.default.retry_reason.service_response_code_indicated) {
721
+ return 'service_response_code_indicated';
722
+ }
723
+ else if (reason === binding_1.default.retry_reason.socket_closed_while_in_flight) {
724
+ return 'socket_closed_while_in_flight';
725
+ }
726
+ else if (reason === binding_1.default.retry_reason.circuit_breaker_open) {
727
+ return 'circuit_breaker_open';
728
+ }
729
+ else if (reason === binding_1.default.retry_reason.query_prepared_statement_failure) {
730
+ return 'query_prepared_statement_failure';
731
+ }
732
+ else if (reason === binding_1.default.retry_reason.query_index_not_found) {
733
+ return 'query_index_not_found';
734
+ }
735
+ else if (reason === binding_1.default.retry_reason.analytics_temporary_failure) {
736
+ return 'analytics_temporary_failure';
737
+ }
738
+ else if (reason === binding_1.default.retry_reason.search_too_many_requests) {
739
+ return 'search_too_many_requests';
740
+ }
741
+ else if (reason === binding_1.default.retry_reason.views_temporary_failure) {
742
+ return 'views_temporary_failure';
743
+ }
744
+ else if (reason === binding_1.default.retry_reason.views_no_active_partition) {
745
+ return 'views_no_active_partition';
746
+ }
747
+ else {
748
+ return 'unknown';
749
+ }
750
+ }
618
751
  /**
619
752
  * @internal
620
753
  */
@@ -640,13 +773,13 @@ function errorFromCpp(err) {
640
773
  return txnOpExeptionFromCpp(err, txnContext);
641
774
  }
642
775
  else if (err.ctxtype === 'transaction_exception') {
643
- if (err.type === binding_1.default.txn_failure_type.fail) {
776
+ if (err.type === binding_1.default.transactions_failure_type.FAIL) {
644
777
  return new errs.TransactionFailedError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
645
778
  }
646
- else if (err.type === binding_1.default.txn_failure_type.expiry) {
779
+ else if (err.type === binding_1.default.transactions_failure_type.EXPIRY) {
647
780
  return new errs.TransactionExpiredError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
648
781
  }
649
- else if (err.type === binding_1.default.txn_failure_type.commit_ambiguous) {
782
+ else if (err.type === binding_1.default.transactions_failure_type.COMMIT_AMBIGUOUS) {
650
783
  return new errs.TransactionCommitAmbiguousError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
651
784
  }
652
785
  return new errs.TransactionFailedError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
@@ -654,6 +787,9 @@ function errorFromCpp(err) {
654
787
  const baseErr = err;
655
788
  const contextOrNull = contextFromCpp(err);
656
789
  const context = contextOrNull ? contextOrNull : undefined;
790
+ if ('retry_reasons' in baseErr && Array.isArray(baseErr.retry_reasons)) {
791
+ baseErr.retry_reasons = baseErr.retry_reasons.map(retryReasonFromCpp);
792
+ }
657
793
  switch (err.code) {
658
794
  case binding_1.default.errc_common.request_canceled:
659
795
  return new errs.RequestCanceledError(baseErr, context);
@@ -1431,3 +1567,69 @@ function authDomainFromCpp(domain) {
1431
1567
  throw new errs.InvalidArgumentError(new Error('Unrecognized CppManagementRbacAuthDomain.'));
1432
1568
  }
1433
1569
  exports.authDomainFromCpp = authDomainFromCpp;
1570
+ /**
1571
+ * @internal
1572
+ */
1573
+ function readPreferenceToCpp(preference) {
1574
+ // Unspecified is allowed, and means no preference.
1575
+ if (preference === null || preference === undefined) {
1576
+ return binding_1.default.read_preference.no_preference;
1577
+ }
1578
+ if (preference === generaltypes_1.ReadPreference.NoPreference) {
1579
+ return binding_1.default.read_preference.no_preference;
1580
+ }
1581
+ else if (preference === generaltypes_1.ReadPreference.SelectedServerGroup) {
1582
+ return binding_1.default.read_preference.selected_server_group;
1583
+ }
1584
+ throw new errs.InvalidArgumentError(new Error('Unrecognized ReadPreference.'));
1585
+ }
1586
+ exports.readPreferenceToCpp = readPreferenceToCpp;
1587
+ /**
1588
+ * @internal
1589
+ */
1590
+ function transactionGetMultiModeToCpp(mode) {
1591
+ if (mode === null || mode === undefined) {
1592
+ return undefined;
1593
+ }
1594
+ if (mode === transactions_1.TransactionGetMultiMode.PrioritiseLatency) {
1595
+ return binding_1.default.transactions_transaction_get_multi_mode.prioritise_latency;
1596
+ }
1597
+ else if (mode === transactions_1.TransactionGetMultiMode.DisableReadSkewDetection) {
1598
+ return binding_1.default.transactions_transaction_get_multi_mode
1599
+ .disable_read_skew_detection;
1600
+ }
1601
+ else if (mode === transactions_1.TransactionGetMultiMode.PrioritiseReadSkewDetection) {
1602
+ return binding_1.default.transactions_transaction_get_multi_mode
1603
+ .prioritise_read_skew_detection;
1604
+ }
1605
+ throw new errs.InvalidArgumentError(new Error('Unrecognized TransactionGetMultiMode.'));
1606
+ }
1607
+ exports.transactionGetMultiModeToCpp = transactionGetMultiModeToCpp;
1608
+ /**
1609
+ * @internal
1610
+ */
1611
+ function transactionGetMultiReplicasFromPreferredServerGroupModeToCpp(mode) {
1612
+ if (mode === null || mode === undefined) {
1613
+ return undefined;
1614
+ }
1615
+ if (mode ===
1616
+ transactions_1.TransactionGetMultiReplicasFromPreferredServerGroupMode.PrioritiseLatency) {
1617
+ return binding_1.default
1618
+ .transactions_transaction_get_multi_replicas_from_preferred_server_group_mode
1619
+ .prioritise_latency;
1620
+ }
1621
+ else if (mode ===
1622
+ transactions_1.TransactionGetMultiReplicasFromPreferredServerGroupMode.DisableReadSkewDetection) {
1623
+ return binding_1.default
1624
+ .transactions_transaction_get_multi_replicas_from_preferred_server_group_mode
1625
+ .disable_read_skew_detection;
1626
+ }
1627
+ else if (mode ===
1628
+ transactions_1.TransactionGetMultiReplicasFromPreferredServerGroupMode.PrioritiseReadSkewDetection) {
1629
+ return binding_1.default
1630
+ .transactions_transaction_get_multi_replicas_from_preferred_server_group_mode
1631
+ .prioritise_read_skew_detection;
1632
+ }
1633
+ throw new errs.InvalidArgumentError(new Error('Unrecognized TransactionGetMultiReplicasFromPreferredServerGroupMode.'));
1634
+ }
1635
+ exports.transactionGetMultiReplicasFromPreferredServerGroupModeToCpp = transactionGetMultiReplicasFromPreferredServerGroupModeToCpp;
package/dist/cluster.d.ts CHANGED
@@ -98,6 +98,33 @@ export interface DnsConfig {
98
98
  */
99
99
  dnsSrvTimeout?: number;
100
100
  }
101
+ /**
102
+ * Specifies Application Telemetry options for the client.
103
+ *
104
+ * @category Core
105
+ */
106
+ export interface AppTelemetryConfig {
107
+ /**
108
+ * Specifies if application telemetry feature should be enabled or not.
109
+ */
110
+ enabled?: boolean;
111
+ /**
112
+ * Specifies an endpoint to override the application metrics endpoint discovered during configuration.
113
+ */
114
+ endpoint?: string;
115
+ /**
116
+ * Specifies the time to wait before attempting a websocket reconnection, specified in millseconds.
117
+ */
118
+ backoff?: number;
119
+ /**
120
+ * Specifies the time to wait between sending consecutive websocket PING commands to the server, specified in millseconds.
121
+ */
122
+ pingInterval?: number;
123
+ /**
124
+ * Specifies the time allowed for the server to respond to websocket PING command, specified in millseconds.
125
+ */
126
+ pingTimeout?: number;
127
+ }
101
128
  /**
102
129
  * Specifies the options which can be specified when connecting
103
130
  * to a cluster.
@@ -150,6 +177,16 @@ export interface ConnectOptions {
150
177
  *
151
178
  */
152
179
  configProfile?: string;
180
+ /**
181
+ * Specifies the preferred server group to use for replica operations that specify a non-default
182
+ * read preference.
183
+ */
184
+ preferredServerGroup?: string;
185
+ /**
186
+ * Specifies the Application Telemetry config for connections of this cluster.
187
+ *
188
+ */
189
+ appTelemetryConfig?: AppTelemetryConfig;
153
190
  }
154
191
  /**
155
192
  * Exposes the operations which are available to be performed against a cluster.
@@ -178,6 +215,8 @@ export declare class Cluster {
178
215
  private _transactions?;
179
216
  private _openBuckets;
180
217
  private _dnsConfig;
218
+ private _preferredServerGroup;
219
+ private _appTelemetryConfig;
181
220
  /**
182
221
  * @internal
183
222
  */
package/dist/cluster.js CHANGED
@@ -110,7 +110,7 @@ class Cluster {
110
110
  [util_1.inspect.custom]() {
111
111
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
112
  const { _auth, ...rest } = this;
113
- return { ...rest, _auth: "***hidden***" };
113
+ return { ...rest, _auth: '***hidden***' };
114
114
  }
115
115
  /**
116
116
  * @internal
@@ -118,7 +118,7 @@ class Cluster {
118
118
  toJSON() {
119
119
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
120
120
  const { _auth, ...rest } = this;
121
- return { ...rest, _auth: "***hidden***" };
121
+ return { ...rest, _auth: '***hidden***' };
122
122
  }
123
123
  /**
124
124
  @internal
@@ -156,6 +156,9 @@ class Cluster {
156
156
  else {
157
157
  this._transcoder = new transcoders_1.DefaultTranscoder();
158
158
  }
159
+ if (options.preferredServerGroup) {
160
+ this._preferredServerGroup = options.preferredServerGroup;
161
+ }
159
162
  if (options.transactions) {
160
163
  this._txnConfig = options.transactions;
161
164
  }
@@ -193,6 +196,18 @@ class Cluster {
193
196
  else {
194
197
  this._dnsConfig = null;
195
198
  }
199
+ if (options.appTelemetryConfig) {
200
+ this._appTelemetryConfig = {
201
+ enabled: options.appTelemetryConfig.enabled,
202
+ endpoint: options.appTelemetryConfig.endpoint,
203
+ backoff: options.appTelemetryConfig.backoff,
204
+ pingInterval: options.appTelemetryConfig.pingInterval,
205
+ pingTimeout: options.appTelemetryConfig.pingTimeout,
206
+ };
207
+ }
208
+ else {
209
+ this._appTelemetryConfig = null;
210
+ }
196
211
  this._openBuckets = [];
197
212
  this._conn = new binding_1.default.Connection();
198
213
  }
@@ -433,6 +448,9 @@ class Cluster {
433
448
  if (this.resolveTimeout) {
434
449
  dsnObj.options['resolve_timeout'] = this.resolveTimeout.toString();
435
450
  }
451
+ if (this._preferredServerGroup) {
452
+ dsnObj.options['server_group'] = this._preferredServerGroup;
453
+ }
436
454
  const connStr = dsnObj.toString();
437
455
  const authOpts = {};
438
456
  // lets allow `allowed_sasl_mechanisms` to override legacy connstr option
@@ -463,7 +481,7 @@ class Cluster {
463
481
  authOpts.key_path = certAuth.keyPath;
464
482
  }
465
483
  }
466
- this._conn.connect(connStr, authOpts, this._dnsConfig, (cppErr) => {
484
+ this._conn.connect(connStr, authOpts, this._dnsConfig, this._appTelemetryConfig, (cppErr) => {
467
485
  if (cppErr) {
468
486
  const err = (0, bindingutilities_1.errorFromCpp)(cppErr);
469
487
  return reject(err);
@@ -1,10 +1,11 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { IncrementOptions, DecrementOptions, AppendOptions, PrependOptions, BinaryCollection } from './binarycollection';
3
4
  import { CppDocumentId, CppConnection, CppScanIterator, CppRangeScanOrchestratorOptions } from './binding';
4
5
  import { Cluster } from './cluster';
5
6
  import { CounterResult, ExistsResult, GetReplicaResult, GetResult, LookupInResult, LookupInReplicaResult, MutateInResult, MutationResult, ScanResult } from './crudoptypes';
6
7
  import { CouchbaseList, CouchbaseMap, CouchbaseQueue, CouchbaseSet } from './datastructures';
7
- import { DurabilityLevel, StoreSemantics } from './generaltypes';
8
+ import { DurabilityLevel, ReadPreference, StoreSemantics } from './generaltypes';
8
9
  import { MutationState } from './mutationstate';
9
10
  import { CollectionQueryIndexManager } from './queryindexmanager';
10
11
  import { RangeScan, SamplingScan, PrefixScan } from './rangeScan';
@@ -200,6 +201,10 @@ export interface GetAnyReplicaOptions {
200
201
  * The timeout for this operation, represented in milliseconds.
201
202
  */
202
203
  timeout?: number;
204
+ /**
205
+ * Specifies how replica nodes will be filtered.
206
+ */
207
+ readPreference?: ReadPreference;
203
208
  }
204
209
  /**
205
210
  * @category Key-Value
@@ -213,6 +218,10 @@ export interface GetAllReplicasOptions {
213
218
  * The timeout for this operation, represented in milliseconds.
214
219
  */
215
220
  timeout?: number;
221
+ /**
222
+ * Specifies how replica nodes will be filtered.
223
+ */
224
+ readPreference?: ReadPreference;
216
225
  }
217
226
  /**
218
227
  * @category Key-Value
@@ -285,6 +294,10 @@ export interface LookupInAnyReplicaOptions {
285
294
  * The timeout for this operation, represented in milliseconds.
286
295
  */
287
296
  timeout?: number;
297
+ /**
298
+ * Specifies how replica nodes will be filtered.
299
+ */
300
+ readPreference?: ReadPreference;
288
301
  }
289
302
  /**
290
303
  * @category Key-Value
@@ -294,6 +307,10 @@ export interface LookupInAllReplicasOptions {
294
307
  * The timeout for this operation, represented in milliseconds.
295
308
  */
296
309
  timeout?: number;
310
+ /**
311
+ * Specifies how replica nodes will be filtered.
312
+ */
313
+ readPreference?: ReadPreference;
297
314
  }
298
315
  /**
299
316
  * @category Key-Value
@@ -469,6 +486,7 @@ export declare class Collection {
469
486
  _getReplica(key: string, getAllReplicas: boolean, options?: {
470
487
  transcoder?: Transcoder;
471
488
  timeout?: number;
489
+ readPreference?: ReadPreference;
472
490
  }, callback?: NodeCallback<GetReplicaResult[]>): StreamableReplicasPromise<GetReplicaResult[], GetReplicaResult>;
473
491
  /**
474
492
  * Retrieves the value of the document from any of the available replicas. This
@@ -596,6 +614,7 @@ export declare class Collection {
596
614
  */
597
615
  _lookupInReplica(key: string, lookupInAllReplicas: boolean, specs: LookupInSpec[], options?: {
598
616
  timeout?: number;
617
+ readPreference?: ReadPreference;
599
618
  }, callback?: NodeCallback<LookupInReplicaResult[]>): StreamableReplicasPromise<LookupInReplicaResult[], LookupInReplicaResult>;
600
619
  /**
601
620
  * Performs a lookup-in operation against a document, fetching individual fields or