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
@@ -296,6 +296,7 @@ struct js_to_cbpp_t<couchbase::core::management::cluster::bucket_settings> {
296
296
  js_to_cbpp<std::optional<std::uint32_t>>(
297
297
  cppObj.history_retention_duration,
298
298
  jsObj.Get("history_retention_duration"));
299
+ // num_vbuckets
299
300
  js_to_cbpp<
300
301
  couchbase::core::management::cluster::bucket_storage_backend>(
301
302
  cppObj.storage_backend, jsObj.Get("storage_backend"));
@@ -353,6 +354,7 @@ struct js_to_cbpp_t<couchbase::core::management::cluster::bucket_settings> {
353
354
  resObj.Set("history_retention_duration",
354
355
  cbpp_to_js<std::optional<std::uint32_t>>(
355
356
  env, cppObj.history_retention_duration));
357
+ // num_vbuckets
356
358
  resObj.Set(
357
359
  "storage_backend",
358
360
  cbpp_to_js<
@@ -2025,7 +2027,8 @@ struct js_to_cbpp_t<couchbase::core::operations::get_all_replicas_request> {
2025
2027
  js_to_cbpp<couchbase::core::document_id>(cppObj.id, jsObj.Get("id"));
2026
2028
  js_to_cbpp<std::optional<std::chrono::milliseconds>>(
2027
2029
  cppObj.timeout, jsObj.Get("timeout"));
2028
- // read_preference
2030
+ js_to_cbpp<couchbase::read_preference>(cppObj.read_preference,
2031
+ jsObj.Get("read_preference"));
2029
2032
  return cppObj;
2030
2033
  }
2031
2034
  static inline Napi::Value
@@ -2038,7 +2041,8 @@ struct js_to_cbpp_t<couchbase::core::operations::get_all_replicas_request> {
2038
2041
  resObj.Set("timeout",
2039
2042
  cbpp_to_js<std::optional<std::chrono::milliseconds>>(
2040
2043
  env, cppObj.timeout));
2041
- // read_preference
2044
+ resObj.Set("read_preference", cbpp_to_js<couchbase::read_preference>(
2045
+ env, cppObj.read_preference));
2042
2046
  return resObj;
2043
2047
  }
2044
2048
  };
@@ -2213,7 +2217,8 @@ struct js_to_cbpp_t<couchbase::core::operations::get_any_replica_request> {
2213
2217
  js_to_cbpp<couchbase::core::document_id>(cppObj.id, jsObj.Get("id"));
2214
2218
  js_to_cbpp<std::optional<std::chrono::milliseconds>>(
2215
2219
  cppObj.timeout, jsObj.Get("timeout"));
2216
- // read_preference
2220
+ js_to_cbpp<couchbase::read_preference>(cppObj.read_preference,
2221
+ jsObj.Get("read_preference"));
2217
2222
  return cppObj;
2218
2223
  }
2219
2224
  static inline Napi::Value
@@ -2226,7 +2231,8 @@ struct js_to_cbpp_t<couchbase::core::operations::get_any_replica_request> {
2226
2231
  resObj.Set("timeout",
2227
2232
  cbpp_to_js<std::optional<std::chrono::milliseconds>>(
2228
2233
  env, cppObj.timeout));
2229
- // read_preference
2234
+ resObj.Set("read_preference", cbpp_to_js<couchbase::read_preference>(
2235
+ env, cppObj.read_preference));
2230
2236
  return resObj;
2231
2237
  }
2232
2238
  };
@@ -3146,7 +3152,8 @@ struct js_to_cbpp_t<
3146
3152
  js_to_cbpp<std::optional<std::chrono::milliseconds>>(
3147
3153
  cppObj.timeout, jsObj.Get("timeout"));
3148
3154
  // parent_span
3149
- // read_preference
3155
+ js_to_cbpp<couchbase::read_preference>(cppObj.read_preference,
3156
+ jsObj.Get("read_preference"));
3150
3157
  return cppObj;
3151
3158
  }
3152
3159
  static inline Napi::Value
@@ -3165,7 +3172,8 @@ struct js_to_cbpp_t<
3165
3172
  cbpp_to_js<std::optional<std::chrono::milliseconds>>(
3166
3173
  env, cppObj.timeout));
3167
3174
  // parent_span
