@adonis-agora/durable 0.36.0 → 0.38.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/CHANGELOG.md +57 -0
- package/dist/providers/dashboard_provider.d.ts +34 -0
- package/dist/providers/dashboard_provider.d.ts.map +1 -1
- package/dist/providers/dashboard_provider.js +176 -14
- package/dist/providers/dashboard_provider.js.map +1 -1
- package/dist/src/codec-state-store.d.ts +30 -6
- package/dist/src/codec-state-store.d.ts.map +1 -1
- package/dist/src/codec-state-store.js +56 -10
- package/dist/src/codec-state-store.js.map +1 -1
- package/dist/src/dashboard/auth.d.ts.map +1 -1
- package/dist/src/dashboard/auth.js +4 -0
- package/dist/src/dashboard/auth.js.map +1 -1
- package/dist/src/dashboard/define_config.d.ts +61 -7
- package/dist/src/dashboard/define_config.d.ts.map +1 -1
- package/dist/src/dashboard/define_config.js +49 -12
- package/dist/src/dashboard/define_config.js.map +1 -1
- package/dist/src/dashboard/handlers.d.ts +5 -0
- package/dist/src/dashboard/handlers.d.ts.map +1 -1
- package/dist/src/dashboard/handlers.js +35 -3
- package/dist/src/dashboard/handlers.js.map +1 -1
- package/dist/src/dashboard/index.d.ts +1 -1
- package/dist/src/dashboard/index.js +1 -1
- package/dist/src/dashboard/session_cookie.d.ts +4 -1
- package/dist/src/dashboard/session_cookie.d.ts.map +1 -1
- package/dist/src/dashboard/session_cookie.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
- package/dist/src/run-gateway/run-request-responder.js +10 -0
- package/dist/src/run-gateway/run-request-responder.js.map +1 -1
- package/dist/src/run-gateway/tenant-auth.d.ts +15 -2
- package/dist/src/run-gateway/tenant-auth.d.ts.map +1 -1
- package/dist/src/run-gateway/tenant-auth.js +26 -6
- package/dist/src/run-gateway/tenant-auth.js.map +1 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +19 -5
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.js +7 -0
- package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
# @adonis-agora/durable
|
|
2
2
|
|
|
3
|
+
## 0.38.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#123](https://github.com/DavideCarvalho/adonis-agora-durable/pull/123) [`a051483`](https://github.com/DavideCarvalho/adonis-agora-durable/commit/a0514831ffeabb0ba8ba713a22f4d263dedcb542) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Security wave for the console and the multi-tenant trust boundary.
|
|
8
|
+
|
|
9
|
+
**⚠️ Behavior change — the console now fails closed everywhere.** The default `authorize` guard no
|
|
10
|
+
longer opens the dashboard outside `NODE_ENV=production`: it requires `DURABLE_DASHBOARD_TOKEN` in
|
|
11
|
+
every environment, denying all requests when the var is unset. That old branch left dev boxes,
|
|
12
|
+
staging, and any deployment with an unset/misspelled `NODE_ENV` serving an unauthenticated console
|
|
13
|
+
whose destructive endpoints (bulk cancel-with-compensation on an empty filter, fix-and-replay with
|
|
14
|
+
arbitrary input) a malicious page could fire as simple cross-origin POSTs. **Migration:** configure
|
|
15
|
+
`dashboardAuth`, set `DURABLE_DASHBOARD_TOKEN` / your own `authorize`, or — for local development
|
|
16
|
+
only — spell out `allowUnauthenticated: true` (it warns at boot). When `dashboardAuth` is
|
|
17
|
+
configured, the session guard is the gate and the default token guard steps aside.
|
|
18
|
+
|
|
19
|
+
Also in this wave:
|
|
20
|
+
|
|
21
|
+
- **Cross-site rejection**: browser-originated cross-site mutating requests (by `Sec-Fetch-Site`,
|
|
22
|
+
else `Origin` vs `Host`) get a 403 before any handler — CSRF defense-in-depth over the Lax
|
|
23
|
+
session cookie. Non-browser clients are unaffected.
|
|
24
|
+
- **Session roles + audit**: a `dashboardAuth` session with a NON-EMPTY `roles` list must include
|
|
25
|
+
`operator`/`admin` to hit mutating routes (empty list keeps full access — back-compat). Every
|
|
26
|
+
mutating attempt is audited (actor, method, path) via the app logger or a config `audit` hook.
|
|
27
|
+
- **Payload caps**: fix-and-replay input and signal/update/task bodies are capped at 1 MiB (413).
|
|
28
|
+
- **Open-redirect fix**: `sanitizeReturnTo` now rejects backslash variants (`/\evil.com` — browsers
|
|
29
|
+
normalize `\` to `/`).
|
|
30
|
+
- **Query-string token restricted to GET**: `?token=` exists only for the SSE live-tail
|
|
31
|
+
(`EventSource` cannot set headers); it no longer authorizes mutating routes.
|
|
32
|
+
- **Session hardening**: `Secure` cookie forced in production even behind a proxy without
|
|
33
|
+
trustProxy; login/session-mint endpoints rate-limited (10/min per address); `POST /logout` added
|
|
34
|
+
alongside the GET.
|
|
35
|
+
- **500s stop leaking**: handler failures return a generic body; the detail (driver messages,
|
|
36
|
+
stacks) goes to the app logger.
|
|
37
|
+
- **SSE budget**: per-instance (100) and per-address (10) caps on open event streams, plus a 25s
|
|
38
|
+
server heartbeat so dead clients are reaped instead of holding engine subscriptions forever.
|
|
39
|
+
- **Tenant trust boundary**: the run-request responder logs a LOUD warning when started without a
|
|
40
|
+
`verifyTenant` (the wire tenant claim is then trusted verbatim); `signTenantToken` gains optional
|
|
41
|
+
expiry (`{ ttlMs }`, signed into the claim so it can't be stripped) and `hmacTenantVerifier`
|
|
42
|
+
accepts a secret list for two-step rotation — both additive, legacy tokens keep verifying.
|
|
43
|
+
- **Codec coverage made honest**: `CodecStateStore` documents that the default covers only
|
|
44
|
+
`input`/`output`, and gains `{ coverage: 'extended' }` to also encode step events, errors and
|
|
45
|
+
heartbeat progress (fresh tables / self-detecting codecs only — see the docs). It also forwards
|
|
46
|
+
`recordStepHeartbeat` now (wrapping a store with a codec used to silently drop persisted step
|
|
47
|
+
liveness). New dashboard `redact` config hooks strip PII from the serialized run/checkpoint
|
|
48
|
+
shapes the console renders.
|
|
49
|
+
- **LIKE escaping**: tag values and picker search needles containing `%`/`_` now match literally in
|
|
50
|
+
the Lucid store instead of widening into patterns (the conformance suite asserts it).
|
|
51
|
+
|
|
52
|
+
## 0.37.0
|
|
53
|
+
|
|
54
|
+
### Minor Changes
|
|
55
|
+
|
|
56
|
+
- [#120](https://github.com/DavideCarvalho/adonis-agora-durable/pull/120) [`db4386c`](https://github.com/DavideCarvalho/adonis-agora-durable/commit/db4386cbe3596ca4a4d85b29c2f45f52f0fdce09) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Widen the optional `@adonisjs/redis` peer to also accept `^11.0.0` (was `^9.2.0 || ^10.0.0`).
|
|
57
|
+
|
|
58
|
+
`RedisAdmissionBackend` and `RedisControlPlane` duck-type over `ioredis`/`@adonisjs/redis`'s `RedisConnection`, and the compile-time assignability check in `test/types/redis-pubsub-assignability.ts` still passes unchanged against `@adonisjs/redis@11` — its `RedisConnection`/pub-sub shape didn't change in a way that affects this package's surface. No code changes; peer ranges only ever widen.
|
|
59
|
+
|
|
3
60
|
## 0.36.0
|
|
4
61
|
|
|
5
62
|
### Minor Changes
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { HttpContext } from '@adonisjs/core/http';
|
|
1
2
|
import type { ApplicationService } from '@adonisjs/core/types';
|
|
2
3
|
/**
|
|
3
4
|
* Mounts the durable dashboard into an AdonisJS app: the `@adonis-agora/durable-dashboard` React SPA
|
|
@@ -34,6 +35,15 @@ export default class DashboardProvider {
|
|
|
34
35
|
constructor(app: ApplicationService);
|
|
35
36
|
/** Warn once so a throwing `login`/`session` hook doesn't spam the logs on every failed attempt. */
|
|
36
37
|
private warnedOnHookThrow;
|
|
38
|
+
/** Login-attempt timestamps per client address — a simple sliding window (10/min) so a brute
|
|
39
|
+
* force can't hammer the host's `login` hook at line rate. In-memory per instance: a cluster
|
|
40
|
+
* multiplies the budget by pod count, which still reduces the attack by orders of magnitude. */
|
|
41
|
+
private readonly loginAttempts;
|
|
42
|
+
/** True (and reply 429) when this address exhausted its login window. */
|
|
43
|
+
private loginRateLimited;
|
|
44
|
+
/** SSE connections currently open, per client address (and in total) — see streamRun. */
|
|
45
|
+
private readonly sseByAddress;
|
|
46
|
+
private sseTotal;
|
|
37
47
|
/**
|
|
38
48
|
* Captures the engine's `capability.unavailable` / `protocol.incompatible` diagnostics events so the
|
|
39
49
|
* `/compat` health panel can render each blocked run's structured delta + the live-fleet compat view
|
|
@@ -74,6 +84,10 @@ export default class DashboardProvider {
|
|
|
74
84
|
* session) so a simple `<a href>` works.
|
|
75
85
|
*/
|
|
76
86
|
private registerAuthRoutes;
|
|
87
|
+
/** Record one mutating console action (see DashboardAuditEntry). Never throws into the request. */
|
|
88
|
+
private audit;
|
|
89
|
+
/** Route a handler 500's detail to the app logger (the client only ever sees a generic body). */
|
|
90
|
+
private logServerError;
|
|
77
91
|
private warnHookThrow;
|
|
78
92
|
/**
|
|
79
93
|
* Run the guards for a dashboard resource. Composes the existing `authorize` hook (bearer
|
|
@@ -102,4 +116,24 @@ export default class DashboardProvider {
|
|
|
102
116
|
private writeSessionCookie;
|
|
103
117
|
shutdown(): Promise<void>;
|
|
104
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Whether something already answered this request: a redirect (`location` header — the signal the
|
|
121
|
+
* `authorize` contract has always honoured) or a body queued on the response. The body check reads
|
|
122
|
+
* AdonisJS's `response.hasLazyBody` structurally so a plain-object `ctx` double in a unit test
|
|
123
|
+
* (which has neither) still works.
|
|
124
|
+
*/
|
|
125
|
+
/** Whether this request can change state (everything but GET/HEAD/OPTIONS). Exported for tests. */
|
|
126
|
+
export declare function isMutatingMethod(ctx: HttpContext): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Whether a request is browser-originated CROSS-SITE: `sec-fetch-site` when the browser sends it
|
|
129
|
+
* (anything but `same-origin`/`none` is cross), else the `Origin` header must match the request
|
|
130
|
+
* host. Requests carrying neither header (curl, server-side SDKs, same-origin GETs) are not
|
|
131
|
+
* cross-site. Subdomains (`same-site`) count as cross on purpose — the console has no legitimate
|
|
132
|
+
* cross-subdomain POST caller, and strict beats sorry here.
|
|
133
|
+
*/
|
|
134
|
+
export declare function crossSiteRequest(ctx: HttpContext): boolean;
|
|
135
|
+
/** Role convention (see enforce): no roles = full access; with roles, mutating needs operator/admin. */
|
|
136
|
+
export declare function sessionCanMutate(session: {
|
|
137
|
+
roles: string[];
|
|
138
|
+
}): boolean;
|
|
105
139
|
//# sourceMappingURL=dashboard_provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard_provider.d.ts","sourceRoot":"","sources":["../../providers/dashboard_provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dashboard_provider.d.ts","sourceRoot":"","sources":["../../providers/dashboard_provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,sBAAsB,CAAC;AAyElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACxB,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAA7C,YAAsB,GAAG,EAAE,kBAAkB,EAAI;IAEjD,oGAAoG;IACpG,OAAO,CAAC,iBAAiB,CAAS;IAElC;;qGAEiG;IACjG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAE7D,yEAAyE;IACzE,OAAO,CAAC,gBAAgB;IAkBxB,yFAAyF;IACzF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAK;IAErB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,oFAAoF;IACpF,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,oGAAoG;IACpG,OAAO,CAAC,WAAW;IAIb,IAAI,kBAgBT;YAEa,iBAAiB;IAU/B,OAAO,CAAC,cAAc;IA0ItB,yEAAyE;IACzE,OAAO,CAAC,iBAAiB;IAgDzB;;;;;;OAMG;YACW,SAAS;YA6CT,YAAY;YAWZ,cAAc;IAQ5B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,kBAAkB;IAyF1B,mGAAmG;IACnG,OAAO,CAAC,KAAK;IA0Bb,iGAAiG;YACnF,cAAc;YAWd,aAAa;IAQ3B;;;;;;;;;;;;;;OAcG;YACW,OAAO;IAyDrB;;;;;OAKG;YACW,QAAQ;IAuBtB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;IAapB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9B;CACF;AAED;;;;;GAKG;AACH,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAG1D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAU1D;AAED,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAMtE"}
|
|
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
5
5
|
import { resolveAccessDeniedPage, } from '../src/dashboard/access_denied_page.js';
|
|
6
6
|
import { performLogin, performSession, readSession, SESSION_COOKIE_NAME, sanitizeReturnTo, } from '../src/dashboard/auth.js';
|
|
7
7
|
import { compat, enumerateLiveFleet, mergeFleets, } from '../src/dashboard/compat.js';
|
|
8
|
-
import { resolveConfig, } from '../src/dashboard/define_config.js';
|
|
8
|
+
import { isProduction, resolveConfig, } from '../src/dashboard/define_config.js';
|
|
9
9
|
import { BlockedDiagnosticsRecorder } from '../src/dashboard/diagnostics-recorder.js';
|
|
10
10
|
import { dashboardEngineForRole } from '../src/dashboard/gateway-adapter.js';
|
|
11
11
|
import { bulkAction, cancelRun, completeTaskRun, continueRun, failTaskRun, getRun, health, listRuns, listSchedules, redispatchPendingRun, retryRun, retryWithInputRun, runValues, scheduleAction, signalRun, topology, updateRun, workers, } from '../src/dashboard/handlers.js';
|
|
@@ -63,6 +63,32 @@ export default class DashboardProvider {
|
|
|
63
63
|
}
|
|
64
64
|
/** Warn once so a throwing `login`/`session` hook doesn't spam the logs on every failed attempt. */
|
|
65
65
|
warnedOnHookThrow = false;
|
|
66
|
+
/** Login-attempt timestamps per client address — a simple sliding window (10/min) so a brute
|
|
67
|
+
* force can't hammer the host's `login` hook at line rate. In-memory per instance: a cluster
|
|
68
|
+
* multiplies the budget by pod count, which still reduces the attack by orders of magnitude. */
|
|
69
|
+
loginAttempts = new Map();
|
|
70
|
+
/** True (and reply 429) when this address exhausted its login window. */
|
|
71
|
+
loginRateLimited(ctx) {
|
|
72
|
+
const WINDOW_MS = 60_000;
|
|
73
|
+
const MAX_ATTEMPTS = 10;
|
|
74
|
+
const key = ctx.request.ip() || 'unknown';
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
const recent = (this.loginAttempts.get(key) ?? []).filter((t) => now - t < WINDOW_MS);
|
|
77
|
+
if (recent.length >= MAX_ATTEMPTS) {
|
|
78
|
+
this.loginAttempts.set(key, recent);
|
|
79
|
+
ctx.response.status(429).json({ error: 'too many login attempts — retry in a minute' });
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
recent.push(now);
|
|
83
|
+
this.loginAttempts.set(key, recent);
|
|
84
|
+
// Bounded: prune other addresses opportunistically so the map can't grow without limit.
|
|
85
|
+
if (this.loginAttempts.size > 10_000)
|
|
86
|
+
this.loginAttempts.clear();
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
/** SSE connections currently open, per client address (and in total) — see streamRun. */
|
|
90
|
+
sseByAddress = new Map();
|
|
91
|
+
sseTotal = 0;
|
|
66
92
|
/**
|
|
67
93
|
* Captures the engine's `capability.unavailable` / `protocol.incompatible` diagnostics events so the
|
|
68
94
|
* `/compat` health panel can render each blocked run's structured delta + the live-fleet compat view
|
|
@@ -106,7 +132,10 @@ export default class DashboardProvider {
|
|
|
106
132
|
// a store role adapts the engine (built by @adonis-agora/durable's provider); a store-less `tenant`
|
|
107
133
|
// pod resolves the DURABLE_RUN_GATEWAY token (a ProxyRunGateway) and adapts it — NO engine, NO store.
|
|
108
134
|
const resolveEngine = () => dashboardEngineForRole(role, this.app.container, WorkflowEngine);
|
|
109
|
-
const deps = async () => ({
|
|
135
|
+
const deps = async () => ({
|
|
136
|
+
engine: await resolveEngine(),
|
|
137
|
+
...(config.redact ? { redact: config.redact } : {}),
|
|
138
|
+
});
|
|
110
139
|
// Built-in `dashboardAuth` (Mode A `session` and/or Mode B `login`, opt-in). Registered ONLY when
|
|
111
140
|
// configured, so omitting `dashboardAuth` leaves route registration byte-for-byte as it was. These
|
|
112
141
|
// endpoints are public (behind NEITHER guard): they MINT the session the guard checks for.
|
|
@@ -119,14 +148,19 @@ export default class DashboardProvider {
|
|
|
119
148
|
return async (ctx) => {
|
|
120
149
|
if (!(await this.enforce(config, ctx, 'api')))
|
|
121
150
|
return;
|
|
151
|
+
// Attribution for every mutating attempt — BEFORE the handler, so even a failing action is
|
|
152
|
+
// on record. Reads (GET) are not audited (they'd drown the log).
|
|
153
|
+
if (isMutatingMethod(ctx))
|
|
154
|
+
this.audit(config, ctx);
|
|
122
155
|
try {
|
|
123
156
|
const result = await handler(await deps(), toApiRequest(ctx));
|
|
124
157
|
return ctx.response.status(result.status).json(result.body);
|
|
125
158
|
}
|
|
126
159
|
catch (error) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
160
|
+
// Generic body on a 500: raw driver/store messages (connection strings, SQL fragments)
|
|
161
|
+
// must not flow to API callers. The detail goes to the app logger instead.
|
|
162
|
+
void this.logServerError(error);
|
|
163
|
+
return ctx.response.status(500).json({ error: 'internal error' });
|
|
130
164
|
}
|
|
131
165
|
};
|
|
132
166
|
};
|
|
@@ -213,9 +247,8 @@ export default class DashboardProvider {
|
|
|
213
247
|
return ctx.response.status(result.status).json(result.body);
|
|
214
248
|
}
|
|
215
249
|
catch (error) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
.json({ error: error instanceof Error ? error.message : 'internal error' });
|
|
250
|
+
void this.logServerError(error);
|
|
251
|
+
return ctx.response.status(500).json({ error: 'internal error' });
|
|
219
252
|
}
|
|
220
253
|
})
|
|
221
254
|
.as('durable_dashboard.compat');
|
|
@@ -273,6 +306,17 @@ export default class DashboardProvider {
|
|
|
273
306
|
* teardown).
|
|
274
307
|
*/
|
|
275
308
|
async streamRun(ctx, engine, runId) {
|
|
309
|
+
// Connection budget: each open stream is one listener on the engine's GLOBAL emitter plus one
|
|
310
|
+
// held socket — uncapped, N tabs (or a leak) made every engine event pay O(N) filtering and
|
|
311
|
+
// pinned N sockets forever. 100 per instance / 10 per client address is far above any human use.
|
|
312
|
+
const address = ctx.request.ip() || 'unknown';
|
|
313
|
+
const perAddress = this.sseByAddress.get(address) ?? 0;
|
|
314
|
+
if (this.sseTotal >= 100 || perAddress >= 10) {
|
|
315
|
+
ctx.response.status(429).json({ error: 'too many open event streams' });
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
this.sseTotal += 1;
|
|
319
|
+
this.sseByAddress.set(address, perAddress + 1);
|
|
276
320
|
ctx.response.header('content-type', 'text/event-stream');
|
|
277
321
|
ctx.response.header('cache-control', 'no-cache');
|
|
278
322
|
ctx.response.header('connection', 'keep-alive');
|
|
@@ -281,9 +325,27 @@ export default class DashboardProvider {
|
|
|
281
325
|
const unsubscribe = engine.subscribe(runId, (event) => {
|
|
282
326
|
stream.write(`data: ${JSON.stringify(event)}\n\n`);
|
|
283
327
|
});
|
|
328
|
+
// Server-side heartbeat: a comment line every 25s keeps intermediaries from silently reaping an
|
|
329
|
+
// idle stream AND surfaces a dead client to Node (the write errors, `close` fires, we clean up)
|
|
330
|
+
// instead of holding the subscription forever.
|
|
331
|
+
const ping = setInterval(() => {
|
|
332
|
+
stream.write(': ping\n\n');
|
|
333
|
+
}, 25_000);
|
|
334
|
+
ping.unref?.();
|
|
335
|
+
let cleaned = false;
|
|
284
336
|
const cleanup = () => {
|
|
337
|
+
if (cleaned)
|
|
338
|
+
return;
|
|
339
|
+
cleaned = true;
|
|
340
|
+
clearInterval(ping);
|
|
285
341
|
unsubscribe();
|
|
286
342
|
stream.end();
|
|
343
|
+
this.sseTotal -= 1;
|
|
344
|
+
const left = (this.sseByAddress.get(address) ?? 1) - 1;
|
|
345
|
+
if (left <= 0)
|
|
346
|
+
this.sseByAddress.delete(address);
|
|
347
|
+
else
|
|
348
|
+
this.sseByAddress.set(address, left);
|
|
287
349
|
};
|
|
288
350
|
ctx.request.request.on('close', cleanup);
|
|
289
351
|
ctx.response.stream(stream);
|
|
@@ -344,6 +406,8 @@ export default class DashboardProvider {
|
|
|
344
406
|
// page with `?error` on failure). Same hook, same cookie, same uniform failure either way.
|
|
345
407
|
router
|
|
346
408
|
.post(loginPath, async (ctx) => {
|
|
409
|
+
if (this.loginRateLimited(ctx))
|
|
410
|
+
return;
|
|
347
411
|
const body = ctx.request.body();
|
|
348
412
|
const outcome = await performLogin(auth, body, config.path);
|
|
349
413
|
const form = isFormPost(ctx);
|
|
@@ -375,6 +439,8 @@ export default class DashboardProvider {
|
|
|
375
439
|
if (auth.session) {
|
|
376
440
|
router
|
|
377
441
|
.post(sessionPath, async (ctx) => {
|
|
442
|
+
if (this.loginRateLimited(ctx))
|
|
443
|
+
return;
|
|
378
444
|
const outcome = await performSession(auth, ctx.request.request);
|
|
379
445
|
if (outcome.kind === 'unauthorized') {
|
|
380
446
|
this.warnHookThrow(outcome.hookError);
|
|
@@ -385,12 +451,51 @@ export default class DashboardProvider {
|
|
|
385
451
|
})
|
|
386
452
|
.as('durable_dashboard.session.mint');
|
|
387
453
|
}
|
|
388
|
-
|
|
389
|
-
.get(logoutPath, async (ctx) => {
|
|
454
|
+
const logout = async (ctx) => {
|
|
390
455
|
ctx.response.clearCookie(SESSION_COOKIE_NAME, { path: '/' });
|
|
391
456
|
return ctx.response.redirect().toPath(auth.login ? loginPath : config.path || '/');
|
|
392
|
-
}
|
|
393
|
-
|
|
457
|
+
};
|
|
458
|
+
router.get(logoutPath, logout).as('durable_dashboard.logout');
|
|
459
|
+
// POST too: the CSRF-proof spelling for clients that prefer it (the GET stays for plain <a>
|
|
460
|
+
// links — it only ever destroys the caller's own session, so a forced logout is an annoyance,
|
|
461
|
+
// not a compromise).
|
|
462
|
+
router.post(logoutPath, logout).as('durable_dashboard.logout.post');
|
|
463
|
+
}
|
|
464
|
+
/** Record one mutating console action (see DashboardAuditEntry). Never throws into the request. */
|
|
465
|
+
audit(config, ctx) {
|
|
466
|
+
try {
|
|
467
|
+
const auth = config.dashboardAuth;
|
|
468
|
+
const session = auth ? readSession(auth, this.readSessionCookie(ctx)) : null;
|
|
469
|
+
const fromToken = ctx.request.header('authorization') !== undefined ||
|
|
470
|
+
ctx.request.header('x-durable-token') !== undefined;
|
|
471
|
+
const actor = session?.name ?? session?.sub ?? (fromToken ? 'token' : 'anonymous');
|
|
472
|
+
const entry = {
|
|
473
|
+
at: new Date(),
|
|
474
|
+
actor,
|
|
475
|
+
method: ctx.request.method().toUpperCase(),
|
|
476
|
+
path: ctx.request.url(false),
|
|
477
|
+
};
|
|
478
|
+
if (config.audit) {
|
|
479
|
+
config.audit(entry);
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
void this.app.container.make('logger').then((logger) => {
|
|
483
|
+
logger.info(`[durable_dashboard] audit actor=${entry.actor} ${entry.method} ${entry.path}`);
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
catch {
|
|
487
|
+
/* auditing must never break the action */
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/** Route a handler 500's detail to the app logger (the client only ever sees a generic body). */
|
|
491
|
+
async logServerError(error) {
|
|
492
|
+
try {
|
|
493
|
+
const logger = await this.app.container.make('logger');
|
|
494
|
+
logger.error(`[durable_dashboard] handler failed: ${error instanceof Error ? (error.stack ?? error.message) : String(error)}`);
|
|
495
|
+
}
|
|
496
|
+
catch {
|
|
497
|
+
/* logging must never throw into the request */
|
|
498
|
+
}
|
|
394
499
|
}
|
|
395
500
|
async warnHookThrow(hookError) {
|
|
396
501
|
if (hookError === undefined || this.warnedOnHookThrow)
|
|
@@ -416,6 +521,15 @@ export default class DashboardProvider {
|
|
|
416
521
|
* Returns `false` (and has already written the response) when the request must short-circuit.
|
|
417
522
|
*/
|
|
418
523
|
async enforce(config, ctx, mode) {
|
|
524
|
+
// CSRF defense-in-depth over the Lax session cookie: a browser-originated CROSS-SITE mutating
|
|
525
|
+
// request is rejected outright, whatever guard would have passed it. The mutating endpoints
|
|
526
|
+
// need no body and read flags from the query string, so without this a malicious page could
|
|
527
|
+
// fire them as SIMPLE cross-origin POSTs (no preflight) against a console the operator's
|
|
528
|
+
// browser is authenticated to. Non-browser clients send neither header and pass.
|
|
529
|
+
if (mode === 'api' && isMutatingMethod(ctx) && crossSiteRequest(ctx)) {
|
|
530
|
+
ctx.response.status(403).json({ error: 'cross-site request rejected' });
|
|
531
|
+
return false;
|
|
532
|
+
}
|
|
419
533
|
const allowed = await config.authorize(ctx);
|
|
420
534
|
if (!allowed) {
|
|
421
535
|
if (mode === 'page') {
|
|
@@ -430,8 +544,19 @@ export default class DashboardProvider {
|
|
|
430
544
|
if (!auth)
|
|
431
545
|
return true;
|
|
432
546
|
const session = readSession(auth, this.readSessionCookie(ctx));
|
|
433
|
-
if (session)
|
|
547
|
+
if (session) {
|
|
548
|
+
// Role convention: a session WITHOUT roles keeps full access (back-compat — most host hooks
|
|
549
|
+
// never set them); a session WITH roles must carry `operator` (or `admin`) to mutate.
|
|
550
|
+
// Previously every authenticated principal — including a read-only support login — could
|
|
551
|
+
// bulk-cancel with compensation or fix-and-replay.
|
|
552
|
+
if (mode === 'api' && isMutatingMethod(ctx) && !sessionCanMutate(session)) {
|
|
553
|
+
ctx.response
|
|
554
|
+
.status(403)
|
|
555
|
+
.json({ error: "this session's roles do not include 'operator' (or 'admin')" });
|
|
556
|
+
return false;
|
|
557
|
+
}
|
|
434
558
|
return true;
|
|
559
|
+
}
|
|
435
560
|
if (mode === 'page') {
|
|
436
561
|
if (auth.login) {
|
|
437
562
|
const returnTo = ctx.request.url(true);
|
|
@@ -480,7 +605,9 @@ export default class DashboardProvider {
|
|
|
480
605
|
ctx.response.plainCookie(SESSION_COOKIE_NAME, value, {
|
|
481
606
|
httpOnly: true,
|
|
482
607
|
sameSite: 'lax',
|
|
483
|
-
|
|
608
|
+
// Forced on in production even when `request.secure()` reads false (a TLS-terminating proxy
|
|
609
|
+
// without AdonisJS trustProxy) — exactly the deployments that most need the Secure flag.
|
|
610
|
+
secure: isProduction() || ctx.request.secure(),
|
|
484
611
|
path: '/',
|
|
485
612
|
maxAge: Math.floor(auth.ttlMs / 1000),
|
|
486
613
|
encode: false,
|
|
@@ -497,6 +624,41 @@ export default class DashboardProvider {
|
|
|
497
624
|
* AdonisJS's `response.hasLazyBody` structurally so a plain-object `ctx` double in a unit test
|
|
498
625
|
* (which has neither) still works.
|
|
499
626
|
*/
|
|
627
|
+
/** Whether this request can change state (everything but GET/HEAD/OPTIONS). Exported for tests. */
|
|
628
|
+
export function isMutatingMethod(ctx) {
|
|
629
|
+
const method = ctx.request.method().toUpperCase();
|
|
630
|
+
return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS';
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* Whether a request is browser-originated CROSS-SITE: `sec-fetch-site` when the browser sends it
|
|
634
|
+
* (anything but `same-origin`/`none` is cross), else the `Origin` header must match the request
|
|
635
|
+
* host. Requests carrying neither header (curl, server-side SDKs, same-origin GETs) are not
|
|
636
|
+
* cross-site. Subdomains (`same-site`) count as cross on purpose — the console has no legitimate
|
|
637
|
+
* cross-subdomain POST caller, and strict beats sorry here.
|
|
638
|
+
*/
|
|
639
|
+
export function crossSiteRequest(ctx) {
|
|
640
|
+
const fetchSite = ctx.request.header('sec-fetch-site');
|
|
641
|
+
if (fetchSite)
|
|
642
|
+
return fetchSite !== 'same-origin' && fetchSite !== 'none';
|
|
643
|
+
const origin = ctx.request.header('origin');
|
|
644
|
+
if (!origin || origin === 'null')
|
|
645
|
+
return origin === 'null';
|
|
646
|
+
try {
|
|
647
|
+
return new URL(origin).host !== ctx.request.header('host');
|
|
648
|
+
}
|
|
649
|
+
catch {
|
|
650
|
+
return true; // an unparseable Origin is not a browser being honest — reject
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
/** Role convention (see enforce): no roles = full access; with roles, mutating needs operator/admin. */
|
|
654
|
+
export function sessionCanMutate(session) {
|
|
655
|
+
if (session.roles.length === 0)
|
|
656
|
+
return true;
|
|
657
|
+
return session.roles.some((r) => {
|
|
658
|
+
const role = r.toLowerCase();
|
|
659
|
+
return role === 'operator' || role === 'admin';
|
|
660
|
+
});
|
|
661
|
+
}
|
|
500
662
|
function responseAnswered(ctx) {
|
|
501
663
|
if (ctx.response.getHeader('location'))
|
|
502
664
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard_provider.js","sourceRoot":"","sources":["../../providers/dashboard_provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard_provider.js","sourceRoot":"","sources":["../../providers/dashboard_provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EAEL,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,cAAc,EAEd,WAAW,EACX,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,MAAM,EACN,kBAAkB,EAElB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,YAAY,EAEZ,aAAa,GACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAGL,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EAGX,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,SAAS,EACT,QAAQ,EACR,SAAS,EACT,OAAO,GACR,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;;GAMG;AACH,IAAI,MAA0B,CAAC;AAC/B,SAAS,YAAY;IACnB,MAAM,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,gBAAgB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACd,GAAG;IAAzB,YAAsB,GAAuB;mBAAvB,GAAG;IAAuB,CAAC;IAEjD,oGAAoG;IAC5F,iBAAiB,GAAG,KAAK,CAAC;IAElC;;qGAEiG;IAChF,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE7D,yEAAyE;IACjE,gBAAgB,CAAC,GAAgB;QACvC,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;QACtF,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACpC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpC,wFAAwF;QACxF,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,MAAM;YAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yFAAyF;IACxE,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,QAAQ,GAAG,CAAC,CAAC;IAErB;;;;OAIG;IACc,WAAW,GAAG,IAAI,0BAA0B,EAAE,CAAC;IAChE,oFAAoF;IAC5E,iBAAiB,GAAwB,IAAI,CAAC;IAEtD,oGAAoG;IAC5F,WAAW;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAgB,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,YAAY,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,aAAa,CAC1B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAyB,mBAAmB,EAAE,EAAE,CAAC,CACrE,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEhC,8FAA8F;QAC9F,+FAA+F;QAC/F,gEAAgE;QAChE,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAA+C;QAC7E,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,4FAA4F;QAC9F,CAAC;IACH,CAAC;IAEO,cAAc,CACpB,MAAyB,EACzB,MAAsC,EACtC,IAA+C;QAE/C,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC;QAErC,iGAAiG;QACjG,oGAAoG;QACpG,sGAAsG;QACtG,MAAM,aAAa,GAAG,GAA6B,EAAE,CACnD,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE,CAAC,CAAC;YACvC,MAAM,EAAE,MAAM,aAAa,EAAE;YAC7B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC,CAAC;QAEH,kGAAkG;QAClG,mGAAmG;QACnG,2FAA2F;QAC3F,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEhD,YAAY;QACZ,MAAM,IAAI,GAAG,CAAC,OAA2D,EAAE,EAAE;YAC3E,OAAO,KAAK,EAAE,GAAgB,EAAE,EAAE;gBAChC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;oBAAE,OAAO;gBACtD,2FAA2F;gBAC3F,iEAAiE;gBACjE,IAAI,gBAAgB,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACnD,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC9D,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,uFAAuF;oBACvF,2EAA2E;oBAC3E,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC;QACjF,wEAAwE;QACxE,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC;QAC1F,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC;QAC5F,MAAM;aACH,IAAI,CAAC,GAAG,OAAO,4BAA4B,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACrE,EAAE,CAAC,yCAAyC,CAAC,CAAC;QACjD,MAAM;aACH,IAAI,CAAC,GAAG,OAAO,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;aAClE,EAAE,CAAC,mCAAmC,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC;QAC/F,MAAM;aACH,IAAI,CAAC,GAAG,OAAO,oBAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aACvD,EAAE,CAAC,iCAAiC,CAAC,CAAC;QACzC,0FAA0F;QAC1F,0FAA0F;QAC1F,sBAAsB;QACtB,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC;QAC/F,MAAM;aACH,IAAI,CAAC,GAAG,OAAO,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACzD,EAAE,CAAC,+BAA+B,CAAC,CAAC;QACvC,MAAM;aACH,IAAI,CAAC,GAAG,OAAO,gCAAgC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;aACvE,EAAE,CAAC,sCAAsC,CAAC,CAAC;QAC9C,MAAM;aACH,IAAI,CAAC,GAAG,OAAO,4BAA4B,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aAC/D,EAAE,CAAC,kCAAkC,CAAC,CAAC;QAC1C,4FAA4F;QAC5F,yFAAyF;QACzF,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,mCAAmC,CAAC,CAAC;QAChG,+FAA+F;QAC/F,MAAM;aACH,GAAG,CAAC,GAAG,OAAO,eAAe,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;YACzD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO;YACtD,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC;aACD,EAAE,CAAC,2BAA2B,CAAC,CAAC;QACnC,MAAM;aACH,IAAI,CAAC,GAAG,OAAO,yBAAyB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;aAC/D,EAAE,CAAC,oCAAoC,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC;QACtF,MAAM;aACH,GAAG,CACF,GAAG,OAAO,SAAS,EACnB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACvB;aACA,EAAE,CAAC,0BAA0B,CAAC,CAAC;QAClC,MAAM;aACH,GAAG,CACF,GAAG,OAAO,UAAU,EACpB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACxB;aACA,EAAE,CAAC,2BAA2B,CAAC,CAAC;QACnC,MAAM;aACH,GAAG,CAAC,GAAG,OAAO,WAAW,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;YACrD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO;YACtD,0FAA0F;YAC1F,oFAAoF;YACpF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAgB,SAAS,EAAE,EAAE,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC,CAAC;aACD,EAAE,CAAC,4BAA4B,CAAC,CAAC;QAEpC,6FAA6F;QAC7F,8FAA8F;QAC9F,MAAM;aACH,GAAG,CAAC,GAAG,OAAO,kBAAkB,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;YAC5D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO;YACtD,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC;aACD,EAAE,CAAC,+BAA+B,CAAC,CAAC;QAEvC,iGAAiG;QACjG,wGAAwG;QACxG,MAAM;aACH,GAAG,CAAC,GAAG,OAAO,SAAS,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;YACnD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO;YACtD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC,CAAC;gBAC5E,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC;aACD,EAAE,CAAC,0BAA0B,CAAC,CAAC;IACpC,CAAC;IAED,yEAAyE;IACjE,iBAAiB,CACvB,MAAyB,EACzB,MAAsC,EACtC,OAAe;QAEf,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAEzD,MAAM;aACH,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;YACzC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAAE,OAAO;YACvD,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,CAAC,QAAQ;qBAChB,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CACH,4IAA4I,CAC7I,CAAC;YACN,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ;iBAChB,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;iBAClD,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;iBACpD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC;aACD,EAAE,CAAC,yBAAyB,CAAC,CAAC;QAEjC,MAAM;aACH,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,eAAe,EAAE,KAAK,EAAE,GAAgB,EAAE,EAAE;YAC7D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAAE,OAAO;YACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,IAAI,KAAa,CAAC;YAClB,IAAI,CAAC;gBACH,KAAK,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ;iBAChB,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;iBAC5C,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;iBAC9D,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;aACD,EAAE,CAAC,0BAA0B,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,SAAS,CAAC,GAAgB,EAAE,MAAuB,EAAE,KAAa;QAC9E,8FAA8F;QAC9F,4FAA4F;QAC5F,iGAAiG;QACjG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;YAC7C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;QAE/C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACzD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACjD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAChD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YACpD,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,gGAAgG;QAChG,gGAAgG;QAChG,+CAA+C;QAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC,EAAE,MAAM,CAAC,CAAC;QACV,IAA+B,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,WAAW,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,IAAI,IAAI,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;gBAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAuB;QAChD,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO;YACL,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;YACvE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;YAClB,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC;SAClE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAmB,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,kBAAkB,CACxB,MAAyB,EACzB,MAAsC,EACtC,IAA2B;QAE3B,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,IAAI,QAAQ,CAAC;QACzC,MAAM,WAAW,GAAG,GAAG,MAAM,CAAC,IAAI,UAAU,CAAC;QAC7C,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,IAAI,SAAS,CAAC;QAE3C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM;iBACH,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC5B,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;gBAChE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;gBAClE,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CACtB,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE;oBAC3B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS;oBAC7B,QAAQ,EAAE,EAAE,CAAC,QAAQ;iBACtB,CAAC,CACH,CAAC;YACJ,CAAC,CAAC;iBACD,EAAE,CAAC,8BAA8B,CAAC,CAAC;YAEtC,2FAA2F;YAC3F,6FAA6F;YAC7F,0FAA0F;YAC1F,2FAA2F;YAC3F,MAAM;iBACH,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC7B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACvC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,GAAG,CAAC,QAAQ;qBACT,QAAQ,EAAE;qBACV,MAAM,CAAC;oBACN,KAAK,EAAE,GAAG;oBACV,QAAQ,EAAE,gBAAgB,CACvB,IAAsC,EAAE,QAAQ,EACjD,MAAM,CAAC,IAAI,IAAI,GAAG,CACnB;iBACF,CAAC;qBACD,MAAM,CAAC,SAAS,CAAC,CAAC;gBACvB,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACnC,IAAI,IAAI;wBAAE,OAAO,WAAW,EAAE,CAAC;oBAC/B,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACtC,IAAI,IAAI;wBAAE,OAAO,WAAW,EAAE,CAAC;oBAC/B,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBACxD,IAAI,IAAI;oBAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACpE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC,CAAC;iBACD,EAAE,CAAC,gCAAgC,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM;iBACH,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC/B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACvC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBACxD,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC;iBACD,EAAE,CAAC,gCAAgC,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,EAAE,GAAgB,EAAE,EAAE;YACxC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7D,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QACrF,CAAC,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC;QAC9D,4FAA4F;QAC5F,8FAA8F;QAC9F,qBAAqB;QACrB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC;IACtE,CAAC;IAED,mGAAmG;IAC3F,KAAK,CAAC,MAAsC,EAAE,GAAgB;QACpE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7E,MAAM,SAAS,GACb,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,SAAS;gBACjD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,SAAS,CAAC;YACtD,MAAM,KAAK,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACnF,MAAM,KAAK,GAAwB;gBACjC,EAAE,EAAE,IAAI,IAAI,EAAE;gBACd,KAAK;gBACL,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;gBAC1C,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aAC7B,CAAC;YACF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACrD,MAAM,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED,iGAAiG;IACzF,KAAK,CAAC,cAAc,CAAC,KAAc;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CACV,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjH,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAkB;QAC5C,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC9D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,+DAA+D,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,KAAK,CAAC,OAAO,CACnB,MAAsC,EACtC,GAAgB,EAChB,IAAoB;QAEpB,8FAA8F;QAC9F,4FAA4F;QAC5F,4FAA4F;QAC5F,yFAAyF;QACzF,iFAAiF;QACjF,IAAI,IAAI,KAAK,KAAK,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;YACxE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,OAAO,EAAE,CAAC;YACZ,4FAA4F;YAC5F,sFAAsF;YACtF,yFAAyF;YACzF,mDAAmD;YACnD,IAAI,IAAI,KAAK,KAAK,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,QAAQ;qBACT,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,EAAE,KAAK,EAAE,6DAA6D,EAAE,CAAC,CAAC;gBAClF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACvC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC;gBACpF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,0FAA0F;YAC1F,oFAAoF;YACpF,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC9E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,QAAQ,CACpB,GAAgB,EAChB,MAAsC,EACtC,MAAmD;QAEnD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE;YAAE,OAAO;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAqB;YAC7B,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrF,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAC1B,GAAG,CAAC,QAAQ;aACT,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aACnB,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;aAClD,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;aACpD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,GAAgB;QACxC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7E,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC;IAEO,kBAAkB,CAAC,GAAgB,EAAE,IAA2B,EAAE,KAAa;QACrF,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,mBAAmB,EAAE,KAAK,EAAE;YACnD,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,KAAK;YACf,4FAA4F;YAC5F,yFAAyF;YACzF,MAAM,EAAE,YAAY,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE;YAC9C,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;CACF;AAED;;;;;GAKG;AACH,mGAAmG;AACnG,MAAM,UAAU,gBAAgB,CAAC,GAAgB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,OAAO,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC;AACvE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAgB;IAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvD,IAAI,SAAS;QAAE,OAAO,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,MAAM,CAAC;IAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,KAAK,MAAM,CAAC;IAC3D,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,+DAA+D;IAC9E,CAAC;AACH,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,gBAAgB,CAAC,OAA4B;IAC3D,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAgB;IACxC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAuE,CAAC;IAC7F,OAAO,QAAQ,CAAC,WAAW,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,GAAgB;IAChC,MAAM,KAAK,GAAI,GAAG,CAAC,QAA2C,CAAC,KAAK,CAAC;IACrE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,GAAgB;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AACpG,CAAC;AAED,iFAAiF;AACjF,SAAS,YAAY,CAAC,GAAgB;IACpC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAA4C;QACxD,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAmD;QACxE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -8,20 +8,38 @@ export interface PayloadCodec {
|
|
|
8
8
|
encode(value: unknown): unknown;
|
|
9
9
|
decode(value: unknown): unknown;
|
|
10
10
|
}
|
|
11
|
+
/** What {@link CodecStateStore} runs through the codec. */
|
|
12
|
+
export interface CodecStateStoreOptions {
|
|
13
|
+
/**
|
|
14
|
+
* `'payloads'` (default, the historical behavior): run/step `input` + `output` only. **Know what
|
|
15
|
+
* that leaves in the clear**: step `events` (everything step code passes to `ctx.log`), the
|
|
16
|
+
* structured `error` messages, heartbeat progress, and search attributes — a deployment sold as
|
|
17
|
+
* "encrypted payloads" still leaks whatever its steps log.
|
|
18
|
+
*
|
|
19
|
+
* `'extended'`: also encode step `events`, step/run `error`, and heartbeat progress (search
|
|
20
|
+
* attributes stay clear — they must remain queryable). ONLY enable on a FRESH table, or with a
|
|
21
|
+
* codec whose `decode` recognizes its own ciphertext and passes other values through: rows
|
|
22
|
+
* written before the switch hold those fields as plaintext, and a decode that can't tell would
|
|
23
|
+
* garble them.
|
|
24
|
+
*/
|
|
25
|
+
coverage?: 'payloads' | 'extended';
|
|
26
|
+
}
|
|
11
27
|
/**
|
|
12
|
-
* A `StateStore` decorator that runs run/step **payloads**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
28
|
+
* A `StateStore` decorator that runs run/step **payloads** through a {@link PayloadCodec} — encoded
|
|
29
|
+
* on write, decoded on read — so they're never stored in the clear. Adapter-agnostic: wrap any
|
|
30
|
+
* store. Searchable metadata (id, status, workflow, tags, timestamps) is left untouched so the
|
|
31
|
+
* dashboard, queries, and recovery still work. See {@link CodecStateStoreOptions.coverage} for
|
|
32
|
+
* exactly which fields are covered — the default covers `input`/`output` only.
|
|
16
33
|
*
|
|
17
34
|
* ```ts
|
|
18
|
-
* const store = new CodecStateStore(new TypeOrmStateStore(ds), aesCodec);
|
|
35
|
+
* const store = new CodecStateStore(new TypeOrmStateStore(ds), aesCodec, { coverage: 'extended' });
|
|
19
36
|
* ```
|
|
20
37
|
*/
|
|
21
38
|
export declare class CodecStateStore implements StateStore {
|
|
22
39
|
private readonly inner;
|
|
23
40
|
private readonly codec;
|
|
24
|
-
|
|
41
|
+
private readonly extended;
|
|
42
|
+
constructor(inner: StateStore, codec: PayloadCodec, options?: CodecStateStoreOptions);
|
|
25
43
|
private enc;
|
|
26
44
|
private dec;
|
|
27
45
|
private encRun;
|
|
@@ -36,6 +54,12 @@ export declare class CodecStateStore implements StateStore {
|
|
|
36
54
|
deleteRun(runId: string): Promise<void>;
|
|
37
55
|
getCheckpoint(runId: string, seq: number): Promise<StepCheckpoint | null>;
|
|
38
56
|
saveCheckpoint(checkpoint: StepCheckpoint): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Forwarded — previously this wrapper simply didn't implement the optional method, so wrapping a
|
|
59
|
+
* store with a codec silently DISABLED persisted step liveness entirely. Under `extended`
|
|
60
|
+
* coverage the progress payload is encoded like every other step payload.
|
|
61
|
+
*/
|
|
62
|
+
recordStepHeartbeat(runId: string, seq: number, at: Date, progress?: unknown): Promise<void>;
|
|
39
63
|
transaction<T>(work: (tx: {
|
|
40
64
|
raw: unknown;
|
|
41
65
|
saveCheckpoint: (cp: StepCheckpoint) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec-state-store.d.ts","sourceRoot":"","sources":["../../src/codec-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAGzB;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CACjC;AAED
|
|
1
|
+
{"version":3,"file":"codec-state-store.d.ts","sourceRoot":"","sources":["../../src/codec-state-store.ts"],"names":[],"mappings":"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"}
|