@adonis-agora/media 0.14.1 → 0.15.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 CHANGED
@@ -1,5 +1,33 @@
1
1
  # @adonis-agora/media
2
2
 
3
+ ## 0.15.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#67](https://github.com/DavideCarvalho/adonis-agora-media/pull/67) [`ede5aba`](https://github.com/DavideCarvalho/adonis-agora-media/commit/ede5aba7acf0b83c8c2338eeb521b34df6bf785a) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Console: a refused page navigation now gets a real page instead of `{"error":"Unauthorized"}`,
8
+ and an `authorize` refusal is a `403` everywhere.
9
+
10
+ When `authorize` refuses, opening the console used to answer the browser with the same JSON the
11
+ API gets. It now serves a built-in access-denied page in the console's own visual language — the
12
+ status, a sentence explaining the refusal and a "Back to app" link. An `authorize` hook that
13
+ redirects still wins.
14
+
15
+ The status of that refusal changes from `401 { error: 'Unauthorized' }` to
16
+ `403 { error: 'Forbidden' }` on the API too — the hook knew who was asking and said no, which is
17
+ what every other Agora console already answers. The SPA is unaffected: it decides whether to show
18
+ its login screen from `GET /me` (ungated) and the session guard's `401 { auth: { modes } }`, which
19
+ are unchanged. Only a client scripted against the old `401` for an `authorize` denial notices.
20
+
21
+ The page carries no inline `<script>`, so a nonce'd `script-src` CSP cannot break it; its inline
22
+ `<style>` takes `@adonisjs/shield`'s request nonce when one exists.
23
+
24
+ New `accessDenied` option on `config/media_dashboard.ts` to customise it — an object (`brand`,
25
+ `title`, `message`, `homeHref`, `accent`, labels) to tweak the built-in page, or a function
26
+ `(info, ctx) => html | void` to render it yourself or redirect.
27
+
28
+ Also fixed: when `authorize` wrote a redirect on an API request, the guard still ran the route
29
+ handler on top of the `302`; it now stands down like the SPA routes do.
30
+
3
31
  ## 0.14.1
4
32
 
5
33
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard_provider.d.ts","sourceRoot":"","sources":["../../providers/dashboard_provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,sBAAsB,CAAC;AA0ClF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;;IAC7B,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAA7C,YAAsB,GAAG,EAAE,kBAAkB,EAAI;IAE3C,IAAI,kBAQT;CA8bF"}
1
+ {"version":3,"file":"dashboard_provider.d.ts","sourceRoot":"","sources":["../../providers/dashboard_provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,sBAAsB,CAAC;AA8ClF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;;IAC7B,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAA7C,YAAsB,GAAG,EAAE,kBAAkB,EAAI;IAE3C,IAAI,kBAQT;CAscF"}
@@ -1,6 +1,7 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { basename, resolve as resolvePath } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
+ import { resolveAccessDeniedPage, } from '../src/dashboard/access_denied_page.js';
4
5
  import { parseCookieHeader, SESSION_COOKIE_NAME, serializeSetCookie, } from '../src/dashboard/cookie.js';
5
6
  import { DashboardError, DashboardService, resolveConsoleAuth, signSessionCookie, verifySessionCookie, } from '../src/dashboard/index.js';
6
7
  import { contentTypeFor, normalizePath, renderIndexHtml } from '../src/dashboard/spa.js';
@@ -72,9 +73,14 @@ export default class MediaDashboardProvider {
72
73
  : [];
73
74
  // Access-decision hook (same shape as the other @adonis-agora dashboards). Runs BEFORE
74
75
  // `middleware` and composes with the built-in `auth` session guard (all must pass).
75
- // A denied request gets 401/403 — or honors a redirect the hook wrote (like the telescope
76
- // guard, we check for a `location` header so a hook can send visitors to the app login).
77
- const authorizeGate = config.authorize
76
+ // A denied request honors a redirect the hook wrote (like the telescope guard, we check for a
77
+ // `location` header so a hook can send visitors to the app login); otherwise it is a `403` —
78
+ // the hook knew who was asking and said no, same status as every other Agora console — as
79
+ // `{ error }` JSON for an API request, and as the built-in access-denied page (or the host's
80
+ // `accessDenied` version of it) for a PAGE navigation (the SPA shell, its assets). The `401`
81
+ // with `{ auth: { modes } }` stays the SESSION guard's alone: that is what tells the SPA to
82
+ // show its login screen, and an `authorize` refusal must not be mistaken for it.
83
+ const authorizeGate = (mode) => config.authorize
78
84
  ? [
79
85
  async (ctx, next) => {
80
86
  let allowed;
@@ -86,9 +92,15 @@ export default class MediaDashboardProvider {
86
92
  }
87
93
  if (allowed)
88
94
  return next();
89
- if (ctx.response.getHeader('location'))
90
- return next();
91
- ctx.response.status(401).send({ error: 'Unauthorized' });
95
+ if (mode === 'api') {
96
+ // A redirect the hook wrote stands on its own — the handler must NOT run after it
97
+ // (it would queue a JSON body onto a 302).
98
+ if (ctx.response.getHeader('location'))
99
+ return;
100
+ ctx.response.status(403).send({ error: 'Forbidden' });
101
+ return;
102
+ }
103
+ await denyPage(ctx, { basePath, accessDenied: config.accessDenied });
92
104
  },
93
105
  ]
94
106
  : [];
@@ -98,10 +110,12 @@ export default class MediaDashboardProvider {
98
110
  const auth = resolveConsoleAuth(config.auth);
99
111
  const objectInsights = config.objectInsights ?? [];
100
112
  const service = async () => new DashboardService(await this.app.container.make(MediaManager), { diskNames, actions }, objectInsights);
101
- const composedMiddleware = [...authorizeGate, ...middleware];
102
113
  this.#mountAuthRoutes(router, apiBase, auth);
103
- this.#mountApi(router, apiBase, service, composedMiddleware, auth);
104
- this.#mountSpa(router, basePath, { apiBase, uploadsBase, tusBase, actions }, composedMiddleware);
114
+ this.#mountApi(router, apiBase, service, [...authorizeGate('api'), ...middleware], auth);
115
+ this.#mountSpa(router, basePath, { apiBase, uploadsBase, tusBase, actions }, [
116
+ ...authorizeGate('page'),
117
+ ...middleware,
118
+ ]);
105
119
  }
