@milaboratories/pl-client 2.16.26 → 2.16.28

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 (212) hide show
  1. package/README.md +2 -1
  2. package/dist/core/PromiseTracker.cjs +1 -3
  3. package/dist/core/PromiseTracker.cjs.map +1 -1
  4. package/dist/core/PromiseTracker.d.ts.map +1 -1
  5. package/dist/core/PromiseTracker.js +1 -3
  6. package/dist/core/PromiseTracker.js.map +1 -1
  7. package/dist/core/StatefulPromise.cjs +4 -4
  8. package/dist/core/StatefulPromise.cjs.map +1 -1
  9. package/dist/core/StatefulPromise.d.ts +1 -1
  10. package/dist/core/StatefulPromise.d.ts.map +1 -1
  11. package/dist/core/StatefulPromise.js +4 -4
  12. package/dist/core/StatefulPromise.js.map +1 -1
  13. package/dist/core/advisory_locks.cjs +1 -1
  14. package/dist/core/advisory_locks.cjs.map +1 -1
  15. package/dist/core/advisory_locks.js +1 -1
  16. package/dist/core/advisory_locks.js.map +1 -1
  17. package/dist/core/auth.cjs.map +1 -1
  18. package/dist/core/auth.d.ts +1 -1
  19. package/dist/core/auth.js.map +1 -1
  20. package/dist/core/cache.d.ts +1 -1
  21. package/dist/core/client.cjs +14 -14
  22. package/dist/core/client.cjs.map +1 -1
  23. package/dist/core/client.d.ts +11 -11
  24. package/dist/core/client.d.ts.map +1 -1
  25. package/dist/core/client.js +14 -14
  26. package/dist/core/client.js.map +1 -1
  27. package/dist/core/config.cjs +39 -39
  28. package/dist/core/config.cjs.map +1 -1
  29. package/dist/core/config.d.ts +5 -5
  30. package/dist/core/config.js +39 -39
  31. package/dist/core/config.js.map +1 -1
  32. package/dist/core/default_client.cjs +23 -23
  33. package/dist/core/default_client.cjs.map +1 -1
  34. package/dist/core/default_client.d.ts +3 -3
  35. package/dist/core/default_client.js +23 -23
  36. package/dist/core/default_client.js.map +1 -1
  37. package/dist/core/driver.cjs +1 -1
  38. package/dist/core/driver.cjs.map +1 -1
  39. package/dist/core/driver.d.ts +5 -5
  40. package/dist/core/driver.js +1 -1
  41. package/dist/core/driver.js.map +1 -1
  42. package/dist/core/error_resource.cjs +2 -2
  43. package/dist/core/error_resource.cjs.map +1 -1
  44. package/dist/core/error_resource.d.ts +1 -1
  45. package/dist/core/error_resource.js +2 -2
  46. package/dist/core/error_resource.js.map +1 -1
  47. package/dist/core/errors.cjs +24 -24
  48. package/dist/core/errors.cjs.map +1 -1
  49. package/dist/core/errors.d.ts +1 -1
  50. package/dist/core/errors.d.ts.map +1 -1
  51. package/dist/core/errors.js +24 -24
  52. package/dist/core/errors.js.map +1 -1
  53. package/dist/core/final.cjs +43 -43
  54. package/dist/core/final.cjs.map +1 -1
  55. package/dist/core/final.d.ts +3 -3
  56. package/dist/core/final.d.ts.map +1 -1
  57. package/dist/core/final.js +43 -43
  58. package/dist/core/final.js.map +1 -1
  59. package/dist/core/ll_client.cjs +50 -43
  60. package/dist/core/ll_client.cjs.map +1 -1
  61. package/dist/core/ll_client.d.ts +9 -9
  62. package/dist/core/ll_client.d.ts.map +1 -1
  63. package/dist/core/ll_client.js +50 -43
  64. package/dist/core/ll_client.js.map +1 -1
  65. package/dist/core/ll_transaction.cjs +9 -9
  66. package/dist/core/ll_transaction.cjs.map +1 -1
  67. package/dist/core/ll_transaction.d.ts +7 -7
  68. package/dist/core/ll_transaction.d.ts.map +1 -1
  69. package/dist/core/ll_transaction.js +9 -9
  70. package/dist/core/ll_transaction.js.map +1 -1
  71. package/dist/core/stat.cjs.map +1 -1
  72. package/dist/core/stat.d.ts +1 -1
  73. package/dist/core/stat.js.map +1 -1
  74. package/dist/core/transaction.cjs +46 -46
  75. package/dist/core/transaction.cjs.map +1 -1
  76. package/dist/core/transaction.d.ts +7 -7
  77. package/dist/core/transaction.d.ts.map +1 -1
  78. package/dist/core/transaction.js +46 -46
  79. package/dist/core/transaction.js.map +1 -1
  80. package/dist/core/type_conversion.cjs +22 -22
  81. package/dist/core/type_conversion.cjs.map +1 -1
  82. package/dist/core/type_conversion.d.ts +3 -3
  83. package/dist/core/type_conversion.d.ts.map +1 -1
  84. package/dist/core/type_conversion.js +22 -22
  85. package/dist/core/type_conversion.js.map +1 -1
  86. package/dist/core/types.cjs +25 -25
  87. package/dist/core/types.cjs.map +1 -1
  88. package/dist/core/types.d.ts +7 -7
  89. package/dist/core/types.js +25 -25
  90. package/dist/core/types.js.map +1 -1
  91. package/dist/core/unauth_client.cjs +6 -4
  92. package/dist/core/unauth_client.cjs.map +1 -1
  93. package/dist/core/unauth_client.d.ts +4 -4
  94. package/dist/core/unauth_client.d.ts.map +1 -1
  95. package/dist/core/unauth_client.js +6 -4
  96. package/dist/core/unauth_client.js.map +1 -1
  97. package/dist/core/websocket_stream.cjs +22 -20
  98. package/dist/core/websocket_stream.cjs.map +1 -1
  99. package/dist/core/websocket_stream.d.ts +3 -3
  100. package/dist/core/websocket_stream.d.ts.map +1 -1
  101. package/dist/core/websocket_stream.js +22 -20
  102. package/dist/core/websocket_stream.js.map +1 -1
  103. package/dist/core/wire.d.ts +6 -6
  104. package/dist/core/wire.d.ts.map +1 -1
  105. package/dist/helpers/pl.cjs +19 -19
  106. package/dist/helpers/pl.cjs.map +1 -1
  107. package/dist/helpers/pl.d.ts +2 -2
  108. package/dist/helpers/pl.js +19 -19
  109. package/dist/helpers/pl.js.map +1 -1
  110. package/dist/helpers/poll.cjs +6 -6
  111. package/dist/helpers/poll.cjs.map +1 -1
  112. package/dist/helpers/poll.d.ts +4 -4
  113. package/dist/helpers/poll.d.ts.map +1 -1
  114. package/dist/helpers/poll.js +6 -6
  115. package/dist/helpers/poll.js.map +1 -1
  116. package/dist/helpers/retry_strategy.cjs +1 -1
  117. package/dist/helpers/retry_strategy.cjs.map +1 -1
  118. package/dist/helpers/retry_strategy.d.ts.map +1 -1
  119. package/dist/helpers/retry_strategy.js +1 -1
  120. package/dist/helpers/retry_strategy.js.map +1 -1
  121. package/dist/helpers/state_helpers.d.ts +2 -2
  122. package/dist/helpers/tx_helpers.cjs +2 -2
  123. package/dist/helpers/tx_helpers.cjs.map +1 -1
  124. package/dist/helpers/tx_helpers.d.ts +2 -2
  125. package/dist/helpers/tx_helpers.d.ts.map +1 -1
  126. package/dist/helpers/tx_helpers.js +2 -2
  127. package/dist/helpers/tx_helpers.js.map +1 -1
  128. package/dist/index.d.ts +16 -16
  129. package/dist/proto-grpc/google/protobuf/struct.d.ts +1 -1
  130. package/dist/proto-grpc/google/protobuf/struct.d.ts.map +1 -1
  131. package/dist/proto-rest/index.cjs +4 -5
  132. package/dist/proto-rest/index.cjs.map +1 -1
  133. package/dist/proto-rest/index.d.ts +4 -4
  134. package/dist/proto-rest/index.d.ts.map +1 -1
  135. package/dist/proto-rest/index.js +4 -5
  136. package/dist/proto-rest/index.js.map +1 -1
  137. package/dist/proto-rest/plapi.d.ts.map +1 -1
  138. package/dist/test/tcp-proxy.cjs +11 -10
  139. package/dist/test/tcp-proxy.cjs.map +1 -1
  140. package/dist/test/tcp-proxy.d.ts +1 -1
  141. package/dist/test/tcp-proxy.d.ts.map +1 -1
  142. package/dist/test/tcp-proxy.js +11 -10
  143. package/dist/test/tcp-proxy.js.map +1 -1
  144. package/dist/test/test_config.cjs +21 -17
  145. package/dist/test/test_config.cjs.map +1 -1
  146. package/dist/test/test_config.d.ts +6 -6
  147. package/dist/test/test_config.d.ts.map +1 -1
  148. package/dist/test/test_config.js +21 -17
  149. package/dist/test/test_config.js.map +1 -1
  150. package/dist/util/pl.cjs +1 -1
  151. package/dist/util/pl.cjs.map +1 -1
  152. package/dist/util/pl.js +1 -1
  153. package/dist/util/pl.js.map +1 -1
  154. package/dist/util/util.cjs +1 -1
  155. package/dist/util/util.cjs.map +1 -1
  156. package/dist/util/util.js +1 -1
  157. package/dist/util/util.js.map +1 -1
  158. package/package.json +23 -23
  159. package/src/core/PromiseTracker.ts +3 -4
  160. package/src/core/StatefulPromise.ts +17 -8
  161. package/src/core/abstract_stream.ts +3 -4
  162. package/src/core/advisory_locks.ts +1 -1
  163. package/src/core/auth.ts +2 -2
  164. package/src/core/cache.ts +1 -1
  165. package/src/core/client.test.ts +25 -21
  166. package/src/core/client.ts +54 -45
  167. package/src/core/config.test.ts +44 -44
  168. package/src/core/config.ts +49 -49
  169. package/src/core/connectivity.test.ts +69 -63
  170. package/src/core/default_client.ts +46 -46
  171. package/src/core/driver.ts +6 -6
  172. package/src/core/error.test.ts +5 -5
  173. package/src/core/error_resource.ts +3 -3
  174. package/src/core/errors.ts +39 -31
  175. package/src/core/final.ts +48 -55
  176. package/src/core/ll_client.test.ts +53 -36
  177. package/src/core/ll_client.ts +125 -81
  178. package/src/core/ll_transaction.test.ts +75 -49
  179. package/src/core/ll_transaction.ts +37 -35
  180. package/src/core/stat.ts +1 -1
  181. package/src/core/transaction.test.ts +65 -65
  182. package/src/core/transaction.ts +91 -84
  183. package/src/core/type_conversion.ts +30 -31
  184. package/src/core/types.test.ts +6 -6
  185. package/src/core/types.ts +35 -35
  186. package/src/core/unauth_client.test.ts +18 -14
  187. package/src/core/unauth_client.ts +14 -12
  188. package/src/core/websocket_stream.test.ts +52 -52
  189. package/src/core/websocket_stream.ts +41 -37
  190. package/src/core/wire.ts +10 -8
  191. package/src/helpers/pl.ts +22 -22
  192. package/src/helpers/poll.ts +13 -27
  193. package/src/helpers/retry_strategy.ts +2 -4
  194. package/src/helpers/rich_resource_types.test.ts +2 -2
  195. package/src/helpers/state_helpers.ts +3 -3
  196. package/src/helpers/tx_helpers.ts +9 -7
  197. package/src/index.ts +16 -16
  198. package/src/proto-grpc/google/protobuf/struct.ts +1 -1
  199. package/src/proto-rest/index.ts +17 -18
  200. package/src/proto-rest/plapi.ts +1472 -1472
  201. package/src/test/tcp-proxy.ts +55 -54
  202. package/src/test/test_config.test.ts +3 -3
  203. package/src/test/test_config.ts +51 -46
  204. package/src/util/pl.ts +1 -1
  205. package/src/util/util.test.ts +5 -5
  206. package/src/util/util.ts +1 -1
  207. package/dist/helpers/rich_resource_types.d.ts +0 -2
  208. package/dist/helpers/rich_resource_types.d.ts.map +0 -1
  209. package/dist/helpers/smart_accessors.d.ts +0 -2
  210. package/dist/helpers/smart_accessors.d.ts.map +0 -1
  211. package/src/helpers/rich_resource_types.ts +0 -84
  212. package/src/helpers/smart_accessors.ts +0 -146
