@proteinjs/db 1.35.0 → 1.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/generated/index.d.ts.map +1 -1
  3. package/dist/generated/index.js +7 -1
  4. package/dist/generated/index.js.map +1 -1
  5. package/dist/generated/test/index.d.ts.map +1 -1
  6. package/dist/generated/test/index.js +7 -1
  7. package/dist/generated/test/index.js.map +1 -1
  8. package/dist/index.d.ts +15 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +15 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/src/Db.d.ts +25 -0
  13. package/dist/src/Db.d.ts.map +1 -1
  14. package/dist/src/Db.js +219 -22
  15. package/dist/src/Db.js.map +1 -1
  16. package/dist/src/Record.d.ts +7 -1
  17. package/dist/src/Record.d.ts.map +1 -1
  18. package/dist/src/Record.js +56 -21
  19. package/dist/src/Record.js.map +1 -1
  20. package/dist/src/Table.d.ts +82 -1
  21. package/dist/src/Table.d.ts.map +1 -1
  22. package/dist/src/Table.js +24 -1
  23. package/dist/src/Table.js.map +1 -1
  24. package/dist/src/TableQueryTransformProvider.d.ts +17 -0
  25. package/dist/src/TableQueryTransformProvider.d.ts.map +1 -0
  26. package/dist/src/TableQueryTransformProvider.js +34 -0
  27. package/dist/src/TableQueryTransformProvider.js.map +1 -0
  28. package/dist/src/encryption/Base64Url.d.ts +12 -0
  29. package/dist/src/encryption/Base64Url.d.ts.map +1 -0
  30. package/dist/src/encryption/Base64Url.js +21 -0
  31. package/dist/src/encryption/Base64Url.js.map +1 -0
  32. package/dist/src/encryption/DataEncryptionKeyTable.d.ts +33 -0
  33. package/dist/src/encryption/DataEncryptionKeyTable.d.ts.map +1 -0
  34. package/dist/src/encryption/DataEncryptionKeyTable.js +45 -0
  35. package/dist/src/encryption/DataEncryptionKeyTable.js.map +1 -0
  36. package/dist/src/encryption/DataKeyStore.d.ts +84 -0
  37. package/dist/src/encryption/DataKeyStore.d.ts.map +1 -0
  38. package/dist/src/encryption/DataKeyStore.js +481 -0
  39. package/dist/src/encryption/DataKeyStore.js.map +1 -0
  40. package/dist/src/encryption/DbEncryptionConfig.d.ts +62 -0
  41. package/dist/src/encryption/DbEncryptionConfig.d.ts.map +1 -0
  42. package/dist/src/encryption/DbEncryptionConfig.js +67 -0
  43. package/dist/src/encryption/DbEncryptionConfig.js.map +1 -0
  44. package/dist/src/encryption/EncryptedColumnQueryError.d.ts +10 -0
  45. package/dist/src/encryption/EncryptedColumnQueryError.d.ts.map +1 -0
  46. package/dist/src/encryption/EncryptedColumnQueryError.js +38 -0
  47. package/dist/src/encryption/EncryptedColumnQueryError.js.map +1 -0
  48. package/dist/src/encryption/EncryptedColumnQueryTransform.d.ts +52 -0
  49. package/dist/src/encryption/EncryptedColumnQueryTransform.d.ts.map +1 -0
  50. package/dist/src/encryption/EncryptedColumnQueryTransform.js +423 -0
  51. package/dist/src/encryption/EncryptedColumnQueryTransform.js.map +1 -0
  52. package/dist/src/encryption/EncryptedColumns.d.ts +69 -0
  53. package/dist/src/encryption/EncryptedColumns.d.ts.map +1 -0
  54. package/dist/src/encryption/EncryptedColumns.js +286 -0
  55. package/dist/src/encryption/EncryptedColumns.js.map +1 -0
  56. package/dist/src/encryption/EncryptionDerivedTableRegistry.d.ts +20 -0
  57. package/dist/src/encryption/EncryptionDerivedTableRegistry.d.ts.map +1 -0
  58. package/dist/src/encryption/EncryptionDerivedTableRegistry.js +36 -0
  59. package/dist/src/encryption/EncryptionDerivedTableRegistry.js.map +1 -0
  60. package/dist/src/encryption/EncryptionEnvelope.d.ts +25 -0
  61. package/dist/src/encryption/EncryptionEnvelope.d.ts.map +1 -0
  62. package/dist/src/encryption/EncryptionEnvelope.js +59 -0
  63. package/dist/src/encryption/EncryptionEnvelope.js.map +1 -0
  64. package/dist/src/encryption/EncryptionLifecycleWalker.d.ts +65 -0
  65. package/dist/src/encryption/EncryptionLifecycleWalker.d.ts.map +1 -0
  66. package/dist/src/encryption/EncryptionLifecycleWalker.js +343 -0
  67. package/dist/src/encryption/EncryptionLifecycleWalker.js.map +1 -0
  68. package/dist/src/encryption/EncryptionRecordHooks.d.ts +47 -0
  69. package/dist/src/encryption/EncryptionRecordHooks.d.ts.map +1 -0
  70. package/dist/src/encryption/EncryptionRecordHooks.js +229 -0
  71. package/dist/src/encryption/EncryptionRecordHooks.js.map +1 -0
  72. package/dist/src/encryption/EncryptionTokenMaintenance.d.ts +34 -0
  73. package/dist/src/encryption/EncryptionTokenMaintenance.d.ts.map +1 -0
  74. package/dist/src/encryption/EncryptionTokenMaintenance.js +211 -0
  75. package/dist/src/encryption/EncryptionTokenMaintenance.js.map +1 -0
  76. package/dist/src/encryption/InMemoryMasterKeyProvider.d.ts +20 -0
  77. package/dist/src/encryption/InMemoryMasterKeyProvider.d.ts.map +1 -0
  78. package/dist/src/encryption/InMemoryMasterKeyProvider.js +87 -0
  79. package/dist/src/encryption/InMemoryMasterKeyProvider.js.map +1 -0
  80. package/dist/src/encryption/MasterKeyProvider.d.ts +27 -0
  81. package/dist/src/encryption/MasterKeyProvider.d.ts.map +1 -0
  82. package/dist/src/encryption/MasterKeyProvider.js +3 -0
  83. package/dist/src/encryption/MasterKeyProvider.js.map +1 -0
  84. package/dist/src/encryption/SearchTokenizer.d.ts +49 -0
  85. package/dist/src/encryption/SearchTokenizer.d.ts.map +1 -0
  86. package/dist/src/encryption/SearchTokenizer.js +106 -0
  87. package/dist/src/encryption/SearchTokenizer.js.map +1 -0
  88. package/dist/src/schema/TableManager.d.ts +10 -0
  89. package/dist/src/schema/TableManager.d.ts.map +1 -1
  90. package/dist/src/schema/TableManager.js +62 -5
  91. package/dist/src/schema/TableManager.js.map +1 -1
  92. package/dist/src/tables/MigrationTable.d.ts +2 -2
  93. package/dist/test/EncryptedColumnsSchema.test.d.ts +2 -0
  94. package/dist/test/EncryptedColumnsSchema.test.d.ts.map +1 -0
  95. package/dist/test/EncryptedColumnsSchema.test.js +151 -0
  96. package/dist/test/EncryptedColumnsSchema.test.js.map +1 -0
  97. package/dist/test/EncryptionEnvelope.test.d.ts +2 -0
  98. package/dist/test/EncryptionEnvelope.test.d.ts.map +1 -0
  99. package/dist/test/EncryptionEnvelope.test.js +109 -0
  100. package/dist/test/EncryptionEnvelope.test.js.map +1 -0
  101. package/dist/test/EncryptionQueryContract.test.d.ts +2 -0
  102. package/dist/test/EncryptionQueryContract.test.d.ts.map +1 -0
  103. package/dist/test/EncryptionQueryContract.test.js +399 -0
  104. package/dist/test/EncryptionQueryContract.test.js.map +1 -0
  105. package/dist/test/SearchTokenizer.test.d.ts +2 -0
  106. package/dist/test/SearchTokenizer.test.d.ts.map +1 -0
  107. package/dist/test/SearchTokenizer.test.js +64 -0
  108. package/dist/test/SearchTokenizer.test.js.map +1 -0
  109. package/dist/test/reusable/CascadeDeleteTests.js +2 -2
  110. package/dist/test/reusable/CascadeDeleteTests.js.map +1 -1
  111. package/dist/test/reusable/ColumnTypesTests.js +2 -2
  112. package/dist/test/reusable/ColumnTypesTests.js.map +1 -1
  113. package/dist/test/reusable/CrudTests.js +2 -2
  114. package/dist/test/reusable/CrudTests.js.map +1 -1
  115. package/dist/test/reusable/DynamicReferenceColumnTests.js +2 -2
  116. package/dist/test/reusable/DynamicReferenceColumnTests.js.map +1 -1
  117. package/dist/test/reusable/PreloadReferencesTests.js +2 -2
  118. package/dist/test/reusable/PreloadReferencesTests.js.map +1 -1
  119. package/dist/test/reusable/RecordIteratorTests.js +2 -2
  120. package/dist/test/reusable/RecordIteratorTests.js.map +1 -1
  121. package/dist/test/reusable/TableManagerTests.js +2 -2
  122. package/dist/test/reusable/TableManagerTests.js.map +1 -1
  123. package/dist/test/reusable/TransactionTests.js +2 -2
  124. package/dist/test/reusable/TransactionTests.js.map +1 -1
  125. package/generated/index.ts +7 -1
  126. package/generated/test/index.ts +7 -1
  127. package/index.ts +16 -0
  128. package/package.json +3 -3
  129. package/src/Db.ts +137 -12
  130. package/src/Record.ts +21 -4
  131. package/src/Table.ts +109 -2
  132. package/src/TableQueryTransformProvider.ts +31 -0
  133. package/src/encryption/Base64Url.ts +14 -0
  134. package/src/encryption/DataEncryptionKeyTable.ts +40 -0
  135. package/src/encryption/DataKeyStore.ts +305 -0
  136. package/src/encryption/DbEncryptionConfig.ts +92 -0
  137. package/src/encryption/EncryptedColumnQueryError.ts +15 -0
  138. package/src/encryption/EncryptedColumnQueryTransform.ts +383 -0
  139. package/src/encryption/EncryptedColumns.ts +318 -0
  140. package/src/encryption/EncryptionDerivedTableRegistry.ts +34 -0
  141. package/src/encryption/EncryptionEnvelope.ts +60 -0
  142. package/src/encryption/EncryptionLifecycleWalker.ts +243 -0
  143. package/src/encryption/EncryptionRecordHooks.ts +167 -0
  144. package/src/encryption/EncryptionTokenMaintenance.ts +123 -0
  145. package/src/encryption/InMemoryMasterKeyProvider.ts +42 -0
  146. package/src/encryption/MasterKeyProvider.ts +26 -0
  147. package/src/encryption/SearchTokenizer.ts +103 -0
  148. package/src/schema/TableManager.ts +43 -1
  149. package/test/EncryptedColumnsSchema.test.ts +172 -0
  150. package/test/EncryptionEnvelope.test.ts +66 -0
  151. package/test/EncryptionQueryContract.test.ts +195 -0
  152. package/test/SearchTokenizer.test.ts +67 -0
  153. package/test/reusable/CascadeDeleteTests.ts +2 -2
  154. package/test/reusable/ColumnTypesTests.ts +2 -2
  155. package/test/reusable/CrudTests.ts +2 -2
  156. package/test/reusable/DynamicReferenceColumnTests.ts +2 -2
  157. package/test/reusable/PreloadReferencesTests.ts +2 -2
  158. package/test/reusable/RecordIteratorTests.ts +2 -2
  159. package/test/reusable/TableManagerTests.ts +2 -2
  160. package/test/reusable/TransactionTests.ts +2 -2
  161. package/tsconfig.json +1 -1
