@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.
- package/README.md +2 -1
- package/dist/core/PromiseTracker.cjs +1 -3
- package/dist/core/PromiseTracker.cjs.map +1 -1
- package/dist/core/PromiseTracker.d.ts.map +1 -1
- package/dist/core/PromiseTracker.js +1 -3
- package/dist/core/PromiseTracker.js.map +1 -1
- package/dist/core/StatefulPromise.cjs +4 -4
- package/dist/core/StatefulPromise.cjs.map +1 -1
- package/dist/core/StatefulPromise.d.ts +1 -1
- package/dist/core/StatefulPromise.d.ts.map +1 -1
- package/dist/core/StatefulPromise.js +4 -4
- package/dist/core/StatefulPromise.js.map +1 -1
- package/dist/core/advisory_locks.cjs +1 -1
- package/dist/core/advisory_locks.cjs.map +1 -1
- package/dist/core/advisory_locks.js +1 -1
- package/dist/core/advisory_locks.js.map +1 -1
- package/dist/core/auth.cjs.map +1 -1
- package/dist/core/auth.d.ts +1 -1
- package/dist/core/auth.js.map +1 -1
- package/dist/core/cache.d.ts +1 -1
- package/dist/core/client.cjs +14 -14
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.d.ts +11 -11
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +14 -14
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.cjs +39 -39
- package/dist/core/config.cjs.map +1 -1
- package/dist/core/config.d.ts +5 -5
- package/dist/core/config.js +39 -39
- package/dist/core/config.js.map +1 -1
- package/dist/core/default_client.cjs +23 -23
- package/dist/core/default_client.cjs.map +1 -1
- package/dist/core/default_client.d.ts +3 -3
- package/dist/core/default_client.js +23 -23
- package/dist/core/default_client.js.map +1 -1
- package/dist/core/driver.cjs +1 -1
- package/dist/core/driver.cjs.map +1 -1
- package/dist/core/driver.d.ts +5 -5
- package/dist/core/driver.js +1 -1
- package/dist/core/driver.js.map +1 -1
- package/dist/core/error_resource.cjs +2 -2
- package/dist/core/error_resource.cjs.map +1 -1
- package/dist/core/error_resource.d.ts +1 -1
- package/dist/core/error_resource.js +2 -2
- package/dist/core/error_resource.js.map +1 -1
- package/dist/core/errors.cjs +24 -24
- package/dist/core/errors.cjs.map +1 -1
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +24 -24
- package/dist/core/errors.js.map +1 -1
- package/dist/core/final.cjs +43 -43
- package/dist/core/final.cjs.map +1 -1
- package/dist/core/final.d.ts +3 -3
- package/dist/core/final.d.ts.map +1 -1
- package/dist/core/final.js +43 -43
- package/dist/core/final.js.map +1 -1
- package/dist/core/ll_client.cjs +50 -43
- package/dist/core/ll_client.cjs.map +1 -1
- package/dist/core/ll_client.d.ts +9 -9
- package/dist/core/ll_client.d.ts.map +1 -1
- package/dist/core/ll_client.js +50 -43
- package/dist/core/ll_client.js.map +1 -1
- package/dist/core/ll_transaction.cjs +9 -9
- package/dist/core/ll_transaction.cjs.map +1 -1
- package/dist/core/ll_transaction.d.ts +7 -7
- package/dist/core/ll_transaction.d.ts.map +1 -1
- package/dist/core/ll_transaction.js +9 -9
- package/dist/core/ll_transaction.js.map +1 -1
- package/dist/core/stat.cjs.map +1 -1
- package/dist/core/stat.d.ts +1 -1
- package/dist/core/stat.js.map +1 -1
- package/dist/core/transaction.cjs +46 -46
- package/dist/core/transaction.cjs.map +1 -1
- package/dist/core/transaction.d.ts +7 -7
- package/dist/core/transaction.d.ts.map +1 -1
- package/dist/core/transaction.js +46 -46
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/type_conversion.cjs +22 -22
- package/dist/core/type_conversion.cjs.map +1 -1
- package/dist/core/type_conversion.d.ts +3 -3
- package/dist/core/type_conversion.d.ts.map +1 -1
- package/dist/core/type_conversion.js +22 -22
- package/dist/core/type_conversion.js.map +1 -1
- package/dist/core/types.cjs +25 -25
- package/dist/core/types.cjs.map +1 -1
- package/dist/core/types.d.ts +7 -7
- package/dist/core/types.js +25 -25
- package/dist/core/types.js.map +1 -1
- package/dist/core/unauth_client.cjs +6 -4
- package/dist/core/unauth_client.cjs.map +1 -1
- package/dist/core/unauth_client.d.ts +4 -4
- package/dist/core/unauth_client.d.ts.map +1 -1
- package/dist/core/unauth_client.js +6 -4
- package/dist/core/unauth_client.js.map +1 -1
- package/dist/core/websocket_stream.cjs +22 -20
- package/dist/core/websocket_stream.cjs.map +1 -1
- package/dist/core/websocket_stream.d.ts +3 -3
- package/dist/core/websocket_stream.d.ts.map +1 -1
- package/dist/core/websocket_stream.js +22 -20
- package/dist/core/websocket_stream.js.map +1 -1
- package/dist/core/wire.d.ts +6 -6
- package/dist/core/wire.d.ts.map +1 -1
- package/dist/helpers/pl.cjs +19 -19
- package/dist/helpers/pl.cjs.map +1 -1
- package/dist/helpers/pl.d.ts +2 -2
- package/dist/helpers/pl.js +19 -19
- package/dist/helpers/pl.js.map +1 -1
- package/dist/helpers/poll.cjs +6 -6
- package/dist/helpers/poll.cjs.map +1 -1
- package/dist/helpers/poll.d.ts +4 -4
- package/dist/helpers/poll.d.ts.map +1 -1
- package/dist/helpers/poll.js +6 -6
- package/dist/helpers/poll.js.map +1 -1
- package/dist/helpers/retry_strategy.cjs +1 -1
- package/dist/helpers/retry_strategy.cjs.map +1 -1
- package/dist/helpers/retry_strategy.d.ts.map +1 -1
- package/dist/helpers/retry_strategy.js +1 -1
- package/dist/helpers/retry_strategy.js.map +1 -1
- package/dist/helpers/state_helpers.d.ts +2 -2
- package/dist/helpers/tx_helpers.cjs +2 -2
- package/dist/helpers/tx_helpers.cjs.map +1 -1
- package/dist/helpers/tx_helpers.d.ts +2 -2
- package/dist/helpers/tx_helpers.d.ts.map +1 -1
- package/dist/helpers/tx_helpers.js +2 -2
- package/dist/helpers/tx_helpers.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/proto-grpc/google/protobuf/struct.d.ts +1 -1
- package/dist/proto-grpc/google/protobuf/struct.d.ts.map +1 -1
- package/dist/proto-rest/index.cjs +4 -5
- package/dist/proto-rest/index.cjs.map +1 -1
- package/dist/proto-rest/index.d.ts +4 -4
- package/dist/proto-rest/index.d.ts.map +1 -1
- package/dist/proto-rest/index.js +4 -5
- package/dist/proto-rest/index.js.map +1 -1
- package/dist/proto-rest/plapi.d.ts.map +1 -1
- package/dist/test/tcp-proxy.cjs +11 -10
- package/dist/test/tcp-proxy.cjs.map +1 -1
- package/dist/test/tcp-proxy.d.ts +1 -1
- package/dist/test/tcp-proxy.d.ts.map +1 -1
- package/dist/test/tcp-proxy.js +11 -10
- package/dist/test/tcp-proxy.js.map +1 -1
- package/dist/test/test_config.cjs +21 -17
- package/dist/test/test_config.cjs.map +1 -1
- package/dist/test/test_config.d.ts +6 -6
- package/dist/test/test_config.d.ts.map +1 -1
- package/dist/test/test_config.js +21 -17
- package/dist/test/test_config.js.map +1 -1
- package/dist/util/pl.cjs +1 -1
- package/dist/util/pl.cjs.map +1 -1
- package/dist/util/pl.js +1 -1
- package/dist/util/pl.js.map +1 -1
- package/dist/util/util.cjs +1 -1
- package/dist/util/util.cjs.map +1 -1
- package/dist/util/util.js +1 -1
- package/dist/util/util.js.map +1 -1
- package/package.json +23 -23
- package/src/core/PromiseTracker.ts +3 -4
- package/src/core/StatefulPromise.ts +17 -8
- package/src/core/abstract_stream.ts +3 -4
- package/src/core/advisory_locks.ts +1 -1
- package/src/core/auth.ts +2 -2
- package/src/core/cache.ts +1 -1
- package/src/core/client.test.ts +25 -21
- package/src/core/client.ts +54 -45
- package/src/core/config.test.ts +44 -44
- package/src/core/config.ts +49 -49
- package/src/core/connectivity.test.ts +69 -63
- package/src/core/default_client.ts +46 -46
- package/src/core/driver.ts +6 -6
- package/src/core/error.test.ts +5 -5
- package/src/core/error_resource.ts +3 -3
- package/src/core/errors.ts +39 -31
- package/src/core/final.ts +48 -55
- package/src/core/ll_client.test.ts +53 -36
- package/src/core/ll_client.ts +125 -81
- package/src/core/ll_transaction.test.ts +75 -49
- package/src/core/ll_transaction.ts +37 -35
- package/src/core/stat.ts +1 -1
- package/src/core/transaction.test.ts +65 -65
- package/src/core/transaction.ts +91 -84
- package/src/core/type_conversion.ts +30 -31
- package/src/core/types.test.ts +6 -6
- package/src/core/types.ts +35 -35
- package/src/core/unauth_client.test.ts +18 -14
- package/src/core/unauth_client.ts +14 -12
- package/src/core/websocket_stream.test.ts +52 -52
- package/src/core/websocket_stream.ts +41 -37
- package/src/core/wire.ts +10 -8
- package/src/helpers/pl.ts +22 -22
- package/src/helpers/poll.ts +13 -27
- package/src/helpers/retry_strategy.ts +2 -4
- package/src/helpers/rich_resource_types.test.ts +2 -2
- package/src/helpers/state_helpers.ts +3 -3
- package/src/helpers/tx_helpers.ts +9 -7
- package/src/index.ts +16 -16
- package/src/proto-grpc/google/protobuf/struct.ts +1 -1
- package/src/proto-rest/index.ts +17 -18
- package/src/proto-rest/plapi.ts +1472 -1472
- package/src/test/tcp-proxy.ts +55 -54
- package/src/test/test_config.test.ts +3 -3
- package/src/test/test_config.ts +51 -46
- package/src/util/pl.ts +1 -1
- package/src/util/util.test.ts +5 -5
- package/src/util/util.ts +1 -1
- package/dist/helpers/rich_resource_types.d.ts +0 -2
- package/dist/helpers/rich_resource_types.d.ts.map +0 -1
- package/dist/helpers/smart_accessors.d.ts +0 -2
- package/dist/helpers/smart_accessors.d.ts.map +0 -1
- package/src/helpers/rich_resource_types.ts +0 -84
- 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(
|
|
16
|
+
return ref.hasOwnProperty("resourceId") && ref.hasOwnProperty("fieldName");
|
|
17
17
|
}
|
|
18
18
|
function isResource(ref) {
|
|
19
|
-
return (typeof ref ===
|
|
19
|
+
return (typeof ref === "bigint" || (ref.hasOwnProperty("globalId") && ref.hasOwnProperty("localId")));
|
|
20
20
|
}
|
|
21
21
|
function isResourceId(ref) {
|
|
22
|
-
return typeof 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(
|
|
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 =
|
|
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
319
|
+
oneofKind: "resourceCreateStruct",
|
|
320
320
|
resourceCreateStruct: {
|
|
321
321
|
type,
|
|
322
322
|
id: localId,
|
|
323
|
-
data: data === undefined ? undefined : typeof 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:
|
|
331
|
+
oneofKind: "resourceCreateEphemeral",
|
|
332
332
|
resourceCreateEphemeral: {
|
|
333
333
|
type,
|
|
334
334
|
id: localId,
|
|
335
|
-
data: data === undefined ? undefined : typeof 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:
|
|
343
|
+
oneofKind: "resourceCreateValue",
|
|
344
344
|
resourceCreateValue: {
|
|
345
345
|
type,
|
|
346
346
|
id: localId,
|
|
347
|
-
data: typeof 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:
|
|
365
|
+
oneofKind: "resourceNameSet",
|
|
366
366
|
resourceNameSet: { resourceId: toResourceId(rId), name },
|
|
367
367
|
});
|
|
368
368
|
}
|
|
369
369
|
deleteResourceName(name) {
|
|
370
|
-
this.sendVoidAsync({ oneofKind:
|
|
370
|
+
this.sendVoidAsync({ oneofKind: "resourceNameDelete", resourceNameDelete: { name } });
|
|
371
371
|
}
|
|
372
372
|
getResourceByName(name) {
|
|
373
|
-
return this.sendSingleAndParse({ oneofKind:
|
|
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:
|
|
376
|
+
return this.sendSingleAndParse({ oneofKind: "resourceNameExists", resourceNameExists: { name } }, (r) => r.resourceNameExists.exists);
|
|
377
377
|
}
|
|
378
378
|
removeResource(rId) {
|
|
379
|
-
this.sendVoidAsync({ oneofKind:
|
|
379
|
+
this.sendVoidAsync({ oneofKind: "resourceRemove", resourceRemove: { id: rId } });
|
|
380
380
|
}
|
|
381
381
|
resourceExists(rId) {
|
|
382
|
-
return this.sendSingleAndParse({ oneofKind:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
506
|
+
oneofKind: "fieldSet",
|
|
507
507
|
fieldSet: {
|
|
508
508
|
field: toFieldId(fId),
|
|
509
509
|
value: {
|
|
510
510
|
resourceId: toResourceId(ref),
|
|
511
|
-
fieldName:
|
|
511
|
+
fieldName: "", // default value, read as undefined
|
|
512
512
|
},
|
|
513
513
|
},
|
|
514
514
|
});
|
|
515
515
|
else
|
|
516
516
|
this.sendVoidAsync({
|
|
517
|
-
oneofKind:
|
|
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:
|
|
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:
|
|
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:
|
|
539
|
+
this.sendVoidAsync({ oneofKind: "fieldReset", fieldReset: { field: toFieldId(fId) } });
|
|
540
540
|
}
|
|
541
541
|
removeField(fId) {
|
|
542
|
-
this.sendVoidAsync({ oneofKind:
|
|
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:
|
|
550
|
-
resourceKeyValueList: { resourceId: toResourceId(rId), startFrom:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
636
|
-
this.setField({ resourceId: getFieldResource, fieldName:
|
|
637
|
-
return { resourceId: getFieldResource, fieldName:
|
|
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
|
|
2
|
-
import type { LLPlTransaction } from
|
|
3
|
-
import type { FinalResourceDataPredicate } from
|
|
4
|
-
import type { LRUCache } from
|
|
5
|
-
import type { ResourceDataCacheRecord } from
|
|
6
|
-
import type { TxStat } from
|
|
7
|
-
import { PromiseTracker } from
|
|
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
|