@webda/fs 4.0.0-beta.4 → 4.0.0-beta.6

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.
@@ -1,5 +1,27 @@
1
1
  import { Readable } from "stream";
2
- import { BinaryFile, BinaryMap, CloudBinary, CloudBinaryParameters, CoreModel, CoreModelWithBinary, CryptoService, OperationContext, WebContext } from "@webda/core";
2
+ import { BinaryFile, BinaryFileInfo, BinaryMap, CloudBinary, CloudBinaryParameters, CoreModel, CoreModelWithBinary, CryptoService, OperationContext, WebContext } from "@webda/core";
3
+ /**
4
+ * What an upload token attaches once the content is stored and verified: the object, its binary attribute and the
5
+ * file information the client announced
6
+ */
7
+ export interface UploadTarget {
8
+ /**
9
+ * Model identifier
10
+ */
11
+ model: string;
12
+ /**
13
+ * Object primary key
14
+ */
15
+ uuid: string;
16
+ /**
17
+ * Binary attribute
18
+ */
19
+ attribute: string;
20
+ /**
21
+ * File information announced by the challenge (name, size, mimetype, metadata)
22
+ */
23
+ info: Omit<BinaryFileInfo, "hash" | "challenge">;
24
+ }
3
25
  /** Configuration parameters for the filesystem-backed binary storage service. */
