@proteinjs/db 1.54.0 → 1.54.2
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/CHANGELOG.md +22 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/test/index.js +1 -1
- package/dist/generated/test/index.js.map +1 -1
- package/dist/src/Columns.d.ts +12 -6
- package/dist/src/Columns.d.ts.map +1 -1
- package/dist/src/Columns.js +40 -65
- package/dist/src/Columns.js.map +1 -1
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +2 -5
- package/dist/src/Db.js.map +1 -1
- package/dist/src/Record.d.ts +19 -0
- package/dist/src/Record.d.ts.map +1 -1
- package/dist/src/Record.js +127 -45
- package/dist/src/Record.js.map +1 -1
- package/dist/src/Table.d.ts +18 -1
- package/dist/src/Table.d.ts.map +1 -1
- package/dist/src/encryption/EncryptionRecordHooks.d.ts +9 -4
- package/dist/src/encryption/EncryptionRecordHooks.d.ts.map +1 -1
- package/dist/src/encryption/EncryptionRecordHooks.js +65 -42
- package/dist/src/encryption/EncryptionRecordHooks.js.map +1 -1
- package/dist/src/services/TransactionRunnerService.d.ts +3 -1
- package/dist/src/services/TransactionRunnerService.d.ts.map +1 -1
- package/dist/src/transaction/TransactionRunner.d.ts +13 -5
- package/dist/src/transaction/TransactionRunner.d.ts.map +1 -1
- package/dist/src/transaction/TransactionRunner.js +48 -12
- package/dist/src/transaction/TransactionRunner.js.map +1 -1
- package/dist/test/DateTimeFieldReadOnFirstRead.test.d.ts +2 -0
- package/dist/test/DateTimeFieldReadOnFirstRead.test.d.ts.map +1 -0
- package/dist/test/DateTimeFieldReadOnFirstRead.test.js +238 -0
- package/dist/test/DateTimeFieldReadOnFirstRead.test.js.map +1 -0
- package/dist/test/HydrationBenchmark.test.d.ts +2 -0
- package/dist/test/HydrationBenchmark.test.d.ts.map +1 -0
- package/dist/test/HydrationBenchmark.test.js +299 -0
- package/dist/test/HydrationBenchmark.test.js.map +1 -0
- package/dist/test/SyncRowHydration.test.d.ts +2 -0
- package/dist/test/SyncRowHydration.test.d.ts.map +1 -0
- package/dist/test/SyncRowHydration.test.js +344 -0
- package/dist/test/SyncRowHydration.test.js.map +1 -0
- package/generated/index.ts +1 -1
- package/generated/test/index.ts +1 -1
- package/package.json +2 -2
- package/src/Columns.ts +14 -7
- package/src/Db.ts +3 -4
- package/src/Record.ts +151 -17
- package/src/Table.ts +21 -1
- package/src/encryption/EncryptionRecordHooks.ts +48 -17
- package/src/services/TransactionRunnerService.ts +3 -1
- package/src/transaction/TransactionRunner.ts +53 -13
- package/test/DateTimeFieldReadOnFirstRead.test.ts +162 -0
- package/test/HydrationBenchmark.test.ts +209 -0
- package/test/SyncRowHydration.test.ts +249 -0
package/dist/src/Record.js
CHANGED
|
@@ -186,57 +186,139 @@ var RecordSerializer = /** @class */ (function () {
|
|
|
186
186
|
});
|
|
187
187
|
});
|
|
188
188
|
};
|
|
189
|
+
/**
|
|
190
|
+
* A result set's rows → records, in ONE pass. A row whose hook and columns all answer directly
|
|
191
|
+
* is hydrated synchronously, and when every row did the array returns synchronously: no promise
|
|
192
|
+
* per row, no yield of the event loop between rows. A row that needs an await — a ciphertext
|
|
193
|
+
* envelope to decrypt, a column whose `deserialize` answers with a promise — settles through one
|
|
194
|
+
* promise for the whole set. The hook and the column seats are resolved once per serializer.
|
|
195
|
+
*/
|
|
196
|
+
RecordSerializer.prototype.deserializeAll = function (serializedRecords) {
|
|
197
|
+
var plan = this.hydrationPlan();
|
|
198
|
+
var records = new Array(serializedRecords.length);
|
|
199
|
+
var settles = false;
|
|
200
|
+
for (var i = 0; i < serializedRecords.length; i++) {
|
|
201
|
+
var record = this.hydrate(plan, serializedRecords[i]);
|
|
202
|
+
if (this.isPromise(record)) {
|
|
203
|
+
settles = true;
|
|
204
|
+
}
|
|
205
|
+
records[i] = record;
|
|
206
|
+
}
|
|
207
|
+
return settles ? Promise.all(records) : records;
|
|
208
|
+
};
|
|
209
|
+
/** One row → one record (`deserializeAll` is the door for a result set). */
|
|
189
210
|
RecordSerializer.prototype.deserialize = function (serializedRecord) {
|
|
190
211
|
return __awaiter(this, void 0, void 0, function () {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
case
|
|
195
|
-
case 1:
|
|
196
|
-
EncryptionRecordHooks = (_e.sent()).EncryptionRecordHooks;
|
|
197
|
-
return [4 /*yield*/, new EncryptionRecordHooks().onDeserialize(this.table, serializedRecord)];
|
|
198
|
-
case 2:
|
|
199
|
-
prepared = _e.sent();
|
|
200
|
-
deserialized = {};
|
|
201
|
-
fieldSerializer = new FieldSerializer(this.table);
|
|
202
|
-
omittedFields = [];
|
|
203
|
-
_a = prepared;
|
|
204
|
-
_b = [];
|
|
205
|
-
for (_c in _a)
|
|
206
|
-
_b.push(_c);
|
|
207
|
-
_i = 0;
|
|
208
|
-
_e.label = 3;
|
|
209
|
-
case 3:
|
|
210
|
-
if (!(_i < _b.length)) return [3 /*break*/, 8];
|
|
211
|
-
_c = _b[_i];
|
|
212
|
-
if (!(_c in _a)) return [3 /*break*/, 7];
|
|
213
|
-
columnName = _c;
|
|
214
|
-
serializedFieldValue = prepared[columnName];
|
|
215
|
-
_e.label = 4;
|
|
216
|
-
case 4:
|
|
217
|
-
_e.trys.push([4, 6, , 7]);
|
|
218
|
-
return [4 /*yield*/, fieldSerializer.deserialize(columnName, serializedFieldValue, prepared)];
|
|
219
|
-
case 5:
|
|
220
|
-
_d = _e.sent(), fieldPropertyName = _d.fieldPropertyName, fieldValue = _d.fieldValue;
|
|
221
|
-
deserialized[fieldPropertyName] = fieldValue;
|
|
222
|
-
return [3 /*break*/, 7];
|
|
223
|
-
case 6:
|
|
224
|
-
MissingFieldError_2 = _e.sent();
|
|
225
|
-
omittedFields.push(columnName);
|
|
226
|
-
return [3 /*break*/, 7];
|
|
227
|
-
case 7:
|
|
228
|
-
_i++;
|
|
229
|
-
return [3 /*break*/, 3];
|
|
230
|
-
case 8:
|
|
231
|
-
if (omittedFields.length > 0) {
|
|
232
|
-
// expected when passing a base table into the query api
|
|
233
|
-
this.logger.debug({ message: "Fields were omitted during deserialization", obj: { omittedFields: omittedFields } });
|
|
234
|
-
}
|
|
235
|
-
return [2 /*return*/, deserialized];
|
|
212
|
+
return __generator(this, function (_a) {
|
|
213
|
+
switch (_a.label) {
|
|
214
|
+
case 0: return [4 /*yield*/, this.hydrate(this.hydrationPlan(), serializedRecord)];
|
|
215
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
236
216
|
}
|
|
237
217
|
});
|
|
238
218
|
});
|
|
239
219
|
};
|
|
220
|
+
RecordSerializer.prototype.hydrate = function (plan, serializedRecord) {
|
|
221
|
+
var _this = this;
|
|
222
|
+
// The transparent decryption seam: ciphertext envelopes decrypt (self-describing — the
|
|
223
|
+
// envelope names its key), framework companion columns drop out of the result. The hook
|
|
224
|
+
// answers directly for a row holding no envelope.
|
|
225
|
+
var prepared = plan.hooks.onDeserialize(this.table, serializedRecord);
|
|
226
|
+
if (this.isPromise(prepared)) {
|
|
227
|
+
return prepared.then(function (row) { return _this.hydratePrepared(plan, row); });
|
|
228
|
+
}
|
|
229
|
+
return this.hydratePrepared(plan, prepared);
|
|
230
|
+
};
|
|
231
|
+
RecordSerializer.prototype.hydratePrepared = function (plan, prepared) {
|
|
232
|
+
var record = {};
|
|
233
|
+
var settling;
|
|
234
|
+
var omittedFields;
|
|
235
|
+
var _loop_1 = function (columnName) {
|
|
236
|
+
var slot = plan.slotsByColumnName[columnName];
|
|
237
|
+
if (!slot) {
|
|
238
|
+
// a column exists in the db that is no longer defined in Table.columns
|
|
239
|
+
(omittedFields !== null && omittedFields !== void 0 ? omittedFields : (omittedFields = [])).push(columnName);
|
|
240
|
+
return "continue";
|
|
241
|
+
}
|
|
242
|
+
var propertyName = slot.propertyName, column = slot.column;
|
|
243
|
+
var storedValue = prepared[columnName];
|
|
244
|
+
if (!column.deserialize) {
|
|
245
|
+
record[propertyName] = storedValue;
|
|
246
|
+
return "continue";
|
|
247
|
+
}
|
|
248
|
+
if (column.deserializeOnFirstRead && storedValue !== null && storedValue !== undefined) {
|
|
249
|
+
this_1.defineFieldReadOnFirstRead(record, propertyName, column, storedValue);
|
|
250
|
+
return "continue";
|
|
251
|
+
}
|
|
252
|
+
var fieldValue = column.deserialize(storedValue, prepared);
|
|
253
|
+
if (this_1.isPromise(fieldValue)) {
|
|
254
|
+
record[propertyName] = undefined; // seats the property in column order; the value lands when it settles
|
|
255
|
+
(settling !== null && settling !== void 0 ? settling : (settling = [])).push(fieldValue.then(function (value) {
|
|
256
|
+
record[propertyName] = value;
|
|
257
|
+
}));
|
|
258
|
+
return "continue";
|
|
259
|
+
}
|
|
260
|
+
record[propertyName] = fieldValue;
|
|
261
|
+
};
|
|
262
|
+
var this_1 = this;
|
|
263
|
+
for (var columnName in prepared) {
|
|
264
|
+
_loop_1(columnName);
|
|
265
|
+
}
|
|
266
|
+
if (omittedFields) {
|
|
267
|
+
// expected when passing a base table into the query api
|
|
268
|
+
this.logger.debug({ message: "Fields were omitted during deserialization", obj: { omittedFields: omittedFields } });
|
|
269
|
+
}
|
|
270
|
+
if (settling) {
|
|
271
|
+
return Promise.all(settling).then(function () { return record; });
|
|
272
|
+
}
|
|
273
|
+
return record;
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* The field as an own, enumerable property whose value is deserialized on its first read, once
|
|
277
|
+
* (`Column.deserializeOnFirstRead`); a write replaces it like any other field.
|
|
278
|
+
*/
|
|
279
|
+
RecordSerializer.prototype.defineFieldReadOnFirstRead = function (record, propertyName, column, storedValue) {
|
|
280
|
+
var value;
|
|
281
|
+
var read = false;
|
|
282
|
+
Object.defineProperty(record, propertyName, {
|
|
283
|
+
enumerable: true,
|
|
284
|
+
configurable: true,
|
|
285
|
+
get: function () {
|
|
286
|
+
if (!read) {
|
|
287
|
+
value = column.deserialize(storedValue, undefined);
|
|
288
|
+
read = true;
|
|
289
|
+
}
|
|
290
|
+
return value;
|
|
291
|
+
},
|
|
292
|
+
set: function (next) {
|
|
293
|
+
value = next;
|
|
294
|
+
read = true;
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
RecordSerializer.prototype.hydrationPlan = function () {
|
|
299
|
+
if (this.plan) {
|
|
300
|
+
return this.plan;
|
|
301
|
+
}
|
|
302
|
+
// Required at call time — this module sits below the encryption machinery in the package's
|
|
303
|
+
// module graph (the seam `Table.ts` uses for the same reason).
|
|
304
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
305
|
+
var EncryptionRecordHooks = require('./encryption/EncryptionRecordHooks').EncryptionRecordHooks;
|
|
306
|
+
var slotsByColumnName = {};
|
|
307
|
+
var columns = this.table.columns;
|
|
308
|
+
// Seated by column name, then by property name — a stored key that is a property name
|
|
309
|
+
// resolves to that property's column first, as it always has.
|
|
310
|
+
for (var propertyName in columns) {
|
|
311
|
+
slotsByColumnName[columns[propertyName].name] = { propertyName: propertyName, column: columns[propertyName] };
|
|
312
|
+
}
|
|
313
|
+
for (var propertyName in columns) {
|
|
314
|
+
slotsByColumnName[propertyName] = { propertyName: propertyName, column: columns[propertyName] };
|
|
315
|
+
}
|
|
316
|
+
this.plan = { hooks: new EncryptionRecordHooks(), slotsByColumnName: slotsByColumnName };
|
|
317
|
+
return this.plan;
|
|
318
|
+
};
|
|
319
|
+
RecordSerializer.prototype.isPromise = function (value) {
|
|
320
|
+
return typeof (value === null || value === void 0 ? void 0 : value.then) === 'function';
|
|
321
|
+
};
|
|
240
322
|
return RecordSerializer;
|
|
241
323
|
}());
|
|
242
324
|
exports.RecordSerializer = RecordSerializer;
|
package/dist/src/Record.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Record.js","sourceRoot":"","sources":["../../src/Record.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA2C;AAC3C,qCAAuD;AAEvD,uCAAsC;
|
|
1
|
+
{"version":3,"file":"Record.js","sourceRoot":"","sources":["../../src/Record.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Table.d.ts
CHANGED
|
@@ -176,7 +176,24 @@ export type Column<T, Serialized> = {
|
|
|
176
176
|
oldName?: string;
|
|
177
177
|
options?: ColumnOptions;
|
|
178
178
|
serialize?: (fieldValue: T | null | undefined) => Promise<Serialized | null | undefined>;
|
|
179
|
-
|
|
179
|
+
/**
|
|
180
|
+
* The stored value → the field's value. Answers directly when building the value needs no
|
|
181
|
+
* await (every column this package ships does), or with a promise when it does: record
|
|
182
|
+
* hydration (`RecordSerializer.deserializeAll`) awaits only what comes back as a promise, so a
|
|
183
|
+
* result set whose rows all answer directly hydrates synchronously — no promise per row, no
|
|
184
|
+
* yield of the event loop between rows.
|
|
185
|
+
*/
|
|
186
|
+
deserialize?: (serializedFieldValue: Serialized | null, serializedRecord: any) => T | null | void | Promise<T | null | void>;
|
|
187
|
+
/**
|
|
188
|
+
* When true, a hydrated record builds this column's field on the FIRST READ of the field, not
|
|
189
|
+
* at hydration: `deserialize` runs then, once, with the stored value alone (the row is not
|
|
190
|
+
* kept), so a deserializer under this flag reads nothing but its value and answers directly,
|
|
191
|
+
* never with a promise. For a pure, synchronous deserializer whose value costs more to build
|
|
192
|
+
* than to store and is often never read on a row — a DateTime column's moment. The record's
|
|
193
|
+
* shape is unchanged: the field is an own, enumerable property that reads as the deserialized
|
|
194
|
+
* value and takes a write like any other; a stored null reads null, undeferred.
|
|
195
|
+
*/
|
|
196
|
+
deserializeOnFirstRead?: boolean;
|
|
180
197
|
/**
|
|
181
198
|
* The column's QUERY-side contract, paralleling `serialize`/`deserialize` on the storage
|
|
182
199
|
* side: how uses of this column in a query (conditions, ORDER BY, aggregation, GROUP BY)
|
package/dist/src/Table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/Table.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,14 +26,17 @@ export declare class EncryptionRecordHooks {
|
|
|
26
26
|
private encryptedColumns;
|
|
27
27
|
private envelope;
|
|
28
28
|
private tokenizer;
|
|
29
|
+
private internalNames?;
|
|
29
30
|
/** Encrypt encrypted-column values in `serialized` (column-name-keyed) and add companions. */
|
|
30
31
|
onSerialize(table: Table<any>, serialized: SerializedRecord, context?: EncryptionWriteContext): Promise<void>;
|
|
31
32
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
33
|
+
* `serializedRecord` with framework companion columns dropped and every envelope value
|
|
34
|
+
* decrypted (any column — self-describing ciphertext also covers the decrypt-out transition,
|
|
35
|
+
* where the config no longer marks the column). Answers directly — the row itself when
|
|
36
|
+
* nothing drops or decrypts, else a copy — unless an envelope must be decrypted: its key is
|
|
37
|
+
* read asynchronously, so the copy settles through a promise.
|
|
35
38
|
*/
|
|
36
|
-
onDeserialize(table: Table<any>, serializedRecord: SerializedRecord): Promise<SerializedRecord>;
|
|
39
|
+
onDeserialize(table: Table<any>, serializedRecord: SerializedRecord): SerializedRecord | Promise<SerializedRecord>;
|
|
37
40
|
/**
|
|
38
41
|
* The key owner for a row being written — its permission-source scope owner:
|
|
39
42
|
* `DbEncryptionConfig.resolveKeyOwner` when the deployment supplies one (richer sharing
|
|
@@ -41,6 +44,8 @@ export declare class EncryptionRecordHooks {
|
|
|
41
44
|
* scope columns hold the owning user's id).
|
|
42
45
|
*/
|
|
43
46
|
resolveKeyOwnerForWrite(table: Table<any>, record: any): Promise<string>;
|
|
47
|
+
private decryptInto;
|
|
48
|
+
/** The table's framework-derived companion column names — resolved once per table per instance, not per row. */
|
|
44
49
|
private internalColumnNames;
|
|
45
50
|
private assertServerSide;
|
|
46
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptionRecordHooks.d.ts","sourceRoot":"","sources":["../../../src/encryption/EncryptionRecordHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAOlD,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"EncryptionRecordHooks.d.ts","sourceRoot":"","sources":["../../../src/encryption/EncryptionRecordHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAOlD,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAK1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAA4C;IAElE,8FAA8F;IACxF,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDnH;;;;;;OAMG;IACH,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoClH;;;;;OAKG;IACG,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;YAoBhE,WAAW;IASzB,gHAAgH;IAChH,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,gBAAgB;CAQzB"}
|
|
@@ -131,48 +131,41 @@ var EncryptionRecordHooks = /** @class */ (function () {
|
|
|
131
131
|
});
|
|
132
132
|
};
|
|
133
133
|
/**
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
134
|
+
* `serializedRecord` with framework companion columns dropped and every envelope value
|
|
135
|
+
* decrypted (any column — self-describing ciphertext also covers the decrypt-out transition,
|
|
136
|
+
* where the config no longer marks the column). Answers directly — the row itself when
|
|
137
|
+
* nothing drops or decrypts, else a copy — unless an envelope must be decrypted: its key is
|
|
138
|
+
* read asynchronously, so the copy settles through a promise.
|
|
137
139
|
*/
|
|
138
140
|
EncryptionRecordHooks.prototype.onDeserialize = function (table, serializedRecord) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
decrypted = true;
|
|
168
|
-
_b.label = 3;
|
|
169
|
-
case 3:
|
|
170
|
-
_i++;
|
|
171
|
-
return [3 /*break*/, 1];
|
|
172
|
-
case 4: return [2 /*return*/, decrypted || internalColumnNames.size > 0 ? prepared : serializedRecord];
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
});
|
|
141
|
+
this.encryptedColumns.ensureSchema(table);
|
|
142
|
+
var internalColumnNames = this.internalColumnNames(table);
|
|
143
|
+
var dropsInternal = false;
|
|
144
|
+
var envelopes;
|
|
145
|
+
for (var columnName in serializedRecord) {
|
|
146
|
+
if (internalColumnNames.has(columnName)) {
|
|
147
|
+
dropsInternal = true;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
var parsed = this.envelope.parse(serializedRecord[columnName]);
|
|
151
|
+
if (parsed) {
|
|
152
|
+
(envelopes !== null && envelopes !== void 0 ? envelopes : (envelopes = [])).push({ columnName: columnName, owner: parsed.owner, version: parsed.version });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!dropsInternal && !envelopes) {
|
|
156
|
+
return serializedRecord;
|
|
157
|
+
}
|
|
158
|
+
var prepared = {};
|
|
159
|
+
for (var columnName in serializedRecord) {
|
|
160
|
+
if (!internalColumnNames.has(columnName)) {
|
|
161
|
+
prepared[columnName] = serializedRecord[columnName];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (!envelopes) {
|
|
165
|
+
return prepared;
|
|
166
|
+
}
|
|
167
|
+
this.assertServerSide();
|
|
168
|
+
return this.decryptInto(prepared, envelopes);
|
|
176
169
|
};
|
|
177
170
|
/**
|
|
178
171
|
* The key owner for a row being written — its permission-source scope owner:
|
|
@@ -206,15 +199,45 @@ var EncryptionRecordHooks = /** @class */ (function () {
|
|
|
206
199
|
});
|
|
207
200
|
});
|
|
208
201
|
};
|
|
202
|
+
EncryptionRecordHooks.prototype.decryptInto = function (prepared, envelopes) {
|
|
203
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
204
|
+
var _i, envelopes_1, cell, key;
|
|
205
|
+
return __generator(this, function (_a) {
|
|
206
|
+
switch (_a.label) {
|
|
207
|
+
case 0:
|
|
208
|
+
_i = 0, envelopes_1 = envelopes;
|
|
209
|
+
_a.label = 1;
|
|
210
|
+
case 1:
|
|
211
|
+
if (!(_i < envelopes_1.length)) return [3 /*break*/, 4];
|
|
212
|
+
cell = envelopes_1[_i];
|
|
213
|
+
return [4 /*yield*/, new DataKeyStore_1.DataKeyStore().getKeyByVersion(cell.owner, cell.version)];
|
|
214
|
+
case 2:
|
|
215
|
+
key = _a.sent();
|
|
216
|
+
prepared[cell.columnName] = this.envelope.decrypt(prepared[cell.columnName], key);
|
|
217
|
+
_a.label = 3;
|
|
218
|
+
case 3:
|
|
219
|
+
_i++;
|
|
220
|
+
return [3 /*break*/, 1];
|
|
221
|
+
case 4: return [2 /*return*/, prepared];
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
/** The table's framework-derived companion column names — resolved once per table per instance, not per row. */
|
|
209
227
|
EncryptionRecordHooks.prototype.internalColumnNames = function (table) {
|
|
228
|
+
var _a;
|
|
229
|
+
if (((_a = this.internalNames) === null || _a === void 0 ? void 0 : _a.table) === table) {
|
|
230
|
+
return this.internalNames.names;
|
|
231
|
+
}
|
|
210
232
|
var names = new Set();
|
|
211
|
-
for (var _i = 0,
|
|
212
|
-
var prop =
|
|
233
|
+
for (var _i = 0, _b = Object.keys(table.columns); _i < _b.length; _i++) {
|
|
234
|
+
var prop = _b[_i];
|
|
213
235
|
var column = table.columns[prop];
|
|
214
236
|
if (this.encryptedColumns.isInternalColumn(column)) {
|
|
215
237
|
names.add(column.name);
|
|
216
238
|
}
|
|
217
239
|
}
|
|
240
|
+
this.internalNames = { table: table, names: names };
|
|
218
241
|
return names;
|
|
219
242
|
};
|
|
220
243
|
EncryptionRecordHooks.prototype.assertServerSide = function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptionRecordHooks.js","sourceRoot":"","sources":["../../../src/encryption/EncryptionRecordHooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,2DAAyF;AACzF,uDAAsD;AACtD,2DAA0D;AAC1D,+CAA+D;AAC/D,qDAAoD;
|
|
1
|
+
{"version":3,"file":"EncryptionRecordHooks.js","sourceRoot":"","sources":["../../../src/encryption/EncryptionRecordHooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,9 @@ export type TransactionRunOptions = {
|
|
|
13
13
|
* Ids of rows the operations depend on that may not exist yet: the row an update or a
|
|
14
14
|
* membership update targets while its insert is still in flight, the permission source a
|
|
15
15
|
* child row attaches to while the root's own insert (and the owner grant that commits with
|
|
16
|
-
* it) is still landing
|
|
16
|
+
* it) is still landing, any row an insert names through one of its table's reference columns
|
|
17
|
+
* while that row is still being born. Every id must be a row the operations themselves
|
|
18
|
+
* reference (an insert references every row its reference columns name). The
|
|
17
19
|
* runner waits, bounded, for each to exist AND be visible to the caller before running the
|
|
18
20
|
* operations; a row that never appears fails the request with a plain clause — never a
|
|
19
21
|
* silent zero-row write, never a hang.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionRunnerService.d.ts","sourceRoot":"","sources":["../../../src/services/TransactionRunnerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,2BAA2B,gCAEvC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC
|
|
1
|
+
{"version":3,"file":"TransactionRunnerService.d.ts","sourceRoot":"","sources":["../../../src/services/TransactionRunnerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,2BAA2B,gCAEvC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,wBAAyB,SAAQ,OAAO;IACvD,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E"}
|
|
@@ -43,13 +43,21 @@ export declare class TransactionRunner implements TransactionRunnerService {
|
|
|
43
43
|
*/
|
|
44
44
|
private awaitRows;
|
|
45
45
|
/**
|
|
46
|
-
* The rows the operations reference, by id → the table(s) they are read from
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
46
|
+
* The rows the operations reference, by id → the table(s) they are read from. An insert
|
|
47
|
+
* references every row its table's reference columns name (`rowsTheInsertReferences`) — the
|
|
48
|
+
* permission source a row attaches to is one of these, a row named through any other reference
|
|
49
|
+
* column another. An update / preserving update / membership update / delete references the row
|
|
50
|
+
* it targets. The rows the operations insert themselves are not dependencies.
|
|
50
51
|
*/
|
|
51
52
|
private static rowsTheOperationsReference;
|
|
52
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* The rows an inserted record names through its table's reference columns: for each column
|
|
55
|
+
* whose value carries an id, that id and the table it lives in — a `ReferenceColumn`'s declared
|
|
56
|
+
* table; for a `DynamicReferenceColumn`, the table its paired table-name column carries on the
|
|
57
|
+
* record (a client's queued insert ran the column's default), else the reference's own.
|
|
58
|
+
*/
|
|
59
|
+
private static rowsTheInsertReferences;
|
|
60
|
+
/** The table a referenced row lives in: the insert's own table when it names the same one. */
|
|
53
61
|
private static tableNamed;
|
|
54
62
|
}
|
|
55
63
|
//# sourceMappingURL=TransactionRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionRunner.d.ts","sourceRoot":"","sources":["../../../src/transaction/TransactionRunner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TransactionRunner.d.ts","sourceRoot":"","sources":["../../../src/transaction/TransactionRunner.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EAEtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,eAAO,MAAM,oBAAoB,yBAC6E,CAAC;AAE/G;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,YAAW,wBAAwB;IACzD,eAAe;;;;MAIpB;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAM;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IAEnD,OAAO,CAAC,MAAM,CAA+C;IAEvD,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAchF;;;;;;;;;;;;;;OAcG;YACW,SAAS;IAkEvB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IA4CzC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAgCtC,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,UAAU;CAG1B"}
|