@substrat-run/contract-tests 0.137.0 → 0.139.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/attachment-text-fixtures.d.ts +17 -0
- package/dist/attachment-text-fixtures.d.ts.map +1 -1
- package/dist/attachment-text-fixtures.js +344 -4
- package/dist/attachment-text-fixtures.js.map +1 -1
- package/dist/attachment-text-suite.d.ts +16 -1
- package/dist/attachment-text-suite.d.ts.map +1 -1
- package/dist/attachment-text-suite.js +212 -28
- package/dist/attachment-text-suite.js.map +1 -1
- package/dist/caused-by-module.d.ts +23 -0
- package/dist/caused-by-module.d.ts.map +1 -0
- package/dist/caused-by-module.js +56 -0
- package/dist/caused-by-module.js.map +1 -0
- package/dist/caused-by-suite.d.ts +28 -0
- package/dist/caused-by-suite.d.ts.map +1 -0
- package/dist/caused-by-suite.js +179 -0
- package/dist/caused-by-suite.js.map +1 -0
- package/dist/directory-restore-suite.d.ts.map +1 -1
- package/dist/directory-restore-suite.js +40 -0
- package/dist/directory-restore-suite.js.map +1 -1
- package/dist/entity-state-module.d.ts +134 -0
- package/dist/entity-state-module.d.ts.map +1 -0
- package/dist/entity-state-module.js +140 -0
- package/dist/entity-state-module.js.map +1 -0
- package/dist/entity-state-suite.d.ts +9 -0
- package/dist/entity-state-suite.d.ts.map +1 -0
- package/dist/entity-state-suite.js +534 -0
- package/dist/entity-state-suite.js.map +1 -0
- package/dist/findings-atomic-suite.d.ts +21 -0
- package/dist/findings-atomic-suite.d.ts.map +1 -0
- package/dist/findings-atomic-suite.js +131 -0
- package/dist/findings-atomic-suite.js.map +1 -0
- package/dist/findings-suite.d.ts +11 -0
- package/dist/findings-suite.d.ts.map +1 -0
- package/dist/findings-suite.js +391 -0
- package/dist/findings-suite.js.map +1 -0
- package/dist/impersonation-suite.d.ts.map +1 -1
- package/dist/impersonation-suite.js +56 -0
- package/dist/impersonation-suite.js.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/job-run-suite.d.ts.map +1 -1
- package/dist/job-run-suite.js +263 -1
- package/dist/job-run-suite.js.map +1 -1
- package/dist/membership-executor-suite.d.ts +19 -0
- package/dist/membership-executor-suite.d.ts.map +1 -0
- package/dist/membership-executor-suite.js +866 -0
- package/dist/membership-executor-suite.js.map +1 -0
- package/dist/membership-module.d.ts +17 -0
- package/dist/membership-module.d.ts.map +1 -0
- package/dist/membership-module.js +128 -0
- package/dist/membership-module.js.map +1 -0
- package/dist/modules.d.ts +217 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +23 -0
- package/dist/modules.js.map +1 -1
- package/dist/peer-suite.d.ts +10 -1
- package/dist/peer-suite.d.ts.map +1 -1
- package/dist/peer-suite.js +98 -0
- package/dist/peer-suite.js.map +1 -1
- package/dist/permission-suite.d.ts.map +1 -1
- package/dist/permission-suite.js +82 -7
- package/dist/permission-suite.js.map +1 -1
- package/dist/scope-host-suite.d.ts.map +1 -1
- package/dist/scope-host-suite.js +190 -34
- package/dist/scope-host-suite.js.map +1 -1
- package/dist/vertical-events-suite.d.ts +14 -0
- package/dist/vertical-events-suite.d.ts.map +1 -1
- package/dist/vertical-events-suite.js +74 -1
- package/dist/vertical-events-suite.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
2
|
+
import { errorCodeOf, instant, platformActorId, scopeId, tenantId, } from '@substrat-run/contracts';
|
|
3
|
+
import { FINDING_RETENTION_DAYS, ulid } from '@substrat-run/kernel';
|
|
4
|
+
/**
|
|
5
|
+
* Findings (#1748) on every adapter: the tenant inbox with a lifecycle. A Recurring finding is
|
|
6
|
+
* the tenant's own projection of an `_substrat_issues` fingerprint; a failed schedule opens an
|
|
7
|
+
* Invariant one and a stale freshness verdict a Drift one. Acknowledge / resolve / reopen are
|
|
8
|
+
* verdicts, suppress is a rule with an expiry, and every one of them is audited. A tenant never
|
|
9
|
+
* sees, counts or moves another tenant's finding — and a quiet open finding is resolved as
|
|
10
|
+
* stale, audited, rather than deleted from under whoever was watching it.
|
|
11
|
+
*/
|
|
12
|
+
export function findingsContractSuite(adapterName, makeFixture) {
|
|
13
|
+
describe(`findings (#1748): ${adapterName}`, () => {
|
|
14
|
+
let fixture;
|
|
15
|
+
let host;
|
|
16
|
+
const staff = platformActorId.parse(ulid());
|
|
17
|
+
const ta = tenantId.parse(ulid());
|
|
18
|
+
const tb = tenantId.parse(ulid());
|
|
19
|
+
const sa = scopeId.parse(ulid());
|
|
20
|
+
const sb = scopeId.parse(ulid());
|
|
21
|
+
const V1 = '01JVERSIONFINDINGAAAAAAAA1';
|
|
22
|
+
const V2 = '01JVERSIONFINDINGAAAAAAAA2';
|
|
23
|
+
beforeAll(async () => {
|
|
24
|
+
fixture = await makeFixture();
|
|
25
|
+
host = fixture.host;
|
|
26
|
+
});
|
|
27
|
+
afterAll(async () => {
|
|
28
|
+
await fixture.cleanup();
|
|
29
|
+
});
|
|
30
|
+
/** One ops failure of `operation` for `tenant`, the shape every Recurring test records. */
|
|
31
|
+
const fail = (tenant, operation, opts = {}) => host.admin.recordOpsFailure({
|
|
32
|
+
actor: staff,
|
|
33
|
+
operation,
|
|
34
|
+
stage: 'terminal',
|
|
35
|
+
origin: 'platform',
|
|
36
|
+
code: opts.code ?? 'unavailable',
|
|
37
|
+
tenantId: tenant,
|
|
38
|
+
scopeId: tenant === null ? null : scopeId.parse(opts.scope ?? (tenant === ta ? sa : sb)),
|
|
39
|
+
vertical: 'acme/findings',
|
|
40
|
+
version: opts.version ?? null,
|
|
41
|
+
message: opts.message ?? `${operation} failed`,
|
|
42
|
+
});
|
|
43
|
+
const findingOf = async (tenant, operation) => (await host.admin.listFindings(staff, { tenantId: tenant, kind: 'recurring' })).find((f) => f.operation === operation);
|
|
44
|
+
describe('the lifecycle', () => {
|
|
45
|
+
it('opens on first sight, acks, resolves, and a fresh occurrence reopens it as regressed', async () => {
|
|
46
|
+
const op = 'deploy.lifecycle';
|
|
47
|
+
await fail(ta, op, { version: V1 });
|
|
48
|
+
const opened = (await findingOf(ta, op));
|
|
49
|
+
expect(opened).toMatchObject({
|
|
50
|
+
tenantId: ta,
|
|
51
|
+
kind: 'recurring',
|
|
52
|
+
status: 'open',
|
|
53
|
+
regressed: false,
|
|
54
|
+
count: 1,
|
|
55
|
+
codes: ['unavailable'],
|
|
56
|
+
lastVersion: V1,
|
|
57
|
+
likelyCause: null,
|
|
58
|
+
});
|
|
59
|
+
const acked = await host.admin.setFindingStatus(staff, ta, opened.id, 'acked');
|
|
60
|
+
expect(acked?.status).toBe('acked');
|
|
61
|
+
expect(acked?.acknowledgedAt).not.toBeNull();
|
|
62
|
+
// Acked stays acked on a fresh occurrence: somebody is already on it.
|
|
63
|
+
await fail(ta, op, { version: V1 });
|
|
64
|
+
expect((await findingOf(ta, op))).toMatchObject({ status: 'acked', count: 2 });
|
|
65
|
+
const resolved = await host.admin.setFindingStatus(staff, ta, opened.id, 'resolved');
|
|
66
|
+
expect(resolved).toMatchObject({ status: 'resolved', resolution: 'verdict', resolvedVersion: V1 });
|
|
67
|
+
// Seen again after resolved: back in the inbox, flagged regressed, with the version it
|
|
68
|
+
// came back under named as the likely cause.
|
|
69
|
+
await fail(ta, op, { version: V2 });
|
|
70
|
+
const regressed = (await findingOf(ta, op));
|
|
71
|
+
expect(regressed).toMatchObject({ status: 'open', regressed: true, count: 3, lastVersion: V2 });
|
|
72
|
+
expect(regressed.likelyCause).toMatchObject({ kind: 'deploy', version: V2 });
|
|
73
|
+
expect(regressed.likelyCause.reason).toContain(V1);
|
|
74
|
+
// The next resolve clears the badge; reopening drops the acknowledgement.
|
|
75
|
+
const again = await host.admin.setFindingStatus(staff, ta, opened.id, 'resolved');
|
|
76
|
+
expect(again?.regressed).toBe(false);
|
|
77
|
+
const reopened = await host.admin.setFindingStatus(staff, ta, opened.id, 'open');
|
|
78
|
+
expect(reopened).toMatchObject({ status: 'open', acknowledgedAt: null });
|
|
79
|
+
});
|
|
80
|
+
it('works the likely cause out afresh each cycle, never carrying an old one', async () => {
|
|
81
|
+
const op = 'deploy.two-cycles';
|
|
82
|
+
const V3 = '01JVERSIONFINDINGAAAAAAAA3';
|
|
83
|
+
await fail(ta, op, { version: V1 });
|
|
84
|
+
const id = (await findingOf(ta, op)).id;
|
|
85
|
+
// Cycle 1: resolved under V1, back under V2.
|
|
86
|
+
expect(await host.admin.setFindingStatus(staff, ta, id, 'resolved')).toMatchObject({ likelyCause: null });
|
|
87
|
+
await fail(ta, op, { version: V2 });
|
|
88
|
+
expect((await findingOf(ta, op)).likelyCause).toMatchObject({ version: V2, reason: expect.stringContaining(V1) });
|
|
89
|
+
// A resolve closes the cycle its cause explained.
|
|
90
|
+
expect(await host.admin.setFindingStatus(staff, ta, id, 'resolved')).toMatchObject({
|
|
91
|
+
resolvedVersion: V2,
|
|
92
|
+
likelyCause: null,
|
|
93
|
+
});
|
|
94
|
+
// Cycle 2a: back under the version it was just resolved under — no cause, not V1's.
|
|
95
|
+
await fail(ta, op, { version: V2 });
|
|
96
|
+
expect(await findingOf(ta, op)).toMatchObject({ status: 'open', regressed: true, likelyCause: null });
|
|
97
|
+
// Cycle 2b: resolved under V2, back under V3 — V3, explained by V2, not V1.
|
|
98
|
+
await host.admin.setFindingStatus(staff, ta, id, 'resolved');
|
|
99
|
+
await fail(ta, op, { version: V3 });
|
|
100
|
+
const third = (await findingOf(ta, op));
|
|
101
|
+
expect(third.likelyCause).toMatchObject({ version: V3 });
|
|
102
|
+
expect(third.likelyCause.reason).toContain(V2);
|
|
103
|
+
expect(third.likelyCause.reason).not.toContain(V1);
|
|
104
|
+
});
|
|
105
|
+
it('names no likely cause when the finding came back under the version it was resolved under', async () => {
|
|
106
|
+
const op = 'deploy.same-version';
|
|
107
|
+
await fail(ta, op, { version: V1 });
|
|
108
|
+
const f = (await findingOf(ta, op));
|
|
109
|
+
await host.admin.setFindingStatus(staff, ta, f.id, 'resolved');
|
|
110
|
+
await fail(ta, op, { version: V1 });
|
|
111
|
+
expect(await findingOf(ta, op)).toMatchObject({ status: 'open', regressed: true, likelyCause: null });
|
|
112
|
+
});
|
|
113
|
+
it('audits every verdict with the tenant and the before/after status', async () => {
|
|
114
|
+
const op = 'deploy.audited';
|
|
115
|
+
await fail(ta, op);
|
|
116
|
+
const f = (await findingOf(ta, op));
|
|
117
|
+
await host.admin.setFindingStatus(staff, ta, f.id, 'acked');
|
|
118
|
+
const [row] = await host.admin.auditLog(staff, { tenantId: ta, action: 'setFindingStatus', order: 'desc', limit: 1 });
|
|
119
|
+
expect(row).toMatchObject({
|
|
120
|
+
actor: staff,
|
|
121
|
+
tenantId: ta,
|
|
122
|
+
before: { id: f.id, status: 'open' },
|
|
123
|
+
after: { id: f.id, status: 'acked' },
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('tenant isolation', () => {
|
|
128
|
+
it('counts, reads and moves each tenant’s finding apart, while the fleet issue sums both', async () => {
|
|
129
|
+
const op = 'intent.connector:shared';
|
|
130
|
+
await fail(ta, op, { message: 'tenant A secret prose 01JAAAAAAAAAAAAAAAAAAAAAAA' });
|
|
131
|
+
await fail(ta, op);
|
|
132
|
+
await fail(tb, op, { message: 'tenant B text' });
|
|
133
|
+
const a = (await findingOf(ta, op));
|
|
134
|
+
const b = (await findingOf(tb, op));
|
|
135
|
+
// Same fingerprint, two findings: the count is the tenant's own, never the fleet's.
|
|
136
|
+
expect(a.subject).toBe(b.subject);
|
|
137
|
+
expect(a.id).not.toBe(b.id);
|
|
138
|
+
expect(a.count).toBe(2);
|
|
139
|
+
expect(b.count).toBe(1);
|
|
140
|
+
const [issue] = await host.admin.listIssues(staff, { operation: op });
|
|
141
|
+
expect(issue.count).toBe(3);
|
|
142
|
+
// A tenant's read carries nothing of the other tenant: not its id, its scope, or the
|
|
143
|
+
// free text of its failures. A finding carries no evidence text at all.
|
|
144
|
+
const bRead = await host.admin.listFindings(staff, { tenantId: tb });
|
|
145
|
+
const serialized = JSON.stringify(bRead);
|
|
146
|
+
expect(bRead.every((f) => f.tenantId === tb)).toBe(true);
|
|
147
|
+
expect(serialized).not.toContain(ta);
|
|
148
|
+
expect(serialized).not.toContain(sa);
|
|
149
|
+
expect(serialized).not.toContain('tenant A secret prose');
|
|
150
|
+
expect(serialized).not.toContain('tenant B text');
|
|
151
|
+
expect(serialized).not.toContain(staff);
|
|
152
|
+
// B cannot move A's finding by its id: unknown to B, and A's is untouched.
|
|
153
|
+
expect(await host.admin.setFindingStatus(staff, tb, a.id, 'resolved')).toBeUndefined();
|
|
154
|
+
expect((await findingOf(ta, op)).status).toBe('open');
|
|
155
|
+
// Resolving B's leaves A's open.
|
|
156
|
+
await host.admin.setFindingStatus(staff, tb, b.id, 'resolved');
|
|
157
|
+
expect((await findingOf(ta, op)).status).toBe('open');
|
|
158
|
+
expect((await findingOf(tb, op)).status).toBe('resolved');
|
|
159
|
+
});
|
|
160
|
+
it('opens no finding for a failure that belongs to no tenant', async () => {
|
|
161
|
+
const op = 'platform.only';
|
|
162
|
+
await fail(null, op);
|
|
163
|
+
expect(await host.admin.listIssues(staff, { operation: op })).toHaveLength(1);
|
|
164
|
+
const fleet = await host.admin.listFindings(staff, { limit: 500 });
|
|
165
|
+
expect(fleet.some((f) => f.operation === op)).toBe(false);
|
|
166
|
+
});
|
|
167
|
+
it('keeps a tenant’s rules to that tenant', async () => {
|
|
168
|
+
const op = 'deploy.rule-isolation';
|
|
169
|
+
await fail(ta, op);
|
|
170
|
+
await fail(tb, op);
|
|
171
|
+
const { rule } = await host.admin.createFindingRule(staff, ta, {
|
|
172
|
+
operation: op,
|
|
173
|
+
expiresAt: instant.parse(new Date(Date.now() + 86_400_000).toISOString()),
|
|
174
|
+
reason: 'known flake',
|
|
175
|
+
});
|
|
176
|
+
// A's rule suppresses A's finding and leaves B's alone.
|
|
177
|
+
expect((await findingOf(ta, op)).status).toBe('suppressed');
|
|
178
|
+
expect((await findingOf(tb, op)).status).toBe('open');
|
|
179
|
+
await fail(tb, op);
|
|
180
|
+
expect((await findingOf(tb, op)).status).toBe('open');
|
|
181
|
+
// B neither sees nor revokes A's rule.
|
|
182
|
+
expect((await host.admin.listFindingRules(staff, tb)).some((r) => r.id === rule.id)).toBe(false);
|
|
183
|
+
expect(await host.admin.revokeFindingRule(staff, tb, rule.id)).toBeUndefined();
|
|
184
|
+
expect((await host.admin.listFindingRules(staff, ta, { active: true })).some((r) => r.id === rule.id)).toBe(true);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe('suppress rules', () => {
|
|
188
|
+
const inADay = () => instant.parse(new Date(Date.now() + 86_400_000).toISOString());
|
|
189
|
+
it('suppresses what it covers now, still counts later occurrences, and audits the rule', async () => {
|
|
190
|
+
const op = 'deploy.suppressed';
|
|
191
|
+
await fail(ta, op, { code: 'conflict' });
|
|
192
|
+
const { rule, suppressed } = await host.admin.createFindingRule(staff, ta, {
|
|
193
|
+
code: 'conflict',
|
|
194
|
+
operation: op,
|
|
195
|
+
expiresAt: inADay(),
|
|
196
|
+
reason: 'expected during the migration',
|
|
197
|
+
});
|
|
198
|
+
expect(suppressed).toBe(1);
|
|
199
|
+
expect((await findingOf(ta, op))).toMatchObject({ status: 'suppressed', ruleId: rule.id, count: 1 });
|
|
200
|
+
// Recorded, but no finding opens.
|
|
201
|
+
await fail(ta, op, { code: 'conflict' });
|
|
202
|
+
expect((await findingOf(ta, op))).toMatchObject({ status: 'suppressed', ruleId: rule.id, count: 2 });
|
|
203
|
+
const [row] = await host.admin.auditLog(staff, { tenantId: ta, action: 'createFindingRule', order: 'desc', limit: 1 });
|
|
204
|
+
expect(row).toMatchObject({ actor: staff, tenantId: ta, after: { rule: { id: rule.id }, suppressed: 1 } });
|
|
205
|
+
});
|
|
206
|
+
it('covers only what it names: another operation, or another code, still opens', async () => {
|
|
207
|
+
const op = 'deploy.narrow';
|
|
208
|
+
await host.admin.createFindingRule(staff, ta, { operation: op, code: 'conflict', expiresAt: inADay(), reason: 'narrow' });
|
|
209
|
+
await fail(ta, op, { code: 'unavailable' });
|
|
210
|
+
await fail(ta, 'deploy.narrow-other', { code: 'conflict' });
|
|
211
|
+
expect((await findingOf(ta, op)).status).toBe('open');
|
|
212
|
+
expect((await findingOf(ta, 'deploy.narrow-other')).status).toBe('open');
|
|
213
|
+
});
|
|
214
|
+
it('suppresses a NEW finding it covers from its first occurrence', async () => {
|
|
215
|
+
const op = 'deploy.born-suppressed';
|
|
216
|
+
await host.admin.createFindingRule(staff, ta, { operation: op, expiresAt: inADay(), reason: 'pre-emptive' });
|
|
217
|
+
await fail(ta, op);
|
|
218
|
+
expect((await findingOf(ta, op)).status).toBe('suppressed');
|
|
219
|
+
});
|
|
220
|
+
it('lets a revoked rule go: the next occurrence opens the finding, and the revoke is audited', async () => {
|
|
221
|
+
const op = 'deploy.revoked';
|
|
222
|
+
await fail(ta, op);
|
|
223
|
+
const { rule } = await host.admin.createFindingRule(staff, ta, { operation: op, expiresAt: inADay(), reason: 'temp' });
|
|
224
|
+
expect((await findingOf(ta, op)).status).toBe('suppressed');
|
|
225
|
+
const revoked = await host.admin.revokeFindingRule(staff, ta, rule.id);
|
|
226
|
+
expect(revoked.expiresAt <= new Date().toISOString()).toBe(true);
|
|
227
|
+
expect((await host.admin.listFindingRules(staff, ta, { active: true })).some((r) => r.id === rule.id)).toBe(false);
|
|
228
|
+
await fail(ta, op);
|
|
229
|
+
expect((await findingOf(ta, op))).toMatchObject({ status: 'open', ruleId: null, count: 2 });
|
|
230
|
+
const [row] = await host.admin.auditLog(staff, { tenantId: ta, action: 'revokeFindingRule', order: 'desc', limit: 1 });
|
|
231
|
+
expect(row).toMatchObject({ before: { id: rule.id }, after: { id: rule.id } });
|
|
232
|
+
});
|
|
233
|
+
it('refuses a rule that expires in the past, or past the longest suppression, as validation_failed', async () => {
|
|
234
|
+
// The code, not only the words: the HTTP surface maps it to a 400, and on a host whose
|
|
235
|
+
// store sits behind an RPC hop it survives only if the refusal happens before the hop.
|
|
236
|
+
const refusal = async (expiresAt) => {
|
|
237
|
+
try {
|
|
238
|
+
await host.admin.createFindingRule(staff, ta, { operation: 'x', expiresAt: instant.parse(expiresAt), reason: 'r' });
|
|
239
|
+
}
|
|
240
|
+
catch (e) {
|
|
241
|
+
return { code: errorCodeOf(e), message: e.message };
|
|
242
|
+
}
|
|
243
|
+
throw new Error('the rule was created');
|
|
244
|
+
};
|
|
245
|
+
expect(await refusal(new Date(Date.now() - 1000).toISOString())).toMatchObject({
|
|
246
|
+
code: 'validation_failed',
|
|
247
|
+
message: expect.stringMatching(/future/),
|
|
248
|
+
});
|
|
249
|
+
expect(await refusal(new Date(Date.now() + 91 * 86_400_000).toISOString())).toMatchObject({
|
|
250
|
+
code: 'validation_failed',
|
|
251
|
+
message: expect.stringMatching(/at most 90 days/),
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
describe('the `_substrat_issues` mapping', () => {
|
|
256
|
+
it('maps new → open, regressed → open + regressed, resolved → resolved, ignored → suppressed', async () => {
|
|
257
|
+
const op = 'deploy.mapping';
|
|
258
|
+
await fail(ta, op);
|
|
259
|
+
const [issue] = await host.admin.listIssues(staff, { operation: op });
|
|
260
|
+
const f = (await findingOf(ta, op));
|
|
261
|
+
// One fingerprint, one subject; the evidence walks to the tenant's own exemplars.
|
|
262
|
+
expect(issue.status).toBe('new');
|
|
263
|
+
expect(f.status).toBe('open');
|
|
264
|
+
expect(f.subject).toBe(issue.fingerprint);
|
|
265
|
+
expect(f.evidence).toEqual({ source: 'ops-failures', fingerprint: issue.fingerprint });
|
|
266
|
+
const exemplars = await host.admin.listOpsFailures(staff, { tenantId: ta, fingerprint: issue.fingerprint });
|
|
267
|
+
expect(exemplars.length).toBe(1);
|
|
268
|
+
// resolved → resolved, and the same fresh arrival regresses both.
|
|
269
|
+
await host.admin.setIssueStatus(staff, issue.fingerprint, 'resolved');
|
|
270
|
+
await host.admin.setFindingStatus(staff, ta, f.id, 'resolved');
|
|
271
|
+
await fail(ta, op);
|
|
272
|
+
const [regressedIssue] = await host.admin.listIssues(staff, { operation: op });
|
|
273
|
+
expect(regressedIssue.status).toBe('regressed');
|
|
274
|
+
expect(await findingOf(ta, op)).toMatchObject({ status: 'open', regressed: true });
|
|
275
|
+
// ignored → suppressed: a fresh arrival changes neither.
|
|
276
|
+
await host.admin.setIssueStatus(staff, issue.fingerprint, 'ignored');
|
|
277
|
+
await host.admin.createFindingRule(staff, ta, {
|
|
278
|
+
subject: f.subject,
|
|
279
|
+
expiresAt: instant.parse(new Date(Date.now() + 86_400_000).toISOString()),
|
|
280
|
+
reason: 'ignored',
|
|
281
|
+
});
|
|
282
|
+
await fail(ta, op);
|
|
283
|
+
const [ignored] = await host.admin.listIssues(staff, { operation: op });
|
|
284
|
+
expect(ignored.status).toBe('ignored');
|
|
285
|
+
expect((await findingOf(ta, op)).status).toBe('suppressed');
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe('the Invariant and Drift sources', () => {
|
|
289
|
+
it('opens an Invariant finding for a failed schedule, and none for one that ran', async () => {
|
|
290
|
+
const unit = `${sa}:findings/nightly`;
|
|
291
|
+
const run = (outcome) => host.admin.recordSweepRun({
|
|
292
|
+
kind: 'schedule',
|
|
293
|
+
unit,
|
|
294
|
+
outcome,
|
|
295
|
+
tenantId: ta,
|
|
296
|
+
scopeId: sa,
|
|
297
|
+
operation: 'findings/nightly',
|
|
298
|
+
error: outcome === 'failed' ? 'handler threw: secret detail' : null,
|
|
299
|
+
});
|
|
300
|
+
await run('ok');
|
|
301
|
+
expect((await host.admin.listFindings(staff, { tenantId: ta, kind: 'invariant' })).some((f) => f.subject === unit)).toBe(false);
|
|
302
|
+
await run('failed');
|
|
303
|
+
await run('failed');
|
|
304
|
+
const [f] = (await host.admin.listFindings(staff, { tenantId: ta, kind: 'invariant' })).filter((x) => x.subject === unit);
|
|
305
|
+
expect(f).toMatchObject({
|
|
306
|
+
status: 'open',
|
|
307
|
+
severity: 'critical',
|
|
308
|
+
count: 2,
|
|
309
|
+
operation: 'findings/nightly',
|
|
310
|
+
evidence: { source: 'sweep-runs', kind: 'schedule', unit },
|
|
311
|
+
});
|
|
312
|
+
expect(JSON.stringify(f)).not.toContain('secret detail');
|
|
313
|
+
});
|
|
314
|
+
it('opens a Drift finding for a stale freshness verdict', async () => {
|
|
315
|
+
const unit = `${sa}:findings.thing-happened`;
|
|
316
|
+
await host.admin.recordSweepRun({
|
|
317
|
+
kind: 'freshness',
|
|
318
|
+
unit,
|
|
319
|
+
outcome: 'failed',
|
|
320
|
+
tenantId: ta,
|
|
321
|
+
scopeId: sa,
|
|
322
|
+
eventType: 'findings.thing-happened',
|
|
323
|
+
});
|
|
324
|
+
const [f] = (await host.admin.listFindings(staff, { tenantId: ta, kind: 'drift' })).filter((x) => x.subject === unit);
|
|
325
|
+
expect(f).toMatchObject({ status: 'open', severity: 'warning', title: 'findings.thing-happened has gone stale' });
|
|
326
|
+
});
|
|
327
|
+
it('counts a replayed drain once', async () => {
|
|
328
|
+
const unit = `${sa}:findings/replayed`;
|
|
329
|
+
const requestId = ulid();
|
|
330
|
+
for (let i = 0; i < 2; i++) {
|
|
331
|
+
await host.admin.recordSweepRun({
|
|
332
|
+
kind: 'schedule',
|
|
333
|
+
unit,
|
|
334
|
+
outcome: 'failed',
|
|
335
|
+
tenantId: ta,
|
|
336
|
+
scopeId: sa,
|
|
337
|
+
operation: 'findings/replayed',
|
|
338
|
+
requestId,
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
const [f] = (await host.admin.listFindings(staff, { tenantId: ta, kind: 'invariant' })).filter((x) => x.subject === unit);
|
|
342
|
+
expect(f.count).toBe(1);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
describe('retention', () => {
|
|
346
|
+
const longAgo = () => instant.parse(new Date(Date.now() - (FINDING_RETENTION_DAYS + 10) * 86_400_000).toISOString());
|
|
347
|
+
it('resolves a quiet open finding as stale, audited, and deletes a quiet suppressed one', async () => {
|
|
348
|
+
const quiet = `${sb}:findings/quiet`;
|
|
349
|
+
const hidden = `${sb}:findings/hidden`;
|
|
350
|
+
await host.admin.createFindingRule(staff, tb, {
|
|
351
|
+
subject: hidden,
|
|
352
|
+
expiresAt: instant.parse(new Date(Date.now() + 86_400_000).toISOString()),
|
|
353
|
+
reason: 'retention fixture',
|
|
354
|
+
});
|
|
355
|
+
for (const unit of [quiet, hidden]) {
|
|
356
|
+
await host.admin.recordSweepRun({
|
|
357
|
+
kind: 'schedule',
|
|
358
|
+
unit,
|
|
359
|
+
outcome: 'failed',
|
|
360
|
+
tenantId: tb,
|
|
361
|
+
scopeId: sb,
|
|
362
|
+
operation: unit.split(':')[1],
|
|
363
|
+
at: longAgo(),
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
const before = await host.admin.listFindings(staff, { tenantId: tb, kind: 'invariant' });
|
|
367
|
+
expect(before.find((f) => f.subject === quiet).status).toBe('open');
|
|
368
|
+
expect(before.find((f) => f.subject === hidden).status).toBe('suppressed');
|
|
369
|
+
const report = await host.admin.pruneFindings(staff, 500);
|
|
370
|
+
expect(report.staled).toBeGreaterThanOrEqual(1);
|
|
371
|
+
expect(report.deleted).toBeGreaterThanOrEqual(1);
|
|
372
|
+
const after = await host.admin.listFindings(staff, { tenantId: tb, kind: 'invariant' });
|
|
373
|
+
const stale = after.find((f) => f.subject === quiet);
|
|
374
|
+
// Not deleted: resolved as stale, and kept readable for one more window.
|
|
375
|
+
expect(stale).toMatchObject({ status: 'resolved', resolution: 'stale' });
|
|
376
|
+
expect(after.some((f) => f.subject === hidden)).toBe(false);
|
|
377
|
+
const audit = await host.admin.auditLog(staff, { tenantId: tb, action: 'resolveStaleFinding' });
|
|
378
|
+
expect(audit.find((r) => r.after.id === stale.id)).toMatchObject({
|
|
379
|
+
actor: staff,
|
|
380
|
+
tenantId: tb,
|
|
381
|
+
before: { id: stale.id, status: 'open' },
|
|
382
|
+
after: { id: stale.id, status: 'resolved', resolution: 'stale' },
|
|
383
|
+
});
|
|
384
|
+
// A second pass changes nothing: the stale-resolved finding's resolve is recent.
|
|
385
|
+
await host.admin.pruneFindings(staff, 500);
|
|
386
|
+
expect((await host.admin.listFindings(staff, { tenantId: tb, kind: 'invariant' })).find((f) => f.id === stale.id)).toBeDefined();
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=findings-suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-suite.js","sourceRoot":"","sources":["../src/findings-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impersonation-suite.d.ts","sourceRoot":"","sources":["../src/impersonation-suite.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA6B9D,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,
|
|
1
|
+
{"version":3,"file":"impersonation-suite.d.ts","sourceRoot":"","sources":["../src/impersonation-suite.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA6B9D,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,CA+bN"}
|
|
@@ -354,6 +354,62 @@ export function impersonationContractSuite(adapterName, makeFixture) {
|
|
|
354
354
|
await expect(host.getImpersonatedScope(ulid(), t1, scope)).rejects.toThrow(/unknown impersonation session/);
|
|
355
355
|
});
|
|
356
356
|
});
|
|
357
|
+
// -- copies of a scope (#2004) --------------------------------------------
|
|
358
|
+
/**
|
|
359
|
+
* A copy keeps the source's history and none of its power. Sessions live in the directory,
|
|
360
|
+
* never in a scope, so no dump carries one; the stamps the session left on the scope's rows
|
|
361
|
+
* are history and travel. A live session opened on the source is refused at every copy of it,
|
|
362
|
+
* by the (tenant, scope) the session names, and still honoured at the source after a return.
|
|
363
|
+
*/
|
|
364
|
+
describe('a copy of the scope never honours its live session (#2004)', () => {
|
|
365
|
+
let source;
|
|
366
|
+
let session;
|
|
367
|
+
beforeAll(async () => {
|
|
368
|
+
source = await freshScope();
|
|
369
|
+
session = await openSession(source, { mode: 'write' });
|
|
370
|
+
await (await host.getImpersonatedScope(session.id, t1, source)).invoke('perm/authorized-emit', {
|
|
371
|
+
permission: PERM_USE,
|
|
372
|
+
});
|
|
373
|
+
});
|
|
374
|
+
/** The live session is refused at `copy`, and the stamp it left is there as history. */
|
|
375
|
+
const refusedAt = async (copy) => {
|
|
376
|
+
await expect(host.getImpersonatedScope(session.id, t1, copy)).rejects.toThrow(/is for \(/);
|
|
377
|
+
const outbox = await (await host.getScope(anna, t1, copy)).invoke('perm/read-outbox');
|
|
378
|
+
const acted = outbox.find((e) => e.type === 'perm.acted');
|
|
379
|
+
expect(JSON.parse(acted.impersonation)).toEqual({ session: session.id, by: staff });
|
|
380
|
+
};
|
|
381
|
+
const honouredAtSource = async () => {
|
|
382
|
+
const stub = await host.getImpersonatedScope(session.id, t1, source);
|
|
383
|
+
await expect(stub.invoke('perm/whoami')).resolves.toBe(anna);
|
|
384
|
+
};
|
|
385
|
+
it('the dump a copy is made from carries no session, only the stamps', async () => {
|
|
386
|
+
const dump = await host.admin.exportScope(staff, t1, source);
|
|
387
|
+
expect(dump.tables.map((t) => t.name.toLowerCase())).not.toContain('_substrat_impersonations');
|
|
388
|
+
expect(JSON.stringify(dump.tables.find((t) => t.name === '_substrat_outbox')?.rows)).toContain(session.id);
|
|
389
|
+
});
|
|
390
|
+
it('a fork (importScope): refused there, honoured at the source', async () => {
|
|
391
|
+
const fork = scopeId.parse(ulid());
|
|
392
|
+
await host.importScope(staff, { tenantId: t1, scopeId: fork, vertical: 'imp-vertical' }, await host.admin.exportScope(staff, t1, source));
|
|
393
|
+
await refusedAt(fork);
|
|
394
|
+
await honouredAtSource();
|
|
395
|
+
});
|
|
396
|
+
it('a snapshot and a preview (snapshotScope): the same', async () => {
|
|
397
|
+
await refusedAt(await host.snapshotScope(staff, t1, source));
|
|
398
|
+
await refusedAt(await host.snapshotScope(staff, t1, source, { kind: 'preview' }));
|
|
399
|
+
await honouredAtSource();
|
|
400
|
+
});
|
|
401
|
+
it("a restore of this scope's backup onto another scope: the same", async () => {
|
|
402
|
+
const other = await freshScope();
|
|
403
|
+
await host.restoreScope(staff, t1, other, await host.admin.exportScope(staff, t1, source));
|
|
404
|
+
await refusedAt(other);
|
|
405
|
+
await honouredAtSource();
|
|
406
|
+
});
|
|
407
|
+
it('a restore into the scope the backup came from keeps honouring it', async () => {
|
|
408
|
+
await host.restoreScope(staff, t1, source, await host.admin.exportScope(staff, t1, source));
|
|
409
|
+
await honouredAtSource();
|
|
410
|
+
expect((await host.admin.listImpersonations(staff, { scopeId: source, active: true })).map((s) => s.id)).toContain(session.id);
|
|
411
|
+
});
|
|
412
|
+
});
|
|
357
413
|
});
|
|
358
414
|
}
|
|
359
415
|
//# sourceMappingURL=impersonation-suite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impersonation-suite.js","sourceRoot":"","sources":["../src/impersonation-suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EACL,aAAa,EACb,eAAe,EACf,WAAW,EACX,OAAO,EACP,QAAQ,EACR,yBAAyB,GAK1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,IAAI,EAAkB,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AA0BjD,MAAM,UAAU,0BAA0B,CACxC,WAAmB,EACnB,WAA4C;IAE5C,QAAQ,CAAC,yBAAyB,WAAW,EAAE,EAAE,GAAG,EAAE;QACpD,IAAI,OAAyB,CAAC;QAC9B,IAAI,IAAe,CAAC;QACpB,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAa,CAAC;QAC9C,uEAAuE;QACvE,MAAM,IAAI,GAAgB,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,iFAAiF;QACjF,MAAM,MAAM,GAAgB,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5C;;;;WAIG;QACH,MAAM,UAAU,GAAG,KAAK,IAAsB,EAAE;YAC9C,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAChC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;YACzF,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,EACvB,KAAc,EACd,SAAS,GAAsF,EAAE,EAClE,EAAE,CACjC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE;YACnC,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI;YACtC,MAAM,EAAE,4CAA4C;YACpD,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC,CAAC;QAEL,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;YAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7B,mFAAmF;YACnF,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;YAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACzF,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;YACzD,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE;gBACrC,GAAG,EAAE,UAAU;gBACf,WAAW,EAAE,CAAC,QAAQ,CAAC;gBACvB,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;gBACjC,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;aACtC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAE5E,QAAQ,CAAC,wEAAwE,EAAE,GAAG,EAAE;YACtF,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;gBAChF,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1D,MAAM,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,MAAM,CACV,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE;oBACnC,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,IAAI;oBACf,MAAM,EAAE,GAAG;iBACZ,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH;;;;eAIG;YACH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC3E,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,MAAM,CACV,WAAW,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,GAAG,CAAC,EAAE,CAAC,CAC/D,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;gBACzF,MAAM,MAAM,CACV,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE;oBACnC,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC9B,SAAS,EAAE,IAAI;oBACf,MAAM,EAAE,oCAAoC;iBAC7C,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH;;;;;eAKG;YACH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,oBAAoB,CAAC,CAAC;gBACjE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,0EAA0E;gBAC1E,sEAAsE;gBACtE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;gBACzE,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1F,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAEpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACnE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACrC,uEAAuE;gBACvE,8BAA8B;gBAC9B,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3F,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/F,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAE5E,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;YAC7E,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;gBACjF,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YAEH;;;;eAIG;YACH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC/E,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC5E,mBAAmB,CACpB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAEjF,oEAAoE;gBACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAc,mBAAmB,CAAC,CAAC;gBACtE,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,aAAc,CAAC,CAAC,CAAC,OAAO,CAAC;oBACrD,OAAO,EAAE,OAAO,CAAC,EAAE;oBACnB,EAAE,EAAE,KAAK;iBACV,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAE5E,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;YAC9C,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAc,kBAAkB,CAAC,CAAC;gBACpE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;gBAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC5B,2EAA2E;gBAC3E,kDAAkD;gBAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAM,CAAC,aAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC9E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAM,CAAC,aAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH;;;;eAIG;YACH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAc,kBAAkB,CAAC,CAAC;gBAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAE,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH;;;;;;;;eAQG;YACH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;gBACrF,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAY,eAAe,CAAC,CAAC;gBAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,aAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;YAEH;2FAC+E;YAC/E,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC5E,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAY,eAAe,CAAC,CAAC;gBAC3D,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAExE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAc,mBAAmB,CAAC,CAAC;gBACtE,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChC,wEAAwE;gBACxE,yDAAyD;gBACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,aAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAE5E,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;YAC9D,qFAAqF;YACrF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC/E,MAAM,IAAI,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;gBACxD,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAC7H,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAErG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC3F,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAChE,iEAAiE,CAClE,CAAC;gBACF,qEAAqE;gBACrE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC3G,MAAM,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;gBACnD,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACzF,iCAAiC,CAClC,CAAC;gBACF,MAAM,MAAM,CACV,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAC7D,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH;;;;;eAKG;YACH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;gBACrF,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,2EAA2E;gBAC3E,+DAA+D;gBAC/D,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAC1F,KAAK,EAAE,kBAAkB;iBAC1B,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;gBACnC,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAEnE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAW,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC;YAEH,4EAA4E;YAC5E,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;gBAC7C,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACxE,mBAAmB;iBACpB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAE5E,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;YAC5E,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,YAAY;gBACZ,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7D,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACrD,yEAAyE;gBACzE,4CAA4C;gBAC5C,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC5E,WAAW,CACZ,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBAC/C,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjC,MAAM,MAAM,CACV,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAgC,EAAE,EAAE,EAAE,KAAK,CAAC,CAC3E,CAAC,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"impersonation-suite.js","sourceRoot":"","sources":["../src/impersonation-suite.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,9 @@ export { impersonationContractSuite } from './impersonation-suite.js';
|
|
|
6
6
|
export { capabilityContractSuite } from './capability-suite.js';
|
|
7
7
|
export { capabilityAttachmentContractSuite } from './capability-attachment-suite.js';
|
|
8
8
|
export { attachmentTextContractSuite } from './attachment-text-suite.js';
|
|
9
|
-
export {
|
|
10
|
-
export
|
|
9
|
+
export type { AttachmentTextHostFixture, AttachmentTextHostOptions } from './attachment-text-suite.js';
|
|
10
|
+
export { ATTACHMENT_TEXT_FIXTURES, DOCX_LINES, hostilePdfs } from './attachment-text-fixtures.js';
|
|
11
|
+
export type { AttachmentTextFixture, HostilePdf } from './attachment-text-fixtures.js';
|
|
11
12
|
export { capabilityExpiryContractSuite } from './capability-expiry-suite.js';
|
|
12
13
|
export type { CapabilityExpiryFixture } from './capability-expiry-suite.js';
|
|
13
14
|
export { searchContractSuite } from './search-suite.js';
|
|
@@ -19,8 +20,16 @@ export { moduleLogContractSuite } from './module-log-suite.js';
|
|
|
19
20
|
export { asyncLogContractSuite, type AsyncLogFixture } from './async-log-suite.js';
|
|
20
21
|
export { idempotencyContractSuite } from './idempotency-suite.js';
|
|
21
22
|
export { listContractSuite } from './list-suite.js';
|
|
23
|
+
export { entityStateContractSuite } from './entity-state-suite.js';
|
|
24
|
+
export { stateMod } from './entity-state-module.js';
|
|
22
25
|
export { scheduleContractSuite } from './schedule-suite.js';
|
|
23
26
|
export { inertScopeContractSuite } from './inert-scope-suite.js';
|
|
27
|
+
export { causedByContractSuite, scopeCausedByContractSuite } from './caused-by-suite.js';
|
|
28
|
+
export { causedByMod } from './caused-by-module.js';
|
|
29
|
+
export { membershipExecutorContractSuite } from './membership-executor-suite.js';
|
|
30
|
+
export { findingsContractSuite } from './findings-suite.js';
|
|
31
|
+
export { findingsAtomicContractSuite, type DirectoryExec } from './findings-atomic-suite.js';
|
|
32
|
+
export { INVITEFIX_A, membershipFixtureMod } from './membership-module.js';
|
|
24
33
|
export { scheduleEntitlementContractSuite } from './schedule-entitlement-suite.js';
|
|
25
34
|
export { jobRunContractSuite } from './job-run-suite.js';
|
|
26
35
|
export { systemSwitchContractSuite } from './system-switch-suite.js';
|