@interop/was-client 0.34.0 → 0.35.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.
Files changed (59) hide show
  1. package/README.md +112 -0
  2. package/dist/Collection.d.ts +172 -1
  3. package/dist/Collection.d.ts.map +1 -1
  4. package/dist/Collection.js +368 -2
  5. package/dist/Collection.js.map +1 -1
  6. package/dist/codec.d.ts +101 -3
  7. package/dist/codec.d.ts.map +1 -1
  8. package/dist/edv/EdvCodec.d.ts +38 -4
  9. package/dist/edv/EdvCodec.d.ts.map +1 -1
  10. package/dist/edv/EdvCodec.js +318 -54
  11. package/dist/edv/EdvCodec.js.map +1 -1
  12. package/dist/edv/docCipher.d.ts +4 -3
  13. package/dist/edv/docCipher.d.ts.map +1 -1
  14. package/dist/edv/docCipher.js +17 -17
  15. package/dist/edv/docCipher.js.map +1 -1
  16. package/dist/edv/hmacKey.d.ts +76 -0
  17. package/dist/edv/hmacKey.d.ts.map +1 -0
  18. package/dist/edv/hmacKey.js +105 -0
  19. package/dist/edv/hmacKey.js.map +1 -0
  20. package/dist/edv/index.d.ts +7 -0
  21. package/dist/edv/index.d.ts.map +1 -1
  22. package/dist/edv/index.js +6 -0
  23. package/dist/edv/index.js.map +1 -1
  24. package/dist/edv/recipients.d.ts +22 -3
  25. package/dist/edv/recipients.d.ts.map +1 -1
  26. package/dist/edv/recipients.js +197 -21
  27. package/dist/edv/recipients.js.map +1 -1
  28. package/dist/errors.d.ts +20 -10
  29. package/dist/errors.d.ts.map +1 -1
  30. package/dist/errors.js +24 -14
  31. package/dist/errors.js.map +1 -1
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/internal/codec.d.ts.map +1 -1
  35. package/dist/internal/codec.js +64 -3
  36. package/dist/internal/codec.js.map +1 -1
  37. package/dist/internal/content.d.ts +12 -0
  38. package/dist/internal/content.d.ts.map +1 -1
  39. package/dist/internal/content.js +18 -0
  40. package/dist/internal/content.js.map +1 -1
  41. package/dist/internal/indexSchema.d.ts +95 -0
  42. package/dist/internal/indexSchema.d.ts.map +1 -0
  43. package/dist/internal/indexSchema.js +120 -0
  44. package/dist/internal/indexSchema.js.map +1 -0
  45. package/dist/internal/paths.d.ts +6 -0
  46. package/dist/internal/paths.d.ts.map +1 -1
  47. package/dist/internal/paths.js +8 -0
  48. package/dist/internal/paths.js.map +1 -1
  49. package/dist/paths.d.ts +1 -1
  50. package/dist/paths.d.ts.map +1 -1
  51. package/dist/paths.js +1 -1
  52. package/dist/paths.js.map +1 -1
  53. package/dist/sync/index.d.ts +9 -5
  54. package/dist/sync/index.d.ts.map +1 -1
  55. package/dist/sync/index.js +9 -5
  56. package/dist/sync/index.js.map +1 -1
  57. package/dist/types.d.ts +40 -1
  58. package/dist/types.d.ts.map +1 -1
  59. package/package.json +2 -2
@@ -6,8 +6,9 @@
6
6
  * lifecycle (`describe`/`configure`/`delete`) and contained-resource operations
7
7
  * (`add`/`get`/`put`/`list`, plus `resource(id)` for delete-by-id).
8
8
  */
9
- import { collectionPath, collectionItems, collectionPolicy, collectionLinkset, collectionBackend, collectionQuota, collectionQuery, resourcePath, toUrl } from './internal/paths.js';
9
+ import { collectionPath, collectionItems, collectionPolicy, collectionLinkset, collectionBackend, collectionQuota, collectionQuery, collectionMeta, resourcePath, toUrl } from './internal/paths.js';
10
10
  import { assertNotReserved } from './internal/reserved.js';
11
+ import { PreconditionFailedError, ValidationError, WasServerError } from './errors.js';
11
12
  import { delegateGrantAt } from './internal/grant.js';
12
13
  import { send, readData } from './internal/request.js';
13
14
  import { collectionCodecHolder } from './internal/codec.js';
