@dudousxd/nestjs-durable-dashboard 0.37.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.
@@ -1 +1 @@
1
- {"version":3,"file":"durable-client.d.ts","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"durable-client.d.ts","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"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"}
@@ -139,14 +139,69 @@ export function runDisplayStatus(run, timeline) {
139
139
  return 'awaiting'; // timeline known, nothing pending, no timer → waiting on a signal
140
140
  return 'running'; // list view (no timeline): show open runs as in-progress, not the generic suspended
141
141
  }
142
+ /** The SPA's own UI mount (e.g. `/durable`), independent of the (possibly host-overridden) API
143
+ * base — this is where `DurableUiSessionGuard` lives, so it's the right target to navigate the
144
+ * browser to when a session is gone and the destination isn't a known login page. */
145
+ function uiBase() {
146
+ return (typeof window !== 'undefined' && window.__DURABLE_BASE__) || '/durable';
147
+ }
142
148
  function apiBase() {
143
149
  if (typeof window !== 'undefined' && window.__DURABLE_API__)
144
150
  return window.__DURABLE_API__;
145
- const base = (typeof window !== 'undefined' && window.__DURABLE_BASE__) || '/durable';
146
- return `${base}/api`;
151
+ return `${uiBase()}/api`;
152
+ }
153
+ /**
154
+ * Best-effort read of the `{ auth: { modes } }` a `DurableApiSessionGuard` 401 carries (mirrors
155
+ * `@dudousxd/nestjs-telescope`'s dashboardAuth 401 body) — the same signal `DurableUiSessionGuard`
156
+ * would act on for a full-page navigation, just not directly reachable from an XHR. Returns
157
+ * `undefined` for anything that doesn't parse (including an older server that predates this body,
158
+ * or a host without `dashboardAuth` configured at all), so the caller can fall back safely.
159
+ */
160
+ async function readAuthModes(res) {
161
+ try {
162
+ const body = await res.json();
163
+ if (typeof body !== 'object' || body === null || !('auth' in body))
164
+ return undefined;
165
+ const auth = body.auth;
166
+ if (typeof auth !== 'object' || auth === null || !('modes' in auth))
167
+ return undefined;
168
+ const modes = auth.modes;
169
+ return Array.isArray(modes)
170
+ ? modes.filter((m) => typeof m === 'string')
171
+ : undefined;
172
+ }
173
+ catch {
174
+ return undefined;
175
+ }
176
+ }
177
+ /**
178
+ * A 401 mid-session (routine since `revalidate`: a deactivated/demoted operator's cookie is
179
+ * cleared on their next renewal) means there's nothing left to render — take the browser to the
180
+ * matching auth surface instead of leaving a raw error in the console. Mode B (`login` offered):
181
+ * the built-in login page, carrying `returnTo` back to here. Otherwise (Mode A, or an older server
182
+ * that sends a bare 401 with no `modes`): a plain navigation to the UI mount, which
183
+ * `DurableUiSessionGuard` itself renders as the Mode-A session-required page — so this never has
184
+ * to duplicate that guard's mode logic, only trigger it.
185
+ */
186
+ function redirectToAuthSurface(modes) {
187
+ if (typeof window === 'undefined')
188
+ return;
189
+ const base = uiBase();
190
+ if (modes?.includes('login')) {
191
+ const returnTo = encodeURIComponent(window.location.pathname + window.location.search);
192
+ window.location.href = `${base}/login?returnTo=${returnTo}`;
193
+ return;
194
+ }
195
+ window.location.href = base;
147
196
  }
