@interop/was-client 0.35.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +22 -5
  2. package/dist/Collection.d.ts +5 -0
  3. package/dist/Collection.d.ts.map +1 -1
  4. package/dist/Collection.js +37 -4
  5. package/dist/Collection.js.map +1 -1
  6. package/dist/Resource.d.ts +4 -3
  7. package/dist/Resource.d.ts.map +1 -1
  8. package/dist/Resource.js +31 -20
  9. package/dist/Resource.js.map +1 -1
  10. package/dist/codec.d.ts +91 -4
  11. package/dist/codec.d.ts.map +1 -1
  12. package/dist/codec.js +10 -1
  13. package/dist/codec.js.map +1 -1
  14. package/dist/edv/EdvCodec.d.ts +33 -9
  15. package/dist/edv/EdvCodec.d.ts.map +1 -1
  16. package/dist/edv/EdvCodec.js +471 -52
  17. package/dist/edv/EdvCodec.js.map +1 -1
  18. package/dist/edv/WasTransport.d.ts +39 -2
  19. package/dist/edv/WasTransport.d.ts.map +1 -1
  20. package/dist/edv/WasTransport.js +82 -26
  21. package/dist/edv/WasTransport.js.map +1 -1
  22. package/dist/edv/docCipher.d.ts +59 -7
  23. package/dist/edv/docCipher.d.ts.map +1 -1
  24. package/dist/edv/docCipher.js +63 -13
  25. package/dist/edv/docCipher.js.map +1 -1
  26. package/dist/edv/index.d.ts +1 -1
  27. package/dist/edv/index.d.ts.map +1 -1
  28. package/dist/errors.d.ts +31 -10
  29. package/dist/errors.d.ts.map +1 -1
  30. package/dist/errors.js +35 -14
  31. package/dist/errors.js.map +1 -1
  32. package/dist/index.d.ts +4 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/internal/features.d.ts +44 -1
  37. package/dist/internal/features.d.ts.map +1 -1
  38. package/dist/internal/features.js +39 -0
  39. package/dist/internal/features.js.map +1 -1
  40. package/dist/internal/write.d.ts +65 -12
  41. package/dist/internal/write.d.ts.map +1 -1
  42. package/dist/internal/write.js +71 -9
  43. package/dist/internal/write.js.map +1 -1
  44. package/dist/sync/index.d.ts +9 -5
  45. package/dist/sync/index.d.ts.map +1 -1
  46. package/dist/sync/index.js +9 -5
  47. package/dist/sync/index.js.map +1 -1
  48. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { EdvClientCore } from '@interop/edv-client';
2
2
  import type { IKeyAgreementKey, IKeyResolver } from '@interop/data-integrity-core';
3
- import type { CodecIndexing, EncodedWrite, EncryptionProvider, ResourceCodec, ResponseLike } from '../codec.js';
3
+ import type { CodecIndexing, CodecRequestContext, CodecWrite, EncryptionProvider, ResourceCodec, ResponseLike } from '../codec.js';
4
4
  import type { BlindingKey } from './hmacKey.js';
5
5
  import type { Json, ResourceData, ResourceMetadataCustom } from '../types.js';
6
6
  /**
@@ -25,28 +25,42 @@ export declare class EdvCodec implements ResourceCodec {
25
25
  * into every envelope's `was.epoch`, which the decode side checks against
26
26
  * the decrypting key's epoch unconditionally.
27
27
  * @param options.contentType {string} stored envelope content type
28
- * @param options.maxBlobBytes {number} single-document binary cap
28
+ * @param options.maxBlobBytes {number} the size above which a binary write
29
+ * is routed to the chunked-stream path instead of one document
30
+ * @param [options.chunkSize] {number} the size of each encrypted chunk a
31
+ * routed write emits (defaults to the EDV core's 1 MiB). One chunk is one
32
+ * upload, so it must stay under the backend's `maxUploadBytes`; that
33
+ * constraint is not advertised through the feature probe, so it is the
34
+ * caller's to respect (see `createEdvEncryption`)
29
35
  * @param options.idDerivation {string} how `add()` mints a document
30
36
  * id: `'random'` (classic `generateId()`) or `'content'` (derived from the
31
37
  * JWE ciphertext, content-addressed)
32
38
  * @param [options.version] {number} the EDV-over-WAS scheme version to bind
33
39
  * into each envelope's `was.v` (defaults to {@link EDV_SCHEME_VERSION})
40
+ * @param options.spaceId {string} the Space holding the Collection, for the
41
+ * chunked-stream path's own transport
34
42
  * @param options.collectionId {string} the Collection this codec reads and
35
43
  * writes: bound into the Collection metadata envelope's `was.collection`
36
44
  * (and checked on read), and it labels decrypt-routing errors
45
+ * @param options.epochIds {string[]} the id of every epoch the descriptor
46
+ * lists (held by this reader or not); decrypt routing checks it to tell a
47
+ * not-a-recipient envelope apart from a stale-descriptor one
37
48
  * @param [options.hmac] {BlindingKey} the collection's blinded-index key,
38
49
  * where it declares one
39
50
  */
