@antelopejs/interface-database-decorators 0.2.2 → 0.3.1
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 +1 -0
- package/dist/modifiers/common.d.ts +45 -0
- package/dist/modifiers/common.js +45 -0
- package/dist/modifiers/common.js.map +1 -1
- package/dist/modifiers/encryption.d.ts +5 -1
- package/dist/modifiers/encryption.js +9 -1
- package/dist/modifiers/encryption.js.map +1 -1
- package/dist/modifiers/hash.d.ts +26 -1
- package/dist/modifiers/hash.js +63 -6
- package/dist/modifiers/hash.js.map +1 -1
- package/dist/modifiers/localization.d.ts +4 -0
- package/dist/modifiers/localization.js +8 -3
- package/dist/modifiers/localization.js.map +1 -1
- package/dist/tests/hash_upgrade.test.js +19 -0
- package/dist/tests/hash_upgrade.test.js.map +1 -1
- package/dist/tests/localized_no_key.test.d.ts +1 -0
- package/dist/tests/localized_no_key.test.js +74 -0
- package/dist/tests/localized_no_key.test.js.map +1 -0
- package/dist/tests/modifiers/hash_async_set.test.d.ts +1 -0
- package/dist/tests/modifiers/hash_async_set.test.js +135 -0
- package/dist/tests/modifiers/hash_async_set.test.js.map +1 -0
- package/docs/3.table-modifiers.md +27 -4
- package/package.json +3 -3
- package/skills/database-decorators-interface/SKILL.md +4 -3
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ Part of [AntelopeJS](https://github.com/AntelopeJS/antelopejs). Used by [Antelop
|
|
|
16
16
|
- `Table`, `@RegisterTable`, `@Field`, `@Index` and `@Fixture` declare tables, indexes and seed rows; `RegisterSchema` provisions them.
|
|
17
17
|
- `BasicDataModel` and `GetModel` give each table typed CRUD methods with optional validation.
|
|
18
18
|
- `@Encrypted`, `@Hashed`, `@Localized`, `@CreationTime` and `@UpdateTime` transform field values on write and read.
|
|
19
|
+
- `await row.setHashAsync(field, value)` and `await row.testHashAsync(field, value)` hash a password off the event loop. Use them on a server: assigning a `@Hashed` field blocks the event loop for about 150 ms. See [Table modifiers](./docs/3.table-modifiers.md#mixin-methods).
|
|
19
20
|
- `@Model` injects a model into an [`@antelopejs/interface-api`](https://github.com/AntelopeJS/interface-api) controller.
|
|
20
21
|
|
|
21
22
|
## Implementations
|
|
@@ -76,6 +76,32 @@ export declare function fromDatabase<T extends Constructible>(rawObject: any, Ta
|
|
|
76
76
|
export declare function toDatabase<T extends InternalHolder>(object: T): T & InternalHolder;
|
|
77
77
|
type ExtractModifierOptions<T> = T extends Modifier<any, infer Options> ? Options : undefined;
|
|
78
78
|
type ExtractModifierArgs<T> = T extends OneWayModifier<any, infer Args> ? Args : [];
|
|
79
|
+
/**
|
|
80
|
+
* Attaches a modifier to a field of a table class. A property decorator calls
|
|
81
|
+
* it with what it holds: `attachModifier(target.constructor, Modifier,
|
|
82
|
+
* propertyKey, options)`.
|
|
83
|
+
*
|
|
84
|
+
* At compile time, `options` must match the options type of `Modifier`.
|
|
85
|
+
* `TableClass` is any function and `field` any property key: nothing checks
|
|
86
|
+
* that `field` names a member of the class.
|
|
87
|
+
*
|
|
88
|
+
* At run time, a modifier with `lock` replaces the field with an accessor on
|
|
89
|
+
* `TableClass.prototype` that routes reads and writes through the field's
|
|
90
|
+
* modifiers. A modifier without `lock` only handles events, and the field
|
|
91
|
+
* keeps its plain value. Each method of the modifier other than `lock` and
|
|
92
|
+
* `unlock` becomes a handler for the event of the same name.
|
|
93
|
+
*
|
|
94
|
+
* @param TableClass The table class, `target.constructor` in a property
|
|
95
|
+
* decorator.
|
|
96
|
+
* @param Modifier The modifier class. The engine creates one instance per
|
|
97
|
+
* attachment and identifies it by its class name.
|
|
98
|
+
* @param field The field to modify, `propertyKey` in a property decorator.
|
|
99
|
+
* @param options The modifier's options, read through `this.options`.
|
|
100
|
+
* @throws Error when a modifier with `lock` is attached to `constructor` or
|
|
101
|
+
* `__proto__`.
|
|
102
|
+
* @throws Error when a modifier with `lock` is attached to a field that
|
|
103
|
+
* already has a one-way modifier, one with `lock` and no `unlock`.
|
|
104
|
+
*/
|
|
79
105
|
export declare function attachModifier<M extends Constructible<Modifier>>(TableClass: Function, Modifier: M, field: PropertyKey, options: ExtractModifierOptions<InstanceType<M>>): void;
|
|
80
106
|
export declare function getModifiedFields<T extends {
|
|
81
107
|
constructor: any;
|
|
@@ -87,6 +113,25 @@ type ModifierWithProxyArgs = {
|
|
|
87
113
|
modifier: Constructible<TwoWayModifier<any, any[], any, any>>;
|
|
88
114
|
args: unknown[];
|
|
89
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* Builds a query expression that reads a field unlocked, for use inside a
|
|
118
|
+
* database query. Each two-way modifier on the field passes the stored value
|
|
119
|
+
* through its own `unlockrequest`. The expression yields the stored value as
|
|
120
|
+
* it is when the field has only one-way modifiers, and the plain field when
|
|
121
|
+
* it has no modifier.
|
|
122
|
+
*
|
|
123
|
+
* At compile time, `field` must be a key of the row type. Nothing ties
|
|
124
|
+
* `table` to the row type, and nothing checks each entry's `args` against
|
|
125
|
+
* its modifier's arguments.
|
|
126
|
+
*
|
|
127
|
+
* @param table The table class. It is read only for its modifier metadata.
|
|
128
|
+
* @param object The row in the query.
|
|
129
|
+
* @param field The field to read.
|
|
130
|
+
* @param modifiers The arguments for each two-way modifier on the field,
|
|
131
|
+
* matched to it by class name.
|
|
132
|
+
* @throws TypeError when `modifiers` has no entry for a two-way modifier on
|
|
133
|
+
* the field.
|
|
134
|
+
*/
|
|
90
135
|
export declare function unlockrequest<T extends {}, K extends keyof T>(table: Constructible, object: DatabaseDev.ValueProxy<T>, field: K, modifiers: ModifierWithProxyArgs[]): DatabaseDev.ValueProxy<T[K]>;
|
|
91
136
|
export declare function lock<T extends {
|
|
92
137
|
constructor: any;
|
package/dist/modifiers/common.js
CHANGED
|
@@ -182,6 +182,32 @@ function toDatabase(object) {
|
|
|
182
182
|
triggerEvent(object, "toDatabase", result);
|
|
183
183
|
return result;
|
|
184
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Attaches a modifier to a field of a table class. A property decorator calls
|
|
187
|
+
* it with what it holds: `attachModifier(target.constructor, Modifier,
|
|
188
|
+
* propertyKey, options)`.
|
|
189
|
+
*
|
|
190
|
+
* At compile time, `options` must match the options type of `Modifier`.
|
|
191
|
+
* `TableClass` is any function and `field` any property key: nothing checks
|
|
192
|
+
* that `field` names a member of the class.
|
|
193
|
+
*
|
|
194
|
+
* At run time, a modifier with `lock` replaces the field with an accessor on
|
|
195
|
+
* `TableClass.prototype` that routes reads and writes through the field's
|
|
196
|
+
* modifiers. A modifier without `lock` only handles events, and the field
|
|
197
|
+
* keeps its plain value. Each method of the modifier other than `lock` and
|
|
198
|
+
* `unlock` becomes a handler for the event of the same name.
|
|
199
|
+
*
|
|
200
|
+
* @param TableClass The table class, `target.constructor` in a property
|
|
201
|
+
* decorator.
|
|
202
|
+
* @param Modifier The modifier class. The engine creates one instance per
|
|
203
|
+
* attachment and identifies it by its class name.
|
|
204
|
+
* @param field The field to modify, `propertyKey` in a property decorator.
|
|
205
|
+
* @param options The modifier's options, read through `this.options`.
|
|
206
|
+
* @throws Error when a modifier with `lock` is attached to `constructor` or
|
|
207
|
+
* `__proto__`.
|
|
208
|
+
* @throws Error when a modifier with `lock` is attached to a field that
|
|
209
|
+
* already has a one-way modifier, one with `lock` and no `unlock`.
|
|
210
|
+
*/
|
|
185
211
|
function attachModifier(TableClass, Modifier, field, options) {
|
|
186
212
|
const entry = (0, records_1.newModifiedField)(Modifier);
|
|
187
213
|
Object.assign(entry.modifier, { options });
|
|
@@ -249,6 +275,25 @@ function unlock(object, Modifier, fields, ...args) {
|
|
|
249
275
|
}
|
|
250
276
|
}
|
|
251
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Builds a query expression that reads a field unlocked, for use inside a
|
|
280
|
+
* database query. Each two-way modifier on the field passes the stored value
|
|
281
|
+
* through its own `unlockrequest`. The expression yields the stored value as
|
|
282
|
+
* it is when the field has only one-way modifiers, and the plain field when
|
|
283
|
+
* it has no modifier.
|
|
284
|
+
*
|
|
285
|
+
* At compile time, `field` must be a key of the row type. Nothing ties
|
|
286
|
+
* `table` to the row type, and nothing checks each entry's `args` against
|
|
287
|
+
* its modifier's arguments.
|
|
288
|
+
*
|
|
289
|
+
* @param table The table class. It is read only for its modifier metadata.
|
|
290
|
+
* @param object The row in the query.
|
|
291
|
+
* @param field The field to read.
|
|
292
|
+
* @param modifiers The arguments for each two-way modifier on the field,
|
|
293
|
+
* matched to it by class name.
|
|
294
|
+
* @throws TypeError when `modifiers` has no entry for a two-way modifier on
|
|
295
|
+
* the field.
|
|
296
|
+
*/
|
|
252
297
|
function unlockrequest(table, object, field, modifiers) {
|
|
253
298
|
const args = Object.fromEntries(modifiers.map(({ modifier, args: modArgs }) => [modifier.name, modArgs]));
|
|
254
299
|
const stored = object.cast();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/modifiers/common.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/modifiers/common.ts"],"names":[],"mappings":";;;AAoOA,sCAUC;AAMD,kCAUC;AAMD,oCAUC;AAMD,gCAMC;AAiCD,wCAkEC;AAaD,8CAKC;AAED,wBAiBC;AA0BD,sCA0BC;AAED,oBAgBC;AAED,8BA0BC;AAGD,oCAqBC;AA1hBD,sCAKmB;AACnB,4CAQ0B;AAC1B,gDAe4B;AAE5B,8CAO4B;AAN1B,4GAAA,iBAAiB,OAAA;AACjB,sGAAA,WAAW,OAAA;AAEX,mGAAA,QAAQ,OAAA;AACR,yGAAA,cAAc,OAAA;AACd,yGAAA,cAAc,OAAA;AAgChB,MAAa,uBAAuB;IAC3B,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAC5B,qEAAqE,CACtE,CAAC;IAEF;;;OAGG;IACI,MAAM,CAAC,OAAO,CAAC,MAA+B;QACnD,OAAO,IAAA,2BAAiB,EAAC,IAAI,uBAAuB,EAAE,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAEM,MAAM,GAAyC,EAAE,CAAC;IAElD,MAAM,GAAG,IAAI,GAAG,EAGpB,CAAC;;AAlBN,0DAmBC;AAED,MAAa,wBAAwB;IAC5B,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAC5B,sEAAsE,CACvE,CAAC;IAEF,UAAU,CAA0B;IACpC;;;OAGG;IACH,sKAAsK;IACtK,QAAQ,GAA4B,EAAE,CAAC;IACvC;;;OAGG;IACH,MAAM,GAA8C,EAAE,CAAC;IAEvD,YAAY,MAAW;QACrB,IAAI,CAAC,UAAU,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAC3E,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpD,IAAI,UAAU,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,CAAC,IAAA,mBAAW,EAAC,YAAY,CAAC;YAC1B,CAAC,IAAI,CAAC,IAAI,CACR,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CACnB,CAAC,CAAC,YAAY,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC;gBAClD,QAAQ,IAAI,QAAQ;gBACpB,CAAC,CAAC,EAAE,IAAI,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CACrC,CACF,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,KAAkB,EAAE,QAAwB;QAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;YAC7C,IAAI,IAAA,gBAAQ,EAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9C,IAAI,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClC,KAAK,GAAG,IAAA,iBAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5D,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACzD,CAAC;gBACJ,CAAC;qBAAM,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;oBAC3D,KAAK,GAAG,IAAA,iBAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5D,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CACvB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,IAAI,CACf,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CACnB,CAAC,CAAC,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;YAC9C,MAAM,IAAI,QAAQ;YAClB,CAAC,CAAC,EAAE,IAAI,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CACrC,CAAC;IACJ,CAAC;IAED,+JAA+J;IAC/J,GAAG,CAAC,KAAkB,EAAE,QAAwB,EAAE,KAAc;QAC9D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YACnC,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAKR,EAAE,CAAC;QACT,IAAI,IAAI,GAAG,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1C,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9C,IAAI,IAAA,gBAAQ,EAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,IAAI,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,IAAI;SACL,CAAC,CAAC;QAEH,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,IAAA,iBAAS,EAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,KAAK,GAAG,IAAA,iBAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5D,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACnC,OAAO,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;;AAzHH,4DA0HC;AAED,4DAA4D;AAC5D,SAAS,YAAY,CAAiC,MAAS;IAC7D,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAC3E,6IAA6I;IAC7I,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAmB,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAC3B,SAAuB,EACvB,UAA4B;IAE5B,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAA,mBAAW,EAAC,UAAU,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvE,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IACnD,yJAAyJ;IACzJ,OAAO,QAAa,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CACzB,MAAS;IAET,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7B,IAAI,WAAW,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAC1B,SAAc,EACd,UAAa;IAEb,yKAAyK;IACzK,MAAM,WAAW,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;IACrC,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,IAAA,mBAAW,EAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,YAAY,CAAC,WAAW,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IACrD,2GAA2G;IAC3G,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CACxB,MAAS;IAET,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,cAAc,CAC5B,UAAoB,EACpB,QAAW,EACX,KAAkB,EAClB,OAAgD;IAEhD,MAAM,KAAK,GAAG,IAAA,0BAAgB,EAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAEnE,IAAI,CAAC,IAAA,oBAAY,EAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,IAAA,+BAAqB,EAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,IAAI,IAAA,mBAAW,EAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,wCAAwC,CACrH,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAC5H,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE;gBACjD,GAAG,EAAE;oBACH,OAAO,IAAA,oBAAW,EAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,GAAG,CACpD,KAAK,EACL,IAAA,qBAAW,EAAC,IAAI,CAAC,CAClB,CAAC;gBACJ,CAAC;gBACD,GAAG,EAAE,UAAgC,KAAK;oBACxC,IAAA,oBAAW,EAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,GAAG,CAC7C,KAAK,EACL,IAAA,qBAAW,EAAC,IAAI,CAAC,EACjB,KAAK,CACN,CAAC;gBACJ,CAAC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE;YACpD,KAAK,EAAE;gBACL,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,MAAM,OAAO,GAAY,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAiB,EAAE,KAAK,CAAC,IAAI,IAAA,sBAAc,EAAC,OAAO,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAS,EACT,aAAsC,EACtC,MAA+B;IAE/B,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAC3E,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACvD,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,aAAa,CAAC,IAAI,CAAC,CAC3E,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAC/B,MAAS,EACT,QAAiC;IAEjC,OAAO,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,MAAM,CAIpB,MAAS,EACT,QAAW,EACX,MAA0C,EAC1C,GAAG,IAA0C;IAE7C,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAChD,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAA,oBAAU,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,aAAa,CAC3B,KAAoB,EACpB,MAAiC,EACjC,KAAQ,EACR,SAAkC;IAElC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAC7B,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CACzE,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAiC,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,CAGpD,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CACzB,IAAA,mBAAW,EAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,gBAAQ,EAAC,QAAQ,CAAC;QAC1C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAC7D,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAC9C,CAAC;IACF,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAEtE,CAAC;AACN,CAAC;AAED,SAAgB,IAAI,CAIlB,MAAS,EACT,QAAW,EACX,MAA0C,EAC1C,GAAG,IAA+C;IAElD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CACvB,MAAS,EACT,KAAQ,EACR,KAAW;IAEX,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAA,qBAAW,EAAC,MAAM,CAAC,CAAC;IACrC,MAAM,GAAG,GAAY,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,GACR,IAAA,sBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7B,CAAC,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,IAAA,mBAAW,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAA,iBAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,IAAA,gBAAQ,EAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,IAAA,iBAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC3D,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,KAAK,CAAC;AACvB,CAAC;AAED,yIAAyI;AACzI,SAAgB,YAAY,CAC1B,MAAS,EACT,KAAa,EACb,GAAG,IAAe;IAElB,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAE3E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,qBAAW,EAAC,MAAM,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;QACvE,IAAA,iBAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -20,7 +20,11 @@ export declare class EncryptionModifier extends TwoWayModifier<LockedType, [
|
|
|
20
20
|
readonly autolock = true;
|
|
21
21
|
lock(_locked_value: LockedType | undefined, value: unknown): LockedType;
|
|
22
22
|
readonly autounlock = true;
|
|
23
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Decrypts a stored value. `null` is no value and stays `null`, as a
|
|
25
|
+
* localized field read with no locale gives it.
|
|
26
|
+
*/
|
|
27
|
+
unlock(locked: LockedType | null): unknown;
|
|
24
28
|
unlockrequest(data: DatabaseDev.ValueProxy<LockedType>): DatabaseDev.ValueProxy<unknown>;
|
|
25
29
|
[MixinSymbol]: {
|
|
26
30
|
new (): {};
|
|
@@ -95,7 +95,15 @@ class EncryptionModifier extends common_1.TwoWayModifier {
|
|
|
95
95
|
return [encrypted, iv.toString("base64"), authTag];
|
|
96
96
|
}
|
|
97
97
|
autounlock = true;
|
|
98
|
-
|
|
98
|
+
/**
|
|
99
|
+
* Decrypts a stored value. `null` is no value and stays `null`, as a
|
|
100
|
+
* localized field read with no locale gives it.
|
|
101
|
+
*/
|
|
102
|
+
unlock(locked) {
|
|
103
|
+
if (locked === null) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
const [locked_value, iv_str, authTag] = locked;
|
|
99
107
|
const decipher = (0, node_crypto_1.createDecipheriv)(this.options.algorithm || "aes-256-gcm", this.options.secretKey, Buffer.from(iv_str, "base64"));
|
|
100
108
|
if (acceptsAuthTag(decipher) && authTag) {
|
|
101
109
|
decipher.setAuthTag(Buffer.from(authTag, "base64"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/modifiers/encryption.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/modifiers/encryption.ts"],"names":[],"mappings":";;;AACA,sEAA8E;AAC9E,6CAQqB;AAErB,qCAAuE;AACvE,4CAAkE;AAalE,SAAS,YAAY,CAAY,GAAW;IAC1C,MAAM,IAAI,GAAY,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,IAAI,YAAY,IAAI;QACzB,CAAC,CAAC;YACE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;YACzB,IAAI,EAAE,MAAM;SACb;QACH,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAWD;;;;GAIG;AACH,SAAS,YAAY,CAAC,SAAsB;IAC1C,IACE,CAAC,IAAA,gBAAQ,EAAC,SAAS,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;QACnC,SAAS,CAAC,IAAI,KAAK,MAAM;QACzB,CAAC,IAAA,gBAAQ,EAAC,SAAS,CAAC,KAAK,CAAC,EAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,MAAM,MAAM,GAAG;IACb,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC;AACF,MAAM,UAAU,GACd,kEAAkE,CAAC;AAErE;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAC7D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,KAAkB;IACpD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CACjB,MAAc;IAEd,OAAO,YAAY,IAAI,MAAM,IAAI,IAAA,kBAAU,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CACrB,QAAkB;IAElB,OAAO,YAAY,IAAI,QAAQ,IAAI,IAAA,kBAAU,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAa,kBAAmB,SAAQ,uBAKvC;IACU,QAAQ,GAAG,IAAI,CAAC;IAET,IAAI,CAClB,aAAqC;IACrC,8LAA8L;IAC9L,KAAc;QAEd,MAAM,EAAE,GAAG,IAAA,yBAAW,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAA,4BAAc,EAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,aAAa,EACvC,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,EAAE,CACH,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,EAAE;SACf,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEtB,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAEQ,UAAU,GAAG,IAAI,CAAC;IAE3B;;;OAGG;IACa,MAAM,CAAC,MAAyB;QAC9C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAA,8BAAgB,EAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,aAAa,EACvC,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC9B,CAAC;QAEF,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;YACxC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CACjC,MAAM,CAAC,MAAM,CAAC;YACZ,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACpD,QAAQ,CAAC,KAAK,EAAE;SACjB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EACnB,YAAY,CACb,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAEe,aAAa,CAC3B,IAAwC;QAExC,kMAAkM;QAClM,OAAO,IAAuC,CAAC;IACjD,CAAC;IAED,CAAC,oBAAW,CAAC,GAAG;KAAQ,CAAC;CAC1B;AAzED,gDAyEC;AAED;;;;;;GAMG;AACU,QAAA,SAAS,GAAG,IAAA,kCAAqB,EAC5C,CAAC,MAAM,EAAE,WAAW,EAAE,OAAgB,EAAE,EAAE;IACxC,IAAA,uBAAc,EACZ,MAAM,CAAC,WAAW,EAClB,kBAAkB,EAClB,WAAW,EACX,OAAO,CACR,CAAC;AACJ,CAAC,CACF,CAAC"}
|
package/dist/modifiers/hash.d.ts
CHANGED
|
@@ -24,9 +24,18 @@ export declare class HashModifier extends OneWayModifier<string | undefined, [
|
|
|
24
24
|
/**
|
|
25
25
|
* Hashes a new value. Assigning the stored hash back keeps it as it is.
|
|
26
26
|
* Blocks the event loop for one scrypt run: a setter and the conversions
|
|
27
|
-
* behind `insert` and `update` are synchronous.
|
|
27
|
+
* behind `insert` and `update` are synchronous. `setHashAsync` runs it on
|
|
28
|
+
* the thread pool instead.
|
|
28
29
|
*/
|
|
29
30
|
lock(locked_value: string | undefined, value: unknown): string | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* What to assign to the field so that its setter stores the hash of `value`
|
|
33
|
+
* without running scrypt: the scrypt run happens here, on the thread pool.
|
|
34
|
+
* A value the setter handles without scrypt comes back as it is: nothing,
|
|
35
|
+
* the stored hash itself (`locked_value`, empty when nothing is stored), or
|
|
36
|
+
* any value of a field with an `algorithm`.
|
|
37
|
+
*/
|
|
38
|
+
private lockAsync;
|
|
30
39
|
test(locked_value: string | undefined, value: HashInput): boolean;
|
|
31
40
|
/** {@link test} on the thread pool, without blocking the event loop. */
|
|
32
41
|
testAsync(locked_value: string, value: HashInput): Promise<boolean>;
|
|
@@ -61,6 +70,22 @@ export declare class HashModifier extends OneWayModifier<string | undefined, [
|
|
|
61
70
|
* @returns Whether the new value is identical to the original or not.
|
|
62
71
|
*/
|
|
63
72
|
testHashAsync<This extends {}, F extends keyof This>(this: This, field: F, value: This[F]): Promise<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* Hash a value on the thread pool, then assign it to the field. The row
|
|
75
|
+
* stores what `this[field] = value` stores, in the same format, without
|
|
76
|
+
* blocking the event loop for the scrypt run. On a server, prefer it to
|
|
77
|
+
* assigning a hashed field. A field with another modifier beside
|
|
78
|
+
* {@link Hashed} is assigned at once, on the event loop. Calls on one row
|
|
79
|
+
* that overlap settle in the order their scrypt runs end: await each one.
|
|
80
|
+
*
|
|
81
|
+
* @param field - Name of the field to set.
|
|
82
|
+
* @param value - Value to hash and store.
|
|
83
|
+
*
|
|
84
|
+
* @returns Once the field holds the hash of `value`.
|
|
85
|
+
*
|
|
86
|
+
* @throws Error when `field` has no {@link Hashed} decorator.
|
|
87
|
+
*/
|
|
88
|
+
setHashAsync<This extends object, F extends keyof This>(this: This, field: F, value: This[F]): Promise<void>;
|
|
64
89
|
/**
|
|
65
90
|
* Tell whether a stored hash needs writing again: it uses an older format
|
|
66
91
|
* or cost. After a successful test, assign the tested value to the field
|
package/dist/modifiers/hash.js
CHANGED
|
@@ -40,6 +40,24 @@ function scryptAsync(...[password, salt, keylen, options]) {
|
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
+
/** A new salt and the scrypt arguments that derive the current hash of `candidate` with it. */
|
|
44
|
+
function currentScrypt(candidate) {
|
|
45
|
+
const salt = (0, node_crypto_1.randomBytes)(SALT_BYTES);
|
|
46
|
+
return {
|
|
47
|
+
salt,
|
|
48
|
+
run: scryptArgs(candidate, salt, KEY_BYTES, SCRYPT_COST),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function storedScrypt(salt, key) {
|
|
52
|
+
return `${CURRENT_PREFIX}${unpaddedBase64(salt)}$${unpaddedBase64(key)}`;
|
|
53
|
+
}
|
|
54
|
+
/** A stored hash derived ahead of the setter, which `lock` keeps as it is. */
|
|
55
|
+
class PrecomputedHash {
|
|
56
|
+
stored;
|
|
57
|
+
constructor(stored) {
|
|
58
|
+
this.stored = stored;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
43
61
|
function parseScrypt(stored) {
|
|
44
62
|
const match = STORED_SCRYPT.exec(stored);
|
|
45
63
|
if (!match)
|
|
@@ -97,13 +115,14 @@ function storedText(stored) {
|
|
|
97
115
|
}
|
|
98
116
|
function withHashedField(row, field, use) {
|
|
99
117
|
const metaTable = (0, common_1.getMetadata)(row.constructor, common_2.ModifiersStaticMetadata);
|
|
100
|
-
const
|
|
118
|
+
const list = (0, records_1.fieldsByKey)(metaTable)[field];
|
|
119
|
+
const entry = list?.find(({ modifier }) => modifier instanceof HashModifier);
|
|
101
120
|
if (!entry || !(entry.modifier instanceof HashModifier)) {
|
|
102
121
|
throw new Error(`Field ${String(field)} is not hashed`);
|
|
103
122
|
}
|
|
104
123
|
const internal = (0, records_1.getInternal)(row);
|
|
105
124
|
const stored = (0, records_1.dataByKey)(internal)[field];
|
|
106
|
-
return (0, records_1.withRef)(internal, entry.id, entry.modifier, entry.metaRef, (modifier) => use(modifier, (0, kinds_1.isString)(stored) ? stored : ""));
|
|
125
|
+
return (0, records_1.withRef)(internal, entry.id, entry.modifier, entry.metaRef, (modifier) => use(modifier, (0, kinds_1.isString)(stored) ? stored : "", list.length === 1));
|
|
107
126
|
}
|
|
108
127
|
/**
|
|
109
128
|
* Hash modifier. enables the use of {@link Hashed} on table fields.
|
|
@@ -118,13 +137,17 @@ class HashModifier extends common_2.OneWayModifier {
|
|
|
118
137
|
/**
|
|
119
138
|
* Hashes a new value. Assigning the stored hash back keeps it as it is.
|
|
120
139
|
* Blocks the event loop for one scrypt run: a setter and the conversions
|
|
121
|
-
* behind `insert` and `update` are synchronous.
|
|
140
|
+
* behind `insert` and `update` are synchronous. `setHashAsync` runs it on
|
|
141
|
+
* the thread pool instead.
|
|
122
142
|
*/
|
|
123
143
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters -- overrides OneWayModifier.lock; a modified field's value has its table class's type, which the shared modifier chain cannot name
|
|
124
144
|
lock(locked_value, value) {
|
|
125
145
|
if (value === undefined) {
|
|
126
146
|
return value;
|
|
127
147
|
}
|
|
148
|
+
if (value instanceof PrecomputedHash) {
|
|
149
|
+
return value.stored;
|
|
150
|
+
}
|
|
128
151
|
if (value === locked_value) {
|
|
129
152
|
return locked_value;
|
|
130
153
|
}
|
|
@@ -136,9 +159,24 @@ class HashModifier extends common_2.OneWayModifier {
|
|
|
136
159
|
}
|
|
137
160
|
return digestOf(algorithm, this.meta.salt, candidate);
|
|
138
161
|
}
|
|
139
|
-
const salt = (
|
|
140
|
-
|
|
141
|
-
|
|
162
|
+
const { salt, run } = currentScrypt(candidate);
|
|
163
|
+
return storedScrypt(salt, (0, node_crypto_1.scryptSync)(...run));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* What to assign to the field so that its setter stores the hash of `value`
|
|
167
|
+
* without running scrypt: the scrypt run happens here, on the thread pool.
|
|
168
|
+
* A value the setter handles without scrypt comes back as it is: nothing,
|
|
169
|
+
* the stored hash itself (`locked_value`, empty when nothing is stored), or
|
|
170
|
+
* any value of a field with an `algorithm`.
|
|
171
|
+
*/
|
|
172
|
+
async lockAsync(locked_value, value) {
|
|
173
|
+
if (value === undefined ||
|
|
174
|
+
(locked_value !== "" && value === locked_value) ||
|
|
175
|
+
this.options.algorithm) {
|
|
176
|
+
return value;
|
|
177
|
+
}
|
|
178
|
+
const { salt, run } = currentScrypt(JSON.stringify(value));
|
|
179
|
+
return new PrecomputedHash(storedScrypt(salt, await scryptAsync(...run)));
|
|
142
180
|
}
|
|
143
181
|
test(locked_value, value) {
|
|
144
182
|
const check = this.plan(storedText(locked_value), value);
|
|
@@ -189,6 +227,25 @@ class HashModifier extends common_2.OneWayModifier {
|
|
|
189
227
|
async testHashAsync(field, value) {
|
|
190
228
|
return withHashedField(this, field, (modifier, stored) => modifier.testAsync(stored, value));
|
|
191
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* Hash a value on the thread pool, then assign it to the field. The row
|
|
232
|
+
* stores what `this[field] = value` stores, in the same format, without
|
|
233
|
+
* blocking the event loop for the scrypt run. On a server, prefer it to
|
|
234
|
+
* assigning a hashed field. A field with another modifier beside
|
|
235
|
+
* {@link Hashed} is assigned at once, on the event loop. Calls on one row
|
|
236
|
+
* that overlap settle in the order their scrypt runs end: await each one.
|
|
237
|
+
*
|
|
238
|
+
* @param field - Name of the field to set.
|
|
239
|
+
* @param value - Value to hash and store.
|
|
240
|
+
*
|
|
241
|
+
* @returns Once the field holds the hash of `value`.
|
|
242
|
+
*
|
|
243
|
+
* @throws Error when `field` has no {@link Hashed} decorator.
|
|
244
|
+
*/
|
|
245
|
+
async setHashAsync(field, value) {
|
|
246
|
+
const assigned = await withHashedField(this, field, (modifier, stored, alone) => alone ? modifier.lockAsync(stored, value) : value);
|
|
247
|
+
Reflect.set(this, field, assigned);
|
|
248
|
+
}
|
|
192
249
|
/**
|
|
193
250
|
* Tell whether a stored hash needs writing again: it uses an older format
|
|
194
251
|
* or cost. After a successful test, assign the tested value to the field
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/modifiers/hash.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/modifiers/hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,10 @@ export declare class LocalizationModifier extends ContainerModifier<Record<strin
|
|
|
47
47
|
* it in queries too (`unlockrequest`).
|
|
48
48
|
*/
|
|
49
49
|
lock(locked_value: Record<string, unknown> | undefined, value: unknown, key: string | undefined): Record<string, unknown>;
|
|
50
|
+
/**
|
|
51
|
+
* The value under `key`, else under the fallback locale. With no `key`, a
|
|
52
|
+
* field without a fallback value reads `null`, as an unset field does.
|
|
53
|
+
*/
|
|
50
54
|
unlock(locked_value: Record<string, unknown>, key: string | undefined): unknown;
|
|
51
55
|
unlockrequest(data: DatabaseDev.ValueProxy<Record<string, unknown>>, meta: DatabaseDev.ValueProxy<Record<string, never>>, key: DatabaseDev.ValueProxyOrValue<string | undefined>): DatabaseDev.ValueProxy<unknown>;
|
|
52
56
|
[MixinSymbol]: {
|
|
@@ -44,6 +44,10 @@ class LocalizationModifier extends common_2.ContainerModifier {
|
|
|
44
44
|
value, key) {
|
|
45
45
|
return withoutEmptyTexts(super.lock(locked_value, value, key));
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* The value under `key`, else under the fallback locale. With no `key`, a
|
|
49
|
+
* field without a fallback value reads `null`, as an unset field does.
|
|
50
|
+
*/
|
|
47
51
|
unlock(
|
|
48
52
|
// oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type -- the container modifier leaves the values by locale untyped
|
|
49
53
|
locked_value, key) {
|
|
@@ -51,9 +55,10 @@ class LocalizationModifier extends common_2.ContainerModifier {
|
|
|
51
55
|
if (unlocked !== undefined && unlocked !== EMPTY_TEXT) {
|
|
52
56
|
return unlocked;
|
|
53
57
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
const fallback = this.options.fallbackLocale
|
|
59
|
+
? super.unlock(locked_value, this.options.fallbackLocale)
|
|
60
|
+
: undefined;
|
|
61
|
+
return key === undefined ? (fallback ?? null) : fallback;
|
|
57
62
|
}
|
|
58
63
|
unlockrequest(
|
|
59
64
|
// oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type -- the container modifier leaves the values by locale untyped
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localization.js","sourceRoot":"","sources":["../../src/modifiers/localization.ts"],"names":[],"mappings":";;;AACA,sEAA8E;AAE9E,sCAA4D;AAC5D,qCAMkB;AA8BlB,4EAA4E;AAC5E,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,SAAS,iBAAiB,CAAI,MAAyB;IACrD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC,CACnE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAa,oBAAqB,SAAQ,0BAGzC;IACC;;;;;;;OAOG;IACI,MAAM,CAAC,gBAAgB,CAC5B,UAAyB,EACzB,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,UAAU,EAAE,gCAAuB,CAAC,CAAC,MAAM,CACtE,KAAK,CACN,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACtD,0QAA0Q;QAC1Q,OAAQ,QAAQ,EAAE,QAA6C,EAAE,OAAO;aACrE,cAAc,CAAC;IACpB,CAAC;IAED;;;OAGG;IACa,IAAI;IAClB,6HAA6H;IAC7H,YAAiD;IACjD,iMAAiM;IACjM,KAAc,EACd,GAAuB;QAEvB,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;
|
|
1
|
+
{"version":3,"file":"localization.js","sourceRoot":"","sources":["../../src/modifiers/localization.ts"],"names":[],"mappings":";;;AACA,sEAA8E;AAE9E,sCAA4D;AAC5D,qCAMkB;AA8BlB,4EAA4E;AAC5E,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,SAAS,iBAAiB,CAAI,MAAyB;IACrD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC,CACnE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAa,oBAAqB,SAAQ,0BAGzC;IACC;;;;;;;OAOG;IACI,MAAM,CAAC,gBAAgB,CAC5B,UAAyB,EACzB,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,UAAU,EAAE,gCAAuB,CAAC,CAAC,MAAM,CACtE,KAAK,CACN,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACtD,0QAA0Q;QAC1Q,OAAQ,QAAQ,EAAE,QAA6C,EAAE,OAAO;aACrE,cAAc,CAAC;IACpB,CAAC;IAED;;;OAGG;IACa,IAAI;IAClB,6HAA6H;IAC7H,YAAiD;IACjD,iMAAiM;IACjM,KAAc,EACd,GAAuB;QAEvB,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACa,MAAM;IACpB,6HAA6H;IAC7H,YAAqC,EACrC,GAAuB;QAEvB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YACtD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc;YAC1C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YACzD,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3D,CAAC;IAEe,aAAa;IAC3B,6HAA6H;IAC7H,IAAqD,EACrD,IAAmD,EACnD,GAAsD;QAEtD,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACxC,OAAO,cAAc;YACnB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC,CAAC,QAAQ,CAAC;IACf,CAAC;IAED,CAAC,oBAAW,CAAC,GAAG;QA2Bd,QAAQ,CAEN,MAAc,EACd,MAAkC;YAElC,IAAA,eAAM,EAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;CACH;AA1GD,oDA0GC;AAED;;;;;;GAMG;AACU,QAAA,SAAS,GAAG,IAAA,kCAAqB,EAC5C,CAAC,MAAM,EAAE,WAAW,EAAE,OAAiB,EAAE,EAAE;IACzC,IAAA,uBAAc,EACZ,MAAM,CAAC,WAAW,EAClB,oBAAoB,EACpB,WAAW,EACX,OAAO,IAAI,EAAE,CACd,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -89,6 +89,25 @@ const AccountModel = (0, model_1.BasicDataModel)(Account, "hash_upgrade_accounts
|
|
|
89
89
|
await expectVerifies(after);
|
|
90
90
|
(0, chai_1.expect)(after.isHashOutdated("password")).to.equal(false);
|
|
91
91
|
});
|
|
92
|
+
it("re-hashes with setHashAsync and saves it through a whole-row update", async () => {
|
|
93
|
+
const id = await storedRowFrom0_1_11();
|
|
94
|
+
const before = await reload(id);
|
|
95
|
+
await before.setHashAsync("password", hash_rows_1.PASSWORD);
|
|
96
|
+
await model.update(before);
|
|
97
|
+
const after = await reload(id);
|
|
98
|
+
(0, chai_1.expect)(after.password).to.match(/^\$scrypt\$ln=15,r=8,p=3\$/);
|
|
99
|
+
await expectVerifies(after);
|
|
100
|
+
(0, chai_1.expect)(after.isHashOutdated("password")).to.equal(false);
|
|
101
|
+
});
|
|
102
|
+
it("inserts a row whose hash setHashAsync wrote", async () => {
|
|
103
|
+
const account = new Account();
|
|
104
|
+
account.name = "Async";
|
|
105
|
+
await account.setHashAsync("password", hash_rows_1.PASSWORD);
|
|
106
|
+
const [id] = await model.insert(account);
|
|
107
|
+
const after = await reload(id);
|
|
108
|
+
(0, chai_1.expect)(after.password).to.equal(account.password);
|
|
109
|
+
await expectVerifies(after);
|
|
110
|
+
});
|
|
92
111
|
it("re-hashes through a partial update of the hashed field", async () => {
|
|
93
112
|
const id = await storedRowFrom0_1_11();
|
|
94
113
|
await model.update(id, { password: hash_rows_1.PASSWORD });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash_upgrade.test.js","sourceRoot":"","sources":["../../src/tests/hash_upgrade.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hash_upgrade.test.js","sourceRoot":"","sources":["../../src/tests/hash_upgrade.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+BAA8B;AAC9B,uEAAwD;AACxD,0CAA6C;AAC7C,oCAA0C;AAC1C,oDAAmD;AACnD,gDAA2C;AAC3C,4CAAyD;AACzD,sCAA0C;AAC1C,oCAAwC;AACxC,mDAA6E;AAE7E,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAG1C,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,aAAK,CAAC,IAAI,CAAC,mBAAY,CAAC;CAa7C,CAAA;AATS;IADP,IAAA,aAAK,EAAC,QAAQ,CAAC;;qCACK;AAIb;IAFP,IAAA,qBAAU,GAAE;IACZ,IAAA,aAAK,EAAC,MAAM,CAAC;8BACK,IAAI;0CAAC;AAIhB;IAFP,IAAA,aAAM,GAAE;IACR,IAAA,aAAK,EAAC,QAAQ,CAAC;;yCACS;AAZrB,OAAO;IADZ,IAAA,sBAAa,EAAC,uBAAuB,EAAE,SAAS,CAAC;GAC5C,OAAO,CAaZ;AAED,MAAM,YAAY,GAAG,IAAA,sBAAc,EAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;AAEtE,IAAA,uBAAW,EAAC,wCAAwC,EAAE,GAAG,EAAE;IACzD,IAAI,KAAwC,CAAC;IAE7C,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,IAAA,yBAAc,EAAC,SAAS,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,2BAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAChE,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,mBAAmB;QAChC,MAAM,GAAG,GAAG,eAAe,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,CAAC,KAAK;aACd,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,2BAAe,EAAE,GAAG,EAAE,CAAC,CAAC;aACpD,GAAG,EAAE,CAAC;QACT,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAQ,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,EAAU;QAC9B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kFAAkF;IAClF,KAAK,UAAU,cAAc,CAAC,OAAgB;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAC1B,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,oBAAQ,CAAC;YAC3C,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC;SAClD,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,oBAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAA,aAAM,EAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrE,IAAA,aAAM,EAAC,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAA,aAAM,EAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,CAAC,QAAQ,GAAG,oBAAQ,CAAC;QAC3B,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAA,aAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAA,aAAM,EAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,oBAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAA,aAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC9D,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAA,aAAM,EAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;QACvB,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,oBAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAA,aAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAEvC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,oBAAQ,EAAE,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAA,aAAM,EAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzD,IAAA,aAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,2BAAe,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI;QAC1B,CAAC,aAAa,EAAE,mBAAmB,CAAC;QACpC,CAAC,SAAS,EAAE,gBAAgB,CAAC;KACrB,EAAE,CAAC;QACX,EAAE,CAAC,yDAAyD,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAE3C,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAE5C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAA,aAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,IAAA,aAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YAEhC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;YACzB,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE5B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAA,aAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,IAAA,aAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YAEhC,IAAA,aAAI,EAAC,OAAO,EAAE,mBAAY,EAAE,SAAS,CAAC,CAAC;YACvC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE5B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAA,aAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const chai_1 = require("chai");
|
|
13
|
+
const interface_database_1 = require("@antelopejs/interface-database");
|
|
14
|
+
const schema_1 = require("../schema");
|
|
15
|
+
const database_1 = require("../database");
|
|
16
|
+
const table_1 = require("../table");
|
|
17
|
+
const common_1 = require("../modifiers/common");
|
|
18
|
+
const encryption_1 = require("../modifiers/encryption");
|
|
19
|
+
const localization_1 = require("../modifiers/localization");
|
|
20
|
+
describe("Localized fields - a request without a locale", () => {
|
|
21
|
+
let Page = class Page extends table_1.Table.with(localization_1.LocalizationModifier, encryption_1.EncryptionModifier) {
|
|
22
|
+
};
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, localization_1.Localized)(),
|
|
25
|
+
(0, table_1.Field)("string"),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], Page.prototype, "title", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, localization_1.Localized)({ fallbackLocale: "en" }),
|
|
30
|
+
(0, table_1.Field)("string"),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], Page.prototype, "summary", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, localization_1.Localized)(),
|
|
35
|
+
(0, encryption_1.Encrypted)({ secretKey: "12345678901234567890123456789012" }),
|
|
36
|
+
(0, table_1.Field)("string"),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], Page.prototype, "secret", void 0);
|
|
39
|
+
Page = __decorate([
|
|
40
|
+
(0, schema_1.RegisterTable)("no-key-pages", "localized-no-key-schema")
|
|
41
|
+
], Page);
|
|
42
|
+
async function createdWithoutLocale() {
|
|
43
|
+
await (0, database_1.RegisterSchema)("localized-no-key-schema");
|
|
44
|
+
const instance = interface_database_1.Schema.get("localized-no-key-schema")?.instance();
|
|
45
|
+
if (!instance)
|
|
46
|
+
throw new Error("Database not found");
|
|
47
|
+
const row = new Page();
|
|
48
|
+
row._id = "page-1";
|
|
49
|
+
row.title = undefined;
|
|
50
|
+
row.summary = undefined;
|
|
51
|
+
row.secret = "Sent without a locale";
|
|
52
|
+
(0, common_1.lock)(row, localization_1.LocalizationModifier, undefined, undefined);
|
|
53
|
+
await Page.table(instance).insert(row).run();
|
|
54
|
+
const read = (0, common_1.fromDatabase)(await Page.table(instance).get("page-1").run(), Page);
|
|
55
|
+
(0, common_1.unlock)(read, localization_1.LocalizationModifier, undefined, undefined);
|
|
56
|
+
return read;
|
|
57
|
+
}
|
|
58
|
+
afterEach(async () => {
|
|
59
|
+
await interface_database_1.Schema.get("localized-no-key-schema")
|
|
60
|
+
?.instance()
|
|
61
|
+
.table("no-key-pages")
|
|
62
|
+
.delete()
|
|
63
|
+
.run();
|
|
64
|
+
});
|
|
65
|
+
it("answers null for a field the request did not send", async () => {
|
|
66
|
+
const answer = JSON.parse(JSON.stringify(await createdWithoutLocale()));
|
|
67
|
+
(0, chai_1.expect)(answer).to.deep.include({
|
|
68
|
+
title: null,
|
|
69
|
+
summary: null,
|
|
70
|
+
secret: null,
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=localized_no_key.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localized_no_key.test.js","sourceRoot":"","sources":["../../src/tests/localized_no_key.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+BAA8B;AAC9B,uEAAwD;AACxD,sCAA0C;AAC1C,0CAA6C;AAC7C,oCAAwC;AACxC,gDAAiE;AACjE,wDAAwE;AACxE,4DAA4E;AAE5E,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAE7D,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,aAAK,CAAC,IAAI,CAAC,mCAAoB,EAAE,+BAAkB,CAAC;KAStE,CAAA;IARuC;QAArC,IAAA,wBAAS,GAAE;QAAE,IAAA,aAAK,EAAC,QAAQ,CAAC;;uCAAwB;IAG7C;QAFP,IAAA,wBAAS,EAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACnC,IAAA,aAAK,EAAC,QAAQ,CAAC;;yCACS;IAIjB;QAHP,IAAA,wBAAS,GAAE;QACX,IAAA,sBAAS,EAAC,EAAE,SAAS,EAAE,kCAAkC,EAAE,CAAC;QAC5D,IAAA,aAAK,EAAC,QAAQ,CAAC;;wCACQ;IARpB,IAAI;QADT,IAAA,sBAAa,EAAC,cAAc,EAAE,yBAAyB,CAAC;OACnD,IAAI,CAST;IAED,KAAK,UAAU,oBAAoB;QACjC,MAAM,IAAA,yBAAc,EAAC,yBAAyB,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,2BAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC;QACnB,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;QACtB,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;QACxB,GAAG,CAAC,MAAM,GAAG,uBAAuB,CAAC;QACrC,IAAA,aAAI,EAAC,GAAG,EAAE,mCAAoB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAA,qBAAY,EACvB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAC9C,IAAI,CACL,CAAC;QACF,IAAA,eAAM,EAAC,IAAI,EAAE,mCAAoB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,2BAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC;YACzC,EAAE,QAAQ,EAAE;aACX,KAAK,CAAC,cAAc,CAAC;aACrB,MAAM,EAAE;aACR,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAChC,IAAI,CAAC,SAAS,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAC7C,CAAC;QAEF,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const chai_1 = require("chai");
|
|
13
|
+
const table_1 = require("../../table");
|
|
14
|
+
const common_1 = require("../../modifiers/common");
|
|
15
|
+
const hash_1 = require("../../modifiers/hash");
|
|
16
|
+
const localization_1 = require("../../modifiers/localization");
|
|
17
|
+
const hash_rows_1 = require("../helpers/hash-rows");
|
|
18
|
+
const WRONG_PASSWORD = "not the password";
|
|
19
|
+
const CURRENT_FORMAT = /^\$scrypt\$ln=15,r=8,p=3\$[A-Za-z0-9+/]{22}\$[A-Za-z0-9+/]{43}$/;
|
|
20
|
+
class Account extends table_1.Table.with(hash_1.HashModifier) {
|
|
21
|
+
}
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, hash_1.Hashed)(),
|
|
24
|
+
(0, table_1.Field)("string"),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], Account.prototype, "password", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, hash_1.Hashed)({ algorithm: "sha256" }),
|
|
29
|
+
(0, table_1.Field)("string"),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], Account.prototype, "fingerprint", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, table_1.Field)("string"),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], Account.prototype, "email", void 0);
|
|
36
|
+
function storedPassword(account) {
|
|
37
|
+
return (0, common_1.toDatabase)(account)._internal?.data.password;
|
|
38
|
+
}
|
|
39
|
+
function reloaded(account) {
|
|
40
|
+
return (0, common_1.fromDatabase)(structuredClone((0, common_1.toDatabase)(account)), Account);
|
|
41
|
+
}
|
|
42
|
+
async function expectTests(account, password) {
|
|
43
|
+
const pending = account.testHashAsync("password", password);
|
|
44
|
+
const matches = account.testHash("password", password);
|
|
45
|
+
(0, chai_1.expect)(await pending).to.equal(matches);
|
|
46
|
+
return matches;
|
|
47
|
+
}
|
|
48
|
+
/** The longest gap between two timer ticks while `work` runs, in ms. */
|
|
49
|
+
async function longestStallMs(work) {
|
|
50
|
+
let last = performance.now();
|
|
51
|
+
let longest = 0;
|
|
52
|
+
let ticking = true;
|
|
53
|
+
const tick = () => {
|
|
54
|
+
const now = performance.now();
|
|
55
|
+
longest = Math.max(longest, now - last);
|
|
56
|
+
last = now;
|
|
57
|
+
if (ticking)
|
|
58
|
+
setTimeout(tick, 1);
|
|
59
|
+
};
|
|
60
|
+
setTimeout(tick, 1);
|
|
61
|
+
await work();
|
|
62
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
63
|
+
ticking = false;
|
|
64
|
+
return longest;
|
|
65
|
+
}
|
|
66
|
+
(0, hash_rows_1.scryptSuite)("Modifiers - hash - setHashAsync", () => {
|
|
67
|
+
for (const password of [hash_rows_1.PASSWORD, ""]) {
|
|
68
|
+
it(`keeps timers running while it hashes ${JSON.stringify(password)}, unlike an assignment`, async () => {
|
|
69
|
+
const blocked = await longestStallMs(async () => {
|
|
70
|
+
new Account().password = password;
|
|
71
|
+
});
|
|
72
|
+
const account = new Account();
|
|
73
|
+
const free = await longestStallMs(() => account.setHashAsync("password", password));
|
|
74
|
+
(0, chai_1.expect)(storedPassword(account)).to.match(CURRENT_FORMAT);
|
|
75
|
+
(0, chai_1.expect)(free).to.be.below(blocked / 2);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
it("reads back what an assignment reads on a field another modifier holds floating", async () => {
|
|
79
|
+
class Content extends table_1.Table.with(hash_1.HashModifier, localization_1.LocalizationModifier) {
|
|
80
|
+
}
|
|
81
|
+
(0, localization_1.Localized)()(Content.prototype, "title");
|
|
82
|
+
(0, hash_1.Hashed)()(Content.prototype, "title");
|
|
83
|
+
const assigned = new Content();
|
|
84
|
+
assigned.title = hash_rows_1.PASSWORD;
|
|
85
|
+
const awaited = new Content();
|
|
86
|
+
await awaited.setHashAsync("title", hash_rows_1.PASSWORD);
|
|
87
|
+
(0, chai_1.expect)(awaited.title).to.equal(assigned.title);
|
|
88
|
+
(0, chai_1.expect)(JSON.stringify(awaited)).to.equal(JSON.stringify(assigned));
|
|
89
|
+
});
|
|
90
|
+
it("stores a hash that verifies the same way as an assigned one", async () => {
|
|
91
|
+
const assigned = new Account();
|
|
92
|
+
assigned.password = hash_rows_1.PASSWORD;
|
|
93
|
+
const awaited = new Account();
|
|
94
|
+
await awaited.setHashAsync("password", hash_rows_1.PASSWORD);
|
|
95
|
+
for (const account of [assigned, awaited].map(reloaded)) {
|
|
96
|
+
(0, chai_1.expect)(storedPassword(account)).to.match(CURRENT_FORMAT);
|
|
97
|
+
(0, chai_1.expect)(account.isHashOutdated("password")).to.equal(false);
|
|
98
|
+
(0, chai_1.expect)(await expectTests(account, hash_rows_1.PASSWORD)).to.equal(true);
|
|
99
|
+
(0, chai_1.expect)(await expectTests(account, WRONG_PASSWORD)).to.equal(false);
|
|
100
|
+
}
|
|
101
|
+
(0, chai_1.expect)(storedPassword(awaited)).to.not.equal(storedPassword(assigned));
|
|
102
|
+
});
|
|
103
|
+
it("replaces a stored hash and keeps it when given that hash back", async () => {
|
|
104
|
+
const account = new Account();
|
|
105
|
+
account.password = WRONG_PASSWORD;
|
|
106
|
+
await account.setHashAsync("password", hash_rows_1.PASSWORD);
|
|
107
|
+
const stored = storedPassword(account);
|
|
108
|
+
(0, chai_1.expect)(await expectTests(account, hash_rows_1.PASSWORD)).to.equal(true);
|
|
109
|
+
await account.setHashAsync("password", account.password);
|
|
110
|
+
(0, chai_1.expect)(storedPassword(account)).to.equal(stored);
|
|
111
|
+
});
|
|
112
|
+
it("clears the field when given undefined, like an assignment", async () => {
|
|
113
|
+
const account = new Account();
|
|
114
|
+
await account.setHashAsync("password", hash_rows_1.PASSWORD);
|
|
115
|
+
await account.setHashAsync("password", undefined);
|
|
116
|
+
(0, chai_1.expect)(storedPassword(account)).to.equal(undefined);
|
|
117
|
+
});
|
|
118
|
+
it("stores the digest an assignment stores on a field with an algorithm", async () => {
|
|
119
|
+
const account = new Account();
|
|
120
|
+
account.fingerprint = "first";
|
|
121
|
+
await account.setHashAsync("fingerprint", "second");
|
|
122
|
+
const viaAsync = (0, common_1.toDatabase)(account)._internal?.data.fingerprint;
|
|
123
|
+
account.fingerprint = "second";
|
|
124
|
+
(0, chai_1.expect)(viaAsync).to.equal((0, common_1.toDatabase)(account)._internal?.data.fingerprint);
|
|
125
|
+
});
|
|
126
|
+
it("rejects a field that is not hashed", async () => {
|
|
127
|
+
const error = await new Account()
|
|
128
|
+
.setHashAsync("email", "a@example.test")
|
|
129
|
+
.then(() => undefined, (reason) => reason);
|
|
130
|
+
(0, chai_1.expect)(error)
|
|
131
|
+
.to.be.an("error")
|
|
132
|
+
.with.property("message", "Field email is not hashed");
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=hash_async_set.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash_async_set.test.js","sourceRoot":"","sources":["../../../src/tests/modifiers/hash_async_set.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,7 +91,8 @@ class User extends Table.with(HashModifier) {
|
|
|
91
91
|
|
|
92
92
|
- The field hashes the value encoded as JSON, so `"secret"` is hashed as the text `"\"secret\""`.
|
|
93
93
|
- Each write draws a random 16-byte salt and stores `$scrypt$ln=15,r=8,p=3$<salt>$<key>`. The salt and the 32-byte key are base64 without padding. `ln` is the base-2 logarithm of the scrypt cost N, so N is 32768. The string holds the parameters, the salt, and the key, so the cost can change later.
|
|
94
|
-
-
|
|
94
|
+
- An assignment is synchronous, because a property setter cannot wait, and so are the conversions behind a model's `insert` and `update` of plain data. Each assignment blocks the event loop for one scrypt run, about 150 ms, which uses 32 MiB (128 × N × r bytes).
|
|
95
|
+
- `setHashAsync` runs that scrypt run on the thread pool, then assigns the result. It stores the same format as an assignment, so rows written either way verify the same way.
|
|
95
96
|
- Assigning the stored hash back to the field, or calling `lock` on a loaded row, keeps the hash as it is. Assigning `undefined` stores nothing.
|
|
96
97
|
- `testHash` and `testHashAsync` read `ln`, `r`, `p`, the salt, and the key from the stored string. They derive a key of the stored key's length from the candidate and compare the two with `crypto.timingSafeEqual`, in constant time.
|
|
97
98
|
- A stored scrypt string verifies only within these limits: `ln`, `r`, and `p` from 1 to 99, at most 128 MiB of memory, `p` at most 16, `ln` below 16 × `r`, and a salt and a key of 16 to 64 bytes each. A string outside them refuses every candidate.
|
|
@@ -112,21 +113,33 @@ The `HashModifier` mixin adds these methods to table instances:
|
|
|
112
113
|
```typescript fragment
|
|
113
114
|
testHash<This extends {}, F extends keyof This>(this: This, field: F, value: This[F]): boolean
|
|
114
115
|
testHashAsync<This extends {}, F extends keyof This>(this: This, field: F, value: This[F]): Promise<boolean>
|
|
116
|
+
setHashAsync<This extends object, F extends keyof This>(this: This, field: F, value: This[F]): Promise<void>
|
|
115
117
|
isHashOutdated<This extends {}>(this: This, field: keyof This): boolean
|
|
116
118
|
```
|
|
117
119
|
|
|
120
|
+
- `setHashAsync` hashes `value` on the thread pool and resolves once the field holds the hash, as `row[field] = value` would leave it. Use it on a server for every write of a scrypt field, such as a signup or a password change, then save the row instance with the model. It rejects with `Field <name> is not hashed` for a field without `@Hashed`. On a field with an `algorithm`, it assigns at once, because a digest is fast. On a field with another modifier beside `@Hashed`, it also assigns at once, on the event loop. Calls on one row that overlap settle in the order their scrypt runs end, so await each one before the next.
|
|
121
|
+
|
|
122
|
+
```typescript fragment
|
|
123
|
+
const user = new User();
|
|
124
|
+
user.email = email;
|
|
125
|
+
await user.setHashAsync("password", password);
|
|
126
|
+
await userModel.insert(user);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`userModel.insert({ email, password })` and `userModel.update(id, { password })` still hash on the event loop, because they convert plain data through the setter.
|
|
130
|
+
|
|
118
131
|
- `testHashAsync` resolves whether `value` matches the stored hash. It runs scrypt on the thread pool, so use it on a server. It rejects with `Field <name> is not hashed` for a field without `@Hashed`.
|
|
119
132
|
- `testHash` gives the same result and blocks the event loop while scrypt runs. It throws `Field <name> is not hashed` for a field without `@Hashed`.
|
|
120
133
|
- `isHashOutdated` returns whether the stored hash differs from what the field writes today, which is any stored string that does not start with `$scrypt$ln=15,r=8,p=3$`. It returns `false` when nothing is stored, and always on a field with an `algorithm`. It throws `Field <name> is not hashed` for a field without `@Hashed`.
|
|
121
134
|
|
|
122
135
|
#### Upgrade stored hashes
|
|
123
136
|
|
|
124
|
-
A row whose hash has another format still verifies. On a field without an `algorithm`, a string that is not a scrypt hash is tested as a salted SHA-256 digest, made with the salt in `_internal.meta.HashModifier.salt`, and `isHashOutdated` returns `true` for it. A scrypt hash of another cost verifies with its own parameters and is flagged too. To rewrite a flagged hash,
|
|
137
|
+
A row whose hash has another format still verifies. On a field without an `algorithm`, a string that is not a scrypt hash is tested as a salted SHA-256 digest, made with the salt in `_internal.meta.HashModifier.salt`, and `isHashOutdated` returns `true` for it. A scrypt hash of another cost verifies with its own parameters and is flagged too. To rewrite a flagged hash, set the value after a successful test, because only then is the plaintext known:
|
|
125
138
|
|
|
126
139
|
```typescript fragment
|
|
127
140
|
if (await user.testHashAsync("password", password)) {
|
|
128
141
|
if (user.isHashOutdated("password")) {
|
|
129
|
-
user.password
|
|
142
|
+
await user.setHashAsync("password", password);
|
|
130
143
|
await userModel.update(user);
|
|
131
144
|
}
|
|
132
145
|
}
|
|
@@ -413,7 +426,7 @@ Base64 is an encoding, not encryption. The example declares its `LockedType` as
|
|
|
413
426
|
|
|
414
427
|
### `ContainerModifier`
|
|
415
428
|
|
|
416
|
-
A modifier that stores several values under keys, as `LocalizationModifier` does, extends `ContainerModifier`. Its `lock`, `unlock`, and `unlockrequest` take the key as their argument, a `string` or `undefined`. `lock` and `unlock` treat the wildcard key `"*"` as the whole record, and `lock` throws a `TypeError` for a value under `"*"` that is not a record. `undefined` is no key: `lock` stores nothing under it, and `unlock` and `unlockrequest` find no value, so a `LocalizationModifier` answers its `fallbackLocale
|
|
429
|
+
A modifier that stores several values under keys, as `LocalizationModifier` does, extends `ContainerModifier`. Its `lock`, `unlock`, and `unlockrequest` take the key as their argument, a `string` or `undefined`. `lock` and `unlock` treat the wildcard key `"*"` as the whole record, and `lock` throws a `TypeError` for a value under `"*"` that is not a record. `undefined` is no key: `lock` stores nothing under it, and `unlock` and `unlockrequest` find no value, so a `LocalizationModifier` answers its `fallbackLocale`, or `null` when that locale has no value either:
|
|
417
430
|
|
|
418
431
|
```typescript
|
|
419
432
|
import { ContainerModifier } from "@antelopejs/interface-database-decorators";
|
|
@@ -424,6 +437,16 @@ class MyContainerModifier extends ContainerModifier<{}, { fallback?: string }> {
|
|
|
424
437
|
}
|
|
425
438
|
```
|
|
426
439
|
|
|
440
|
+
### Attach a modifier
|
|
441
|
+
|
|
442
|
+
A decorator attaches its modifier with `attachModifier(target.constructor, Modifier, propertyKey, options)`, as the examples above do. TypeScript checks `options` against the modifier's options type. It does not check that the field names a member of the class.
|
|
443
|
+
|
|
444
|
+
A modifier with `lock` replaces the field with an accessor that routes reads and writes through the field's modifiers. `attachModifier` throws an `Error` when such a modifier goes on `constructor` or `__proto__`, or on a field that already has a one-way modifier. A modifier without `lock` only handles events, and the field keeps its plain value.
|
|
445
|
+
|
|
446
|
+
### Read a modified field in a query
|
|
447
|
+
|
|
448
|
+
`unlockrequest(table, row, field, modifiers)` reads a field unlocked inside a database query. It reads `table` only for its modifier metadata. Each two-way modifier on the field passes the stored value through its own `unlockrequest()`, with the arguments that `modifiers` gives for it by class name. A field with only one-way modifiers yields its stored value as it is. `unlockrequest` throws a `TypeError` when `modifiers` has no entry for a two-way modifier on the field. TypeScript checks that `field` is a key of the row, not each entry's arguments.
|
|
449
|
+
|
|
427
450
|
## Modifier events
|
|
428
451
|
|
|
429
452
|
A modifier hooks into a row's lifecycle through methods named after events. The engine calls each one with the modifier as `this`, then the table instance, the field name, and the event's arguments:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/interface-database-decorators",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "AntelopeJS decorators for database tables and typed data models, with encrypted, hashed and localized fields",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"antelopejs",
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
"lint:fix": "oxlint --fix",
|
|
125
125
|
"lint": "oxlint",
|
|
126
126
|
"prepack": "pnpm run build",
|
|
127
|
-
"release": "pnpm run lint && pnpm run prepack && release-it",
|
|
127
|
+
"release": "pnpm run typecheck && pnpm run lint && pnpm run prepack && release-it",
|
|
128
128
|
"test": "pnpm run build && ajs module test .",
|
|
129
129
|
"format:check": "oxfmt --check .",
|
|
130
130
|
"knip": "knip",
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
"@antelopejs/interface-api": "^0.0.15",
|
|
147
147
|
"@antelopejs/interface-core": "^0.4.0",
|
|
148
148
|
"@antelopejs/interface-database": "^0.3.0",
|
|
149
|
-
"@antelopejs/tooling-configs": "^0.
|
|
149
|
+
"@antelopejs/tooling-configs": "^0.5.1",
|
|
150
150
|
"@types/chai": "^4.3.20",
|
|
151
151
|
"@types/mocha": "^10.0.10",
|
|
152
152
|
"@types/node": "^22.19.15",
|
|
@@ -110,7 +110,7 @@ class Chef extends Table.with(
|
|
|
110
110
|
EncryptionModifier,
|
|
111
111
|
LocalizationModifier,
|
|
112
112
|
) {
|
|
113
|
-
@Hashed() declare passphrase: string; // one-way scrypt; test via await instance.testHashAsync("passphrase", value)
|
|
113
|
+
@Hashed() declare passphrase: string; // one-way scrypt; set via await instance.setHashAsync("passphrase", value), test via await instance.testHashAsync("passphrase", value)
|
|
114
114
|
@Encrypted({ secretKey }) declare supplierCode: string; // transparent encrypt/decrypt (autolock + autounlock)
|
|
115
115
|
@Localized() declare motto: string; // read AND write via instance.localize("en", ["motto"])
|
|
116
116
|
@CreationTime() declare hiredAt: Date; // set on insert, stripped from updates
|
|
@@ -125,14 +125,15 @@ class Chef extends Table.with(
|
|
|
125
125
|
- `Hashed`, `Encrypted`, and `Localized` require the matching modifier class in `Table.with(...)`; `CreationTime`/`UpdateTime` are event-only and need no mixin.
|
|
126
126
|
- Modifier ordering matters: `attachModifier` throws if you stack a modifier after a one-way modifier (e.g. anything after `@Hashed` on the same field).
|
|
127
127
|
- Hashed fields cannot be read back or queried directly — only equality-tested with `testHashAsync`, or `testHash`, which blocks the event loop for one scrypt run.
|
|
128
|
-
-
|
|
128
|
+
- On a server, write a scrypt field with `await instance.setHashAsync(field, value)`, then insert or update the instance. Assigning the field, or passing it in plain data to `insert` or `update`, blocks the event loop for one scrypt run (about 150 ms).
|
|
129
|
+
- A row can hold an older hash that still verifies. After a successful test, when `instance.isHashOutdated(field)` is true, `await instance.setHashAsync(field, value)` with the tested value and save the row.
|
|
129
130
|
- `@Hashed({ algorithm })` stores a fast digest instead of scrypt: use it only for non-secret fingerprints, never for credentials.
|
|
130
131
|
- Localized fields must be written through a localized instance (`instance.localize(locale).field = ...`);
|
|
131
132
|
values assigned before `localize()` are held in floating state and silently dropped on insert/update.
|
|
132
133
|
- `instance.localize("*", ["motto"])` reads and writes every locale at once, typed `Record<string, string>` for each listed field (`LocalizedRecords<T, K>`); without a field list the field types stay unchanged.
|
|
133
134
|
- Under `localize("*")` a localized field takes the record of texts by locale, and `undefined` or `null` clears every locale. A single text throws a `TypeError`, whether it is assigned or held from `fromPlainData` when `localize("*")` runs.
|
|
134
135
|
- A localized value `""` is stored as no value: reads and queries in that locale get the `fallbackLocale` value.
|
|
135
|
-
- A `ContainerModifier` key of `undefined` is no key: writes store nothing under it, and reads and queries get no value
|
|
136
|
+
- A `ContainerModifier` key of `undefined` is no key: writes store nothing under it, and reads and queries get no value. A localized field reads the `fallbackLocale` value, or `null` when there is none.
|
|
136
137
|
- `@Relation({ to: () => Target })` is declarative metadata only: no foreign-key enforcement, consumed by introspection tooling via `RelationStaticMetadata`.
|
|
137
138
|
- `Model.validate` (and `{ validate: true }` on insert/update) only checks fields whose `@Field` type is an
|
|
138
139
|
io-ts-style codec with `.decode`; plain string field tokens are skipped. Update validates with
|