148
197
  async function http(path, init) {
149
198
  const res = await fetch(apiBase() + path, init);
199
+ if (res.status === 401) {
200
+ redirectToAuthSurface(await readAuthModes(res));
201
+ // The navigation above is async; reject so the caller's `.then`/`await` chain doesn't
202
+ // continue as if this call had succeeded while the browser is on its way elsewhere.
203
+ throw new Error('Session expired; redirecting to sign-in.');
204
+ }
150
205
  if (!res.ok)
151
206
  throw new Error(`${res.status} ${res.statusText}`);
152
207
  return (await res.json());
@@ -1 +1 @@
1
- {"version":3,"file":"durable-client.js","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"AA0EA;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAEzD;;4FAE4F;AAC5F,MAAM,UAAU,cAAc,CAAC,EAAkB,EAAE,KAAa;IAC9D,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU;QAChC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;QACnC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,GAAG,YAAY,GAAG,gBAAgB,CAAC;AACjD,CAAC;AAgBD,mGAAmG;AACnG,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAY,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAEtF;gGACgG;AAChG,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;0GAO0G;AAC1G,SAAS,cAAc,CAAC,KAAa,EAAE,MAA8B;IACnE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,UAAU,IAAI,CAAC,SAAS,CAAC;AAClC,CAAC;AAED;2GAC2G;AAC3G,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,KAAK,EAAE,CAAC;IACvD,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/E,OAAO,UAAU,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;sFAEsF;AACtF,MAAM,UAAU,eAAe,CAC7B,GAAgB,EAChB,IAA4B;IAE5B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;SACxE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,qGAAqG;AACrG,SAAS,aAAa,CAAC,OAAmB;IACxC,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAgB,EAChB,GAIC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACzE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QACvD,CAAC;QACD,mGAAmG;QACnG,oGAAoG;QACpG,mGAAmG;QACnG,mDAAmD;QACnD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAChF,CAAC;IAED,+FAA+F;IAC/F,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC5F,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC5D,gGAAgG;QAChG,mGAAmG;QACnG,IAAI,OAAO,CAAC,WAAW,IAAI,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,qGAAqG;IACrG,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAEnF,mGAAmG;IACnG,oGAAoG;IACpG,kGAAkG;IAClG,mGAAmG;IACnG,kGAAkG;IAClG,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;IACvD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAgB,EAAE,QAA2B;IAC5E,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAClD,uFAAuF;IACvF,IAAI,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9F,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,UAAU,CAAC,CAAC,4BAA4B;IACvE,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC,CAAC,kEAAkE;IACnG,OAAO,SAAS,CAAC,CAAC,oFAAoF;AACxG,CAAC;AAuFD,SAAS,OAAO;IACd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe;QAAE,OAAO,MAAM,CAAC,eAAe,CAAC;IAC3F,MAAM,IAAI,GAAG,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC;IACtF,OAAO,GAAG,IAAI,MAAM,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,IAAI,CAAI,IAAY,EAAE,IAAkB;IACrD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,CAAC,MAAkB,EAAE,GAAY,EAAE,IAAe;QACpD,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,GAAG;YAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3B,oFAAoF;QACpF,KAAK,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;YAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAY,SAAS,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,8FAA8F;IAC9F,OAAO;QACL,OAAO,IAAI,CAAgB,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,qGAAqG;IACrG,QAAQ;QACN,OAAO,IAAI,CAAkB,WAAW,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,CAAC,EAAU;QACd,OAAO,IAAI,CAAc,SAAS,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,iGAAiG;IACjG,cAAc,CAAC,EAAU,EAAE,KAAc;QACvC,OAAO,IAAI,CAAoB,SAAS,kBAAkB,CAAC,EAAE,CAAC,mBAAmB,EAAE;YACjF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IACD,+FAA+F;IAC/F,IAAI,CACF,MAA0B,EAC1B,MAIC;QAED,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,GAAG;YAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE;YAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAuC,SAAS,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE;YACxF,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,EAAU,EAAE,IAA+B;QAChD,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAc,SAAS,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAc,SAAS,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD;qGACiG;IACjG,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CACT,SAAS,kBAAkB,CAAC,EAAE,CAAC,aAAa,EAC5C,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACJ,CAAC;IACD;;;OAGG;IACH,SAAS,CAAC,EAAU,EAAE,OAAqC;QACzD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,OAAO,EAAE,SAAS,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrF,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF,CAAC;AAEF,0FAA0F;AAC1F,4FAA4F;AAC5F,mGAAmG;AACnG,OAAO,EAAmB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,+FAA+F;AAC/F,6FAA6F;AAC7F,OAAO,EAEL,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"durable-client.js","sourceRoot":"","sources":["../../src/client/durable-client.ts"],"names":[],"mappings":"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"}
@@ -593,6 +593,9 @@ function resolveDashboardAuth(options) {
593
593
  if (options.revalidate !== void 0 && typeof options.revalidate !== "function") {
594
594
  throw new Error("DurableDashboardModule: dashboardAuth.revalidate must be a function.");
595
595
  }
596
+ if (options.unauthenticatedPage !== void 0 && typeof options.unauthenticatedPage !== "function") {
597
+ throw new Error("DurableDashboardModule: dashboardAuth.unauthenticatedPage must be a function.");
598
+ }
596
599
  if (modes.length === 0) {
597
600
  throw new Error("DurableDashboardModule: dashboardAuth needs at least one of `session` or `login` (otherwise the cookie can never be minted). Failing closed.");
598
601
  }
@@ -608,6 +611,9 @@ function resolveDashboardAuth(options) {
608
611
  } : {},
609
612
  ...options.revalidate !== void 0 ? {
610
613
  revalidate: options.revalidate
614
+ } : {},
615
+ ...options.unauthenticatedPage !== void 0 ? {
616
+ unauthenticatedPage: options.unauthenticatedPage
611
617
  } : {}
612
618
  };
613
619
  }