@@ -14,6 +14,29 @@ var __extends = (this && this.__extends) || (function () {
14
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
15
  };
16
16
  })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
17
40
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
41
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
42
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -97,13 +120,14 @@ function withRecordColumns(columns) {
97
120
  }
98
121
  exports.withRecordColumns = withRecordColumns;
99
122
  var RecordSerializer = /** @class */ (function () {
100
- function RecordSerializer(table) {
123
+ function RecordSerializer(table, encryptionContext) {
101
124
  this.logger = new logger_1.Logger({ name: this.constructor.name });
102
125
  this.table = table;
126
+ this.encryptionContext = encryptionContext;
103
127
  }
104
128
  RecordSerializer.prototype.serialize = function (record) {
105
129
  return __awaiter(this, void 0, void 0, function () {
106
- var serialized, fieldSerializer, omittedFields, _a, _b, _c, _i, fieldPropertyName, fieldValue, undefinedFieldValueError, _d, columnName, serializedFieldValue, MissingFieldError_1;
130
+ var serialized, fieldSerializer, omittedFields, _a, _b, _c, _i, fieldPropertyName, fieldValue, undefinedFieldValueError, _d, columnName, serializedFieldValue, MissingFieldError_1, EncryptionRecordHooks;
107
131
  return __generator(this, function (_e) {
108
132
  switch (_e.label) {
109
133
  case 0:
@@ -151,6 +175,12 @@ var RecordSerializer = /** @class */ (function () {
151
175
  // could mean the developer is passing in an object they don't expect
152
176
  this.logger.warn({ message: "Fields were omitted during serialization", obj: { omittedFields: omittedFields } });
153
177
  }
178
+ return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require('./encryption/EncryptionRecordHooks')); })];
179
+ case 8:
180
+ EncryptionRecordHooks = (_e.sent()).EncryptionRecordHooks;
181
+ return [4 /*yield*/, new EncryptionRecordHooks().onSerialize(this.table, serialized, this.encryptionContext)];
182
+ case 9:
183
+ _e.sent();
154
184
  return [2 /*return*/, serialized];
155
185
  }
156
186
  });
@@ -158,41 +188,46 @@ var RecordSerializer = /** @class */ (function () {
158
188
  };
159
189
  RecordSerializer.prototype.deserialize = function (serializedRecord) {
160
190
  return __awaiter(this, void 0, void 0, function () {
161
- var deserialized, fieldSerializer, omittedFields, _a, _b, _c, _i, columnName, serializedFieldValue, _d, fieldPropertyName, fieldValue, MissingFieldError_2;
191
+ var EncryptionRecordHooks, prepared, deserialized, fieldSerializer, omittedFields, _a, _b, _c, _i, columnName, serializedFieldValue, _d, fieldPropertyName, fieldValue, MissingFieldError_2;
162
192
  return __generator(this, function (_e) {
163
193
  switch (_e.label) {
164
- case 0:
194
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require('./encryption/EncryptionRecordHooks')); })];
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();
165
200
  deserialized = {};
166
201
  fieldSerializer = new FieldSerializer(this.table);
167
202
  omittedFields = [];
168
- _a = serializedRecord;
203
+ _a = prepared;
169
204
  _b = [];
170
205
  for (_c in _a)
171
206
  _b.push(_c);
172
207
  _i = 0;
173
- _e.label = 1;
174
- case 1:
175
- if (!(_i < _b.length)) return [3 /*break*/, 6];
208
+ _e.label = 3;
209
+ case 3:
210
+ if (!(_i < _b.length)) return [3 /*break*/, 8];
176
211
  _c = _b[_i];
177
- if (!(_c in _a)) return [3 /*break*/, 5];
212
+ if (!(_c in _a)) return [3 /*break*/, 7];
178
213
  columnName = _c;
179
- serializedFieldValue = serializedRecord[columnName];
180
- _e.label = 2;
181
- case 2:
182
- _e.trys.push([2, 4, , 5]);
183
- return [4 /*yield*/, fieldSerializer.deserialize(columnName, serializedFieldValue, serializedRecord)];
184
- case 3:
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:
185
220
  _d = _e.sent(), fieldPropertyName = _d.fieldPropertyName, fieldValue = _d.fieldValue;
186
221
  deserialized[fieldPropertyName] = fieldValue;
187
- return [3 /*break*/, 5];
188
- case 4:
222
+ return [3 /*break*/, 7];
223
+ case 6:
189
224
  MissingFieldError_2 = _e.sent();
190
225
  omittedFields.push(columnName);
191
- return [3 /*break*/, 5];
192
- case 5:
226
+ return [3 /*break*/, 7];
227
+ case 7:
193
228
  _i++;
194
- return [3 /*break*/, 1];
195
- case 6:
229
+ return [3 /*break*/, 3];
230
+ case 8:
196
231
  if (omittedFields.length > 0) {
197
232
  // expected when passing a base table into the query api
198
233
  this.logger.debug({ message: "Fields were omitted during deserialization", obj: { omittedFields: omittedFields } });
@@ -1 +1 @@
1
- {"version":3,"file":"Record.js","sourceRoot":"","sources":["../../src/Record.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Record.js","sourceRoot":"","sources":["../../src/Record.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Loadable } from '@proteinjs/reflection';
2
2
  import { CustomSerializableObject } from '@proteinjs/serializer';
3
3
  import { Record } from './Record';
4
- import { QueryBuilder } from '@proteinjs/db-query';
4
+ import { ColumnQueryTransform, QueryBuilder } from '@proteinjs/db-query';
5
5
  import { Identity, TableOperationsAuth } from './auth/TableAuth';
6
6
  import { Db } from './Db';
7
7
  export declare const isTable: (obj: any) => boolean;
@@ -67,6 +67,19 @@ export type Columns<T> = {
67
67
  } & {
68
68
  [P in OptionalProps<T>]?: Column<T[P] | undefined, any>;
69
69
  };
70
+ /**
71
+ * What a column's query transform runs WITH: the current operation's authority and its
72
+ * driver/transaction-riding query runners. Supplied by `Db` per operation
73
+ * (`Db.addColumnQueries`), so a transform's own reads behave like part of the query that
74
+ * carried them.
75
+ */
76
+ export interface ColumnQueryRuntime {
77
+ runAsSystem: boolean;
78
+ /** Query with the CALLER's authority (auth + column queries apply). */
79
+ query: (table: Table<any>, qb: QueryBuilder<any>) => Promise<any[]>;
80
+ /** System-authority query — for framework-derived tables that are default-deny to callers. */
81
+ systemQuery: (table: Table<any>, qb: QueryBuilder<any>) => Promise<any[]>;
82
+ }
70
83
  export type Column<T, Serialized> = {
71
84
  name: string;
72
85
  /**
@@ -78,13 +91,81 @@ export type Column<T, Serialized> = {
78
91
  options?: ColumnOptions;
79
92
  serialize?: (fieldValue: T | null | undefined) => Promise<Serialized | null | undefined>;
80
93
  deserialize?: (serializedFieldValue: Serialized | null, serializedRecord: any) => Promise<T | null | void>;
94
+ /**
95
+ * The column's QUERY-side contract, paralleling `serialize`/`deserialize` on the storage
96
+ * side: how uses of this column in a query (conditions, ORDER BY, aggregation, GROUP BY)
97
+ * translate into uses of what the database actually stores and indexes for it — see
98
+ * `ColumnQueryTransform` (@proteinjs/db-query). Applied by
99
+ * `QueryBuilder.applyColumnTransforms` on every query, through
100
+ * `TableQueryTransformProvider`.
101
+ *
102
+ * A factory rather than a bare transform: translation may consult derived index state
103
+ * (e.g. an encrypted column's token table), so a transform is built per operation with
104
+ * the operation's `ColumnQueryRuntime` — its driver-riding query runners and authority.
105
+ * Derived by the framework for encrypted columns (`EncryptedColumns.ensureSchema`);
106
+ * any column may supply one.
107
+ */
108
+ queryTransform?: (runtime: ColumnQueryRuntime) => ColumnQueryTransform;
81
109
  beforeDelete?: (table: Table<any>, columnPropertyName: string, records: any[], getTable?: (tableName: string) => Table<any>, db?: Db) => Promise<void>;
82
110
  };
111
+ /**
112
+ * Capabilities of an encrypted column. Nested INSIDE the `encrypted` declaration on purpose:
113
+ * `searchable` and `sortKey` only mean anything on an encrypted column (a plaintext column
114
+ * is inherently searchable and sortable through normal SQL), so the invalid state — a
115
+ * search/sort capability declared without encryption — is unrepresentable.
116
+ */
117
+ export type EncryptedColumnConfig = {
118
+ /**
119
+ * Index the value for native querying over ciphertext (derived automatically at the
120
+ * database layer — see `EncryptedColumns`):
121
+ * - `'contains'` — word + trigram search tokens, keyed-fingerprinted per owner, serving
122
+ * the LIKE contains/prefix family with exact results (candidate cover + decrypt-verify).
123
+ * - `'equality'` — one whole-value fingerprint companion column serving `=` / `IN` /
124
+ * get-by-value as a single indexed lookup (and value uniqueness, per owner).
125
+ * Encrypted columns that are never queried by value declare neither and carry no
126
+ * derivatives — the default.
127
+ */
128
+ searchable?: 'contains' | 'equality';
129
+ /**
130
+ * Native ORDER BY at any scale through a DECLARED bounded reveal: an ordered
131
+ * representation of the value's first `revealPrefix` characters (normalized) is stored
132
+ * beside the ciphertext and the database sorts on it. The leak, stated plainly: raw
133
+ * database access can see each value's first `revealPrefix` characters — nothing else.
134
+ * A conscious, schema-author-declared tradeoff; never the default. Rows sharing a prefix
135
+ * tie-break app-side within the returned page.
136
+ */
137
+ sortKey?: {
138
+ revealPrefix: number;
139
+ };
140
+ };
83
141
  export type ColumnOptions = {
84
142
  unique?: {
85
143
  unique: boolean;
86
144
  indexName?: string;
87
145
  };
146
+ /**
147
+ * Whether this column's values are stored encrypted (AES-256-GCM under per-owner data
148
+ * keys wrapped by the deployment's master key — see `DbEncryptionConfig`). The value is
149
+ * either `false` (plaintext — said out loud) or a config object:
150
+ *
151
+ * ```ts
152
+ * encrypted: false // plaintext (explicit)
153
+ * encrypted: {} // encrypted, never queried by value
154
+ * encrypted: { searchable: 'contains' } // + indexed contains/prefix search
155
+ * encrypted: { searchable: 'equality' } // + indexed exact-match lookup
156
+ * encrypted: { sortKey: { revealPrefix: 3 } } // + native ORDER BY via a declared bounded reveal
157
+ * ```
158
+ *
159
+ * Everything downstream — the transparent encrypt/decrypt seam, companion index
160
+ * derivation, query translation, loud contract rejections, lifecycle backfills — is
161
+ * derived automatically at the database layer; callers never write an encrypt or decrypt
162
+ * call. Query shapes outside the contract are rejected at query-build time
163
+ * (`EncryptionQueryTranslator`).
164
+ *
165
+ * When `DbEncryptionConfig.requireEncryptedDeclarations` is on, every text-holding
166
+ * column MUST carry this declaration — registration fails loudly otherwise.
167
+ */
168
+ encrypted?: false | EncryptedColumnConfig;
88
169
  /**
89
170
  * The column in the reference table `table` is the primary key of the table (`id` unless otherwise specified in the Table definition)
90
171
  *
@@ -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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"}
package/dist/src/Table.js CHANGED
@@ -40,6 +40,7 @@ exports.Table = exports.addUpdateFieldValues = exports.addDefaultFieldValues = e
40
40
  var reflection_1 = require("@proteinjs/reflection");
41
41
  var Record_1 = require("./Record");
42
42
  var TableSerializer_1 = require("./serializers/TableSerializer");
43
+ var EncryptionDerivedTableRegistry_1 = require("./encryption/EncryptionDerivedTableRegistry");
43
44
  var isTable = function (obj) { return obj.__serializerId === TableSerializer_1.TableSerializerId; };
44
45
  exports.isTable = isTable;
45
46
  var getTables = function () { return reflection_1.SourceRepository.get().objects('@proteinjs/db/Table'); };
@@ -49,12 +50,34 @@ var tableByName = function (name) {
49
50
  for (var _i = 0, tables_1 = tables; _i < tables_1.length; _i++) {
50
51
  var table = tables_1[_i];
51
52
  if (table.name == name) {
52
- return table;
53
+ return ensureEncryptionSchema(table);
53
54
  }
54
55
  }
56
+ // Framework-DERIVED tables (search-token tables beside encrypted columns) are synthesized
57
+ // from column config rather than declared in source, so the reflection registry never
58
+ // sees them (see EncryptionDerivedTableRegistry — a runtime-cycle-free, type-only import).
59
+ var derivedTable = EncryptionDerivedTableRegistry_1.EncryptionDerivedTableRegistry.get(name);
60
+ if (derivedTable) {
61
+ return derivedTable;
62
+ }
55
63
  throw new Error("Unable to find table: ".concat(name));
56
64
  };
57
65
  exports.tableByName = tableByName;
66
+ /**
67
+ * Table instances are constructed ad hoc all over consumer code, and the encryption-derived
68
+ * physical schema (companion columns — see `EncryptedColumns.ensureSchema`) is injected
69
+ * per-instance at the seams that use an instance. Name-based resolution is one of those
70
+ * seams: statement generation and driver column-type lookups resolve the REGISTRY's
71
+ * instance through here, which must carry the same derived columns as the instance the
72
+ * caller handed the Db. Idempotent (marker-checked); a call-time require keeps the module
73
+ * graph acyclic at load time.
74
+ */
75
+ var ensureEncryptionSchema = function (table) {
76
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
77
+ var EncryptedColumns = require('./encryption/EncryptedColumns').EncryptedColumns;
78
+ new EncryptedColumns().ensureSchema(table);
79
+ return table;
80
+ };
58
81
  var getColumnPropertyName = function (table, columnName) {
59
82
  for (var columnPropertyName in table.columns) {
60
83
  var column = table.columns[columnPropertyName];
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/Table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/Table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ColumnQueryTransform, ColumnQueryTransformProvider } from '@proteinjs/db-query';
2
+ import { ColumnQueryRuntime, Table } from './Table';
3
+ /**
4
+ * The Table-model side of db-query's column query-transform seam: resolves a
5
+ * (tableName, columnProperty) pair to the column's own `Column.queryTransform`, built with
6
+ * the current operation's `ColumnQueryRuntime`. `Db.addColumnQueries` hands one of these
7
+ * to `QueryBuilder.applyColumnTransforms` on every query, so a column's query contract is
8
+ * consulted wherever the column is used — including inside subquery values on other
9
+ * tables, resolved through the same table registry the statement layer uses.
10
+ */
11
+ export declare class TableQueryTransformProvider implements ColumnQueryTransformProvider {
12
+ private getTable;
13
+ private runtime;
14
+ constructor(getTable: (tableName: string) => Table<any>, runtime: ColumnQueryRuntime);
15
+ getTransform(tableName: string, columnPropertyName: string): ColumnQueryTransform | undefined;
16
+ }
17
+ //# sourceMappingURL=TableQueryTransformProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableQueryTransformProvider.d.ts","sourceRoot":"","sources":["../../src/TableQueryTransformProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAU,kBAAkB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAE5D;;;;;;;GAOG;AACH,qBAAa,2BAA4B,YAAW,4BAA4B;IAE5E,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;gBADP,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC,GAAG,CAAC,EAC3C,OAAO,EAAE,kBAAkB;IAGrC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;CAa9F"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableQueryTransformProvider = void 0;
4
+ /**
5
+ * The Table-model side of db-query's column query-transform seam: resolves a
6
+ * (tableName, columnProperty) pair to the column's own `Column.queryTransform`, built with
7
+ * the current operation's `ColumnQueryRuntime`. `Db.addColumnQueries` hands one of these
8
+ * to `QueryBuilder.applyColumnTransforms` on every query, so a column's query contract is
9
+ * consulted wherever the column is used — including inside subquery values on other
10
+ * tables, resolved through the same table registry the statement layer uses.
11
+ */
12
+ var TableQueryTransformProvider = /** @class */ (function () {
13
+ function TableQueryTransformProvider(getTable, runtime) {
14
+ this.getTable = getTable;
15
+ this.runtime = runtime;
16
+ }
17
+ TableQueryTransformProvider.prototype.getTransform = function (tableName, columnPropertyName) {
18
+ var _a;
19
+ var table;
20
+ try {
21
+ table = this.getTable(tableName);
22
+ }
23
+ catch (_b) {
24
+ // Not a registered table (e.g. an aggregate '*' field, or a name outside the model) —
25
+ // nothing to consult.
26
+ return undefined;
27
+ }
28
+ var column = table.columns[columnPropertyName];
29
+ return (_a = column === null || column === void 0 ? void 0 : column.queryTransform) === null || _a === void 0 ? void 0 : _a.call(column, this.runtime);
30
+ };
31
+ return TableQueryTransformProvider;
32
+ }());
33
+ exports.TableQueryTransformProvider = TableQueryTransformProvider;
34
+ //# sourceMappingURL=TableQueryTransformProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableQueryTransformProvider.js","sourceRoot":"","sources":["../../src/TableQueryTransformProvider.ts"],"names":[],"mappings":";;;AAGA;;;;;;;GAOG;AACH;IACE,qCACU,QAA2C,EAC3C,OAA2B;QAD3B,aAAQ,GAAR,QAAQ,CAAmC;QAC3C,YAAO,GAAP,OAAO,CAAoB;IAClC,CAAC;IAEJ,kDAAY,GAAZ,UAAa,SAAiB,EAAE,kBAA0B;;QACxD,IAAI,KAAiB,CAAC;QACtB,IAAI;YACF,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SAClC;QAAC,WAAM;YACN,sFAAsF;YACtF,sBAAsB;YACtB,OAAO,SAAS,CAAC;SAClB;QAED,IAAM,MAAM,GAAI,KAAK,CAAC,OAAe,CAAC,kBAAkB,CAAiC,CAAC;QAC1F,OAAO,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,uDAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IACH,kCAAC;AAAD,CAAC,AAnBD,IAmBC;AAnBY,kEAA2B"}
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /**
4
+ * Base64url (RFC 4648 §5) over Buffers, hand-rolled because the package's @types/node
5
+ * predates the 'base64url' BufferEncoding. URL/filename-safe alphabet, no padding — safe
6
+ * inside the colon-delimited ciphertext envelope and as index-column values.
7
+ */
8
+ export declare class Base64Url {
9
+ static encode(bytes: Buffer): string;
10
+ static decode(encoded: string): Buffer;
11
+ }
12
+ //# sourceMappingURL=Base64Url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base64Url.d.ts","sourceRoot":"","sources":["../../../src/encryption/Base64Url.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,qBAAa,SAAS;IACpB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAGvC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Base64Url = void 0;
4
+ /**
5
+ * Base64url (RFC 4648 §5) over Buffers, hand-rolled because the package's @types/node
6
+ * predates the 'base64url' BufferEncoding. URL/filename-safe alphabet, no padding — safe
7
+ * inside the colon-delimited ciphertext envelope and as index-column values.
8
+ */
9
+ var Base64Url = /** @class */ (function () {
10
+ function Base64Url() {
11
+ }
12
+ Base64Url.encode = function (bytes) {
13
+ return bytes.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
14
+ };
15
+ Base64Url.decode = function (encoded) {
16
+ return Buffer.from(encoded.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
17
+ };
18
+ return Base64Url;
19
+ }());
20
+ exports.Base64Url = Base64Url;
21
+ //# sourceMappingURL=Base64Url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base64Url.js","sourceRoot":"","sources":["../../../src/encryption/Base64Url.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH;IAAA;IAQA,CAAC;IAPQ,gBAAM,GAAb,UAAc,KAAa;QACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9F,CAAC;IAEM,gBAAM,GAAb,UAAc,OAAe;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACH,gBAAC;AAAD,CAAC,AARD,IAQC;AARY,8BAAS"}
@@ -0,0 +1,33 @@
1
+ import { Table } from '../Table';
2
+ import { Record } from '../Record';
3
+ /**
4
+ * One wrapped per-owner data key version (see `DataKeyStore`).
5
+ *
6
+ * - `active` — encrypts new writes (the highest active version) and fingerprints queries.
7
+ * - `retired` — decrypt-only: envelopes referencing it still unwrap, but no new writes or
8
+ * query fingerprints use it. A rotation walk moves every row off a version, then retires it.
9
+ *
10
+ * Crypto-shred = deleting an owner's rows here: every envelope naming that owner becomes
11
+ * permanently unreadable, including inside backups.
12
+ */
13
+ export interface DataEncryptionKey extends Record {
14
+ /** The key owner (a user id — the row's permission-source scope owner). */
15
+ owner: string;
16
+ /** Monotonic per-owner version; envelopes name (owner, version). */
17
+ version: number;
18
+ /** The data-key material, wrapped by the master key (`MasterKeyProvider`). */
19
+ wrappedKey: string;
20
+ status: 'active' | 'retired';
21
+ }
22
+ export declare class DataEncryptionKeyTable extends Table<DataEncryptionKey> {
23
+ name: string;
24
+ columns: Table<DataEncryptionKey>['columns'];
25
+ /** (owner, version) is the identity an envelope names — the race loser on concurrent
26
+ * first-write key creation fails here and re-reads the winner's key. */
27
+ indexes: {
28
+ columns: (keyof DataEncryptionKey)[];
29
+ name?: string;
30
+ unique?: boolean;
31
+ }[];
32
+ }
33
+ //# sourceMappingURL=DataEncryptionKeyTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataEncryptionKeyTable.d.ts","sourceRoot":"","sources":["../../../src/encryption/DataEncryptionKeyTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,MAAM,EAAqB,MAAM,WAAW,CAAC;AAGtD;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAkB,SAAQ,MAAM;IAC/C,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC9B;AAED,qBAAa,sBAAuB,SAAQ,KAAK,CAAC,iBAAiB,CAAC;IAC3D,IAAI,SAAyB;IAC7B,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAKhD;IACH;6EACyE;IAClE,OAAO,EAAE;QAAE,OAAO,EAAE,CAAC,MAAM,iBAAiB,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAEzF;CAGH"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.DataEncryptionKeyTable = void 0;
19
+ var Table_1 = require("../Table");
20
+ var Record_1 = require("../Record");
21
+ var Columns_1 = require("../Columns");
22
+ var DataEncryptionKeyTable = /** @class */ (function (_super) {
23
+ __extends(DataEncryptionKeyTable, _super);
24
+ function DataEncryptionKeyTable() {
25
+ var _this = _super !== null && _super.apply(this, arguments) || this;
26
+ _this.name = 'data_encryption_key';
27
+ _this.columns = (0, Record_1.withRecordColumns)({
28
+ owner: new Columns_1.StringColumn('owner', { nullable: false }, 36),
29
+ version: new Columns_1.IntegerColumn('version', { nullable: false }),
30
+ wrappedKey: new Columns_1.StringColumn('wrapped_key', { nullable: false }, 'MAX'),
31
+ status: new Columns_1.StringColumn('status', { nullable: false }, 16),
32
+ });
33
+ /** (owner, version) is the identity an envelope names — the race loser on concurrent
34
+ * first-write key creation fails here and re-reads the winner's key. */
35
+ _this.indexes = [
36
+ { columns: ['owner', 'version'], name: 'data_encryption_key_owner_version_unique', unique: true },
37
+ ];
38
+ return _this;
39
+ // No auth block: default-deny for every non-system caller. Key rows are framework
40
+ // machinery, only ever touched through system paths (DataKeyStore).
41
+ }
42
+ return DataEncryptionKeyTable;
43
+ }(Table_1.Table));
44
+ exports.DataEncryptionKeyTable = DataEncryptionKeyTable;
45
+ //# sourceMappingURL=DataEncryptionKeyTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataEncryptionKeyTable.js","sourceRoot":"","sources":["../../../src/encryption/DataEncryptionKeyTable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,kCAAiC;AACjC,oCAAsD;AACtD,sCAAyD;AAsBzD;IAA4C,0CAAwB;IAApE;QAAA,qEAeC;QAdQ,UAAI,GAAG,qBAAqB,CAAC;QAC7B,aAAO,GAAwC,IAAA,0BAAiB,EAAoB;YACzF,KAAK,EAAE,IAAI,sBAAY,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACzD,OAAO,EAAE,IAAI,uBAAa,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC1D,UAAU,EAAE,IAAI,sBAAY,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC;YACvE,MAAM,EAAE,IAAI,sBAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;SAC5D,CAAC,CAAC;QACH;iFACyE;QAClE,aAAO,GAAgF;YAC5F,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,0CAA0C,EAAE,MAAM,EAAE,IAAI,EAAE;SAClG,CAAC;;QACF,kFAAkF;QAClF,oEAAoE;IACtE,CAAC;IAAD,6BAAC;AAAD,CAAC,AAfD,CAA4C,aAAK,GAehD;AAfY,wDAAsB"}
@@ -0,0 +1,84 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /**
4
+ * Decrypt was asked for a key that does not exist — most often because the owner's keys were
5
+ * crypto-shredded (account deletion): the ciphertext is permanently unreadable, by design.
6
+ */
7
+ export declare class EncryptionKeyUnavailableError extends Error {
8
+ constructor(owner: string, version: number);
9
+ }
10
+ /** Unwrapped material of one data-key version. */
11
+ export interface DataKeyMaterial {
12
+ owner: string;
13
+ version: number;
14
+ /** AES-256 key for row values (first half of the 64-byte material). */
15
+ cipherKey: Buffer;
16
+ /** HMAC key for search-token fingerprints (second half). */
17
+ indexKey: Buffer;
18
+ }
19
+ /**
20
+ * Per-owner data keys for column encryption: creation, unwrap-once caching, rotation,
21
+ * retirement, and crypto-shred. Key rows live in `DataEncryptionKeyTable`, wrapped by the
22
+ * deployment's `MasterKeyProvider`; the vault is called once per key (then cached), never
23
+ * per row.
24
+ *
25
+ * All database access runs as system, OUTSIDE any ambient transaction: a key row must be
26
+ * durable independent of the caller's transaction outcome, because unwrapped material is
27
+ * cached in-process the moment it exists — a key created inside a transaction that later
28
+ * rolls back would leave the cache claiming a key the database lost. An orphaned key row
29
+ * from a rolled-back first write is harmless (a key no envelope names).
30
+ *
31
+ * The caches live on the global object (the per-package-install duplicate-module pattern —
32
+ * see `Db.getDefaultDbDriver`), so every live copy of this package shares one cache.
33
+ */
34
+ export declare class DataKeyStore {
35
+ /** Unwrapped material cache TTL — bounds how long a shredded key can linger in a warm process. */
36
+ private static readonly MATERIAL_TTL_MS;
37
+ /** Owner key-row list TTL — bounds cross-process staleness of the active-version set. */
38
+ private static readonly OWNER_ROWS_TTL_MS;
39
+ private static readonly CACHES_GLOBAL_KEY;
40
+ private static readonly KEY_MATERIAL_BYTES;
41
+ private logger;
42
+ private table;
43
+ /**
44
+ * The key that encrypts new writes for `owner`: the highest active version, created on
45
+ * first use (each owner gets a randomly generated data key, wrapped by the master key).
46
+ */
47
+ getWriteKey(owner: string): Promise<DataKeyMaterial>;
48
+ /** The key an envelope names — any status; decrypt must work until the key is shredded. */
49
+ getKeyByVersion(owner: string, version: number): Promise<DataKeyMaterial>;
50
+ /**
51
+ * The index keys a query fingerprints with: every ACTIVE version of every accessible
52
+ * owner (normally one per owner; two during a rotation window). Owners with no keys yet
53
+ * contribute nothing — they cannot have encrypted rows.
54
+ */
55
+ getQueryIndexKeys(owners: string[]): Promise<DataKeyMaterial[]>;
56
+ /**
57
+ * Mint the next key version for `owner` (new writes use it immediately; the old version
58
+ * stays active — still fingerprinting queries — until a rotation walk
59
+ * (`EncryptionLifecycleWalker` mode 'rotate-keys') has rewritten every row, after which
60
+ * the caller retires it via `retireKeyVersion`).
61
+ * @returns the new version number
62
+ */
63
+ rotateKey(owner: string): Promise<number>;
64
+ /** Retire a version: envelopes naming it still decrypt; queries and writes stop using it. */
65
+ retireKeyVersion(owner: string, version: number): Promise<void>;
66
+ /**
67
+ * Crypto-shred: delete every key version of `owner` and evict the caches. Every envelope
68
+ * naming the owner — in live rows and in every backup — becomes permanently unreadable.
69
+ */
70
+ shredOwnerKeys(owner: string): Promise<number>;
71
+ private createKeyVersion;
72
+ private getOwnerRows;
73
+ private unwrap;
74
+ private highestActive;
75
+ private requireOwner;
76
+ /**
77
+ * A system Db pinned OUTSIDE any ambient transaction (see class doc). Imported lazily —
78
+ * this module is reachable from the serializer layer, below `Db` in the module graph.
79
+ */
80
+ private systemDb;
81
+ private caches;
82
+ private evictOwner;
83
+ }
84
+ //# sourceMappingURL=DataKeyStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataKeyStore.d.ts","sourceRoot":"","sources":["../../../src/encryption/DataKeyStore.ts"],"names":[],"mappings":";;AAKA;;;GAGG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAQ3C;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACvB,kGAAkG;IAClG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAkB;IACzD,yFAAyF;IACzF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAa;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IAChD,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,KAAK,CAAgC;IAE7C;;;OAGG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB1D,2FAA2F;IACrF,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAkB/E;;;;OAIG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAcrE;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU/C,6FAA6F;IACvF,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarE;;;OAGG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAetC,gBAAgB;YAsBhB,YAAY;YAsBZ,MAAM;IA2BpB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IAMpB;;;OAGG;YACW,QAAQ;IAuBtB,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,UAAU;CAGnB"}