@@ -17,7 +18,8 @@ import { collectionWritableFields, describeCollection, describeCollectionRespons
17
18
  import { readEtag, writeHeaders } from './internal/conditional.js';
18
19
  import { insertResource } from './internal/write.js';
19
20
  import { readPolicy, writePolicy, deletePolicy, isPublicPolicy, setPublicPolicy } from './internal/policy.js';
20
- import { createdResource, dataOrNull } from './internal/content.js';
21
+ import { createdResource, dataOrNull, storedResponse } from './internal/content.js';
22
+ import { INDEX_SCHEMA_PROPERTY, attributeKey, normalizeAttribute, readIndexSchema } from './internal/indexSchema.js';
21
23
  import { Resource } from './Resource.js';
22
24
  export class Collection {
23
25
  spaceId;
@@ -283,6 +285,370 @@ export class Collection {
283
285
  idempotent: true
284
286
  });
285
287
  }
288
+ get #metaPath() {
289
+ return collectionMeta(this.spaceId, this.id);
290
+ }
291
+ /**
292
+ * Reads the Collection's metadata object (server-managed timestamps,
293
+ * `createdBy` and the encrypted-`custom` key `epoch`, plus the user-writable
294
+ * `custom` object). Returns `null` if the collection is missing or not
295
+ * visible to you (404 conflation caveat). A server without Collection
296
+ * metadata support surfaces its 501 as `NotImplementedError`.
297
+ *
298
+ * On an encrypted collection the stored `custom` is an opaque envelope; this
299
+ * decodes it (decrypts, via the codec) so a caller always sees plaintext
300
+ * `{ name, tags }`. A collection with no user metadata reports `custom` as
301
+ * `{}`.
302
+ *
303
+ * Against a backend with the `conditional-writes` feature the result also
304
+ * carries the metadata's current `etag` (the `/meta` `metaVersion`
305
+ * validator) -- pass it as `setMeta(meta, { ifMatch })` for a
306
+ * lost-update-safe metadata update. That validator is independent of the
307
+ * Collection Description's ETag ({@link describeWithEtag}) and of every
308
+ * Resource's versions: writing one never bumps the other.
309
+ *
310
+ * @returns {Promise<(CollectionMetadata & { etag?: string }) | null>}
311
+ */
312
+ async meta() {
313
+ // Overlapped like `Resource.meta()`: the metadata GET does not depend on
314
+ // the codec (only its `custom` decode below does), the codec is awaited
315
+ // first for error precedence, and the no-op handler keeps an abandoned read
316
+ // from becoming an unhandled rejection.
317
+ const codecPromise = this.#codec();
318
+ const responsePromise = send(this.#context, {
319
+ path: this.#metaPath,
320
+ method: 'GET',
321
+ capability: this.#capability,
322
+ read: true
323
+ });
324
+ responsePromise.catch(() => { });
325
+ const codec = await codecPromise;
326
+ const response = await responsePromise;
327
+ if (response === null) {
328
+ return null;
329
+ }
330
+ if (response.data === undefined) {
331
+ // A 200 whose body `@interop/http-client` did not pre-parse into `.data`
332
+ // (a non-JSON content-type, or an empty/204 body): a metadata document
333
+ // always carries its server-managed fields as JSON, so an absent `.data`
334
+ // is a malformed response. Fail with a typed error rather than
335
+ // dereferencing `metadata.custom` off `undefined` as a raw `TypeError`.
336
+ // (Kept distinct from the `null` return, which means the collection is
337
+ // missing or not visible -- not that the server answered malformed.)
338
+ throw new WasServerError(`Metadata response for collection "${this.id}" carried no JSON body ` +
339
+ `(content-type ` +
340
+ `"${response.headers.get('content-type') ?? 'unknown'}").`);
341
+ }
342
+ const metadata = response.data;
343
+ // Decode the user-writable `custom` (decrypting it on an encrypted
344
+ // collection) so callers uniformly see plaintext `{ name, tags }`. No
345
+ // resource id is passed: this slot belongs to the collection itself, and
346
+ // the encrypting codec refuses a resource-bound envelope served here.
347
+ const custom = await codec.decodeMeta({ custom: metadata.custom });
348
+ const decoded = { ...metadata, custom };
349
+ const etag = readEtag(response);
350
+ return etag !== undefined ? { ...decoded, etag } : decoded;
351
+ }
352
+ /**
353
+ * Replaces the Collection's user-writable metadata (`custom`). This is a full
354
+ * replacement: any property omitted from `custom` is cleared, and an omitted
355
+ * `custom` clears them all. Does not create the collection -- a `PUT` to the
356
+ * metadata of a nonexistent collection throws `NotFoundError`. Servers
357
+ * without Collection metadata support surface their 501 as
358
+ * `NotImplementedError`.
359
+ *
360
+ * On an encrypted collection `custom` is encrypted into an opaque envelope by
361
+ * the codec before it is sent, so `name` / `tags` are never stored as
362
+ * server-visible plaintext -- transparently, the same call works on plaintext
363
+ * and encrypted collections alike.
364
+ *
365
+ * Conditional metadata writes (the backend's `conditional-writes` feature):
366
+ * pass `ifMatch` (the `etag` from a prior `meta()`) for an
367
+ * update-if-unchanged, or `ifNoneMatch: true` for a
368
+ * write-only-if-no-metadata. A failed precondition throws
369
+ * `PreconditionFailedError` (412). The `/meta` ETag (`metaVersion`) is
370
+ * independent of the Collection Description's ETag. Returns the new `etag`.
371
+ *
372
+ * @param meta {object}
373
+ * @param [meta.custom] {ResourceMetadataCustom} the user-writable properties
374
+ * @param options {object}
375
+ * @param [options.ifMatch] {string} update only if the `/meta` ETag matches
376
+ * @param [options.ifNoneMatch] {boolean} write only if no metadata is set
377
+ * @returns {Promise<{ etag?: string }>} the metadata's new ETag
378
+ */
379
+ async setMeta(meta = {}, options = {}) {
380
+ const codec = await this.#codec();
381
+ const { custom, epoch } = await codec.encodeMeta({
382
+ custom: meta.custom ?? {}
383
+ });
384
+ const response = await send(this.#context, {
385
+ path: this.#metaPath,
386
+ method: 'PUT',
387
+ capability: this.#capability,
388
+ // The key epoch travels in the body here, not in the `Key-Epoch` header:
389
+ // the header channel stamps a Resource's *content* write, while the
390
+ // Collection metadata stamp describes the `custom` envelope itself and is
391
+ // a top-level member of this PUT body. The server clears the stored stamp
392
+ // when the member is omitted -- which is exactly right on a plaintext
393
+ // collection, whose codec surfaces no epoch.
394
+ json: epoch !== undefined ? { custom, epoch } : { custom },
395
+ headers: writeHeaders({
396
+ precondition: {
397
+ ifMatch: options.ifMatch,
398
+ ifNoneMatch: options.ifNoneMatch
399
+ }
400
+ })
401
+ });
402
+ return { etag: readEtag(response) };
403
+ }
404
+ /**
405
+ * The shared read-then-CAS body of {@link setName} / {@link setTags}: reads
406
+ * the current metadata, merges `patch` over its `custom`, and writes it back
407
+ * pinned to the read's `etag` (when the backend supports
408
+ * `conditional-writes`), so a concurrent metadata write surfaces as
409
+ * `PreconditionFailedError` instead of being silently erased by the
410
+ * full-replacement write.
411
+ *
412
+ * @param patch {ResourceMetadataCustom} the properties to merge over the
413
+ * current `custom`
414
+ * @returns {Promise<void>}
415
+ */
416
+ async #patchCustom(patch) {
417
+ const current = await this.meta();
418
+ await this.setMeta({ custom: { ...current?.custom, ...patch } }, { ifMatch: current?.etag });
419
+ }
420
+ /**
421
+ * Sets the Collection's metadata-level human-readable `name`, preserving any
422
+ * existing `tags`. Convenience over `setMeta()`. The write is pinned to the
423
+ * `etag` the `meta()` read returned (when the backend supports
424
+ * `conditional-writes`), so a concurrent metadata write surfaces as
425
+ * `PreconditionFailedError` instead of being silently erased by this
426
+ * full-replacement write.
427
+ *
428
+ * On an encrypted collection this is the collection's client-encrypted name
429
+ * surface: the codec seals it into the `custom` envelope, and by convention
430
+ * the plaintext Description `name` is left unpopulated. On a plaintext
431
+ * collection the two are separate labels -- space-level listings surface the
432
+ * Description's `name` (set via `configure({ name })`), while this one is
433
+ * metadata-level.
434
+ *
435
+ * @param name {string}
436
+ * @returns {Promise<void>}
437
+ */
438
+ async setName(name) {
439
+ return this.#patchCustom({ name });
440
+ }
441
+ /**
442
+ * Sets the Collection's `tags`, preserving any existing `name`. Convenience
443
+ * over `setMeta()`. Pinned to the `meta()` read's `etag` like
444
+ * {@link setName}.
445
+ *
446
+ * @param tags {Record<string, string>}
447
+ * @returns {Promise<void>}
448
+ */
449
+ async setTags(tags) {
450
+ return this.#patchCustom({ tags });
451
+ }
452
+ /**
453
+ * The codec's search capability, or a typed refusal when this collection is
454
+ * not searchable this way -- a plaintext collection (whose contents the
455
+ * server can index itself) or an encrypted collection provisioned without a
456
+ * blinded-index key (which is installed at provisioning or never, since
457
+ * retro-fitting one would leave every already-written document unindexed).
458
+ *
459
+ * @param operation {string} what the caller was trying to do, for the message
460
+ * @returns {Promise<CodecIndexing>}
461
+ */
462
+ async #indexing(operation) {
463
+ const codec = await this.#codec();
464
+ if (!codec.indexing) {
465
+ throw new ValidationError(`Cannot ${operation} on collection "${this.id}": it carries no ` +
466
+ 'client-side search index. Only an encrypted collection provisioned ' +
467
+ 'with a blinded-index key is searchable this way (install it at ' +
468
+ 'creation with ensureFirstEpoch({ blindedIndex: true }) -- it cannot ' +
469
+ 'be added later). A plaintext collection is queried server-side ' +
470
+ 'instead.');
471
+ }
472
+ return codec.indexing;
473
+ }
474
+ /**
475
+ * Reads the Collection's persisted index schema: which attributes its
476
+ * documents are searchable by, whether each index is unique, and the schema
477
+ * revision each was added in. Any recipient that can decrypt the collection
478
+ * can read it, which is the point of persisting it -- an app granted access
479
+ * to an existing collection learns what is queryable with no out-of-band
480
+ * coordination (the stored index tokens cannot teach it, being blinded).
481
+ *
482
+ * `addedIn` is the partial-coverage marker: documents written before an
483
+ * attribute was declared carry no token for it, so they do not match a search
484
+ * on it until they are rewritten.
485
+ *
486
+ * @returns {Promise<IndexDeclaration[]>}
487
+ */
488
+ async indexes() {
489
+ const indexing = await this.#indexing('read the index schema');
490
+ return indexing.schema().indexes;
491
+ }
492
+ /**
493
+ * Declares an attribute searchable, persisting it in the Collection's
494
+ * encrypted index schema and installing it on this handle's codec.
495
+ * Idempotent: re-declaring an attribute already in the schema on the same
496
+ * terms is a no-op write.
497
+ *
498
+ * Declarations are collection state, not app state: they are stored inside
499
+ * the encrypted `/meta` envelope, so every recipient discovers them (see
500
+ * {@link indexes}). Concurrent declarations from two clients are reconciled
501
+ * with a compare-and-swap against the metadata's own `metaVersion` ETag and a
502
+ * bounded retry, so neither is silently erased.
503
+ *
504
+ * A declaration is prospective: documents already written carry no token for
505
+ * the new attribute and do not match a search on it until they are rewritten
506
+ * (the backfill is a re-encrypt sweep of the collection).
507
+ *
508
+ * Pass an array of attribute names for a compound index. A compound index can
509
+ * be searched by a leading prefix of its attributes; `unique` is enforced
510
+ * only when a document carries the whole combination.
511
+ *
512
+ * @param options {object}
513
+ * @param options.attribute {string | string[]} a dotted attribute path
514
+ * rooted at `content` or `meta` (e.g. `content.type`), or an array of them
515
+ * for a compound index
516
+ * @param [options.unique] {boolean} reject a second document that carries
517
+ * the same value (the server answers a colliding write with `409`)
518
+ * @returns {Promise<IndexSchema>} the schema now in force
519
+ */
520
+ async declareIndex({ attribute, unique }) {
521
+ const indexing = await this.#indexing('declare an index');
522
+ const declared = normalizeAttribute(attribute);
523
+ const key = attributeKey(declared);
524
+ // Read, reconcile, conditionally write. A 412 means another client wrote
525
+ // the metadata between the read and the write, so re-read and re-apply
526
+ // rather than clobbering its declaration with ours.
527
+ const maxAttempts = 4;
528
+ for (let attempt = 1;; attempt++) {
529
+ const current = await this.meta();
530
+ const custom = (current?.custom ?? {});
531
+ const schema = readIndexSchema(custom);
532
+ const existing = schema.indexes.find(entry => attributeKey(entry.attribute) === key);
533
+ if (existing) {
534
+ if ((existing.unique === true) !== (unique === true)) {
535
+ throw new ValidationError(`Cannot declare index "${key}" as ` +
536
+ `${unique === true ? 'unique' : 'non-unique'}: this collection ` +
537
+ `already declares it as ` +
538
+ `${existing.unique === true ? 'unique' : 'non-unique'}. An ` +
539
+ 'index cannot change uniqueness in place -- already-stored ' +
540
+ 'documents were indexed under the old terms.');
541
+ }
542
+ indexing.applySchema(schema);
543
+ return schema;
544
+ }
545
+ const revision = schema.revision + 1;
546
+ const next = {
547
+ revision,
548
+ indexes: [
549
+ ...schema.indexes,
550
+ {
551
+ attribute: declared,
552
+ ...(unique === true && { unique: true }),
553
+ addedIn: revision
554
+ }
555
+ ]
556
+ };
557
+ try {
558
+ await this.setMeta({
559
+ // The schema shares the `custom` object with the user's own
560
+ // `name` / `tags`, which are carried forward untouched.
561
+ custom: {
562
+ ...custom,
563
+ [INDEX_SCHEMA_PROPERTY]: next
564
+ }
565
+ }, { ifMatch: current?.etag });
566
+ }
567
+ catch (err) {
568
+ if (err instanceof PreconditionFailedError && attempt < maxAttempts) {
569
+ continue;
570
+ }
571
+ throw err;
572
+ }
573
+ indexing.applySchema(next);
574
+ return next;
575
+ }
576
+ }
577
+ /**
578
+ * Searches the collection's encrypted documents by indexed attribute. The
579
+ * terms are blinded client-side before they are sent, so the server matches
580
+ * opaque tokens and learns neither the attribute names nor the values; the
581
+ * documents it returns are decrypted here, exactly as `get()` decrypts one.
582
+ *
583
+ * Give either `equals` (attribute/value pairs a document must match -- an
584
+ * array of objects is an OR of alternatives) or `has` (attribute names a
585
+ * document must carry), not both. Every attribute named must already be in
586
+ * the collection's schema ({@link declareIndex}); an undeclared one is
587
+ * refused with `ValidationError` rather than silently matching nothing.
588
+ *
589
+ * Pass `count: true` for just the number of matches. Otherwise the result is
590
+ * one page: `limit` caps its size (the server clamps its own maximum), and a
591
+ * `hasMore` page carries the `cursor` to pass back for the next one.
592
+ *
593
+ * Requires the collection's backend to advertise the `blinded-index-query`
594
+ * feature; a backend without it answers `501` (`NotImplementedError`).
595
+ *
596
+ * @param options {object}
597
+ * @param [options.equals] {object | object[]} attribute/value pairs to match
598
+ * @param [options.has] {string | string[]} attribute names to require
599
+ * @param [options.count] {boolean} return `{ count }` instead of documents
600
+ * @param [options.limit] {number} maximum documents in the page
601
+ * @param [options.cursor] {string} continue from a previous page
602
+ * @returns {Promise<FindPage | { count: number }>}
603
+ */
604
+ async find(options) {
605
+ const { equals, has, count, limit, cursor } = options;
606
+ const indexing = await this.#indexing('search');
607
+ const codec = await this.#codec();
608
+ const query = await indexing.buildQuery({ equals, has });
609
+ const response = await send(this.#context, {
610
+ path: collectionQuery(this.spaceId, this.id),
611
+ method: 'POST',
612
+ capability: this.#capability,
613
+ // The profile is bound here the way `changes()` binds its own: same
614
+ // endpoint, no client-side feature probe -- a backend that does not
615
+ // implement the profile answers 501, which is a clearer signal than a
616
+ // guess made from the backend descriptor.
617
+ json: {
618
+ profile: 'blinded-index',
619
+ ...query,
620
+ ...(count === true && { count: true }),
621
+ ...(limit !== undefined && { limit }),
622
+ ...(cursor !== undefined && { cursor })
623
+ }
624
+ });
625
+ const result = dataOrNull(response);
626
+ if (result === null) {
627
+ throw new WasServerError(`Search response for collection "${this.id}" carried no JSON body.`);
628
+ }
629
+ if (count === true) {
630
+ return { count: typeof result.count === 'number' ? result.count : 0 };
631
+ }
632
+ const documents = Array.isArray(result.documents) ? result.documents : [];
633
+ const items = [];
634
+ for (const envelope of documents) {
635
+ // Restrict-mode ids make the stored document's own id the WAS resource
636
+ // id, so it is also the id the codec verifies the envelope's
637
+ // AEAD-authenticated binding against -- a server that returns one
638
+ // document under another's id is caught here, not trusted.
639
+ const id = envelope.id;
640
+ if (typeof id !== 'string') {
641
+ throw new WasServerError(`Search response for collection "${this.id}" returned a document ` +
642
+ 'with no id.');
643
+ }
644
+ items.push({ id, data: await codec.decode(storedResponse(envelope), id) });
645
+ }
646
+ return {
647
+ items,
648
+ hasMore: result.hasMore === true,
649
+ ...(result.cursor !== undefined && { cursor: result.cursor })
650
+ };
651
+ }
286
652
  /**
287
653
  * Returns a lazy handle to a resource by id. No I/O.
288
654
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Collection.js","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Collection.js","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"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"}
package/dist/codec.d.ts CHANGED
@@ -97,12 +97,100 @@ export interface EncodedWrite {
97
97
  envelope?: unknown;
98
98
  epoch?: string;
99
99
  }
100
+ /**
101
+ * One entry of a collection's persisted index schema: an attribute path (or an
102
+ * array of them, for a compound index), whether the index is unique, and the
103
+ * schema revision it was added in.
104
+ *
105
+ * `addedIn` is the partial-coverage marker: a document written before the
106
+ * attribute was declared carries no token for it, so a querier comparing
107
+ * `addedIn` against how long the collection has existed knows matches may be
108
+ * incomplete until those documents are rewritten.
109
+ */
110
+ export interface IndexDeclaration {
111
+ attribute: string | string[];
112
+ unique?: true;
113
+ addedIn: number;
114
+ }
115
+ /**
116
+ * The collection's persisted index schema: which attributes are searchable, and
117
+ * a monotonic `revision` bumped by each declaration. It is stored inside the
118
+ * collection's encrypted metadata envelope, so any recipient can discover what
119
+ * is queryable without out-of-band coordination (the attribute names are
120
+ * themselves sensitive -- they describe the data model -- so they never travel
121
+ * as server-visible plaintext).
122
+ */
123
+ export interface IndexSchema {
124
+ revision: number;
125
+ indexes: IndexDeclaration[];
126
+ }
127
+ /**
128
+ * A built search query in the form the server evaluates: an index key id plus
129
+ * blinded terms. The client blinds attribute names and values before they leave
130
+ * it, so the server matches opaque strings and learns neither.
131
+ */
132
+ export interface BlindedQuery {
133
+ index: string;
134
+ equals?: Array<Record<string, string>>;
135
+ has?: string[];
136
+ count?: boolean;
137
+ limit?: number;
138
+ cursor?: string;
139
+ }
140
+ /**
141
+ * The optional search capability of a codec that indexes what it stores. It is
142
+ * deliberately scheme-agnostic -- no EDV type appears in it -- so the handle
143
+ * layer can drive declaration and search without knowing how blinding works.
144
+ * The identity (plaintext) codec does not implement it, which is how the handle
145
+ * layer detects that a collection is not searchable this way.
146
+ */
147
+ export interface CodecIndexing {
148
+ /**
149
+ * Installs the collection's persisted schema on this codec, so subsequent
150
+ * writes emit index tokens for the declared attributes and queries can be
151
+ * built for them. Called at codec-resolution time with the stored schema, and
152
+ * again by `declareIndex` after it persists a new one.
153
+ *
154
+ * @param schema {IndexSchema}
155
+ * @returns {void}
156
+ */
157
+ applySchema(schema: IndexSchema): void;
158
+ /**
159
+ * The schema currently installed on this codec (the empty schema before one
160
+ * is applied).
161
+ *
162
+ * @returns {IndexSchema}
163
+ */
164
+ schema(): IndexSchema;
165
+ /**
166
+ * Blinds a caller's search terms into the query the server evaluates.
167
+ * Attributes absent from the installed schema are refused rather than
168
+ * silently blinded into a term-less query that matches nothing.
169
+ *
170
+ * @param input {object}
171
+ * @param [input.equals] {object | object[]} attribute/value pairs to match
172
+ * @param [input.has] {string | string[]} attribute names a document must have
173
+ * @returns {Promise<BlindedQuery>}
174
+ */
175
+ buildQuery(input: {
176
+ equals?: Record<string, unknown> | Array<Record<string, unknown>>;
177
+ has?: string | string[];
178
+ }): Promise<BlindedQuery>;
179
+ }
100
180
  /**
101
181
  * A pluggable encode/decode transform bound to a single collection handle.
102
182
  * Implementations must be stateless with respect to a given call (a resolved
103
183
  * codec is reused across every read/write on the handle).
104
184
  */