40
- constructor({ edv, keyAgreementKey, readKeys, writeEpoch, contentType, maxBlobBytes, idDerivation, version, collectionId, hmac }: {
51
+ constructor({ edv, keyAgreementKey, readKeys, writeEpoch, contentType, maxBlobBytes, chunkSize, idDerivation, version, spaceId, collectionId, epochIds, hmac }: {
41
52
  edv: EdvClientCore;
42
53
  keyAgreementKey: IKeyAgreementKey;
43
54
  readKeys: IKeyAgreementKey[];
44
55
  writeEpoch: string;
45
56
  contentType: string;
46
57
  maxBlobBytes: number;
58
+ chunkSize?: number;
47
59
  idDerivation: 'random' | 'content';
48
60
  version?: number;
61
+ spaceId: string;
49
62
  collectionId: string;
63
+ epochIds: string[];
50
64
  hmac?: BlindingKey | null;
51
65
  });
52
66
  /**
@@ -67,11 +81,11 @@ export declare class EdvCodec implements ResourceCodec {
67
81
  data: ResourceData;
68
82
  contentType?: string;
69
83
  current?: ResponseLike | null;
70
- }): Promise<EncodedWrite>;
84
+ }): Promise<CodecWrite>;
71
85
  /**
72
86
  * @inheritdoc
73
87
  */
74
- decode(response: ResponseLike, expectedId?: string): Promise<Json | Blob>;
88
+ decode(response: ResponseLike, expectedId?: string, context?: CodecRequestContext): Promise<Json | Blob>;
75
89
  /**
76
90
  * @inheritdoc
77
91
  *
@@ -142,10 +156,19 @@ export interface EdvKeys {
142
156
  * defaults to `application/json`. Pass `JOSE_CONTENT_TYPE`
143
157
  * (`application/jose+json`) against a server that registers an
144
158
  * `application/*+json` parser.
145
- * @param [options.maxBlobBytes] {number} single-document binary cap in raw
146
- * bytes (default 512 KiB, sized so the encrypted envelope stays under a
159
+ * @param [options.maxBlobBytes] {number} the size in raw bytes above which a
160
+ * binary `add()` is routed to the chunked-stream path instead of one document
161
+ * (default 512 KiB, sized so a single-document envelope stays under a
147
162
  * server's ~1 MiB JSON body cap; raise it against a server with a larger
148
- * limit)
163
+ * limit). A routing threshold, not a hard cap.
164
+ * @param [options.chunkSize] {number} the size of each encrypted chunk a
165
+ * routed write emits, in bytes (default 1 MiB). Each chunk is one upload, so
166
+ * it must stay under the backend's `maxUploadBytes` constraint (the
167
+ * encrypted chunk is somewhat larger than `chunkSize`, so leave headroom).
168
+ * This is not checked client-side: the shared backend probe reads the
169
+ * descriptor's affordance tokens, not its `constraints`, so a chunk over the
170
+ * limit is rejected by the server with a `PayloadTooLargeError` (413) and
171
+ * the failed write's document stub is then cleaned up.
149
172
  * @param [options.idDerivation] {string} how `add()` mints a document id.
150
173
  * `'random'` (default) is the classic mutable-document model: a random
151
174
  * `generateId()` id, updated in place via `sequence`. `'content'` derives the
@@ -157,13 +180,14 @@ export interface EdvKeys {
157
180
  * `put(id, ...)` path is unaffected either way.
158
181
  * @returns {EncryptionProvider}
159
182
  */
160
- export declare function createEdvEncryption({ resolveKeys, contentType, maxBlobBytes, idDerivation }: {
183
+ export declare function createEdvEncryption({ resolveKeys, contentType, maxBlobBytes, chunkSize, idDerivation }: {
161
184
  resolveKeys: (ref: {
162
185
  spaceId: string;
163
186
  collectionId: string;
164
187
  }) => Promise<EdvKeys | null>;
165
188
  contentType?: string;
166
189
  maxBlobBytes?: number;
190
+ chunkSize?: number;
167
191
  idDerivation?: 'random' | 'content';
168
192
  }): EncryptionProvider;
169
193
  //# sourceMappingURL=EdvCodec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EdvCodec.d.ts","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EdvCodec.d.ts","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"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"}