@interop/was-client 0.12.0 → 0.13.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.
- package/README.md +21 -0
- package/dist/Collection.d.ts +13 -0
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +61 -52
- package/dist/Collection.js.map +1 -1
- package/dist/Resource.d.ts +39 -25
- package/dist/Resource.d.ts.map +1 -1
- package/dist/Resource.js +89 -74
- package/dist/Resource.js.map +1 -1
- package/dist/Space.d.ts +43 -0
- package/dist/Space.d.ts.map +1 -1
- package/dist/Space.js +98 -56
- package/dist/Space.js.map +1 -1
- package/dist/WasClient.d.ts.map +1 -1
- package/dist/WasClient.js +33 -32
- package/dist/WasClient.js.map +1 -1
- package/dist/edv/EdvCodec.d.ts +8 -3
- package/dist/edv/EdvCodec.d.ts.map +1 -1
- package/dist/edv/EdvCodec.js +43 -31
- package/dist/edv/EdvCodec.js.map +1 -1
- package/dist/edv/WasTransport.d.ts +28 -10
- package/dist/edv/WasTransport.d.ts.map +1 -1
- package/dist/edv/WasTransport.js +66 -16
- package/dist/edv/WasTransport.js.map +1 -1
- package/dist/edv/constants.d.ts +8 -0
- package/dist/edv/constants.d.ts.map +1 -1
- package/dist/edv/constants.js +10 -0
- package/dist/edv/constants.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -7
- package/dist/errors.js.map +1 -1
- package/dist/internal/codec.d.ts +6 -43
- package/dist/internal/codec.d.ts.map +1 -1
- package/dist/internal/codec.js +19 -40
- package/dist/internal/codec.js.map +1 -1
- package/dist/internal/conditional.d.ts +8 -3
- package/dist/internal/conditional.d.ts.map +1 -1
- package/dist/internal/conditional.js +5 -3
- package/dist/internal/conditional.js.map +1 -1
- package/dist/internal/content.d.ts +42 -8
- package/dist/internal/content.d.ts.map +1 -1
- package/dist/internal/content.js +70 -21
- package/dist/internal/content.js.map +1 -1
- package/dist/internal/grant.d.ts +20 -2
- package/dist/internal/grant.d.ts.map +1 -1
- package/dist/internal/grant.js +22 -2
- package/dist/internal/grant.js.map +1 -1
- package/dist/internal/pagination.d.ts +16 -0
- package/dist/internal/pagination.d.ts.map +1 -1
- package/dist/internal/pagination.js +21 -1
- package/dist/internal/pagination.js.map +1 -1
- package/dist/internal/paths.d.ts +48 -17
- package/dist/internal/paths.d.ts.map +1 -1
- package/dist/internal/paths.js +85 -6
- package/dist/internal/paths.js.map +1 -1
- package/dist/internal/request.d.ts +21 -12
- package/dist/internal/request.d.ts.map +1 -1
- package/dist/internal/request.js +22 -0
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/reserved.d.ts +8 -4
- package/dist/internal/reserved.d.ts.map +1 -1
- package/dist/internal/reserved.js +5 -4
- package/dist/internal/reserved.js.map +1 -1
- package/dist/internal/write.d.ts +47 -6
- package/dist/internal/write.d.ts.map +1 -1
- package/dist/internal/write.js +71 -1
- package/dist/internal/write.js.map +1 -1
- package/package.json +1 -1
package/dist/edv/WasTransport.js
CHANGED
|
@@ -29,15 +29,17 @@
|
|
|
29
29
|
* Scope: documents only (`insert` / `update` / `get`). Blinded `find` / `count`
|
|
30
30
|
* / `updateIndex` and chunked streams (`storeChunk` / `getChunk`) require
|
|
31
31
|
* server-side EDV affordances (blinded `/query`, the `/{id}/chunks/{n}`
|
|
32
|
-
* sub-segment
|
|
33
|
-
*
|
|
34
|
-
* `
|
|
32
|
+
* sub-segment) that a plaintext WAS server does not yet provide, so they throw
|
|
33
|
+
* here. `insert` uses an atomic `If-None-Match: *` create when the backend
|
|
34
|
+
* advertises the optional `conditional-writes` feature; otherwise (and for
|
|
35
|
+
* `update`) writes are advisory -- the EDV `sequence` is not enforced
|
|
36
|
+
* (last-writer-wins on `update`).
|
|
35
37
|
*/
|
|
36
38
|
import { Transport } from '@interop/edv-client';
|
|
37
39
|
import { httpStatus } from '../errors.js';
|
|
38
40
|
import { readJsonData } from '../internal/content.js';
|
|
39
|
-
import { resourcePath } from '../internal/paths.js';
|
|
40
|
-
import { DEFAULT_CONTENT_TYPE,
|
|
41
|
+
import { collectionBackend, resourcePath } from '../internal/paths.js';
|
|
42
|
+
import { DEFAULT_CONTENT_TYPE, envelopeBytes, JOSE_CONTENT_TYPE } from './constants.js';
|
|
41
43
|
export { JOSE_CONTENT_TYPE };
|
|
42
44
|
/**
|
|
43
45
|
* Builds an `Error` carrying the `name` that `EdvClientCore` (and the reference
|
|
@@ -63,6 +65,7 @@ export class WasTransport extends Transport {
|
|
|
63
65
|
collectionId;
|
|
64
66
|
contentType;
|
|
65
67
|
_was;
|
|
68
|
+
_conditionalWritesPromise;
|
|
66
69
|
/**
|
|
67
70
|
* @param options {object}
|
|
68
71
|
* @param options.was {WasClient} a WAS client holding the signer
|
|
@@ -99,25 +102,55 @@ export class WasTransport extends Transport {
|
|
|
99
102
|
*
|
|
100
103
|
* @param id {string}
|
|
101
104
|
* @param encrypted {IEncryptedDocument}
|
|
105
|
+
* @param [headers] {Record<string, string>} extra request headers (e.g. a
|
|
106
|
+
* conditional-write precondition)
|
|
102
107
|
* @returns {Promise<HttpResponse>}
|
|
103
108
|
*/
|
|
104
|
-
async _put(id, encrypted) {
|
|
105
|
-
const body =
|
|
109
|
+
async _put(id, encrypted, headers = {}) {
|
|
110
|
+
const body = envelopeBytes(encrypted);
|
|
106
111
|
return this._was.request({
|
|
107
112
|
path: this._resourcePath(id),
|
|
108
113
|
method: 'PUT',
|
|
109
114
|
body,
|
|
110
|
-
headers: { 'content-type': this.contentType }
|
|
115
|
+
headers: { 'content-type': this.contentType, ...headers }
|
|
111
116
|
});
|
|
112
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Whether the collection's backend advertises the `conditional-writes`
|
|
120
|
+
* feature. Read once from the "Collection Backend Selected" descriptor and
|
|
121
|
+
* memoized for the transport's lifetime; any failure to read the descriptor
|
|
122
|
+
* (404, 501 on a server without backend support, network error) resolves
|
|
123
|
+
* `false`, so the caller falls back to the advisory path.
|
|
124
|
+
*
|
|
125
|
+
* @returns {Promise<boolean>}
|
|
126
|
+
*/
|
|
127
|
+
_conditionalWrites() {
|
|
128
|
+
this._conditionalWritesPromise ??= (async () => {
|
|
129
|
+
try {
|
|
130
|
+
const response = await this._was.request({
|
|
131
|
+
path: collectionBackend(this.spaceId, this.collectionId),
|
|
132
|
+
method: 'GET'
|
|
133
|
+
});
|
|
134
|
+
const descriptor = (await readJsonData(response));
|
|
135
|
+
return (Array.isArray(descriptor?.features) &&
|
|
136
|
+
descriptor.features.includes('conditional-writes'));
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
})();
|
|
142
|
+
return this._conditionalWritesPromise;
|
|
143
|
+
}
|
|
113
144
|
/**
|
|
114
145
|
* @inheritdoc
|
|
115
146
|
*
|
|
116
|
-
* Inserts a new encrypted document. WAS `PUT` is an upsert, so
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
147
|
+
* Inserts a new encrypted document. WAS `PUT` is an upsert, so EDV insert
|
|
148
|
+
* semantics (`DuplicateError` if the id already exists) need a guard. When
|
|
149
|
+
* the backend advertises `conditional-writes`, the insert is a single atomic
|
|
150
|
+
* `PUT` with `If-None-Match: *`, and the server's 412 maps to
|
|
151
|
+
* `DuplicateError`. Otherwise it degrades to a bodiless existence check
|
|
152
|
+
* (`HEAD`) before the `PUT` -- advisory and non-atomic, but no longer
|
|
153
|
+
* downloading the whole stored envelope just to discard it.
|
|
121
154
|
*
|
|
122
155
|
* @param options {object}
|
|
123
156
|
* @param options.encrypted {IEncryptedDocument} the document to insert
|
|
@@ -127,6 +160,22 @@ export class WasTransport extends Transport {
|
|
|
127
160
|
if (!encrypted) {
|
|
128
161
|
throw new TypeError('"encrypted" is required.');
|
|
129
162
|
}
|
|
163
|
+
if (await this._conditionalWrites()) {
|
|
164
|
+
try {
|
|
165
|
+
await this._put(encrypted.id, encrypted, { 'if-none-match': '*' });
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
if (httpStatus(err) === 412) {
|
|
169
|
+
throw namedError({
|
|
170
|
+
name: 'DuplicateError',
|
|
171
|
+
message: `A document with id "${encrypted.id}" already exists.`,
|
|
172
|
+
cause: err
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
throw err;
|
|
176
|
+
}
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
130
179
|
if (await this._exists(encrypted.id)) {
|
|
131
180
|
throw namedError({
|
|
132
181
|
name: 'DuplicateError',
|
|
@@ -200,15 +249,16 @@ export class WasTransport extends Transport {
|
|
|
200
249
|
return (await readJsonData(response));
|
|
201
250
|
}
|
|
202
251
|
/**
|
|
203
|
-
* Resolves to `true` if a resource exists at the document's path
|
|
204
|
-
*
|
|
252
|
+
* Resolves to `true` if a resource exists at the document's path, via a
|
|
253
|
+
* bodiless `HEAD` (the stored envelope is not needed, only its existence). A
|
|
254
|
+
* 404 resolves to `false`; any other error propagates.
|
|
205
255
|
*
|
|
206
256
|
* @param id {string}
|
|
207
257
|
* @returns {Promise<boolean>}
|
|
208
258
|
*/
|
|
209
259
|
async _exists(id) {
|
|
210
260
|
try {
|
|
211
|
-
await this._was.request({ path: this._resourcePath(id), method: '
|
|
261
|
+
await this._was.request({ path: this._resourcePath(id), method: 'HEAD' });
|
|
212
262
|
return true;
|
|
213
263
|
}
|
|
214
264
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WasTransport.js","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"WasTransport.js","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"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"}
|
package/dist/edv/constants.d.ts
CHANGED
|
@@ -27,4 +27,12 @@ export declare const JOSE_CONTENT_TYPE = "application/jose+json";
|
|
|
27
27
|
* instance is reused across every write).
|
|
28
28
|
*/
|
|
29
29
|
export declare const ENCODER: TextEncoder;
|
|
30
|
+
/**
|
|
31
|
+
* Serializes an encrypted envelope to its wire bytes -- the single source of
|
|
32
|
+
* the envelope encoding shared by `EdvCodec` and `WasTransport`.
|
|
33
|
+
*
|
|
34
|
+
* @param envelope {object} the encrypted EDV document envelope
|
|
35
|
+
* @returns {Uint8Array}
|
|
36
|
+
*/
|
|
37
|
+
export declare function envelopeBytes(envelope: object): Uint8Array;
|
|
30
38
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/edv/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,qBAAqB,CAAA;AAEtD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AAExD;;;GAGG;AACH,eAAO,MAAM,OAAO,aAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/edv/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,qBAAqB,CAAA;AAEtD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AAExD;;;GAGG;AACH,eAAO,MAAM,OAAO,aAAoB,CAAA;AAExC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAE1D"}
|
package/dist/edv/constants.js
CHANGED
|
@@ -27,4 +27,14 @@ export const JOSE_CONTENT_TYPE = 'application/jose+json';
|
|
|
27
27
|
* instance is reused across every write).
|
|
28
28
|
*/
|
|
29
29
|
export const ENCODER = new TextEncoder();
|
|
30
|
+
/**
|
|
31
|
+
* Serializes an encrypted envelope to its wire bytes -- the single source of
|
|
32
|
+
* the envelope encoding shared by `EdvCodec` and `WasTransport`.
|
|
33
|
+
*
|
|
34
|
+
* @param envelope {object} the encrypted EDV document envelope
|
|
35
|
+
* @returns {Uint8Array}
|
|
36
|
+
*/
|
|
37
|
+
export function envelopeBytes(envelope) {
|
|
38
|
+
return ENCODER.encode(JSON.stringify(envelope));
|
|
39
|
+
}
|
|
30
40
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/edv/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAA;AAEtD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/edv/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAA;AAEtD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AACjD,CAAC"}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEP,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAU3D;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEP,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAU3D;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAoFD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAyD/C"}
|
package/dist/errors.js
CHANGED
|
@@ -181,12 +181,13 @@ const ERROR_CLASS_BY_KIND = {
|
|
|
181
181
|
* the `type` URI, e.g. `quota-exceeded`). Returns `null` for an unrecognized or
|
|
182
182
|
* absent kind so the caller can fall back to status-based dispatch.
|
|
183
183
|
*
|
|
184
|
-
* @param
|
|
185
|
-
* @param
|
|
186
|
-
* @param options {
|
|
184
|
+
* @param options {object}
|
|
185
|
+
* @param [options.kind] {string} the `type` URI fragment
|
|
186
|
+
* @param options.message {string}
|
|
187
|
+
* @param options.options {WasErrorOptions}
|
|
187
188
|
* @returns {WasError | null}
|
|
188
189
|
*/
|
|
189
|
-
function errorForKind(kind, message, options) {
|
|
190
|
+
function errorForKind({ kind, message, options }) {
|
|
190
191
|
const ErrorClass = kind === undefined ? undefined : ERROR_CLASS_BY_KIND[kind];
|
|
191
192
|
return ErrorClass ? new ErrorClass(message, options) : null;
|
|
192
193
|
}
|
|
@@ -221,17 +222,19 @@ export function mapError(err) {
|
|
|
221
222
|
const title = data?.title;
|
|
222
223
|
// Guard with `Array.isArray`, not just optional chaining: a non-conformant
|
|
223
224
|
// `problem+json` body with `errors` as a non-array (e.g. `"boom"`) is truthy,
|
|
224
|
-
// so `?.map` would throw a `TypeError` and mask the real `WasError`.
|
|
225
|
+
// so `?.map` would throw a `TypeError` and mask the real `WasError`. Each
|
|
226
|
+
// entry is likewise unvalidated server JSON (may be `null` or a primitive),
|
|
227
|
+
// so read `detail` defensively; the string filter drops the misses.
|
|
225
228
|
const details = Array.isArray(data?.errors)
|
|
226
229
|
? data.errors
|
|
227
|
-
.map(entry => entry
|
|
230
|
+
.map(entry => entry?.detail)
|
|
228
231
|
.filter((detail) => typeof detail === 'string')
|
|
229
232
|
: undefined;
|
|
230
233
|
const requestUrl = httpError.requestUrl;
|
|
231
234
|
const message = title ?? httpError.message ?? 'WAS request failed';
|
|
232
235
|
const options = { status, type, title, details, requestUrl, cause: err };
|
|
233
236
|
const kind = typeof type === 'string' ? problemFragment(type) : undefined;
|
|
234
|
-
const byKind = errorForKind(kind, message, options);
|
|
237
|
+
const byKind = errorForKind({ kind, message, options });
|
|
235
238
|
if (byKind !== null) {
|
|
236
239
|
return byKind;
|
|
237
240
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/codec.d.ts
CHANGED
|
@@ -1,42 +1,6 @@
|
|
|
1
1
|
import type { ResourceCodec } from '../codec.js';
|
|
2
2
|
import type { ClientContext } from './request.js';
|
|
3
|
-
import type {
|
|
4
|
-
/**
|
|
5
|
-
* The outcome of a marker read. The distinction is load-bearing: `readable:
|
|
6
|
-
* false` means the Collection Description could not be read at all (a null/404,
|
|
7
|
-
* which WAS also returns for an *unauthorized* read -- e.g. a resource-scoped
|
|
8
|
-
* capability cannot GET the collection description), which is indistinguishable
|
|
9
|
-
* from "absent". That ambiguity must NOT be collapsed into "plaintext", or an
|
|
10
|
-
* encryption-capable client would fail open and write server-visible plaintext
|
|
11
|
-
* into an encrypted collection. `readable: true` means the description was read;
|
|
12
|
-
* its `encryption` is the declared marker (absent for a genuine plaintext
|
|
13
|
-
* collection).
|
|
14
|
-
*/
|
|
15
|
-
export type MarkerReadResult = {
|
|
16
|
-
readable: false;
|
|
17
|
-
} | {
|
|
18
|
-
readable: true;
|
|
19
|
-
encryption?: CollectionEncryption;
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Reads a Collection's declared `encryption` marker as a {@link MarkerReadResult},
|
|
23
|
-
* mapping an unreadable description (null/404 -- also what WAS returns for an
|
|
24
|
-
* unauthorized read) to `{ readable: false }`. The lazy `readMarker` thunk both
|
|
25
|
-
* the Collection and the standalone-Resource codec resolution pass to
|
|
26
|
-
* {@link resolveCodec}.
|
|
27
|
-
*
|
|
28
|
-
* @param context {ClientContext}
|
|
29
|
-
* @param options {object}
|
|
30
|
-
* @param options.spaceId {string}
|
|
31
|
-
* @param options.collectionId {string}
|
|
32
|
-
* @param [options.capability] {IZcap}
|
|
33
|
-
* @returns {Promise<MarkerReadResult>}
|
|
34
|
-
*/
|
|
35
|
-
export declare function readCollectionMarker(context: ClientContext, { spaceId, collectionId, capability }: {
|
|
36
|
-
spaceId: string;
|
|
37
|
-
collectionId: string;
|
|
38
|
-
capability?: IZcap;
|
|
39
|
-
}): Promise<MarkerReadResult>;
|
|
3
|
+
import type { EncryptionOverride, IZcap } from '../types.js';
|
|
40
4
|
/**
|
|
41
5
|
* A per-handle codec cache. Memoizes the in-flight resolution so concurrent
|
|
42
6
|
* callers share one round-trip, but drops it on rejection so a transient
|
|
@@ -87,16 +51,15 @@ export declare const identityCodec: ResourceCodec;
|
|
|
87
51
|
* @param options.collectionId {string}
|
|
88
52
|
* @param [options.override] {EncryptionOverride} per-handle override; wins
|
|
89
53
|
* over the marker and skips the marker read
|
|
90
|
-
* @param options.
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* when there is no override and the client has a keystore
|
|
54
|
+
* @param [options.capability] {IZcap} the handle's bound capability, used for
|
|
55
|
+
* the marker-discovery describe (which happens only when there is no
|
|
56
|
+
* override and the client has a keystore)
|
|
94
57
|
* @returns {Promise<ResourceCodec>}
|
|
95
58
|
*/
|
|
96
|
-
export declare function resolveCodec(context: ClientContext, { spaceId, collectionId, override,
|
|
59
|
+
export declare function resolveCodec(context: ClientContext, { spaceId, collectionId, override, capability }: {
|
|
97
60
|
spaceId: string;
|
|
98
61
|
collectionId: string;
|
|
99
62
|
override?: EncryptionOverride;
|
|
100
|
-
|
|
63
|
+
capability?: IZcap;
|
|
101
64
|
}): Promise<ResourceCodec>;
|
|
102
65
|
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/internal/codec.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAIjD,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/internal/codec.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAIjD,OAAO,KAAK,EACV,kBAAkB,EAClB,KAAK,EAIN,MAAM,aAAa,CAAA;AAEpB;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAEvD;;;OAGG;gBACS,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC;IAIjD;;;;OAIG;IACH,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;IAiB7B;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,aAsC3B,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,EACE,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,UAAU,EACX,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB,GACA,OAAO,CAAC,aAAa,CAAC,CAgDxB"}
|
package/dist/internal/codec.js
CHANGED
|
@@ -1,30 +1,6 @@
|
|
|
1
1
|
import { prepareBody, parseResource } from './content.js';
|
|
2
2
|
import { describeCollection } from './describe.js';
|
|
3
3
|
import { EncryptionError } from '../errors.js';
|
|
4
|
-
/**
|
|
5
|
-
* Reads a Collection's declared `encryption` marker as a {@link MarkerReadResult},
|
|
6
|
-
* mapping an unreadable description (null/404 -- also what WAS returns for an
|
|
7
|
-
* unauthorized read) to `{ readable: false }`. The lazy `readMarker` thunk both
|
|
8
|
-
* the Collection and the standalone-Resource codec resolution pass to
|
|
9
|
-
* {@link resolveCodec}.
|
|
10
|
-
*
|
|
11
|
-
* @param context {ClientContext}
|
|
12
|
-
* @param options {object}
|
|
13
|
-
* @param options.spaceId {string}
|
|
14
|
-
* @param options.collectionId {string}
|
|
15
|
-
* @param [options.capability] {IZcap}
|
|
16
|
-
* @returns {Promise<MarkerReadResult>}
|
|
17
|
-
*/
|
|
18
|
-
export async function readCollectionMarker(context, { spaceId, collectionId, capability }) {
|
|
19
|
-
const description = await describeCollection(context, {
|
|
20
|
-
spaceId,
|
|
21
|
-
collectionId,
|
|
22
|
-
capability
|
|
23
|
-
});
|
|
24
|
-
return description === null
|
|
25
|
-
? { readable: false }
|
|
26
|
-
: { readable: true, encryption: description.encryption };
|
|
27
|
-
}
|
|
28
4
|
/**
|
|
29
5
|
* A per-handle codec cache. Memoizes the in-flight resolution so concurrent
|
|
30
6
|
* callers share one round-trip, but drops it on rejection so a transient
|
|
@@ -114,13 +90,12 @@ export const identityCodec = {
|
|
|
114
90
|
* @param options.collectionId {string}
|
|
115
91
|
* @param [options.override] {EncryptionOverride} per-handle override; wins
|
|
116
92
|
* over the marker and skips the marker read
|
|
117
|
-
* @param options.
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* when there is no override and the client has a keystore
|
|
93
|
+
* @param [options.capability] {IZcap} the handle's bound capability, used for
|
|
94
|
+
* the marker-discovery describe (which happens only when there is no
|
|
95
|
+
* override and the client has a keystore)
|
|
121
96
|
* @returns {Promise<ResourceCodec>}
|
|
122
97
|
*/
|
|
123
|
-
export async function resolveCodec(context, { spaceId, collectionId, override,
|
|
98
|
+
export async function resolveCodec(context, { spaceId, collectionId, override, capability }) {
|
|
124
99
|
// 1. A per-handle override wins and skips the marker read.
|
|
125
100
|
if (override !== undefined) {
|
|
126
101
|
if (override === 'plaintext') {
|
|
@@ -137,15 +112,19 @@ export async function resolveCodec(context, { spaceId, collectionId, override, r
|
|
|
137
112
|
if (!context.encryption) {
|
|
138
113
|
return identityCodec;
|
|
139
114
|
}
|
|
140
|
-
// 3. Otherwise the Collection's declared marker decides -- but
|
|
141
|
-
// could actually read
|
|
142
|
-
// capability cannot GET the collection description, and
|
|
143
|
-
// 404) is ambiguous: it is indistinguishable from
|
|
144
|
-
// encryption-capable client fails closed rather than
|
|
145
|
-
// plaintext and writing the caller's secret as
|
|
146
|
-
// a possibly-encrypted collection.
|
|
147
|
-
const
|
|
148
|
-
|
|
115
|
+
// 3. Otherwise the Collection's declared `encryption` marker decides -- but
|
|
116
|
+
// only if we could actually read the description. An unreadable description
|
|
117
|
+
// (a resource-scoped capability cannot GET the collection description, and
|
|
118
|
+
// WAS masks that as a 404) is ambiguous: it is indistinguishable from
|
|
119
|
+
// "absent", so an encryption-capable client fails closed rather than
|
|
120
|
+
// silently downgrading to plaintext and writing the caller's secret as
|
|
121
|
+
// server-visible plaintext into a possibly-encrypted collection.
|
|
122
|
+
const description = await describeCollection(context, {
|
|
123
|
+
spaceId,
|
|
124
|
+
collectionId,
|
|
125
|
+
capability
|
|
126
|
+
});
|
|
127
|
+
if (description === null) {
|
|
149
128
|
throw new EncryptionError(`Cannot determine whether collection ${spaceId}/${collectionId} is ` +
|
|
150
129
|
'encrypted: its description is not readable (a resource-scoped ' +
|
|
151
130
|
'capability cannot read the collection description, and WAS returns ' +
|
|
@@ -154,13 +133,13 @@ export async function resolveCodec(context, { spaceId, collectionId, override, r
|
|
|
154
133
|
"`{ encryption: 'plaintext' }` to write plaintext, or a scheme/keys " +
|
|
155
134
|
'override to encrypt.');
|
|
156
135
|
}
|
|
157
|
-
if (!
|
|
136
|
+
if (!description.encryption) {
|
|
158
137
|
return identityCodec;
|
|
159
138
|
}
|
|
160
139
|
return buildEncryptingCodec(context, {
|
|
161
140
|
spaceId,
|
|
162
141
|
collectionId,
|
|
163
|
-
scheme:
|
|
142
|
+
scheme: description.encryption.scheme
|
|
164
143
|
});
|
|
165
144
|
}
|
|
166
145
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/internal/codec.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/internal/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,11 +23,16 @@ export interface WritePrecondition {
|
|
|
23
23
|
* Returns `undefined` when no header is needed, matching the request layer's
|
|
24
24
|
* optional `headers`.
|
|
25
25
|
*
|
|
26
|
-
* @param
|
|
27
|
-
* @param [
|
|
26
|
+
* @param options {object}
|
|
27
|
+
* @param [options.contentType] {string} the body content-type, if any
|
|
28
|
+
* @param [options.precondition] {WritePrecondition} the conditional-write
|
|
29
|
+
* precondition
|
|
28
30
|
* @returns {Record<string, string> | undefined}
|
|
29
31
|
*/
|
|
30
|
-
export declare function writeHeaders(contentType
|
|
32
|
+
export declare function writeHeaders({ contentType, precondition }: {
|
|
33
|
+
contentType?: string;
|
|
34
|
+
precondition?: WritePrecondition;
|
|
35
|
+
}): Record<string, string> | undefined;
|
|
31
36
|
/**
|
|
32
37
|
* Reads the strong `ETag` validator a write/read response returned, or
|
|
33
38
|
* `undefined` when the backend sent none (it does not advertise the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,YAAiB,EAClB,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAYrC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAE1E"}
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* Returns `undefined` when no header is needed, matching the request layer's
|
|
5
5
|
* optional `headers`.
|
|
6
6
|
*
|
|
7
|
-
* @param
|
|
8
|
-
* @param [
|
|
7
|
+
* @param options {object}
|
|
8
|
+
* @param [options.contentType] {string} the body content-type, if any
|
|
9
|
+
* @param [options.precondition] {WritePrecondition} the conditional-write
|
|
10
|
+
* precondition
|
|
9
11
|
* @returns {Record<string, string> | undefined}
|
|
10
12
|
*/
|
|
11
|
-
export function writeHeaders(contentType, precondition = {}) {
|
|
13
|
+
export function writeHeaders({ contentType, precondition = {} }) {
|
|
12
14
|
const headers = {};
|
|
13
15
|
if (contentType) {
|
|
14
16
|
headers['content-type'] = contentType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional.js","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"AAqBA
|
|
1
|
+
{"version":3,"file":"conditional.js","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,WAAW,EACX,YAAY,GAAG,EAAE,EAIlB;IACC,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW,CAAA;IACvC,CAAC;IACD,IAAI,YAAY,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,OAAO,CAAA;IAC5C,CAAC;IACD,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,CAAA;IAChC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,QAA6B;IACpD,OAAO,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAA;AACnD,CAAC"}
|
|
@@ -76,13 +76,46 @@ export declare function isBlob(value: unknown): value is Blob;
|
|
|
76
76
|
*/
|
|
77
77
|
export declare function toPlainBytes(bytes: Uint8Array): Uint8Array;
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
79
|
+
* Write data classified by `resolvePayload`: binary (a `Blob`/`Uint8Array`
|
|
80
|
+
* with its resolved content-type), JSON (a plain object/array), or invalid (a
|
|
81
|
+
* bare primitive -- the caller throws its own error message).
|
|
82
|
+
*/
|
|
83
|
+
export type ResolvedPayload = {
|
|
84
|
+
kind: 'binary';
|
|
85
|
+
data: Blob | Uint8Array;
|
|
86
|
+
contentType: string;
|
|
87
|
+
} | {
|
|
88
|
+
kind: 'json';
|
|
89
|
+
} | {
|
|
90
|
+
kind: 'invalid';
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Classifies write data as binary or JSON and resolves the binary
|
|
94
|
+
* content-type -- the single source of the detection and precedence rules
|
|
95
|
+
* shared by the plaintext `prepareBody` and the EDV codec's document builder.
|
|
80
96
|
*
|
|
81
97
|
* The binary content-type resolves in precedence order: an explicit
|
|
82
|
-
* `
|
|
83
|
-
* `
|
|
84
|
-
*
|
|
85
|
-
*
|
|
98
|
+
* `contentType`, then a non-empty `Blob.type`, then a guess from the resource
|
|
99
|
+
* `id`'s extension, then `application/octet-stream`. (Coalescing with `||`
|
|
100
|
+
* rather than `??` so an empty-string `Blob.type` -- a typeless Blob -- falls
|
|
101
|
+
* through to the guess instead of becoming an empty content-type.)
|
|
102
|
+
*
|
|
103
|
+
* @param options {object}
|
|
104
|
+
* @param options.data {ResourceData} the resource content
|
|
105
|
+
* @param [options.contentType] {string} overrides the inferred content-type
|
|
106
|
+
* for binary data
|
|
107
|
+
* @param [options.id] {string} resource id used to guess a
|
|
108
|
+
* content-type by extension when none is given (binary data only)
|
|
109
|
+
* @returns {ResolvedPayload}
|
|
110
|
+
*/
|
|
111
|
+
export declare function resolvePayload({ data, contentType, id }: {
|
|
112
|
+
data: ResourceData;
|
|
113
|
+
contentType?: string;
|
|
114
|
+
id?: string;
|
|
115
|
+
}): ResolvedPayload;
|
|
116
|
+
/**
|
|
117
|
+
* Inspects write data and resolves it to a JSON or binary payload, using
|
|
118
|
+
* {@link resolvePayload} for the detection and content-type precedence rules.
|
|
86
119
|
*
|
|
87
120
|
* @param data {ResourceData} the resource content
|
|
88
121
|
* @param options {object}
|
|
@@ -110,9 +143,10 @@ export declare function prepareBody(data: ResourceData, options?: {
|
|
|
110
143
|
export declare function createdId(response: HttpResponse | null): string;
|
|
111
144
|
/**
|
|
112
145
|
* Unwraps a read response's pre-parsed JSON `data` as `T`, mapping a `null`
|
|
113
|
-
* response (a 404 that a `read` request resolved to `null`) to `null`.
|
|
114
|
-
*
|
|
115
|
-
*
|
|
146
|
+
* response (a 404 that a `read` request resolved to `null`) to `null`. The
|
|
147
|
+
* http-client leaves `data` undefined for a non-JSON content-type or a 204;
|
|
148
|
+
* that is also mapped to `null`, so the declared `T | null` is honest and a
|
|
149
|
+
* caller never dereferences `undefined` cast as `T`.
|
|
116
150
|
*
|
|
117
151
|
* @param response {HttpResponse | null}
|
|
118
152
|
* @returns {T | null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/internal/content.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/internal/content.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAUrD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAO9D;AA6BD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAK1D;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEvB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,WAAW,EACX,EAAE,EACH,EAAE;IACD,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,GAAG,eAAe,CAoBlB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,YAAY,CAiCd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,CAqB/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAIrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAE3E;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAS7B"}
|