@substrat-run/contract-tests 0.117.0 → 0.119.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/dist/capability-attachment-suite.d.ts +3 -0
- package/dist/capability-attachment-suite.d.ts.map +1 -0
- package/dist/capability-attachment-suite.js +284 -0
- package/dist/capability-attachment-suite.js.map +1 -0
- package/dist/capability-expiry-suite.d.ts.map +1 -1
- package/dist/capability-expiry-suite.js +40 -1
- package/dist/capability-expiry-suite.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/job-run-suite.d.ts.map +1 -1
- package/dist/job-run-suite.js +250 -2
- package/dist/job-run-suite.js.map +1 -1
- package/dist/modules.d.ts +400 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +94 -1
- package/dist/modules.js.map +1 -1
- package/dist/peer-suite.d.ts +8 -0
- package/dist/peer-suite.d.ts.map +1 -0
- package/dist/peer-suite.js +357 -0
- package/dist/peer-suite.js.map +1 -0
- package/dist/scope-host-suite.d.ts.map +1 -1
- package/dist/scope-host-suite.js +102 -15
- package/dist/scope-host-suite.js.map +1 -1
- package/dist/system-switch-suite.d.ts.map +1 -1
- package/dist/system-switch-suite.js +57 -1
- package/dist/system-switch-suite.js.map +1 -1
- package/dist/vertical-events-suite.d.ts +282 -0
- package/dist/vertical-events-suite.d.ts.map +1 -0
- package/dist/vertical-events-suite.js +584 -0
- package/dist/vertical-events-suite.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-attachment-suite.d.ts","sourceRoot":"","sources":["../src/capability-attachment-suite.ts"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAwB9D,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,CA6RN"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract suite for attachments through a capability (#1686) — a link share of a folder
|
|
3
|
+
* delivering the FILES under it, where `getCapabilityScope` reaches `invoke` only.
|
|
4
|
+
*
|
|
5
|
+
* What it pins, in one sentence: **a capability reads an attachment exactly when the
|
|
6
|
+
* checker, asked as the capability, would let it read the attachment's entity — never
|
|
7
|
+
* outside its subtree, never past its minter's authority now, never once revoked — and it
|
|
8
|
+
* writes no attachment at all.**
|
|
9
|
+
*
|
|
10
|
+
* Every refusal is paired with the allow beside it, so a surface that refused everything
|
|
11
|
+
* cannot pass:
|
|
12
|
+
*
|
|
13
|
+
* 1. **The subtree.** A capability over folder F opens F's own file, a file in F and a file
|
|
14
|
+
* two levels down, and lists them; it is refused the file on the sibling G's document,
|
|
15
|
+
* and that refusal lands in the denial log against `{ capability }`.
|
|
16
|
+
* 2. **The minter, now.** When the minter's role is taken away after the mint, the next
|
|
17
|
+
* download is refused; given back, it is allowed again.
|
|
18
|
+
* 3. **Revocation.** A surface obtained before a revoke refuses the next call on it, while
|
|
19
|
+
* a live twin keeps reading. (The expiry TRANSITION needs a clock a test can move, so it
|
|
20
|
+
* is asserted on the pure host — `capabilityExpiryContractSuite`, #956.)
|
|
21
|
+
* 4. **No writes.** Upload and remove are refused even for a capability that CARRIES the
|
|
22
|
+
* write key — which its own invoke of a writing operation shows it does — and each
|
|
23
|
+
* refusal is recorded; no file appears and none goes. A remove naming an unknown id is
|
|
24
|
+
* refused with the same answer.
|
|
25
|
+
* 5. **A download is not a use.** `uses` counts exchanges; opening and listing leave it
|
|
26
|
+
* where the exchange put it.
|
|
27
|
+
* 6. **The door's other refusals.** An operation allowlist names no attachment verb, so it
|
|
28
|
+
* refuses them all (`forbidden`), next to the listed operation working; a token that is
|
|
29
|
+
* not a session is `unauthenticated`.
|
|
30
|
+
*/
|
|
31
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
32
|
+
import { errorCodeOf, permissionKey, platformActorId, principalId, scopeId, tenantId, } from '@substrat-run/contracts';
|
|
33
|
+
import { ulid } from '@substrat-run/kernel';
|
|
34
|
+
import { capMod } from './modules.js';
|
|
35
|
+
const CAP_READ = permissionKey.parse('cap:read');
|
|
36
|
+
const CAP_WRITE = permissionKey.parse('cap:write');
|
|
37
|
+
const CAP_ADMIN = permissionKey.parse('cap:admin');
|
|
38
|
+
const folder = (id) => ({ entityType: 'folder', entityId: id });
|
|
39
|
+
const doc = (id) => ({ entityType: 'doc', entityId: id });
|
|
40
|
+
const bytes = (s) => new TextEncoder().encode(s);
|
|
41
|
+
const text = (b) => new TextDecoder().decode(b);
|
|
42
|
+
const refusal = (p) => p.then(() => undefined, (e) => e);
|
|
43
|
+
export function capabilityAttachmentContractSuite(adapterName, makeFixture) {
|
|
44
|
+
describe(`capability attachments (#1686): ${adapterName}`, () => {
|
|
45
|
+
let fixture;
|
|
46
|
+
let host;
|
|
47
|
+
const t1 = tenantId.parse(ulid());
|
|
48
|
+
const s1 = scopeId.parse(ulid());
|
|
49
|
+
const alice = principalId.parse(ulid()); // owner: read + write + admin, tenant-wide
|
|
50
|
+
const staff = platformActorId.parse(ulid());
|
|
51
|
+
// One file per place in the tree. The tree in s1: F ─┬─ d1 G ── d3
|
|
52
|
+
// └─ F2 ── d4
|
|
53
|
+
const files = {};
|
|
54
|
+
const as = (who) => host.getScope(who, t1, s1);
|
|
55
|
+
const share = async (who, spec) => (await as(who)).invoke('cap/share', spec);
|
|
56
|
+
const sessionOf = async (secret) => {
|
|
57
|
+
const ex = await host.exchangeCapability(t1, s1, secret);
|
|
58
|
+
if (ex?.kind !== 'session')
|
|
59
|
+
throw new Error(`expected a session, got ${JSON.stringify(ex)}`);
|
|
60
|
+
return ex.sessionToken;
|
|
61
|
+
};
|
|
62
|
+
const filesOf = async (token) => {
|
|
63
|
+
if (!host.getCapabilityAttachments)
|
|
64
|
+
throw new Error('host has no getCapabilityAttachments');
|
|
65
|
+
return host.getCapabilityAttachments(token, t1, s1);
|
|
66
|
+
};
|
|
67
|
+
const denialsOf = async (capability) => (await (await as(alice)).invoke('cap/denials')).filter((d) => d.actor === JSON.stringify({ capability }));
|
|
68
|
+
const recordOf = async (id) => {
|
|
69
|
+
const all = await (await as(alice)).invoke('cap/list', { includeRevoked: true });
|
|
70
|
+
const found = all.find((r) => r.id === id);
|
|
71
|
+
if (!found)
|
|
72
|
+
throw new Error(`no capability ${id}`);
|
|
73
|
+
return found;
|
|
74
|
+
};
|
|
75
|
+
beforeAll(async () => {
|
|
76
|
+
fixture = await makeFixture();
|
|
77
|
+
host = fixture.host;
|
|
78
|
+
host.registerModule(capMod);
|
|
79
|
+
await host.admin.createTenant(staff, {
|
|
80
|
+
id: t1,
|
|
81
|
+
slug: `cap-att-${t1.toLowerCase()}`,
|
|
82
|
+
name: 'Cap Attachments',
|
|
83
|
+
});
|
|
84
|
+
await host.admin.grantEntitlement(staff, t1, 'cap');
|
|
85
|
+
await host.provisionScope(staff, { tenantId: t1, scopeId: s1, vertical: 'cap-vertical' });
|
|
86
|
+
await host.admin.activateScope(staff, t1, s1);
|
|
87
|
+
await host.provisionBlobStore(staff, { tenantId: t1, vertical: 'cap-vertical', binding: 'ATTACHMENTS' });
|
|
88
|
+
await host.admin.defineRole(staff, t1, {
|
|
89
|
+
key: 'owner',
|
|
90
|
+
permissions: [CAP_READ, CAP_WRITE, CAP_ADMIN],
|
|
91
|
+
source: 'vertical',
|
|
92
|
+
});
|
|
93
|
+
await host.admin.defineRole(staff, t1, { key: 'reader', permissions: [CAP_READ], source: 'vertical' });
|
|
94
|
+
await host.admin.assignRole(staff, {
|
|
95
|
+
principalId: alice,
|
|
96
|
+
roleKey: 'owner',
|
|
97
|
+
node: { tenantId: t1, scopeId: null },
|
|
98
|
+
});
|
|
99
|
+
const stub = await as(alice);
|
|
100
|
+
const link = (child, parent) => stub.invoke('cap/link', { child, parent });
|
|
101
|
+
await link(doc('d1'), folder('F'));
|
|
102
|
+
await link(folder('F2'), folder('F'));
|
|
103
|
+
await link(doc('d4'), folder('F2'));
|
|
104
|
+
await link(doc('d3'), folder('G'));
|
|
105
|
+
const mine = await host.attachments(alice, t1, s1);
|
|
106
|
+
const put = (entity, name) => mine.upload({ entity, filename: `${name}.txt`, contentType: 'text/plain', visibility: 'internal', body: bytes(name) });
|
|
107
|
+
files.F = await put(folder('F'), 'F');
|
|
108
|
+
files.d1 = await put(doc('d1'), 'd1');
|
|
109
|
+
files.d4 = await put(doc('d4'), 'd4');
|
|
110
|
+
files.d3 = await put(doc('d3'), 'd3');
|
|
111
|
+
});
|
|
112
|
+
afterAll(async () => {
|
|
113
|
+
await fixture.cleanup();
|
|
114
|
+
});
|
|
115
|
+
describe('reads: exactly the subtree', () => {
|
|
116
|
+
let minted;
|
|
117
|
+
let surface;
|
|
118
|
+
beforeAll(async () => {
|
|
119
|
+
minted = await share(alice, { entity: folder('F'), permissions: [CAP_READ] });
|
|
120
|
+
surface = await filesOf(await sessionOf(minted.secret));
|
|
121
|
+
});
|
|
122
|
+
it('opens the shared folder’s own file, a file in it, and one two levels down — bytes intact', async () => {
|
|
123
|
+
for (const key of ['F', 'd1', 'd4']) {
|
|
124
|
+
const opened = await surface.open(files[key].id);
|
|
125
|
+
expect(opened?.record.id).toBe(files[key].id);
|
|
126
|
+
expect(text(opened.body)).toBe(key);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
it('lists the files of an entity in its subtree', async () => {
|
|
130
|
+
expect((await surface.list(doc('d4'))).map((r) => r.id)).toEqual([files.d4.id]);
|
|
131
|
+
});
|
|
132
|
+
it('is refused the file on the sibling folder’s document — opened or listed — and it is recorded', async () => {
|
|
133
|
+
expect(errorCodeOf(await refusal(surface.open(files.d3.id)))).toBe('permission_denied');
|
|
134
|
+
expect(errorCodeOf(await refusal(surface.list(doc('d3'))))).toBe('permission_denied');
|
|
135
|
+
const rows = await denialsOf(minted.id);
|
|
136
|
+
expect(rows).toContainEqual(expect.objectContaining({ permission: 'cap:read', operation: 'attachments.open' }));
|
|
137
|
+
expect(rows).toContainEqual(expect.objectContaining({ permission: 'cap:read', operation: 'attachments.list' }));
|
|
138
|
+
// The twin: the owner opens the very same file.
|
|
139
|
+
expect((await (await host.attachments(alice, t1, s1)).open(files.d3.id))?.record.id).toBe(files.d3.id);
|
|
140
|
+
});
|
|
141
|
+
it('an unknown id is null, as it is for a principal', async () => {
|
|
142
|
+
expect(await surface.open(ulid())).toBeNull();
|
|
143
|
+
});
|
|
144
|
+
it('a download is not a use: opening and listing leave `uses` where the exchange put it', async () => {
|
|
145
|
+
const before = (await recordOf(minted.id)).uses;
|
|
146
|
+
await surface.open(files.d1.id);
|
|
147
|
+
await surface.list(doc('d1'));
|
|
148
|
+
await surface.open(files.F.id);
|
|
149
|
+
expect((await recordOf(minted.id)).uses).toBe(before);
|
|
150
|
+
// The twin: an exchange IS a use.
|
|
151
|
+
await sessionOf(minted.secret);
|
|
152
|
+
expect((await recordOf(minted.id)).uses).toBe(before + 1);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('never more than the minter can read, now', () => {
|
|
156
|
+
it('taking the minter’s role away refuses the next download; giving it back allows it again', async () => {
|
|
157
|
+
const dan = principalId.parse(ulid());
|
|
158
|
+
const role = { principalId: dan, roleKey: 'reader', node: { tenantId: t1, scopeId: s1 } };
|
|
159
|
+
await host.admin.assignRole(staff, role);
|
|
160
|
+
const minted = await share(dan, { entity: folder('F'), permissions: [CAP_READ] });
|
|
161
|
+
const surface = await filesOf(await sessionOf(minted.secret));
|
|
162
|
+
expect((await surface.open(files.d1.id))?.record.id).toBe(files.d1.id);
|
|
163
|
+
await host.admin.unassignRole(staff, role);
|
|
164
|
+
expect(errorCodeOf(await refusal(surface.open(files.d1.id)))).toBe('permission_denied');
|
|
165
|
+
expect(await denialsOf(minted.id)).toContainEqual(expect.objectContaining({ permission: 'cap:read', operation: 'attachments.open' }));
|
|
166
|
+
await host.admin.assignRole(staff, role);
|
|
167
|
+
expect((await surface.open(files.d1.id))?.record.id).toBe(files.d1.id);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('revocation', () => {
|
|
171
|
+
it('a revoke refuses the next call on a surface obtained before it; a live twin keeps reading', async () => {
|
|
172
|
+
const doomed = await share(alice, { entity: folder('F'), permissions: [CAP_READ] });
|
|
173
|
+
const twin = await share(alice, { entity: folder('F'), permissions: [CAP_READ] });
|
|
174
|
+
const doomedFiles = await filesOf(await sessionOf(doomed.secret));
|
|
175
|
+
const twinFiles = await filesOf(await sessionOf(twin.secret));
|
|
176
|
+
expect((await doomedFiles.open(files.d1.id))?.record.id).toBe(files.d1.id);
|
|
177
|
+
await (await as(alice)).invoke('cap/unshare', { id: doomed.id });
|
|
178
|
+
expect(errorCodeOf(await refusal(doomedFiles.open(files.d1.id)))).toBe('unauthenticated');
|
|
179
|
+
expect(errorCodeOf(await refusal(doomedFiles.list(doc('d1'))))).toBe('unauthenticated');
|
|
180
|
+
expect((await twinFiles.open(files.d1.id))?.record.id).toBe(files.d1.id);
|
|
181
|
+
// A door refusal, not an enforced check: nothing is recorded against it.
|
|
182
|
+
expect(await denialsOf(doomed.id)).toEqual([]);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('writes are refused — whatever the capability carries', () => {
|
|
186
|
+
let minted;
|
|
187
|
+
let surface;
|
|
188
|
+
beforeAll(async () => {
|
|
189
|
+
minted = await share(alice, { entity: folder('F'), permissions: [CAP_READ, CAP_WRITE] });
|
|
190
|
+
surface = await filesOf(await sessionOf(minted.secret));
|
|
191
|
+
});
|
|
192
|
+
it('carries the write key: its own invoke of a writing operation goes through', async () => {
|
|
193
|
+
const stub = await host.getCapabilityScope(await sessionOf(minted.secret), t1, s1);
|
|
194
|
+
await expect(stub.invoke('cap/comment', { doc: doc('d1'), body: 'ok' })).resolves.toEqual({
|
|
195
|
+
commented: true,
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
it('an upload is refused, recorded against the capability, and adds no file', async () => {
|
|
199
|
+
const err = await refusal(surface.upload({
|
|
200
|
+
entity: doc('d1'),
|
|
201
|
+
filename: 'planted.txt',
|
|
202
|
+
contentType: 'text/plain',
|
|
203
|
+
visibility: 'internal',
|
|
204
|
+
body: bytes('planted'),
|
|
205
|
+
}));
|
|
206
|
+
expect(errorCodeOf(err)).toBe('permission_denied');
|
|
207
|
+
expect(await denialsOf(minted.id)).toContainEqual(expect.objectContaining({ permission: 'cap:write', operation: 'attachments.upload' }));
|
|
208
|
+
const mine = await host.attachments(alice, t1, s1);
|
|
209
|
+
expect((await mine.list(doc('d1'))).map((r) => r.id)).toEqual([files.d1.id]);
|
|
210
|
+
});
|
|
211
|
+
it('a remove (and so a replace) is refused, recorded, and the file stays', async () => {
|
|
212
|
+
const err = await refusal(surface.remove(files.d1.id));
|
|
213
|
+
expect(errorCodeOf(err)).toBe('permission_denied');
|
|
214
|
+
expect(await denialsOf(minted.id)).toContainEqual(expect.objectContaining({ permission: 'cap:write', operation: 'attachments.remove' }));
|
|
215
|
+
const opened = await (await host.attachments(alice, t1, s1)).open(files.d1.id);
|
|
216
|
+
expect(text(opened.body)).toBe('d1');
|
|
217
|
+
});
|
|
218
|
+
it('a remove naming an unknown id gets the same refusal, and there is no key to record', async () => {
|
|
219
|
+
const before = (await denialsOf(minted.id)).length;
|
|
220
|
+
expect(errorCodeOf(await refusal(surface.remove(ulid())))).toBe('permission_denied');
|
|
221
|
+
expect((await denialsOf(minted.id)).length).toBe(before);
|
|
222
|
+
});
|
|
223
|
+
it('the twin: the owner, holding the same write key, uploads and removes', async () => {
|
|
224
|
+
const mine = await host.attachments(alice, t1, s1);
|
|
225
|
+
const rec = await mine.upload({
|
|
226
|
+
entity: doc('d1'),
|
|
227
|
+
filename: 'owner.txt',
|
|
228
|
+
contentType: 'text/plain',
|
|
229
|
+
visibility: 'internal',
|
|
230
|
+
body: bytes('owner'),
|
|
231
|
+
});
|
|
232
|
+
expect((await mine.remove(rec.id))?.id).toBe(rec.id);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('the door', () => {
|
|
236
|
+
it('an operation allowlist names no attachment verb, so it refuses them; the listed operation works', async () => {
|
|
237
|
+
const minted = await share(alice, {
|
|
238
|
+
entity: folder('F'),
|
|
239
|
+
permissions: [CAP_READ],
|
|
240
|
+
operations: ['cap/read'],
|
|
241
|
+
});
|
|
242
|
+
const token = await sessionOf(minted.secret);
|
|
243
|
+
const surface = await filesOf(token);
|
|
244
|
+
expect(errorCodeOf(await refusal(surface.open(files.d1.id)))).toBe('forbidden');
|
|
245
|
+
expect(errorCodeOf(await refusal(surface.list(doc('d1'))))).toBe('forbidden');
|
|
246
|
+
const stub = await host.getCapabilityScope(token, t1, s1);
|
|
247
|
+
await expect(stub.invoke('cap/read', { entity: doc('d1') })).resolves.toBeTruthy();
|
|
248
|
+
});
|
|
249
|
+
// The order is the session, then the target lookup, then the check: a dead link must
|
|
250
|
+
// learn nothing about which entity types take attachments.
|
|
251
|
+
const undeclared = { entityType: 'widget', entityId: 'w1' };
|
|
252
|
+
const plantWidget = (surface) => surface.upload({
|
|
253
|
+
entity: undeclared,
|
|
254
|
+
filename: 'w.txt',
|
|
255
|
+
contentType: 'text/plain',
|
|
256
|
+
visibility: 'internal',
|
|
257
|
+
body: bytes('w'),
|
|
258
|
+
});
|
|
259
|
+
it('a revoked link asking about an entity type that takes no files is told `unauthenticated` — nothing about the type', async () => {
|
|
260
|
+
const minted = await share(alice, { entity: folder('F'), permissions: [CAP_READ] });
|
|
261
|
+
const surface = await filesOf(await sessionOf(minted.secret));
|
|
262
|
+
await (await as(alice)).invoke('cap/unshare', { id: minted.id });
|
|
263
|
+
for (const attempt of [surface.list(undeclared), plantWidget(surface)]) {
|
|
264
|
+
const err = await refusal(attempt);
|
|
265
|
+
expect(errorCodeOf(err)).toBe('unauthenticated');
|
|
266
|
+
expect(err.message).not.toMatch(/widget|attachmentTargets/);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
it('the twin: a live link asking the same is told the type is not an attachment target', async () => {
|
|
270
|
+
const minted = await share(alice, { entity: folder('F'), permissions: [CAP_READ] });
|
|
271
|
+
const surface = await filesOf(await sessionOf(minted.secret));
|
|
272
|
+
for (const attempt of [surface.list(undeclared), plantWidget(surface)]) {
|
|
273
|
+
const err = await refusal(attempt);
|
|
274
|
+
expect(errorCodeOf(err)).not.toBe('unauthenticated');
|
|
275
|
+
expect(err.message).toMatch(/'widget' in attachmentTargets/);
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
it('a token that is not a session is refused at the door', async () => {
|
|
279
|
+
expect(errorCodeOf(await refusal(filesOf('not-a-session')))).toBe('unauthenticated');
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=capability-attachment-suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-attachment-suite.js","sourceRoot":"","sources":["../src/capability-attachment-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-expiry-suite.d.ts","sourceRoot":"","sources":["../src/capability-expiry-suite.ts"],"names":[],"mappings":"AA6BA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"capability-expiry-suite.d.ts","sourceRoot":"","sources":["../src/capability-expiry-suite.ts"],"names":[],"mappings":"AA6BA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAY9B,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAQD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,GAClD,IAAI,CAwJN"}
|
|
@@ -18,6 +18,8 @@ import { CAPABILITY_SESSION_TTL_MS, errorCodeOf, permissionKey, platformActorId,
|
|
|
18
18
|
import { CAPABILITY_SESSION_PRUNE_BATCH, ulid, } from '@substrat-run/kernel';
|
|
19
19
|
import { capMod } from './modules.js';
|
|
20
20
|
const CAP_READ = permissionKey.parse('cap:read');
|
|
21
|
+
// #1686: the folder's attachment write key, so the owner can put a file there to download.
|
|
22
|
+
const CAP_ADMIN = permissionKey.parse('cap:admin');
|
|
21
23
|
const START = '2026-03-01T09:00:00.000Z';
|
|
22
24
|
const MINUTE = 60_000;
|
|
23
25
|
const HOUR = 60 * MINUTE;
|
|
@@ -52,7 +54,11 @@ export function capabilityExpiryContractSuite(adapterName, makeFixture) {
|
|
|
52
54
|
await host.admin.grantEntitlement(staff, t1, 'cap');
|
|
53
55
|
await host.provisionScope(staff, { tenantId: t1, scopeId: s1, vertical: 'cap-vertical' });
|
|
54
56
|
await host.admin.activateScope(staff, t1, s1);
|
|
55
|
-
await host.admin.defineRole(staff, t1, {
|
|
57
|
+
await host.admin.defineRole(staff, t1, {
|
|
58
|
+
key: 'owner',
|
|
59
|
+
permissions: [CAP_READ, CAP_ADMIN],
|
|
60
|
+
source: 'vertical',
|
|
61
|
+
});
|
|
56
62
|
await host.admin.assignRole(staff, {
|
|
57
63
|
principalId: alice,
|
|
58
64
|
roleKey: 'owner',
|
|
@@ -73,6 +79,39 @@ export function capabilityExpiryContractSuite(adapterName, makeFixture) {
|
|
|
73
79
|
expect(errorCodeOf(await refusal(read(token)))).toBe('unauthenticated');
|
|
74
80
|
expect(await host.exchangeCapability(t1, s1, minted.secret)).toBeNull();
|
|
75
81
|
});
|
|
82
|
+
it('a download (#1686) works until the capability expires and not after — nor past the session TTL', async () => {
|
|
83
|
+
await host.provisionBlobStore(staff, { tenantId: t1, vertical: 'cap-vertical', binding: 'ATTACHMENTS' });
|
|
84
|
+
const file = await (await host.attachments(alice, t1, s1)).upload({
|
|
85
|
+
entity: folder('F'),
|
|
86
|
+
filename: 'f.txt',
|
|
87
|
+
contentType: 'text/plain',
|
|
88
|
+
visibility: 'internal',
|
|
89
|
+
body: new TextEncoder().encode('f'),
|
|
90
|
+
});
|
|
91
|
+
const filesOf = (token) => {
|
|
92
|
+
if (!host.getCapabilityAttachments)
|
|
93
|
+
throw new Error('host has no getCapabilityAttachments');
|
|
94
|
+
return host.getCapabilityAttachments(token, t1, s1);
|
|
95
|
+
};
|
|
96
|
+
// The capability's own expiry.
|
|
97
|
+
const short = await share({ entity: folder('F'), permissions: [CAP_READ], expiresAt: at(HOUR) });
|
|
98
|
+
const shortFiles = await filesOf((await session(short.secret)).token);
|
|
99
|
+
clock.advance(HOUR - MINUTE);
|
|
100
|
+
expect((await shortFiles.open(file.id))?.record.id).toBe(file.id);
|
|
101
|
+
clock.advance(2 * MINUTE);
|
|
102
|
+
expect(errorCodeOf(await refusal(shortFiles.open(file.id)))).toBe('unauthenticated');
|
|
103
|
+
// …and an expired link asking about a type that takes no files learns nothing of it.
|
|
104
|
+
const unknownType = await refusal(shortFiles.list({ entityType: 'widget', entityId: 'w1' }));
|
|
105
|
+
expect(errorCodeOf(unknownType)).toBe('unauthenticated');
|
|
106
|
+
expect(unknownType.message).not.toMatch(/widget|attachmentTargets/);
|
|
107
|
+
// The session's TTL, on a capability that never expires.
|
|
108
|
+
const open = await share({ entity: folder('F'), permissions: [CAP_READ] });
|
|
109
|
+
const openFiles = await filesOf((await session(open.secret)).token);
|
|
110
|
+
clock.advance(CAPABILITY_SESSION_TTL_MS - MINUTE);
|
|
111
|
+
expect((await openFiles.open(file.id))?.record.id).toBe(file.id);
|
|
112
|
+
clock.advance(2 * MINUTE);
|
|
113
|
+
expect(errorCodeOf(await refusal(openFiles.open(file.id)))).toBe('unauthenticated');
|
|
114
|
+
});
|
|
76
115
|
it('a session lives its TTL and no longer; the link itself exchanges again', async () => {
|
|
77
116
|
const minted = await share({ entity: folder('F'), permissions: [CAP_READ] });
|
|
78
117
|
const { token } = await session(minted.secret);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-expiry-suite.js","sourceRoot":"","sources":["../src/capability-expiry-suite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"capability-expiry-suite.js","sourceRoot":"","sources":["../src/capability-expiry-suite.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { permissionContractSuite } from './permission-suite.js';
|
|
|
4
4
|
export { atomicContractSuite } from './atomic-suite.js';
|
|
5
5
|
export { impersonationContractSuite } from './impersonation-suite.js';
|
|
6
6
|
export { capabilityContractSuite } from './capability-suite.js';
|
|
7
|
+
export { capabilityAttachmentContractSuite } from './capability-attachment-suite.js';
|
|
7
8
|
export { capabilityExpiryContractSuite } from './capability-expiry-suite.js';
|
|
8
9
|
export type { CapabilityExpiryFixture } from './capability-expiry-suite.js';
|
|
9
10
|
export { searchContractSuite } from './search-suite.js';
|
|
@@ -15,6 +16,8 @@ export { listContractSuite } from './list-suite.js';
|
|
|
15
16
|
export { scheduleContractSuite } from './schedule-suite.js';
|
|
16
17
|
export { jobRunContractSuite } from './job-run-suite.js';
|
|
17
18
|
export { systemSwitchContractSuite } from './system-switch-suite.js';
|
|
19
|
+
export { verticalEventsContractSuite, crmExportMod, crmExportModManifest, boardImportMod, boardImportModManifest, CRM_VERTICAL, BOARD_VERTICAL, type VerticalEventsFixture, } from './vertical-events-suite.js';
|
|
20
|
+
export { peerContractSuite, verticalResolutionContractSuite } from './peer-suite.js';
|
|
18
21
|
export { inputParseContractSuite } from './input-parse-suite.js';
|
|
19
22
|
export { spineGuardContractSuite } from './spine-guard-suite.js';
|
|
20
23
|
export { grantExpiryContractSuite } from './grant-expiry-suite.js';
|
|
@@ -26,6 +29,6 @@ export { nodeOnlySuite, declaredNodeOnlySuite } from './node-only-suite.js';
|
|
|
26
29
|
export type { NodeOnlyOptions } from './node-only-suite.js';
|
|
27
30
|
export { declareEntityChecks, declareNodeOnly, assertNodeOnly } from './conformance.js';
|
|
28
31
|
export type { ConformanceDeclaration, DrivenConformance, DeclaredNodeOnlyConformance, AssertedNodeOnlyConformance, } from './conformance.js';
|
|
29
|
-
export { atomicMod, billedMod, brokenMod, connectorMod, contractTestBareOps, contractTestInitialModules, contractTestModules, liveMod, liveModManifest, permMod, capMod, capModManifest, scheduleMod, jobsMod, testMod, freshnessMod, searchMod, searchModManifest, listMod, listModManifest, parseMod, parseModManifest, } from './modules.js';
|
|
32
|
+
export { atomicMod, billedMod, brokenMod, connectorMod, contractTestBareOps, contractTestInitialModules, contractTestModules, liveMod, liveModManifest, permMod, capMod, capModManifest, peerMod, peerModManifest, PEER_CALLER, PEER_LISTENER, scheduleMod, jobsMod, testMod, freshnessMod, searchMod, searchModManifest, listMod, listModManifest, parseMod, parseModManifest, } from './modules.js';
|
|
30
33
|
export { connectorCalls, connectorTestFetch, resetConnectorCalls, type ConnectorCall, } from './connector-fixture.js';
|
|
31
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACxF,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,OAAO,EACP,MAAM,EACN,cAAc,EACd,WAAW,EACX,OAAO,EACP,OAAO,EACP,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,QAAQ,EACR,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export { permissionContractSuite } from './permission-suite.js';
|
|
|
3
3
|
export { atomicContractSuite } from './atomic-suite.js';
|
|
4
4
|
export { impersonationContractSuite } from './impersonation-suite.js';
|
|
5
5
|
export { capabilityContractSuite } from './capability-suite.js';
|
|
6
|
+
export { capabilityAttachmentContractSuite } from './capability-attachment-suite.js';
|
|
6
7
|
export { capabilityExpiryContractSuite } from './capability-expiry-suite.js';
|
|
7
8
|
export { searchContractSuite } from './search-suite.js';
|
|
8
9
|
export { entityVersionContractSuite } from './entity-version-suite.js';
|
|
@@ -13,6 +14,8 @@ export { listContractSuite } from './list-suite.js';
|
|
|
13
14
|
export { scheduleContractSuite } from './schedule-suite.js';
|
|
14
15
|
export { jobRunContractSuite } from './job-run-suite.js';
|
|
15
16
|
export { systemSwitchContractSuite } from './system-switch-suite.js';
|
|
17
|
+
export { verticalEventsContractSuite, crmExportMod, crmExportModManifest, boardImportMod, boardImportModManifest, CRM_VERTICAL, BOARD_VERTICAL, } from './vertical-events-suite.js';
|
|
18
|
+
export { peerContractSuite, verticalResolutionContractSuite } from './peer-suite.js';
|
|
16
19
|
export { inputParseContractSuite } from './input-parse-suite.js';
|
|
17
20
|
export { spineGuardContractSuite } from './spine-guard-suite.js';
|
|
18
21
|
export { grantExpiryContractSuite } from './grant-expiry-suite.js';
|
|
@@ -20,6 +23,6 @@ export { facetRecencyContractSuite } from './facet-recency-suite.js';
|
|
|
20
23
|
export { entityCheckConformanceSuite, planEntityCheckCoverage } from './entity-check-suite.js';
|
|
21
24
|
export { nodeOnlySuite, declaredNodeOnlySuite } from './node-only-suite.js';
|
|
22
25
|
export { declareEntityChecks, declareNodeOnly, assertNodeOnly } from './conformance.js';
|
|
23
|
-
export { atomicMod, billedMod, brokenMod, connectorMod, contractTestBareOps, contractTestInitialModules, contractTestModules, liveMod, liveModManifest, permMod, capMod, capModManifest, scheduleMod, jobsMod, testMod, freshnessMod, searchMod, searchModManifest, listMod, listModManifest, parseMod, parseModManifest, } from './modules.js';
|
|
26
|
+
export { atomicMod, billedMod, brokenMod, connectorMod, contractTestBareOps, contractTestInitialModules, contractTestModules, liveMod, liveModManifest, permMod, capMod, capModManifest, peerMod, peerModManifest, PEER_CALLER, PEER_LISTENER, scheduleMod, jobsMod, testMod, freshnessMod, searchMod, searchModManifest, listMod, listModManifest, parseMod, parseModManifest, } from './modules.js';
|
|
24
27
|
export { connectorCalls, connectorTestFetch, resetConnectorCalls, } from './connector-fixture.js';
|
|
25
28
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAA4B,MAAM,0BAA0B,CAAC;AAE/F,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE/F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOxF,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,OAAO,EACP,MAAM,EACN,cAAc,EACd,WAAW,EACX,OAAO,EACP,OAAO,EACP,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,QAAQ,EACR,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EACL,2BAA2B,EAC3B,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,cAAc,GAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAA4B,MAAM,0BAA0B,CAAC;AAE/F,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE/F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOxF,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,OAAO,EACP,MAAM,EACN,cAAc,EACd,OAAO,EACP,eAAe,EACf,WAAW,EACX,aAAa,EACb,WAAW,EACX,OAAO,EACP,OAAO,EACP,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,QAAQ,EACR,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-run-suite.d.ts","sourceRoot":"","sources":["../src/job-run-suite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-run-suite.d.ts","sourceRoot":"","sources":["../src/job-run-suite.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,CA66BN"}
|