4
26
  export declare class FileBinaryParameters extends CloudBinaryParameters {
5
27
  /**
@@ -28,8 +50,11 @@ export declare class FileBinaryParameters extends CloudBinaryParameters {
28
50
  *
29
51
  * The structure used for now is
30
52
  * /folder/{hash}/data
31
- * /folder/{hash}/{targetStore}_{uuid}
32
- * /folder/{hash}/challenge
53
+ * /folder/{hash}/{model}_{attribute}_{uuid} usage markers
54
+ * /folder/{hash}/proof_{challenge} proof of possession, written by the service on upload
55
+ *
56
+ * Before 4.0.0-beta.5 the proof was `_{challenge}` and the challenge was sent to clients: those markers are ignored
57
+ * (a leaked value attaches nothing), the content is uploaded once more to get a `proof_` marker.
33
58
  *
34
59
  * It takes one parameter
35
60
  * folder: "path"
@@ -64,7 +89,8 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
64
89
  */
65
90
  init(): Promise<this>;
66
91
  /**
67
- * Download a binary with a challenge
92
+ * Download a binary with a signed download token (issued by the `download` behavior action, after the model's
93
+ * permission check)
68
94
  *
69
95
  * @param ctx - the web context
70
96
  */
@@ -105,31 +131,63 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
105
131
  * @param hash - the content hash
106
132
  * @param method - HTTP method (PUT or GET)
107
133
  * @param expiresIn - token TTL in seconds
134
+ * @param target - for an upload token, what to attach once the content is stored and verified
108
135
  * @returns the signed JWT token
109
136
  */
110
- getToken(hash: string, method: "PUT" | "GET", expiresIn?: number): Promise<string>;
137
+ getToken(hash: string, method: "PUT" | "GET", expiresIn?: number, target?: UploadTarget): Promise<string>;
111
138
  /**
112
139
  * Get put URL
113
140
  *
114
141
  * @param ctx - the operation context
142
+ * @param hash - the content hash (read from the input when not given)
143
+ * @param target - what the upload attaches once the content is stored and verified
115
144
  * @returns the upload URL
116
145
  */
117
- getPutUrl(ctx: OperationContext<BinaryFile>): Promise<string>;
146
+ getPutUrl(ctx: OperationContext<BinaryFile>, hash?: string, target?: UploadTarget): Promise<string>;
118
147
  /**
119
- * Will give you the redirect url
148
+ * Make a marker name part file-safe: the model identifier carries a `/`, and a natural key is client-chosen, so
149
+ * anything but letters, digits, `_`, `.`, `:`, `@` and `-` is replaced (a marker is a file inside the hash folder)
150
+ * @param part - the raw value
151
+ * @returns the safe name part
152
+ */
153
+ protected safeName(part: string): string;
154
+ /**
155
+ * Usage marker of an object attribute in a hash folder: `<model>_<attribute>_<uuid>`, every part file-safe
156
+ * @param target - the object attribute
157
+ * @returns the marker file name
158
+ */
159
+ protected usageMarker(target: Pick<UploadTarget, "model" | "attribute" | "uuid">): string;
160
+ /**
161
+ * Attach a stored binary to an object: usage marker, then the object's binary attribute
162
+ * @param object - the model instance
163
+ * @param target - the object attribute and the announced file information
164
+ * @param hashes - the stored content
165
+ * @param hashes.hash - its hash
166
+ * @param hashes.challenge - its challenge
167
+ */
168
+ protected attach(object: CoreModel, target: UploadTarget, hashes: {
169
+ hash: string;
170
+ challenge: string;
171
+ }): Promise<void>;
172
+ /**
173
+ * Challenge: the client announces `{hash, challenge, ...}`; the challenge is the md5 of "WEBDA" + the content,
174
+ * so a matching one proves possession of an already stored binary, which is then attached without upload
175
+ * (`undefined`). Otherwise the upload URL is returned and **nothing is attached yet**: the upload stores the
176
+ * content, verifies it against the announced hash and attaches it then ({@link storeBinary}). A visible hash
177
+ * alone therefore never gives access to another object's binary.
120
178
  *
121
179
  * @param object - the model instance
122
180
  * @param attribute - the binary attribute name
123
181
  * @param info - optional binary file info
124
182
  * @param context - the operation context
125
- * @returns the redirect URL and method, or undefined if already stored
183
+ * @returns the upload URL and method, or undefined when the binary is attached
126
184
  */
127
185
  putRedirectUrl(object: CoreModel, attribute: string, info?: BinaryFile, context?: OperationContext<BinaryFile>): Promise<{
128
186
  url: string;
129
187
  method: string;
130
188
  }>;
131
189
  /**
132
- * Store the binary sent
190
+ * Store the binary sent with an upload token, then attach it to the object the token names
133
191
  *
134
192
  * @param ctx - the web context
135
193
  */
@@ -153,13 +211,26 @@ export declare class FileBinary<T extends FileBinaryParameters = FileBinaryParam
153
211
  */
154
212
  delete(object: CoreModelWithBinary, property: string, index?: number): Promise<void>;
155
213
  /**
156
- * Verify that a binary with the given hash exists and contains the expected challenge marker.
214
+ * Name of the proof marker of a challenge (legacy `_<challenge>` markers are not proofs)
215
+ * @param challenge - the challenge
216
+ * @returns the marker file name
217
+ */
218
+ protected proofMarker(challenge: string): string;
219
+ /**
220
+ * Verify that a binary with the given hash exists and carries the proof marker of the challenge, written by the
221
+ * service when the content was uploaded
157
222
  *
158
223
  * @param hash - the content hash
159
224
  * @param challenge - the challenge string
160
- * @returns true if the challenge marker exists
225
+ * @returns true if the proof marker exists
161
226
  */
162
227
  challenge(hash: any, challenge: any): boolean;
228
+ /**
229
+ * Usage markers of a hash folder: every file but the data and the proof markers (legacy `_` ones included)
230
+ * @param hash - the content hash
231
+ * @returns the marker names
232
+ */
233
+ protected usageMarkers(hash: string): string[];
163
234
  /**
164
235
  * @override
165
236
  */
@@ -1 +1 @@
1
- {"version":3,"file":"filebinary.service.d.ts","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filebinary.service.d.ts","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import * as fs from "fs";
36
36
  import { join } from "path";
37
37
  import { BinaryNotFoundError, CloudBinary, CloudBinaryParameters, Inject, MemoryBinaryFile, WebContext, WebdaError } from "@webda/core";
38
- import { useModelId } from "@webda/core";
38
+ import { useModel, useModelId } from "@webda/core";
39
39
  /** Configuration parameters for the filesystem-backed binary storage service. */
40
40
  export class FileBinaryParameters extends CloudBinaryParameters {
41
41
  /**
@@ -75,8 +75,11 @@ export class FileBinaryParameters extends CloudBinaryParameters {
75
75
  *
76
76
  * The structure used for now is
77
77
  * /folder/{hash}/data
78
- * /folder/{hash}/{targetStore}_{uuid}
79
- * /folder/{hash}/challenge
78
+ * /folder/{hash}/{model}_{attribute}_{uuid} usage markers
79
+ * /folder/{hash}/proof_{challenge} proof of possession, written by the service on upload
80
+ *
81
+ * Before 4.0.0-beta.5 the proof was `_{challenge}` and the challenge was sent to clients: those markers are ignored
82
+ * (a leaked value attaches nothing), the content is uploaded once more to get a `proof_` marker.
80
83
  *
81
84
  * It takes one parameter
82
85
  * folder: "path"
@@ -176,16 +179,17 @@ let FileBinary = (() => {
176
179
  return this;
177
180
  }
178
181
  /**
179
- * Download a binary with a challenge
182
+ * Download a binary with a signed download token (issued by the `download` behavior action, after the model's
183
+ * permission check)
180
184
  *
181
185
  * @param ctx - the web context
182
186
  */
183
187
  async downloadBinaryLink(ctx) {
184
188
  const { hash } = ctx.getParameters();
185
- // Verify token
189
+ // Verify token: it must be a download token for this hash (an upload token does not download)
186
190
  try {
187
191
  const dt = await this.cryptoService.jwtVerify(ctx.parameter("token"));
188
- if (dt.hash !== hash) {
192
+ if (dt.hash !== hash || dt.method !== "GET") {
189
193
  throw new WebdaError.Forbidden("Wrong hash");
190
194
  }
191
195
  }
@@ -261,59 +265,97 @@ let FileBinary = (() => {
261
265
  * @param hash - the content hash
262
266
  * @param method - HTTP method (PUT or GET)
263
267
  * @param expiresIn - token TTL in seconds
268
+ * @param target - for an upload token, what to attach once the content is stored and verified
264
269
  * @returns the signed JWT token
265
270
  */
266
- async getToken(hash, method, expiresIn = 60) {
267
- return this.cryptoService.jwtSign({ hash, method }, {
268
- expiresIn
269
- });
271
+ async getToken(hash, method, expiresIn = 60, target) {
272
+ return this.cryptoService.jwtSign(target ? { hash, method, target } : { hash, method }, { expiresIn });
270
273
  }
271
274
  /**
272
275
  * Get put URL
273
276
  *
274
277
  * @param ctx - the operation context
278
+ * @param hash - the content hash (read from the input when not given)
279
+ * @param target - what the upload attaches once the content is stored and verified
275
280
  * @returns the upload URL
276
281
  */
277
- async getPutUrl(ctx) {
278
- const body = await ctx.getInput();
279
- const token = await this.getToken(body.hash, "PUT");
282
+ async getPutUrl(ctx, hash, target) {
283
+ hash ??= (await ctx.getInput()).hash;
284
+ const token = await this.getToken(hash, "PUT", 60, target);
280
285
  if (ctx instanceof WebContext) {
281
- return ctx.getHttpContext().getAbsoluteUrl(this.parameters.url + "/upload/data/" + body.hash + `?token=${token}`);
286
+ return ctx.getHttpContext().getAbsoluteUrl(this.parameters.url + "/upload/data/" + hash + `?token=${token}`);
282
287
  }
283
- return this.parameters.url + "/upload/data/" + body.hash + `?token=${token}`;
288
+ return this.parameters.url + "/upload/data/" + hash + `?token=${token}`;
289
+ }
290
+ /**
291
+ * Make a marker name part file-safe: the model identifier carries a `/`, and a natural key is client-chosen, so
292
+ * anything but letters, digits, `_`, `.`, `:`, `@` and `-` is replaced (a marker is a file inside the hash folder)
293
+ * @param part - the raw value
294
+ * @returns the safe name part
295
+ */
296
+ safeName(part) {
297
+ return `${part}`.replace(/[^A-Za-z0-9_.:@-]/g, "-");
284
298
  }
285
299
  /**
286
- * Will give you the redirect url
300
+ * Usage marker of an object attribute in a hash folder: `<model>_<attribute>_<uuid>`, every part file-safe
301
+ * @param target - the object attribute
302
+ * @returns the marker file name
303
+ */
304
+ usageMarker(target) {
305
+ return `${this.safeName(target.model)}_${this.safeName(target.attribute)}_${this.safeName(target.uuid)}`;
306
+ }
307
+ /**
308
+ * Attach a stored binary to an object: usage marker, then the object's binary attribute
309
+ * @param object - the model instance
310
+ * @param target - the object attribute and the announced file information
311
+ * @param hashes - the stored content
312
+ * @param hashes.hash - its hash
313
+ * @param hashes.challenge - its challenge
314
+ */
315
+ async attach(object, target, hashes) {
316
+ this._touch(this._getPath(hashes.hash, this.usageMarker(target)));
317
+ await this.uploadSuccess(object, target.attribute, {
318
+ name: target.info.name,
319
+ size: target.info.size,
320
+ mimetype: target.info.mimetype,
321
+ metadata: target.info.metadata,
322
+ hash: hashes.hash,
323
+ challenge: hashes.challenge
324
+ });
325
+ }
326
+ /**
327
+ * Challenge: the client announces `{hash, challenge, ...}`; the challenge is the md5 of "WEBDA" + the content,
328
+ * so a matching one proves possession of an already stored binary, which is then attached without upload
329
+ * (`undefined`). Otherwise the upload URL is returned and **nothing is attached yet**: the upload stores the
330
+ * content, verifies it against the announced hash and attaches it then ({@link storeBinary}). A visible hash
331
+ * alone therefore never gives access to another object's binary.
287
332
  *
288
333
  * @param object - the model instance
289
334
  * @param attribute - the binary attribute name
290
335
  * @param info - optional binary file info
291
336
  * @param context - the operation context
292
- * @returns the redirect URL and method, or undefined if already stored
337
+ * @returns the upload URL and method, or undefined when the binary is attached
293
338
  */
294
339
  async putRedirectUrl(object, attribute, info, context) {
295
340
  info ??= await context.getInput();
296
- const result = { url: await this.getPutUrl(context), method: "PUT" };
297
- const marker = `${useModelId(object.constructor)}_${object.getUUID()}_${attribute}`;
298
- // Get the target object to add the mapping
299
- await this.uploadSuccess(object, attribute, info);
300
- if (fs.existsSync(this._getPath(info.hash, marker))) {
301
- if (!fs.existsSync(this._getPath(info.hash, "data"))) {
302
- return result;
303
- }
341
+ const target = {
342
+ model: useModelId(object.constructor),
343
+ uuid: object.getUUID(),
344
+ attribute,
345
+ info: { name: info.name, size: info.size, mimetype: info.mimetype, metadata: info.metadata }
346
+ };
347
+ if (fs.existsSync(this._getPath(info.hash, "data")) && this.challenge(info.hash, info.challenge)) {
348
+ // Proof of possession: attach the stored binary
349
+ await this.attach(object, target, { hash: info.hash, challenge: info.challenge });
304
350
  return;
305
351
  }
306
352
  if (!fs.existsSync(this._getPath(info.hash))) {
307
353
  fs.mkdirSync(this._getPath(info.hash));
308
354
  }
309
- this._touch(this._getPath(info.hash, marker));
310
- if (this.challenge(info.hash, info.challenge)) {
311
- return;
312
- }
313
- return result;
355
+ return { url: await this.getPutUrl(context, info.hash, target), method: "PUT" };
314
356
  }
315
357
  /**
316
- * Store the binary sent
358
+ * Store the binary sent with an upload token, then attach it to the object the token names
317
359
  *
318
360
  * @param ctx - the web context
319
361
  */
@@ -328,9 +370,11 @@ let FileBinary = (() => {
328
370
  this.log("WARN", "Request hash differ", ctx.parameter("hash"), "!==", result.hash);
329
371
  throw new WebdaError.BadRequest("Request hash differ");
330
372
  }
373
+ let dt;
331
374
  try {
332
- const dt = await this.cryptoService.jwtVerify(ctx.parameter("token"));
333
- if (dt.hash !== result.hash) {
375
+ dt = await this.cryptoService.jwtVerify(ctx.parameter("token"));
376
+ // An upload token for this content only (a download token does not upload)
377
+ if (dt.hash !== result.hash || dt.method !== "PUT") {
334
378
  this.log("WARN", "JWT hash differ", ctx.parameter("hash"), "!==", result.hash);
335
379
  throw new WebdaError.Forbidden("JWT hash differ");
336
380
  }
@@ -346,18 +390,26 @@ let FileBinary = (() => {
346
390
  if (!fs.existsSync(path)) {
347
391
  fs.writeFileSync(path, body);
348
392
  }
349
- this._touch(this._getPath(result.hash, "_" + result.challenge));
393
+ this._touch(this._getPath(result.hash, this.proofMarker(result.challenge)));
394
+ if (dt.target) {
395
+ // The content is stored and matches the announced hash: attach it to the object the challenge was made for
396
+ let object;
397
+ try {
398
+ object = await useModel(dt.target.model).ref(dt.target.uuid).get();
399
+ }
400
+ catch {
401
+ // Gone since the challenge
402
+ }
403
+ if (object && !object.isDeleted?.()) {
404
+ await this.attach(object, dt.target, result);
405
+ }
406
+ }
350
407
  }
351
408
  /**
352
409
  * @override
353
410
  */
354
411
  async getUsageCount(hash) {
355
- const path = this._getPath(hash);
356
- if (!fs.existsSync(path)) {
357
- return 0;
358
- }
359
- const files = fs.readdirSync(path);
360
- return files.length - 2;
412
+ return this.usageMarkers(hash).length;
361
413
  }
362
414
  /**
363
415
  * Delete any usage marker and hash
@@ -382,12 +434,12 @@ let FileBinary = (() => {
382
434
  const p = this._getPath(hash);
383
435
  if (!fs.existsSync(p))
384
436
  return;
385
- uuid = uuid.startsWith("_") ? uuid : `_${uuid}`;
386
- const files = fs.readdirSync(p);
387
- files
388
- .filter(f => f.endsWith(attribute ? `_${attribute}${uuid}` : `${uuid}`))
437
+ // A marker ends with `_<attribute>_<uuid>` (see usageMarker)
438
+ const key = this.safeName(uuid);
439
+ this.usageMarkers(hash)
440
+ .filter(f => f.endsWith(attribute ? `_${this.safeName(attribute)}_${key}` : `_${key}`))
389
441
  .forEach(f => fs.unlinkSync(this._getPath(hash, f)));
390
- if (files.length == 3) {
442
+ if (this.usageMarkers(hash).length === 0) {
391
443
  await this._cleanHash(hash);
392
444
  }
393
445
  }
@@ -400,15 +452,36 @@ let FileBinary = (() => {
400
452
  await this._cleanUsage(hash, object.getUUID(), property);
401
453
  }
402
454
  /**
403
- * Verify that a binary with the given hash exists and contains the expected challenge marker.
455
+ * Name of the proof marker of a challenge (legacy `_<challenge>` markers are not proofs)
456
+ * @param challenge - the challenge
457
+ * @returns the marker file name
458
+ */
459
+ proofMarker(challenge) {
460
+ return `proof_${this.safeName(challenge)}`;
461
+ }
462
+ /**
463
+ * Verify that a binary with the given hash exists and carries the proof marker of the challenge, written by the
464
+ * service when the content was uploaded
404
465
  *
405
466
  * @param hash - the content hash
406
467
  * @param challenge - the challenge string
407
- * @returns true if the challenge marker exists
468
+ * @returns true if the proof marker exists
408
469
  */
409
470
  challenge(hash, challenge) {
410
471
  const path = this._getPath(hash);
411
- return fs.existsSync(path) && fs.existsSync(`${path}/_${challenge}`);
472
+ return !!challenge && fs.existsSync(path) && fs.existsSync(`${path}/${this.proofMarker(challenge)}`);
473
+ }
474
+ /**
475
+ * Usage markers of a hash folder: every file but the data and the proof markers (legacy `_` ones included)
476
+ * @param hash - the content hash
477
+ * @returns the marker names
478
+ */
479
+ usageMarkers(hash) {
480
+ const path = this._getPath(hash);
481
+ if (!fs.existsSync(path)) {
482
+ return [];
483
+ }
484
+ return fs.readdirSync(path).filter(f => f !== "data" && !f.startsWith("_") && !f.startsWith("proof_"));
412
485
  }
413
486
  /**
414
487
  * @override
@@ -432,8 +505,8 @@ let FileBinary = (() => {
432
505
  .on("error", reject)
433
506
  .on("finish", resolve);
434
507
  });
435
- this._touch(this._getPath(file.hash, "_" + file.challenge));
436
- this._touch(this._getPath(file.hash, `${useModelId(object.constructor)}_${attribute}_${object.getUUID()}`));
508
+ this._touch(this._getPath(file.hash, this.proofMarker(file.challenge)));
509
+ this._touch(this._getPath(file.hash, this.usageMarker({ model: useModelId(object.constructor), attribute, uuid: object.getUUID() })));
437
510
  }
438
511
  /**
439
512
  * @override
@@ -444,7 +517,7 @@ let FileBinary = (() => {
444
517
  const fileInfo = file.toBinaryFileInfo();
445
518
  this.checkMap(object, property);
446
519
  if (fs.existsSync(this._getPath(file.hash))) {
447
- this._touch(this._getPath(file.hash, `${storeName}_${property}_${object.getUUID()}`));
520
+ this._touch(this._getPath(file.hash, this.usageMarker({ model: storeName, attribute: property, uuid: object.getUUID() })));
448
521
  await this.uploadSuccess(object, property, fileInfo);
449
522
  return;
450
523
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filebinary.service.js","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filebinary.service.js","sourceRoot":"","sources":["../src/filebinary.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,21 @@
1
1
  {
2
2
  "name": "@webda/fs",
3
- "version": "4.0.0-beta.4",
3
+ "version": "4.0.0-beta.6",
4
4
  "description": "Filesystem-based implementations of Store, Binary, and Queue for Webda",
5
5
  "author": "Remi Cattiau <remi@cattiau.com>",
6
- "repository": "git://github.com/loopingz/webda.io.git",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/loopingz/webda.io.git",
9
+ "directory": "packages/fs"
10
+ },
7
11
  "main": "lib/index.js",
8
12
  "typings": "lib/index.d.ts",
9
13
  "dependencies": {
10
14
  "mime-types": "^2.1.31",
11
- "@webda/core": "4.0.0-beta.4",
12
- "@webda/utils": "4.0.0-beta.4",
13
- "@webda/ql": "4.0.0-beta.3",
14
- "@webda/workout": "4.0.0-beta.3"
15
+ "@webda/utils": "4.0.0-beta.6",
16
+ "@webda/core": "4.0.0-beta.6",
17
+ "@webda/workout": "4.0.0-beta.5",
18
+ "@webda/ql": "4.0.0-beta.6"
15
19
  },
16
20
  "devDependencies": {
17
21
  "@vitest/coverage-v8": "^4.1.2",
@@ -21,8 +25,8 @@
21
25
  "typescript": "7.1.0-dev.20260929.1",
22
26
  "vite": "^6.0.0",
23
27
  "vitest": "^4.1.2",
24
- "@webda/compiler": "4.0.0-beta.4",
25
- "@webda/test": "4.0.0-beta.3"
28
+ "@webda/test": "4.0.0-beta.6",
29
+ "@webda/compiler": "4.0.0-beta.6"
26
30
  },
27
31
  "files": [
28
32
  "lib",
package/webda.module.json CHANGED
@@ -152,6 +152,16 @@
152
152
  },
153
153
  "description": "Configuration parameters for the JSON-file-backed store.",
154
154
  "properties": {
155
+ "aggregationFallback": {
156
+ "default": "warn",
157
+ "description": "What to do when an aggregation on this store cannot run natively and must\nstream every matching object through memory",
158
+ "enum": [
159
+ "allow",
160
+ "warn",
161
+ "deny"
162
+ ],
163
+ "type": "string"
164
+ },
155
165
  "beautify": {
156
166
  "description": "Parameter sent to JSON.stringify when storing the json",
157
167
  "type": [
@@ -173,6 +183,12 @@
173
183
  "description": "If set, Store will ignore the __type",
174
184
  "type": "boolean"
175
185
  },
186
+ "maxGroups": {
187
+ "default": 10000,
188
+ "description": "Maximum number of groups an aggregation may produce without LIMIT (or in memory)",
189
+ "minimum": 1,
190
+ "type": "number"
191
+ },
176
192
  "modelAliases": {
177
193
  "$ref": "#/definitions/modelAliases",
178
194
  "description": "Model Aliases to allow easier rename of Model"
@@ -263,10 +279,6 @@
263
279
  "additionalProperties": false,
264
280
  "description": "Represent a file to store",
265
281
  "properties": {
266
- "challenge": {
267
- "description": "Will be computed by the service\n\nhash of the content prefixed by 'WEBDA'",
268
- "type": "string"
269
- },
270
282
  "hash": {
271
283
  "description": "Will be computed by the service\n\nhash of the content",
272
284
  "type": "string"