@adonis-agora/media 0.10.4 → 0.11.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 +15 -0
- package/README.md +46 -6
- package/dist/assets/spa/assets/index--0MZJr6W.css +1 -0
- package/dist/assets/spa/assets/index-Dvw2uJpF.js +83 -0
- package/dist/assets/spa/assets/index-Dvw2uJpF.js.map +1 -0
- package/dist/assets/spa/index.html +20 -0
- package/dist/configure.d.ts +6 -2
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +8 -2
- package/dist/configure.js.map +1 -1
- package/dist/providers/dashboard_provider.d.ts +29 -0
- package/dist/providers/dashboard_provider.d.ts.map +1 -0
- package/dist/providers/dashboard_provider.js +520 -0
- package/dist/providers/dashboard_provider.js.map +1 -0
- package/dist/src/dashboard/auth.d.ts +76 -0
- package/dist/src/dashboard/auth.d.ts.map +1 -0
- package/dist/src/dashboard/auth.js +134 -0
- package/dist/src/dashboard/auth.js.map +1 -0
- package/dist/src/dashboard/cookie.d.ts +20 -0
- package/dist/src/dashboard/cookie.d.ts.map +1 -0
- package/dist/src/dashboard/cookie.js +44 -0
- package/dist/src/dashboard/cookie.js.map +1 -0
- package/dist/src/dashboard/define_config.d.ts +56 -0
- package/dist/src/dashboard/define_config.d.ts.map +1 -0
- package/dist/src/dashboard/define_config.js +5 -0
- package/dist/src/dashboard/define_config.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +10 -0
- package/dist/src/dashboard/index.d.ts.map +1 -0
- package/dist/src/dashboard/index.js +9 -0
- package/dist/src/dashboard/index.js.map +1 -0
- package/dist/src/dashboard/object_insights.d.ts +42 -0
- package/dist/src/dashboard/object_insights.d.ts.map +1 -0
- package/dist/src/dashboard/object_insights.js +42 -0
- package/dist/src/dashboard/object_insights.js.map +1 -0
- package/dist/src/dashboard/service.d.ts +215 -0
- package/dist/src/dashboard/service.d.ts.map +1 -0
- package/dist/src/dashboard/service.js +470 -0
- package/dist/src/dashboard/service.js.map +1 -0
- package/dist/src/dashboard/spa.d.ts +29 -0
- package/dist/src/dashboard/spa.d.ts.map +1 -0
- package/dist/src/dashboard/spa.js +47 -0
- package/dist/src/dashboard/spa.js.map +1 -0
- package/dist/src/dashboard/types.d.ts +201 -0
- package/dist/src/dashboard/types.d.ts.map +1 -0
- package/dist/src/dashboard/types.js +10 -0
- package/dist/src/dashboard/types.js.map +1 -0
- package/dist/stubs/config/media_dashboard.stub +39 -0
- package/package.json +15 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard_provider.js","sourceRoot":"","sources":["../../providers/dashboard_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** The validated console session decoded from a verified cookie. */
|
|
2
|
+
export interface ConsoleSession {
|
|
3
|
+
/** Stable user id (the session user's `id`). */
|
|
4
|
+
sub: string;
|
|
5
|
+
/** Optional display name. */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** Free-form role strings; the console does not interpret them. */
|
|
8
|
+
roles: string[];
|
|
9
|
+
/** Issued-at, epoch milliseconds. */
|
|
10
|
+
iat: number;
|
|
11
|
+
/** Expiry, epoch milliseconds. */
|
|
12
|
+
exp: number;
|
|
13
|
+
}
|
|
14
|
+
/** The session user a host `login`/`session` hook returns to mint a cookie. */
|
|
15
|
+
export interface ConsoleSessionUser {
|
|
16
|
+
id: string;
|
|
17
|
+
name?: string;
|
|
18
|
+
roles?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface SignOptions {
|
|
21
|
+
secret: string;
|
|
22
|
+
ttlMs: number;
|
|
23
|
+
/** Injectable clock (epoch ms) for deterministic tests. Defaults to `Date.now()`. */
|
|
24
|
+
now?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface VerifyOptions {
|
|
27
|
+
secret: string;
|
|
28
|
+
now?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sign a session into the cookie value `base64url(payload).base64url(hmac)`. Stateless
|
|
32
|
+
* HMAC-SHA256, no store — `node:crypto` only, no JWT dependency.
|
|
33
|
+
*/
|
|
34
|
+
export declare function signSessionCookie(user: ConsoleSessionUser, options: SignOptions): string;
|
|
35
|
+
/**
|
|
36
|
+
* Verify a cookie value and return the session, or `null` for anything tampered, malformed, or
|
|
37
|
+
* expired (past `exp` + a 30s grace). Constant-time signature comparison. NEVER throws — any parse
|
|
38
|
+
* failure yields `null`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function verifySessionCookie(value: string, options: VerifyOptions): ConsoleSession | null;
|
|
41
|
+
/** Host hook for Mode A — validates the host's own auth on the raw AdonisJS request. */
|
|
42
|
+
export type SessionHook = (request: unknown) => Promise<ConsoleSessionUser | null> | ConsoleSessionUser | null;
|
|
43
|
+
/** Host hook for Mode B — validates submitted credentials from the built-in login screen. */
|
|
44
|
+
export type LoginHook = (username: string, password: string) => Promise<ConsoleSessionUser | null> | ConsoleSessionUser | null;
|
|
45
|
+
/** Re-checks a LIVE session when the cookie is slid forward. Return `false` to revoke. */
|
|
46
|
+
export type RevalidateHook = (session: ConsoleSessionUser) => Promise<boolean> | boolean;
|
|
47
|
+
export type AuthMode = 'session' | 'login';
|
|
48
|
+
/** Author-facing `auth` option on `config/media_dashboard.ts`. Mirrors the NestJS console's shape. */
|
|
49
|
+
export interface ConsoleAuthOptions {
|
|
50
|
+
/** REQUIRED HMAC-SHA256 signing key. Missing/empty => boot error (fail closed). */
|
|
51
|
+
secret: string;
|
|
52
|
+
/** Cookie TTL as a duration string (`'8h'`, `'30m'`, `'7d'`). Default `'8h'`. */
|
|
53
|
+
ttl?: string;
|
|
54
|
+
/** Mode A: validate the host's own auth on the raw request. */
|
|
55
|
+
session?: SessionHook;
|
|
56
|
+
/** Mode B: validate credentials from the built-in login screen. */
|
|
57
|
+
login?: LoginHook;
|
|
58
|
+
/** Re-checks the session on sliding renewal. Not a mode — it cannot mint a session on its own. */
|
|
59
|
+
revalidate?: RevalidateHook;
|
|
60
|
+
}
|
|
61
|
+
/** Resolved, validated console-auth config shared by the guard and the auth routes. */
|
|
62
|
+
export interface ResolvedConsoleAuth {
|
|
63
|
+
secret: string;
|
|
64
|
+
ttlMs: number;
|
|
65
|
+
modes: AuthMode[];
|
|
66
|
+
session?: SessionHook;
|
|
67
|
+
login?: LoginHook;
|
|
68
|
+
revalidate?: RevalidateHook;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate + resolve the `auth` option. Returns `null` when unconfigured (the console stays open —
|
|
72
|
+
* front it with your own `middleware`). Throws at boot (fail closed) when configured but missing a
|
|
73
|
+
* secret or any hook — the host learns immediately rather than shipping an un-mintable gate.
|
|
74
|
+
*/
|
|
75
|
+
export declare function resolveConsoleAuth(options: ConsoleAuthOptions | undefined): ResolvedConsoleAuth | null;
|
|
76
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/dashboard/auth.ts"],"names":[],"mappings":"AAcA,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAcD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAWxF;AAeD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc,GAAG,IAAI,CAmBhG;AAED,wFAAwF;AACxF,MAAM,MAAM,WAAW,GAAG,CACxB,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC;AAEpE,6FAA6F;AAC7F,MAAM,MAAM,SAAS,GAAG,CACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC;AAEpE,0FAA0F;AAC1F,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEzF,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3C,sGAAsG;AACtG,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kGAAkG;IAClG,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAoBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACtC,mBAAmB,GAAG,IAAI,CAmB5B"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in session-cookie login for the dashboard, ported from the NestJS sibling console
|
|
4
|
+
* (`@dudousxd/nestjs-media-dashboard`'s `server/auth/*`) so both ecosystems gate the console the
|
|
5
|
+
* same way. Framework-free by design (no AdonisJS import here) — the provider is the only piece
|
|
6
|
+
* that knows about `HttpContext`/cookies; this module only signs and verifies a stateless
|
|
7
|
+
* HMAC-SHA256 session, exactly as the NestJS version does (same wire format, same TTL/grace rules),
|
|
8
|
+
* so a host running both consoles can share one mental model of "how the console gate works".
|
|
9
|
+
*/
|
|
10
|
+
/** Clock-skew grace applied to `exp` so a marginally-late clock doesn't bounce a valid cookie. */
|
|
11
|
+
const EXP_GRACE_MS = 30_000;
|
|
12
|
+
function base64urlEncode(value) {
|
|
13
|
+
return Buffer.from(value, 'utf8').toString('base64url');
|
|
14
|
+
}
|
|
15
|
+
function base64urlDecode(value) {
|
|
16
|
+
return Buffer.from(value, 'base64url').toString('utf8');
|
|
17
|
+
}
|
|
18
|
+
function hmac(secret, payload) {
|
|
19
|
+
return createHmac('sha256', secret).update(payload).digest('base64url');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Sign a session into the cookie value `base64url(payload).base64url(hmac)`. Stateless
|
|
23
|
+
* HMAC-SHA256, no store — `node:crypto` only, no JWT dependency.
|
|
24
|
+
*/
|
|
25
|
+
export function signSessionCookie(user, options) {
|
|
26
|
+
const issuedAt = options.now ?? Date.now();
|
|
27
|
+
const session = {
|
|
28
|
+
sub: user.id,
|
|
29
|
+
...(user.name !== undefined ? { name: user.name } : {}),
|
|
30
|
+
roles: user.roles ?? [],
|
|
31
|
+
iat: issuedAt,
|
|
32
|
+
exp: issuedAt + options.ttlMs,
|
|
33
|
+
};
|
|
34
|
+
const encodedPayload = base64urlEncode(JSON.stringify(session));
|
|
35
|
+
return `${encodedPayload}.${hmac(options.secret, encodedPayload)}`;
|
|
36
|
+
}
|
|
37
|
+
/** Type guard for the decoded payload shape — defends against tampered/legacy payloads. */
|
|
38
|
+
function isSessionPayload(value) {
|
|
39
|
+
if (typeof value !== 'object' || value === null)
|
|
40
|
+
return false;
|
|
41
|
+
const record = value;
|
|
42
|
+
if (typeof record.sub !== 'string')
|
|
43
|
+
return false;
|
|
44
|
+
if (record.name !== undefined && typeof record.name !== 'string')
|
|
45
|
+
return false;
|
|
46
|
+
if (!Array.isArray(record.roles))
|
|
47
|
+
return false;
|
|
48
|
+
if (!record.roles.every((role) => typeof role === 'string'))
|
|
49
|
+
return false;
|
|
50
|
+
if (typeof record.iat !== 'number' || !Number.isFinite(record.iat))
|
|
51
|
+
return false;
|
|
52
|
+
if (typeof record.exp !== 'number' || !Number.isFinite(record.exp))
|
|
53
|
+
return false;
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Verify a cookie value and return the session, or `null` for anything tampered, malformed, or
|
|
58
|
+
* expired (past `exp` + a 30s grace). Constant-time signature comparison. NEVER throws — any parse
|
|
59
|
+
* failure yields `null`.
|
|
60
|
+
*/
|
|
61
|
+
export function verifySessionCookie(value, options) {
|
|
62
|
+
try {
|
|
63
|
+
const dot = value.indexOf('.');
|
|
64
|
+
if (dot <= 0 || dot === value.length - 1)
|
|
65
|
+
return null;
|
|
66
|
+
const encodedPayload = value.slice(0, dot);
|
|
67
|
+
const provided = Buffer.from(value.slice(dot + 1), 'base64url');
|
|
68
|
+
const expected = Buffer.from(hmac(options.secret, encodedPayload), 'base64url');
|
|
69
|
+
// timingSafeEqual throws on a length mismatch — guard it so a wrong-length (tampered)
|
|
70
|
+
// signature returns null instead of throwing.
|
|
71
|
+
if (provided.length !== expected.length)
|
|
72
|
+
return null;
|
|
73
|
+
if (!timingSafeEqual(provided, expected))
|
|
74
|
+
return null;
|
|
75
|
+
const decoded = JSON.parse(base64urlDecode(encodedPayload));
|
|
76
|
+
if (!isSessionPayload(decoded))
|
|
77
|
+
return null;
|
|
78
|
+
const now = options.now ?? Date.now();
|
|
79
|
+
if (now > decoded.exp + EXP_GRACE_MS)
|
|
80
|
+
return null;
|
|
81
|
+
return decoded;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const DEFAULT_TTL_MS = 8 * 60 * 60 * 1000;
|
|
88
|
+
const DURATION_UNITS = {
|
|
89
|
+
s: 1000,
|
|
90
|
+
m: 60 * 1000,
|
|
91
|
+
h: 60 * 60 * 1000,
|
|
92
|
+
d: 24 * 60 * 60 * 1000,
|
|
93
|
+
};
|
|
94
|
+
/** Parse a `'<number><s|m|h|d>'` duration to ms; falls back to the 8h default on a bad value. */
|
|
95
|
+
function durationToMs(ttl) {
|
|
96
|
+
if (ttl === undefined)
|
|
97
|
+
return DEFAULT_TTL_MS;
|
|
98
|
+
const match = /^(\d+)([smhd])$/.exec(ttl.trim());
|
|
99
|
+
if (!match)
|
|
100
|
+
return DEFAULT_TTL_MS;
|
|
101
|
+
const unit = DURATION_UNITS[match[2] ?? ''];
|
|
102
|
+
if (unit === undefined)
|
|
103
|
+
return DEFAULT_TTL_MS;
|
|
104
|
+
return Number(match[1]) * unit;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate + resolve the `auth` option. Returns `null` when unconfigured (the console stays open —
|
|
108
|
+
* front it with your own `middleware`). Throws at boot (fail closed) when configured but missing a
|
|
109
|
+
* secret or any hook — the host learns immediately rather than shipping an un-mintable gate.
|
|
110
|
+
*/
|
|
111
|
+
export function resolveConsoleAuth(options) {
|
|
112
|
+
if (!options)
|
|
113
|
+
return null;
|
|
114
|
+
if (!options.secret) {
|
|
115
|
+
throw new Error('media-dashboard: auth.secret is required when `auth` is configured.');
|
|
116
|
+
}
|
|
117
|
+
const modes = [];
|
|
118
|
+
if (options.session)
|
|
119
|
+
modes.push('session');
|
|
120
|
+
if (options.login)
|
|
121
|
+
modes.push('login');
|
|
122
|
+
if (modes.length === 0) {
|
|
123
|
+
throw new Error('media-dashboard: auth needs a `login` and/or `session` hook.');
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
secret: options.secret,
|
|
127
|
+
ttlMs: durationToMs(options.ttl),
|
|
128
|
+
modes,
|
|
129
|
+
...(options.session ? { session: options.session } : {}),
|
|
130
|
+
...(options.login ? { login: options.login } : {}),
|
|
131
|
+
...(options.revalidate ? { revalidate: options.revalidate } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/dashboard/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal, framework-free `Cookie`/`Set-Cookie` header codec for the console's session cookie.
|
|
3
|
+
* Deliberately NOT using AdonisJS's own `plainCookie`/`cookie` helpers — this cookie is signed by
|
|
4
|
+
* `./auth.ts` itself (HMAC, matching the NestJS sibling console byte-for-byte), so it needs no
|
|
5
|
+
* further encoding, and writing the header directly keeps `./auth.ts` fully framework-free and
|
|
6
|
+
* trivially unit-testable (same reasoning as the NestJS console's `auth/cookie-header.ts`).
|
|
7
|
+
*/
|
|
8
|
+
export declare const SESSION_COOKIE_NAME = "media_dashboard_session";
|
|
9
|
+
/** Parse a `Cookie` request header into a `{name: value}` map. Malformed pairs are skipped. */
|
|
10
|
+
export declare function parseCookieHeader(header: string | undefined): Record<string, string>;
|
|
11
|
+
export interface SetCookieOptions {
|
|
12
|
+
path: string;
|
|
13
|
+
maxAgeSeconds: number;
|
|
14
|
+
secure: boolean;
|
|
15
|
+
/** When true, serializes an already-expired cookie (clears it) regardless of `maxAgeSeconds`. */
|
|
16
|
+
clear?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Serialize one `Set-Cookie` header value: `HttpOnly`, `SameSite=Lax`, and `Secure` over https. */
|
|
19
|
+
export declare function serializeSetCookie(name: string, value: string, options: SetCookieOptions): string;
|
|
20
|
+
//# sourceMappingURL=cookie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../../src/dashboard/cookie.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAE7D,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CASjG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal, framework-free `Cookie`/`Set-Cookie` header codec for the console's session cookie.
|
|
3
|
+
* Deliberately NOT using AdonisJS's own `plainCookie`/`cookie` helpers — this cookie is signed by
|
|
4
|
+
* `./auth.ts` itself (HMAC, matching the NestJS sibling console byte-for-byte), so it needs no
|
|
5
|
+
* further encoding, and writing the header directly keeps `./auth.ts` fully framework-free and
|
|
6
|
+
* trivially unit-testable (same reasoning as the NestJS console's `auth/cookie-header.ts`).
|
|
7
|
+
*/
|
|
8
|
+
export const SESSION_COOKIE_NAME = 'media_dashboard_session';
|
|
9
|
+
/** Parse a `Cookie` request header into a `{name: value}` map. Malformed pairs are skipped. */
|
|
10
|
+
export function parseCookieHeader(header) {
|
|
11
|
+
const cookies = {};
|
|
12
|
+
if (!header)
|
|
13
|
+
return cookies;
|
|
14
|
+
for (const pair of header.split(';')) {
|
|
15
|
+
const eq = pair.indexOf('=');
|
|
16
|
+
if (eq === -1)
|
|
17
|
+
continue;
|
|
18
|
+
const name = pair.slice(0, eq).trim();
|
|
19
|
+
if (!name)
|
|
20
|
+
continue;
|
|
21
|
+
const value = pair.slice(eq + 1).trim();
|
|
22
|
+
try {
|
|
23
|
+
cookies[name] = decodeURIComponent(value);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
cookies[name] = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return cookies;
|
|
30
|
+
}
|
|
31
|
+
/** Serialize one `Set-Cookie` header value: `HttpOnly`, `SameSite=Lax`, and `Secure` over https. */
|
|
32
|
+
export function serializeSetCookie(name, value, options) {
|
|
33
|
+
const parts = [`${name}=${encodeURIComponent(value)}`];
|
|
34
|
+
parts.push(`Path=${options.path}`);
|
|
35
|
+
parts.push(`Max-Age=${Math.max(0, Math.floor(options.maxAgeSeconds))}`);
|
|
36
|
+
if (options.clear)
|
|
37
|
+
parts.push('Expires=Thu, 01 Jan 1970 00:00:00 GMT');
|
|
38
|
+
parts.push('HttpOnly');
|
|
39
|
+
parts.push('SameSite=Lax');
|
|
40
|
+
if (options.secure)
|
|
41
|
+
parts.push('Secure');
|
|
42
|
+
return parts.join('; ');
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=cookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../../src/dashboard/cookie.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAE7D,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,SAAS;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAUD,oGAAoG;AACpG,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAa,EAAE,OAAyB;IACvF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { HttpContext } from '@adonisjs/core/http';
|
|
2
|
+
import type { ConsoleAuthOptions } from './auth.js';
|
|
3
|
+
import type { ObjectInsightProvider } from './object_insights.js';
|
|
4
|
+
/** A minimal middleware handler shape (host auth guard) applied to the console routes. */
|
|
5
|
+
export type DashboardMiddleware = (ctx: HttpContext, next: () => Promise<void>) => unknown;
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for the `@adonis-agora/media` dashboard, read by `dashboard_provider.ts` from
|
|
8
|
+
* `config/media_dashboard.ts`. Same config KEY (`media_dashboard`) the standalone
|
|
9
|
+
* `@adonis-agora/media-dashboard` package's provider always read, so an existing
|
|
10
|
+
* `config/media_dashboard.ts` keeps working unchanged when a host switches from the standalone
|
|
11
|
+
* provider to this embedded one.
|
|
12
|
+
*
|
|
13
|
+
* The console is a read-only browser by default (`actions: false`); flip `actions` on — and gate the
|
|
14
|
+
* routes with your own `middleware` (an auth guard) — to enable copy/move/delete. Storage, uploads and
|
|
15
|
+
* everything else come from the already-configured `@adonis-agora/media` manager; this config only
|
|
16
|
+
* places the SPA + JSON API and picks which disks are browsable.
|
|
17
|
+
*/
|
|
18
|
+
export interface MediaDashboardConfig {
|
|
19
|
+
/** Mount the dashboard at all. Default `true`. Set `false` to register the provider (so its config
|
|
20
|
+
* type stays available) without actually exposing any route — e.g. per-environment. */
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
/** Where the SPA is mounted. Default `/media/dashboard`. */
|
|
23
|
+
basePath?: string;
|
|
24
|
+
/** Where the JSON API is mounted. Default `<basePath>/api`. */
|
|
25
|
+
apiBasePath?: string;
|
|
26
|
+
/** Enable mutating actions (copy/move/delete). Default `false`. */
|
|
27
|
+
actions?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Disk names the console may browse/act on. When omitted, the provider derives them from the media
|
|
30
|
+
* config (`disks` keys plus the default disk).
|
|
31
|
+
*/
|
|
32
|
+
disks?: string[];
|
|
33
|
+
/** Prefix of the core direct-S3 upload routes, matched to `media.uploads.routes.prefix`. Default `/media/uploads`. */
|
|
34
|
+
uploadsPrefix?: string;
|
|
35
|
+
/** Prefix of the core TUS routes, matched to `media.uploads.resumable.routes.prefix`. Default `/media/uploads/tus`. */
|
|
36
|
+
tusPrefix?: string;
|
|
37
|
+
/** Host middleware (auth) applied to the whole console — SPA and API. */
|
|
38
|
+
middleware?: DashboardMiddleware | DashboardMiddleware[];
|
|
39
|
+
/**
|
|
40
|
+
* Gate the console's JSON API behind a built-in session-cookie login, mirroring the NestJS sibling
|
|
41
|
+
* console. Omit to leave the API open (front it with your own `middleware`). When set, the SPA
|
|
42
|
+
* renders a login screen until a valid cookie exists; supply a `login(username, password)` and/or
|
|
43
|
+
* `session(request)` hook that returns a session user (or `null` to deny) — see
|
|
44
|
+
* {@link ConsoleAuthOptions}. Independent of, and composable with, `middleware`.
|
|
45
|
+
*/
|
|
46
|
+
auth?: ConsoleAuthOptions;
|
|
47
|
+
/**
|
|
48
|
+
* Host-supplied context about a disk object, rendered in the console's preview — see
|
|
49
|
+
* {@link ObjectInsightProvider}. The console can only describe a file as storage sees it; this is
|
|
50
|
+
* how it learns what the file *means* to your app. Omit for no annotation (the default).
|
|
51
|
+
*/
|
|
52
|
+
objectInsights?: ObjectInsightProvider[];
|
|
53
|
+
}
|
|
54
|
+
/** Identity helper for authoring a typed `config/media_dashboard.ts`. */
|
|
55
|
+
export declare function defineConfig(config?: MediaDashboardConfig): MediaDashboardConfig;
|
|
56
|
+
//# sourceMappingURL=define_config.d.ts.map
|
|
@@ -0,0 +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;;;;;;;;;;;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,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../../src/dashboard/define_config.ts"],"names":[],"mappings":"AAwDA,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,SAA+B,EAAE;IAC5D,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { defineConfig } from './define_config.js';
|
|
2
|
+
export type { MediaDashboardConfig, DashboardMiddleware } from './define_config.js';
|
|
3
|
+
export { DashboardService, DashboardError } from './service.js';
|
|
4
|
+
export type { MediaManagerLike, DashboardServiceOptions } from './service.js';
|
|
5
|
+
export { resolveConsoleAuth, signSessionCookie, verifySessionCookie } from './auth.js';
|
|
6
|
+
export type { ConsoleAuthOptions, ConsoleSession, ConsoleSessionUser, ResolvedConsoleAuth, AuthMode, SessionHook, LoginHook, RevalidateHook, } from './auth.js';
|
|
7
|
+
export { sanitizeInsight } from './object_insights.js';
|
|
8
|
+
export type { ObjectInsightProvider, ObjectInsightContext } from './object_insights.js';
|
|
9
|
+
export type { DiskInfo, DiskListResponse, DiskCapabilities, ObjectFolder, ObjectEntry, ObjectListResponse, ObjectDetailResponse, MediaEntry, MediaVariant, MediaDetailResponse, CollectionListResponse, CollectionFilter, CollectionSummary, CollectionsSummaryResponse, UploadInfo, UploadPart, UploadListResponse, UploadDetailResponse, Topology, CopyMoveBody, DeleteBody, ObjectInsight, ObjectInsightFact, ObjectInsightLink, ObjectInsightsResponse, ConsoleSessionUserInfo, MeResponse, LoginBody, } from './types.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dashboard/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG9E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACvF,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGxF,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,SAAS,GACV,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Config idiom — author `config/media_dashboard.ts` against these.
|
|
2
|
+
export { defineConfig } from './define_config.js';
|
|
3
|
+
// Dashboard read/action logic (framework-free — the provider is a thin HTTP shell around this).
|
|
4
|
+
export { DashboardService, DashboardError } from './service.js';
|
|
5
|
+
// Built-in session-cookie login.
|
|
6
|
+
export { resolveConsoleAuth, signSessionCookie, verifySessionCookie } from './auth.js';
|
|
7
|
+
// Host-supplied object annotations.
|
|
8
|
+
export { sanitizeInsight } from './object_insights.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,gGAAgG;AAChG,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGhE,iCAAiC;AACjC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAYvF,oCAAoC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-supplied context about a disk object, shown in the console's preview.
|
|
3
|
+
*
|
|
4
|
+
* Ported from the NestJS sibling console's `server/object-insights.ts`. The console can describe a
|
|
5
|
+
* file only as storage sees it: key, size, content type, last modified. Everything that makes the
|
|
6
|
+
* file *mean* something lives in the host — which work order this scan belongs to, which knowledge
|
|
7
|
+
* base indexed it. This is the seam for handing that back: the host registers a provider (via
|
|
8
|
+
* `config/media_dashboard.ts`'s `objectInsights`), the console asks it when an object is previewed
|
|
9
|
+
* and renders whatever comes back.
|
|
10
|
+
*
|
|
11
|
+
* **Data, not components** — same reason as the NestJS side: the console ships as a prebuilt SPA
|
|
12
|
+
* bundle, so a host cannot inject React into it. A provider returns a small structured value the
|
|
13
|
+
* console knows how to render (facts, links, a note).
|
|
14
|
+
*/
|
|
15
|
+
import type { ObjectInsight, ObjectInsightsResponse } from './types.js';
|
|
16
|
+
export type { ObjectInsight, ObjectInsightFact, ObjectInsightLink, ObjectInsightsResponse, } from './types.js';
|
|
17
|
+
/** Which object is being described. */
|
|
18
|
+
export interface ObjectInsightContext {
|
|
19
|
+
disk: string;
|
|
20
|
+
key: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A source of {@link ObjectInsight}s, registered by the host in `config/media_dashboard.ts`.
|
|
24
|
+
*
|
|
25
|
+
* `resolve` runs on every preview of every object, so it must be cheap. Return `null` for an object
|
|
26
|
+
* this provider has nothing to say about, and the console renders nothing for it. A provider that
|
|
27
|
+
* throws is skipped (logged by the caller) — annotation must never be able to stop an admin opening
|
|
28
|
+
* a file.
|
|
29
|
+
*/
|
|
30
|
+
export interface ObjectInsightProvider {
|
|
31
|
+
/** Stable identifier, used in the log line when this provider fails. */
|
|
32
|
+
id: string;
|
|
33
|
+
resolve(ctx: ObjectInsightContext): Promise<ObjectInsight | null> | ObjectInsight | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Drop links the console must not render. A relative href (`/ctrl/...`) always addresses the host's
|
|
37
|
+
* own app and is kept; an absolute one is kept only if it is http(s) (refuses `javascript:`/`data:`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function sanitizeInsight(insight: ObjectInsight): ObjectInsight;
|
|
40
|
+
/** `{ insights: [] }` — what the console renders when no providers are registered. */
|
|
41
|
+
export declare function emptyInsights(): ObjectInsightsResponse;
|
|
42
|
+
//# sourceMappingURL=object_insights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object_insights.d.ts","sourceRoot":"","sources":["../../../src/dashboard/object_insights.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAExE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,uCAAuC;AACvC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC;CAC1F;AAKD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAcrE;AAED,sFAAsF;AACtF,wBAAgB,aAAa,IAAI,sBAAsB,CAEtD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-supplied context about a disk object, shown in the console's preview.
|
|
3
|
+
*
|
|
4
|
+
* Ported from the NestJS sibling console's `server/object-insights.ts`. The console can describe a
|
|
5
|
+
* file only as storage sees it: key, size, content type, last modified. Everything that makes the
|
|
6
|
+
* file *mean* something lives in the host — which work order this scan belongs to, which knowledge
|
|
7
|
+
* base indexed it. This is the seam for handing that back: the host registers a provider (via
|
|
8
|
+
* `config/media_dashboard.ts`'s `objectInsights`), the console asks it when an object is previewed
|
|
9
|
+
* and renders whatever comes back.
|
|
10
|
+
*
|
|
11
|
+
* **Data, not components** — same reason as the NestJS side: the console ships as a prebuilt SPA
|
|
12
|
+
* bundle, so a host cannot inject React into it. A provider returns a small structured value the
|
|
13
|
+
* console knows how to render (facts, links, a note).
|
|
14
|
+
*/
|
|
15
|
+
/** Schemes an {@link ObjectInsightLink} may point at. Anything else is dropped, not rendered. */
|
|
16
|
+
const SAFE_LINK_SCHEMES = new Set(['http:', 'https:']);
|
|
17
|
+
/**
|
|
18
|
+
* Drop links the console must not render. A relative href (`/ctrl/...`) always addresses the host's
|
|
19
|
+
* own app and is kept; an absolute one is kept only if it is http(s) (refuses `javascript:`/`data:`).
|
|
20
|
+
*/
|
|
21
|
+
export function sanitizeInsight(insight) {
|
|
22
|
+
if (insight.links === undefined)
|
|
23
|
+
return insight;
|
|
24
|
+
const links = insight.links.filter((link) => {
|
|
25
|
+
if (link.href.startsWith('/')) {
|
|
26
|
+
// `//evil.com` is protocol-relative — an absolute URL wearing a relative one's clothes.
|
|
27
|
+
return !link.href.startsWith('//');
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
return SAFE_LINK_SCHEMES.has(new URL(link.href).protocol);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return { ...insight, links };
|
|
37
|
+
}
|
|
38
|
+
/** `{ insights: [] }` — what the console renders when no providers are registered. */
|
|
39
|
+
export function emptyInsights() {
|
|
40
|
+
return { insights: [] };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=object_insights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object_insights.js","sourceRoot":"","sources":["../../../src/dashboard/object_insights.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+BH,iGAAiG;AACjG,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsB;IACpD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,wFAAwF;YACxF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC;YACH,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,aAAa;IAC3B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC1B,CAAC"}
|