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
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Transactions = exports.TransactionAttemptContext = exports.TransactionQueryResult = exports.TransactionGetResult = exports.TransactionResult = exports.DocumentId = void 0;
6
+ exports.Transactions = exports.TransactionAttemptContext = exports.TransactionQueryResult = exports.TransactionGetMultiReplicasFromPreferredServerGroupResult = exports.TransactionGetMultiReplicasFromPreferredServerGroupResultEntry = exports.TransactionGetMultiResult = exports.TransactionGetMultiResultEntry = exports.TransactionGetResult = exports.TransactionResult = exports.TransactionGetMultiReplicasFromPreferredServerGroupSpec = exports.TransactionGetMultiSpec = exports.TransactionGetMultiReplicasFromPreferredServerGroupMode = exports.TransactionGetMultiMode = exports.DocumentId = void 0;
7
7
  const binding_1 = __importDefault(require("./binding"));
8
8
  const bindingutilities_1 = require("./bindingutilities");
9
9
  const errors_1 = require("./errors");
@@ -24,6 +24,94 @@ class DocumentId {
24
24
  }
25
25
  }
26
26
  exports.DocumentId = DocumentId;
27
+ /**
28
+ * Represents the mode of the Transactional GetMulti operation.
29
+ *
30
+ * @category Transactions
31
+ */
32
+ var TransactionGetMultiMode;
33
+ (function (TransactionGetMultiMode) {
34
+ /**
35
+ * Indicates that the Transactional GetMulti op should prioritise latency.
36
+ */
37
+ TransactionGetMultiMode["PrioritiseLatency"] = "prioritise_latency";
38
+ /**
39
+ * Indicates that the Transactional GetMulti op should disable read skew detection.
40
+ */
41
+ TransactionGetMultiMode["DisableReadSkewDetection"] = "disable_read_skew_detection";
42
+ /**
43
+ * Indicates that the Transactional GetMulti op should prioritise read skew detection.
44
+ */
45
+ TransactionGetMultiMode["PrioritiseReadSkewDetection"] = "prioritise_read_skew_detection";
46
+ })(TransactionGetMultiMode || (exports.TransactionGetMultiMode = TransactionGetMultiMode = {}));
47
+ /**
48
+ * Represents the mode of the Transactional GetMultiReplicasFromPreferredServerGroup operation.
49
+ *
50
+ * @category Transactions
51
+ */
52
+ var TransactionGetMultiReplicasFromPreferredServerGroupMode;
53
+ (function (TransactionGetMultiReplicasFromPreferredServerGroupMode) {
54
+ /**
55
+ * Indicates that the Transactional GetMultiReplicasFromPreferredServerGroup op should prioritise latency.
56
+ */
57
+ TransactionGetMultiReplicasFromPreferredServerGroupMode["PrioritiseLatency"] = "prioritise_latency";
58
+ /**
59
+ * Indicates that the Transactional GetMultiReplicasFromPreferredServerGroup op should disable read skew detection.
60
+ */
61
+ TransactionGetMultiReplicasFromPreferredServerGroupMode["DisableReadSkewDetection"] = "disable_read_skew_detection";
62
+ /**
63
+ * Indicates that the Transactional GetMultiReplicasFromPreferredServerGroup op should prioritise read skew detection.
64
+ */
65
+ TransactionGetMultiReplicasFromPreferredServerGroupMode["PrioritiseReadSkewDetection"] = "prioritise_read_skew_detection";
66
+ })(TransactionGetMultiReplicasFromPreferredServerGroupMode || (exports.TransactionGetMultiReplicasFromPreferredServerGroupMode = TransactionGetMultiReplicasFromPreferredServerGroupMode = {}));
67
+ /**
68
+ * Represents the path to a document.
69
+ *
70
+ * @category Transactions
71
+ */
72
+ class TransactionGetMultiSpec {
73
+ constructor(collection, id, transcoder) {
74
+ this.collection = collection;
75
+ this.id = id;
76
+ this.transcoder = transcoder;
77
+ }
78
+ /**
79
+ * @internal
80
+ */
81
+ _toCppDocumentId() {
82
+ return {
83
+ bucket: this.collection.scope.bucket.name,
84
+ scope: this.collection.scope.name || '_default',
85
+ collection: this.collection.name || '_default',
86
+ key: this.id,
87
+ };
88
+ }
89
+ }
90
+ exports.TransactionGetMultiSpec = TransactionGetMultiSpec;
91
+ /**
92
+ * Represents the path to a document.
93
+ *
94
+ * @category Transactions
95
+ */
96
+ class TransactionGetMultiReplicasFromPreferredServerGroupSpec {
97
+ constructor(collection, id, transcoder) {
98
+ this.collection = collection;
99
+ this.id = id;
100
+ this.transcoder = transcoder;
101
+ }
102
+ /**
103
+ * @internal
104
+ */
105
+ _toCppDocumentId() {
106
+ return {
107
+ bucket: this.collection.scope.bucket.name,
108
+ scope: this.collection.scope.name || '_default',
109
+ collection: this.collection.name || '_default',
110
+ key: this.id,
111
+ };
112
+ }
113
+ }
114
+ exports.TransactionGetMultiReplicasFromPreferredServerGroupSpec = TransactionGetMultiReplicasFromPreferredServerGroupSpec;
27
115
  /**
28
116
  * Contains the results of a Transaction.
29
117
  *
@@ -57,6 +145,113 @@ class TransactionGetResult {
57
145
  }
58
146
  }
59
147
  exports.TransactionGetResult = TransactionGetResult;
148
+ /**
149
+ * Contains the results of a specific sub-operation within a transactional GetMulti operation.
150
+ *
151
+ * @category Transactions
152
+ */
153
+ class TransactionGetMultiResultEntry {
154
+ /**
155
+ * @internal
156
+ */
157
+ constructor(data) {
158
+ this.error = data.error || null;
159
+ this.value = data.value;
160
+ }
161
+ }
162
+ exports.TransactionGetMultiResultEntry = TransactionGetMultiResultEntry;
163
+ /**
164
+ * Contains the results of a transactional GetMulti operation.
165
+ *
166
+ * @category Transactions
167
+ */
168
+ class TransactionGetMultiResult {
169
+ /**
170
+ * @internal
171
+ */
172
+ constructor(data) {
173
+ this.content = data.content;
174
+ }
175
+ /**
176
+ * Indicates whether the document at the specified index exists.
177
+ *
178
+ * @param index The result index to check.
179
+ */
180
+ exists(index) {
181
+ if (index < 0 || index >= this.content.length) {
182
+ throw new Error(`Index (${index}) out of bounds.`);
183
+ }
184
+ return (this.content[index].error === undefined ||
185
+ this.content[index].error === null);
186
+ }
187
+ /**
188
+ * Provides the content at the specified index, if it exists.
189
+ *
190
+ * @param index The result index to check.
191
+ */
192
+ contentAt(index) {
193
+ if (!this.exists(index)) {
194
+ throw (this.content[index].error ||
195
+ new errors_1.DocumentNotFoundError(new Error(`Document does not exist at index=${index}.`)));
196
+ }
197
+ return this.content[index].value;
198
+ }
199
+ }
200
+ exports.TransactionGetMultiResult = TransactionGetMultiResult;
201
+ /**
202
+ * Contains the results of a specific sub-operation within
203
+ * a transactional GetMultiReplicasFromPreferredServerGroup operation.
204
+ *
205
+ * @category Transactions
206
+ */
207
+ class TransactionGetMultiReplicasFromPreferredServerGroupResultEntry {
208
+ /**
209
+ * @internal
210
+ */
211
+ constructor(data) {
212
+ this.error = data.error || null;
213
+ this.value = data.value;
214
+ }
215
+ }
216
+ exports.TransactionGetMultiReplicasFromPreferredServerGroupResultEntry = TransactionGetMultiReplicasFromPreferredServerGroupResultEntry;
217
+ /**
218
+ * Contains the results of a transactional GetMultiReplicasFromPreferredServerGroup operation.
219
+ *
220
+ * @category Transactions
221
+ */
222
+ class TransactionGetMultiReplicasFromPreferredServerGroupResult {
223
+ /**
224
+ * @internal
225
+ */
226
+ constructor(data) {
227
+ this.content = data.content;
228
+ }
229
+ /**
230
+ * Indicates whether the document at the specified index exists.
231
+ *
232
+ * @param index The result index to check.
233
+ */
234
+ exists(index) {
235
+ if (index < 0 || index >= this.content.length) {
236
+ throw new Error(`Index (${index}) out of bounds.`);
237
+ }
238
+ return (this.content[index].error === undefined ||
239
+ this.content[index].error === null);
240
+ }
241
+ /**
242
+ * Provides the content at the specified index, if it exists.
243
+ *
244
+ * @param index The result index to check.
245
+ */
246
+ contentAt(index) {
247
+ if (!this.exists(index)) {
248
+ throw (this.content[index].error ||
249
+ new errors_1.DocumentNotFoundError(new Error(`Document does not exist at index=${index}.`)));
250
+ }
251
+ return this.content[index].value;
252
+ }
253
+ }
254
+ exports.TransactionGetMultiReplicasFromPreferredServerGroupResult = TransactionGetMultiReplicasFromPreferredServerGroupResult;
60
255
  /**
61
256
  * Contains the results of a transactional Query operation.
62
257
  *
@@ -91,6 +286,58 @@ function translateGetResult(cppRes, transcoder) {
91
286
  _metadata: cppRes.metadata,
92
287
  });
93
288
  }
289
+ /**
290
+ * @internal
291
+ */
292
+ function translateGetMultiResult(cppRes, transcoders) {
293
+ if (!cppRes) {
294
+ return null;
295
+ }
296
+ const content = [];
297
+ for (let i = 0; i < cppRes.content.length; ++i) {
298
+ const cppEntry = cppRes.content[i];
299
+ let resultEntry, resultError;
300
+ if (cppEntry && cppEntry.data && cppEntry.data.length > 0) {
301
+ resultEntry = transcoders[i].decode(cppEntry.data, cppEntry.flags);
302
+ }
303
+ else {
304
+ resultError = new errors_1.DocumentNotFoundError(new Error(`Document not found at index=${i}.`));
305
+ }
306
+ content.push(new TransactionGetMultiResultEntry({
307
+ value: resultEntry,
308
+ error: resultError,
309
+ }));
310
+ }
311
+ return new TransactionGetMultiResult({
312
+ content,
313
+ });
314
+ }
315
+ /**
316
+ * @internal
317
+ */
318
+ function translateGetMultiReplicasFromPreferredServerGroupResult(cppRes, transcoders) {
319
+ if (!cppRes) {
320
+ return null;
321
+ }
322
+ const content = [];
323
+ for (let i = 0; i < cppRes.content.length; ++i) {
324
+ const cppEntry = cppRes.content[i];
325
+ let resultEntry, resultError;
326
+ if (cppEntry && cppEntry.data && cppEntry.data.length > 0) {
327
+ resultEntry = transcoders[i].decode(cppEntry.data, cppEntry.flags);
328
+ }
329
+ else {
330
+ resultError = new errors_1.DocumentNotFoundError(new Error(`Document not found at index=${i}.`));
331
+ }
332
+ content.push(new TransactionGetMultiReplicasFromPreferredServerGroupResultEntry({
333
+ value: resultEntry,
334
+ error: resultError,
335
+ }));
336
+ }
337
+ return new TransactionGetMultiReplicasFromPreferredServerGroupResult({
338
+ content,
339
+ });
340
+ }
94
341
  /**
95
342
  * Provides an interface to preform transactional operations in a transaction.
96
343
  *
@@ -150,6 +397,72 @@ class TransactionAttemptContext {
150
397
  });
151
398
  });
152
399
  }
400
+ /**
401
+ * Retrieves the value of a document from the collection.
402
+ *
403
+ * @param collection The collection the document lives in.
404
+ * @param key The document key to retrieve.
405
+ * @param options Optional parameters for this operation.
406
+ */
407
+ async getReplicaFromPreferredServerGroup(collection, key, options) {
408
+ const transcoder = (options === null || options === void 0 ? void 0 : options.transcoder) || this._transcoder;
409
+ return utilities_1.PromiseHelper.wrap((wrapCallback) => {
410
+ const id = collection._cppDocId(key);
411
+ this._impl.getReplicaFromPreferredServerGroup({
412
+ id,
413
+ }, (cppErr, cppRes) => {
414
+ const err = (0, bindingutilities_1.errorFromCpp)(cppErr);
415
+ if (err) {
416
+ return wrapCallback(err, null);
417
+ }
418
+ wrapCallback(err, translateGetResult(cppRes, transcoder));
419
+ });
420
+ });
421
+ }
422
+ /**
423
+ * Retrieves the documents specified in the list of specs.
424
+ *
425
+ * @param specs The documents to retrieve.
426
+ * @param options Optional parameters for this operation.
427
+ */
428
+ async getMultiReplicasFromPreferredServerGroup(specs, options) {
429
+ const ids = specs.map((spec) => spec._toCppDocumentId());
430
+ const transcoders = specs.map((spec) => spec.transcoder || this._transcoder);
431
+ return utilities_1.PromiseHelper.wrap((wrapCallback) => {
432
+ this._impl.getMultiReplicasFromPreferredServerGroup({
433
+ ids,
434
+ mode: (0, bindingutilities_1.transactionGetMultiReplicasFromPreferredServerGroupModeToCpp)(options === null || options === void 0 ? void 0 : options.mode),
435
+ }, (cppErr, cppRes) => {
436
+ const err = (0, bindingutilities_1.errorFromCpp)(cppErr);
437
+ if (err) {
438
+ return wrapCallback(err, null);
439
+ }
440
+ wrapCallback(err, translateGetMultiReplicasFromPreferredServerGroupResult(cppRes, transcoders));
441
+ });
442
+ });
443
+ }
444
+ /**
445
+ * Retrieves the documents specified in the list of specs.
446
+ *
447
+ * @param specs The documents to retrieve.
448
+ * @param options Optional parameters for this operation.
449
+ */
450
+ async getMulti(specs, options) {
451
+ const ids = specs.map((spec) => spec._toCppDocumentId());
452
+ const transcoders = specs.map((spec) => spec.transcoder || this._transcoder);
453
+ return utilities_1.PromiseHelper.wrap((wrapCallback) => {
454
+ this._impl.getMulti({
455
+ ids,
456
+ mode: (0, bindingutilities_1.transactionGetMultiModeToCpp)(options === null || options === void 0 ? void 0 : options.mode),
457
+ }, (cppErr, cppRes) => {
458
+ const err = (0, bindingutilities_1.errorFromCpp)(cppErr);
459
+ if (err) {
460
+ return wrapCallback(err, null);
461
+ }
462
+ wrapCallback(err, translateGetMultiResult(cppRes, transcoders));
463
+ });
464
+ });
465
+ }
153
466
  /**
154
467
  * Inserts a new document to the collection, failing if the document already exists.
155
468
  *
@@ -387,6 +700,10 @@ class Transactions {
387
700
  if (e instanceof errors_1.TransactionOperationFailedError) {
388
701
  throw new errors_1.TransactionFailedError(e.cause, e.context);
389
702
  }
703
+ else if (e instanceof errors_1.TransactionExpiredError ||
704
+ e instanceof errors_1.TransactionCommitAmbiguousError) {
705
+ throw e;
706
+ }
390
707
  throw new errors_1.TransactionFailedError(e);
391
708
  }
392
709
  try {
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  /**
3
4
  * Transcoders provide functionality for converting values passed to and from
4
5
  * the SDK to byte arrays and flags data that can be stored to the server.
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { DurabilityLevel } from './generaltypes';
3
4
  /**
4
5
  * CAS represents an opaque value which can be used to compare documents to
package/package.json CHANGED
@@ -20,41 +20,41 @@
20
20
  "license": "Apache-2.0",
21
21
  "name": "couchbase",
22
22
  "dependencies": {
23
- "cmake-js": "^7.3.0",
24
- "node-addon-api": "^8.0.0"
23
+ "cmake-js": "^7.3.1",
24
+ "node-addon-api": "^8.3.1"
25
25
  },
26
26
  "devDependencies": {
27
- "@trivago/prettier-plugin-sort-imports": "^4.3.0",
28
- "@tsconfig/node12": "^12.1.3",
27
+ "@trivago/prettier-plugin-sort-imports": "^5.2.2",
28
+ "@tsconfig/node12": "^12.1.4",
29
29
  "@types/bindings": "^1.5.5",
30
30
  "@types/debug": "^4.1.12",
31
- "@types/node": "^20.14.5",
31
+ "@types/node": "^22.14.1",
32
32
  "@typescript-eslint/eslint-plugin": "^7.13.1",
33
33
  "@typescript-eslint/parser": "^7.13.1",
34
- "chai": "^4.4.1",
34
+ "chai": "^4.5.0",
35
35
  "eslint": "^8.57.0",
36
36
  "eslint-config-prettier": "^9.1.0",
37
37
  "eslint-plugin-jsdoc": "^48.2.12",
38
- "eslint-plugin-mocha": "^10.4.3",
38
+ "eslint-plugin-mocha": "^10.5.0",
39
39
  "eslint-plugin-node": "^11.1.0",
40
40
  "expose-gc": "^1.0.0",
41
- "mocha": "^10.4.0",
42
- "npm-check-updates": "^16.14.20",
43
- "nyc": "^17.0.0",
44
- "prettier": "^3.3.2",
41
+ "mocha": "^11.1.0",
42
+ "npm-check-updates": "^18.0.0",
43
+ "nyc": "^17.1.0",
44
+ "prettier": "^3.5.3",
45
45
  "segfault-handler": "^1.3.0",
46
- "semver": "^7.6.2",
47
- "ts-mocha": "^10.0.0",
46
+ "semver": "^7.7.1",
47
+ "ts-mocha": "^11.1.0",
48
48
  "ts-node": "^10.9.2",
49
- "typedoc": "^0.25.13",
50
- "typescript": "^5.4.5",
51
- "uuid": "^10.0.0"
49
+ "typedoc": "^0.28.3",
50
+ "typescript": "~5.4.5",
51
+ "uuid": "^11.1.0"
52
52
  },
53
53
  "repository": {
54
54
  "type": "git",
55
55
  "url": "http://github.com/couchbase/couchnode.git"
56
56
  },
57
- "version": "4.4.6-dev.1",
57
+ "version": "4.5.0",
58
58
  "config": {
59
59
  "native": false
60
60
  },
@@ -79,13 +79,13 @@
79
79
  ]
80
80
  },
81
81
  "optionalDependencies": {
82
- "@couchbase/couchbase-darwin-arm64-napi": "4.4.6-dev.1",
83
- "@couchbase/couchbase-darwin-x64-napi": "4.4.6-dev.1",
84
- "@couchbase/couchbase-linux-arm64-napi": "4.4.6-dev.1",
85
- "@couchbase/couchbase-linuxmusl-arm64-napi": "4.4.6-dev.1",
86
- "@couchbase/couchbase-linuxmusl-x64-napi": "4.4.6-dev.1",
87
- "@couchbase/couchbase-linux-x64-napi": "4.4.6-dev.1",
88
- "@couchbase/couchbase-win32-x64-napi": "4.4.6-dev.1"
82
+ "@couchbase/couchbase-darwin-arm64-napi": "4.5.0",
83
+ "@couchbase/couchbase-darwin-x64-napi": "4.5.0",
84
+ "@couchbase/couchbase-linux-arm64-napi": "4.5.0",
85
+ "@couchbase/couchbase-linuxmusl-arm64-napi": "4.5.0",
86
+ "@couchbase/couchbase-linuxmusl-x64-napi": "4.5.0",
87
+ "@couchbase/couchbase-linux-x64-napi": "4.5.0",
88
+ "@couchbase/couchbase-win32-x64-napi": "4.5.0"
89
89
  },
90
90
  "files": [
91
91
  "LICENSE",
@@ -279,7 +279,7 @@ Napi::Value Connection::jsConnect(const Napi::CallbackInfo &info)
279
279
  {
280
280
  auto connstr = info[0].ToString().Utf8Value();
281
281
  auto credentialsJsObj = info[1].As<Napi::Object>();
282
- auto callbackJsFn = info[3].As<Napi::Function>();
282
+ auto callbackJsFn = info[4].As<Napi::Function>();
283
283
 
284
284
  auto connstrInfo = couchbase::core::utils::parse_connection_string(connstr);
285
285
  auto creds =
@@ -313,6 +313,36 @@ Napi::Value Connection::jsConnect(const Napi::CallbackInfo &info)
313
313
  connstrInfo.options.dns_config = cppDnsConfig;
314
314
  }
315
315
 
316
+ if (!info[3].IsNull()) {
317
+ auto jsAppTelemetryConfigObj = info[3].As<Napi::Object>();
318
+ auto jsEnabled = jsAppTelemetryConfigObj.Get("enabled");
319
+ if (!(jsEnabled.IsNull() || jsEnabled.IsUndefined())) {
320
+ connstrInfo.options.enable_app_telemetry =
321
+ js_to_cbpp<bool>(jsEnabled);
322
+ }
323
+ auto jsEndpoint = jsAppTelemetryConfigObj.Get("endpoint");
324
+ if (!(jsEndpoint.IsNull() || jsEndpoint.IsUndefined() ||
325
+ jsEndpoint.IsEmpty())) {
326
+ connstrInfo.options.app_telemetry_endpoint =
327
+ js_to_cbpp<std::string>(jsEndpoint);
328
+ }
329
+ auto jsBackoff = jsAppTelemetryConfigObj.Get("backoff");
330
+ if (!(jsBackoff.IsNull() || jsBackoff.IsUndefined())) {
331
+ connstrInfo.options.app_telemetry_backoff_interval =
332
+ js_to_cbpp<std::chrono::milliseconds>(jsBackoff);
333
+ }
334
+ auto jsPingInterval = jsAppTelemetryConfigObj.Get("pingInterval");
335
+ if (!(jsPingInterval.IsNull() || jsPingInterval.IsUndefined())) {
336
+ connstrInfo.options.app_telemetry_ping_interval =
337
+ js_to_cbpp<std::chrono::milliseconds>(jsPingInterval);
338
+ }
339
+ auto jsPingTimeout = jsAppTelemetryConfigObj.Get("pingTimeout");
340
+ if (!(jsPingTimeout.IsNull() || jsPingTimeout.IsUndefined())) {
341
+ connstrInfo.options.app_telemetry_ping_timeout =
342
+ js_to_cbpp<std::chrono::milliseconds>(jsPingTimeout);
343
+ }
344
+ }
345
+
316
346
  auto cookie = CallCookie(info.Env(), callbackJsFn, "cbConnectCallback");
317
347
  this->_instance->_cluster.open(
318
348
  couchbase::core::origin(creds, connstrInfo),
@@ -440,9 +470,9 @@ Napi::Value Connection::jsScan(const Napi::CallbackInfo &info)
440
470
  auto f = barrier->get_future();
441
471
  this->_instance->_cluster.with_bucket_configuration(
442
472
  bucketName,
443
- [barrier](
444
- std::error_code ec,
445
- std::shared_ptr<couchbase::core::topology::configuration> config) mutable {
473
+ [barrier](std::error_code ec,
474
+ std::shared_ptr<couchbase::core::topology::configuration>
475
+ config) mutable {
446
476
  if (ec) {
447
477
  return barrier->set_value(tl::unexpected(ec));
448
478
  }
package/src/constants.cpp CHANGED
@@ -4,6 +4,8 @@
4
4
  #include <core/impl/subdoc/path_flags.hxx>
5
5
  #include <core/transactions.hxx>
6
6
  #include <core/transactions/internal/exceptions_internal.hxx>
7
+ #include <core/transactions/transaction_get_multi_mode.hxx>
8
+ #include <core/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx>
7
9
  #include <couchbase/error_context.hxx>
8
10
  #include <set>
9
11
  #include <vector>
@@ -1102,6 +1104,128 @@ void Constants::InitAutogen(Napi::Env env, Napi::Object exports)
1102
1104
  couchbase::core::vector_query_combination::combination_or},
1103
1105
  }));
1104
1106
 
1107
+ exports.Set(
1108
+ "transactions_failure_type",
1109
+ cbppEnumToJs<couchbase::core::transactions::failure_type>(
1110
+ env,
1111
+ {
1112
+ {"FAIL", couchbase::core::transactions::failure_type::FAIL},
1113
+ {"EXPIRY", couchbase::core::transactions::failure_type::EXPIRY},
1114
+ {"COMMIT_AMBIGUOUS",
1115
+ couchbase::core::transactions::failure_type::COMMIT_AMBIGUOUS},
1116
+ }));
1117
+
1118
+ exports.Set(
1119
+ "transactions_external_exception",
1120
+ cbppEnumToJs<couchbase::core::transactions::external_exception>(
1121
+ env,
1122
+ {
1123
+ {"UNKNOWN",
1124
+ couchbase::core::transactions::external_exception::UNKNOWN},
1125
+ {"ACTIVE_TRANSACTION_RECORD_ENTRY_NOT_FOUND",
1126
+ couchbase::core::transactions::external_exception::
1127
+ ACTIVE_TRANSACTION_RECORD_ENTRY_NOT_FOUND},
1128
+ {"ACTIVE_TRANSACTION_RECORD_FULL",
1129
+ couchbase::core::transactions::external_exception::
1130
+ ACTIVE_TRANSACTION_RECORD_FULL},
1131
+ {"ACTIVE_TRANSACTION_RECORD_NOT_FOUND",
1132
+ couchbase::core::transactions::external_exception::
1133
+ ACTIVE_TRANSACTION_RECORD_NOT_FOUND},
1134
+ {"DOCUMENT_ALREADY_IN_TRANSACTION",
1135
+ couchbase::core::transactions::external_exception::
1136
+ DOCUMENT_ALREADY_IN_TRANSACTION},
1137
+ {"DOCUMENT_EXISTS_EXCEPTION",
1138
+ couchbase::core::transactions::external_exception::
1139
+ DOCUMENT_EXISTS_EXCEPTION},
1140
+ {"DOCUMENT_NOT_FOUND_EXCEPTION",
1141
+ couchbase::core::transactions::external_exception::
1142
+ DOCUMENT_NOT_FOUND_EXCEPTION},
1143
+ {"NOT_SET",
1144
+ couchbase::core::transactions::external_exception::NOT_SET},
1145
+ {"FEATURE_NOT_AVAILABLE_EXCEPTION",
1146
+ couchbase::core::transactions::external_exception::
1147
+ FEATURE_NOT_AVAILABLE_EXCEPTION},
1148
+ {"TRANSACTION_ABORTED_EXTERNALLY",
1149
+ couchbase::core::transactions::external_exception::
1150
+ TRANSACTION_ABORTED_EXTERNALLY},
1151
+ {"PREVIOUS_OPERATION_FAILED",
1152
+ couchbase::core::transactions::external_exception::
1153
+ PREVIOUS_OPERATION_FAILED},
1154
+ {"FORWARD_COMPATIBILITY_FAILURE",
1155
+ couchbase::core::transactions::external_exception::
1156
+ FORWARD_COMPATIBILITY_FAILURE},
1157
+ {"PARSING_FAILURE", couchbase::core::transactions::
1158
+ external_exception::PARSING_FAILURE},
1159
+ {"ILLEGAL_STATE_EXCEPTION",
1160
+ couchbase::core::transactions::external_exception::
1161
+ ILLEGAL_STATE_EXCEPTION},
1162
+ {"COUCHBASE_EXCEPTION",
1163
+ couchbase::core::transactions::external_exception::
1164
+ COUCHBASE_EXCEPTION},
1165
+ {"SERVICE_NOT_AVAILABLE_EXCEPTION",
1166
+ couchbase::core::transactions::external_exception::
1167
+ SERVICE_NOT_AVAILABLE_EXCEPTION},
1168
+ {"REQUEST_CANCELED_EXCEPTION",
1169
+ couchbase::core::transactions::external_exception::
1170
+ REQUEST_CANCELED_EXCEPTION},
1171
+ {"CONCURRENT_OPERATIONS_DETECTED_ON_SAME_DOCUMENT",
1172
+ couchbase::core::transactions::external_exception::
1173
+ CONCURRENT_OPERATIONS_DETECTED_ON_SAME_DOCUMENT},
1174
+ {"COMMIT_NOT_PERMITTED",
1175
+ couchbase::core::transactions::external_exception::
1176
+ COMMIT_NOT_PERMITTED},
1177
+ {"ROLLBACK_NOT_PERMITTED",
1178
+ couchbase::core::transactions::external_exception::
1179
+ ROLLBACK_NOT_PERMITTED},
1180
+ {"TRANSACTION_ALREADY_ABORTED",
1181
+ couchbase::core::transactions::external_exception::
1182
+ TRANSACTION_ALREADY_ABORTED},
1183
+ {"TRANSACTION_ALREADY_COMMITTED",
1184
+ couchbase::core::transactions::external_exception::
1185
+ TRANSACTION_ALREADY_COMMITTED},
1186
+ {"DOCUMENT_UNRETRIEVABLE_EXCEPTION",
1187
+ couchbase::core::transactions::external_exception::
1188
+ DOCUMENT_UNRETRIEVABLE_EXCEPTION},
1189
+ }));
1190
+
1191
+ exports.Set(
1192
+ "transactions_transaction_get_multi_mode",
1193
+ cbppEnumToJs<couchbase::core::transactions::transaction_get_multi_mode>(
1194
+ env,
1195
+ {
1196
+ {"prioritise_latency",
1197
+ couchbase::core::transactions::transaction_get_multi_mode::
1198
+ prioritise_latency},
1199
+ {"disable_read_skew_detection",
1200
+ couchbase::core::transactions::transaction_get_multi_mode::
1201
+ disable_read_skew_detection},
1202
+ {"prioritise_read_skew_detection",
1203
+ couchbase::core::transactions::transaction_get_multi_mode::
1204
+ prioritise_read_skew_detection},
1205
+ }));
1206
+
1207
+ exports.Set(
1208
+ "transactions_transaction_get_multi_replicas_from_preferred_server_"
1209
+ "group_mode",
1210
+ cbppEnumToJs<
1211
+ couchbase::core::transactions::
1212
+ transaction_get_multi_replicas_from_preferred_server_group_mode>(
1213
+ env,
1214
+ {
1215
+ {"prioritise_latency",
1216
+ couchbase::core::transactions::
1217
+ transaction_get_multi_replicas_from_preferred_server_group_mode::
1218
+ prioritise_latency},
1219
+ {"disable_read_skew_detection",
1220
+ couchbase::core::transactions::
1221
+ transaction_get_multi_replicas_from_preferred_server_group_mode::
1222
+ disable_read_skew_detection},
1223
+ {"prioritise_read_skew_detection",
1224
+ couchbase::core::transactions::
1225
+ transaction_get_multi_replicas_from_preferred_server_group_mode::
1226
+ prioritise_read_skew_detection},
1227
+ }));
1228
+
1105
1229
  //#endregion Autogenerated Constants
1106
1230
  }
1107
1231