@interop/was-client 0.99.0 → 0.100.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 (149) hide show
  1. package/README.md +94 -71
  2. package/dist/Collection.d.ts +20 -8
  3. package/dist/Collection.d.ts.map +1 -1
  4. package/dist/Collection.js +89 -69
  5. package/dist/Collection.js.map +1 -1
  6. package/dist/Resource.d.ts +14 -3
  7. package/dist/Resource.d.ts.map +1 -1
  8. package/dist/Resource.js +38 -27
  9. package/dist/Resource.js.map +1 -1
  10. package/dist/Space.d.ts +18 -4
  11. package/dist/Space.d.ts.map +1 -1
  12. package/dist/Space.js +64 -61
  13. package/dist/Space.js.map +1 -1
  14. package/dist/WasClient.d.ts +105 -58
  15. package/dist/WasClient.d.ts.map +1 -1
  16. package/dist/WasClient.js +216 -142
  17. package/dist/WasClient.js.map +1 -1
  18. package/dist/codec.d.ts +3 -2
  19. package/dist/codec.d.ts.map +1 -1
  20. package/dist/edv/EdvCodec.d.ts.map +1 -1
  21. package/dist/edv/EdvCodec.js +37 -26
  22. package/dist/edv/EdvCodec.js.map +1 -1
  23. package/dist/edv/WasTransport.d.ts +7 -4
  24. package/dist/edv/WasTransport.d.ts.map +1 -1
  25. package/dist/edv/WasTransport.js +39 -20
  26. package/dist/edv/WasTransport.js.map +1 -1
  27. package/dist/edv/acquire.d.ts +3 -3
  28. package/dist/edv/acquire.d.ts.map +1 -1
  29. package/dist/edv/acquire.js +3 -3
  30. package/dist/edv/acquire.js.map +1 -1
  31. package/dist/edv/cipher.d.ts +7 -4
  32. package/dist/edv/cipher.d.ts.map +1 -1
  33. package/dist/edv/cipher.js +7 -4
  34. package/dist/edv/cipher.js.map +1 -1
  35. package/dist/edv/core.d.ts +1 -1
  36. package/dist/edv/core.d.ts.map +1 -1
  37. package/dist/edv/core.js +1 -1
  38. package/dist/edv/core.js.map +1 -1
  39. package/dist/edv/docCipher.d.ts +10 -7
  40. package/dist/edv/docCipher.d.ts.map +1 -1
  41. package/dist/edv/docCipher.js +12 -8
  42. package/dist/edv/docCipher.js.map +1 -1
  43. package/dist/edv/encryption.d.ts +2 -2
  44. package/dist/edv/encryption.d.ts.map +1 -1
  45. package/dist/edv/encryption.js +8 -6
  46. package/dist/edv/encryption.js.map +1 -1
  47. package/dist/edv/epochCrypto.d.ts +12 -4
  48. package/dist/edv/epochCrypto.d.ts.map +1 -1
  49. package/dist/edv/epochCrypto.js +37 -10
  50. package/dist/edv/epochCrypto.js.map +1 -1
  51. package/dist/edv/epochKeys.d.ts +6 -2
  52. package/dist/edv/epochKeys.d.ts.map +1 -1
  53. package/dist/edv/epochKeys.js +25 -14
  54. package/dist/edv/epochKeys.js.map +1 -1
  55. package/dist/edv/hmacKey.d.ts +7 -1
  56. package/dist/edv/hmacKey.d.ts.map +1 -1
  57. package/dist/edv/hmacKey.js +9 -3
  58. package/dist/edv/hmacKey.js.map +1 -1
  59. package/dist/edv/index.d.ts +1 -1
  60. package/dist/edv/index.d.ts.map +1 -1
  61. package/dist/edv/index.js +1 -1
  62. package/dist/edv/index.js.map +1 -1
  63. package/dist/edv/recipients.d.ts.map +1 -1
  64. package/dist/edv/recipients.js +2 -0
  65. package/dist/edv/recipients.js.map +1 -1
  66. package/dist/edv/refreshingDocCipher.d.ts +3 -3
  67. package/dist/edv/refreshingDocCipher.d.ts.map +1 -1
  68. package/dist/edv/refreshingDocCipher.js +3 -3
  69. package/dist/edv/refreshingDocCipher.js.map +1 -1
  70. package/dist/edv/transportFactory.d.ts +3 -3
  71. package/dist/edv/transportFactory.d.ts.map +1 -1
  72. package/dist/edv/transportFactory.js +3 -3
  73. package/dist/edv/transportFactory.js.map +1 -1
  74. package/dist/errors.d.ts +6 -4
  75. package/dist/errors.d.ts.map +1 -1
  76. package/dist/errors.js +6 -4
  77. package/dist/errors.js.map +1 -1
  78. package/dist/index.d.ts +2 -1
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +1 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/internal/codec.d.ts +7 -7
  83. package/dist/internal/codec.d.ts.map +1 -1
  84. package/dist/internal/codec.js +19 -18
  85. package/dist/internal/codec.js.map +1 -1
  86. package/dist/internal/conditional.d.ts +3 -3
  87. package/dist/internal/conditional.d.ts.map +1 -1
  88. package/dist/internal/conditional.js +5 -5
  89. package/dist/internal/conditional.js.map +1 -1
  90. package/dist/internal/grant.d.ts +15 -26
  91. package/dist/internal/grant.d.ts.map +1 -1
  92. package/dist/internal/grant.js +95 -29
  93. package/dist/internal/grant.js.map +1 -1
  94. package/dist/internal/memo.d.ts +13 -4
  95. package/dist/internal/memo.d.ts.map +1 -1
  96. package/dist/internal/memo.js +18 -7
  97. package/dist/internal/memo.js.map +1 -1
  98. package/dist/internal/meta.d.ts +8 -8
  99. package/dist/internal/meta.d.ts.map +1 -1
  100. package/dist/internal/meta.js +13 -10
  101. package/dist/internal/meta.js.map +1 -1
  102. package/dist/internal/pagination.d.ts +30 -15
  103. package/dist/internal/pagination.d.ts.map +1 -1
  104. package/dist/internal/pagination.js +31 -17
  105. package/dist/internal/pagination.js.map +1 -1
  106. package/dist/internal/paths.d.ts +332 -195
  107. package/dist/internal/paths.d.ts.map +1 -1
  108. package/dist/internal/paths.js +400 -367
  109. package/dist/internal/paths.js.map +1 -1
  110. package/dist/internal/policy.d.ts +23 -23
  111. package/dist/internal/policy.d.ts.map +1 -1
  112. package/dist/internal/policy.js +20 -20
  113. package/dist/internal/policy.js.map +1 -1
  114. package/dist/internal/request.d.ts +17 -21
  115. package/dist/internal/request.d.ts.map +1 -1
  116. package/dist/internal/request.js +10 -21
  117. package/dist/internal/request.js.map +1 -1
  118. package/dist/internal/revoke.d.ts +34 -13
  119. package/dist/internal/revoke.d.ts.map +1 -1
  120. package/dist/internal/revoke.js +97 -28
  121. package/dist/internal/revoke.js.map +1 -1
  122. package/dist/internal/service.d.ts +25 -7
  123. package/dist/internal/service.d.ts.map +1 -1
  124. package/dist/internal/service.js +49 -45
  125. package/dist/internal/service.js.map +1 -1
  126. package/dist/internal/write.d.ts +18 -18
  127. package/dist/internal/write.d.ts.map +1 -1
  128. package/dist/internal/write.js +27 -27
  129. package/dist/internal/write.js.map +1 -1
  130. package/dist/paths.d.ts +32 -25
  131. package/dist/paths.d.ts.map +1 -1
  132. package/dist/paths.js +32 -25
  133. package/dist/paths.js.map +1 -1
  134. package/dist/sync/index.d.ts +4 -2
  135. package/dist/sync/index.d.ts.map +1 -1
  136. package/dist/sync/index.js +4 -2
  137. package/dist/sync/index.js.map +1 -1
  138. package/dist/sync/port.d.ts +3 -3
  139. package/dist/sync/port.d.ts.map +1 -1
  140. package/dist/sync/port.js +12 -12
  141. package/dist/sync/port.js.map +1 -1
  142. package/dist/sync/provisioning.d.ts +10 -9
  143. package/dist/sync/provisioning.d.ts.map +1 -1
  144. package/dist/sync/provisioning.js +19 -18
  145. package/dist/sync/provisioning.js.map +1 -1
  146. package/dist/sync/types.d.ts +2 -2
  147. package/dist/types.d.ts +13 -5
  148. package/dist/types.d.ts.map +1 -1
  149. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"grant.js","sourceRoot":"","sources":["../../src/internal/grant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grant.js","sourceRoot":"","sources":["../../src/internal/grant.ts"],"names":[],"mappings":"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"}
