@adonis-agora/durable 0.37.0 → 0.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/providers/dashboard_provider.d.ts +34 -0
  3. package/dist/providers/dashboard_provider.d.ts.map +1 -1
  4. package/dist/providers/dashboard_provider.js +176 -14
  5. package/dist/providers/dashboard_provider.js.map +1 -1
  6. package/dist/src/codec-state-store.d.ts +30 -6
  7. package/dist/src/codec-state-store.d.ts.map +1 -1
  8. package/dist/src/codec-state-store.js +56 -10
  9. package/dist/src/codec-state-store.js.map +1 -1
  10. package/dist/src/dashboard/auth.d.ts.map +1 -1
  11. package/dist/src/dashboard/auth.js +4 -0
  12. package/dist/src/dashboard/auth.js.map +1 -1
  13. package/dist/src/dashboard/define_config.d.ts +61 -7
  14. package/dist/src/dashboard/define_config.d.ts.map +1 -1
  15. package/dist/src/dashboard/define_config.js +49 -12
  16. package/dist/src/dashboard/define_config.js.map +1 -1
  17. package/dist/src/dashboard/handlers.d.ts +5 -0
  18. package/dist/src/dashboard/handlers.d.ts.map +1 -1
  19. package/dist/src/dashboard/handlers.js +35 -3
  20. package/dist/src/dashboard/handlers.js.map +1 -1
  21. package/dist/src/dashboard/index.d.ts +1 -1
  22. package/dist/src/dashboard/index.js +1 -1
  23. package/dist/src/dashboard/session_cookie.d.ts +4 -1
  24. package/dist/src/dashboard/session_cookie.d.ts.map +1 -1
  25. package/dist/src/dashboard/session_cookie.js.map +1 -1
  26. package/dist/src/index.d.ts +1 -1
  27. package/dist/src/index.js +1 -1
  28. package/dist/src/otel/durable-otel.d.ts.map +1 -1
  29. package/dist/src/otel/durable-otel.js +13 -0
  30. package/dist/src/otel/durable-otel.js.map +1 -1
  31. package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
  32. package/dist/src/run-gateway/run-request-responder.js +10 -0
  33. package/dist/src/run-gateway/run-request-responder.js.map +1 -1
  34. package/dist/src/run-gateway/tenant-auth.d.ts +15 -2
  35. package/dist/src/run-gateway/tenant-auth.d.ts.map +1 -1
  36. package/dist/src/run-gateway/tenant-auth.js +26 -6
  37. package/dist/src/run-gateway/tenant-auth.js.map +1 -1
  38. package/dist/src/stores/lucid.d.ts.map +1 -1
  39. package/dist/src/stores/lucid.js +19 -5
  40. package/dist/src/stores/lucid.js.map +1 -1
  41. package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
  42. package/dist/src/testing-kit/state-store-conformance.js +7 -0
  43. package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
  44. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,60 @@
1
1
  # @adonis-agora/durable
2
2
 
