@interop/was-conformance-suite 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +264 -0
  3. package/dist/cli/index.d.ts +3 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +69 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/cli/main.d.ts +64 -0
  8. package/dist/cli/main.d.ts.map +1 -0
  9. package/dist/cli/main.js +294 -0
  10. package/dist/cli/main.js.map +1 -0
  11. package/dist/cli/reporters/json.d.ts +32 -0
  12. package/dist/cli/reporters/json.d.ts.map +1 -0
  13. package/dist/cli/reporters/json.js +30 -0
  14. package/dist/cli/reporters/json.js.map +1 -0
  15. package/dist/cli/reporters/pretty.d.ts +21 -0
  16. package/dist/cli/reporters/pretty.d.ts.map +1 -0
  17. package/dist/cli/reporters/pretty.js +152 -0
  18. package/dist/cli/reporters/pretty.js.map +1 -0
  19. package/dist/harness/assert.d.ts +13 -0
  20. package/dist/harness/assert.d.ts.map +1 -0
  21. package/dist/harness/assert.js +13 -0
  22. package/dist/harness/assert.js.map +1 -0
  23. package/dist/harness/runner.d.ts +25 -0
  24. package/dist/harness/runner.d.ts.map +1 -0
  25. package/dist/harness/runner.js +240 -0
  26. package/dist/harness/runner.js.map +1 -0
  27. package/dist/harness/types.d.ts +199 -0
  28. package/dist/harness/types.d.ts.map +1 -0
  29. package/dist/harness/types.js +2 -0
  30. package/dist/harness/types.js.map +1 -0
  31. package/dist/helpers.d.ts +103 -0
  32. package/dist/helpers.d.ts.map +1 -0
  33. package/dist/helpers.js +195 -0
  34. package/dist/helpers.js.map +1 -0
  35. package/dist/index.d.ts +28 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +35 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/suites/changes-query-api.d.ts +9 -0
  40. package/dist/suites/changes-query-api.d.ts.map +1 -0
  41. package/dist/suites/changes-query-api.js +115 -0
  42. package/dist/suites/changes-query-api.js.map +1 -0
  43. package/dist/suites/client-backends.d.ts +11 -0
  44. package/dist/suites/client-backends.d.ts.map +1 -0
  45. package/dist/suites/client-backends.js +198 -0
  46. package/dist/suites/client-backends.js.map +1 -0
  47. package/dist/suites/client-delegation.d.ts +21 -0
  48. package/dist/suites/client-delegation.d.ts.map +1 -0
  49. package/dist/suites/client-delegation.js +94 -0
  50. package/dist/suites/client-delegation.js.map +1 -0
  51. package/dist/suites/client-export-import.d.ts +19 -0
  52. package/dist/suites/client-export-import.d.ts.map +1 -0
  53. package/dist/suites/client-export-import.js +74 -0
  54. package/dist/suites/client-export-import.js.map +1 -0
  55. package/dist/suites/client-resources.d.ts +11 -0
  56. package/dist/suites/client-resources.d.ts.map +1 -0
  57. package/dist/suites/client-resources.js +193 -0
  58. package/dist/suites/client-resources.js.map +1 -0
  59. package/dist/suites/client-spaces.d.ts +11 -0
  60. package/dist/suites/client-spaces.d.ts.map +1 -0
  61. package/dist/suites/client-spaces.js +347 -0
  62. package/dist/suites/client-spaces.js.map +1 -0
  63. package/dist/suites/collection-api.d.ts +7 -0
  64. package/dist/suites/collection-api.d.ts.map +1 -0
  65. package/dist/suites/collection-api.js +266 -0
  66. package/dist/suites/collection-api.js.map +1 -0
  67. package/dist/suites/encryption-marker-api.d.ts +9 -0
  68. package/dist/suites/encryption-marker-api.d.ts.map +1 -0
  69. package/dist/suites/encryption-marker-api.js +266 -0
  70. package/dist/suites/encryption-marker-api.js.map +1 -0
  71. package/dist/suites/index.d.ts +23 -0
  72. package/dist/suites/index.d.ts.map +1 -0
  73. package/dist/suites/index.js +32 -0
  74. package/dist/suites/index.js.map +1 -0
  75. package/dist/suites/policy-api.d.ts +12 -0
  76. package/dist/suites/policy-api.d.ts.map +1 -0
  77. package/dist/suites/policy-api.js +187 -0
  78. package/dist/suites/policy-api.js.map +1 -0
  79. package/dist/suites/resource-api.d.ts +8 -0
  80. package/dist/suites/resource-api.d.ts.map +1 -0
  81. package/dist/suites/resource-api.js +393 -0
  82. package/dist/suites/resource-api.js.map +1 -0
  83. package/dist/suites/server.d.ts +3 -0
  84. package/dist/suites/server.d.ts.map +1 -0
  85. package/dist/suites/server.js +25 -0
  86. package/dist/suites/server.js.map +1 -0
  87. package/dist/suites/spaces-api.d.ts +11 -0
  88. package/dist/suites/spaces-api.d.ts.map +1 -0
  89. package/dist/suites/spaces-api.js +411 -0
  90. package/dist/suites/spaces-api.js.map +1 -0
  91. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-api.js","sourceRoot":"","sources":["../../src/suites/collection-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Suite } from '../harness/types.js';