@@ -13,19 +13,19 @@ var pl = require('../helpers/pl.cjs');
13
13
  var PromiseTracker = require('./PromiseTracker.cjs');
14
14
 
15
15
  function isField(ref) {
16
- return ref.hasOwnProperty('resourceId') && ref.hasOwnProperty('fieldName');
16
+ return ref.hasOwnProperty("resourceId") && ref.hasOwnProperty("fieldName");
17
17
  }
18
18
  function isResource(ref) {
19
- return (typeof ref === 'bigint' || (ref.hasOwnProperty('globalId') && ref.hasOwnProperty('localId')));
19
+ return (typeof ref === "bigint" || (ref.hasOwnProperty("globalId") && ref.hasOwnProperty("localId")));
20
20
  }
21
21
  function isResourceId(ref) {
22
- return typeof ref === 'bigint' && !types.isLocalResourceId(ref) && !types.isNullResourceId(ref);
22
+ return typeof ref === "bigint" && !types.isLocalResourceId(ref) && !types.isNullResourceId(ref);
23
23
  }
24
24
  function isFieldRef(ref) {
25
25
  return isResourceRef(ref.resourceId);
26
26
  }
27
27
  function isResourceRef(ref) {
28
- return ref.hasOwnProperty('globalId') && ref.hasOwnProperty('localId');
28
+ return ref.hasOwnProperty("globalId") && ref.hasOwnProperty("localId");
29
29
  }
