@interop/was-client 0.20.0 → 0.22.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.
@@ -41,6 +41,22 @@ export declare class Resource {
41
41
  * @returns {Promise<Json | Blob | null>}
42
42
  */
43
43
  get(): Promise<Json | Blob | null>;
44
+ /**
45
+ * Reads the resource together with its `ETag` validator (the backend's
46
+ * `conditional-writes` feature) -- the Resource counterpart of
47
+ * `Collection.describeWithEtag`. The `ETag` is the opaque validator to pass
48
+ * to {@link put}'s `ifMatch` for a lost-update-safe (compare-and-swap)
49
+ * write. The value is decoded like {@link get} (JSON parsed, binary as a
50
+ * `Blob`, decrypted on an encrypted collection). Returns `null` if the
51
+ * resource is missing or not visible to you (404 conflation caveat); `etag`
52
+ * is absent against a backend that does not version resources.
53
+ *
54
+ * @returns {Promise<{ data: Json | Blob; etag?: string } | null>}
55
+ */
56
+ getWithEtag(): Promise<{
57
+ data: Json | Blob;
58
+ etag?: string;
59
+ } | null>;
44
60
  /**
45
61
  * Reads the resource body as text. Returns `null` on a missing/unauthorized
46
62
  * resource (404 conflation caveat). A raw escape hatch: it does NOT run the
@@ -1 +1 @@
1
- {"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAc1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EACV,kBAAkB,EAClB,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAkBnB,qBAAa,QAAQ;;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IA8BnB;;;;;;;;;;;;;;;;OAgBG;gBACS,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,KAAK,EACL,QAAQ,EACR,UAAU,EACX,EAAE;QACD,OAAO,EAAE,aAAa,CAAA;QACtB,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,KAAK,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;QACpC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAClC,UAAU,CAAC,EAAE,kBAAkB,CAAA;KAChC;IA0DD;;;;;;OAMG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAMxC;;;;;;;;;;;;;OAaG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASvC;;;;;;;;;;;;;OAaG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAW5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,GAAG,CACP,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,WAAW,CAAC,EAAE,OAAO,CAAA;KACjB,GACL,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAkB7B;;;;;;;;OAQG;IACG,MAAM,CAAC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/D;;;;;;;;;;;;;;;;OAgBG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,gBAAgB,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAkCpE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,OAAO,CACX,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,sBAAsB,CAAA;KAAO,EAC9C,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GACxD,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAyC7B;;;;;;;;;;OAUG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAOjD;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAOlC;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAMnC"}
1
+ {"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"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"}
package/dist/Resource.js CHANGED
@@ -140,6 +140,28 @@ export class Resource {
140
140
  const response = await this.#read();
141
141
  return response === null ? null : codec.decode(response, this.id);
142
142
  }
143
+ /**
144
+ * Reads the resource together with its `ETag` validator (the backend's
145
+ * `conditional-writes` feature) -- the Resource counterpart of
146
+ * `Collection.describeWithEtag`. The `ETag` is the opaque validator to pass
147
+ * to {@link put}'s `ifMatch` for a lost-update-safe (compare-and-swap)
148
+ * write. The value is decoded like {@link get} (JSON parsed, binary as a
149
+ * `Blob`, decrypted on an encrypted collection). Returns `null` if the
150
+ * resource is missing or not visible to you (404 conflation caveat); `etag`
151
+ * is absent against a backend that does not version resources.
152
+ *
153
+ * @returns {Promise<{ data: Json | Blob; etag?: string } | null>}
154
+ */
155
+ async getWithEtag() {
156
+ const codec = await this.#codec();
157
+ const response = await this.#read();
158
+ if (response === null) {
159
+ return null;
160
+ }
161
+ const data = await codec.decode(response, this.id);
162
+ const etag = readEtag(response);
163
+ return etag !== undefined ? { data, etag } : { data };
164
+ }
143
165
  /**
144
166
  * Reads the resource body as text. Returns `null` on a missing/unauthorized
145
167
  * resource (404 conflation caveat). A raw escape hatch: it does NOT run the
@@ -1 +1 @@
1
- {"version":3,"file":"Resource.js","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Resource.js","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAA;AAY7B;;;;;;;;;;;GAWG;AACH,SAAS,aAAa,CAAC,QAAsB;IAC3C,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAChF,CAAC;AAED,MAAM,OAAO,QAAQ;IACV,OAAO,CAAQ;IACf,YAAY,CAAQ;IACpB,EAAE,CAAQ;IAEV,QAAQ,CAAe;IACvB,WAAW,CAAQ;IAC5B;;;;;;;;;;;;;;;;OAgBG;IACM,MAAM,CAA8B;IAC7C;;;;;OAKG;IACM,SAAS,CAAyB;IAE3C;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,KAAK,EACL,QAAQ,EACR,UAAU,EAUX;QACC,yEAAyE;QACzE,+DAA+D;QAC/D,8EAA8E;QAC9E,+EAA+E;QAC/E,uEAAuE;QACvE,6EAA6E;QAC7E,4EAA4E;QAC5E,mBAAmB;QACnB,iBAAiB,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,EAAE,GAAG,UAAU,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAC7B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE;gBAC5C,OAAO;gBACP,YAAY;gBACZ,QAAQ,EAAE,UAAU;gBACpB,UAAU;aACX,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;QAClC,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,EAAE;gBAC/C,OAAO;gBACP,YAAY;gBACZ,UAAU;aACX,CAAC,CAAA;YACF,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;QACpC,CAAC;IACH,CAAC;IAED,IAAI,KAAK;QACP,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACnC,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IACnE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACnC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC/B,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;IACvD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACnC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;QACpC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IACpD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACnC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;QACpC,OAAO,IAAI,KAAK,SAAS;YACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IAClD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,GAAG,CACP,IAAkB,EAClB,UAII,EAAE;QAEN,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnD,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,YAAY,EAAE;gBACZ,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC;SACF,CAAC,CAAA;QACF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;IACrC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CAAC,UAAgC,EAAE;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,0EAA0E;YAC1E,oEAAoE;YACpE,UAAU,EAAE,OAAO,CAAC,OAAO,KAAK,SAAS;YACzC,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACtE,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,SAAS;QACX,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;QACF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,yEAAyE;YACzE,uEAAuE;YACvE,yEAAyE;YACzE,+DAA+D;YAC/D,wEAAwE;YACxE,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,IAAI,cAAc,CACtB,0BAA0B,IAAI,CAAC,EAAE,yBAAyB;gBACxD,gBAAgB;gBAChB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,KAAK,CAC7D,CAAA;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAwB,CAAA;QAClD,mEAAmE;QACnE,mEAAmE;QACnE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAA;QACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC/B,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,KAAK,CAAC,OAAO,CACX,OAA4C,EAAE,EAC9C,UAAuD,EAAE;QAEzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACjC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,OAAO,EAAE,YAAY,CAAC;gBACpB,YAAY,EAAE;oBACZ,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;iBACjC;aACF,CAAC;SACH,CAAC,CAAA;QACF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;IACrC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,YAAY,CAAC,KAA6B;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,IAAI,CAAC,OAAO,CAChB,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,EAC5C,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAC3B,CAAA;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACpC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,IAA4B;QACxC,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IACjE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC/B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,MAAsB;QACpC,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE;YACpC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -20,13 +20,19 @@
20
20
  * `addRecipient` / `removeRecipient` manage the readers and rotate the epoch
21
21
  * key, so the same `createEdvEncryption` provider transparently encrypts each
22
22
  * write under the current epoch and decrypts any epoch a reader still holds.
23
+ * They mutate the marker through the marker-store seam: the Collection
24
+ * Description by default, or any `MarkerStore` -- e.g. `resourceMarkerStore`
25
+ * for a marker hosted as a plain JSON Resource.
23
26
  */
24
27
  export { createEdvEncryption, EdvCodec } from './EdvCodec.js';
25
28
  export type { EdvKeys } from './EdvCodec.js';
26
29
  export { WasTransport, JOSE_CONTENT_TYPE } from './WasTransport.js';
27
30
  export { initRecipients, addRecipient, removeRecipient } from './recipients.js';
28
31
  export type { OwnerKey, RecipientPublicKey } from './recipients.js';
29
- export { mintEpoch, epochKeyIdFor } from './epochCrypto.js';
32
+ export { collectionMarkerStore, resourceMarkerStore } from './markerStore.js';
33
+ export type { MarkerStore } from './markerStore.js';
34
+ export { mintEpoch, epochKeyIdFor, unwrapEpochSecret } from './epochCrypto.js';
35
+ export { verifyEpochsMac } from './epochMac.js';
30
36
  export { createEdvDocCipher, ownerRecipient, UnknownEpochError, isEncryptedEnvelope } from './docCipher.js';
31
37
  export type { DocCipher } from './docCipher.js';
32
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/edv/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7D,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC/E,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/edv/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7D,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC/E,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/edv/index.js CHANGED
@@ -20,10 +20,15 @@
20
20
  * `addRecipient` / `removeRecipient` manage the readers and rotate the epoch
21
21
  * key, so the same `createEdvEncryption` provider transparently encrypts each
22
22
  * write under the current epoch and decrypts any epoch a reader still holds.
23
+ * They mutate the marker through the marker-store seam: the Collection
24
+ * Description by default, or any `MarkerStore` -- e.g. `resourceMarkerStore`
25
+ * for a marker hosted as a plain JSON Resource.
23
26
  */
24
27
  export { createEdvEncryption, EdvCodec } from './EdvCodec.js';
25
28
  export { WasTransport, JOSE_CONTENT_TYPE } from './WasTransport.js';
26
29
  export { initRecipients, addRecipient, removeRecipient } from './recipients.js';
27
- export { mintEpoch, epochKeyIdFor } from './epochCrypto.js';
30
+ export { collectionMarkerStore, resourceMarkerStore } from './markerStore.js';
31
+ export { mintEpoch, epochKeyIdFor, unwrapEpochSecret } from './epochCrypto.js';
32
+ export { verifyEpochsMac } from './epochMac.js';
28
33
  export { createEdvDocCipher, ownerRecipient, UnknownEpochError, isEncryptedEnvelope } from './docCipher.js';
29
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/edv/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/edv/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE7E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,118 @@
1
+ /*!
2
+ * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
+ */
4
+ /**
5
+ * The marker-store seam: where a `CollectionEncryption` marker lives and how it
6
+ * is compare-and-swapped. The recipient primitives (`initRecipients` /
7
+ * `addRecipient` / `removeRecipient`) mutate a marker only through this port,
8
+ * so the same key-epoch machinery manages a Collection's own `encryption`
9
+ * marker (the classic host) or a marker hosted as a plain JSON Resource (e.g. a
10
+ * per-user-key roster in a private collection).
11
+ *
12
+ * Two adapters:
13
+ *
14
+ * - {@link collectionMarkerStore} -- the Collection Description's `encryption`
15
+ * member, read with `describeWithEtag` and written back with
16
+ * `replaceDescription` + `If-Match`. The server enforces the marker
17
+ * invariants (append-only epochs, monotone `currentEpoch`, non-decreasing
18
+ * `version`) on this path.
19
+ * - {@link resourceMarkerStore} -- a marker stored verbatim as a JSON Resource.
20
+ * The server treats the resource as opaque content and enforces NO marker
21
+ * invariants there; integrity rests on the client-side `epochsMac` (verified
22
+ * by writers before encrypting) plus client-side epoch pinning. Both the
23
+ * compare-and-swap and the create-if-absent guard ride the backend's
24
+ * `conditional-writes` feature. The hosting collection must be plaintext: on
25
+ * an encrypted collection the EDV codec computes the write preconditions
26
+ * itself and the store's `ifMatch` would not be honored.
27
+ */
28
+ import type { Collection } from '../Collection.js';
29
+ import type { Resource } from '../Resource.js';
30
+ import type { CollectionEncryption } from '../types.js';
31
+ /**
32
+ * Where a `CollectionEncryption` marker lives: a read-with-validator plus a
33
+ * compare-and-swap write, the two operations the recipient primitives' CAS
34
+ * loop needs. Implementations host the marker anywhere a versioned JSON value
35
+ * can live; the two shipped adapters are {@link collectionMarkerStore} and
36
+ * {@link resourceMarkerStore}.
37
+ */
38
+ export interface MarkerStore {
39
+ /**
40
+ * Reads the current marker together with the opaque `etag` validator the
41
+ * next {@link replace} must be compare-and-swapped against. Resolves `null`
42
+ * when no marker exists yet AND this store can create one (the resource
43
+ * adapter before the first `initRecipients`); a store whose host must
44
+ * already exist (the description adapter) throws instead of resolving
45
+ * `null`. Throws when the hosted value is not an `edv`-scheme marker.
46
+ *
47
+ * @returns {Promise<{ marker: CollectionEncryption; etag?: string } | null>}
48
+ */
49
+ read(): Promise<{
50
+ marker: CollectionEncryption;
51
+ etag?: string;
52
+ } | null>;
53
+ /**
54
+ * Replaces the marker, compare-and-swapped against `ifMatch` (the validator
55
+ * from {@link read}); a stale validator throws `PreconditionFailedError`
56
+ * (412). Must follow a {@link read} on the same store instance -- an adapter
57
+ * may forward sibling state observed by its most recent read (the
58
+ * description adapter forwards the description's `name` / `backend`).
59
+ *
60
+ * @param marker {CollectionEncryption}
61
+ * @param options {object}
62
+ * @param [options.ifMatch] {string} the validator from the prior read;
63
+ * absent against a host that does not version its writes
64
+ * @returns {Promise<void>}
65
+ */
66
+ replace(marker: CollectionEncryption, options: {
67
+ ifMatch?: string;
68
+ }): Promise<void>;
69
+ /**
70
+ * Creates the FIRST marker where {@link read} resolved `null`, guarded
71
+ * create-if-absent (`If-None-Match: *`); throws `PreconditionFailedError`
72
+ * (412) when a concurrent writer created one first. Absent on stores whose
73
+ * host always exists (the description adapter).
74
+ *
75
+ * @param marker {CollectionEncryption}
76
+ * @returns {Promise<void>}
77
+ */
78
+ create?(marker: CollectionEncryption): Promise<void>;
79
+ }
80
+ /**
81
+ * The Collection Description adapter: the marker is the Description's
82
+ * `encryption` member. Read fails closed when the Description is unreadable
83
+ * (WAS masks unauthorized reads as 404) or the collection is not declared
84
+ * encrypted with the `edv` scheme; the CAS write forwards the description's
85
+ * sibling fields (`name` / `backend`) observed by the most recent read, so
86
+ * the replace-semantics PUT does not drop them. No `create`: a Collection
87
+ * Description always exists, so a first marker is declared via
88
+ * `collection.configure({ encryption })`, never through this store.
89
+ *
90
+ * @param options {object}
91
+ * @param options.collection {Collection}
92
+ * @returns {MarkerStore}
93
+ */
94
+ export declare function collectionMarkerStore({ collection }: {
95
+ collection: Collection;
96
+ }): MarkerStore;
97
+ /**
98
+ * The plain-JSON-Resource adapter: the marker is the resource's entire
99
+ * content, stored verbatim. Read resolves `null` when the resource is absent
100
+ * (the pre-`initRecipients` state -- `create` then writes the first marker
101
+ * with `If-None-Match: *`), and throws when the resource holds something other
102
+ * than an `edv`-scheme marker object.
103
+ *
104
+ * The server enforces no marker invariants on a resource (unlike a Collection
105
+ * Description): rollback/tamper detection rests on the marker's `epochsMac`
106
+ * and client-side epoch pinning, and the CAS/create guards ride the backend's
107
+ * `conditional-writes` feature. Host the resource in a plaintext collection --
108
+ * on an encrypted collection the EDV codec computes the write preconditions
109
+ * itself, so this store's `ifMatch` would not be honored.
110
+ *
111
+ * @param options {object}
112
+ * @param options.resource {Resource}
113
+ * @returns {MarkerStore}
114
+ */
115
+ export declare function resourceMarkerStore({ resource }: {
116
+ resource: Resource;
117
+ }): MarkerStore;
118
+ //# sourceMappingURL=markerStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markerStore.d.ts","sourceRoot":"","sources":["../../src/edv/markerStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAG9C,OAAO,KAAK,EAEV,oBAAoB,EAErB,MAAM,aAAa,CAAA;AAEpB;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;OASG;IACH,IAAI,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAEvE;;;;;;;;;;;;OAYG;IACH,OAAO,CACL,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhB;;;;;;;;OAQG;IACH,MAAM,CAAC,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,UAAU,EACX,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;CACvB,GAAG,WAAW,CAoCd;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACT,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAA;CACnB,GAAG,WAAW,CAgCd"}
@@ -0,0 +1,108 @@
1
+ import { unreadableDescriptionError } from '../internal/describe.js';
2
+ import { ValidationError } from '../errors.js';
3
+ /**
4
+ * The Collection Description adapter: the marker is the Description's
5
+ * `encryption` member. Read fails closed when the Description is unreadable
6
+ * (WAS masks unauthorized reads as 404) or the collection is not declared
7
+ * encrypted with the `edv` scheme; the CAS write forwards the description's
8
+ * sibling fields (`name` / `backend`) observed by the most recent read, so
9
+ * the replace-semantics PUT does not drop them. No `create`: a Collection
10
+ * Description always exists, so a first marker is declared via
11
+ * `collection.configure({ encryption })`, never through this store.
12
+ *
13
+ * @param options {object}
14
+ * @param options.collection {Collection}
15
+ * @returns {MarkerStore}
16
+ */
17
+ export function collectionMarkerStore({ collection }) {
18
+ // The sibling description fields observed by the most recent read, forwarded
19
+ // verbatim by the CAS write (the server's replace semantics would otherwise
20
+ // drop them). Safe to forward even if stale: the write is pinned to the same
21
+ // read's ETag, so a concurrent description change fails the CAS instead.
22
+ let described;
23
+ return {
24
+ async read() {
25
+ const current = await collection.describeWithEtag();
26
+ if (current === null) {
27
+ throw unreadableDescriptionError({
28
+ operation: 'manage recipients',
29
+ advice: 'Use a capability that can read the Collection Description.'
30
+ });
31
+ }
32
+ const marker = current.description.encryption;
33
+ if (!marker || marker.scheme !== 'edv') {
34
+ throw new ValidationError('Cannot manage recipients: this collection is not declared ' +
35
+ "encrypted with the 'edv' scheme.");
36
+ }
37
+ described = current.description;
38
+ return { marker, etag: current.etag };
39
+ },
40
+ async replace(marker, { ifMatch }) {
41
+ await collection.replaceDescription({
42
+ name: described?.name,
43
+ backend: described?.backend,
44
+ encryption: marker
45
+ }, { ifMatch });
46
+ }
47
+ };
48
+ }
49
+ /**
50
+ * The plain-JSON-Resource adapter: the marker is the resource's entire
51
+ * content, stored verbatim. Read resolves `null` when the resource is absent
52
+ * (the pre-`initRecipients` state -- `create` then writes the first marker
53
+ * with `If-None-Match: *`), and throws when the resource holds something other
54
+ * than an `edv`-scheme marker object.
55
+ *
56
+ * The server enforces no marker invariants on a resource (unlike a Collection
57
+ * Description): rollback/tamper detection rests on the marker's `epochsMac`
58
+ * and client-side epoch pinning, and the CAS/create guards ride the backend's
59
+ * `conditional-writes` feature. Host the resource in a plaintext collection --
60
+ * on an encrypted collection the EDV codec computes the write preconditions
61
+ * itself, so this store's `ifMatch` would not be honored.
62
+ *
63
+ * @param options {object}
64
+ * @param options.resource {Resource}
65
+ * @returns {MarkerStore}
66
+ */
67
+ export function resourceMarkerStore({ resource }) {
68
+ return {
69
+ async read() {
70
+ const current = await resource.getWithEtag();
71
+ if (current === null) {
72
+ return null;
73
+ }
74
+ const marker = current.data;
75
+ if (marker === null ||
76
+ typeof marker !== 'object' ||
77
+ Array.isArray(marker) ||
78
+ marker instanceof Blob ||
79
+ marker.scheme !== 'edv') {
80
+ throw new ValidationError(`Cannot manage recipients: the resource "${resource.id}" does not ` +
81
+ "hold a CollectionEncryption marker with the 'edv' scheme.");
82
+ }
83
+ return {
84
+ marker: marker,
85
+ etag: current.etag
86
+ };
87
+ },
88
+ async replace(marker, { ifMatch }) {
89
+ await resource.put(markerAsJson(marker), { ifMatch });
90
+ },
91
+ async create(marker) {
92
+ await resource.put(markerAsJson(marker), { ifNoneMatch: true });
93
+ }
94
+ };
95
+ }
96
+ /**
97
+ * Casts a marker to the `JsonObject` a resource write takes. The marker types
98
+ * are interfaces without index signatures, so they do not structurally satisfy
99
+ * `JsonObject` -- but a marker is plain JSON by construction (it round-trips
100
+ * through the Collection Description on the classic host), so this is sound.
101
+ *
102
+ * @param marker {CollectionEncryption}
103
+ * @returns {JsonObject}
104
+ */
105
+ function markerAsJson(marker) {
106
+ return marker;
107
+ }
108
+ //# sourceMappingURL=markerStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markerStore.js","sourceRoot":"","sources":["../../src/edv/markerStore.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAyD9C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,UAAU,EAGX;IACC,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,yEAAyE;IACzE,IAAI,SAA4C,CAAA;IAChD,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAA;YACnD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,0BAA0B,CAAC;oBAC/B,SAAS,EAAE,mBAAmB;oBAC9B,MAAM,EAAE,4DAA4D;iBACrE,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAA;YAC7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACvC,MAAM,IAAI,eAAe,CACvB,4DAA4D;oBAC1D,kCAAkC,CACrC,CAAA;YACH,CAAC;YACD,SAAS,GAAG,OAAO,CAAC,WAAW,CAAA;YAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;QACvC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;YAC/B,MAAM,UAAU,CAAC,kBAAkB,CACjC;gBACE,IAAI,EAAE,SAAS,EAAE,IAAI;gBACrB,OAAO,EAAE,SAAS,EAAE,OAAO;gBAC3B,UAAU,EAAE,MAAM;aACnB,EACD,EAAE,OAAO,EAAE,CACZ,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EAGT;IACC,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;YAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAA;YAC3B,IACE,MAAM,KAAK,IAAI;gBACf,OAAO,MAAM,KAAK,QAAQ;gBAC1B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBACrB,MAAM,YAAY,IAAI;gBACrB,MAA+B,CAAC,MAAM,KAAK,KAAK,EACjD,CAAC;gBACD,MAAM,IAAI,eAAe,CACvB,2CAA2C,QAAQ,CAAC,EAAE,aAAa;oBACjE,2DAA2D,CAC9D,CAAA;YACH,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,MAAyC;gBACjD,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAA;QACH,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;YAC/B,MAAM,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,MAAM;YACjB,MAAM,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,MAA4B;IAChD,OAAO,MAA+B,CAAA;AACxC,CAAC"}
@@ -5,14 +5,20 @@
5
5
  * Recipient and key-epoch management for multi-recipient encrypted Collections:
6
6
  * initializing the first epoch, adding a reader (escrow -- history included),
7
7
  * and removing a reader (the full revoke-and-rotate procedure). Each operation
8
- * mutates the Collection's `encryption` marker and writes it back with a
9
- * compare-and-swap (`If-Match`), retrying on a concurrent change so two racing
10
- * recipient edits cannot clobber one another.
8
+ * mutates a `CollectionEncryption` marker through the marker-store seam (see
9
+ * `markerStore.ts`) -- the Collection Description's `encryption` member for the
10
+ * `collection` sugar, or any explicit `store`, such as a marker hosted as a
11
+ * plain JSON Resource -- and writes it back with a compare-and-swap
12
+ * (`If-Match`), retrying on a concurrent change so two racing recipient edits
13
+ * cannot clobber one another.
11
14
  *
12
15
  * The two axes stay separate and are both required to actually remove a reader:
13
16
  *
14
- * - **pull** -- the zcap the server checks at request time. Revoking it stops
15
- * the server serving that reader ciphertext. Immediate and total.
17
+ * - **pull** -- the reader's server-side access. For a Collection this is the
18
+ * zcap the server checks at request time: revoking it stops the server
19
+ * serving that reader ciphertext. Immediate and total. A marker whose pull
20
+ * axis lives elsewhere (e.g. a DID document naming the readers) supplies a
21
+ * `pull` action instead of the default zcap revocation.
16
22
  * - **read** -- possession of an epoch key. Rotating the epoch means resources
17
23
  * written afterward are encrypted under a key the removed reader does not
18
24
  * hold. Prospective only.
@@ -27,6 +33,7 @@
27
33
  import type { IKeyAgreementKey } from '@interop/data-integrity-core';
28
34
  import type { Collection } from '../Collection.js';
29
35
  import type { Space } from '../Space.js';
36
+ import type { MarkerStore } from './markerStore.js';
30
37
  import type { CollectionEncryption, IDelegatedZcap } from '../types.js';
31
38
  import type { RecipientPublicKey } from './epochCrypto.js';
32
39
  export type { RecipientPublicKey } from './epochCrypto.js';
@@ -38,21 +45,40 @@ export interface OwnerKey {
38
45
  keyAgreementKey: IKeyAgreementKey;
39
46
  }
40
47
  /**
41
- * Initializes the first key epoch on a Collection that is declared encrypted
42
- * but has no epochs yet: mints a fresh epoch key, wraps it to each initial
43
- * recipient, and writes `epochs: [epoch]` / `currentEpoch` back with a
44
- * compare-and-swap. After this, resources written by any recipient are encrypted
45
- * under the epoch, and readers unwrap it with their own key-agreement key.
48
+ * Initializes the first key epoch on a marker that has no epochs yet: mints a
49
+ * fresh epoch key, wraps it to each initial recipient, and writes
50
+ * `epochs: [epoch]` / `currentEpoch` back with a compare-and-swap. After this,
51
+ * resources written by any recipient are encrypted under the epoch, and readers
52
+ * unwrap it with their own key-agreement key.
53
+ *
54
+ * On the `collection` host the collection must already be declared encrypted
55
+ * (its marker exists; this fills in the first epochs). On a store whose marker
56
+ * host starts absent (e.g. `resourceMarkerStore`, whose roster resource does
57
+ * not exist before the first init), the marker itself is created from scratch
58
+ * with a create-if-absent guard (`If-None-Match: *`), so two racing first
59
+ * inits cannot clobber one another.
46
60
  *
47
61
  * @param options {object}
48
- * @param options.collection {Collection} the (already encrypted) collection
62
+ * @param [options.collection] {Collection} the (already encrypted) collection
63
+ * whose Description hosts the marker; exactly one of `collection` / `store`
64
+ * @param [options.store] {MarkerStore} an explicit marker store
49
65
  * @param options.recipients {RecipientPublicKey[]} the initial readers' public
50
66
  * key-agreement keys (each `id` is the reader's `kid`)
67
+ * @param [options.epoch] {{ epochId: string, secret: Uint8Array }} a
68
+ * pre-minted first epoch to install instead of minting one -- for a caller
69
+ * whose epoch key already exists (e.g. a per-user key being enrolled into
70
+ * its wrap-set roster). The `epochId` must be the key's did:key and `secret`
71
+ * its raw 32-byte private key, exactly what {@link mintEpoch} returns.
51
72
  * @returns {Promise<CollectionEncryption>} the new marker
52
73
  */
53
- export declare function initRecipients({ collection, recipients }: {
54
- collection: Collection;
74
+ export declare function initRecipients({ collection, store, recipients, epoch: premintedEpoch }: {
75
+ collection?: Collection;
76
+ store?: MarkerStore;
55
77
  recipients: RecipientPublicKey[];
78
+ epoch?: {
79
+ epochId: string;
80
+ secret: Uint8Array;
81
+ };
56
82
  }): Promise<CollectionEncryption>;
57
83
  /**
58
84
  * Adds a reader to a multi-recipient encrypted Collection. Escrow semantics: the
@@ -65,14 +91,17 @@ export declare function initRecipients({ collection, recipients }: {
65
91
  * a compare-and-swap, retried on a concurrent change.
66
92
  *
67
93
  * @param options {object}
68
- * @param options.collection {Collection} the collection
94
+ * @param [options.collection] {Collection} the collection whose Description
95
+ * hosts the marker; exactly one of `collection` / `store`
96
+ * @param [options.store] {MarkerStore} an explicit marker store
69
97
  * @param options.recipient {RecipientPublicKey} the new reader's public KAK
70
98
  * @param options.owner {OwnerKey} the caller's own key-agreement key, to
71
99
  * unwrap each epoch key for re-wrapping to the new reader
72
100
  * @returns {Promise<CollectionEncryption>} the new marker
73
101
  */
74
- export declare function addRecipient({ collection, recipient, owner }: {
75
- collection: Collection;
102
+ export declare function addRecipient({ collection, store, recipient, owner }: {
103
+ collection?: Collection;
104
+ store?: MarkerStore;
76
105
  recipient: RecipientPublicKey;
77
106
  owner: OwnerKey;
78
107
  }): Promise<CollectionEncryption>;
@@ -85,17 +114,21 @@ export declare function addRecipient({ collection, recipient, owner }: {
85
114
  * as a new epoch, and repoint `currentEpoch`, with a compare-and-swap.
86
115
  * Resources written afterward are unreadable to the removed reader (the read
87
116
  * axis; prospective).
88
- * 2. **Revoke the reader's zcap(s)** via `space.revoke()`, so the server stops
89
- * serving it ciphertext (the pull axis; immediate).
117
+ * 2. **Pull the reader's server-side access** (the pull axis; immediate). By
118
+ * default that revokes the reader's zcap(s) via `space.revoke()`, so the
119
+ * server stops serving it ciphertext; a caller whose pull axis lives
120
+ * elsewhere (e.g. a DID document naming the readers) supplies its own
121
+ * `pull` action instead.
90
122
  *
91
- * The rotation runs first so it is durable before the irreversible revocation:
92
- * a rotation that keeps losing the compare-and-swap throws with nothing revoked,
93
- * leaving the operation safely retryable rather than half-applied. The revoke
94
- * step tolerates an already-revoked capability (a retry re-revokes) so the
95
- * operation converges. The rotation itself is likewise idempotent with respect
123
+ * The rotation runs first so it is durable before the irreversible pull:
124
+ * a rotation that keeps losing the compare-and-swap throws with nothing pulled,
125
+ * leaving the operation safely retryable rather than half-applied. The default
126
+ * revoke step tolerates an already-revoked capability (a retry re-revokes) so
127
+ * the operation converges; a custom `pull` should likewise tolerate a retry.
128
+ * The rotation itself is likewise idempotent with respect
96
129
  * to retries: when the current epoch already excludes the departing reader
97
- * (a prior attempt's rotation landed but its revoke failed transiently), no
98
- * fresh epoch is minted or appended -- the retry skips straight to the revoke
130
+ * (a prior attempt's rotation landed but its pull failed transiently), no
131
+ * fresh epoch is minted or appended -- the retry skips straight to the pull
99
132
  * step instead of accumulating a redundant epoch per attempt.
100
133
  *
101
134
  * Important: this does not re-encrypt existing resources, so the removed
@@ -103,24 +136,37 @@ export declare function addRecipient({ collection, recipient, owner }: {
103
136
  * resource whose ciphertext it gets. Neither half alone removes a reader.
104
137
  *
105
138
  * @param options {object}
106
- * @param options.collection {Collection} the collection
107
- * @param options.space {Space} the collection's Space, for the zcap revocation
139
+ * @param [options.collection] {Collection} the collection whose Description
140
+ * hosts the marker; exactly one of `collection` / `store`
141
+ * @param [options.store] {MarkerStore} an explicit marker store
142
+ * @param [options.space] {Space} the collection's Space, for the default
143
+ * pull axis (zcap revocation); required together with `revoke` unless a
144
+ * custom `pull` is supplied
108
145
  * @param options.recipientId {string} the removed reader's key-agreement key
109
146
  * id (`kid`), dropped from the new epoch's recipients
110
- * @param options.revoke {IDelegatedZcap | IDelegatedZcap[]} the reader's
111
- * delegated capability/capabilities to revoke (the pull axis)
147
+ * @param [options.revoke] {IDelegatedZcap | IDelegatedZcap[]} the reader's
148
+ * delegated capability/capabilities to revoke (the default pull axis);
149
+ * required together with `space` unless a custom `pull` is supplied
150
+ * @param [options.pull] {function} a caller-supplied pull action replacing
151
+ * the default zcap revocation. Runs only after the rotation is durable, and
152
+ * should tolerate being re-run (removeRecipient is retried to convergence).
153
+ * Mutually exclusive with `space` / `revoke`.
112
154
  * @param [options.resolveRecipientKey] {function} resolves a remaining
113
155
  * recipient's `kid` to its public key-agreement key, so the fresh epoch key
114
156
  * can be wrapped to it. Defaults to a `did:key` resolver (the `kid` fragment
115
157
  * is the X25519 public key); override for recipients whose `kid` is not a
116
- * self-describing `did:key`.
158
+ * self-describing `did:key`. May resolve `null` to signal drop-this-kid:
159
+ * the rotation then excludes that entry from the fresh epoch instead of
160
+ * throwing (subject to the no-recipients-remaining guard).
117
161
  * @returns {Promise<CollectionEncryption>} the new marker
118
162
  */
119
- export declare function removeRecipient({ collection, space, recipientId, revoke, resolveRecipientKey }: {
120
- collection: Collection;
121
- space: Space;
163
+ export declare function removeRecipient({ collection, store, space, recipientId, revoke, pull, resolveRecipientKey }: {
164
+ collection?: Collection;
165
+ store?: MarkerStore;
166
+ space?: Space;
122
167
  recipientId: string;
123
- revoke: IDelegatedZcap | IDelegatedZcap[];
124
- resolveRecipientKey?: (kid: string) => Promise<RecipientPublicKey>;
168
+ revoke?: IDelegatedZcap | IDelegatedZcap[];
169
+ pull?: () => Promise<void>;
170
+ resolveRecipientKey?: (kid: string) => Promise<RecipientPublicKey | null>;
125
171
  }): Promise<CollectionEncryption>;
126
172
  //# sourceMappingURL=recipients.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,KAAK,EACV,oBAAoB,EAEpB,cAAc,EACf,MAAM,aAAa,CAAA;AAQpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,eAAe,EAAE,gBAAgB,CAAA;CAClC;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,EACnC,UAAU,EACV,UAAU,EACX,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,kBAAkB,EAAE,CAAA;CACjC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,YAAY,CAAC,EACjC,UAAU,EACV,SAAS,EACT,KAAK,EACN,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,kBAAkB,CAAA;IAC7B,KAAK,EAAE,QAAQ,CAAA;CAChB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuDhC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAsB,eAAe,CAAC,EACpC,UAAU,EACV,KAAK,EACL,WAAW,EACX,MAAM,EACN,mBAAgD,EACjD,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,cAAc,GAAG,cAAc,EAAE,CAAA;IACzC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACnE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+FhC"}
1
+ {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EACV,oBAAoB,EAEpB,cAAc,EACf,MAAM,aAAa,CAAA;AAQpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,eAAe,EAAE,gBAAgB,CAAA;CAClC;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,cAAc,CAAC,EACnC,UAAU,EACV,KAAK,EACL,UAAU,EACV,KAAK,EAAE,cAAc,EACtB,EAAE;IACD,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,EAAE,kBAAkB,EAAE,CAAA;IAChC,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAA;CAChD,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA6ChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAAC,EACjC,UAAU,EACV,KAAK,EACL,SAAS,EACT,KAAK,EACN,EAAE;IACD,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,kBAAkB,CAAA;IAC7B,KAAK,EAAE,QAAQ,CAAA;CAChB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuDhC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,wBAAsB,eAAe,CAAC,EACpC,UAAU,EACV,KAAK,EACL,KAAK,EACL,WAAW,EACX,MAAM,EACN,IAAI,EACJ,mBAAgD,EACjD,EAAE;IACD,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAA;IAC1C,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;CAC1E,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgGhC"}
@@ -1,5 +1,5 @@
1
- import { unreadableDescriptionError } from '../internal/describe.js';
2
1
  import { PreconditionFailedError, ValidationError } from '../errors.js';
2
+ import { collectionMarkerStore } from './markerStore.js';
3
3
  import { didKeyResolver, mintEpoch, unwrapEpochSecret, wrapEpochSecret } from './epochCrypto.js';
4
4
  import { computeEpochsMac } from './epochMac.js';
5
5
  /**
@@ -8,29 +8,47 @@ import { computeEpochsMac } from './epochMac.js';
8
8
  */
9
9
  const MAX_CAS_ATTEMPTS = 3;
10
10
  /**
11
- * Initializes the first key epoch on a Collection that is declared encrypted
12
- * but has no epochs yet: mints a fresh epoch key, wraps it to each initial
13
- * recipient, and writes `epochs: [epoch]` / `currentEpoch` back with a
14
- * compare-and-swap. After this, resources written by any recipient are encrypted
15
- * under the epoch, and readers unwrap it with their own key-agreement key.
11
+ * Initializes the first key epoch on a marker that has no epochs yet: mints a
12
+ * fresh epoch key, wraps it to each initial recipient, and writes
13
+ * `epochs: [epoch]` / `currentEpoch` back with a compare-and-swap. After this,
14
+ * resources written by any recipient are encrypted under the epoch, and readers
15
+ * unwrap it with their own key-agreement key.
16
+ *
17
+ * On the `collection` host the collection must already be declared encrypted
18
+ * (its marker exists; this fills in the first epochs). On a store whose marker
19
+ * host starts absent (e.g. `resourceMarkerStore`, whose roster resource does
20
+ * not exist before the first init), the marker itself is created from scratch
21
+ * with a create-if-absent guard (`If-None-Match: *`), so two racing first
22
+ * inits cannot clobber one another.
16
23
  *
17
24
  * @param options {object}
18
- * @param options.collection {Collection} the (already encrypted) collection
25
+ * @param [options.collection] {Collection} the (already encrypted) collection
26
+ * whose Description hosts the marker; exactly one of `collection` / `store`
27
+ * @param [options.store] {MarkerStore} an explicit marker store
19
28
  * @param options.recipients {RecipientPublicKey[]} the initial readers' public
20
29
  * key-agreement keys (each `id` is the reader's `kid`)
30
+ * @param [options.epoch] {{ epochId: string, secret: Uint8Array }} a
31
+ * pre-minted first epoch to install instead of minting one -- for a caller
32
+ * whose epoch key already exists (e.g. a per-user key being enrolled into
33
+ * its wrap-set roster). The `epochId` must be the key's did:key and `secret`
34
+ * its raw 32-byte private key, exactly what {@link mintEpoch} returns.
21
35
  * @returns {Promise<CollectionEncryption>} the new marker
22
36
  */
23
- export async function initRecipients({ collection, recipients }) {
37
+ export async function initRecipients({ collection, store, recipients, epoch: premintedEpoch }) {
24
38
  if (recipients.length === 0) {
25
39
  throw new ValidationError('initRecipients needs at least one recipient to wrap the epoch key to.');
26
40
  }
27
- const { epochId, secret } = await mintEpoch();
41
+ const { epochId, secret } = premintedEpoch ?? (await mintEpoch());
28
42
  const epoch = {
29
43
  id: epochId,
30
44
  recipients: await Promise.all(recipients.map(recipient => wrapEpochSecret({ epochSecret: secret, recipient })))
31
45
  };
32
46
  return casUpdateMarker({
33
- collection,
47
+ store: markerStoreFor({ collection, store }),
48
+ // A store whose marker starts absent initializes from a bare `edv` marker
49
+ // (the create-if-absent branch); a Collection Description's marker always
50
+ // exists, so its adapter never reaches the seed.
51
+ seed: { scheme: 'edv' },
34
52
  mutate: async (marker) => {
35
53
  if (marker.epochs && marker.epochs.length > 0) {
36
54
  throw new ValidationError('This collection already has key epochs; use addRecipient to add a ' +
@@ -65,15 +83,17 @@ export async function initRecipients({ collection, recipients }) {
65
83
  * a compare-and-swap, retried on a concurrent change.
66
84
  *
67
85
  * @param options {object}
68
- * @param options.collection {Collection} the collection
86
+ * @param [options.collection] {Collection} the collection whose Description
87
+ * hosts the marker; exactly one of `collection` / `store`
88
+ * @param [options.store] {MarkerStore} an explicit marker store
69
89
  * @param options.recipient {RecipientPublicKey} the new reader's public KAK
70
90
  * @param options.owner {OwnerKey} the caller's own key-agreement key, to
71
91
  * unwrap each epoch key for re-wrapping to the new reader
72
92
  * @returns {Promise<CollectionEncryption>} the new marker
73
93
  */
74
- export async function addRecipient({ collection, recipient, owner }) {
94
+ export async function addRecipient({ collection, store, recipient, owner }) {
75
95
  return casUpdateMarker({
76
- collection,
96
+ store: markerStoreFor({ collection, store }),
77
97
  mutate: async (marker) => {
78
98
  const epochs = marker.epochs;
79
99
  if (!epochs || epochs.length === 0) {
@@ -124,17 +144,21 @@ export async function addRecipient({ collection, recipient, owner }) {
124
144
  * as a new epoch, and repoint `currentEpoch`, with a compare-and-swap.
125
145
  * Resources written afterward are unreadable to the removed reader (the read
126
146
  * axis; prospective).
127
- * 2. **Revoke the reader's zcap(s)** via `space.revoke()`, so the server stops
128
- * serving it ciphertext (the pull axis; immediate).
147
+ * 2. **Pull the reader's server-side access** (the pull axis; immediate). By
148
+ * default that revokes the reader's zcap(s) via `space.revoke()`, so the
149
+ * server stops serving it ciphertext; a caller whose pull axis lives
150
+ * elsewhere (e.g. a DID document naming the readers) supplies its own
151
+ * `pull` action instead.
129
152
  *
130
- * The rotation runs first so it is durable before the irreversible revocation:
131
- * a rotation that keeps losing the compare-and-swap throws with nothing revoked,
132
- * leaving the operation safely retryable rather than half-applied. The revoke
133
- * step tolerates an already-revoked capability (a retry re-revokes) so the
134
- * operation converges. The rotation itself is likewise idempotent with respect
153
+ * The rotation runs first so it is durable before the irreversible pull:
154
+ * a rotation that keeps losing the compare-and-swap throws with nothing pulled,
155
+ * leaving the operation safely retryable rather than half-applied. The default
156
+ * revoke step tolerates an already-revoked capability (a retry re-revokes) so
157
+ * the operation converges; a custom `pull` should likewise tolerate a retry.
158
+ * The rotation itself is likewise idempotent with respect
135
159
  * to retries: when the current epoch already excludes the departing reader
136
- * (a prior attempt's rotation landed but its revoke failed transiently), no
137
- * fresh epoch is minted or appended -- the retry skips straight to the revoke
160
+ * (a prior attempt's rotation landed but its pull failed transiently), no
161
+ * fresh epoch is minted or appended -- the retry skips straight to the pull
138
162
  * step instead of accumulating a redundant epoch per attempt.
139
163
  *
140
164
  * Important: this does not re-encrypt existing resources, so the removed
@@ -142,28 +166,43 @@ export async function addRecipient({ collection, recipient, owner }) {
142
166
  * resource whose ciphertext it gets. Neither half alone removes a reader.
143
167
  *
144
168
  * @param options {object}
145
- * @param options.collection {Collection} the collection
146
- * @param options.space {Space} the collection's Space, for the zcap revocation
169
+ * @param [options.collection] {Collection} the collection whose Description
170
+ * hosts the marker; exactly one of `collection` / `store`
171
+ * @param [options.store] {MarkerStore} an explicit marker store
172
+ * @param [options.space] {Space} the collection's Space, for the default
173
+ * pull axis (zcap revocation); required together with `revoke` unless a
174
+ * custom `pull` is supplied
147
175
  * @param options.recipientId {string} the removed reader's key-agreement key
148
176
  * id (`kid`), dropped from the new epoch's recipients
149
- * @param options.revoke {IDelegatedZcap | IDelegatedZcap[]} the reader's
150
- * delegated capability/capabilities to revoke (the pull axis)
177
+ * @param [options.revoke] {IDelegatedZcap | IDelegatedZcap[]} the reader's
178
+ * delegated capability/capabilities to revoke (the default pull axis);
179
+ * required together with `space` unless a custom `pull` is supplied
180
+ * @param [options.pull] {function} a caller-supplied pull action replacing
181
+ * the default zcap revocation. Runs only after the rotation is durable, and
182
+ * should tolerate being re-run (removeRecipient is retried to convergence).
183
+ * Mutually exclusive with `space` / `revoke`.
151
184
  * @param [options.resolveRecipientKey] {function} resolves a remaining
152
185
  * recipient's `kid` to its public key-agreement key, so the fresh epoch key
153
186
  * can be wrapped to it. Defaults to a `did:key` resolver (the `kid` fragment
154
187
  * is the X25519 public key); override for recipients whose `kid` is not a
155
- * self-describing `did:key`.
188
+ * self-describing `did:key`. May resolve `null` to signal drop-this-kid:
189
+ * the rotation then excludes that entry from the fresh epoch instead of
190
+ * throwing (subject to the no-recipients-remaining guard).
156
191
  * @returns {Promise<CollectionEncryption>} the new marker
157
192
  */
158
- export async function removeRecipient({ collection, space, recipientId, revoke, resolveRecipientKey = defaultResolveRecipientKey }) {
193
+ export async function removeRecipient({ collection, store, space, recipientId, revoke, pull, resolveRecipientKey = defaultResolveRecipientKey }) {
194
+ const markerStore = markerStoreFor({ collection, store });
195
+ // Resolve the pull axis up front, before any rotation, so a malformed call
196
+ // fails before the marker is mutated.
197
+ const pullAxis = resolvePullAxis({ space, revoke, pull });
159
198
  // 1. Read axis: mint a fresh epoch, wrap it to every remaining recipient,
160
199
  // append it, and repoint `currentEpoch` (compare-and-swap, retried on race).
161
- // Rotate FIRST so the rotation is durable before any irreversible revocation:
162
- // if the CAS keeps losing the race and throws, the reader is neither revoked
200
+ // Rotate FIRST so the rotation is durable before any irreversible pull:
201
+ // if the CAS keeps losing the race and throws, the reader is neither pulled
163
202
  // nor rotated, so `removeRecipient` is safely retryable to convergence.
164
203
  const { epochId, secret } = await mintEpoch();
165
204
  const rotatedMarker = await casUpdateMarker({
166
- collection,
205
+ store: markerStore,
167
206
  mutate: async (marker) => {
168
207
  const epochs = marker.epochs;
169
208
  if (!epochs || epochs.length === 0) {
@@ -195,10 +234,22 @@ export async function removeRecipient({ collection, space, recipientId, revoke,
195
234
  throw new ValidationError('Cannot removeRecipient: no recipients would remain after the ' +
196
235
  'removal (a collection with no readers cannot be rotated to).');
197
236
  }
198
- const newRecipients = await Promise.all([...remaining].map(async (kid) => wrapEpochSecret({
199
- epochSecret: secret,
200
- recipient: await resolveRecipientKey(kid)
201
- })));
237
+ // Wrap the fresh epoch key to each remaining recipient. The resolver may
238
+ // signal drop-this-kid by resolving `null` (e.g. a roster entry whose
239
+ // key material is no longer resolvable), so the rotation excludes that
240
+ // entry instead of throwing.
241
+ const wrapped = await Promise.all([...remaining].map(async (kid) => {
242
+ const recipient = await resolveRecipientKey(kid);
243
+ return recipient === null
244
+ ? null
245
+ : wrapEpochSecret({ epochSecret: secret, recipient });
246
+ }));
247
+ const newRecipients = wrapped.filter(entry => entry !== null);
248
+ if (newRecipients.length === 0) {
249
+ throw new ValidationError('Cannot removeRecipient: no recipients would remain after the ' +
250
+ 'removal (resolveRecipientKey dropped every remaining entry, ' +
251
+ 'and a collection with no readers cannot be rotated to).');
252
+ }
202
253
  const newEpoch = {
203
254
  id: epochId,
204
255
  recipients: newRecipients
@@ -218,26 +269,55 @@ export async function removeRecipient({ collection, space, recipientId, revoke,
218
269
  return { ...next, epochsMac };
219
270
  }
220
271
  });
221
- // 2. Pull axis: revoke the reader's capability/capabilities AFTER the rotation
222
- // is durable. Tolerate an already-revoked capability so a retry (after a
223
- // transient revoke failure) converges rather than throwing in the loop:
224
- // `space.revoke` is not idempotent and reports an already-revoked capability
225
- // as ValidationError. That same status also covers tampered/expired/foreign
226
- // capabilities, which the client cannot distinguish here, so this swallows
227
- // only ValidationError and re-throws anything else.
228
- const toRevoke = Array.isArray(revoke) ? revoke : [revoke];
229
- for (const zcap of toRevoke) {
230
- try {
231
- await space.revoke(zcap);
272
+ // 2. Pull axis: withdraw the reader's server-side access AFTER the rotation
273
+ // is durable -- the default zcap revocation, or the caller-supplied `pull`.
274
+ await pullAxis();
275
+ return rotatedMarker;
276
+ }
277
+ /**
278
+ * Resolves the pull axis of {@link removeRecipient} -- exactly one of the
279
+ * default zcap revocation (`space` + `revoke`) or a caller-supplied `pull`
280
+ * action -- into the single action run after the rotation is durable.
281
+ *
282
+ * @param options {object}
283
+ * @param [options.space] {Space}
284
+ * @param [options.revoke] {IDelegatedZcap | IDelegatedZcap[]}
285
+ * @param [options.pull] {function}
286
+ * @returns {function} the pull action
287
+ */
288
+ function resolvePullAxis({ space, revoke, pull }) {
289
+ if (pull !== undefined) {
290
+ if (space !== undefined || revoke !== undefined) {
291
+ throw new ValidationError('removeRecipient takes either the default pull axis (`space` + ' +
292
+ '`revoke`, the zcap revocation) or a custom `pull` action, not both.');
232
293
  }
233
- catch (err) {
234
- if (err instanceof ValidationError) {
235
- continue;
294
+ return pull;
295
+ }
296
+ if (space === undefined || revoke === undefined) {
297
+ throw new ValidationError('removeRecipient needs its pull axis: pass `space` and `revoke` (the ' +
298
+ 'default zcap revocation), or a custom `pull` action.');
299
+ }
300
+ // The default pull: revoke the reader's capability/capabilities. Tolerate an
301
+ // already-revoked capability so a retry (after a transient revoke failure)
302
+ // converges rather than throwing in the loop: `space.revoke` is not
303
+ // idempotent and reports an already-revoked capability as ValidationError.
304
+ // That same status also covers tampered/expired/foreign capabilities, which
305
+ // the client cannot distinguish here, so this swallows only ValidationError
306
+ // and re-throws anything else.
307
+ const toRevoke = Array.isArray(revoke) ? revoke : [revoke];
308
+ return async function revokeZcaps() {
309
+ for (const zcap of toRevoke) {
310
+ try {
311
+ await space.revoke(zcap);
312
+ }
313
+ catch (err) {
314
+ if (err instanceof ValidationError) {
315
+ continue;
316
+ }
317
+ throw err;
236
318
  }
237
- throw err;
238
319
  }
239
- }
240
- return rotatedMarker;
320
+ };
241
321
  }
242
322
  /**
243
323
  * The default recipient-key resolver: treats a `kid` as a self-describing
@@ -252,46 +332,91 @@ async function defaultResolveRecipientKey(kid) {
252
332
  return { id: resolved.id, publicKeyMultibase: resolved.publicKeyMultibase };
253
333
  }
254
334
  /**
255
- * Reads the Collection Description, applies `mutate` to its `encryption` marker,
256
- * and writes it back with a compare-and-swap (`If-Match`). Retries on a stale
257
- * (`412`) validator, re-reading the fresh marker each time, up to
258
- * {@link MAX_CAS_ATTEMPTS}; surfaces {@link PreconditionFailedError} if it keeps
259
- * losing the race. A `mutate` that resolves `null` signals "no change needed"
260
- * (the marker already reflects the desired state, e.g. an idempotent retry):
261
- * nothing is written and the current marker is returned as-is.
335
+ * Resolves the marker store a recipient operation targets: the explicit
336
+ * `store`, or the Collection Description adapter over the `collection` sugar.
337
+ * Exactly one of the two must be supplied.
338
+ *
339
+ * @param options {object}
340
+ * @param [options.collection] {Collection}
341
+ * @param [options.store] {MarkerStore}
342
+ * @returns {MarkerStore}
343
+ */
344
+ function markerStoreFor({ collection, store }) {
345
+ if (collection !== undefined && store !== undefined) {
346
+ throw new ValidationError('Pass either `collection` (the Collection Description hosts the ' +
347
+ 'marker) or `store` (an explicit marker store), not both.');
348
+ }
349
+ if (store !== undefined) {
350
+ return store;
351
+ }
352
+ if (collection !== undefined) {
353
+ return collectionMarkerStore({ collection });
354
+ }
355
+ throw new ValidationError('A recipient operation needs its marker host: pass `collection` or ' +
356
+ '`store`.');
357
+ }
358
+ /**
359
+ * Reads the store's marker, applies `mutate`, and writes the result back with
360
+ * a compare-and-swap (`If-Match`). Retries on a stale (`412`) validator,
361
+ * re-reading the fresh marker each time, up to {@link MAX_CAS_ATTEMPTS};
362
+ * surfaces {@link PreconditionFailedError} if it keeps losing the race. A
363
+ * `mutate` that resolves `null` signals "no change needed" (the marker already
364
+ * reflects the desired state, e.g. an idempotent retry): nothing is written
365
+ * and the current marker is returned as-is.
366
+ *
367
+ * When the store reports no marker yet (`read()` resolves `null`, e.g. the
368
+ * resource adapter before the first `initRecipients`), the optional `seed` is
369
+ * mutated instead and the result written with the store's create-if-absent
370
+ * guard (`If-None-Match: *`). Only `initRecipients` passes a seed; without
371
+ * one an absent marker is refused. Losing the create race (a concurrent
372
+ * writer created the first marker) re-enters the loop and re-reads, like a
373
+ * stale CAS.
262
374
  *
263
375
  * @param options {object}
264
- * @param options.collection {Collection}
376
+ * @param options.store {MarkerStore}
265
377
  * @param options.mutate {function} marker to the next marker (may be async),
266
378
  * or `null` to skip the write
379
+ * @param [options.seed] {CollectionEncryption} the marker to mutate when the
380
+ * store holds none yet
267
381
  * @returns {Promise<CollectionEncryption>} the written (or current) marker
268
382
  */
269
- async function casUpdateMarker({ collection, mutate }) {
383
+ async function casUpdateMarker({ store, mutate, seed }) {
270
384
  let lastError;
271
385
  for (let attempt = 0; attempt < MAX_CAS_ATTEMPTS; attempt++) {
272
- const current = await collection.describeWithEtag();
386
+ const current = await store.read();
273
387
  if (current === null) {
274
- throw unreadableDescriptionError({
275
- operation: 'manage recipients',
276
- advice: 'Use a capability that can read the Collection Description.'
277
- });
278
- }
279
- const marker = current.description.encryption;
280
- if (!marker || marker.scheme !== 'edv') {
281
- throw new ValidationError('Cannot manage recipients: this collection is not declared encrypted ' +
282
- "with the 'edv' scheme.");
388
+ if (seed === undefined) {
389
+ throw new ValidationError('Cannot manage recipients: this marker store holds no encryption ' +
390
+ 'marker yet. Call initRecipients first.');
391
+ }
392
+ if (store.create === undefined) {
393
+ throw new ValidationError('Cannot initialize recipients: this marker store holds no marker ' +
394
+ 'and does not support creating one.');
395
+ }
396
+ const created = await mutate(seed);
397
+ if (created === null) {
398
+ return seed;
399
+ }
400
+ try {
401
+ await store.create(created);
402
+ return created;
403
+ }
404
+ catch (err) {
405
+ if (err instanceof PreconditionFailedError) {
406
+ // A concurrent writer created the first marker: re-read and re-apply.
407
+ lastError = err;
408
+ continue;
409
+ }
410
+ throw err;
411
+ }
283
412
  }
284
- const next = await mutate(marker);
413
+ const next = await mutate(current.marker);
285
414
  if (next === null) {
286
415
  // The marker already reflects the desired state: nothing to write.
287
- return marker;
416
+ return current.marker;
288
417
  }
289
418
  try {
290
- await collection.replaceDescription({
291
- name: current.description.name,
292
- backend: current.description.backend,
293
- encryption: next
294
- }, { ifMatch: current.etag });
419
+ await store.replace(next, { ifMatch: current.etag });
295
420
  return next;
296
421
  }
297
422
  catch (err) {
@@ -304,7 +429,7 @@ async function casUpdateMarker({ collection, mutate }) {
304
429
  }
305
430
  }
306
431
  throw new PreconditionFailedError(`Recipient change lost the compare-and-swap race after ${MAX_CAS_ATTEMPTS} ` +
307
- 'attempts (another writer kept updating the Collection Description). ' +
432
+ 'attempts (another writer kept updating the stored marker). ' +
308
433
  'Retry the operation.', { cause: lastError });
309
434
  }
310
435
  //# sourceMappingURL=recipients.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@interop/was-client",
3
3
  "description": "A developer-friendly client for Wallet Attached Storage (WAS) servers.",
4
- "version": "0.20.0",
4
+ "version": "0.22.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "build": "pnpm run clear && tsc",
@@ -48,13 +48,13 @@
48
48
  "types": "dist/index.d.ts",
49
49
  "sideEffects": false,
50
50
  "dependencies": {
51
- "@interop/data-integrity-core": "^8.3.0",
51
+ "@interop/data-integrity-core": "^8.4.0",
52
52
  "@interop/ed25519-signature": "^7.1.4",
53
53
  "@interop/edv-client": "^17.8.0",
54
54
  "@interop/ezcap": "^7.4.1",
55
55
  "@interop/http-client": "^1.0.4",
56
56
  "@interop/minimal-cipher": "^7.8.0",
57
- "@interop/storage-core": "^0.3.8",
57
+ "@interop/storage-core": "^0.3.9",
58
58
  "@interop/x25519-key-agreement-key": "^5.2.1",
59
59
  "@noble/hashes": "^2.2.0",
60
60
  "@scure/base": "^2.2.0",