2
+ interface State {
3
+ alice: any;
4
+ bob: any;
5
+ createCollection: (json: object) => Promise<any>;
6
+ }
7
+ export declare const encryptionMarkerApi: Suite<State>;
8
+ export {};
9
+ //# sourceMappingURL=encryption-marker-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption-marker-api.d.ts","sourceRoot":"","sources":["../../src/suites/encryption-marker-api.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAgBhD,UAAU,KAAK;IACb,KAAK,EAAE,GAAG,CAAA;IACV,GAAG,EAAE,GAAG,CAAA;IACR,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CACjD;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAoS5C,CAAA"}
@@ -0,0 +1,266 @@
1
+ /*!
2
+ * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
+ */
4
+ /**
5
+ * WAS conformance tests -- Collection client-side encryption marker.
6
+ */
7
+ import assert from '../harness/assert.js';
8
+ import { Collection } from '@interop/was-client';
9
+ /**
10
+ * A minimal conforming EDV Encrypted Document: the stored representation for an
11
+ * `edv` Collection (a JSON object whose `jwe` member is a JWE-JSON envelope),
12
+ * reused for both a content write and a `/meta` `custom` envelope.
13
+ */
14
+ const edvDocument = {
15
+ id: 'z1',
16
+ sequence: 0,
17
+ indexed: [],
18
+ jwe: { protected: 'eyJhbGciOiJkaXI', ciphertext: 'c1phertext' }
19
+ };
20
+ export const encryptionMarkerApi = {
21
+ id: 'encryption-marker-api',
22
+ name: 'Encryption marker API',
23
+ setup: async (ctx) => {
24
+ const alice = { ...ctx.actors.alice };
25
+ const bob = { ...ctx.actors.bob };
26
+ alice.space1 = { id: ctx.generateId() };
27
+ await ctx.createSpace({
28
+ spaceDescription: {
29
+ id: alice.space1.id,
30
+ name: "Alice's Encryption Space",
31
+ controller: alice.did
32
+ },
33
+ rootClient: alice.rootClient
34
+ });
35
+ /** POSTs a Collection (raw, so an `encryption` marker can be sent). */
36
+ function createCollection(json) {
37
+ return alice.rootClient.request({
38
+ url: new URL(`/space/${alice.space1.id}/`, ctx.serverUrl).toString(),
39
+ method: 'POST',
40
+ action: 'POST',
41
+ json
42
+ });
43
+ }
44
+ return { alice, bob, createCollection };
45
+ },
46
+ teardown: async (ctx, state) => {
47
+ const { alice } = state;
48
+ try {
49
+ await alice.rootClient.request({
50
+ url: new URL(`/space/${alice.space1.id}`, ctx.serverUrl).toString(),
51
+ method: 'DELETE'
52
+ });
53
+ }
54
+ catch {
55
+ /* best-effort cleanup */
56
+ }
57
+ },
58
+ tests: [
59
+ {
60
+ id: 'encryption.persist-echo-marker',
61
+ name: '[root] persists and echoes the marker on create',
62
+ run: async (ctx, state) => {
63
+ const { serverUrl } = ctx;
64
+ const { alice, createCollection } = state;
65
+ const response = await createCollection({
66
+ id: 'vault',
67
+ name: 'Vault',
68
+ encryption: { scheme: 'edv' }
69
+ });
70
+ assert.equal(response.status, 201);
71
+ assert.deepStrictEqual(response.data.encryption, { scheme: 'edv' });
72
+ const read = await alice.rootClient.request({
73
+ url: new URL(`/space/${alice.space1.id}/vault`, serverUrl).toString(),
74
+ method: 'GET'
75
+ });
76
+ assert.deepStrictEqual(read.data.encryption, { scheme: 'edv' });
77
+ }
78
+ },
79
+ {
80
+ id: 'encryption.delegated-discovers-marker',
81
+ name: 'a delegated consumer discovers the marker by reading the Description',
82
+ run: async (ctx, state) => {
83
+ const { alice, bob } = state;
84
+ // Alice grants Bob read on the vault; Bob -- who did not create it --
85
+ // rebuilds a handle and reads the Description, seeing the marker (this is how
86
+ // a consuming app learns to decrypt with its own keys).
87
+ const zcap = await alice.was
88
+ .space(alice.space1.id)
89
+ .collection('vault')
90
+ .grant({ to: bob.did, actions: ['GET'] });
91
+ const handle = bob.was.fromCapability(zcap);
92
+ assert.ok(handle instanceof Collection);
93
+ const description = (await handle.describe());
94
+ assert.deepStrictEqual(description.encryption, { scheme: 'edv' });
95
+ }
96
+ },
97
+ {
98
+ id: 'encryption.malformed-marker-400',
99
+ name: '[root] rejects a malformed marker (400 invalid-request-body)',
100
+ specRefs: ['https://wallet.storage/spec#invalid-request-body'],
101
+ run: async (ctx, state) => {
102
+ const { createCollection } = state;
103
+ let expectedError;
104
+ try {
105
+ await createCollection({ id: 'bad', encryption: { foo: 1 } });
106
+ }
107
+ catch (err) {
108
+ expectedError = err;
109
+ }
110
+ assert.ok(expectedError, 'expected the malformed-marker create to be rejected');
111
+ assert.equal(expectedError.response.status, 400);
112
+ assert.equal(expectedError.data.type, 'https://wallet.storage/spec#invalid-request-body');
113
+ }
114
+ },
115
+ {
116
+ id: 'encryption.unrecognized-scheme-400',
117
+ name: '[root] rejects an unrecognized scheme (400 unsupported-encryption-scheme)',
118
+ specRefs: ['https://wallet.storage/spec#unsupported-encryption-scheme'],
119
+ run: async (ctx, state) => {
120
+ const { serverUrl } = ctx;
121
+ const { alice } = state;
122
+ // With v1 recognizing only `edv`, naming any other scheme -- whether on a
123
+ // fresh Collection or as a change to `vault` -- is rejected by the
124
+ // fail-closed scheme gate before the set-once `encryption-immutable` check
125
+ // could apply, so the stored marker cannot be corrupted either way.
126
+ let expectedError;
127
+ try {
128
+ await alice.rootClient.request({
129
+ url: new URL(`/space/${alice.space1.id}/vault`, serverUrl).toString(),
130
+ method: 'PUT',
131
+ action: 'PUT',
132
+ json: { id: 'vault', encryption: { scheme: 'other' } }
133
+ });
134
+ }
135
+ catch (err) {
136
+ expectedError = err;
137
+ }
138
+ assert.ok(expectedError, 'expected the unrecognized scheme to be rejected');
139
+ assert.equal(expectedError.response.status, 400);
140
+ assert.equal(expectedError.data.type, 'https://wallet.storage/spec#unsupported-encryption-scheme');
141
+ }
142
+ },
143
+ {
144
+ id: 'encryption.non-envelope-write-422',
145
+ name: '[root] rejects a non-envelope write into an encrypted Collection (422 scheme-mismatch)',
146
+ specRefs: ['https://wallet.storage/spec#encryption-scheme-mismatch'],
147
+ run: async (ctx, state) => {
148
+ const { serverUrl } = ctx;
149
+ const { alice } = state;
150
+ // The fail-closed guarantee (spec "Encryption Scheme Registry"): the `vault`
151
+ // Collection is `edv`, so a plaintext JSON write is structurally rejected --
152
+ // server-visible plaintext can never land in an encrypted Collection, even
153
+ // from a writer that forgets (or refuses) to encrypt.
154
+ let expectedError;
155
+ try {
156
+ await alice.rootClient.request({
157
+ url: new URL(`/space/${alice.space1.id}/vault/plaintext-doc`, serverUrl).toString(),
158
+ method: 'PUT',
159
+ action: 'PUT',
160
+ json: { hello: 'world' }
161
+ });
162
+ }
163
+ catch (err) {
164
+ expectedError = err;
165
+ }
166
+ assert.ok(expectedError, 'expected the plaintext write to be rejected');
167
+ assert.equal(expectedError.response.status, 422);
168
+ assert.equal(expectedError.data.type, 'https://wallet.storage/spec#encryption-scheme-mismatch');
169
+ }
170
+ },
171
+ {
172
+ id: 'encryption.accepts-edv-document',
173
+ name: '[root] accepts a conforming EDV Document into an encrypted Collection',
174
+ run: async (ctx, state) => {
175
+ const { serverUrl } = ctx;
176
+ const { alice } = state;
177
+ // The stored representation is an EDV Encrypted Document (`{ jwe, ... }`)
178
+ // under `application/json` -- what the EDV codec actually produces.
179
+ const response = await alice.rootClient.request({
180
+ url: new URL(`/space/${alice.space1.id}/vault/envelope-doc`, serverUrl).toString(),
181
+ method: 'PUT',
182
+ action: 'PUT',
183
+ body: new TextEncoder().encode(JSON.stringify(edvDocument)),
184
+ headers: { 'content-type': 'application/json' }
185
+ });
186
+ assert.equal(response.status, 204);
187
+ }
188
+ },
189
+ {
190
+ id: 'encryption.plaintext-meta-422',
191
+ name: '[root] rejects a plaintext `custom` on PUT /meta of an encrypted Collection (422)',
192
+ specRefs: ['https://wallet.storage/spec#encryption-scheme-mismatch'],
193
+ run: async (ctx, state) => {
194
+ const { serverUrl } = ctx;
195
+ const { alice } = state;
196
+ // Spec "Encrypted Collections": on an encrypted Collection a resource's
197
+ // user-writable `custom` metadata MUST be a conforming envelope, so a
198
+ // plaintext `{ name }` is fail-closed rejected -- server-visible plaintext
199
+ // name/tags can never land in an encrypted Collection.
200
+ let expectedError;
201
+ try {
202
+ await alice.rootClient.request({
203
+ url: new URL(`/space/${alice.space1.id}/vault/envelope-doc/meta`, serverUrl).toString(),
204
+ method: 'PUT',
205
+ action: 'PUT',
206
+ json: { custom: { name: 'leaked' } }
207
+ });
208
+ }
209
+ catch (err) {
210
+ expectedError = err;
211
+ }
212
+ assert.ok(expectedError, 'expected the plaintext /meta write to be rejected');
213
+ assert.equal(expectedError.response.status, 422);
214
+ assert.equal(expectedError.data.type, 'https://wallet.storage/spec#encryption-scheme-mismatch');
215
+ }
216
+ },
217
+ {
218
+ id: 'encryption.envelope-meta-etag',
219
+ name: '[root] accepts an envelope `custom` on PUT /meta and returns its metaVersion ETag',
220
+ optional: true,
221
+ run: async (ctx, state) => {
222
+ const { serverUrl } = ctx;
223
+ const { alice } = state;
224
+ const response = await alice.rootClient.request({
225
+ url: new URL(`/space/${alice.space1.id}/vault/envelope-doc/meta`, serverUrl).toString(),
226
+ method: 'PUT',
227
+ action: 'PUT',
228
+ json: { custom: edvDocument }
229
+ });
230
+ assert.equal(response.status, 204);
231
+ // The `/meta` sub-resource carries its own ETag (`metaVersion`).
232
+ assert.ok(response.headers.get('etag'), 'expected a /meta ETag');
233
+ // GET /meta returns the opaque envelope verbatim (no plaintext name leaked).
234
+ const read = await alice.rootClient.request({
235
+ url: new URL(`/space/${alice.space1.id}/vault/envelope-doc/meta`, serverUrl).toString(),
236
+ method: 'GET'
237
+ });
238
+ assert.deepStrictEqual(read.data.custom, edvDocument);
239
+ }
240
+ },
241
+ {
242
+ id: 'encryption.replicates-metadata-changes',
243
+ name: '[root] replicates the encrypted metadata edit in the changes feed',
244
+ optional: true,
245
+ run: async (ctx, state) => {
246
+ const { serverUrl } = ctx;
247
+ const { alice } = state;
248
+ // Decision 6: a metadata-only edit rides the change feed -- the resource
249
+ // re-surfaces carrying the opaque `custom` envelope and a `metaVersion`, so a
250
+ // replicating client picks up the metadata change without decryption.
251
+ const response = await alice.rootClient.request({
252
+ url: new URL(`/space/${alice.space1.id}/vault/query`, serverUrl).toString(),
253
+ method: 'POST',
254
+ action: 'POST',
255
+ json: { profile: 'changes', limit: 100 }
256
+ });
257
+ assert.equal(response.status, 200);
258
+ const doc = response.data.documents.find((entry) => entry.id === 'envelope-doc');
259
+ assert.ok(doc, 'expected the edited resource in the feed');
260
+ assert.deepStrictEqual(doc.custom, edvDocument);
261
+ assert.equal(typeof doc.metaVersion, 'number');
262
+ }
263
+ }
264
+ ]
265
+ };
266
+ //# sourceMappingURL=encryption-marker-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption-marker-api.js","sourceRoot":"","sources":["../../src/suites/encryption-marker-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
+ */
4
+ import type { Suite } from '../harness/types.js';
5
+ import { changesQueryApi } from './changes-query-api.js';
6
+ import { clientBackends } from './client-backends.js';
7
+ import { clientDelegation } from './client-delegation.js';
8
+ import { clientExportImport } from './client-export-import.js';
9
+ import { clientResources } from './client-resources.js';
10
+ import { clientSpaces } from './client-spaces.js';
11
+ import { collectionApi } from './collection-api.js';
12
+ import { encryptionMarkerApi } from './encryption-marker-api.js';
13
+ import { policyApi } from './policy-api.js';
14
+ import { resourceApi } from './resource-api.js';
15
+ import { server } from './server.js';
16
+ import { spacesApi } from './spaces-api.js';
17
+ /**
18
+ * The full conformance registry, in canonical run order (matching the
19
+ * original file-alphabetical execution order of the ported suite).
20
+ */
21
+ export declare const suites: Array<Suite<any>>;
22
+ export { changesQueryApi, clientBackends, clientDelegation, clientExportImport, clientResources, clientSpaces, collectionApi, encryptionMarkerApi, policyApi, resourceApi, server, spacesApi };
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,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,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;AAE3C;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAapC,CAAA;AAED,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,EACV,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { changesQueryApi } from './changes-query-api.js';
2
+ import { clientBackends } from './client-backends.js';
3
+ import { clientDelegation } from './client-delegation.js';
4
+ import { clientExportImport } from './client-export-import.js';
5
+ import { clientResources } from './client-resources.js';
6
+ import { clientSpaces } from './client-spaces.js';
7
+ import { collectionApi } from './collection-api.js';
8
+ import { encryptionMarkerApi } from './encryption-marker-api.js';
9
+ import { policyApi } from './policy-api.js';
10
+ import { resourceApi } from './resource-api.js';
11
+ import { server } from './server.js';
12
+ import { spacesApi } from './spaces-api.js';
13
+ /**
14
+ * The full conformance registry, in canonical run order (matching the
15
+ * original file-alphabetical execution order of the ported suite).
16
+ */
17
+ export const suites = [
18
+ changesQueryApi,
19
+ clientBackends,
20
+ clientDelegation,
21
+ clientExportImport,
22
+ clientResources,
23
+ clientSpaces,
24
+ collectionApi,
25
+ encryptionMarkerApi,
26
+ policyApi,
27
+ resourceApi,
28
+ server,
29
+ spacesApi
30
+ ];
31
+ export { changesQueryApi, clientBackends, clientDelegation, clientExportImport, clientResources, clientSpaces, collectionApi, encryptionMarkerApi, policyApi, resourceApi, server, spacesApi };
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/suites/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,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,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;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAsB;IACvC,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,WAAW;IACX,MAAM;IACN,SAAS;CACV,CAAA;AAED,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,EACV,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { Suite } from '../harness/types.js';
2
+ interface State {
3
+ alice: any;
4
+ bob: any;
5
+ collectionId: string;
6
+ resourceId: string;
7
+ resourceUrl: () => string;
8
+ policyUrl: () => string;
9
+ }
10
+ export declare const policyApi: Suite<State>;
11
+ export {};
12
+ //# sourceMappingURL=policy-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-api.d.ts","sourceRoot":"","sources":["../../src/suites/policy-api.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEhD,UAAU,KAAK;IACb,KAAK,EAAE,GAAG,CAAA;IACV,GAAG,EAAE,GAAG,CAAA;IACR,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,MAAM,CAAA;CACxB;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,KAAK,CAqNlC,CAAA"}
@@ -0,0 +1,187 @@
1
+ /*!
2
+ * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
+ */
4
+ /**
5
+ * WAS conformance tests -- Access-control policy (public-read fallback).
6
+ */
7
+ import assert from '../harness/assert.js';
8
+ export const policyApi = {
9
+ id: 'policy-api',
10
+ name: 'Access-control policy API',
11
+ setup: async (ctx) => {
12
+ const alice = { ...ctx.actors.alice };
13
+ const bob = { ...ctx.actors.bob };
14
+ const collectionId = 'public-credentials';
15
+ const resourceId = 'public-vc';
16
+ const resourceUrl = () => new URL(`/space/${alice.space1.id}/${collectionId}/${resourceId}`, ctx.serverUrl).toString();
17
+ const policyUrl = () => new URL(`/space/${alice.space1.id}/${collectionId}/policy`, ctx.serverUrl).toString();
18
+ alice.space1 = { id: ctx.generateId() };
19
+ await ctx.createSpace({
20
+ spaceDescription: {
21
+ id: alice.space1.id,
22
+ name: "Alice's Space #1",
23
+ controller: alice.did
24
+ },
25
+ rootClient: alice.rootClient
26
+ });
27
+ await alice.rootClient.request({
28
+ url: new URL(`/space/${alice.space1.id}/`, ctx.serverUrl).toString(),
29
+ method: 'POST',
30
+ json: { id: collectionId, name: 'Public Credentials' }
31
+ });
32
+ await alice.rootClient.request({
33
+ url: resourceUrl(),
34
+ method: 'PUT',
35
+ json: { id: resourceId, name: 'A shared Verifiable Credential' }
36
+ });
37
+ return { alice, bob, collectionId, resourceId, resourceUrl, policyUrl };
38
+ },
39
+ teardown: async (ctx, state) => {
40
+ const { alice } = state;
41
+ try {
42
+ await alice.rootClient.request({
43
+ url: new URL(`/space/${alice.space1.id}`, ctx.serverUrl).toString(),
44
+ method: 'DELETE'
45
+ });
46
+ }
47
+ catch {
48
+ /* best-effort cleanup */
49
+ }
50
+ },
51
+ tests: [
52
+ {
53
+ id: 'policy.anonymous-no-policy-404',
54
+ name: 'anonymous GET of a resource with no policy is denied (404)',
55
+ run: async (ctx, state) => {
56
+ const { resourceUrl } = state;
57
+ const response = await fetch(resourceUrl());
58
+ assert.equal(response.status, 404);
59
+ }
60
+ },
61
+ {
62
+ id: 'policy.put-collection-public-201',
63
+ name: '[controller] PUT a PublicCanRead policy on the collection (201)',
64
+ run: async (ctx, state) => {
65
+ const { alice, policyUrl } = state;
66
+ const response = await alice.rootClient.request({
67
+ url: policyUrl(),
68
+ method: 'PUT',
69
+ json: { type: 'PublicCanRead' }
70
+ });
71
+ assert.equal(response.status, 201);
72
+ }
73
+ },
74
+ {
75
+ id: 'policy.anonymous-public-read-200',
76
+ name: 'anonymous GET of a resource in a PublicCanRead collection succeeds (200)',
77
+ run: async (ctx, state) => {
78
+ const { resourceUrl } = state;
79
+ const response = await fetch(resourceUrl());
80
+ assert.equal(response.status, 200);
81
+ const body = (await response.json());
82
+ assert.equal(body.name, 'A shared Verifiable Credential');
83
+ }
84
+ },
85
+ {
86
+ id: 'policy.unauthorized-falls-back-200',
87
+ name: 'a caller whose capability does not authorize falls back to policy (200)',
88
+ run: async (ctx, state) => {
89
+ const { bob, resourceUrl } = state;
90
+ // Bob is not the Space controller, so his capability does not verify; the
91
+ // PublicCanRead policy grants the read.
92
+ const response = await bob.rootClient.request({
93
+ url: resourceUrl(),
94
+ method: 'GET'
95
+ });
96
+ assert.equal(response.status, 200);
97
+ }
98
+ },
99
+ {
100
+ id: 'policy.anonymous-write-rejected-401',
101
+ name: 'anonymous write is still rejected (401) on a public collection',
102
+ run: async (ctx, state) => {
103
+ const { resourceUrl } = state;
104
+ const response = await fetch(resourceUrl(), {
105
+ method: 'PUT',
106
+ headers: { 'content-type': 'application/json' },
107
+ body: JSON.stringify({ name: 'anon write' })
108
+ });
109
+ assert.equal(response.status, 401);
110
+ }
111
+ },
112
+ {
113
+ id: 'policy.linkset-advertises-policy',
114
+ name: 'the collection linkset advertises the policy resource',
115
+ specRefs: ['https://wallet.storage/spec#policy'],
116
+ run: async (ctx, state) => {
117
+ const { serverUrl } = ctx;
118
+ const { alice, collectionId } = state;
119
+ const response = await fetch(new URL(`/space/${alice.space1.id}/${collectionId}/linkset`, serverUrl));
120
+ assert.equal(response.status, 200);
121
+ assert.match(response.headers.get('content-type'), /application\/linkset\+json/);
122
+ const body = (await response.json());
123
+ assert.equal(body.linkset[0]['https://wallet.storage/spec#policy'][0].href, `/space/${alice.space1.id}/${collectionId}/policy`);
124
+ }
125
+ },
126
+ {
127
+ id: 'policy.delete-revokes-404',
128
+ name: '[controller] DELETE the policy revokes public access (404)',
129
+ run: async (ctx, state) => {
130
+ const { alice, policyUrl, resourceUrl } = state;
131
+ const del = await alice.rootClient.request({
132
+ url: policyUrl(),
133
+ method: 'DELETE'
134
+ });
135
+ assert.equal(del.status, 204);
136
+ const response = await fetch(resourceUrl());
137
+ assert.equal(response.status, 404);
138
+ }
139
+ },
140
+ {
141
+ id: 'policy.resource-level-grant',
142
+ name: 'a resource-level policy grants public read on a single resource',
143
+ run: async (ctx, state) => {
144
+ const { serverUrl } = ctx;
145
+ const { alice, resourceUrl } = state;
146
+ // The collection policy was just removed, so this isolates resource-level.
147
+ await alice.rootClient.request({
148
+ url: new URL(`${resourceUrl()}/policy`, serverUrl).toString(),
149
+ method: 'PUT',
150
+ json: { type: 'PublicCanRead' }
151
+ });
152
+ const response = await fetch(resourceUrl());
153
+ assert.equal(response.status, 200);
154
+ // Clean up so it does not mask the space-level inheritance check below.
155
+ await alice.rootClient.request({
156
+ url: new URL(`${resourceUrl()}/policy`, serverUrl).toString(),
157
+ method: 'DELETE'
158
+ });
159
+ assert.equal((await fetch(resourceUrl())).status, 404);
160
+ }
161
+ },
162
+ {
163
+ id: 'policy.space-level-inherited',
164
+ name: 'a space-level policy is inherited by resources',
165
+ run: async (ctx, state) => {
166
+ const { serverUrl } = ctx;
167
+ const { alice, collectionId } = state;
168
+ // A second resource with no policy of its own.
169
+ const inheritedUrl = new URL(`/space/${alice.space1.id}/${collectionId}/inherited-vc`, serverUrl).toString();
170
+ await alice.rootClient.request({
171
+ url: inheritedUrl,
172
+ method: 'PUT',
173
+ json: { id: 'inherited-vc', name: 'Inherited' }
174
+ });
175
+ assert.equal((await fetch(inheritedUrl)).status, 404);
176
+ // A space-level PublicCanRead policy makes it readable by inheritance.
177
+ await alice.rootClient.request({
178
+ url: new URL(`/space/${alice.space1.id}/policy`, serverUrl).toString(),
179
+ method: 'PUT',
180
+ json: { type: 'PublicCanRead' }
181
+ });
182
+ assert.equal((await fetch(inheritedUrl)).status, 200);
183
+ }
184
+ }
185
+ ]
186
+ };
187
+ //# sourceMappingURL=policy-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-api.js","sourceRoot":"","sources":["../../src/suites/policy-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Suite } from '../harness/types.js';
2
+ interface State {
3
+ alice: any;
4
+ bob: any;
5
+ }
6
+ export declare const resourceApi: Suite<State>;
7
+ export {};
8
+ //# sourceMappingURL=resource-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-api.d.ts","sourceRoot":"","sources":["../../src/suites/resource-api.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEhD,UAAU,KAAK;IACb,KAAK,EAAE,GAAG,CAAA;IACV,GAAG,EAAE,GAAG,CAAA;CACT;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAgepC,CAAA"}