3168
- // read_preference
3175
+ resObj.Set("read_preference", cbpp_to_js<couchbase::read_preference>(
3176
+ env, cppObj.read_preference));
3169
3177
  return resObj;
3170
3178
  }
3171
3179
  };
@@ -4797,7 +4805,8 @@ struct js_to_cbpp_t<
4797
4805
  js_to_cbpp<std::optional<std::chrono::milliseconds>>(
4798
4806
  cppObj.timeout, jsObj.Get("timeout"));
4799
4807
  // parent_span
4800
- // read_preference
4808
+ js_to_cbpp<couchbase::read_preference>(cppObj.read_preference,
4809
+ jsObj.Get("read_preference"));
4801
4810
  return cppObj;
4802
4811
  }
4803
4812
  static inline Napi::Value
@@ -4816,7 +4825,8 @@ struct js_to_cbpp_t<
4816
4825
  cbpp_to_js<std::optional<std::chrono::milliseconds>>(
4817
4826
  env, cppObj.timeout));
4818
4827
  // parent_span
4819
- // read_preference
4828
+ resObj.Set("read_preference", cbpp_to_js<couchbase::read_preference>(
4829
+ env, cppObj.read_preference));
4820
4830
  return resObj;
4821
4831
  }
4822
4832
  };
@@ -4907,6 +4917,7 @@ struct js_to_cbpp_t<couchbase::core::operations::mutate_in_request> {
4907
4917
  js_to_cbpp<bool>(cppObj.access_deleted, jsObj.Get("access_deleted"));
4908
4918
  js_to_cbpp<bool>(cppObj.create_as_deleted,
4909
4919
  jsObj.Get("create_as_deleted"));
4920
+ // revive_document
4910
4921
  js_to_cbpp<std::optional<std::uint32_t>>(cppObj.expiry,
4911
4922
  jsObj.Get("expiry"));
4912
4923
  js_to_cbpp<couchbase::store_semantics>(cppObj.store_semantics,
@@ -4939,6 +4950,7 @@ struct js_to_cbpp_t<couchbase::core::operations::mutate_in_request> {
4939
4950
  cbpp_to_js<bool>(env, cppObj.access_deleted));
4940
4951
  resObj.Set("create_as_deleted",
4941
4952
  cbpp_to_js<bool>(env, cppObj.create_as_deleted));
4953
+ // revive_document
4942
4954
  resObj.Set("expiry", cbpp_to_js<std::optional<std::uint32_t>>(
4943
4955
  env, cppObj.expiry));
4944
4956
  resObj.Set("store_semantics", cbpp_to_js<couchbase::store_semantics>(
@@ -4979,6 +4991,7 @@ struct js_to_cbpp_t<
4979
4991
  js_to_cbpp<bool>(cppObj.access_deleted, jsObj.Get("access_deleted"));
4980
4992
  js_to_cbpp<bool>(cppObj.create_as_deleted,
4981
4993
  jsObj.Get("create_as_deleted"));
4994
+ // revive_document
4982
4995
  js_to_cbpp<std::optional<std::uint32_t>>(cppObj.expiry,
4983
4996
  jsObj.Get("expiry"));
4984
4997
  js_to_cbpp<couchbase::store_semantics>(cppObj.store_semantics,
@@ -5013,6 +5026,7 @@ struct js_to_cbpp_t<
5013
5026
  cbpp_to_js<bool>(env, cppObj.access_deleted));
5014
5027
  resObj.Set("create_as_deleted",
5015
5028
  cbpp_to_js<bool>(env, cppObj.create_as_deleted));
5029
+ // revive_document
5016
5030
  resObj.Set("expiry", cbpp_to_js<std::optional<std::uint32_t>>(
5017
5031
  env, cppObj.expiry));
5018
5032
  resObj.Set("store_semantics", cbpp_to_js<couchbase::store_semantics>(
@@ -8,6 +8,8 @@
8
8
  #include <core/error_context/transaction_error_context.hxx>
9
9
  #include <core/transactions.hxx>
10
10
  #include <core/transactions/internal/exceptions_internal.hxx>
11
+ #include <core/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx>
12
+ #include <core/transactions/transaction_get_multi_result.hxx>
11
13
  #include <core/utils/json.hxx>
12
14
 
13
15
  namespace cbtxns = couchbase::transactions;
@@ -263,6 +265,55 @@ struct js_to_cbpp_t<cbcoretxns::transaction_get_result> {
263
265
  }
264
266
  };
265
267
 
268
+ template <>
269
+ struct js_to_cbpp_t<cbcoretxns::transaction_get_multi_result> {
270
+ static inline cbcoretxns::transaction_get_multi_result
271
+ from_js(Napi::Value jsVal)
272
+ {
273
+ auto jsObj = jsVal.ToObject();
274
+ return cbcoretxns::transaction_get_multi_result(
275
+ js_to_cbpp<
276
+ std::vector<std::optional<couchbase::codec::encoded_value>>>(
277
+ jsObj.Get("content")));
278
+ }
279
+
280
+ static inline Napi::Value
281
+ to_js(Napi::Env env, const cbcoretxns::transaction_get_multi_result &res)
282
+ {
283
+ auto resObj = Napi::Object::New(env);
284
+ resObj.Set("content", cbpp_to_js(env, res.content()));
285
+ return resObj;
286
+ }
287
+ };
288
+
289
+ template <>
290
+ struct js_to_cbpp_t<
291
+ cbcoretxns::
292
+ transaction_get_multi_replicas_from_preferred_server_group_result> {
293
+ static inline cbcoretxns::
294
+ transaction_get_multi_replicas_from_preferred_server_group_result
295
+ from_js(Napi::Value jsVal)
296
+ {
297
+ auto jsObj = jsVal.ToObject();
298
+ return cbcoretxns::
299
+ transaction_get_multi_replicas_from_preferred_server_group_result(
300
+ js_to_cbpp<std::vector<
301
+ std::optional<couchbase::codec::encoded_value>>>(
302
+ jsObj.Get("content")));
303
+ }
304
+
305
+ static inline Napi::Value
306
+ to_js(Napi::Env env,
307
+ const cbcoretxns::
308
+ transaction_get_multi_replicas_from_preferred_server_group_result
309
+ &res)
310
+ {
311
+ auto resObj = Napi::Object::New(env);
312
+ resObj.Set("content", cbpp_to_js(env, res.content()));
313
+ return resObj;
314
+ }
315
+ };
316
+
266
317
  template <>
267
318
  struct js_to_cbpp_t<cbtxns::transaction_query_options> {
268
319
  static inline cbtxns::transaction_query_options from_js(Napi::Value jsVal)
@@ -368,12 +419,36 @@ struct js_to_cbpp_t<cbcoretxns::transaction_operation_failed> {
368
419
  to_js(Napi::Env env, const cbcoretxns::transaction_operation_failed &err)
369
420
  {
370
421
  Napi::Error jsErr = Napi::Error::New(env, "transaction_exception");
371
- jsErr.Set("ctxtype",
372
- Napi::String::New(env, "transaction_operation_failed"));
422
+
373
423
  jsErr.Set("should_not_retry", cbpp_to_js(env, !err.should_retry()));
374
424
  jsErr.Set("should_not_rollback",
375
425
  cbpp_to_js(env, !err.should_rollback()));
426
+ if (err.cause() == cbcoretxns::external_exception::UNKNOWN) {
427
+ if (err.to_raise() == cbcoretxns::final_error::EXPIRED) {
428
+ jsErr.Set("ctxtype",
429
+ Napi::String::New(env, "transaction_exception"));
430
+ jsErr.Set("type",
431
+ cbpp_to_js(env, cbcoretxns::failure_type::EXPIRY));
432
+ } else if (err.to_raise() == cbcoretxns::final_error::AMBIGUOUS) {
433
+ jsErr.Set("ctxtype",
434
+ Napi::String::New(env, "transaction_exception"));
435
+ jsErr.Set("type",
436
+ cbpp_to_js(
437
+ env, cbcoretxns::failure_type::COMMIT_AMBIGUOUS));
438
+ } else {
439
+ jsErr.Set("ctxtype", Napi::String::New(
440
+ env, "transaction_operation_failed"));
441
+ }
442
+ } else if (err.cause() == cbcoretxns::external_exception::
443
+ DOCUMENT_UNRETRIEVABLE_EXCEPTION) {
444
+ jsErr.Set("ctxtype",
445
+ Napi::String::New(env, "transaction_op_exception"));
446
+ } else {
447
+ jsErr.Set("ctxtype",
448
+ Napi::String::New(env, "transaction_operation_failed"));
449
+ }
376
450
  jsErr.Set("cause", cbpp_to_js(env, err.cause()));
451
+ jsErr.Set("message", cbpp_to_js(env, std::string(err.what())));
377
452
  return jsErr.Value();
378
453
  }
379
454
  };
@@ -436,16 +511,17 @@ struct js_to_cbpp_t<cbcoretxns::op_exception> {
436
511
  template <>
437
512
  struct js_to_cbpp_t<couchbase::core::transaction_op_error_context> {
438
513
  static inline Napi::Value
439
- to_js(Napi::Env env, const couchbase::core::transaction_op_error_context &res)
514
+ to_js(Napi::Env env,
515
+ const couchbase::core::transaction_op_error_context &res)
440
516
  {
441
517
  auto resObj = Napi::Object::New(env);
442
518
  resObj.Set("code", cbpp_to_js(env, res.ec()));
443
519
  resObj.Set(
444
520
  "cause",
445
- cbpp_to_js<
446
- std::variant<std::monostate, couchbase::core::key_value_error_context,
447
- couchbase::core::query_error_context>>(env,
448
- res.cause()));
521
+ cbpp_to_js<std::variant<std::monostate,
522
+ couchbase::core::key_value_error_context,
523
+ couchbase::core::query_error_context>>(
524
+ env, res.cause()));
449
525
  return resObj;
450
526
  }
451
527
  };
@@ -4,6 +4,8 @@
4
4
  #include "transactions.hpp"
5
5
  #include <core/transactions/internal/exceptions_internal.hxx>
6
6
  #include <core/transactions/internal/utils.hxx>
7
+ #include <core/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx>
8
+ #include <core/transactions/transaction_get_multi_result.hxx>
7
9
  #include <type_traits>
8
10
 
9
11
  namespace couchnode
@@ -39,6 +41,12 @@ void Transaction::Init(Napi::Env env, Napi::Object exports)
39
41
  {
40
42
  InstanceMethod<&Transaction::jsNewAttempt>("newAttempt"),
41
43
  InstanceMethod<&Transaction::jsGet>("get"),
44
+ InstanceMethod<&Transaction::jsGetReplicaFromPreferredServerGroup>(
45
+ "getReplicaFromPreferredServerGroup"),
46
+ InstanceMethod<&Transaction::jsGetMulti>("getMulti"),
47
+ InstanceMethod<
48
+ &Transaction::jsGetMultiReplicasFromPreferredServerGroup>(
49
+ "getMultiReplicasFromPreferredServerGroup"),
42
50
  InstanceMethod<&Transaction::jsInsert>("insert"),
43
51
  InstanceMethod<&Transaction::jsReplace>("replace"),
44
52
  InstanceMethod<&Transaction::jsRemove>("remove"),
@@ -121,6 +129,99 @@ Napi::Value Transaction::jsGet(const Napi::CallbackInfo &info)
121
129
  return info.Env().Null();
122
130
  }
123
131
 
132
+ Napi::Value Transaction::jsGetReplicaFromPreferredServerGroup(
133
+ const Napi::CallbackInfo &info)
134
+ {
135
+ auto optsJsObj = info[0].As<Napi::Object>();
136
+ auto callbackJsFn = info[1].As<Napi::Function>();
137
+ auto cookie = RefCallCookie(info.Env(), callbackJsFn, "txnGetCallback");
138
+
139
+ auto docId = jsToCbpp<couchbase::core::document_id>(optsJsObj.Get("id"));
140
+
141
+ _impl->get_replica_from_preferred_server_group(
142
+ docId,
143
+ [this, cookie = std::move(cookie)](
144
+ std::exception_ptr err,
145
+ std::optional<cbcoretxns::transaction_get_result> res) mutable {
146
+ cookie.invoke([err = std::move(err), res = std::move(res)](
147
+ Napi::Env env, Napi::Function callback) mutable {
148
+ // BUG(JSCBC-1024): We should revert to using direct get
149
+ // operations once the underlying issue has been resolved.
150
+ if (!err && !res.has_value()) {
151
+ callback.Call(
152
+ {cbpp_to_js(env, couchbase::errc::make_error_code(
153
+ couchbase::errc::key_value::
154
+ document_irretrievable))});
155
+ return;
156
+ }
157
+
158
+ callback.Call({cbpp_to_js(env, err), cbpp_to_js(env, res)});
159
+ });
160
+ });
161
+
162
+ return info.Env().Null();
163
+ }
164
+
165
+ Napi::Value Transaction::jsGetMulti(const Napi::CallbackInfo &info)
166
+ {
167
+ auto optsJsObj = info[0].As<Napi::Object>();
168
+ auto callbackJsFn = info[1].As<Napi::Function>();
169
+ auto cookie =
170
+ RefCallCookie(info.Env(), callbackJsFn, "txnGetMultiCallback");
171
+
172
+ auto docIds = jsToCbpp<std::vector<couchbase::core::document_id>>(
173
+ optsJsObj.Get("ids"));
174
+ auto mode =
175
+ jsToCbpp<cbcoretxns::transaction_get_multi_mode>(optsJsObj.Get("mode"));
176
+
177
+ _impl->get_multi(
178
+ docIds, mode,
179
+ [this, cookie = std::move(cookie)](
180
+ std::exception_ptr err,
181
+ std::optional<cbcoretxns::transaction_get_multi_result>
182
+ res) mutable {
183
+ cookie.invoke([err = std::move(err), res = std::move(res)](
184
+ Napi::Env env, Napi::Function callback) mutable {
185
+ callback.Call({cbpp_to_js(env, err), cbpp_to_js(env, res)});
186
+ });
187
+ });
188
+
189
+ return info.Env().Null();
190
+ }
191
+
192
+ Napi::Value Transaction::jsGetMultiReplicasFromPreferredServerGroup(
193
+ const Napi::CallbackInfo &info)
194
+ {
195
+ auto optsJsObj = info[0].As<Napi::Object>();
196
+ auto callbackJsFn = info[1].As<Napi::Function>();
197
+ auto cookie =
198
+ RefCallCookie(info.Env(), callbackJsFn,
199
+ "txnGetMultiReplicasFromPreferredServerGroupCallback");
200
+
201
+ auto docIds = jsToCbpp<std::vector<couchbase::core::document_id>>(
202
+ optsJsObj.Get("ids"));
203
+ auto mode = jsToCbpp<
204
+ cbcoretxns::
205
+ transaction_get_multi_replicas_from_preferred_server_group_mode>(
206
+ optsJsObj.Get("mode"));
207
+
208
+ _impl->get_multi_replicas_from_preferred_server_group(
209
+ docIds, mode,
210
+ [this, cookie = std::move(cookie)](
211
+ std::exception_ptr err,
212
+ std::optional<
213
+ cbcoretxns::
214
+ transaction_get_multi_replicas_from_preferred_server_group_result>
215
+ res) mutable {
216
+ cookie.invoke([err = std::move(err), res = std::move(res)](
217
+ Napi::Env env, Napi::Function callback) mutable {
218
+ callback.Call({cbpp_to_js(env, err), cbpp_to_js(env, res)});
219
+ });
220
+ });
221
+
222
+ return info.Env().Null();
223
+ }
224
+
124
225
  Napi::Value Transaction::jsInsert(const Napi::CallbackInfo &info)
125
226
  {
126
227
  auto optsJsObj = info[0].As<Napi::Object>();
@@ -26,6 +26,11 @@ public:
26
26
  Napi::Value jsNewAttempt(const Napi::CallbackInfo &info);
27
27
  Napi::Value jsFinalizeAttempt(const Napi::CallbackInfo &info);
28
28
  Napi::Value jsGet(const Napi::CallbackInfo &info);
29
+ Napi::Value
30
+ jsGetReplicaFromPreferredServerGroup(const Napi::CallbackInfo &info);
31
+ Napi::Value jsGetMulti(const Napi::CallbackInfo &info);
32
+ Napi::Value
33
+ jsGetMultiReplicasFromPreferredServerGroup(const Napi::CallbackInfo &info);
29
34
  Napi::Value jsInsert(const Napi::CallbackInfo &info);
30
35
  Napi::Value jsReplace(const Napi::CallbackInfo &info);
31
36
  Napi::Value jsRemove(const Napi::CallbackInfo &info);
@@ -248,7 +248,8 @@ function isIgnoredField(st, fieldName) {
248
248
  fieldName === 'parent_span' ||
249
249
  fieldName === 'retry_strategy' ||
250
250
  fieldName === 'internal' ||
251
- fieldName === 'read_preference' ||
251
+ fieldName === 'revive_document' ||
252
+ fieldName === 'num_vbuckets' ||
252
253
  (fieldName.endsWith('_') &&
253
254
  !StructsWithAllowedPrivateField.includes(st.name))
254
255
  ) {
@@ -88,6 +88,9 @@ FILE_LIST = [
88
88
  "core/range_scan_orchestrator_options.hxx",
89
89
  "core/query_context.hxx",
90
90
  "core/vector_query_combination.hxx",
91
+ "core/transactions/exceptions.hxx",
92
+ "core/transactions/transaction_get_multi_mode.hxx",
93
+ "core/transactions/transaction_get_multi_replicas_from_preferred_server_group_mode.hxx"
91
94
  ]
92
95
 
93
96
  TYPE_LIST = [
@@ -182,7 +185,11 @@ TYPE_LIST = [
182
185
  "couchbase::core::range_scan_cancel_result",
183
186
  "couchbase::core::query_context",
184
187
  "couchbase::core::vector_query_combination",
185
- "couchbase::read_preference"
188
+ "couchbase::read_preference",
189
+ "couchbase::core::transactions::failure_type",
190
+ "couchbase::core::transactions::external_exception",
191
+ "couchbase::core::transactions::transaction_get_multi_mode",
192
+ "couchbase::core::transactions::transaction_get_multi_replicas_from_preferred_server_group_mode",
186
193
  ]
187
194
 
188
195
  STD_COMPARATOR_TEMPLATES = ["std::less<{0}>", "std::greater<{0}>", "std::less_equal<{0}>", "std::greater_equal<{0}>"]
@@ -242,6 +249,20 @@ class BindingsGenerator:
242
249
  if version is None:
243
250
  raise ValueError('Missing LLVM version.')
244
251
 
252
+ print(f'Using version={version}')
253
+ llvm_root_dir = f'/opt/homebrew/Cellar/llvm/{version}'
254
+ if not os.path.exists(llvm_root_dir):
255
+ print(f'LLVM root directory ({llvm_root_dir}) does not exist. Attempting to find it.')
256
+ llvm_root_dir = None
257
+ for d in os.listdir(f'/opt/homebrew/Cellar/llvm'):
258
+ if d.startswith(version):
259
+ llvm_root_dir = os.path.join('/opt/homebrew/Cellar/llvm', d)
260
+ print(f'Found LLVM root directory: {llvm_root_dir}')
261
+ break
262
+ if llvm_root_dir is None:
263
+ raise ValueError((f'Unable to find LLVM root directory for version {version}.'
264
+ 'Please use CN_LLVM_VERSION to override.'))
265
+
245
266
  if includedir is None:
246
267
  includedir = os.environ.get('CN_LLVM_INCLUDE')
247
268
  if includedir is None:
@@ -270,7 +291,7 @@ class BindingsGenerator:
270
291
  self._include_paths = [
271
292
  '-I/opt/homebrew/opt/llvm/include/c++/v1',
272
293
  f'-I{CXX_CLIENT_ROOT}/',
273
- f'-I/opt/homebrew/Cellar/llvm/{version}/lib/clang/{version[:2]}/include',
294
+ f'-I{llvm_root_dir}/lib/clang/{version[:2]}/include',
274
295
  f'-I{system_headers}/usr/include'
275
296
  ]
276
297
 
@@ -731,12 +752,16 @@ if __name__ == '__main__':
731
752
  ap.add_argument('-s',
732
753
  '--system-headers',
733
754
  help='SET CN_SYS_HEADERS, or use command: xcrun --show-sdk-path')
755
+ ap.add_argument('--verbose',
756
+ action='store_true',
757
+ help='Run in verbose mode',)
734
758
  options = ap.parse_args()
735
759
 
736
760
  generator = BindingsGenerator(options.version,
737
761
  options.libdir,
738
762
  options.includedir,
739
- options.system_headers)
763
+ options.system_headers,
764
+ options.verbose)
740
765
  generator.gen_bindings()
741
766
 
742
767