@@ -884,6 +890,11 @@ function redirectRaw(response, location, status = 302) {
884
890
  raw.end();
885
891
  }
886
892
  __name(redirectRaw, "redirectRaw");
893
+ function responseAlreadyWritten(response) {
894
+ const raw = resolveRedirectResponse(response);
895
+ return raw?.headersSent === true;
896
+ }
897
+ __name(responseAlreadyWritten, "responseAlreadyWritten");
887
898
  function writeHtmlRaw(response, html, status = 200) {
888
899
  const raw = resolveRedirectResponse(response);
889
900
  if (!raw) return;
@@ -1048,6 +1059,20 @@ function readSessionFromRequest(auth, request) {
1048
1059
  });
1049
1060
  }
1050
1061
  __name(readSessionFromRequest, "readSessionFromRequest");
1062
+ var inFlightRevalidations = /* @__PURE__ */ new Map();
1063
+ function revalidateOnce(auth, user) {
1064
+ const revalidate = auth.revalidate;
1065
+ if (!revalidate) return Promise.resolve(true);
1066
+ const key = `${auth.secret}:${user.id}`;
1067
+ const inFlight = inFlightRevalidations.get(key);
1068
+ if (inFlight) return inFlight;
1069
+ const call = Promise.resolve().then(() => revalidate(user)).catch(() => false).finally(() => {
1070
+ inFlightRevalidations.delete(key);
1071
+ });
1072
+ inFlightRevalidations.set(key, call);
1073
+ return call;
1074
+ }
1075
+ __name(revalidateOnce, "revalidateOnce");
1051
1076
  async function maybeRenewSession(auth, session, request, response, now = Date.now()) {
1052
1077
  if (now - session.iat <= auth.ttlMs / 2) return true;
1053
1078
  const user = {
@@ -1057,20 +1082,13 @@ async function maybeRenewSession(auth, session, request, response, now = Date.no
1057
1082
  } : {},
1058
1083
  roles: session.roles
1059
1084
  };
1060
- if (auth.revalidate) {
1061
- let allowed;
1062
- try {
1063
- allowed = await auth.revalidate(user);
1064
- } catch {
1065
- allowed = false;
1066
- }
1067
- if (!allowed) {
1068
- clearSessionCookie({
1069
- request,
1070
- response
1071
- });
1072
- return false;
1073
- }
1085
+ const allowed = await revalidateOnce(auth, user);
1086
+ if (!allowed) {
1087
+ clearSessionCookie({
1088
+ request,
1089
+ response
1090
+ });
1091
+ return false;
1074
1092
  }
1075
1093
  issueSessionCookie(user, {
1076
1094
  auth,
@@ -1130,6 +1148,16 @@ function _ts_decorate4(decorators, target, key, desc) {
1130
1148
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1131
1149
  }
1132
1150
  __name(_ts_decorate4, "_ts_decorate");
1151
+ function _ts_metadata3(k, v) {
1152
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1153
+ }
1154
+ __name(_ts_metadata3, "_ts_metadata");
1155
+ function _ts_param3(paramIndex, decorator) {
1156
+ return function(target, key) {
1157
+ decorator(target, key, paramIndex);
1158
+ };
1159
+ }
1160
+ __name(_ts_param3, "_ts_param");
1133
1161
  var DashboardSessionRequiredException = class extends import_common4.HttpException {
1134
1162
  static {
1135
1163
  __name(this, "DashboardSessionRequiredException");
@@ -1141,17 +1169,51 @@ var DashboardSessionRequiredException = class extends import_common4.HttpExcepti
1141
1169
  }, import_common4.HttpStatus.UNAUTHORIZED), this.basePath = basePath;
1142
1170
  }
1143
1171
  };
1144
- var DashboardSessionRequiredFilter = class {
1172
+ var DashboardSessionRequiredFilter = class _DashboardSessionRequiredFilter {
1145
1173
  static {
1146
1174
  __name(this, "DashboardSessionRequiredFilter");
1147
1175
  }
1148
- catch(exception, host) {
1149
- const response = host.switchToHttp().getResponse();
1176
+ auth;
1177
+ logger = new import_common4.Logger(_DashboardSessionRequiredFilter.name);
1178
+ warned = false;
1179
+ constructor(auth = null) {
1180
+ this.auth = auth;
1181
+ }
1182
+ async catch(exception, host) {
1183
+ const http = host.switchToHttp();
1184
+ const response = http.getResponse();
1185
+ const hook = this.auth?.unauthenticatedPage;
1186
+ if (hook) {
1187
+ try {
1188
+ await hook({
1189
+ request: http.getRequest(),
1190
+ response,
1191
+ basePath: exception.basePath
1192
+ });
1193
+ if (responseAlreadyWritten(response)) return;
1194
+ this.warnOnce("dashboardAuth.unauthenticatedPage returned without writing a response; falling back to the built-in page. The hook must write AND end the response it is given.");
1195
+ } catch (error) {
1196
+ this.warnOnce(`dashboardAuth.unauthenticatedPage threw; falling back to the built-in page. ${String(error)}`);
1197
+ if (responseAlreadyWritten(response)) return;
1198
+ }
1199
+ }
1150
1200
  writeHtmlRaw(response, renderSessionRequiredPage(exception.basePath), import_common4.HttpStatus.UNAUTHORIZED);
1151
1201
  }
1202
+ /** Once per process, not once per request: a broken hook fires on every denied navigation. */
1203
+ warnOnce(message) {
1204
+ if (this.warned) return;
1205
+ this.warned = true;
1206
+ this.logger.warn(message);
1207
+ }
1152
1208
  };
1153
1209
  DashboardSessionRequiredFilter = _ts_decorate4([
1154
- (0, import_common4.Catch)(DashboardSessionRequiredException)
1210
+ (0, import_common4.Catch)(DashboardSessionRequiredException),
1211
+ _ts_param3(0, (0, import_common4.Optional)()),
1212
+ _ts_param3(0, (0, import_common4.Inject)(DASHBOARD_AUTH)),
1213
+ _ts_metadata3("design:type", Function),
1214
+ _ts_metadata3("design:paramtypes", [
1215
+ Object
1216
+ ])
1155
1217
  ], DashboardSessionRequiredFilter);
1156
1218
 
1157
1219
  // src/server/durable-ui.controller.ts
@@ -1162,16 +1224,16 @@ function _ts_decorate5(decorators, target, key, desc) {
1162
1224
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1163
1225
  }
1164
1226
  __name(_ts_decorate5, "_ts_decorate");
1165
- function _ts_metadata3(k, v) {
1227
+ function _ts_metadata4(k, v) {
1166
1228
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1167
1229
  }
1168
- __name(_ts_metadata3, "_ts_metadata");
1169
- function _ts_param3(paramIndex, decorator) {
1230
+ __name(_ts_metadata4, "_ts_metadata");
1231
+ function _ts_param4(paramIndex, decorator) {
1170
1232
  return function(target, key) {
1171
1233
  decorator(target, key, paramIndex);
1172
1234
  };
1173
1235
  }
1174
- __name(_ts_param3, "_ts_param");
1236
+ __name(_ts_param4, "_ts_param");
1175
1237
  var DASHBOARD_BASE_PATH = Symbol("DASHBOARD_BASE_PATH");
1176
1238
  var DASHBOARD_API_PATH = Symbol("DASHBOARD_API_PATH");
1177
1239
  var BUILD_BASE = "/durable";
@@ -1228,27 +1290,27 @@ _ts_decorate5([
1228
1290
  (0, import_common5.Get)(),
1229
1291
  (0, import_common5.Header)("Content-Type", "text/html; charset=utf-8"),
1230
1292
  (0, import_common5.Header)("Cache-Control", "no-store, must-revalidate"),
1231
- _ts_metadata3("design:type", Function),
1232
- _ts_metadata3("design:paramtypes", []),
1233
- _ts_metadata3("design:returntype", String)
1293
+ _ts_metadata4("design:type", Function),
1294
+ _ts_metadata4("design:paramtypes", []),
1295
+ _ts_metadata4("design:returntype", String)
1234
1296
  ], DurableUiController.prototype, "index", null);
1235
1297
  _ts_decorate5([
1236
1298
  (0, import_common5.Get)("assets/:file"),
1237
1299
  (0, import_common5.Header)("Cache-Control", "public, max-age=31536000, immutable"),
1238
- _ts_param3(0, (0, import_common5.Param)("file")),
1239
- _ts_metadata3("design:type", Function),
1240
- _ts_metadata3("design:paramtypes", [
1300
+ _ts_param4(0, (0, import_common5.Param)("file")),
1301
+ _ts_metadata4("design:type", Function),
1302
+ _ts_metadata4("design:paramtypes", [
1241
1303
  String
1242
1304
  ]),
1243
- _ts_metadata3("design:returntype", typeof import_common5.StreamableFile === "undefined" ? Object : import_common5.StreamableFile)
1305
+ _ts_metadata4("design:returntype", typeof import_common5.StreamableFile === "undefined" ? Object : import_common5.StreamableFile)
1244
1306
  ], DurableUiController.prototype, "asset", null);
1245
1307
  DurableUiController = _ts_decorate5([
1246
1308
  (0, import_common5.UseFilters)(DashboardLoginRedirectFilter, DashboardSessionRequiredFilter),
1247
1309
  (0, import_common5.Controller)(),
1248
- _ts_param3(0, (0, import_common5.Inject)(DASHBOARD_BASE_PATH)),
1249
- _ts_param3(1, (0, import_common5.Inject)(DASHBOARD_API_PATH)),
1250
- _ts_metadata3("design:type", Function),
1251
- _ts_metadata3("design:paramtypes", [
1310
+ _ts_param4(0, (0, import_common5.Inject)(DASHBOARD_BASE_PATH)),
1311
+ _ts_param4(1, (0, import_common5.Inject)(DASHBOARD_API_PATH)),
1312
+ _ts_metadata4("design:type", Function),
1313
+ _ts_metadata4("design:paramtypes", [
1252
1314
  String,
1253
1315
  String
1254
1316
  ])
@@ -1262,16 +1324,16 @@ function _ts_decorate6(decorators, target, key, desc) {
1262
1324
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1263
1325
  }
1264
1326
  __name(_ts_decorate6, "_ts_decorate");
1265
- function _ts_metadata4(k, v) {
1327
+ function _ts_metadata5(k, v) {
1266
1328
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1267
1329
  }
1268
- __name(_ts_metadata4, "_ts_metadata");
1269
- function _ts_param4(paramIndex, decorator) {
1330
+ __name(_ts_metadata5, "_ts_metadata");
1331
+ function _ts_param5(paramIndex, decorator) {
1270
1332
  return function(target, key) {
1271
1333
  decorator(target, key, paramIndex);
1272
1334
  };
1273
1335
  }
1274
- __name(_ts_param4, "_ts_param");
1336
+ __name(_ts_param5, "_ts_param");
1275
1337
  function isString(value) {
1276
1338
  return typeof value === "string";
1277
1339
  }
@@ -1294,7 +1356,7 @@ var DurableAuthController = class _DurableAuthController {
1294
1356
  // the developer-controlled `basePath`.
1295
1357
  loginPage() {
1296
1358
  const auth = this.requireAuth();
1297
- if (!auth.login) throw new import_common6.NotFoundException();
1359
+ if (!auth.modes.includes("login")) throw new import_common6.NotFoundException();
1298
1360
  return renderLoginPage(this.basePath);
1299
1361
  }
1300
1362
  // Called by the login page's own fetch (JSON, not a classic form POST — see `login-page.ts` for
@@ -1303,7 +1365,7 @@ var DurableAuthController = class _DurableAuthController {
1303
1365
  // (unknown user, wrong password, throwing hook) — no user-enumeration.
1304
1366
  async login(body, request, response) {
1305
1367
  const auth = this.requireAuth();
1306
- if (!auth.login) throw new import_common6.NotFoundException();
1368
+ if (!auth.modes.includes("login")) throw new import_common6.NotFoundException();
1307
1369
  if (!isString(body?.username) || !isString(body?.password)) {
1308
1370
  throw new import_common6.BadRequestException("Body must include string `username` and `password`.");
1309
1371
  }
@@ -1326,7 +1388,7 @@ var DurableAuthController = class _DurableAuthController {
1326
1388
  // guard decides, and no credential ever reaches this library.
1327
1389
  async session(request, response) {
1328
1390
  const auth = this.requireAuth();
1329
- if (!auth.session) throw new import_common6.NotFoundException();
1391
+ if (!auth.modes.includes("session")) throw new import_common6.NotFoundException();
1330
1392
  const user = await this.runHook("session", () => auth.session?.(request) ?? null);
1331
1393
  if (!user) throw new import_common6.UnauthorizedException();
1332
1394
  issueSessionCookie(user, {
@@ -1344,7 +1406,7 @@ var DurableAuthController = class _DurableAuthController {
1344
1406
  request,
1345
1407
  response
1346
1408
  });
1347
- redirectRaw(response, this.auth?.login ? `${this.basePath}/login` : this.basePath);
1409
+ redirectRaw(response, this.auth?.modes.includes("login") ? `${this.basePath}/login` : this.basePath);
1348
1410
  }
1349
1411
  requireAuth() {
1350
1412
  if (!this.auth) throw new import_common6.NotFoundException();
@@ -1371,58 +1433,58 @@ _ts_decorate6([
1371
1433
  (0, import_common6.Get)("login"),
1372
1434
  (0, import_common6.Header)("Content-Type", "text/html; charset=utf-8"),
1373
1435
  (0, import_common6.Header)("Cache-Control", "no-store, must-revalidate"),
1374
- _ts_metadata4("design:type", Function),
1375
- _ts_metadata4("design:paramtypes", []),
1376
- _ts_metadata4("design:returntype", String)
1436
+ _ts_metadata5("design:type", Function),
1437
+ _ts_metadata5("design:paramtypes", []),
1438
+ _ts_metadata5("design:returntype", String)
1377
1439
  ], DurableAuthController.prototype, "loginPage", null);
1378
1440
  _ts_decorate6([
1379
1441
  (0, import_common6.Post)("login"),
1380
1442
  (0, import_common6.HttpCode)(200),
1381
- _ts_param4(0, (0, import_common6.Body)()),
1382
- _ts_param4(1, (0, import_common6.Req)()),
1383
- _ts_param4(2, (0, import_common6.Res)({
1443
+ _ts_param5(0, (0, import_common6.Body)()),
1444
+ _ts_param5(1, (0, import_common6.Req)()),
1445
+ _ts_param5(2, (0, import_common6.Res)({
1384
1446
  passthrough: true
1385
1447
  })),
1386
- _ts_metadata4("design:type", Function),
1387
- _ts_metadata4("design:paramtypes", [
1448
+ _ts_metadata5("design:type", Function),
1449
+ _ts_metadata5("design:paramtypes", [
1388
1450
  typeof LoginBody === "undefined" ? Object : LoginBody,
1389
1451
  Object,
1390
1452
  Object
1391
1453
  ]),
1392
- _ts_metadata4("design:returntype", Promise)
1454
+ _ts_metadata5("design:returntype", Promise)
1393
1455
  ], DurableAuthController.prototype, "login", null);
1394
1456
  _ts_decorate6([
1395
1457
  (0, import_common6.Post)("session"),
1396
1458
  (0, import_common6.HttpCode)(204),
1397
- _ts_param4(0, (0, import_common6.Req)()),
1398
- _ts_param4(1, (0, import_common6.Res)({
1459
+ _ts_param5(0, (0, import_common6.Req)()),
1460
+ _ts_param5(1, (0, import_common6.Res)({
1399
1461
  passthrough: true
1400
1462
  })),
1401
- _ts_metadata4("design:type", Function),
1402
- _ts_metadata4("design:paramtypes", [
1463
+ _ts_metadata5("design:type", Function),
1464
+ _ts_metadata5("design:paramtypes", [
1403
1465
  Object,
1404
1466
  Object
1405
1467
  ]),
1406
- _ts_metadata4("design:returntype", Promise)
1468
+ _ts_metadata5("design:returntype", Promise)
1407
1469
  ], DurableAuthController.prototype, "session", null);
1408
1470
  _ts_decorate6([
1409
1471
  (0, import_common6.Get)("logout"),
1410
- _ts_param4(0, (0, import_common6.Req)()),
1411
- _ts_param4(1, (0, import_common6.Res)()),
1412
- _ts_metadata4("design:type", Function),
1413
- _ts_metadata4("design:paramtypes", [
1472
+ _ts_param5(0, (0, import_common6.Req)()),
1473
+ _ts_param5(1, (0, import_common6.Res)()),
1474
+ _ts_metadata5("design:type", Function),
1475
+ _ts_metadata5("design:paramtypes", [
1414
1476
  Object,
1415
1477
  Object
1416
1478
  ]),
1417
- _ts_metadata4("design:returntype", void 0)
1479
+ _ts_metadata5("design:returntype", void 0)
1418
1480
  ], DurableAuthController.prototype, "logout", null);
1419
1481
  DurableAuthController = _ts_decorate6([
1420
1482
  (0, import_common6.Controller)(),
1421
- _ts_param4(0, (0, import_common6.Optional)()),
1422
- _ts_param4(0, (0, import_common6.Inject)(DASHBOARD_AUTH)),
1423
- _ts_param4(1, (0, import_common6.Inject)(DASHBOARD_BASE_PATH)),
1424
- _ts_metadata4("design:type", Function),
1425
- _ts_metadata4("design:paramtypes", [
1483
+ _ts_param5(0, (0, import_common6.Optional)()),
1484
+ _ts_param5(0, (0, import_common6.Inject)(DASHBOARD_AUTH)),
1485
+ _ts_param5(1, (0, import_common6.Inject)(DASHBOARD_BASE_PATH)),
1486
+ _ts_metadata5("design:type", Function),
1487
+ _ts_metadata5("design:paramtypes", [
1426
1488
  Object,
1427
1489
  String
1428
1490
  ])
@@ -1442,16 +1504,16 @@ function _ts_decorate7(decorators, target, key, desc) {
1442
1504
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1443
1505
  }
1444
1506
  __name(_ts_decorate7, "_ts_decorate");
1445
- function _ts_metadata5(k, v) {
1507
+ function _ts_metadata6(k, v) {
1446
1508
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1447
1509
  }
1448
- __name(_ts_metadata5, "_ts_metadata");
1449
- function _ts_param5(paramIndex, decorator) {
1510
+ __name(_ts_metadata6, "_ts_metadata");
1511
+ function _ts_param6(paramIndex, decorator) {
1450
1512
  return function(target, key) {
1451
1513
  decorator(target, key, paramIndex);
1452
1514
  };
1453
1515
  }
1454
- __name(_ts_param5, "_ts_param");
1516
+ __name(_ts_param6, "_ts_param");
1455
1517
  var DurableUiSessionGuard = class {
1456
1518
  static {
1457
1519
  __name(this, "DurableUiSessionGuard");
@@ -1487,17 +1549,17 @@ var DurableUiSessionGuard = class {
1487
1549
  * asserting away) the nullability.
1488
1550
  */
1489
1551
  denyUnauthenticated(auth, request) {
1490
- if (!auth.login) throw new DashboardSessionRequiredException(this.basePath);
1552
+ if (!auth.modes.includes("login")) throw new DashboardSessionRequiredException(this.basePath);
1491
1553
  const returnTo = encodeURIComponent(originalRequestUrl(request));
1492
1554
  throw new DashboardLoginRedirectException(`${this.basePath}/login?returnTo=${returnTo}`);
1493
1555
  }
1494
1556
  };
1495
1557
  DurableUiSessionGuard = _ts_decorate7([
1496
1558
  (0, import_common7.Injectable)(),
1497
- _ts_param5(0, (0, import_common7.Inject)(DASHBOARD_AUTH)),
1498
- _ts_param5(1, (0, import_common7.Inject)(DASHBOARD_BASE_PATH)),
1499
- _ts_metadata5("design:type", Function),
1500
- _ts_metadata5("design:paramtypes", [
1559
+ _ts_param6(0, (0, import_common7.Inject)(DASHBOARD_AUTH)),
1560
+ _ts_param6(1, (0, import_common7.Inject)(DASHBOARD_BASE_PATH)),
1561
+ _ts_metadata6("design:type", Function),
1562
+ _ts_metadata6("design:paramtypes", [
1501
1563
  Object,
1502
1564
  String
1503
1565
  ])
@@ -1512,21 +1574,35 @@ var DurableApiSessionGuard = class {
1512
1574
  }
1513
1575
  async canActivate(context) {
1514
1576
  if (!this.auth) return true;
1577
+ const auth = this.auth;
1515
1578
  const http = context.switchToHttp();
1516
1579
  const request = http.getRequest();
1517
- const session = readSessionFromRequest(this.auth, request);
1518
- if (!session) throw new import_common7.UnauthorizedException();
1519
- if (!await maybeRenewSession(this.auth, session, request, http.getResponse())) {
1520
- throw new import_common7.UnauthorizedException();
1580
+ const session = readSessionFromRequest(auth, request);
1581
+ if (!session) throw this.unauthorized(auth);
1582
+ if (!await maybeRenewSession(auth, session, request, http.getResponse())) {
1583
+ throw this.unauthorized(auth);
1521
1584
  }
1522
1585
  return true;
1523
1586
  }
1587
+ /**
1588
+ * A bare 401 body carrying `{ auth: { modes } }` — mirrors `@dudousxd/nestjs-telescope`'s
1589
+ * dashboardAuth 401. The API is fetched (never navigated), so this is the ONLY way the console
1590
+ * SPA (`durable-client.ts`) learns which auth surface to send the operator to on a mid-session
1591
+ * 401; `DurableUiSessionGuard`'s redirect/session-required exceptions above don't reach it.
1592
+ */
1593
+ unauthorized(auth) {
1594
+ return new import_common7.UnauthorizedException({
1595
+ auth: {
1596
+ modes: auth.modes
1597
+ }
1598
+ });
1599
+ }
1524
1600
  };
1525
1601
  DurableApiSessionGuard = _ts_decorate7([
1526
1602
  (0, import_common7.Injectable)(),
1527
- _ts_param5(0, (0, import_common7.Inject)(DASHBOARD_AUTH)),
1528
- _ts_metadata5("design:type", Function),
1529
- _ts_metadata5("design:paramtypes", [
1603
+ _ts_param6(0, (0, import_common7.Inject)(DASHBOARD_AUTH)),
1604
+ _ts_metadata6("design:type", Function),
1605
+ _ts_metadata6("design:paramtypes", [
1530
1606
  Object
1531
1607
  ])
1532
1608
  ], DurableApiSessionGuard);