106
120
  /**
107
121
  * Mints/clears the console session cookie: `GET /me`, `POST /login`, `POST /session`,
@@ -455,6 +469,55 @@ function applyMiddleware(group, middleware) {
455
469
  return;
456
470
  group.use(middleware);
457
471
  }
472
+ /* Access-denied page -------------------------------------------------------------------------- */
473
+ /**
474
+ * Answer a refused PAGE navigation with HTML instead of the API's JSON: the built-in page, the
475
+ * host's tweaked version of it, or whatever the host's `accessDenied` renderer produced. Stands down
476
+ * when the request is already answered — an `authorize` hook (or the renderer) that wrote a redirect
477
+ * keeps it; the provider never overwrites a `location` header. `403`, like the API's JSON: the hook
478
+ * knew who was asking and said no.
479
+ */
480
+ async function denyPage(ctx, options) {
481
+ const answered = () => responseAnswered(ctx);
482
+ if (answered())
483
+ return;
484
+ const nonce = cspNonce(ctx);
485
+ const info = {
486
+ status: 403,
487
+ reason: 'forbidden',
488
+ basePath: options.basePath,
489
+ ...(nonce !== undefined ? { nonce } : {}),
490
+ };
491
+ const html = await resolveAccessDeniedPage(info, options.accessDenied, ctx, answered);
492
+ if (html === null)
493
+ return;
494
+ ctx.response
495
+ .status(info.status)
496
+ .header('content-type', 'text/html; charset=utf-8')
497
+ .header('cache-control', 'no-store, must-revalidate')
498
+ .send(html);
499
+ }
500
+ /**
501
+ * Whether something already answered this request: a redirect (`location` header — the signal the
502
+ * `authorize` contract has always honoured) or a body queued on the response. The body check reads
503
+ * AdonisJS's `response.hasLazyBody` structurally so a plain-object `ctx` double in a unit test
504
+ * (which has neither) still works.
505
+ */
506
+ function responseAnswered(ctx) {
507
+ if (ctx.response.getHeader('location'))
508
+ return true;
509
+ const response = ctx.response;
510
+ return response.hasLazyBody === true || response.headersSent === true;
511
+ }
512
+ /**
513
+ * The request's CSP nonce when the host runs `@adonisjs/shield` with `@nonce` in its policy (shield
514
+ * exposes it as `response.nonce`). Read structurally: this package neither depends on shield nor
515
+ * cares which middleware minted the nonce — only that the page's inline `<style>` carries it.
516
+ */
517
+ function cspNonce(ctx) {
518
+ const nonce = ctx.response.nonce;
519
+ return typeof nonce === 'string' && nonce !== '' ? nonce : undefined;
520
+ }
458
521
  /* Session-cookie helpers ---------------------------------------------------------------------- */