105
185
  export interface ResourceCodec {
186
+ /**
187
+ * The codec's search capability, when it indexes what it stores (the EDV
188
+ * codec on a collection whose descriptor declares a blinded-index key).
189
+ * Absent for the identity codec and for an encrypted collection provisioned
190
+ * without an index key, so `Collection.declareIndex()` / `find()` refuse
191
+ * rather than pretend.
192
+ */
193
+ readonly indexing?: CodecIndexing;
106
194
  /**
107
195
  * Whether this codec drives optimistic-concurrency (conditional) writes. When
108
196
  * `true`, the write path pre-reads the current stored resource and passes it
@@ -159,14 +247,22 @@ export interface ResourceCodec {
159
247
  * @param [input.id] {string} the resource id the metadata belongs to. An
160
248
  * encrypting codec binds it into the metadata envelope's AEAD-authenticated
161
249
  * protected header (so a server-side swap of two resources' metadata is
162
- * detected on decode); the identity codec ignores it.
163
- * @returns {Promise<{ custom: object }>} the value to store under `custom`
250
+ * detected on decode); the identity codec ignores it. Absent for a
251
+ * Collection-level metadata write, which belongs to no resource -- an
252
+ * encrypting codec then binds its own collection id instead.
253
+ * @returns {Promise<{ custom: object; epoch?: string }>} the value to store
254
+ * under `custom`, plus -- for an encrypting codec -- `epoch`, the key-epoch
255
+ * id the metadata envelope sealed under. A Collection-level `/meta` write
256
+ * forwards it as the PUT body's top-level `epoch` stamp (the server clears
257
+ * the stamp when it is omitted, so it must be sent on every encrypted
258
+ * Collection metadata write). Absent for a plaintext/identity codec.
164
259
  */
165
260
  encodeMeta(input: {
166
261
  custom: ResourceMetadataCustom;
167
262
  id?: string;
168
263
  }): Promise<{
169
264
  custom: object;
265
+ epoch?: string;
170
266
  }>;
171
267
  /**
172
268
  * Inverts {@link encodeMeta}: transforms the stored `custom` value read from
@@ -178,7 +274,9 @@ export interface ResourceCodec {
178
274
  * @param [stored.custom] {unknown} the stored `custom` value from `/meta`
179
275
  * @param [expectedId] {string} the resource id the metadata belongs to. An
180
276
  * encrypting codec verifies the envelope's AEAD-authenticated binding
181
- * against it; the identity codec ignores it.
277
+ * against it; the identity codec ignores it. Omitted for a Collection-level
278
+ * read, where an encrypting codec instead requires the envelope to be bound
279
+ * to that collection.
182
280
  * @returns {Promise<ResourceMetadataCustom>}
183
281
  */
184
282
  decodeMeta(stored: {
@@ -1 +1 @@
1
- {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EACV,oBAAoB,EACpB,IAAI,EACJ,YAAY,EACZ,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAEpC;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,EAAE;QACZ,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,YAAY,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;KAC9B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAEzB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAEzE;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,KAAK,EAAE;QAChB,MAAM,EAAE,sBAAsB,CAAA;QAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;KACZ,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAE/B;;;;;;;;;;;;OAYG;IACH,UAAU,CACR,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,CAAC,CAAA;CACnC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,KAAK,EAAE;QACd,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,CAAC,EAAE,oBAAoB,CAAA;QACjC,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;CAClC"}
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"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"}