@@ -8,21 +8,30 @@
8
8
  * properties: concurrent callers share one round-trip, a rejection is not
9
9
  * cached (so the next call retries rather than replaying a stale failure), and
10
10
  * a reset drops whatever is held. Written once here so the three cannot drift
11
- * apart, which they had.
11
+ * apart, which they had. A user whose input cannot change under it may name
12
+ * the rejections it wants kept, so a permanent failure is raised once and then
13
+ * replayed instead of re-attempted.
12
14
  */
13
15
  /**
14
16
  * A memo of one lazily-resolved value. Holds the in-flight promise so
15
17
  * concurrent callers share a single resolution, drops it on rejection so a
16
- * transient failure does not permanently poison the memo, and exposes
17
- * {@link Memo.reset} for when the underlying answer is known to have changed.
18
+ * transient failure does not permanently poison the memo (unless `retain`
19
+ * claims that rejection), and exposes {@link Memo.reset} for when the
20
+ * underlying answer is known to have changed.
18
21
  */
19
22
  export declare class Memo<T> {
20
23
  #private;
21
24
  /**
22
25
  * @param resolve {function} resolves a fresh value; re-invoked after a
23
26
  * rejection or a `reset()`, else called at most once
27
+ * @param [options] {object}
28
+ * @param [options.retain] {function} given a rejection's reason, whether
29
+ * to keep that rejection memoized (a failure a retry cannot change);
30
+ * default: keep none
24
31
  */
25
- constructor(resolve: () => Promise<T>);
32
+ constructor(resolve: () => Promise<T>, { retain }?: {
33
+ retain?: (err: unknown) => boolean;
34
+ });
26
35
  /**
27
36
  * Whether a resolution is already held -- in flight or settled. Lets a caller
28
37
  * tell, synchronously and before calling {@link Memo.get}, whether its own
@@ -1 +1 @@
1
- {"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../src/internal/memo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,qBAAa,IAAI,CAAC,CAAC;;IAIjB;;;OAGG;gBACS,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAIrC;;;;;;OAMG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACH,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IAiBjB;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../src/internal/memo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AACH,qBAAa,IAAI,CAAC,CAAC;;IAKjB;;;;;;;OAOG;gBAED,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,EAAE,MAAoB,EAAE,GAAE;QAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;KAAO;IAMvE;;;;;;OAMG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACH,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IAmBjB;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -8,23 +8,32 @@
8
8
  * properties: concurrent callers share one round-trip, a rejection is not
9
9
  * cached (so the next call retries rather than replaying a stale failure), and
10
10
  * a reset drops whatever is held. Written once here so the three cannot drift
11
- * apart, which they had.
11
+ * apart, which they had. A user whose input cannot change under it may name
12
+ * the rejections it wants kept, so a permanent failure is raised once and then
13
+ * replayed instead of re-attempted.
12
14
  */
13
15
  /**
14
16
  * A memo of one lazily-resolved value. Holds the in-flight promise so
15
17
  * concurrent callers share a single resolution, drops it on rejection so a
16
- * transient failure does not permanently poison the memo, and exposes
17
- * {@link Memo.reset} for when the underlying answer is known to have changed.
18
+ * transient failure does not permanently poison the memo (unless `retain`
19
+ * claims that rejection), and exposes {@link Memo.reset} for when the
20
+ * underlying answer is known to have changed.
18
21
  */
19
22
  export class Memo {
20
23
  #promise;
21
24
  #resolve;
25
+ #retain;
22
26
  /**
23
27
  * @param resolve {function} resolves a fresh value; re-invoked after a
24
28
  * rejection or a `reset()`, else called at most once
29
+ * @param [options] {object}
30
+ * @param [options.retain] {function} given a rejection's reason, whether
31
+ * to keep that rejection memoized (a failure a retry cannot change);
32
+ * default: keep none
25
33
  */
26
- constructor(resolve) {
34
+ constructor(resolve, { retain = () => false } = {}) {
27
35
  this.#resolve = resolve;
36
+ this.#retain = retain;
28
37
  }
29
38
  /**
30
39
  * Whether a resolution is already held -- in flight or settled. Lets a caller
@@ -48,10 +57,12 @@ export class Memo {
48
57
  const promise = this.#resolve();
49
58
  // Memoize the in-flight promise so concurrent callers share one round-trip,
50
59
  // but drop it on rejection so a transient failure does not permanently
51
- // poison the memo. The identity guard avoids clobbering a newer promise.
60
+ // poison the memo. A rejection `retain` claims stays, so the next `get()`
61
+ // replays it rather than paying for an attempt that can only fail the same
62
+ // way. The identity guard avoids clobbering a newer promise.
52
63
  this.#promise = promise;
53
- promise.catch(() => {
54
- if (this.#promise === promise) {
64
+ promise.catch((err) => {
65
+ if (this.#promise === promise && !this.#retain(err)) {
55
66
  this.#promise = undefined;
56
67
  }
57
68
  });
@@ -1 +1 @@
1
- {"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/internal/memo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,MAAM,OAAO,IAAI;IACf,QAAQ,CAAa;IACZ,QAAQ,CAAkB;IAEnC;;;OAGG;IACH,YAAY,OAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED;;;;;;OAMG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACH,GAAG;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAA;QACtB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC/B,4EAA4E;QAC5E,uEAAuE;QACvE,yEAAyE;QACzE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,OAAO,CAAC,KAAK,CAAC,GAAS,EAAE;YACvB,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC3B,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/internal/memo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AACH,MAAM,OAAO,IAAI;IACf,QAAQ,CAAa;IACZ,QAAQ,CAAkB;IAC1B,OAAO,CAA2B;IAE3C;;;;;;;OAOG;IACH,YACE,OAAyB,EACzB,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,KAA6C,EAAE;QAErE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED;;;;;;OAMG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACH,GAAG;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAA;QACtB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC/B,4EAA4E;QAC5E,uEAAuE;QACvE,0EAA0E;QAC1E,2EAA2E;QAC3E,6DAA6D;QAC7D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,OAAO,CAAC,KAAK,CAAC,CAAC,GAAY,EAAQ,EAAE;YACnC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC3B,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;IAC3B,CAAC;CACF"}
@@ -9,7 +9,7 @@ import type { IZcap, ResourceMetadataCustom, ResourceMetadataCustomInput } from
9
9
  *
10
10
  * @param context {ClientContext}
11
11
  * @param options {object}
12
- * @param options.metaPath {string} the `/meta` sub-resource path
12
+ * @param options.metaUrl {string} the `/meta` sub-resource URL
13
13
  * @param options.codec {Promise<ResourceCodec>} the resolving codec, awaited
14
14
  * concurrently with the read
15
15
  * @param options.subject {string} the metadata's owner as it reads in the
@@ -27,8 +27,8 @@ import type { IZcap, ResourceMetadataCustom, ResourceMetadataCustomInput } from
27
27
  */
28
28
  export declare function readMeta<Metadata extends {
29
29
  custom?: ResourceMetadataCustom;
30
- }>(context: ClientContext, { metaPath, codec: codecPromise, subject, slot, capability, onStored }: {
31
- metaPath: string;
30
+ }>(context: ClientContext, { metaUrl, codec: codecPromise, subject, slot, capability, onStored }: {
31
+ metaUrl: string;
32
32
  codec: Promise<ResourceCodec>;
33
33
  subject: string;
34
34
  slot: MetaReadSlot;
@@ -50,7 +50,7 @@ export declare function readMeta<Metadata extends {
50
50
  *
51
51
  * @param context {ClientContext}
52
52
  * @param options {object}
53
- * @param options.metaPath {string} the `meta` sub-resource path
53
+ * @param options.metaUrl {string} the `meta` sub-resource URL
54
54
  * @param options.codec {Promise<ResourceCodec>} the resolving codec
55
55
  * @param options.custom {ResourceMetadataCustomInput} the user-writable
56
56
  * properties, as a full replacement
@@ -61,8 +61,8 @@ export declare function readMeta<Metadata extends {
61
61
  * @param [options.capability] {IZcap}
62
62
  * @returns {Promise<{ etag?: string }>} the metadata's new ETag
63
63
  */
64
- export declare function writeMeta(context: ClientContext, { metaPath, codec: codecPromise, custom, slot, ifMatch, ifNoneMatch, capability }: {
65
- metaPath: string;
64
+ export declare function writeMeta(context: ClientContext, { metaUrl, codec: codecPromise, custom, slot, ifMatch, ifNoneMatch, capability }: {
65
+ metaUrl: string;
66
66
  codec: Promise<ResourceCodec>;
67
67
  custom: ResourceMetadataCustomInput;
68
68
  slot: MetaWriteSlot;
@@ -136,13 +136,13 @@ export declare function patchCustom(handle: {
136
136
  *
137
137
  * @param context {ClientContext}
138
138
  * @param options {object}
139
- * @param options.spaceId {string}
139
+ * @param options.spaceUrl {string}
140
140
  * @param options.collectionId {string}
141
141
  * @param [options.capability] {IZcap} capability attached to the request
142
142
  * @returns {Promise<{ metadata: StoredCollectionMetadata; etag?: string } | null>}
143
143
  */
144
144
  export declare function readCollectionMetadata(context: ClientContext, options: {
145
- spaceId: string;
145
+ spaceUrl: string;
146
146
  collectionId: string;
147
147
  capability?: IZcap;
148
148
  }): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"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"}
@@ -17,13 +17,13 @@
17
17
  * left as stored, because the codec that would decode it is itself resolved
18
18
  * from the same object's `encryption` member. It lives here rather than beside
19
19
  * the Collection Metadata helpers in `describe.ts` so those stay free of the
20
- * transport layer; the request shape (path, capability, null-unwrap,
20
+ * transport layer; the request shape (URL, capability, null-unwrap,
21
21
  * validator) is still stated in one place, shared by `Collection`'s read and
22
22
  * write paths and by the codec resolver's descriptor discovery.
23
23
  */
24
24
  import { NotFoundError, WasServerError } from '../errors.js';
25
25
  import { compareAndSwap } from './cas.js';
26
- import { collectionMeta } from './paths.js';
26
+ import { collectionMetaUrl } from './paths.js';
27
27
  import { readDataWithEtag, send } from './request.js';
28
28
  import { readEtag, writeHeaders } from './conditional.js';
29
29
  import { withCodec } from './withCodec.js';
@@ -34,7 +34,7 @@ import { withCodec } from './withCodec.js';
34
34
  *
35
35
  * @param context {ClientContext}
36
36
  * @param options {object}
37
- * @param options.metaPath {string} the `/meta` sub-resource path
37
+ * @param options.metaUrl {string} the `/meta` sub-resource URL
38
38
  * @param options.codec {Promise<ResourceCodec>} the resolving codec, awaited
39
39
  * concurrently with the read
40
40
  * @param options.subject {string} the metadata's owner as it reads in the
@@ -50,11 +50,11 @@ import { withCodec } from './withCodec.js';
50
50
  * decode fails: a read that throws is no baseline
51
51
  * @returns {Promise<(Metadata & { etag?: string }) | null>}
52
52
  */
53
- export async function readMeta(context, { metaPath, codec: codecPromise, subject, slot, capability, onStored }) {
53
+ export async function readMeta(context, { metaUrl, codec: codecPromise, subject, slot, capability, onStored }) {
54
54
  // The metadata GET does not depend on the codec (only its `custom` decode
55
55
  // below does), so the two overlap.
56
56
  const [codec, response] = await withCodec(codecPromise, send(context, {
57
- path: metaPath,
57
+ url: metaUrl,
58
58
  method: 'GET',
59
59
  capability,
60
60
  read: true
@@ -100,7 +100,7 @@ export async function readMeta(context, { metaPath, codec: codecPromise, subject
100
100
  *
101
101
  * @param context {ClientContext}
102
102
  * @param options {object}
103
- * @param options.metaPath {string} the `meta` sub-resource path
103
+ * @param options.metaUrl {string} the `meta` sub-resource URL
104
104
  * @param options.codec {Promise<ResourceCodec>} the resolving codec
105
105
  * @param options.custom {ResourceMetadataCustomInput} the user-writable
106
106
  * properties, as a full replacement
@@ -111,11 +111,11 @@ export async function readMeta(context, { metaPath, codec: codecPromise, subject
111
111
  * @param [options.capability] {IZcap}
112
112
  * @returns {Promise<{ etag?: string }>} the metadata's new ETag
113
113
  */
114
- export async function writeMeta(context, { metaPath, codec: codecPromise, custom, slot, ifMatch, ifNoneMatch, capability }) {
114
+ export async function writeMeta(context, { metaUrl, codec: codecPromise, custom, slot, ifMatch, ifNoneMatch, capability }) {
115
115
  const codec = await codecPromise;
116
116
  const { custom: encoded } = await codec.encodeMeta({ custom, slot });
117
117
  const response = await send(context, {
118
- path: metaPath,
118
+ url: metaUrl,
119
119
  method: 'PUT',
120
120
  capability,
121
121
  json: { custom: encoded },
@@ -205,14 +205,17 @@ export async function patchCustom(handle, patch, { operation = 'Metadata update'
205
205
  *
206
206
  * @param context {ClientContext}
207
207
  * @param options {object}
208
- * @param options.spaceId {string}
208
+ * @param options.spaceUrl {string}
209
209
  * @param options.collectionId {string}
210
210
  * @param [options.capability] {IZcap} capability attached to the request
211
211
  * @returns {Promise<{ metadata: StoredCollectionMetadata; etag?: string } | null>}
212
212
  */
213
213
  export async function readCollectionMetadata(context, options) {
214
214
  const read = await readDataWithEtag(context, {
215
- path: collectionMeta(options.spaceId, options.collectionId),
215
+ url: collectionMetaUrl({
216
+ spaceUrl: options.spaceUrl,
217
+ collectionId: options.collectionId
218
+ }),
216
219
  capability: options.capability
217
220
  });
218
221
  if (read === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,8 @@
19
19
  * The helpers are generic over the listing envelope, so they serve all three
20
20
  * paginated WAS listings: List Collection items (`CollectionResourcesList`),
21
21
  * List Collections (`CollectionsList`), and List Spaces (`SpaceListing`). Each
22
- * envelope shares the `{ items, next? }` shape the traversal relies on.
22
+ * envelope shares the `{ items, next?, totalItems? }` shape (`PageEnvelope`)
23
+ * that the traversal and the aggregation rely on.
23
24
  */
24
25
  import type { CollectionResourcesList, IZcap, ResourceSummary } from '../types.js';
25
26
  import type { ClientContext } from './request.js';
@@ -30,18 +31,22 @@ import type { ClientContext } from './request.js';
30
31
  */
31
32
  export declare const DEFAULT_MAX_PAGES = 10000;
32
33
  /**
33
- * The shared shape of every paginated listing envelope: an `items` array and an
34
- * optional `next` continuation URL. The traversal core only ever touches these
35
- * two fields, so it works uniformly across the concrete listing types.
34
+ * The shared shape of every paginated listing envelope: an `items` array, an
35
+ * optional `next` continuation URL, and the whole listing's `totalItems` count
36
+ * (required on some listing types upstream, optional on others). The traversal
37
+ * core only touches `items` and `next`; `collectPages` also sets `totalItems`.
36
38
  */
37
39
  type PageEnvelope = {
38
40
  items: unknown[];
39
41
  next?: string;
42
+ totalItems?: number;
40
43
  };
41
44
  /**
42
45
  * The first page (already read) plus the means to fetch each following page.
43
46
  * The `fetchPage` callback fetches a single page by absolute URL, returning
44
- * `null` if it is missing/unauthorized (which ends the traversal).
47
+ * `null` if it is missing/unauthorized. A `null` first page makes the walk
48
+ * itself `null`; a `null` page mid-walk fails the walk, since a `next` the
49
+ * server handed out has to resolve.
45
50
  */
46
51
  export interface PageWalk<T extends PageEnvelope = CollectionResourcesList> {
47
52
  first: T;
@@ -85,33 +90,43 @@ export declare function signedPageWalk<T extends PageEnvelope = CollectionResour
85
90
  /**
86
91
  * Lazily walks a list response page by page, yielding the first page and then
87
92
  * each page reached by following `next`. Each `next` is resolved relative to the
88
- * URL of the page that produced it, and a self-referential or already-seen
89
- * `next` ends the traversal defensively rather than looping forever. Yields one
90
- * page at a time, so a consumer can stop early without fetching the rest.
93
+ * URL of the page that produced it. Yields one page at a time, so a consumer
94
+ * can stop early without fetching the rest.
91
95
  *
92
- * A `next` outside the first page's origin or base path, a `next` carrying a
93
- * username or password, or a walk that would
94
- * exceed `maxPages` pages, fails with a `WasServerError` naming the listing URL
95
- * instead of fetching.
96
+ * The walk either reaches the server's end-of-list signal (a page with no
97
+ * `next`) or fails. A `next` outside the first page's origin or base path, a
98
+ * `next` carrying a username or password, a `next` pointing at an already-seen
99
+ * page (a cycle), a page that walks past `maxPages`, or a followed page that
100
+ * comes back `null` (missing/unauthorized) each fail with a `WasServerError`
101
+ * naming the listing URL. Ending silently on any of these would hand the
102
+ * consumer a short listing it cannot tell from a complete one.
96
103
  *
97
104
  * @param walk {PageWalk<T>}
98
105
  * @param [options] {object}
99
106
  * @param [options.maxPages] {number} the most pages to yield, counting the
100
107
  * first (defaults to {@link DEFAULT_MAX_PAGES})
101
108
  * @returns {AsyncGenerator<T>}
102
- * @throws {WasServerError} when `next` leaves the listing or the bound is hit
109
+ * @throws {WasServerError} when `next` leaves the listing, repeats a page, or
110
+ * fails to resolve, or when the page bound is hit
103
111
  */
104
112
  export declare function walkPages<T extends PageEnvelope = CollectionResourcesList>(walk: PageWalk<T>, { maxPages }?: {
105
113
  maxPages?: number;
106
114
  }): AsyncGenerator<T>;
107
115
  /**
108
116
  * Eagerly follows every `next` link, aggregating all pages' items into a single
109
- * envelope shaped like the first page (with `next` dropped, since the whole list
110
- * has been collected). Buffers the entire collection in memory; for a large
117
+ * envelope shaped like the first page, with `next` dropped since the whole list
118
+ * has been collected. Buffers the entire collection in memory; for a large
111
119
  * collection prefer `walkPages` (one page at a time) or an item iterator.
112
120
  *
121
+ * `totalItems` on the aggregate is always the count of the collected items.
122
+ * The server's value is not used, since a paginating server may omit it on a
123
+ * truncated page and the first page's value may be stale by the time the last
124
+ * page is read. The count is sound because `walkPages` either completes the
125
+ * listing or throws.
126
+ *
113
127
  * @param walk {PageWalk<T>}
114
128
  * @returns {Promise<T>}
129
+ * @throws {WasServerError} when the walk cannot complete the listing
115
130
  */
116
131
  export declare function collectPages<T extends PageEnvelope = CollectionResourcesList>(walk: PageWalk<T>): Promise<T>;
117
132
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/internal/pagination.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EACV,uBAAuB,EACvB,KAAK,EACL,eAAe,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAS,CAAA;AAEvC;;;;GAIG;AACH,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD;;;;GAIG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,uBAAuB;IACxE,KAAK,EAAE,CAAC,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,EACA,QAAQ,EACR,SAAS,EACV,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;CACpC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAG9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAEhD,OAAO,EAAE,aAAa,EACtB,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACjE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAQ7B;AA8DD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAuB,SAAS,CAC9B,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAEhD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,EAAE,QAA4B,EAAE,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,cAAc,CAAC,CAAC,CAAC,CAmCnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAe/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAE7C;AAED;;;;;;;;GAQG;AACH,wBAAuB,gBAAgB,CACrC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAI7C;AAED;;;;;;;GAOG;AACH,wBAAuB,SAAS,CAC9B,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAC5C,cAAc,CAAC,eAAe,CAAC,CAIjC"}
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/internal/pagination.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EACV,uBAAuB,EACvB,KAAK,EACL,eAAe,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAS,CAAA;AAEvC;;;;;GAKG;AACH,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5E;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,uBAAuB;IACxE,KAAK,EAAE,CAAC,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,EACA,QAAQ,EACR,SAAS,EACV,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;CACpC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAG9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAEhD,OAAO,EAAE,aAAa,EACtB,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACjE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAQ7B;AA8DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAuB,SAAS,CAC9B,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAEhD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,EAAE,QAA4B,EAAE,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,cAAc,CAAC,CAAC,CAAC,CA6CnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAChC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAe/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAE7C;AAED;;;;;;;;GAQG;AACH,wBAAuB,gBAAgB,CACrC,CAAC,SAAS,YAAY,GAAG,uBAAuB,EAChD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAI7C;AAED;;;;;;;GAOG;AACH,wBAAuB,SAAS,CAC9B,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAC5C,cAAc,CAAC,eAAe,CAAC,CAIjC"}
@@ -90,21 +90,24 @@ function resolveNext({ next, baseUrl, firstUrl }) {
90
90
  /**
91
91
  * Lazily walks a list response page by page, yielding the first page and then
92
92
  * each page reached by following `next`. Each `next` is resolved relative to the
93
- * URL of the page that produced it, and a self-referential or already-seen
94
- * `next` ends the traversal defensively rather than looping forever. Yields one
95
- * page at a time, so a consumer can stop early without fetching the rest.
93
+ * URL of the page that produced it. Yields one page at a time, so a consumer
94
+ * can stop early without fetching the rest.
96
95
  *
97
- * A `next` outside the first page's origin or base path, a `next` carrying a
98
- * username or password, or a walk that would
99
- * exceed `maxPages` pages, fails with a `WasServerError` naming the listing URL
100
- * instead of fetching.
96
+ * The walk either reaches the server's end-of-list signal (a page with no
97
+ * `next`) or fails. A `next` outside the first page's origin or base path, a
98
+ * `next` carrying a username or password, a `next` pointing at an already-seen
99
+ * page (a cycle), a page that walks past `maxPages`, or a followed page that
100
+ * comes back `null` (missing/unauthorized) each fail with a `WasServerError`
101
+ * naming the listing URL. Ending silently on any of these would hand the
102
+ * consumer a short listing it cannot tell from a complete one.
101
103
  *
102
104
  * @param walk {PageWalk<T>}
103
105
  * @param [options] {object}
104
106
  * @param [options.maxPages] {number} the most pages to yield, counting the
105
107
  * first (defaults to {@link DEFAULT_MAX_PAGES})
106
108
  * @returns {AsyncGenerator<T>}
107
- * @throws {WasServerError} when `next` leaves the listing or the bound is hit
109
+ * @throws {WasServerError} when `next` leaves the listing, repeats a page, or
110
+ * fails to resolve, or when the page bound is hit
108
111
  */
109
112
  export async function* walkPages(walk, { maxPages = DEFAULT_MAX_PAGES } = {}) {
110
113
  const { first, fetchPage } = walk;
@@ -114,24 +117,28 @@ export async function* walkPages(walk, { maxPages = DEFAULT_MAX_PAGES } = {}) {
114
117
  // an explicit default port) would let a next-link back to page 1 defeat the
115
118
  // guard and yield its items twice.
116
119
  const firstUrl = new URL(walk.firstUrl);
120
+ const listingUrl = firstUrl.toString();
117
121
  yield first;
118
- const seen = new Set([firstUrl.toString()]);
122
+ const seen = new Set([listingUrl]);
119
123
  let pageCount = 1;
120
- let baseUrl = firstUrl.toString();
124
+ let baseUrl = listingUrl;
121
125
  let next = first.next;
122
126
  while (next) {
123
127
  const pageUrl = resolveNext({ next, baseUrl, firstUrl });
124
128
  if (seen.has(pageUrl)) {
125
- break;
129
+ throw new WasServerError(`The listing at "${listingUrl}" served a \`next\` link ` +
130
+ `("${pageUrl}") back to a page already walked.`, { requestUrl: listingUrl });
126
131
  }
127
132
  if (pageCount >= maxPages) {
128
- throw new WasServerError(`The listing at "${firstUrl.toString()}" did not end within ` +
129
- `${maxPages} pages.`, { requestUrl: firstUrl.toString() });
133
+ throw new WasServerError(`The listing at "${listingUrl}" did not end within ` +
134
+ `${maxPages} pages.`, { requestUrl: listingUrl });
130
135
  }
131
136
  seen.add(pageUrl);
132
137
  const page = await fetchPage(pageUrl);
133
138
  if (page === null) {
134
- break;
139
+ throw new WasServerError(`The listing at "${listingUrl}" served a \`next\` link ` +
140
+ `("${pageUrl}") that answered with no listing (missing or ` +
141
+ 'unauthorized).', { requestUrl: pageUrl });
135
142
  }
136
143
  pageCount += 1;
137
144
  yield page;
@@ -141,12 +148,19 @@ export async function* walkPages(walk, { maxPages = DEFAULT_MAX_PAGES } = {}) {
141
148
  }
142
149
  /**
143
150
  * Eagerly follows every `next` link, aggregating all pages' items into a single
144
- * envelope shaped like the first page (with `next` dropped, since the whole list
145
- * has been collected). Buffers the entire collection in memory; for a large
151
+ * envelope shaped like the first page, with `next` dropped since the whole list
152
+ * has been collected. Buffers the entire collection in memory; for a large
146
153
  * collection prefer `walkPages` (one page at a time) or an item iterator.
147
154
  *
155
+ * `totalItems` on the aggregate is always the count of the collected items.
156
+ * The server's value is not used, since a paginating server may omit it on a
157
+ * truncated page and the first page's value may be stale by the time the last
158
+ * page is read. The count is sound because `walkPages` either completes the
159
+ * listing or throws.
160
+ *
148
161
  * @param walk {PageWalk<T>}
149
162
  * @returns {Promise<T>}
163
+ * @throws {WasServerError} when the walk cannot complete the listing
150
164
  */
151
165
  export async function collectPages(walk) {
152
166
  let aggregate;
@@ -160,7 +174,7 @@ export async function collectPages(walk) {
160
174
  }
161
175
  }
162
176
  // `walkPages` always yields `first`, so `aggregate` is set here.
163
- const result = { ...aggregate, items };
177
+ const result = { ...aggregate, items, totalItems: items.length };
164
178
  delete result.next;
165
179
  return result;
166
180
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/internal/pagination.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/internal/pagination.ts"],"names":[],"mappings":"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"}