30
30
  function toFieldId(ref) {
31
31
  if (isFieldRef(ref))
@@ -56,7 +56,7 @@ function field(resourceId, fieldName) {
56
56
  }
57
57
  /** If transaction commit failed due to write conflicts */
58
58
  class TxCommitConflict extends Error {
59
- name = 'TxCommitConflict';
59
+ name = "TxCommitConflict";
60
60
  }
61
61
  async function notFoundToUndefined(cb) {
62
62
  try {
@@ -167,7 +167,7 @@ let PlTransaction = (() => {
167
167
  this.enableFormattedErrors = enableFormattedErrors;
168
168
  // initiating transaction
169
169
  this.globalTxId = this.sendSingleAndParse({
170
- oneofKind: 'txOpen',
170
+ oneofKind: "txOpen",
171
171
  txOpen: {
172
172
  name,
173
173
  enableFormattedErrors,
@@ -223,7 +223,7 @@ let PlTransaction = (() => {
223
223
  }
224
224
  checkTxOpen() {
225
225
  if (this._completed)
226
- throw new Error('Transaction already closed');
226
+ throw new Error("Transaction already closed");
227
227
  }
228
228
  get completed() {
229
229
  return this._completed;
@@ -242,7 +242,7 @@ let PlTransaction = (() => {
242
242
  await this.ll.await();
243
243
  }
244
244
  else {
245
- const commitResponse = this.track(this.sendSingleAndParse({ oneofKind: 'txCommit', txCommit: {} }, (r) => r.txCommit.success));
245
+ const commitResponse = this.track(this.sendSingleAndParse({ oneofKind: "txCommit", txCommit: {} }, (r) => r.txCommit.success));
246
246
  // send closing frame right after commit to save some time on round-trips
247
247
  const completeResult = this.track(this.ll.complete());
248
248
  // now when we pushed all packets into the stream, we should wait for any
@@ -259,7 +259,7 @@ let PlTransaction = (() => {
259
259
  this.checkTxOpen();
260
260
  // tx will accept no requests after this one
261
261
  this._completed = true;
262
- const discardResponse = this.sendVoidSync({ oneofKind: 'txDiscard', txDiscard: {} });
262
+ const discardResponse = this.sendVoidSync({ oneofKind: "txDiscard", txDiscard: {} });
263
263
  void this.track(discardResponse);
264
264
  // send closing frame right after commit to save some time on round-trips
265
265
  const completeResult = this.track(this.ll.complete());
@@ -282,7 +282,7 @@ let PlTransaction = (() => {
282
282
  createSingleton(name, type, errorIfExists = false) {
283
283
  const localId = this.nextLocalResourceId(false);
284
284
  const globalId = this.sendSingleAndParse({
285
- oneofKind: 'resourceCreateSingleton',
285
+ oneofKind: "resourceCreateSingleton",
286
286
  resourceCreateSingleton: {
287
287
  type,
288
288
  id: localId,
@@ -295,7 +295,7 @@ let PlTransaction = (() => {
295
295
  }
296
296
  getSingleton(name, loadFields = true) {
297
297
  return this.sendSingleAndParse({
298
- oneofKind: 'resourceGetSingleton',
298
+ oneofKind: "resourceGetSingleton",
299
299
  resourceGetSingleton: {
300
300
  data: Buffer.from(name),
301
301
  loadFields,
@@ -310,17 +310,17 @@ let PlTransaction = (() => {
310
310
  }
311
311
  createRoot(type) {
312
312
  this._stat.rootsCreated++;
313
- return this.createResource(true, (localId) => ({ oneofKind: 'resourceCreateRoot', resourceCreateRoot: { type, id: localId } }), (r) => r.resourceCreateRoot.resourceId);
313
+ return this.createResource(true, (localId) => ({ oneofKind: "resourceCreateRoot", resourceCreateRoot: { type, id: localId } }), (r) => r.resourceCreateRoot.resourceId);
314
314
  }
315
315
  createStruct(type, data) {
316
316
  this._stat.structsCreated++;
317
317
  this._stat.structsCreatedDataBytes += data?.length ?? 0;
318
318
  return this.createResource(false, (localId) => ({
319
- oneofKind: 'resourceCreateStruct',
319
+ oneofKind: "resourceCreateStruct",
320
320
  resourceCreateStruct: {
321
321
  type,
322
322
  id: localId,
323
- data: data === undefined ? undefined : typeof data === 'string' ? Buffer.from(data) : data,
323
+ data: data === undefined ? undefined : typeof data === "string" ? Buffer.from(data) : data,
324
324
  },
325
325
  }), (r) => r.resourceCreateStruct.resourceId);
326
326
  }
@@ -328,11 +328,11 @@ let PlTransaction = (() => {
328
328
  this._stat.ephemeralsCreated++;
329
329
  this._stat.ephemeralsCreatedDataBytes += data?.length ?? 0;
330
330
  return this.createResource(false, (localId) => ({
331
- oneofKind: 'resourceCreateEphemeral',
331
+ oneofKind: "resourceCreateEphemeral",
332
332
  resourceCreateEphemeral: {
333
333
  type,
334
334
  id: localId,
335
- data: data === undefined ? undefined : typeof data === 'string' ? Buffer.from(data) : data,
335
+ data: data === undefined ? undefined : typeof data === "string" ? Buffer.from(data) : data,
336
336
  },
337
337
  }), (r) => r.resourceCreateEphemeral.resourceId);
338
338
  }
@@ -340,11 +340,11 @@ let PlTransaction = (() => {
340
340
  this._stat.valuesCreated++;
341
341
  this._stat.valuesCreatedDataBytes += data?.length ?? 0;
342
342
  return this.createResource(false, (localId) => ({
343
- oneofKind: 'resourceCreateValue',
343
+ oneofKind: "resourceCreateValue",
344
344
  resourceCreateValue: {
345
345
  type,
346
346
  id: localId,
347
- data: typeof data === 'string' ? Buffer.from(data) : data,
347
+ data: typeof data === "string" ? Buffer.from(data) : data,
348
348
  errorIfExists,
349
349
  },
350
350
  }), (r) => r.resourceCreateValue.resourceId);
@@ -362,24 +362,24 @@ let PlTransaction = (() => {
362
362
  }
363
363
  setResourceName(name, rId) {
364
364
  this.sendVoidAsync({
365
- oneofKind: 'resourceNameSet',
365
+ oneofKind: "resourceNameSet",
366
366
  resourceNameSet: { resourceId: toResourceId(rId), name },
367
367
  });
368
368
  }
369
369
  deleteResourceName(name) {
370
- this.sendVoidAsync({ oneofKind: 'resourceNameDelete', resourceNameDelete: { name } });
370
+ this.sendVoidAsync({ oneofKind: "resourceNameDelete", resourceNameDelete: { name } });
371
371
  }
372
372
  getResourceByName(name) {
373
- return this.sendSingleAndParse({ oneofKind: 'resourceNameGet', resourceNameGet: { name } }, (r) => types.ensureResourceIdNotNull(r.resourceNameGet.resourceId));
373
+ return this.sendSingleAndParse({ oneofKind: "resourceNameGet", resourceNameGet: { name } }, (r) => types.ensureResourceIdNotNull(r.resourceNameGet.resourceId));
374
374
  }
375
375
  checkResourceNameExists(name) {
376
- return this.sendSingleAndParse({ oneofKind: 'resourceNameExists', resourceNameExists: { name } }, (r) => r.resourceNameExists.exists);
376
+ return this.sendSingleAndParse({ oneofKind: "resourceNameExists", resourceNameExists: { name } }, (r) => r.resourceNameExists.exists);
377
377
  }
378
378
  removeResource(rId) {
379
- this.sendVoidAsync({ oneofKind: 'resourceRemove', resourceRemove: { id: rId } });
379
+ this.sendVoidAsync({ oneofKind: "resourceRemove", resourceRemove: { id: rId } });
380
380
  }
381
381
  resourceExists(rId) {
382
- return this.sendSingleAndParse({ oneofKind: 'resourceExists', resourceExists: { resourceId: rId } }, (r) => r.resourceExists.exists);
382
+ return this.sendSingleAndParse({ oneofKind: "resourceExists", resourceExists: { resourceId: rId } }, (r) => r.resourceExists.exists);
383
383
  }
384
384
  async getResourceData(rId, loadFields = true, ignoreCache = false) {
385
385
  if (!ignoreCache && !isResourceRef(rId) && !types.isLocalResourceId(rId)) {
@@ -400,7 +400,7 @@ let PlTransaction = (() => {
400
400
  }
401
401
  }
402
402
  const result = await this.sendSingleAndParse({
403
- oneofKind: 'resourceGet',
403
+ oneofKind: "resourceGet",
404
404
  resourceGet: { resourceId: toResourceId(rId), loadFields: loadFields },
405
405
  }, (r) => type_conversion.protoToResource(tsHelpers.notEmpty(r.resourceGet.resource)));
406
406
  this._stat.rGetDataNetRequests++;
@@ -456,7 +456,7 @@ let PlTransaction = (() => {
456
456
  lockInputs(rId) {
457
457
  this._stat.inputsLocked++;
458
458
  this.sendVoidAsync({
459
- oneofKind: 'resourceLockInputs',
459
+ oneofKind: "resourceLockInputs",
460
460
  resourceLockInputs: { resourceId: toResourceId(rId) },
461
461
  });
462
462
  }
@@ -467,7 +467,7 @@ let PlTransaction = (() => {
467
467
  lockOutputs(rId) {
468
468
  this._stat.outputsLocked++;
469
469
  this.sendVoidAsync({
470
- oneofKind: 'resourceLockOutputs',
470
+ oneofKind: "resourceLockOutputs",
471
471
  resourceLockOutputs: { resourceId: toResourceId(rId) },
472
472
  });
473
473
  }
@@ -477,7 +477,7 @@ let PlTransaction = (() => {
477
477
  }
478
478
  setResourceError(rId, ref) {
479
479
  this.sendVoidAsync({
480
- oneofKind: 'resourceSetError',
480
+ oneofKind: "resourceSetError",
481
481
  resourceSetError: { resourceId: toResourceId(rId), errorResourceId: toResourceId(ref) },
482
482
  });
483
483
  }
@@ -487,7 +487,7 @@ let PlTransaction = (() => {
487
487
  createField(fId, fieldType, value) {
488
488
  this._stat.fieldsCreated++;
489
489
  this.sendVoidAsync({
490
- oneofKind: 'fieldCreate',
490
+ oneofKind: "fieldCreate",
491
491
  fieldCreate: { type: type_conversion.fieldTypeToProto(fieldType), id: toFieldId(fId) },
492
492
  });
493
493
  if (value !== undefined)
@@ -495,7 +495,7 @@ let PlTransaction = (() => {
495
495
  }
496
496
  fieldExists(fId) {
497
497
  return this.sendSingleAndParse({
498
- oneofKind: 'fieldExists',
498
+ oneofKind: "fieldExists",
499
499
  fieldExists: { field: toFieldId(fId) },
500
500
  }, (r) => r.fieldExists.exists);
501
501
  }
@@ -503,18 +503,18 @@ let PlTransaction = (() => {
503
503
  this._stat.fieldsSet++;
504
504
  if (isResource(ref))
505
505
  this.sendVoidAsync({
506
- oneofKind: 'fieldSet',
506
+ oneofKind: "fieldSet",
507
507
  fieldSet: {
508
508
  field: toFieldId(fId),
509
509
  value: {
510
510
  resourceId: toResourceId(ref),
511
- fieldName: '', // default value, read as undefined
511
+ fieldName: "", // default value, read as undefined
512
512
  },
513
513
  },
514
514
  });
515
515
  else
516
516
  this.sendVoidAsync({
517
- oneofKind: 'fieldSet',
517
+ oneofKind: "fieldSet",
518
518
  fieldSet: {
519
519
  field: toFieldId(fId),
520
520
  value: toFieldId(ref),
@@ -524,30 +524,30 @@ let PlTransaction = (() => {
524
524
  setFieldError(fId, ref) {
525
525
  this._stat.fieldsSet++;
526
526
  this.sendVoidAsync({
527
- oneofKind: 'fieldSetError',
527
+ oneofKind: "fieldSetError",
528
528
  fieldSetError: { field: toFieldId(fId), errResourceId: toResourceId(ref) },
529
529
  });
530
530
  }
531
531
  getField(fId) {
532
532
  this._stat.fieldsGet++;
533
- return this.sendSingleAndParse({ oneofKind: 'fieldGet', fieldGet: { field: toFieldId(fId) } }, (r) => type_conversion.protoToField(tsHelpers.notEmpty(r.fieldGet.field)));
533
+ return this.sendSingleAndParse({ oneofKind: "fieldGet", fieldGet: { field: toFieldId(fId) } }, (r) => type_conversion.protoToField(tsHelpers.notEmpty(r.fieldGet.field)));
534
534
  }
535
535
  async getFieldIfExists(fId) {
536
536
  return notFoundToUndefined(async () => await this.getField(fId));
537
537
  }
538
538
  resetField(fId) {
539
- this.sendVoidAsync({ oneofKind: 'fieldReset', fieldReset: { field: toFieldId(fId) } });
539
+ this.sendVoidAsync({ oneofKind: "fieldReset", fieldReset: { field: toFieldId(fId) } });
540
540
  }
541
541
  removeField(fId) {
542
- this.sendVoidAsync({ oneofKind: 'fieldRemove', fieldRemove: { field: toFieldId(fId) } });
542
+ this.sendVoidAsync({ oneofKind: "fieldRemove", fieldRemove: { field: toFieldId(fId) } });
543
543
  }
544
544
  //
545
545
  // KV
546
546
  //
547
547
  async listKeyValues(rId) {
548
548
  const result = await this.sendMultiAndParse({
549
- oneofKind: 'resourceKeyValueList',
550
- resourceKeyValueList: { resourceId: toResourceId(rId), startFrom: '', limit: 0 },
549
+ oneofKind: "resourceKeyValueList",
550
+ resourceKeyValueList: { resourceId: toResourceId(rId), startFrom: "", limit: 0 },
551
551
  }, (r) => r.map((e) => e.resourceKeyValueList.record));
552
552
  this._stat.kvListRequests++;
553
553
  this._stat.kvListEntries += result.length;
@@ -571,7 +571,7 @@ let PlTransaction = (() => {
571
571
  this._stat.kvSetRequests++;
572
572
  this._stat.kvSetBytes++;
573
573
  this.sendVoidAsync({
574
- oneofKind: 'resourceKeyValueSet',
574
+ oneofKind: "resourceKeyValueSet",
575
575
  resourceKeyValueSet: {
576
576
  resourceId: toResourceId(rId),
577
577
  key,
@@ -581,7 +581,7 @@ let PlTransaction = (() => {
581
581
  }
582
582
  deleteKValue(rId, key) {
583
583
  this.sendVoidAsync({
584
- oneofKind: 'resourceKeyValueDelete',
584
+ oneofKind: "resourceKeyValueDelete",
585
585
  resourceKeyValueDelete: {
586
586
  resourceId: toResourceId(rId),
587
587
  key,
@@ -590,7 +590,7 @@ let PlTransaction = (() => {
590
590
  }
591
591
  async getKValue(rId, key) {
592
592
  const result = await this.sendSingleAndParse({
593
- oneofKind: 'resourceKeyValueGet',
593
+ oneofKind: "resourceKeyValueGet",
594
594
  resourceKeyValueGet: { resourceId: toResourceId(rId), key },
595
595
  }, (r) => r.resourceKeyValueGet.value);
596
596
  this._stat.kvGetRequests++;
@@ -605,7 +605,7 @@ let PlTransaction = (() => {
605
605
  }
606
606
  async getKValueIfExists(rId, key) {
607
607
  const result = await this.sendSingleAndParse({
608
- oneofKind: 'resourceKeyValueGetIfExists',
608
+ oneofKind: "resourceKeyValueGetIfExists",
609
609
  resourceKeyValueGetIfExists: { resourceId: toResourceId(rId), key },
610
610
  }, (r) => r.resourceKeyValueGetIfExists.exists ? r.resourceKeyValueGetIfExists.value : undefined);
611
611
  this._stat.kvGetRequests++;
@@ -632,9 +632,9 @@ let PlTransaction = (() => {
632
632
  /** Resolves existing or create first level resource from */
633
633
  getFutureFieldValue(rId, fieldName, fieldType) {
634
634
  const data = Buffer.from(JSON.stringify({ fieldName, fieldType }));
635
- const getFieldResource = this.createEphemeral({ name: 'json/getField', version: '1' }, data);
636
- this.setField({ resourceId: getFieldResource, fieldName: 'resource' }, rId);
637
- return { resourceId: getFieldResource, fieldName: 'result' };
635
+ const getFieldResource = this.createEphemeral({ name: "json/getField", version: "1" }, data);
636
+ this.setField({ resourceId: getFieldResource, fieldName: "resource" }, rId);
637
+ return { resourceId: getFieldResource, fieldName: "result" };
638
638
  }
639
639
  //
640
640
  // Technical
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.cjs","sources":["../../src/core/transaction.ts"],"sourcesContent":["// TODO: fix this\n/* eslint-disable no-prototype-builtins */\nimport type {\n AnyResourceId,\n LocalResourceId,\n OptionalResourceId,\n BasicResourceData,\n FieldData,\n FieldType,\n ResourceData,\n ResourceId,\n ResourceType,\n FutureFieldType } from './types';\nimport {\n createLocalResourceId,\n ensureResourceIdNotNull,\n MaxTxId,\n isLocalResourceId,\n extractBasicResourceData,\n isNullResourceId,\n} from './types';\nimport type {\n ClientMessageRequest,\n LLPlTransaction,\n OneOfKind,\n ServerMessageResponse,\n} from './ll_transaction';\nimport { TxAPI_Open_Request_WritableTx } from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api';\nimport type { NonUndefined } from 'utility-types';\nimport { toBytes } from '../util/util';\nimport { fieldTypeToProto, protoToField, protoToResource } from './type_conversion';\nimport { canonicalJsonBytes, canonicalJsonGzBytes, deepFreeze, notEmpty } from '@milaboratories/ts-helpers';\nimport { isNotFoundError } from './errors';\nimport type { FinalResourceDataPredicate } from './final';\nimport type { LRUCache } from 'lru-cache';\nimport type { ResourceDataCacheRecord } from './cache';\nimport type { TxStat } from './stat';\nimport { initialTxStatWithoutTime } from './stat';\nimport type { ErrorResourceData } from './error_resource';\nimport { ErrorResourceType } from './error_resource';\nimport { JsonGzObject, JsonObject } from '../helpers/pl';\nimport { PromiseTracker } from './PromiseTracker';\n\n/** Reference to resource, used only within transaction */\nexport interface ResourceRef {\n /** Global resource id of newly created resources, become available only\n * after response for the corresponding creation request is received. */\n readonly globalId: Promise<ResourceId>;\n\n /** Transaction-local resource id is assigned right after resource creation\n * request is sent, and can be used right away */\n readonly localId: LocalResourceId;\n}\n\n/** Key-Value pair from resource-attached KV storage */\nexport interface KeyValue {\n key: string;\n value: Uint8Array;\n}\n\n/** Key-Value pair from resource-attached KV storage */\nexport interface KeyValueString {\n key: string;\n value: string;\n}\n\ninterface _FieldId<RId> {\n /** Parent resource id */\n resourceId: RId;\n /** Field name */\n fieldName: string;\n}\n\nexport type FieldId = _FieldId<ResourceId>;\nexport type FieldRef = _FieldId<ResourceRef>;\nexport type LocalFieldId = _FieldId<LocalResourceId>;\nexport type AnyFieldId = FieldId | LocalFieldId;\n\nexport type AnyResourceRef = ResourceRef | ResourceId;\nexport type AnyFieldRef = _FieldId<AnyResourceRef>; // FieldRef | FieldId\nexport type AnyRef = AnyResourceRef | AnyFieldRef;\n\nexport function isField(ref: AnyRef): ref is AnyFieldRef {\n return ref.hasOwnProperty('resourceId') && ref.hasOwnProperty('fieldName');\n}\n\nexport function isResource(ref: AnyRef): ref is AnyResourceRef {\n return (\n typeof ref === 'bigint' || (ref.hasOwnProperty('globalId') && ref.hasOwnProperty('localId'))\n );\n}\n\nexport function isResourceId(ref: AnyRef): ref is ResourceId {\n return typeof ref === 'bigint' && !isLocalResourceId(ref) && !isNullResourceId(ref);\n}\n\nexport function isFieldRef(ref: AnyFieldRef): ref is FieldRef {\n return isResourceRef(ref.resourceId);\n}\n\nexport function isResourceRef(ref: AnyResourceRef): ref is ResourceRef {\n return ref.hasOwnProperty('globalId') && ref.hasOwnProperty('localId');\n}\n\nexport function toFieldId(ref: AnyFieldRef): AnyFieldId {\n if (isFieldRef(ref)) return { resourceId: ref.resourceId.localId, fieldName: ref.fieldName };\n else return ref as FieldId;\n}\n\nexport async function toGlobalFieldId(ref: AnyFieldRef): Promise<FieldId> {\n if (isFieldRef(ref))\n return { resourceId: await ref.resourceId.globalId, fieldName: ref.fieldName };\n else return ref as FieldId;\n}\n\nexport function toResourceId(ref: AnyResourceRef): AnyResourceId {\n if (isResourceRef(ref)) return ref.localId;\n else return ref;\n}\n\nexport async function toGlobalResourceId(ref: AnyResourceRef): Promise<ResourceId> {\n if (isResourceRef(ref)) return await ref.globalId;\n else return ref;\n}\n\nexport function field(resourceId: AnyResourceRef, fieldName: string): AnyFieldRef {\n return { resourceId, fieldName };\n}\n\n/** If transaction commit failed due to write conflicts */\nexport class TxCommitConflict extends Error {\n name = 'TxCommitConflict';\n}\n\nasync function notFoundToUndefined<T>(cb: () => Promise<T>): Promise<T | undefined> {\n try {\n return await cb();\n } catch (e) {\n if (isNotFoundError(e)) return undefined;\n throw e;\n }\n}\n\n/**\n * Decorator that wraps the method's returned promise with this.track()\n * This ensures that the promise will be awaited before the transaction is completed.\n */\nfunction tracked<T extends (this: PlTransaction, ...a: any[]) => Promise<any>>(\n value: T,\n _context: ClassMethodDecoratorContext,\n) {\n return function (\n this: PlTransaction,\n ...args: Parameters<T>\n ): ReturnType<T> {\n return this.track(value.apply(this, args)) as ReturnType<T>;\n } as unknown as T;\n}\n\n/**\n * Each platform transaction has 3 stages:\n * - initialization (txOpen message -> txInfo response)\n * - communication (create resources, fields, references and so on)\n * - finalization (txCommit or txDiscard message)\n *\n * This class encapsulates finalization stage and provides ready-to-communication transaction object.\n * */\nexport class PlTransaction {\n private readonly globalTxId: Promise<bigint>;\n private readonly localTxId: number = PlTransaction.nextLocalTxId();\n\n /** Used in caching */\n private readonly txOpenTimestamp = Date.now();\n\n private localResourceIdCounter = 0;\n\n /** Store logical tx open / closed state to prevent invalid sequence of requests.\n * True means output stream was completed.\n * Contract: there must be no async operations between setting this field to true and sending complete signal to stream. */\n private _completed = false;\n\n private globalTxIdWasAwaited: boolean = false;\n\n public readonly pending = new PromiseTracker();\n\n private readonly _startTime = Date.now();\n private readonly _stat = initialTxStatWithoutTime();\n public get stat(): TxStat {\n return {\n ...this._stat,\n timeMs: Date.now() - this._startTime,\n };\n }\n\n constructor(\n private readonly ll: LLPlTransaction,\n public readonly name: string,\n public readonly writable: boolean,\n private readonly _clientRoot: OptionalResourceId,\n private readonly finalPredicate: FinalResourceDataPredicate,\n private readonly sharedResourceDataCache: LRUCache<ResourceId, ResourceDataCacheRecord>,\n private readonly enableFormattedErrors: boolean = false,\n ) {\n // initiating transaction\n this.globalTxId = this.sendSingleAndParse(\n {\n oneofKind: 'txOpen',\n txOpen: {\n name,\n enableFormattedErrors,\n writable: writable\n ? TxAPI_Open_Request_WritableTx.WRITABLE\n : TxAPI_Open_Request_WritableTx.NOT_WRITABLE,\n },\n },\n (r) => notEmpty(r.txOpen.tx?.id),\n );\n\n void this.track(this.globalTxId);\n\n // To avoid floating promise\n this.globalTxId.catch((err) => {\n if (!this.globalTxIdWasAwaited) {\n console.warn(err);\n }\n });\n\n // Adding stats\n this._stat.txCount++;\n }\n\n /**\n * Collect all pending promises for the transaction finalization.\n */\n public track<T>(promiseOrCallback: Promise<T> | (() => Promise<T>)): Promise<T> {\n return this.pending.track(promiseOrCallback);\n }\n\n private async drainAndAwaitPendingOps(): Promise<void> {\n // awaiting these pending operations first, to catch any errors\n await this.pending.awaitAll();\n }\n\n private sendSingleAndParse<Kind extends NonUndefined<ClientMessageRequest['oneofKind']>, T>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n parser: (resp: OneOfKind<ServerMessageResponse, Kind>) => T,\n ): Promise<T> {\n return this.pending.track(async () => {\n const rawResponsePromise = this.ll.send(r, false);\n\n void this.pending.track(rawResponsePromise);\n\n await this.drainAndAwaitPendingOps();\n\n // awaiting our result, and parsing the response\n return parser(await rawResponsePromise);\n });\n }\n\n private sendMultiAndParse<Kind extends NonUndefined<ClientMessageRequest['oneofKind']>, T>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n parser: (resp: OneOfKind<ServerMessageResponse, Kind>[]) => T,\n ): Promise<T> {\n return this.pending.track(async () => {\n const rawResponsePromise = this.ll.send(r, true);\n\n void this.pending.track(rawResponsePromise);\n\n await this.drainAndAwaitPendingOps();\n\n // awaiting our result, and parsing the response\n return parser(await rawResponsePromise);\n });\n }\n\n private async sendVoidSync<Kind extends NonUndefined<ClientMessageRequest['oneofKind']>>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n ): Promise<void> {\n await this.ll.send(r, false);\n }\n\n /** Requests sent with this method should never produce recoverable errors */\n private sendVoidAsync<Kind extends NonUndefined<ClientMessageRequest['oneofKind']>>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n ): void {\n void this.track(this.sendVoidSync(r));\n }\n\n private checkTxOpen() {\n if (this._completed) throw new Error('Transaction already closed');\n }\n\n public get completed() {\n return this._completed;\n }\n\n /** Commit & closes transaction. {@link TxCommitConflict} is thrown on\n * commit conflicts. */\n public async commit() {\n this.checkTxOpen();\n\n // tx will accept no requests after this one\n this._completed = true;\n\n if (!this.writable) {\n // no need to explicitly commit or reject read-only tx\n const completeResult = this.track(this.ll.complete());\n await this.drainAndAwaitPendingOps();\n await completeResult;\n await this.ll.await();\n } else {\n const commitResponse = this.track(this.sendSingleAndParse(\n { oneofKind: 'txCommit', txCommit: {} },\n (r) => r.txCommit.success,\n ));\n\n // send closing frame right after commit to save some time on round-trips\n const completeResult = this.track(this.ll.complete());\n\n // now when we pushed all packets into the stream, we should wait for any\n // pending void operations from before, to catch any errors\n await this.drainAndAwaitPendingOps();\n\n if (!(await commitResponse)) throw new TxCommitConflict();\n\n await completeResult;\n\n // await event-loop completion\n await this.ll.await();\n }\n }\n\n public async discard() {\n this.checkTxOpen();\n\n // tx will accept no requests after this one\n this._completed = true;\n\n const discardResponse = this.sendVoidSync({ oneofKind: 'txDiscard', txDiscard: {} });\n void this.track(discardResponse);\n // send closing frame right after commit to save some time on round-trips\n const completeResult = this.track(this.ll.complete());\n\n // now when we pushed all packets into the stream, we should wait for any\n // pending void operations from before, to catch any errors\n await this.drainAndAwaitPendingOps();\n\n await discardResponse;\n await completeResult;\n await this.ll.await();\n }\n\n //\n // Main tx methods\n //\n\n public get clientRoot(): ResourceId {\n return ensureResourceIdNotNull(this._clientRoot);\n }\n\n //\n // Resources\n //\n\n public createSingleton(\n name: string,\n type: ResourceType,\n errorIfExists: boolean = false,\n ): ResourceRef {\n const localId = this.nextLocalResourceId(false);\n\n const globalId = this.sendSingleAndParse(\n {\n oneofKind: 'resourceCreateSingleton',\n resourceCreateSingleton: {\n type,\n id: localId,\n data: Buffer.from(name),\n errorIfExists,\n },\n },\n (r) => r.resourceCreateSingleton.resourceId as ResourceId,\n );\n\n void this.track(globalId);\n\n return { globalId, localId };\n }\n\n public getSingleton(name: string, loadFields: true): Promise<ResourceData>;\n public getSingleton(name: string, loadFields: false): Promise<BasicResourceData>;\n public getSingleton(\n name: string,\n loadFields: boolean = true,\n ): Promise<BasicResourceData | ResourceData> {\n return this.sendSingleAndParse(\n {\n oneofKind: 'resourceGetSingleton',\n resourceGetSingleton: {\n data: Buffer.from(name),\n loadFields,\n },\n },\n (r) => protoToResource(notEmpty(r.resourceGetSingleton.resource)),\n );\n }\n\n private createResource<Kind extends NonUndefined<ClientMessageRequest['oneofKind']>>(\n root: boolean,\n req: (localId: LocalResourceId) => OneOfKind<ClientMessageRequest, Kind>,\n parser: (resp: OneOfKind<ServerMessageResponse, Kind>) => bigint,\n ): ResourceRef {\n const localId = this.nextLocalResourceId(root);\n\n const globalId = this.sendSingleAndParse(req(localId), (r) => parser(r) as ResourceId);\n\n void this.track(globalId);\n\n return { globalId, localId };\n }\n\n public createRoot(type: ResourceType): ResourceRef {\n this._stat.rootsCreated++;\n return this.createResource(\n true,\n (localId) => ({ oneofKind: 'resourceCreateRoot', resourceCreateRoot: { type, id: localId } }),\n (r) => r.resourceCreateRoot.resourceId,\n );\n }\n\n public createStruct(type: ResourceType, data?: Uint8Array | string): ResourceRef {\n this._stat.structsCreated++;\n this._stat.structsCreatedDataBytes += data?.length ?? 0;\n return this.createResource(\n false,\n (localId) => ({\n oneofKind: 'resourceCreateStruct',\n resourceCreateStruct: {\n type,\n id: localId,\n data: data === undefined ? undefined : typeof data === 'string' ? Buffer.from(data) : data,\n },\n }),\n (r) => r.resourceCreateStruct.resourceId,\n );\n }\n\n public createEphemeral(type: ResourceType, data?: Uint8Array | string): ResourceRef {\n this._stat.ephemeralsCreated++;\n this._stat.ephemeralsCreatedDataBytes += data?.length ?? 0;\n return this.createResource(\n false,\n (localId) => ({\n oneofKind: 'resourceCreateEphemeral',\n resourceCreateEphemeral: {\n type,\n id: localId,\n data: data === undefined ? undefined : typeof data === 'string' ? Buffer.from(data) : data,\n },\n }),\n (r) => r.resourceCreateEphemeral.resourceId,\n );\n }\n\n public createValue(\n type: ResourceType,\n data: Uint8Array | string,\n errorIfExists: boolean = false,\n ): ResourceRef {\n this._stat.valuesCreated++;\n this._stat.valuesCreatedDataBytes += data?.length ?? 0;\n return this.createResource(\n false,\n (localId) => ({\n oneofKind: 'resourceCreateValue',\n resourceCreateValue: {\n type,\n id: localId,\n data: typeof data === 'string' ? Buffer.from(data) : data,\n errorIfExists,\n },\n }),\n (r) => r.resourceCreateValue.resourceId,\n );\n }\n\n public createJsonValue(data: unknown): ResourceRef {\n const jsonData = canonicalJsonBytes(data);\n return this.createValue(JsonObject, jsonData, false);\n }\n\n public createJsonGzValue(data: unknown, minSizeToGzip: number | undefined = 16_384): ResourceRef {\n const { data: jsonData, isGzipped } = canonicalJsonGzBytes(data, minSizeToGzip);\n return this.createValue(isGzipped ? JsonGzObject : JsonObject, jsonData, false);\n }\n\n public createError(message: string): ResourceRef {\n return this.createValue(ErrorResourceType, JSON.stringify({ message } satisfies ErrorResourceData));\n }\n\n public setResourceName(name: string, rId: AnyResourceRef): void {\n this.sendVoidAsync({\n oneofKind: 'resourceNameSet',\n resourceNameSet: { resourceId: toResourceId(rId), name },\n });\n }\n\n public deleteResourceName(name: string): void {\n this.sendVoidAsync({ oneofKind: 'resourceNameDelete', resourceNameDelete: { name } });\n }\n\n public getResourceByName(name: string): Promise<ResourceId> {\n return this.sendSingleAndParse(\n { oneofKind: 'resourceNameGet', resourceNameGet: { name } },\n (r) => ensureResourceIdNotNull(r.resourceNameGet.resourceId as OptionalResourceId),\n );\n }\n\n public checkResourceNameExists(name: string): Promise<boolean> {\n return this.sendSingleAndParse(\n { oneofKind: 'resourceNameExists', resourceNameExists: { name } },\n (r) => r.resourceNameExists.exists,\n );\n }\n\n public removeResource(rId: ResourceId): void {\n this.sendVoidAsync({ oneofKind: 'resourceRemove', resourceRemove: { id: rId } });\n }\n\n public resourceExists(rId: ResourceId): Promise<boolean> {\n return this.sendSingleAndParse(\n { oneofKind: 'resourceExists', resourceExists: { resourceId: rId } },\n (r) => r.resourceExists.exists,\n );\n }\n\n /** This method may return stale resource state from cache if resource was removed */\n public async getResourceData(rId: AnyResourceRef, loadFields: true): Promise<ResourceData>;\n /** This method may return stale resource state from cache if resource was removed */\n public async getResourceData(rId: AnyResourceRef, loadFields: false): Promise<BasicResourceData>;\n /** This method may return stale resource state from cache if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: boolean\n ): Promise<BasicResourceData | ResourceData>;\n /** This method may return stale resource state from cache if ignoreCache == false if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: true,\n ignoreCache: boolean\n ): Promise<ResourceData>;\n /** This method may return stale resource state from cache if ignoreCache == false if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: false,\n ignoreCache: boolean\n ): Promise<BasicResourceData>;\n /** This method may return stale resource state from cache if ignoreCache == false if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: boolean,\n ignoreCache: boolean\n ): Promise<BasicResourceData | ResourceData>;\n @tracked\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: boolean = true,\n ignoreCache: boolean = false,\n ): Promise<BasicResourceData | ResourceData> {\n if (!ignoreCache && !isResourceRef(rId) && !isLocalResourceId(rId)) {\n // checking if we can return result from cache\n const fromCache = this.sharedResourceDataCache.get(rId);\n if (fromCache && fromCache.cacheTxOpenTimestamp < this.txOpenTimestamp) {\n if (!loadFields) {\n this._stat.rGetDataCacheHits++;\n this._stat.rGetDataCacheBytes += fromCache.basicData.data?.length ?? 0;\n return fromCache.basicData;\n } else if (fromCache.data) {\n this._stat.rGetDataCacheHits++;\n this._stat.rGetDataCacheBytes += fromCache.basicData.data?.length ?? 0;\n this._stat.rGetDataCacheFields += fromCache.data.fields.length;\n return fromCache.data;\n }\n }\n }\n\n const result = await this.sendSingleAndParse(\n {\n oneofKind: 'resourceGet',\n resourceGet: { resourceId: toResourceId(rId), loadFields: loadFields },\n },\n (r) => protoToResource(notEmpty(r.resourceGet.resource)),\n );\n\n this._stat.rGetDataNetRequests++;\n this._stat.rGetDataNetBytes += result.data?.length ?? 0;\n this._stat.rGetDataNetFields += result.fields.length;\n\n // we will cache only final resource data states\n // caching result even if we were ignore the cache\n if (!isResourceRef(rId) && !isLocalResourceId(rId) && this.finalPredicate(result)) {\n deepFreeze(result);\n const fromCache = this.sharedResourceDataCache.get(rId);\n if (fromCache) {\n if (loadFields && !fromCache.data) {\n fromCache.data = result;\n // updating timestamp because we updated the record\n fromCache.cacheTxOpenTimestamp = this.txOpenTimestamp;\n }\n } else {\n const basicData = extractBasicResourceData(result);\n deepFreeze(basicData);\n if (loadFields)\n this.sharedResourceDataCache.set(rId, {\n basicData,\n data: result,\n cacheTxOpenTimestamp: this.txOpenTimestamp,\n });\n else\n this.sharedResourceDataCache.set(rId, {\n basicData,\n data: undefined,\n cacheTxOpenTimestamp: this.txOpenTimestamp,\n });\n }\n }\n\n return result;\n }\n\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: true\n ): Promise<ResourceData | undefined>;\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: false\n ): Promise<BasicResourceData | undefined>;\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: boolean\n ): Promise<BasicResourceData | ResourceData | undefined>;\n @tracked\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: boolean = true,\n ): Promise<BasicResourceData | ResourceData | undefined> {\n // calling this method will ignore cache, because user intention is to detect resource absence\n // which cache will prevent\n const result = await notFoundToUndefined(\n async () => await this.getResourceData(rId, loadFields, true),\n );\n\n // cleaning cache record if resource was removed from the db\n if (result === undefined && !isResourceRef(rId) && !isLocalResourceId(rId))\n this.sharedResourceDataCache.delete(rId);\n\n return result;\n }\n\n /**\n * Inform platform that resource will not get any new input fields.\n * This is required, when client creates resource without schema and wants\n * controller to start calculations.\n * Most controllers will not start calculations even when all inputs\n * have their values, if inputs list is not locked.\n */\n public lockInputs(rId: AnyResourceRef): void {\n this._stat.inputsLocked++;\n this.sendVoidAsync({\n oneofKind: 'resourceLockInputs',\n resourceLockInputs: { resourceId: toResourceId(rId) },\n });\n }\n\n /**\n * Inform platform that resource will not get any new output fields.\n * This is required for resource to pass deduplication.\n */\n public lockOutputs(rId: AnyResourceRef): void {\n this._stat.outputsLocked++;\n this.sendVoidAsync({\n oneofKind: 'resourceLockOutputs',\n resourceLockOutputs: { resourceId: toResourceId(rId) },\n });\n }\n\n public lock(rID: AnyResourceRef): void {\n this.lockInputs(rID);\n this.lockOutputs(rID);\n }\n\n public setResourceError(rId: AnyResourceRef, ref: AnyResourceRef): void {\n this.sendVoidAsync({\n oneofKind: 'resourceSetError',\n resourceSetError: { resourceId: toResourceId(rId), errorResourceId: toResourceId(ref) },\n });\n }\n\n //\n // Fields\n //\n\n public createField(fId: AnyFieldRef, fieldType: FieldType, value?: AnyRef): void {\n this._stat.fieldsCreated++;\n this.sendVoidAsync({\n oneofKind: 'fieldCreate',\n fieldCreate: { type: fieldTypeToProto(fieldType), id: toFieldId(fId) },\n });\n if (value !== undefined) this.setField(fId, value);\n }\n\n public fieldExists(fId: AnyFieldRef): Promise<boolean> {\n return this.sendSingleAndParse(\n {\n oneofKind: 'fieldExists',\n fieldExists: { field: toFieldId(fId) },\n },\n (r) => r.fieldExists.exists,\n );\n }\n\n public setField(fId: AnyFieldRef, ref: AnyRef): void {\n this._stat.fieldsSet++;\n if (isResource(ref))\n this.sendVoidAsync({\n oneofKind: 'fieldSet',\n fieldSet: {\n field: toFieldId(fId),\n value: {\n resourceId: toResourceId(ref),\n fieldName: '', // default value, read as undefined\n },\n },\n });\n else\n this.sendVoidAsync({\n oneofKind: 'fieldSet',\n fieldSet: {\n field: toFieldId(fId),\n value: toFieldId(ref),\n },\n });\n }\n\n public setFieldError(fId: AnyFieldRef, ref: AnyResourceRef): void {\n this._stat.fieldsSet++;\n this.sendVoidAsync({\n oneofKind: 'fieldSetError',\n fieldSetError: { field: toFieldId(fId), errResourceId: toResourceId(ref) },\n });\n }\n\n public getField(fId: AnyFieldRef): Promise<FieldData> {\n this._stat.fieldsGet++;\n return this.sendSingleAndParse(\n { oneofKind: 'fieldGet', fieldGet: { field: toFieldId(fId) } },\n (r) => protoToField(notEmpty(r.fieldGet.field)),\n );\n }\n\n @tracked\n public async getFieldIfExists(fId: AnyFieldRef): Promise<FieldData | undefined> {\n return notFoundToUndefined(async () => await this.getField(fId));\n }\n\n public resetField(fId: AnyFieldRef): void {\n this.sendVoidAsync({ oneofKind: 'fieldReset', fieldReset: { field: toFieldId(fId) } });\n }\n\n public removeField(fId: AnyFieldRef): void {\n this.sendVoidAsync({ oneofKind: 'fieldRemove', fieldRemove: { field: toFieldId(fId) } });\n }\n\n //\n // KV\n //\n\n @tracked\n public async listKeyValues(rId: AnyResourceRef): Promise<KeyValue[]> {\n const result = await this.sendMultiAndParse(\n {\n oneofKind: 'resourceKeyValueList',\n resourceKeyValueList: { resourceId: toResourceId(rId), startFrom: '', limit: 0 },\n },\n (r) => r.map((e) => e.resourceKeyValueList.record!),\n );\n\n this._stat.kvListRequests++;\n this._stat.kvListEntries += result.length;\n for (const kv of result) this._stat.kvListBytes += kv.key.length + kv.value.length;\n\n return result;\n }\n\n @tracked\n public async listKeyValuesString(rId: AnyResourceRef): Promise<KeyValueString[]> {\n return (await this.listKeyValues(rId)).map(({ key, value }) => ({\n key,\n value: Buffer.from(value).toString(),\n }));\n }\n\n @tracked\n public async listKeyValuesIfResourceExists(rId: AnyResourceRef): Promise<KeyValue[] | undefined> {\n return notFoundToUndefined(async () => await this.listKeyValues(rId));\n }\n\n @tracked\n public async listKeyValuesStringIfResourceExists(\n rId: AnyResourceRef,\n ): Promise<KeyValueString[] | undefined> {\n return notFoundToUndefined(async () => await this.listKeyValuesString(rId));\n }\n\n public setKValue(rId: AnyResourceRef, key: string, value: Uint8Array | string): void {\n this._stat.kvSetRequests++;\n this._stat.kvSetBytes++;\n this.sendVoidAsync({\n oneofKind: 'resourceKeyValueSet',\n resourceKeyValueSet: {\n resourceId: toResourceId(rId),\n key,\n value: toBytes(value),\n },\n });\n }\n\n public deleteKValue(rId: AnyResourceRef, key: string): void {\n this.sendVoidAsync({\n oneofKind: 'resourceKeyValueDelete',\n resourceKeyValueDelete: {\n resourceId: toResourceId(rId),\n key,\n },\n });\n }\n\n @tracked\n public async getKValue(rId: AnyResourceRef, key: string): Promise<Uint8Array> {\n const result = await this.sendSingleAndParse(\n {\n oneofKind: 'resourceKeyValueGet',\n resourceKeyValueGet: { resourceId: toResourceId(rId), key },\n },\n (r) => r.resourceKeyValueGet.value,\n );\n\n this._stat.kvGetRequests++;\n this._stat.kvGetBytes += result.length;\n\n return result;\n }\n\n @tracked\n public async getKValueString(rId: AnyResourceRef, key: string): Promise<string> {\n return Buffer.from(await this.getKValue(rId, key)).toString();\n }\n\n @tracked\n public async getKValueJson<T>(rId: AnyResourceRef, key: string): Promise<T> {\n return JSON.parse(await this.getKValueString(rId, key)) as T;\n }\n\n @tracked\n public async getKValueIfExists(\n rId: AnyResourceRef,\n key: string,\n ): Promise<Uint8Array | undefined> {\n const result = await this.sendSingleAndParse(\n {\n oneofKind: 'resourceKeyValueGetIfExists',\n resourceKeyValueGetIfExists: { resourceId: toResourceId(rId), key },\n },\n (r) =>\n r.resourceKeyValueGetIfExists.exists ? r.resourceKeyValueGetIfExists.value : undefined,\n );\n\n this._stat.kvGetRequests++;\n this._stat.kvGetBytes += result?.length ?? 0;\n\n return result;\n }\n\n @tracked\n public async getKValueStringIfExists(\n rId: AnyResourceRef,\n key: string,\n ): Promise<string | undefined> {\n const data = await this.getKValueIfExists(rId, key);\n return data === undefined ? undefined : Buffer.from(data).toString();\n }\n\n @tracked\n public async getKValueJsonIfExists<T>(rId: AnyResourceRef, key: string): Promise<T | undefined> {\n const str = await this.getKValueString(rId, key);\n if (str === undefined) return undefined;\n return JSON.parse(str) as T;\n }\n\n //\n // Cache\n //\n // TODO\n\n //\n // High level ops\n //\n\n /** Resolves existing or create first level resource from */\n public getFutureFieldValue(rId: AnyRef, fieldName: string, fieldType: FutureFieldType): FieldRef {\n const data = Buffer.from(JSON.stringify({ fieldName, fieldType }));\n const getFieldResource = this.createEphemeral({ name: 'json/getField', version: '1' }, data);\n this.setField({ resourceId: getFieldResource, fieldName: 'resource' }, rId);\n return { resourceId: getFieldResource, fieldName: 'result' };\n }\n\n //\n // Technical\n //\n\n public async getGlobalTxId() {\n this.globalTxIdWasAwaited = true;\n return await this.globalTxId;\n }\n\n /** Closes output event stream */\n public async complete() {\n if (this._completed) return;\n this._completed = true;\n const completeResult = this.track(this.ll.complete());\n await this.drainAndAwaitPendingOps();\n await completeResult;\n }\n\n /** Await incoming message loop termination and throw\n * any leftover errors if it was unsuccessful */\n public async await() {\n await this.ll.await();\n }\n\n //\n // Helpers\n //\n\n private nextLocalResourceId(root: boolean): LocalResourceId {\n return createLocalResourceId(root, ++this.localResourceIdCounter, this.localTxId);\n }\n\n private static localTxIdCounter = 0;\n\n private static nextLocalTxId() {\n PlTransaction.localTxIdCounter++;\n if (PlTransaction.localTxIdCounter === MaxTxId) PlTransaction.localTxIdCounter = 1;\n return PlTransaction.localTxIdCounter;\n }\n}\n"],"names":["isLocalResourceId","isNullResourceId","isNotFoundError","__esDecorate","__runInitializers","PromiseTracker","initialTxStatWithoutTime","TxAPI_Open_Request_WritableTx","notEmpty","ensureResourceIdNotNull","protoToResource","canonicalJsonBytes","JsonObject","canonicalJsonGzBytes","JsonGzObject","ErrorResourceType","deepFreeze","extractBasicResourceData","fieldTypeToProto","protoToField","toBytes","createLocalResourceId","MaxTxId"],"mappings":"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"}
1
+ {"version":3,"file":"transaction.cjs","sources":["../../src/core/transaction.ts"],"sourcesContent":["// TODO: fix this\n/* eslint-disable no-prototype-builtins */\nimport type {\n AnyResourceId,\n LocalResourceId,\n OptionalResourceId,\n BasicResourceData,\n FieldData,\n FieldType,\n ResourceData,\n ResourceId,\n ResourceType,\n FutureFieldType,\n} from \"./types\";\nimport {\n createLocalResourceId,\n ensureResourceIdNotNull,\n MaxTxId,\n isLocalResourceId,\n extractBasicResourceData,\n isNullResourceId,\n} from \"./types\";\nimport type {\n ClientMessageRequest,\n LLPlTransaction,\n OneOfKind,\n ServerMessageResponse,\n} from \"./ll_transaction\";\nimport { TxAPI_Open_Request_WritableTx } from \"../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api\";\nimport type { NonUndefined } from \"utility-types\";\nimport { toBytes } from \"../util/util\";\nimport { fieldTypeToProto, protoToField, protoToResource } from \"./type_conversion\";\nimport {\n canonicalJsonBytes,\n canonicalJsonGzBytes,\n deepFreeze,\n notEmpty,\n} from \"@milaboratories/ts-helpers\";\nimport { isNotFoundError } from \"./errors\";\nimport type { FinalResourceDataPredicate } from \"./final\";\nimport type { LRUCache } from \"lru-cache\";\nimport type { ResourceDataCacheRecord } from \"./cache\";\nimport type { TxStat } from \"./stat\";\nimport { initialTxStatWithoutTime } from \"./stat\";\nimport type { ErrorResourceData } from \"./error_resource\";\nimport { ErrorResourceType } from \"./error_resource\";\nimport { JsonGzObject, JsonObject } from \"../helpers/pl\";\nimport { PromiseTracker } from \"./PromiseTracker\";\n\n/** Reference to resource, used only within transaction */\nexport interface ResourceRef {\n /** Global resource id of newly created resources, become available only\n * after response for the corresponding creation request is received. */\n readonly globalId: Promise<ResourceId>;\n\n /** Transaction-local resource id is assigned right after resource creation\n * request is sent, and can be used right away */\n readonly localId: LocalResourceId;\n}\n\n/** Key-Value pair from resource-attached KV storage */\nexport interface KeyValue {\n key: string;\n value: Uint8Array;\n}\n\n/** Key-Value pair from resource-attached KV storage */\nexport interface KeyValueString {\n key: string;\n value: string;\n}\n\ninterface _FieldId<RId> {\n /** Parent resource id */\n resourceId: RId;\n /** Field name */\n fieldName: string;\n}\n\nexport type FieldId = _FieldId<ResourceId>;\nexport type FieldRef = _FieldId<ResourceRef>;\nexport type LocalFieldId = _FieldId<LocalResourceId>;\nexport type AnyFieldId = FieldId | LocalFieldId;\n\nexport type AnyResourceRef = ResourceRef | ResourceId;\nexport type AnyFieldRef = _FieldId<AnyResourceRef>; // FieldRef | FieldId\nexport type AnyRef = AnyResourceRef | AnyFieldRef;\n\nexport function isField(ref: AnyRef): ref is AnyFieldRef {\n return ref.hasOwnProperty(\"resourceId\") && ref.hasOwnProperty(\"fieldName\");\n}\n\nexport function isResource(ref: AnyRef): ref is AnyResourceRef {\n return (\n typeof ref === \"bigint\" || (ref.hasOwnProperty(\"globalId\") && ref.hasOwnProperty(\"localId\"))\n );\n}\n\nexport function isResourceId(ref: AnyRef): ref is ResourceId {\n return typeof ref === \"bigint\" && !isLocalResourceId(ref) && !isNullResourceId(ref);\n}\n\nexport function isFieldRef(ref: AnyFieldRef): ref is FieldRef {\n return isResourceRef(ref.resourceId);\n}\n\nexport function isResourceRef(ref: AnyResourceRef): ref is ResourceRef {\n return ref.hasOwnProperty(\"globalId\") && ref.hasOwnProperty(\"localId\");\n}\n\nexport function toFieldId(ref: AnyFieldRef): AnyFieldId {\n if (isFieldRef(ref)) return { resourceId: ref.resourceId.localId, fieldName: ref.fieldName };\n else return ref as FieldId;\n}\n\nexport async function toGlobalFieldId(ref: AnyFieldRef): Promise<FieldId> {\n if (isFieldRef(ref))\n return { resourceId: await ref.resourceId.globalId, fieldName: ref.fieldName };\n else return ref as FieldId;\n}\n\nexport function toResourceId(ref: AnyResourceRef): AnyResourceId {\n if (isResourceRef(ref)) return ref.localId;\n else return ref;\n}\n\nexport async function toGlobalResourceId(ref: AnyResourceRef): Promise<ResourceId> {\n if (isResourceRef(ref)) return await ref.globalId;\n else return ref;\n}\n\nexport function field(resourceId: AnyResourceRef, fieldName: string): AnyFieldRef {\n return { resourceId, fieldName };\n}\n\n/** If transaction commit failed due to write conflicts */\nexport class TxCommitConflict extends Error {\n name = \"TxCommitConflict\";\n}\n\nasync function notFoundToUndefined<T>(cb: () => Promise<T>): Promise<T | undefined> {\n try {\n return await cb();\n } catch (e) {\n if (isNotFoundError(e)) return undefined;\n throw e;\n }\n}\n\n/**\n * Decorator that wraps the method's returned promise with this.track()\n * This ensures that the promise will be awaited before the transaction is completed.\n */\nfunction tracked<T extends (this: PlTransaction, ...a: any[]) => Promise<any>>(\n value: T,\n _context: ClassMethodDecoratorContext,\n) {\n return function (this: PlTransaction, ...args: Parameters<T>): ReturnType<T> {\n return this.track(value.apply(this, args)) as ReturnType<T>;\n } as unknown as T;\n}\n\n/**\n * Each platform transaction has 3 stages:\n * - initialization (txOpen message -> txInfo response)\n * - communication (create resources, fields, references and so on)\n * - finalization (txCommit or txDiscard message)\n *\n * This class encapsulates finalization stage and provides ready-to-communication transaction object.\n * */\nexport class PlTransaction {\n private readonly globalTxId: Promise<bigint>;\n private readonly localTxId: number = PlTransaction.nextLocalTxId();\n\n /** Used in caching */\n private readonly txOpenTimestamp = Date.now();\n\n private localResourceIdCounter = 0;\n\n /** Store logical tx open / closed state to prevent invalid sequence of requests.\n * True means output stream was completed.\n * Contract: there must be no async operations between setting this field to true and sending complete signal to stream. */\n private _completed = false;\n\n private globalTxIdWasAwaited: boolean = false;\n\n public readonly pending = new PromiseTracker();\n\n private readonly _startTime = Date.now();\n private readonly _stat = initialTxStatWithoutTime();\n public get stat(): TxStat {\n return {\n ...this._stat,\n timeMs: Date.now() - this._startTime,\n };\n }\n\n constructor(\n private readonly ll: LLPlTransaction,\n public readonly name: string,\n public readonly writable: boolean,\n private readonly _clientRoot: OptionalResourceId,\n private readonly finalPredicate: FinalResourceDataPredicate,\n private readonly sharedResourceDataCache: LRUCache<ResourceId, ResourceDataCacheRecord>,\n private readonly enableFormattedErrors: boolean = false,\n ) {\n // initiating transaction\n this.globalTxId = this.sendSingleAndParse(\n {\n oneofKind: \"txOpen\",\n txOpen: {\n name,\n enableFormattedErrors,\n writable: writable\n ? TxAPI_Open_Request_WritableTx.WRITABLE\n : TxAPI_Open_Request_WritableTx.NOT_WRITABLE,\n },\n },\n (r) => notEmpty(r.txOpen.tx?.id),\n );\n\n void this.track(this.globalTxId);\n\n // To avoid floating promise\n this.globalTxId.catch((err) => {\n if (!this.globalTxIdWasAwaited) {\n console.warn(err);\n }\n });\n\n // Adding stats\n this._stat.txCount++;\n }\n\n /**\n * Collect all pending promises for the transaction finalization.\n */\n public track<T>(promiseOrCallback: Promise<T> | (() => Promise<T>)): Promise<T> {\n return this.pending.track(promiseOrCallback);\n }\n\n private async drainAndAwaitPendingOps(): Promise<void> {\n // awaiting these pending operations first, to catch any errors\n await this.pending.awaitAll();\n }\n\n private sendSingleAndParse<Kind extends NonUndefined<ClientMessageRequest[\"oneofKind\"]>, T>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n parser: (resp: OneOfKind<ServerMessageResponse, Kind>) => T,\n ): Promise<T> {\n return this.pending.track(async () => {\n const rawResponsePromise = this.ll.send(r, false);\n\n void this.pending.track(rawResponsePromise);\n\n await this.drainAndAwaitPendingOps();\n\n // awaiting our result, and parsing the response\n return parser(await rawResponsePromise);\n });\n }\n\n private sendMultiAndParse<Kind extends NonUndefined<ClientMessageRequest[\"oneofKind\"]>, T>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n parser: (resp: OneOfKind<ServerMessageResponse, Kind>[]) => T,\n ): Promise<T> {\n return this.pending.track(async () => {\n const rawResponsePromise = this.ll.send(r, true);\n\n void this.pending.track(rawResponsePromise);\n\n await this.drainAndAwaitPendingOps();\n\n // awaiting our result, and parsing the response\n return parser(await rawResponsePromise);\n });\n }\n\n private async sendVoidSync<Kind extends NonUndefined<ClientMessageRequest[\"oneofKind\"]>>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n ): Promise<void> {\n await this.ll.send(r, false);\n }\n\n /** Requests sent with this method should never produce recoverable errors */\n private sendVoidAsync<Kind extends NonUndefined<ClientMessageRequest[\"oneofKind\"]>>(\n r: OneOfKind<ClientMessageRequest, Kind>,\n ): void {\n void this.track(this.sendVoidSync(r));\n }\n\n private checkTxOpen() {\n if (this._completed) throw new Error(\"Transaction already closed\");\n }\n\n public get completed() {\n return this._completed;\n }\n\n /** Commit & closes transaction. {@link TxCommitConflict} is thrown on\n * commit conflicts. */\n public async commit() {\n this.checkTxOpen();\n\n // tx will accept no requests after this one\n this._completed = true;\n\n if (!this.writable) {\n // no need to explicitly commit or reject read-only tx\n const completeResult = this.track(this.ll.complete());\n await this.drainAndAwaitPendingOps();\n await completeResult;\n await this.ll.await();\n } else {\n const commitResponse = this.track(\n this.sendSingleAndParse({ oneofKind: \"txCommit\", txCommit: {} }, (r) => r.txCommit.success),\n );\n\n // send closing frame right after commit to save some time on round-trips\n const completeResult = this.track(this.ll.complete());\n\n // now when we pushed all packets into the stream, we should wait for any\n // pending void operations from before, to catch any errors\n await this.drainAndAwaitPendingOps();\n\n if (!(await commitResponse)) throw new TxCommitConflict();\n\n await completeResult;\n\n // await event-loop completion\n await this.ll.await();\n }\n }\n\n public async discard() {\n this.checkTxOpen();\n\n // tx will accept no requests after this one\n this._completed = true;\n\n const discardResponse = this.sendVoidSync({ oneofKind: \"txDiscard\", txDiscard: {} });\n void this.track(discardResponse);\n // send closing frame right after commit to save some time on round-trips\n const completeResult = this.track(this.ll.complete());\n\n // now when we pushed all packets into the stream, we should wait for any\n // pending void operations from before, to catch any errors\n await this.drainAndAwaitPendingOps();\n\n await discardResponse;\n await completeResult;\n await this.ll.await();\n }\n\n //\n // Main tx methods\n //\n\n public get clientRoot(): ResourceId {\n return ensureResourceIdNotNull(this._clientRoot);\n }\n\n //\n // Resources\n //\n\n public createSingleton(\n name: string,\n type: ResourceType,\n errorIfExists: boolean = false,\n ): ResourceRef {\n const localId = this.nextLocalResourceId(false);\n\n const globalId = this.sendSingleAndParse(\n {\n oneofKind: \"resourceCreateSingleton\",\n resourceCreateSingleton: {\n type,\n id: localId,\n data: Buffer.from(name),\n errorIfExists,\n },\n },\n (r) => r.resourceCreateSingleton.resourceId as ResourceId,\n );\n\n void this.track(globalId);\n\n return { globalId, localId };\n }\n\n public getSingleton(name: string, loadFields: true): Promise<ResourceData>;\n public getSingleton(name: string, loadFields: false): Promise<BasicResourceData>;\n public getSingleton(\n name: string,\n loadFields: boolean = true,\n ): Promise<BasicResourceData | ResourceData> {\n return this.sendSingleAndParse(\n {\n oneofKind: \"resourceGetSingleton\",\n resourceGetSingleton: {\n data: Buffer.from(name),\n loadFields,\n },\n },\n (r) => protoToResource(notEmpty(r.resourceGetSingleton.resource)),\n );\n }\n\n private createResource<Kind extends NonUndefined<ClientMessageRequest[\"oneofKind\"]>>(\n root: boolean,\n req: (localId: LocalResourceId) => OneOfKind<ClientMessageRequest, Kind>,\n parser: (resp: OneOfKind<ServerMessageResponse, Kind>) => bigint,\n ): ResourceRef {\n const localId = this.nextLocalResourceId(root);\n\n const globalId = this.sendSingleAndParse(req(localId), (r) => parser(r) as ResourceId);\n\n void this.track(globalId);\n\n return { globalId, localId };\n }\n\n public createRoot(type: ResourceType): ResourceRef {\n this._stat.rootsCreated++;\n return this.createResource(\n true,\n (localId) => ({ oneofKind: \"resourceCreateRoot\", resourceCreateRoot: { type, id: localId } }),\n (r) => r.resourceCreateRoot.resourceId,\n );\n }\n\n public createStruct(type: ResourceType, data?: Uint8Array | string): ResourceRef {\n this._stat.structsCreated++;\n this._stat.structsCreatedDataBytes += data?.length ?? 0;\n return this.createResource(\n false,\n (localId) => ({\n oneofKind: \"resourceCreateStruct\",\n resourceCreateStruct: {\n type,\n id: localId,\n data:\n data === undefined ? undefined : typeof data === \"string\" ? Buffer.from(data) : data,\n },\n }),\n (r) => r.resourceCreateStruct.resourceId,\n );\n }\n\n public createEphemeral(type: ResourceType, data?: Uint8Array | string): ResourceRef {\n this._stat.ephemeralsCreated++;\n this._stat.ephemeralsCreatedDataBytes += data?.length ?? 0;\n return this.createResource(\n false,\n (localId) => ({\n oneofKind: \"resourceCreateEphemeral\",\n resourceCreateEphemeral: {\n type,\n id: localId,\n data:\n data === undefined ? undefined : typeof data === \"string\" ? Buffer.from(data) : data,\n },\n }),\n (r) => r.resourceCreateEphemeral.resourceId,\n );\n }\n\n public createValue(\n type: ResourceType,\n data: Uint8Array | string,\n errorIfExists: boolean = false,\n ): ResourceRef {\n this._stat.valuesCreated++;\n this._stat.valuesCreatedDataBytes += data?.length ?? 0;\n return this.createResource(\n false,\n (localId) => ({\n oneofKind: \"resourceCreateValue\",\n resourceCreateValue: {\n type,\n id: localId,\n data: typeof data === \"string\" ? Buffer.from(data) : data,\n errorIfExists,\n },\n }),\n (r) => r.resourceCreateValue.resourceId,\n );\n }\n\n public createJsonValue(data: unknown): ResourceRef {\n const jsonData = canonicalJsonBytes(data);\n return this.createValue(JsonObject, jsonData, false);\n }\n\n public createJsonGzValue(data: unknown, minSizeToGzip: number | undefined = 16_384): ResourceRef {\n const { data: jsonData, isGzipped } = canonicalJsonGzBytes(data, minSizeToGzip);\n return this.createValue(isGzipped ? JsonGzObject : JsonObject, jsonData, false);\n }\n\n public createError(message: string): ResourceRef {\n return this.createValue(\n ErrorResourceType,\n JSON.stringify({ message } satisfies ErrorResourceData),\n );\n }\n\n public setResourceName(name: string, rId: AnyResourceRef): void {\n this.sendVoidAsync({\n oneofKind: \"resourceNameSet\",\n resourceNameSet: { resourceId: toResourceId(rId), name },\n });\n }\n\n public deleteResourceName(name: string): void {\n this.sendVoidAsync({ oneofKind: \"resourceNameDelete\", resourceNameDelete: { name } });\n }\n\n public getResourceByName(name: string): Promise<ResourceId> {\n return this.sendSingleAndParse(\n { oneofKind: \"resourceNameGet\", resourceNameGet: { name } },\n (r) => ensureResourceIdNotNull(r.resourceNameGet.resourceId as OptionalResourceId),\n );\n }\n\n public checkResourceNameExists(name: string): Promise<boolean> {\n return this.sendSingleAndParse(\n { oneofKind: \"resourceNameExists\", resourceNameExists: { name } },\n (r) => r.resourceNameExists.exists,\n );\n }\n\n public removeResource(rId: ResourceId): void {\n this.sendVoidAsync({ oneofKind: \"resourceRemove\", resourceRemove: { id: rId } });\n }\n\n public resourceExists(rId: ResourceId): Promise<boolean> {\n return this.sendSingleAndParse(\n { oneofKind: \"resourceExists\", resourceExists: { resourceId: rId } },\n (r) => r.resourceExists.exists,\n );\n }\n\n /** This method may return stale resource state from cache if resource was removed */\n public async getResourceData(rId: AnyResourceRef, loadFields: true): Promise<ResourceData>;\n /** This method may return stale resource state from cache if resource was removed */\n public async getResourceData(rId: AnyResourceRef, loadFields: false): Promise<BasicResourceData>;\n /** This method may return stale resource state from cache if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: boolean,\n ): Promise<BasicResourceData | ResourceData>;\n /** This method may return stale resource state from cache if ignoreCache == false if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: true,\n ignoreCache: boolean,\n ): Promise<ResourceData>;\n /** This method may return stale resource state from cache if ignoreCache == false if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: false,\n ignoreCache: boolean,\n ): Promise<BasicResourceData>;\n /** This method may return stale resource state from cache if ignoreCache == false if resource was removed */\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: boolean,\n ignoreCache: boolean,\n ): Promise<BasicResourceData | ResourceData>;\n @tracked\n public async getResourceData(\n rId: AnyResourceRef,\n loadFields: boolean = true,\n ignoreCache: boolean = false,\n ): Promise<BasicResourceData | ResourceData> {\n if (!ignoreCache && !isResourceRef(rId) && !isLocalResourceId(rId)) {\n // checking if we can return result from cache\n const fromCache = this.sharedResourceDataCache.get(rId);\n if (fromCache && fromCache.cacheTxOpenTimestamp < this.txOpenTimestamp) {\n if (!loadFields) {\n this._stat.rGetDataCacheHits++;\n this._stat.rGetDataCacheBytes += fromCache.basicData.data?.length ?? 0;\n return fromCache.basicData;\n } else if (fromCache.data) {\n this._stat.rGetDataCacheHits++;\n this._stat.rGetDataCacheBytes += fromCache.basicData.data?.length ?? 0;\n this._stat.rGetDataCacheFields += fromCache.data.fields.length;\n return fromCache.data;\n }\n }\n }\n\n const result = await this.sendSingleAndParse(\n {\n oneofKind: \"resourceGet\",\n resourceGet: { resourceId: toResourceId(rId), loadFields: loadFields },\n },\n (r) => protoToResource(notEmpty(r.resourceGet.resource)),\n );\n\n this._stat.rGetDataNetRequests++;\n this._stat.rGetDataNetBytes += result.data?.length ?? 0;\n this._stat.rGetDataNetFields += result.fields.length;\n\n // we will cache only final resource data states\n // caching result even if we were ignore the cache\n if (!isResourceRef(rId) && !isLocalResourceId(rId) && this.finalPredicate(result)) {\n deepFreeze(result);\n const fromCache = this.sharedResourceDataCache.get(rId);\n if (fromCache) {\n if (loadFields && !fromCache.data) {\n fromCache.data = result;\n // updating timestamp because we updated the record\n fromCache.cacheTxOpenTimestamp = this.txOpenTimestamp;\n }\n } else {\n const basicData = extractBasicResourceData(result);\n deepFreeze(basicData);\n if (loadFields)\n this.sharedResourceDataCache.set(rId, {\n basicData,\n data: result,\n cacheTxOpenTimestamp: this.txOpenTimestamp,\n });\n else\n this.sharedResourceDataCache.set(rId, {\n basicData,\n data: undefined,\n cacheTxOpenTimestamp: this.txOpenTimestamp,\n });\n }\n }\n\n return result;\n }\n\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: true,\n ): Promise<ResourceData | undefined>;\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: false,\n ): Promise<BasicResourceData | undefined>;\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: boolean,\n ): Promise<BasicResourceData | ResourceData | undefined>;\n @tracked\n public async getResourceDataIfExists(\n rId: AnyResourceRef,\n loadFields: boolean = true,\n ): Promise<BasicResourceData | ResourceData | undefined> {\n // calling this method will ignore cache, because user intention is to detect resource absence\n // which cache will prevent\n const result = await notFoundToUndefined(\n async () => await this.getResourceData(rId, loadFields, true),\n );\n\n // cleaning cache record if resource was removed from the db\n if (result === undefined && !isResourceRef(rId) && !isLocalResourceId(rId))\n this.sharedResourceDataCache.delete(rId);\n\n return result;\n }\n\n /**\n * Inform platform that resource will not get any new input fields.\n * This is required, when client creates resource without schema and wants\n * controller to start calculations.\n * Most controllers will not start calculations even when all inputs\n * have their values, if inputs list is not locked.\n */\n public lockInputs(rId: AnyResourceRef): void {\n this._stat.inputsLocked++;\n this.sendVoidAsync({\n oneofKind: \"resourceLockInputs\",\n resourceLockInputs: { resourceId: toResourceId(rId) },\n });\n }\n\n /**\n * Inform platform that resource will not get any new output fields.\n * This is required for resource to pass deduplication.\n */\n public lockOutputs(rId: AnyResourceRef): void {\n this._stat.outputsLocked++;\n this.sendVoidAsync({\n oneofKind: \"resourceLockOutputs\",\n resourceLockOutputs: { resourceId: toResourceId(rId) },\n });\n }\n\n public lock(rID: AnyResourceRef): void {\n this.lockInputs(rID);\n this.lockOutputs(rID);\n }\n\n public setResourceError(rId: AnyResourceRef, ref: AnyResourceRef): void {\n this.sendVoidAsync({\n oneofKind: \"resourceSetError\",\n resourceSetError: { resourceId: toResourceId(rId), errorResourceId: toResourceId(ref) },\n });\n }\n\n //\n // Fields\n //\n\n public createField(fId: AnyFieldRef, fieldType: FieldType, value?: AnyRef): void {\n this._stat.fieldsCreated++;\n this.sendVoidAsync({\n oneofKind: \"fieldCreate\",\n fieldCreate: { type: fieldTypeToProto(fieldType), id: toFieldId(fId) },\n });\n if (value !== undefined) this.setField(fId, value);\n }\n\n public fieldExists(fId: AnyFieldRef): Promise<boolean> {\n return this.sendSingleAndParse(\n {\n oneofKind: \"fieldExists\",\n fieldExists: { field: toFieldId(fId) },\n },\n (r) => r.fieldExists.exists,\n );\n }\n\n public setField(fId: AnyFieldRef, ref: AnyRef): void {\n this._stat.fieldsSet++;\n if (isResource(ref))\n this.sendVoidAsync({\n oneofKind: \"fieldSet\",\n fieldSet: {\n field: toFieldId(fId),\n value: {\n resourceId: toResourceId(ref),\n fieldName: \"\", // default value, read as undefined\n },\n },\n });\n else\n this.sendVoidAsync({\n oneofKind: \"fieldSet\",\n fieldSet: {\n field: toFieldId(fId),\n value: toFieldId(ref),\n },\n });\n }\n\n public setFieldError(fId: AnyFieldRef, ref: AnyResourceRef): void {\n this._stat.fieldsSet++;\n this.sendVoidAsync({\n oneofKind: \"fieldSetError\",\n fieldSetError: { field: toFieldId(fId), errResourceId: toResourceId(ref) },\n });\n }\n\n public getField(fId: AnyFieldRef): Promise<FieldData> {\n this._stat.fieldsGet++;\n return this.sendSingleAndParse(\n { oneofKind: \"fieldGet\", fieldGet: { field: toFieldId(fId) } },\n (r) => protoToField(notEmpty(r.fieldGet.field)),\n );\n }\n\n @tracked\n public async getFieldIfExists(fId: AnyFieldRef): Promise<FieldData | undefined> {\n return notFoundToUndefined(async () => await this.getField(fId));\n }\n\n public resetField(fId: AnyFieldRef): void {\n this.sendVoidAsync({ oneofKind: \"fieldReset\", fieldReset: { field: toFieldId(fId) } });\n }\n\n public removeField(fId: AnyFieldRef): void {\n this.sendVoidAsync({ oneofKind: \"fieldRemove\", fieldRemove: { field: toFieldId(fId) } });\n }\n\n //\n // KV\n //\n\n @tracked\n public async listKeyValues(rId: AnyResourceRef): Promise<KeyValue[]> {\n const result = await this.sendMultiAndParse(\n {\n oneofKind: \"resourceKeyValueList\",\n resourceKeyValueList: { resourceId: toResourceId(rId), startFrom: \"\", limit: 0 },\n },\n (r) => r.map((e) => e.resourceKeyValueList.record!),\n );\n\n this._stat.kvListRequests++;\n this._stat.kvListEntries += result.length;\n for (const kv of result) this._stat.kvListBytes += kv.key.length + kv.value.length;\n\n return result;\n }\n\n @tracked\n public async listKeyValuesString(rId: AnyResourceRef): Promise<KeyValueString[]> {\n return (await this.listKeyValues(rId)).map(({ key, value }) => ({\n key,\n value: Buffer.from(value).toString(),\n }));\n }\n\n @tracked\n public async listKeyValuesIfResourceExists(rId: AnyResourceRef): Promise<KeyValue[] | undefined> {\n return notFoundToUndefined(async () => await this.listKeyValues(rId));\n }\n\n @tracked\n public async listKeyValuesStringIfResourceExists(\n rId: AnyResourceRef,\n ): Promise<KeyValueString[] | undefined> {\n return notFoundToUndefined(async () => await this.listKeyValuesString(rId));\n }\n\n public setKValue(rId: AnyResourceRef, key: string, value: Uint8Array | string): void {\n this._stat.kvSetRequests++;\n this._stat.kvSetBytes++;\n this.sendVoidAsync({\n oneofKind: \"resourceKeyValueSet\",\n resourceKeyValueSet: {\n resourceId: toResourceId(rId),\n key,\n value: toBytes(value),\n },\n });\n }\n\n public deleteKValue(rId: AnyResourceRef, key: string): void {\n this.sendVoidAsync({\n oneofKind: \"resourceKeyValueDelete\",\n resourceKeyValueDelete: {\n resourceId: toResourceId(rId),\n key,\n },\n });\n }\n\n @tracked\n public async getKValue(rId: AnyResourceRef, key: string): Promise<Uint8Array> {\n const result = await this.sendSingleAndParse(\n {\n oneofKind: \"resourceKeyValueGet\",\n resourceKeyValueGet: { resourceId: toResourceId(rId), key },\n },\n (r) => r.resourceKeyValueGet.value,\n );\n\n this._stat.kvGetRequests++;\n this._stat.kvGetBytes += result.length;\n\n return result;\n }\n\n @tracked\n public async getKValueString(rId: AnyResourceRef, key: string): Promise<string> {\n return Buffer.from(await this.getKValue(rId, key)).toString();\n }\n\n @tracked\n public async getKValueJson<T>(rId: AnyResourceRef, key: string): Promise<T> {\n return JSON.parse(await this.getKValueString(rId, key)) as T;\n }\n\n @tracked\n public async getKValueIfExists(\n rId: AnyResourceRef,\n key: string,\n ): Promise<Uint8Array | undefined> {\n const result = await this.sendSingleAndParse(\n {\n oneofKind: \"resourceKeyValueGetIfExists\",\n resourceKeyValueGetIfExists: { resourceId: toResourceId(rId), key },\n },\n (r) =>\n r.resourceKeyValueGetIfExists.exists ? r.resourceKeyValueGetIfExists.value : undefined,\n );\n\n this._stat.kvGetRequests++;\n this._stat.kvGetBytes += result?.length ?? 0;\n\n return result;\n }\n\n @tracked\n public async getKValueStringIfExists(\n rId: AnyResourceRef,\n key: string,\n ): Promise<string | undefined> {\n const data = await this.getKValueIfExists(rId, key);\n return data === undefined ? undefined : Buffer.from(data).toString();\n }\n\n @tracked\n public async getKValueJsonIfExists<T>(rId: AnyResourceRef, key: string): Promise<T | undefined> {\n const str = await this.getKValueString(rId, key);\n if (str === undefined) return undefined;\n return JSON.parse(str) as T;\n }\n\n //\n // Cache\n //\n // TODO\n\n //\n // High level ops\n //\n\n /** Resolves existing or create first level resource from */\n public getFutureFieldValue(rId: AnyRef, fieldName: string, fieldType: FutureFieldType): FieldRef {\n const data = Buffer.from(JSON.stringify({ fieldName, fieldType }));\n const getFieldResource = this.createEphemeral({ name: \"json/getField\", version: \"1\" }, data);\n this.setField({ resourceId: getFieldResource, fieldName: \"resource\" }, rId);\n return { resourceId: getFieldResource, fieldName: \"result\" };\n }\n\n //\n // Technical\n //\n\n public async getGlobalTxId() {\n this.globalTxIdWasAwaited = true;\n return await this.globalTxId;\n }\n\n /** Closes output event stream */\n public async complete() {\n if (this._completed) return;\n this._completed = true;\n const completeResult = this.track(this.ll.complete());\n await this.drainAndAwaitPendingOps();\n await completeResult;\n }\n\n /** Await incoming message loop termination and throw\n * any leftover errors if it was unsuccessful */\n public async await() {\n await this.ll.await();\n }\n\n //\n // Helpers\n //\n\n private nextLocalResourceId(root: boolean): LocalResourceId {\n return createLocalResourceId(root, ++this.localResourceIdCounter, this.localTxId);\n }\n\n private static localTxIdCounter = 0;\n\n private static nextLocalTxId() {\n PlTransaction.localTxIdCounter++;\n if (PlTransaction.localTxIdCounter === MaxTxId) PlTransaction.localTxIdCounter = 1;\n return PlTransaction.localTxIdCounter;\n }\n}\n"],"names":["isLocalResourceId","isNullResourceId","isNotFoundError","__esDecorate","__runInitializers","PromiseTracker","initialTxStatWithoutTime","TxAPI_Open_Request_WritableTx","notEmpty","ensureResourceIdNotNull","protoToResource","canonicalJsonBytes","JsonObject","canonicalJsonGzBytes","JsonGzObject","ErrorResourceType","deepFreeze","extractBasicResourceData","fieldTypeToProto","protoToField","toBytes","createLocalResourceId","MaxTxId"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import type { AnyResourceId, LocalResourceId, OptionalResourceId, BasicResourceData, FieldData, FieldType, ResourceData, ResourceId, ResourceType, FutureFieldType } from './types';
2
- import type { LLPlTransaction } from './ll_transaction';
3
- import type { FinalResourceDataPredicate } from './final';
4
- import type { LRUCache } from 'lru-cache';
5
- import type { ResourceDataCacheRecord } from './cache';
6
- import type { TxStat } from './stat';
7
- import { PromiseTracker } from './PromiseTracker';
1
+ import type { AnyResourceId, LocalResourceId, OptionalResourceId, BasicResourceData, FieldData, FieldType, ResourceData, ResourceId, ResourceType, FutureFieldType } from "./types";
2
+ import type { LLPlTransaction } from "./ll_transaction";
3
+ import type { FinalResourceDataPredicate } from "./final";
4
+ import type { LRUCache } from "lru-cache";
5
+ import type { ResourceDataCacheRecord } from "./cache";
6
+ import type { TxStat } from "./stat";
7
+ import { PromiseTracker } from "./PromiseTracker";
8
8
  /** Reference to resource, used only within transaction */
9
9
  export interface ResourceRef {
10
10
  /** Global resource id of newly created resources, become available only