459
522
  /** Run a host hook (login/session) defensively: a throw is a denial (null), never a 500. */
460
523
  async function runAuthHook(run) {
@@ -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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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * The built-in "access denied" page a BROWSER sees when the dashboard guard refuses a page
3
+ * navigation — the SPA shell, its assets, or (Mode A only) a session-less visit. Before this page
4
+ * existed the guard answered every denial with the JSON it answers the API with
5
+ * (`{ "error": "forbidden" }`), which is the right thing for the SPA's `fetch` calls and the wrong
6
+ * thing for a human staring at a browser tab.
7
+ *
8
+ * Deliberately a small, dependency-free, hand-authored HTML page (like `login_page.ts`) — NOT part
9
+ * of the bundled SPA, so a denial never needs the SPA to load first. It carries NO `<script>` at all,
10
+ * so a host running a nonce'd `script-src` CSP (the `@adonisjs/shield` default) cannot break it; the
11
+ * one inline `<style>` takes the request's CSP nonce when the provider hands one over.
12
+ *
13
+ * Every string the host can supply ({@link AccessDeniedPageOptions}) is HTML-escaped on the way in.
14
+ * They are developer-controlled config values, not user input — but escaping them costs nothing and
15
+ * removes the one class of bug a "just interpolate it" template would invite.
16
+ *
17
+ * The visual language (Aviary neutrals, the console's own accent, mono eyebrow over a sans body)
18
+ * mirrors the media SPA so the refusal reads as part of the same product, not a server default.
19
+ *
20
+ * Ported from `@adonis-agora/payments` (also in `@adonis-agora/durable`, `@adonis-agora/media`, `@adonis-agora/agent` and
21
+ * `@adonis-agora/telescope` with only {@link CONSOLE} changed, so the Agora consoles share ONE
22
+ * refusal story rather than each inventing its own.
23
+ */
24
+ /** Why the guard refused. Drives the default title/message and which buttons make sense. */
25
+ export type AccessDeniedReason =
26
+ /** Nobody is signed in (a `401`): offer the login page when one exists. */
27
+ 'unauthenticated'
28
+ /** Somebody is signed in but `authorize` said no (a `403`). */
29
+ | 'forbidden'
30
+ /** `dashboardAuth` runs in Mode A only and there is no session — the host app must mint one. */
31
+ | 'session-required';
32
+ /** What the provider knows about the refusal — handed to a custom renderer and to the default page. */
33
+ export interface AccessDeniedInfo {
34
+ /** The HTTP status the page is served with. */
35
+ status: 401 | 403;
36
+ reason: AccessDeniedReason;
37
+ /** The console's mount path (`/media/dashboard`; `''` when mounted at the root). */
38
+ basePath: string;
39
+ /** The built-in login page, present only when `dashboardAuth.login` is configured. */
40
+ loginHref?: string;
41
+ /** A developer-facing detail (e.g. a thrown hook's message). Providers set it OUTSIDE production only. */
42
+ detail?: string;
43
+ /** The request's CSP nonce, applied to the inline `<style>` so a nonce'd `style-src` keeps the page styled. */
44
+ nonce?: string;
45
+ }
46
+ /**
47
+ * Knobs for the built-in page — the `accessDenied` config option in its OBJECT form. Every field is
48
+ * optional; omit the option entirely for the defaults.
49
+ */
50
+ export interface AccessDeniedPageOptions {
51
+ /** Console name in the eyebrow and `<title>`. Default: the console's own name (`Media`). */
52
+ brand?: string;
53
+ /** Heading. Default depends on {@link AccessDeniedInfo.reason}. */
54
+ title?: string;
55
+ /** The sentence under the heading. Default depends on the reason. */
56
+ message?: string;
57
+ /** Where "Back to app" points. Default `/`; `false` hides the button. */
58
+ homeHref?: string | false;
59
+ /** Label of the "Back to app" button. */
60
+ homeLabel?: string;
61
+ /** Where "Sign in" points. Default: the built-in login page when one exists; `false` hides it. */
62
+ loginHref?: string | false;
63
+ /** Label of the "Sign in" button. */
64
+ loginLabel?: string;
65
+ /** Accent colour (any CSS colour). Default: the console's own accent. */
66
+ accent?: string;
67
+ }
68
+ /**
69
+ * The `accessDenied` config option in its FUNCTION form: render the page yourself. Return an HTML
70
+ * string and the provider serves it (with the refusal's status, `text/html`, `no-store`). Return
71
+ * nothing after answering the request yourself — a redirect to your own login page, most commonly —
72
+ * and the provider stands down. Return nothing WITHOUT answering and the default page is served, so
73
+ * the hook is safe to use for side effects (logging) alone.
74
+ *
75
+ * `Ctx` is the host framework's HTTP context — the provider passes AdonisJS's `HttpContext` through
76
+ * untouched; it is generic here so this module stays framework-light and unit-testable.
77
+ */
78
+ export type AccessDeniedRenderer<Ctx = unknown> = (info: AccessDeniedInfo, ctx: Ctx) => string | undefined | null | void | Promise<string | undefined | null | void>;
79
+ /** The `accessDenied` config option: tweak the built-in page, or replace it. */
80
+ export type AccessDeniedOption<Ctx = unknown> = AccessDeniedPageOptions | AccessDeniedRenderer<Ctx>;
81
+ /** This console's identity — the ONLY thing that differs between the Agora ports of this file. */
82
+ export declare const CONSOLE: {
83
+ readonly brand: 'Media';
84
+ readonly accent: '#22d3ee';
85
+ readonly packageName: '@adonis-agora/media';
86
+ };
87
+ /** Escape the five characters that matter inside HTML text and double-quoted attributes. */
88
+ export declare function escapeHtml(value: string): string;
89
+ /**
90
+ * Render the built-in page. Pure: same `info` + `options` in, same HTML out — so it is trivially
91
+ * snapshot/regex testable and safe to call from anywhere (the provider, a test, a host that wants
92
+ * to embed the default page inside its own layout).
93
+ */
94
+ export declare function renderAccessDeniedPage(info: AccessDeniedInfo, options?: AccessDeniedPageOptions): string;
95
+ /**
96
+ * Resolve WHAT to serve for a refusal, honouring the host's `accessDenied` option in either form.
97
+ * Returns the HTML to send, or `null` when a custom renderer already answered the request itself
98
+ * (`answered()` reports whether it did — the provider wires that to "a `location` header or a body
99
+ * is already set"). Framework-light: knows nothing about the HTTP context beyond passing it through.
100
+ */
101
+ export declare function resolveAccessDeniedPage<Ctx>(info: AccessDeniedInfo, option: AccessDeniedOption<Ctx> | null | undefined, ctx: Ctx, answered: () => boolean): Promise<string | null>;
102
+ //# sourceMappingURL=access_denied_page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access_denied_page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/access_denied_page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB;AAC5B,2EAA2E;AACzE,iBAAiB;AACnB,+DAA+D;GAC7D,WAAW;AACb,gGAAgG;GAC9F,kBAAkB,CAAC;AAEvB,uGAAuG;AACvG,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,CAAC,GAAG,GAAG,OAAO,IAAI,CAChD,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,GAAG,KAEL,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAElF,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,CAAC,GAAG,GAAG,OAAO,IAAI,uBAAuB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAEpG,kGAAkG;AAClG,eAAO,MAAM,OAAO;aAClB,KAAK,EAAE,OAAO;aACd,MAAM,EAAE,SAAS;aACjB,WAAW,EAAE,qBAAqB;CAC1B,CAAC;AAmBX,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAyBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAqLR;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAC/C,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAClD,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,OAAO,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * The built-in "access denied" page a BROWSER sees when the dashboard guard refuses a page
3
+ * navigation — the SPA shell, its assets, or (Mode A only) a session-less visit. Before this page
4
+ * existed the guard answered every denial with the JSON it answers the API with
5
+ * (`{ "error": "forbidden" }`), which is the right thing for the SPA's `fetch` calls and the wrong
6
+ * thing for a human staring at a browser tab.
7
+ *
8
+ * Deliberately a small, dependency-free, hand-authored HTML page (like `login_page.ts`) — NOT part
9
+ * of the bundled SPA, so a denial never needs the SPA to load first. It carries NO `<script>` at all,
10
+ * so a host running a nonce'd `script-src` CSP (the `@adonisjs/shield` default) cannot break it; the
11
+ * one inline `<style>` takes the request's CSP nonce when the provider hands one over.
12
+ *
13
+ * Every string the host can supply ({@link AccessDeniedPageOptions}) is HTML-escaped on the way in.
14
+ * They are developer-controlled config values, not user input — but escaping them costs nothing and
15
+ * removes the one class of bug a "just interpolate it" template would invite.
16
+ *
17
+ * The visual language (Aviary neutrals, the console's own accent, mono eyebrow over a sans body)
18
+ * mirrors the media SPA so the refusal reads as part of the same product, not a server default.
19
+ *
20
+ * Ported from `@adonis-agora/payments` (also in `@adonis-agora/durable`, `@adonis-agora/media`, `@adonis-agora/agent` and
21
+ * `@adonis-agora/telescope` with only {@link CONSOLE} changed, so the Agora consoles share ONE
22
+ * refusal story rather than each inventing its own.
23
+ */
24
+ /** This console's identity — the ONLY thing that differs between the Agora ports of this file. */
25
+ export const CONSOLE = {
26
+ brand: 'Media',
27
+ accent: '#22d3ee',
28
+ packageName: '@adonis-agora/media',
29
+ };
30
+ const DEFAULT_COPY = {
31
+ unauthenticated: {
32
+ title: 'Sign in required',
33
+ message: 'You need to be signed in to open this console.',
34
+ },
35
+ forbidden: {
36
+ title: 'Access denied',
37
+ message: 'Your account is not allowed to open this console. If that looks wrong, ask an administrator to grant you access.',
38
+ },
39
+ 'session-required': {
40
+ title: 'Open this console from your app',
41
+ message: 'This console only accepts a session minted by your application. Go back to the app and open the console from there.',
42
+ },
43
+ };
44
+ /** Escape the five characters that matter inside HTML text and double-quoted attributes. */
45
+ export function escapeHtml(value) {
46
+ return value
47
+ .replaceAll('&', '&amp;')
48
+ .replaceAll('<', '&lt;')
49
+ .replaceAll('>', '&gt;')
50
+ .replaceAll('"', '&quot;')
51
+ .replaceAll("'", '&#39;');
52
+ }
53
+ /**
54
+ * Accept only a same-origin, root-relative path for a button `href` — the same open-redirect rule
55
+ * `sanitizeReturnTo` applies to `returnTo`. A host-supplied absolute URL is still a developer's
56
+ * choice, so it is allowed; what is refused is anything that could smuggle a `javascript:` scheme.
57
+ */
58
+ function safeHref(candidate) {
59
+ const trimmed = candidate.trim();
60
+ if (trimmed === '')
61
+ return null;
62
+ if (/^(https?:)?\/\//i.test(trimmed))
63
+ return trimmed;
64
+ if (trimmed.startsWith('/'))
65
+ return trimmed;
66
+ return null;
67
+ }
68
+ /** Only a plausible CSS colour token reaches the stylesheet; anything else falls back to the accent. */
69
+ function safeColor(candidate) {
70
+ return /^[#a-zA-Z0-9(),.%\s-]+$/.test(candidate) ? candidate : CONSOLE.accent;
71
+ }
72
+ const LOCK_ICON = '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>';
73
+ const KEY_ICON = '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="7.5" cy="15.5" r="4.5"/><path d="m21 2-9.6 9.6"/><path d="m15.5 7.5 3 3L22 7l-3-3"/></svg>';
74
+ /**
75
+ * Render the built-in page. Pure: same `info` + `options` in, same HTML out — so it is trivially
76
+ * snapshot/regex testable and safe to call from anywhere (the provider, a test, a host that wants
77
+ * to embed the default page inside its own layout).
78
+ */
79
+ export function renderAccessDeniedPage(info, options = {}) {
80
+ const copy = DEFAULT_COPY[info.reason];
81
+ const brand = escapeHtml(options.brand ?? CONSOLE.brand);
82
+ const title = escapeHtml(options.title ?? copy.title);
83
+ const message = escapeHtml(options.message ?? copy.message);
84
+ const accent = safeColor(options.accent ?? CONSOLE.accent);
85
+ const nonceAttr = info.nonce !== undefined ? ` nonce="${escapeHtml(info.nonce)}"` : '';
86
+ const loginHref = options.loginHref === false
87
+ ? null
88
+ : (safeHref(options.loginHref ?? info.loginHref ?? '') ?? null);
89
+ const homeHref = options.homeHref === false ? null : safeHref(options.homeHref ?? '/');
90
+ const buttons = [];
91
+ if (loginHref !== null && info.reason !== 'forbidden') {
92
+ buttons.push(`<a class="btn primary" href="${escapeHtml(loginHref)}">${KEY_ICON}${escapeHtml(options.loginLabel ?? 'Sign in')}</a>`);
93
+ }
94
+ if (homeHref !== null) {
95
+ buttons.push(`<a class="btn${buttons.length === 0 ? ' primary' : ''}" href="${escapeHtml(homeHref)}">${escapeHtml(options.homeLabel ?? 'Back to app')}</a>`);
96
+ }
97
+ if (loginHref !== null && info.reason === 'forbidden') {
98
+ // A forbidden user might simply be the wrong user: offer a way to switch accounts, second.
99
+ buttons.push(`<a class="btn" href="${escapeHtml(loginHref)}">${escapeHtml(options.loginLabel ?? 'Sign in as someone else')}</a>`);
100
+ }
101
+ const detail = info.detail !== undefined && info.detail !== ''
102
+ ? `\n <p class="detail">${escapeHtml(info.detail)}</p>`
103
+ : '';
104
+ const actions = buttons.length > 0 ? `\n <div class="actions">${buttons.join('')}</div>` : '';
105
+ return `<!doctype html>
106
+ <html lang="en">
107
+ <head>
108
+ <meta charset="utf-8" />
109
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
110
+ <meta name="robots" content="noindex, nofollow" />
111
+ <title>${title} — ${brand}</title>
112
+ <style${nonceAttr}>
113
+ :root {
114
+ color-scheme: dark;
115
+ --bg: #09090b;
116
+ --panel: #0c0c0f;
117
+ --panel-2: #101017;
118
+ --line: #1c1c22;
119
+ --text: #e7e7ea;
120
+ --muted: #76767f;
121
+ --bad: #f87171;
122
+ --accent: ${accent};
123
+ }
124
+ * { box-sizing: border-box; }
125
+ body {
126
+ margin: 0;
127
+ min-height: 100vh;
128
+ display: flex;
129
+ align-items: center;
130
+ justify-content: center;
131
+ padding: 24px;
132
+ background:
133
+ radial-gradient(900px 480px at 50% -10%, color-mix(in srgb, var(--accent) 9%, transparent), transparent 70%),
134
+ var(--bg);
135
+ color: var(--text);
136
+ font: 15px/1.6 "Space Grotesk", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
137
+ -webkit-font-smoothing: antialiased;
138
+ }
139
+ .card {
140
+ position: relative;
141
+ overflow: hidden;
142
+ width: 100%;
143
+ max-width: 440px;
144
+ padding: 36px 32px 28px;
145
+ background: var(--panel);
146
+ border: 1px solid var(--line);
147
+ border-radius: 12px;
148
+ box-shadow: 0 30px 60px -24px rgb(0 0 0 / 0.7);
149
+ }
150
+ .card::before {
151
+ content: "";
152
+ position: absolute;
153
+ inset: 0 0 auto 0;
154
+ height: 2px;
155
+ background: linear-gradient(90deg, var(--accent), transparent 80%);
156
+ }
157
+ .eyebrow {
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 10px;
161
+ margin: 0 0 22px;
162
+ font: 11px/1 "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
163
+ letter-spacing: 0.12em;
164
+ text-transform: uppercase;
165
+ color: var(--muted);
166
+ }
167
+ .eyebrow .brand { color: var(--accent); }
168
+ .eyebrow .status {
169
+ margin-left: auto;
170
+ padding: 4px 7px;
171
+ border: 1px solid var(--line);
172
+ border-radius: 4px;
173
+ color: var(--bad);
174
+ letter-spacing: 0.08em;
175
+ }
176
+ .icon {
177
+ display: grid;
178
+ place-items: center;
179
+ width: 40px;
180
+ height: 40px;
181
+ margin-bottom: 18px;
182
+ border-radius: 10px;
183
+ background: color-mix(in srgb, var(--accent) 12%, transparent);
184
+ color: var(--accent);
185
+ }
186
+ h1 {
187
+ margin: 0 0 8px;
188
+ font-size: 22px;
189
+ font-weight: 600;
190
+ letter-spacing: -0.01em;
191
+ }
192
+ p { margin: 0; color: var(--muted); }
193
+ .detail {
194
+ margin-top: 14px;
195
+ padding: 10px 12px;
196
+ border: 1px solid var(--line);
197
+ border-radius: 6px;
198
+ background: var(--panel-2);
199
+ font: 12px/1.5 "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
200
+ color: var(--text);
201
+ overflow-wrap: anywhere;
202
+ }
203
+ .actions {
204
+ display: flex;
205
+ flex-wrap: wrap;
206
+ gap: 10px;
207
+ margin-top: 26px;
208
+ }
209
+ .btn {
210
+ display: inline-flex;
211
+ align-items: center;
212
+ gap: 8px;
213
+ padding: 9px 14px;
214
+ border: 1px solid var(--line);
215
+ border-radius: 6px;
216
+ background: var(--panel-2);
217
+ color: var(--text);
218
+ font-size: 13px;
219
+ font-weight: 500;
220
+ text-decoration: none;
221
+ }
222
+ .btn:hover { border-color: color-mix(in srgb, var(--accent) 50%, var(--line)); }
223
+ .btn.primary {
224
+ background: color-mix(in srgb, var(--accent) 14%, transparent);
225
+ border-color: color-mix(in srgb, var(--accent) 45%, transparent);
226
+ color: var(--accent);
227
+ }
228
+ .btn.primary:hover { background: color-mix(in srgb, var(--accent) 22%, transparent); }
229
+ .foot {
230
+ margin-top: 26px;
231
+ font: 11px/1 "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
232
+ letter-spacing: 0.04em;
233
+ color: var(--muted);
234
+ opacity: 0.7;
235
+ }
236
+ </style>
237
+ </head>
238
+ <body>
239
+ <main class="card">
240
+ <p class="eyebrow"><span class="brand">${brand}</span><span>console</span><span class="status">${info.status}</span></p>
241
+ <div class="icon" aria-hidden="true">${info.reason === 'forbidden' ? LOCK_ICON : KEY_ICON}</div>
242
+ <h1>${title}</h1>
243
+ <p>${message}</p>${detail}${actions}
244
+ <p class="foot">${escapeHtml(CONSOLE.packageName)}</p>
245
+ </main>
246
+ </body>
247
+ </html>`;
248
+ }
249
+ /**
250
+ * Resolve WHAT to serve for a refusal, honouring the host's `accessDenied` option in either form.
251
+ * Returns the HTML to send, or `null` when a custom renderer already answered the request itself
252
+ * (`answered()` reports whether it did — the provider wires that to "a `location` header or a body
253
+ * is already set"). Framework-light: knows nothing about the HTTP context beyond passing it through.
254
+ */
255
+ export async function resolveAccessDeniedPage(info, option, ctx, answered) {
256
+ if (typeof option === 'function') {
257
+ const rendered = await option(info, ctx);
258
+ if (typeof rendered === 'string')
259
+ return rendered;
260
+ if (answered())
261
+ return null;
262
+ return renderAccessDeniedPage(info);
263
+ }
264
+ return renderAccessDeniedPage(info, option ?? {});
265
+ }
266
+ //# sourceMappingURL=access_denied_page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access_denied_page.js","sourceRoot":"","sources":["../../../src/dashboard/access_denied_page.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,17 @@
1
1
  import type { HttpContext } from '@adonisjs/core/http';
2
+ import type { AccessDeniedOption as GenericAccessDeniedOption, AccessDeniedRenderer as GenericAccessDeniedRenderer } from './access_denied_page.js';
2
3
  import type { ConsoleAuthOptions } from './auth.js';
3
4
  import type { ObjectInsightProvider } from './object_insights.js';
5
+ /**
6
+ * The function form of {@link MediaDashboardConfig.accessDenied}: render (or answer) a refused
7
+ * page navigation yourself. Receives the refusal ({@link AccessDeniedInfo}) and the AdonisJS
8
+ * {@link HttpContext}. Return an HTML string to have it served; answer the request yourself (a
9
+ * redirect, most commonly) and return nothing to make the provider stand down; return nothing
10
+ * WITHOUT answering and the built-in page is served.
11
+ */
12
+ export type AccessDeniedRenderer = GenericAccessDeniedRenderer<HttpContext>;
13
+ /** `accessDenied` in either form — an options object for the built-in page, or a renderer. */
14
+ export type AccessDeniedOption = GenericAccessDeniedOption<HttpContext>;
4
15
  /** A minimal middleware handler shape (host auth guard) applied to the console routes. */
5
16
  export type DashboardMiddleware = (ctx: HttpContext, next: () => Promise<void>) => unknown;
6
17
  /**
@@ -48,11 +59,22 @@ export interface MediaDashboardConfig {
48
59
  /**
49
60
  * Access-decision hook gating the whole console (SPA + API), same shape as the
50
61
  * `authorize` hooks of the other `@adonis-agora` dashboards. Runs BEFORE `middleware`
51
- * and composes with the built-in `auth` session guard (all must pass). Denied requests
52
- * get `401`/`403` (or honor a redirect the hook writes). Default: allow when not in
62
+ * and composes with the built-in `auth` session guard (all must pass). A denied request
63
+ * gets `403` (or honors a redirect the hook writes): `{ error: 'Forbidden' }` JSON on the
64
+ * API, the {@link accessDenied} page on a page navigation. Default: allow when not in
53
65
  * production.
54
66
  */
55
67
  authorize?: DashboardAuthorize;
68
+ /**
69
+ * What a BROWSER sees when `authorize` refuses a page navigation — the SPA shell or its assets.
70
+ * API requests are unaffected: they keep getting `403 { error: 'Forbidden' }` JSON. Omit it for
71
+ * the built-in page — a dark card in the console's own visual language with the same `403`, a
72
+ * sentence explaining the refusal and a "Back to app" link. Pass an
73
+ * object to tweak that page (`brand`, `title`, `message`, `homeHref`, `accent`, …), or a function
74
+ * to render/answer it yourself — see {@link AccessDeniedRenderer}. A redirect written by
75
+ * `authorize` still wins: the provider never overwrites a `location` header.
76
+ */
77
+ accessDenied?: AccessDeniedOption;
56
78
  /**
57
79
  * Gate the console's JSON API behind a built-in session-cookie login, mirroring the NestJS sibling
58
80
  * console. Omit to leave the API open (front it with your own `middleware`). When set, the SPA
@@ -1 +1 @@
1
- {"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../../src/dashboard/define_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;AAE3F;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAElF;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC;4FACwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,sHAAsH;IACtH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uHAAuH;IACvH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,UAAU,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;IACzD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC1C;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,MAAM,GAAE,oBAAyB,GAAG,oBAAoB,CAEpF"}
1
+ {"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../../src/dashboard/define_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EACV,kBAAkB,IAAI,yBAAyB,EAC/C,oBAAoB,IAAI,2BAA2B,EACpD,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC;AAE5E,8FAA8F;AAC9F,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAExE,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;AAE3F;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAElF;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC;4FACwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,sHAAsH;IACtH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uHAAuH;IACvH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,UAAU,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;IACzD;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC1C;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,MAAM,GAAE,oBAAyB,GAAG,oBAAoB,CAEpF"}
@@ -1 +1 @@
1
- {"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../../src/dashboard/define_config.ts"],"names":[],"mappings":"AA0EA,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,MAAM,GAAyB,EAAE;IAC5D,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../../src/dashboard/define_config.ts"],"names":[],"mappings":"AAqGA,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,MAAM,GAAyB,EAAE;IAC5D,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,6 +1,8 @@
1
+ export type { AccessDeniedInfo, AccessDeniedPageOptions, AccessDeniedReason, } from './access_denied_page.js';
2
+ export { CONSOLE as ACCESS_DENIED_CONSOLE, escapeHtml, renderAccessDeniedPage, resolveAccessDeniedPage, } from './access_denied_page.js';
1
3
  export type { AuthMode, ConsoleAuthOptions, ConsoleSession, ConsoleSessionUser, LoginHook, ResolvedConsoleAuth, RevalidateHook, SessionHook, } from './auth.js';
2
4
  export { resolveConsoleAuth, signSessionCookie, verifySessionCookie } from './auth.js';
3
- export type { DashboardMiddleware, MediaDashboardConfig } from './define_config.js';
5
+ export type { AccessDeniedOption, AccessDeniedRenderer, DashboardAuthorize, DashboardMiddleware, MediaDashboardConfig, } from './define_config.js';
4
6
  export { defineConfig } from './define_config.js';
5
7
  export type { ObjectInsightContext, ObjectInsightProvider } from './object_insights.js';
6
8
  export { sanitizeInsight } from './object_insights.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dashboard/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACvF,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dashboard/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,OAAO,IAAI,qBAAqB,EAChC,UAAU,EACV,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACvF,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC"}
@@ -1,4 +1,6 @@
1
1
  // Config idiom — author `config/media_dashboard.ts` against these.
2
+ // The built-in "access denied" page (what a browser sees on a refused page navigation).
3
+ export { CONSOLE as ACCESS_DENIED_CONSOLE, escapeHtml, renderAccessDeniedPage, resolveAccessDeniedPage, } from './access_denied_page.js';
2
4
  // Built-in session-cookie login.
3
5
  export { resolveConsoleAuth, signSessionCookie, verifySessionCookie } from './auth.js';
4
6
  export { defineConfig } from './define_config.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAYnE,iCAAiC;AACjC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,oCAAoC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,gGAAgG;AAChG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAOnE,wFAAwF;AACxF,OAAO,EACL,OAAO,IAAI,qBAAqB,EAChC,UAAU,EACV,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAWjC,iCAAiC;AACjC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAQvF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,oCAAoC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,gGAAgG;AAChG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/media",
3
- "version": "0.14.1",
3
+ "version": "0.15.0",
4
4
  "description": "Media-library for AdonisJS — owner collections (MIME whitelist, single-file replace, ordering), image conversions (eager/lazy), pluggable content transformers (HLS video via mediabunny, metadata probe), and column attachments, all on top of @adonisjs/drive. Pluggable MediaStore (in-memory + Lucid) and ImageProcessor (sharp). Part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {