couchbase 4.4.6-dev.1 → 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 +85 -38
  112. package/dist/binding.js +14 -7
  113. package/dist/bindingutilities.d.ts +16 -4
  114. package/dist/bindingutilities.js +248 -43
  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 +318 -1
  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 +83 -7
  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");
@@ -431,77 +432,95 @@ exports.endpointStateFromCpp = endpointStateFromCpp;
431
432
  /**
432
433
  * @internal
433
434
  */
434
- function txnExternalExceptionStringFromCpp(cause) {
435
- if (cause === binding_1.default.txn_external_exception.unknown) {
435
+ function txnExternalExceptionStringFromCpp(cause, message) {
436
+ if (cause === binding_1.default.transactions_external_exception.UNKNOWN) {
437
+ if (message) {
438
+ return message;
439
+ }
436
440
  return 'unknown';
437
441
  }
438
442
  else if (cause ===
439
- 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) {
440
445
  return 'active_transaction_record_entry_not_found';
441
446
  }
442
- 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) {
443
449
  return 'active_transaction_record_full';
444
450
  }
445
- 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) {
446
453
  return 'active_transaction_record_not_found';
447
454
  }
448
- 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) {
449
457
  return 'document_already_in_transaction';
450
458
  }
451
- 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) {
452
460
  return 'document_exists_exception';
453
461
  }
454
- 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) {
455
464
  return 'document_not_found_exception';
456
465
  }
457
- else if (cause === binding_1.default.txn_external_exception.not_set) {
466
+ else if (cause === binding_1.default.transactions_external_exception.NOT_SET) {
458
467
  return 'not_set';
459
468
  }
460
- 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) {
461
471
  return 'feature_not_available_exception';
462
472
  }
463
- 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) {
464
475
  return 'transaction_aborted_externally';
465
476
  }
466
- 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) {
467
478
  return 'previous_operation_failed';
468
479
  }
469
- 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) {
470
482
  return 'forward_compatibility_failure';
471
483
  }
472
- else if (cause === binding_1.default.txn_external_exception.parsing_failure) {
484
+ else if (cause === binding_1.default.transactions_external_exception.PARSING_FAILURE) {
473
485
  return 'parsing_failure';
474
486
  }
475
- 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) {
476
488
  return 'illegal_state_exception';
477
489
  }
478
- else if (cause === binding_1.default.txn_external_exception.couchbase_exception) {
490
+ else if (cause === binding_1.default.transactions_external_exception.COUCHBASE_EXCEPTION) {
479
491
  return 'couchbase_exception';
480
492
  }
481
- 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) {
482
495
  return 'service_not_available_exception';
483
496
  }
484
- 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) {
485
498
  return 'request_canceled_exception';
486
499
  }
487
500
  else if (cause ===
488
- binding_1.default.txn_external_exception
489
- .concurrent_operations_detected_on_same_document) {
501
+ binding_1.default.transactions_external_exception
502
+ .CONCURRENT_OPERATIONS_DETECTED_ON_SAME_DOCUMENT) {
490
503
  return 'concurrent_operations_detected_on_same_document';
491
504
  }
492
- 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) {
493
506
  return 'commit_not_permitted';
494
507
  }
495
- 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) {
496
509
  return 'rollback_not_permitted';
497
510
  }
498
- 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) {
499
513
  return 'transaction_already_aborted';
500
514
  }
501
- 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) {
502
517
  return 'transaction_already_committed';
503
518
  }
504
- throw new errs.InvalidArgumentError();
519
+ else if (cause ===
520
+ binding_1.default.transactions_external_exception.DOCUMENT_UNRETRIEVABLE_EXCEPTION) {
521
+ return 'document_unretrievable_exception';
522
+ }
523
+ return 'unknown';
505
524
  }
506
525
  exports.txnExternalExceptionStringFromCpp = txnExternalExceptionStringFromCpp;
507
526
  /**
@@ -512,19 +531,25 @@ function txnOpExeptionFromCpp(err, ctx) {
512
531
  return null;
513
532
  }
514
533
  const context = ctx ? ctx : undefined;
515
- if (err.cause === binding_1.default.txn_external_exception.document_exists_exception) {
516
- return new errs.DocumentExistsError(new Error(txnExternalExceptionStringFromCpp(err.cause)), context);
534
+ if (err.cause ===
535
+ binding_1.default.transactions_external_exception.DOCUMENT_EXISTS_EXCEPTION) {
536
+ return new errs.DocumentExistsError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)), context);
517
537
  }
518
- else if (err.cause === binding_1.default.txn_external_exception.document_not_found_exception) {
519
- return new errs.DocumentNotFoundError(new Error(txnExternalExceptionStringFromCpp(err.cause)), context);
538
+ else if (err.cause ===
539
+ binding_1.default.transactions_external_exception.DOCUMENT_NOT_FOUND_EXCEPTION) {
540
+ return new errs.DocumentNotFoundError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)), context);
520
541
  }
521
- else if (err.cause === binding_1.default.txn_external_exception.parsing_failure) {
522
- return new errs.ParsingFailureError(new Error(txnExternalExceptionStringFromCpp(err.cause)), context);
542
+ else if (err.cause === binding_1.default.transactions_external_exception.PARSING_FAILURE) {
543
+ return new errs.ParsingFailureError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)), context);
523
544
  }
524
- else if (err.cause === binding_1.default.txn_external_exception.couchbase_exception) {
525
- const cause = txnExternalExceptionStringFromCpp(err.cause);
545
+ else if (err.cause === binding_1.default.transactions_external_exception.COUCHBASE_EXCEPTION) {
546
+ const cause = txnExternalExceptionStringFromCpp(err.cause, err.message);
526
547
  return new errs.CouchbaseError(cause, new Error(cause), context);
527
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
+ }
528
553
  return err;
529
554
  }
530
555
  exports.txnOpExeptionFromCpp = txnOpExeptionFromCpp;
@@ -551,6 +576,10 @@ function contextFromCpp(err) {
551
576
  if (!err) {
552
577
  return null;
553
578
  }
579
+ let retry_reasons = [];
580
+ if ('retry_reasons' in err) {
581
+ retry_reasons = err.retry_reasons.map(retryReasonFromCpp);
582
+ }
554
583
  let context = null;
555
584
  if (err.ctxtype === 'key_value') {
556
585
  context = new errctxs.KeyValueErrorContext({
@@ -563,6 +592,12 @@ function contextFromCpp(err) {
563
592
  scope: err.id ? err.id.scope : '',
564
593
  context: err.enhanced_error_info ? err.enhanced_error_info.context : '',
565
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,
566
601
  });
567
602
  }
568
603
  else if (err.ctxtype === 'view') {
@@ -572,6 +607,12 @@ function contextFromCpp(err) {
572
607
  parameters: err.query_string,
573
608
  http_response_code: err.http_status,
574
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,
575
616
  });
576
617
  }
577
618
  else if (err.ctxtype === 'query') {
@@ -581,6 +622,12 @@ function contextFromCpp(err) {
581
622
  parameters: err.parameters,
582
623
  http_response_code: err.http_status,
583
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,
584
631
  });
585
632
  }
586
633
  else if (err.ctxtype === 'search') {
@@ -590,6 +637,12 @@ function contextFromCpp(err) {
590
637
  parameters: err.parameters,
591
638
  http_response_code: err.http_status,
592
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,
593
646
  });
594
647
  }
595
648
  else if (err.ctxtype === 'analytics') {
@@ -599,6 +652,12 @@ function contextFromCpp(err) {
599
652
  parameters: err.parameters,
600
653
  http_response_code: err.http_status,
601
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,
602
661
  });
603
662
  }
604
663
  else if (err.ctxtype === 'http') {
@@ -607,11 +666,88 @@ function contextFromCpp(err) {
607
666
  request_path: err.path,
608
667
  response_code: err.http_status,
609
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,
610
675
  });
611
676
  }
612
677
  return context;
613
678
  }
614
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
+ }
615
751
  /**
616
752
  * @internal
617
753
  */
@@ -622,12 +758,12 @@ function errorFromCpp(err) {
622
758
  }
623
759
  // BUG(JSCBC-1010): We shouldn't need to special case these.
624
760
  if (err.ctxtype === 'transaction_operation_failed') {
625
- const cause = txnExternalExceptionStringFromCpp(err.cause);
761
+ const cause = txnExternalExceptionStringFromCpp(err.cause, err.message);
626
762
  if (cause == 'feature_not_available_exception') {
627
763
  const msg = 'Possibly attempting a binary transaction operation with a server version < 7.6.2';
628
764
  return new errs.TransactionOperationFailedError(new errs.FeatureNotAvailableError(new Error(msg)));
629
765
  }
630
- return new errs.TransactionOperationFailedError(new Error(txnExternalExceptionStringFromCpp(err.cause)));
766
+ return new errs.TransactionOperationFailedError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
631
767
  }
632
768
  else if (err.ctxtype === 'transaction_op_exception') {
633
769
  let txnContext = null;
@@ -637,20 +773,23 @@ function errorFromCpp(err) {
637
773
  return txnOpExeptionFromCpp(err, txnContext);
638
774
  }
639
775
  else if (err.ctxtype === 'transaction_exception') {
640
- if (err.type === binding_1.default.txn_failure_type.fail) {
641
- return new errs.TransactionFailedError(new Error(txnExternalExceptionStringFromCpp(err.cause)));
776
+ if (err.type === binding_1.default.transactions_failure_type.FAIL) {
777
+ return new errs.TransactionFailedError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
642
778
  }
643
- else if (err.type === binding_1.default.txn_failure_type.expiry) {
644
- return new errs.TransactionExpiredError(new Error(txnExternalExceptionStringFromCpp(err.cause)));
779
+ else if (err.type === binding_1.default.transactions_failure_type.EXPIRY) {
780
+ return new errs.TransactionExpiredError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
645
781
  }
646
- else if (err.type === binding_1.default.txn_failure_type.commit_ambiguous) {
647
- return new errs.TransactionCommitAmbiguousError(new Error(txnExternalExceptionStringFromCpp(err.cause)));
782
+ else if (err.type === binding_1.default.transactions_failure_type.COMMIT_AMBIGUOUS) {
783
+ return new errs.TransactionCommitAmbiguousError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
648
784
  }
649
- throw new errs.InvalidArgumentError();
785
+ return new errs.TransactionFailedError(new Error(txnExternalExceptionStringFromCpp(err.cause, err.message)));
650
786
  }
651
787
  const baseErr = err;
652
788
  const contextOrNull = contextFromCpp(err);
653
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
+ }
654
793
  switch (err.code) {
655
794
  case binding_1.default.errc_common.request_canceled:
656
795
  return new errs.RequestCanceledError(baseErr, context);
@@ -1428,3 +1567,69 @@ function authDomainFromCpp(domain) {
1428
1567
  throw new errs.InvalidArgumentError(new Error('Unrecognized CppManagementRbacAuthDomain.'));
1429
1568
  }
1430
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