@interop/was-conformance-suite 0.7.0 → 0.8.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 +1 -0
- package/dist/suites/index.d.ts +2 -1
- package/dist/suites/index.d.ts.map +1 -1
- package/dist/suites/index.js +3 -1
- package/dist/suites/index.js.map +1 -1
- package/dist/suites/plaintext-declaration-api.d.ts +12 -0
- package/dist/suites/plaintext-declaration-api.d.ts.map +1 -0
- package/dist/suites/plaintext-declaration-api.js +371 -0
- package/dist/suites/plaintext-declaration-api.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -138,6 +138,7 @@ The available suite ids (for `--suite`) are:
|
|
|
138
138
|
| `digest-api` | Request body integrity (Digest) negatives |
|
|
139
139
|
| `encryption-descriptor-api` | Encryption descriptor API |
|
|
140
140
|
| `invocation-target-api` | Capability invocationTarget binding |
|
|
141
|
+
| `plaintext-declaration-api` | Plaintext declaration API |
|
|
141
142
|
| `policy-api` | Access-control policy API |
|
|
142
143
|
| `resource-api` | Resource API |
|
|
143
144
|
| `server` | Server |
|
package/dist/suites/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ import { delegationCryptosuitesApi } from './delegation-cryptosuites-api.js';
|
|
|
17
17
|
import { digestApi } from './digest-api.js';
|
|
18
18
|
import { encryptionDescriptorApi } from './encryption-descriptor-api.js';
|
|
19
19
|
import { invocationTargetApi } from './invocation-target-api.js';
|
|
20
|
+
import { plaintextDeclarationApi } from './plaintext-declaration-api.js';
|
|
20
21
|
import { policyApi } from './policy-api.js';
|
|
21
22
|
import { resourceApi } from './resource-api.js';
|
|
22
23
|
import { server } from './server.js';
|
|
@@ -27,5 +28,5 @@ import { writeValidationApi } from './write-validation-api.js';
|
|
|
27
28
|
* original file-alphabetical execution order of the ported suite).
|
|
28
29
|
*/
|
|
29
30
|
export declare const suites: Array<Suite<any>>;
|
|
30
|
-
export { authzOrderingApi, blindedIndexApi, changesQueryApi, chunksApi, clientBackends, clientDelegation, clientExportImport, clientResources, clientSpaces, collectionApi, conditionalRequestsApi, delegationCryptosuitesApi, digestApi, encryptionDescriptorApi, invocationTargetApi, policyApi, resourceApi, server, spacesApi, writeValidationApi };
|
|
31
|
+
export { authzOrderingApi, blindedIndexApi, changesQueryApi, chunksApi, clientBackends, clientDelegation, clientExportImport, clientResources, clientSpaces, collectionApi, conditionalRequestsApi, delegationCryptosuitesApi, digestApi, encryptionDescriptorApi, invocationTargetApi, plaintextDeclarationApi, policyApi, resourceApi, server, spacesApi, writeValidationApi };
|
|
31
32
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/suites/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/suites/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAsBpC,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,SAAS,EACT,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,EACT,kBAAkB,EACnB,CAAA"}
|
package/dist/suites/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { delegationCryptosuitesApi } from './delegation-cryptosuites-api.js';
|
|
|
13
13
|
import { digestApi } from './digest-api.js';
|
|
14
14
|
import { encryptionDescriptorApi } from './encryption-descriptor-api.js';
|
|
15
15
|
import { invocationTargetApi } from './invocation-target-api.js';
|
|
16
|
+
import { plaintextDeclarationApi } from './plaintext-declaration-api.js';
|
|
16
17
|
import { policyApi } from './policy-api.js';
|
|
17
18
|
import { resourceApi } from './resource-api.js';
|
|
18
19
|
import { server } from './server.js';
|
|
@@ -38,11 +39,12 @@ export const suites = [
|
|
|
38
39
|
digestApi,
|
|
39
40
|
encryptionDescriptorApi,
|
|
40
41
|
invocationTargetApi,
|
|
42
|
+
plaintextDeclarationApi,
|
|
41
43
|
policyApi,
|
|
42
44
|
resourceApi,
|
|
43
45
|
server,
|
|
44
46
|
spacesApi,
|
|
45
47
|
writeValidationApi
|
|
46
48
|
];
|
|
47
|
-
export { authzOrderingApi, blindedIndexApi, changesQueryApi, chunksApi, clientBackends, clientDelegation, clientExportImport, clientResources, clientSpaces, collectionApi, conditionalRequestsApi, delegationCryptosuitesApi, digestApi, encryptionDescriptorApi, invocationTargetApi, policyApi, resourceApi, server, spacesApi, writeValidationApi };
|
|
49
|
+
export { authzOrderingApi, blindedIndexApi, changesQueryApi, chunksApi, clientBackends, clientDelegation, clientExportImport, clientResources, clientSpaces, collectionApi, conditionalRequestsApi, delegationCryptosuitesApi, digestApi, encryptionDescriptorApi, invocationTargetApi, plaintextDeclarationApi, policyApi, resourceApi, server, spacesApi, writeValidationApi };
|
|
48
50
|
//# sourceMappingURL=index.js.map
|
package/dist/suites/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/suites/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAsB;IACvC,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,sBAAsB;IACtB,yBAAyB;IACzB,SAAS;IACT,uBAAuB;IACvB,mBAAmB;IACnB,SAAS;IACT,WAAW;IACX,MAAM;IACN,SAAS;IACT,kBAAkB;CACnB,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,SAAS,EACT,uBAAuB,EACvB,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,EACT,kBAAkB,EACnB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/suites/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAsB;IACvC,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,sBAAsB;IACtB,yBAAyB;IACzB,SAAS;IACT,uBAAuB;IACvB,mBAAmB;IACnB,uBAAuB;IACvB,SAAS;IACT,WAAW;IACX,MAAM;IACN,SAAS;IACT,kBAAkB;CACnB,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,SAAS,EACT,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,EACT,kBAAkB,EACnB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Suite } from '../harness/types.js';
|
|
2
|
+
interface State {
|
|
3
|
+
alice: any;
|
|
4
|
+
collectionUrl: (collectionId: string) => string;
|
|
5
|
+
resourceUrl: (collectionId: string, resourceId: string) => string;
|
|
6
|
+
createCollection: (json: object) => Promise<any>;
|
|
7
|
+
putCollection: (collectionId: string, json: object) => Promise<any>;
|
|
8
|
+
readCollection: (collectionId: string) => Promise<any>;
|
|
9
|
+
}
|
|
10
|
+
export declare const plaintextDeclarationApi: Suite<State>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=plaintext-declaration-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plaintext-declaration-api.d.ts","sourceRoot":"","sources":["../../src/suites/plaintext-declaration-api.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEhD,UAAU,KAAK;IACb,KAAK,EAAE,GAAG,CAAA;IACV,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/C,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAA;IACjE,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAChD,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACnE,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CACvD;AAoBD,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,KAAK,CAkZhD,CAAA"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* WAS conformance tests -- the Collection `plaintext` member and its `indexes`
|
|
6
|
+
* declaration (server-side plaintext indexing for the `equality` query
|
|
7
|
+
* profile). `plaintext` is the counterpart of `encryption`: at most one of the
|
|
8
|
+
* two is present on a Collection Description, by presence, so an empty
|
|
9
|
+
* `plaintext` object still excludes `encryption`. Unlike the set-once
|
|
10
|
+
* `encryption`, `plaintext` is updatable for the Collection's life; `{}` is
|
|
11
|
+
* its empty state.
|
|
12
|
+
*
|
|
13
|
+
* The suite is optional until the spec text for `plaintext` and the `equality`
|
|
14
|
+
* profile is published; the shape is settled by the spec's decision record on
|
|
15
|
+
* plaintext and encryption counterparts.
|
|
16
|
+
*/
|
|
17
|
+
import assert from '../harness/assert.js';
|
|
18
|
+
/**
|
|
19
|
+
* Runs a request expected to fail and returns the thrown error, failing the
|
|
20
|
+
* test when the request unexpectedly succeeds.
|
|
21
|
+
* @param request {Promise<unknown>}
|
|
22
|
+
* @param message {string}
|
|
23
|
+
* @returns {Promise<any>}
|
|
24
|
+
*/
|
|
25
|
+
async function rejection(request, message) {
|
|
26
|
+
let expectedError;
|
|
27
|
+
try {
|
|
28
|
+
await request;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
expectedError = err;
|
|
32
|
+
}
|
|
33
|
+
assert.ok(expectedError, message);
|
|
34
|
+
return expectedError;
|
|
35
|
+
}
|
|
36
|
+
export const plaintextDeclarationApi = {
|
|
37
|
+
id: 'plaintext-declaration-api',
|
|
38
|
+
name: 'Plaintext declaration API',
|
|
39
|
+
optional: true,
|
|
40
|
+
specRefs: ['https://wallet.storage/spec#collection-data-model'],
|
|
41
|
+
setup: async (ctx) => {
|
|
42
|
+
const { serverUrl } = ctx;
|
|
43
|
+
const alice = { ...ctx.actors.alice };
|
|
44
|
+
alice.space1 = { id: ctx.generateId() };
|
|
45
|
+
await ctx.createSpace({
|
|
46
|
+
spaceDescription: {
|
|
47
|
+
id: alice.space1.id,
|
|
48
|
+
name: "Alice's Plaintext Space",
|
|
49
|
+
controller: alice.did
|
|
50
|
+
},
|
|
51
|
+
rootClient: alice.rootClient
|
|
52
|
+
});
|
|
53
|
+
function collectionUrl(collectionId) {
|
|
54
|
+
return new URL(`/space/${alice.space1.id}/${collectionId}`, serverUrl).toString();
|
|
55
|
+
}
|
|
56
|
+
function resourceUrl(collectionId, resourceId) {
|
|
57
|
+
return new URL(`/space/${alice.space1.id}/${collectionId}/${resourceId}`, serverUrl).toString();
|
|
58
|
+
}
|
|
59
|
+
/** POSTs a Collection (raw, so a `plaintext` member can be sent). */
|
|
60
|
+
function createCollection(json) {
|
|
61
|
+
return alice.rootClient.request({
|
|
62
|
+
url: new URL(`/space/${alice.space1.id}/`, serverUrl).toString(),
|
|
63
|
+
method: 'POST',
|
|
64
|
+
action: 'POST',
|
|
65
|
+
json
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** PUTs a Collection Description by id (create-by-id or update). */
|
|
69
|
+
function putCollection(collectionId, json) {
|
|
70
|
+
return alice.rootClient.request({
|
|
71
|
+
url: collectionUrl(collectionId),
|
|
72
|
+
method: 'PUT',
|
|
73
|
+
action: 'PUT',
|
|
74
|
+
json
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function readCollection(collectionId) {
|
|
78
|
+
return alice.rootClient.request({
|
|
79
|
+
url: collectionUrl(collectionId),
|
|
80
|
+
method: 'GET'
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
alice,
|
|
85
|
+
collectionUrl,
|
|
86
|
+
resourceUrl,
|
|
87
|
+
createCollection,
|
|
88
|
+
putCollection,
|
|
89
|
+
readCollection
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
teardown: async (ctx, state) => {
|
|
93
|
+
const { alice } = state;
|
|
94
|
+
try {
|
|
95
|
+
await alice.rootClient.request({
|
|
96
|
+
url: new URL(`/space/${alice.space1.id}`, ctx.serverUrl).toString(),
|
|
97
|
+
method: 'DELETE'
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
/* best-effort cleanup */
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
tests: [
|
|
105
|
+
{
|
|
106
|
+
id: 'plaintext.persist-echo-post',
|
|
107
|
+
name: '[root] persists and echoes plaintext.indexes on POST create and on GET',
|
|
108
|
+
specRefs: ['https://wallet.storage/spec#collection-data-model'],
|
|
109
|
+
run: async (ctx, state) => {
|
|
110
|
+
const { createCollection, readCollection } = state;
|
|
111
|
+
const plaintext = {
|
|
112
|
+
indexes: [
|
|
113
|
+
'parentId',
|
|
114
|
+
{ name: 'author' },
|
|
115
|
+
{ name: 'slug', source: 'content', unique: true }
|
|
116
|
+
]
|
|
117
|
+
};
|
|
118
|
+
const response = await createCollection({
|
|
119
|
+
id: 'posts',
|
|
120
|
+
name: 'Posts',
|
|
121
|
+
plaintext
|
|
122
|
+
});
|
|
123
|
+
assert.equal(response.status, 201);
|
|
124
|
+
assert.deepStrictEqual(response.data.plaintext, plaintext);
|
|
125
|
+
assert.equal(response.data.encryption, undefined);
|
|
126
|
+
const read = await readCollection('posts');
|
|
127
|
+
assert.deepStrictEqual(read.data.plaintext, plaintext);
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'plaintext.persist-echo-put',
|
|
132
|
+
name: '[root] persists and echoes plaintext.indexes on PUT create-by-id',
|
|
133
|
+
specRefs: ['https://wallet.storage/spec#collection-data-model'],
|
|
134
|
+
run: async (ctx, state) => {
|
|
135
|
+
const { putCollection, readCollection } = state;
|
|
136
|
+
const response = await putCollection('posts-put', {
|
|
137
|
+
id: 'posts-put',
|
|
138
|
+
name: 'Posts (PUT)',
|
|
139
|
+
plaintext: { indexes: ['parentId'] }
|
|
140
|
+
});
|
|
141
|
+
assert.equal(response.status, 201);
|
|
142
|
+
assert.deepStrictEqual(response.data.plaintext, {
|
|
143
|
+
indexes: ['parentId']
|
|
144
|
+
});
|
|
145
|
+
const read = await readCollection('posts-put');
|
|
146
|
+
assert.deepStrictEqual(read.data.plaintext, { indexes: ['parentId'] });
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
id: 'plaintext.both-on-create-400',
|
|
151
|
+
name: '[root] plaintext and encryption both present on create is invalid-request-body (400), even an empty plaintext',
|
|
152
|
+
specRefs: [
|
|
153
|
+
'https://wallet.storage/spec#collection-data-model',
|
|
154
|
+
'https://wallet.storage/spec#invalid-request-body'
|
|
155
|
+
],
|
|
156
|
+
run: async (ctx, state) => {
|
|
157
|
+
const { createCollection, putCollection } = state;
|
|
158
|
+
const bodies = [
|
|
159
|
+
{
|
|
160
|
+
id: 'both-post',
|
|
161
|
+
plaintext: { indexes: ['parentId'] },
|
|
162
|
+
encryption: { scheme: 'edv' }
|
|
163
|
+
},
|
|
164
|
+
// Exclusion is by presence: an empty `plaintext` still excludes.
|
|
165
|
+
{
|
|
166
|
+
id: 'both-post-empty',
|
|
167
|
+
plaintext: {},
|
|
168
|
+
encryption: { scheme: 'edv' }
|
|
169
|
+
}
|
|
170
|
+
];
|
|
171
|
+
for (const body of bodies) {
|
|
172
|
+
const postError = await rejection(createCollection(body), `expected the POST create of ${body.id} to be rejected`);
|
|
173
|
+
assert.equal(postError.response.status, 400);
|
|
174
|
+
assert.equal(postError.data.type, 'https://wallet.storage/spec#invalid-request-body');
|
|
175
|
+
const putError = await rejection(putCollection(body.id, body), `expected the PUT create of ${body.id} to be rejected`);
|
|
176
|
+
assert.equal(putError.response.status, 400);
|
|
177
|
+
assert.equal(putError.data.type, 'https://wallet.storage/spec#invalid-request-body');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
id: 'plaintext.both-on-update-400',
|
|
183
|
+
name: '[root] an update whose result carries both plaintext and encryption is invalid-request-body (400), in either direction',
|
|
184
|
+
specRefs: [
|
|
185
|
+
'https://wallet.storage/spec#collection-data-model',
|
|
186
|
+
'https://wallet.storage/spec#invalid-request-body'
|
|
187
|
+
],
|
|
188
|
+
run: async (ctx, state) => {
|
|
189
|
+
const { createCollection, putCollection, readCollection } = state;
|
|
190
|
+
// Adding `plaintext` (even empty) to an encrypted Collection.
|
|
191
|
+
await createCollection({
|
|
192
|
+
id: 'enc-first',
|
|
193
|
+
encryption: { scheme: 'edv' }
|
|
194
|
+
});
|
|
195
|
+
for (const plaintext of [{ indexes: ['parentId'] }, {}]) {
|
|
196
|
+
const err = await rejection(putCollection('enc-first', { id: 'enc-first', plaintext }), 'expected adding plaintext to an encrypted Collection to be rejected');
|
|
197
|
+
assert.equal(err.response.status, 400);
|
|
198
|
+
assert.equal(err.data.type, 'https://wallet.storage/spec#invalid-request-body');
|
|
199
|
+
}
|
|
200
|
+
const encrypted = await readCollection('enc-first');
|
|
201
|
+
assert.deepStrictEqual(encrypted.data.encryption, { scheme: 'edv' });
|
|
202
|
+
assert.equal(encrypted.data.plaintext, undefined);
|
|
203
|
+
// Adding `encryption` to a Collection carrying `plaintext`.
|
|
204
|
+
await createCollection({ id: 'plain-first', plaintext: {} });
|
|
205
|
+
const err = await rejection(putCollection('plain-first', {
|
|
206
|
+
id: 'plain-first',
|
|
207
|
+
encryption: { scheme: 'edv' }
|
|
208
|
+
}), 'expected adding encryption to a plaintext-declared Collection to be rejected');
|
|
209
|
+
assert.equal(err.response.status, 400);
|
|
210
|
+
assert.equal(err.data.type, 'https://wallet.storage/spec#invalid-request-body');
|
|
211
|
+
const plain = await readCollection('plain-first');
|
|
212
|
+
assert.deepStrictEqual(plain.data.plaintext, {});
|
|
213
|
+
assert.equal(plain.data.encryption, undefined);
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
id: 'plaintext.malformed-400',
|
|
218
|
+
name: '[root] rejects a malformed plaintext member (400 invalid-request-body)',
|
|
219
|
+
specRefs: ['https://wallet.storage/spec#invalid-request-body'],
|
|
220
|
+
run: async (ctx, state) => {
|
|
221
|
+
const { createCollection, readCollection } = state;
|
|
222
|
+
const malformed = [
|
|
223
|
+
{ label: 'a non-object plaintext', plaintext: ['parentId'] },
|
|
224
|
+
{ label: 'a non-array indexes', plaintext: { indexes: 'parentId' } },
|
|
225
|
+
{ label: 'an empty-string entry', plaintext: { indexes: [''] } },
|
|
226
|
+
{
|
|
227
|
+
label: 'an object entry without a name',
|
|
228
|
+
plaintext: { indexes: [{ source: 'content' }] }
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
label: 'a duplicate name across sources',
|
|
232
|
+
plaintext: { indexes: ['tag', { name: 'tag', source: 'custom' }] }
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
label: 'an unknown source',
|
|
236
|
+
plaintext: { indexes: [{ name: 'x', source: 'elsewhere' }] }
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
label: 'a non-boolean unique',
|
|
240
|
+
plaintext: { indexes: [{ name: 'x', unique: 'yes' }] }
|
|
241
|
+
}
|
|
242
|
+
];
|
|
243
|
+
for (const { label, plaintext } of malformed) {
|
|
244
|
+
const err = await rejection(createCollection({ id: 'malformed', plaintext }), `expected ${label} to be rejected`);
|
|
245
|
+
assert.equal(err.response.status, 400, label);
|
|
246
|
+
assert.equal(err.data.type, 'https://wallet.storage/spec#invalid-request-body', label);
|
|
247
|
+
}
|
|
248
|
+
// None of the rejected creates left a Collection behind.
|
|
249
|
+
const err = await rejection(readCollection('malformed'), 'expected no Collection to exist after the rejected creates');
|
|
250
|
+
assert.equal(err.response.status, 404);
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
id: 'plaintext.updatable',
|
|
255
|
+
name: '[root] plaintext is updatable on an existing Collection: added, changed, and emptied with {}; an absent member is left untouched',
|
|
256
|
+
specRefs: ['https://wallet.storage/spec#collection-data-model'],
|
|
257
|
+
run: async (ctx, state) => {
|
|
258
|
+
const { createCollection, putCollection, readCollection } = state;
|
|
259
|
+
// Born without `plaintext`.
|
|
260
|
+
await createCollection({ id: 'evolving', name: 'Evolving' });
|
|
261
|
+
let read = await readCollection('evolving');
|
|
262
|
+
assert.equal(read.data.plaintext, undefined);
|
|
263
|
+
// Add.
|
|
264
|
+
await putCollection('evolving', {
|
|
265
|
+
id: 'evolving',
|
|
266
|
+
plaintext: { indexes: ['parentId'] }
|
|
267
|
+
});
|
|
268
|
+
read = await readCollection('evolving');
|
|
269
|
+
assert.deepStrictEqual(read.data.plaintext, { indexes: ['parentId'] });
|
|
270
|
+
// An update that omits `plaintext` leaves it untouched.
|
|
271
|
+
await putCollection('evolving', { id: 'evolving', name: 'Renamed' });
|
|
272
|
+
read = await readCollection('evolving');
|
|
273
|
+
assert.equal(read.data.name, 'Renamed');
|
|
274
|
+
assert.deepStrictEqual(read.data.plaintext, { indexes: ['parentId'] });
|
|
275
|
+
// Change: the supplied object replaces the stored one.
|
|
276
|
+
await putCollection('evolving', {
|
|
277
|
+
id: 'evolving',
|
|
278
|
+
plaintext: { indexes: ['author', { name: 'slug', unique: true }] }
|
|
279
|
+
});
|
|
280
|
+
read = await readCollection('evolving');
|
|
281
|
+
assert.deepStrictEqual(read.data.plaintext, {
|
|
282
|
+
indexes: ['author', { name: 'slug', unique: true }]
|
|
283
|
+
});
|
|
284
|
+
// `{}` is the empty state: still present, no declaration.
|
|
285
|
+
await putCollection('evolving', { id: 'evolving', plaintext: {} });
|
|
286
|
+
read = await readCollection('evolving');
|
|
287
|
+
assert.deepStrictEqual(read.data.plaintext, {});
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
id: 'plaintext.unique-conflict-409',
|
|
292
|
+
name: '[root] a write claiming a held unique plaintext attribute value is id-conflict (409)',
|
|
293
|
+
specRefs: [
|
|
294
|
+
'https://wallet.storage/spec#collection-data-model',
|
|
295
|
+
'https://wallet.storage/spec#id-conflict'
|
|
296
|
+
],
|
|
297
|
+
run: async (ctx, state) => {
|
|
298
|
+
const { alice, createCollection, resourceUrl } = state;
|
|
299
|
+
await createCollection({
|
|
300
|
+
id: 'unique-slugs',
|
|
301
|
+
plaintext: { indexes: [{ name: 'slug', unique: true }] }
|
|
302
|
+
});
|
|
303
|
+
const holder = await alice.rootClient.request({
|
|
304
|
+
url: resourceUrl('unique-slugs', 'holder'),
|
|
305
|
+
method: 'PUT',
|
|
306
|
+
action: 'PUT',
|
|
307
|
+
json: { id: 'holder', slug: 'hello-world' }
|
|
308
|
+
});
|
|
309
|
+
assert.ok([200, 201, 204].includes(holder.status));
|
|
310
|
+
// A different Resource claiming the same `(slug, 'hello-world')`.
|
|
311
|
+
const conflictError = await rejection(alice.rootClient.request({
|
|
312
|
+
url: resourceUrl('unique-slugs', 'claimant'),
|
|
313
|
+
method: 'PUT',
|
|
314
|
+
action: 'PUT',
|
|
315
|
+
json: { id: 'claimant', slug: 'hello-world' }
|
|
316
|
+
}), 'expected the conflicting claim to be rejected');
|
|
317
|
+
assert.equal(conflictError.response.status, 409);
|
|
318
|
+
assert.equal(conflictError.data.type, 'https://wallet.storage/spec#id-conflict');
|
|
319
|
+
// The holder re-asserting its own value never self-conflicts.
|
|
320
|
+
const reassert = await alice.rootClient.request({
|
|
321
|
+
url: resourceUrl('unique-slugs', 'holder'),
|
|
322
|
+
method: 'PUT',
|
|
323
|
+
action: 'PUT',
|
|
324
|
+
json: { id: 'holder', slug: 'hello-world', edited: true }
|
|
325
|
+
});
|
|
326
|
+
assert.ok([200, 201, 204].includes(reassert.status));
|
|
327
|
+
// A different value coexists freely.
|
|
328
|
+
const other = await alice.rootClient.request({
|
|
329
|
+
url: resourceUrl('unique-slugs', 'other'),
|
|
330
|
+
method: 'PUT',
|
|
331
|
+
action: 'PUT',
|
|
332
|
+
json: { id: 'other', slug: 'second-post' }
|
|
333
|
+
});
|
|
334
|
+
assert.ok([200, 201, 204].includes(other.status));
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
id: 'plaintext.unique-declare-conflict-409',
|
|
339
|
+
name: '[root] promoting an attribute to unique over Resources that already collide is id-conflict (409)',
|
|
340
|
+
specRefs: [
|
|
341
|
+
'https://wallet.storage/spec#collection-data-model',
|
|
342
|
+
'https://wallet.storage/spec#id-conflict'
|
|
343
|
+
],
|
|
344
|
+
run: async (ctx, state) => {
|
|
345
|
+
const { alice, createCollection, putCollection, readCollection, resourceUrl } = state;
|
|
346
|
+
await createCollection({
|
|
347
|
+
id: 'late-unique',
|
|
348
|
+
plaintext: { indexes: ['slug'] }
|
|
349
|
+
});
|
|
350
|
+
for (const resourceId of ['first', 'second']) {
|
|
351
|
+
await alice.rootClient.request({
|
|
352
|
+
url: resourceUrl('late-unique', resourceId),
|
|
353
|
+
method: 'PUT',
|
|
354
|
+
action: 'PUT',
|
|
355
|
+
json: { id: resourceId, slug: 'same' }
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
const err = await rejection(putCollection('late-unique', {
|
|
359
|
+
id: 'late-unique',
|
|
360
|
+
plaintext: { indexes: [{ name: 'slug', unique: true }] }
|
|
361
|
+
}), 'expected the unique promotion over colliding Resources to be rejected');
|
|
362
|
+
assert.equal(err.response.status, 409);
|
|
363
|
+
assert.equal(err.data.type, 'https://wallet.storage/spec#id-conflict');
|
|
364
|
+
// The stored declaration is unchanged.
|
|
365
|
+
const read = await readCollection('late-unique');
|
|
366
|
+
assert.deepStrictEqual(read.data.plaintext, { indexes: ['slug'] });
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
};
|
|
371
|
+
//# sourceMappingURL=plaintext-declaration-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plaintext-declaration-api.js","sourceRoot":"","sources":["../../src/suites/plaintext-declaration-api.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interop/was-conformance-suite",
|
|
3
3
|
"description": "Conformance test suite for Wallet Attached Storage (WAS) servers, runnable as a CLI or in the browser.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "pnpm run clear && tsc",
|