3
+ ## 0.38.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#128](https://github.com/DavideCarvalho/adonis-agora-durable/pull/128) [`0968a3e`](https://github.com/DavideCarvalho/adonis-agora-durable/commit/0968a3e6512381f2594b642aa0d0bca3e728c15f) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - `attachDurableOtel`'s root span now closes (error status, matching `run.failed`) when a run parks `blocked` via `capability.unavailable`/`protocol.incompatible`, instead of leaking — those two events never previously reached `endRoot()`, so a run stuck waiting on a missing capability or an incompatible worker fleet held its root span (and its entry in the bridge's internal `roots` Map) open for the rest of the process's life. Resuming a blocked run doesn't re-emit `run.started`, so no second root span opens for it later.
8
+
9
+ ## 0.38.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#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.
14
+
15
+ **⚠️ Behavior change — the console now fails closed everywhere.** The default `authorize` guard no
16
+ longer opens the dashboard outside `NODE_ENV=production`: it requires `DURABLE_DASHBOARD_TOKEN` in
17
+ every environment, denying all requests when the var is unset. That old branch left dev boxes,
18
+ staging, and any deployment with an unset/misspelled `NODE_ENV` serving an unauthenticated console
19
+ whose destructive endpoints (bulk cancel-with-compensation on an empty filter, fix-and-replay with
20
+ arbitrary input) a malicious page could fire as simple cross-origin POSTs. **Migration:** configure
21
+ `dashboardAuth`, set `DURABLE_DASHBOARD_TOKEN` / your own `authorize`, or — for local development
22
+ only — spell out `allowUnauthenticated: true` (it warns at boot). When `dashboardAuth` is
23
+ configured, the session guard is the gate and the default token guard steps aside.
24
+
25
+ Also in this wave:
26
+
27
+ - **Cross-site rejection**: browser-originated cross-site mutating requests (by `Sec-Fetch-Site`,
28
+ else `Origin` vs `Host`) get a 403 before any handler — CSRF defense-in-depth over the Lax
29
+ session cookie. Non-browser clients are unaffected.
30
+ - **Session roles + audit**: a `dashboardAuth` session with a NON-EMPTY `roles` list must include
31
+ `operator`/`admin` to hit mutating routes (empty list keeps full access — back-compat). Every
32
+ mutating attempt is audited (actor, method, path) via the app logger or a config `audit` hook.
33
+ - **Payload caps**: fix-and-replay input and signal/update/task bodies are capped at 1 MiB (413).
34
+ - **Open-redirect fix**: `sanitizeReturnTo` now rejects backslash variants (`/\evil.com` — browsers
35
+ normalize `\` to `/`).
36
+ - **Query-string token restricted to GET**: `?token=` exists only for the SSE live-tail
37
+ (`EventSource` cannot set headers); it no longer authorizes mutating routes.
38
+ - **Session hardening**: `Secure` cookie forced in production even behind a proxy without
39
+ trustProxy; login/session-mint endpoints rate-limited (10/min per address); `POST /logout` added
40
+ alongside the GET.
41
+ - **500s stop leaking**: handler failures return a generic body; the detail (driver messages,
42
+ stacks) goes to the app logger.
43
+ - **SSE budget**: per-instance (100) and per-address (10) caps on open event streams, plus a 25s
44
+ server heartbeat so dead clients are reaped instead of holding engine subscriptions forever.
45
+ - **Tenant trust boundary**: the run-request responder logs a LOUD warning when started without a
46
+ `verifyTenant` (the wire tenant claim is then trusted verbatim); `signTenantToken` gains optional
47
+ expiry (`{ ttlMs }`, signed into the claim so it can't be stripped) and `hmacTenantVerifier`
48
+ accepts a secret list for two-step rotation — both additive, legacy tokens keep verifying.
49
+ - **Codec coverage made honest**: `CodecStateStore` documents that the default covers only
50
+ `input`/`output`, and gains `{ coverage: 'extended' }` to also encode step events, errors and
51
+ heartbeat progress (fresh tables / self-detecting codecs only — see the docs). It also forwards
52
+ `recordStepHeartbeat` now (wrapping a store with a codec used to silently drop persisted step
53
+ liveness). New dashboard `redact` config hooks strip PII from the serialized run/checkpoint
54
+ shapes the console renders.
55
+ - **LIKE escaping**: tag values and picker search needles containing `%`/`_` now match literally in
56
+ the Lucid store instead of widening into patterns (the conformance suite asserts it).
57
+
3
58
  ## 0.37.0
4
59
 
5
60
  ### 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":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,sBAAsB,CAAC;AAuElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;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;IAoItB,yEAAyE;IACzE,OAAO,CAAC,iBAAiB;IAgDzB;;;;;;OAMG;YACW,SAAS;YAkBT,YAAY;YAWZ,cAAc;IAQ5B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,kBAAkB;YAoFZ,aAAa;IAQ3B;;;;;;;;;;;;;;OAcG;YACW,OAAO;IAoCrB;;;;;OAKG;YACW,QAAQ;IAuBtB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;IAWpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9B;CACF"}
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 () => ({ engine: await resolveEngine() });
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
- return ctx.response
128
- .status(500)
129
- .json({ error: error instanceof Error ? error.message : 'internal error' });
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
- return ctx.response
217
- .status(500)
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
- router
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
- .as('durable_dashboard.logout');
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
- secure: ctx.request.secure(),
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":"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"}
@@ -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** (input + output) through a
13
- * {@link PayloadCodec} — encoded on write, decoded on read — so they're never stored in the clear.
14
- * Adapter-agnostic: wrap any store. Searchable metadata (id, status, workflow, tags, timestamps) and
15
- * the structured `error` are left untouched so the dashboard, queries, and recovery still work.
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
- constructor(inner: StateStore, codec: PayloadCodec);
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":"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"}
1
+ {"version":3,"file":"codec-state-store.d.ts","sourceRoot":"","sources":["../../src/codec-state-store.ts"],"names":[],"mappings":"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"}