@dudousxd/nestjs-telescope-ui 4.1.0 → 4.3.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 +14 -0
- package/README.md +6 -0
- package/dist/react/components/batch-timeline.d.ts +1 -1
- package/dist/react/components/batch-timeline.d.ts.map +1 -1
- package/dist/react/components/cache-badge.d.ts +1 -1
- package/dist/react/components/cache-badge.d.ts.map +1 -1
- package/dist/react/components/charts/area-chart-card.d.ts +2 -2
- package/dist/react/components/charts/area-chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/area-chart-card.js +1 -1
- package/dist/react/components/charts/bar-chart-card.d.ts +2 -2
- package/dist/react/components/charts/bar-chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/bar-chart-card.js +1 -1
- package/dist/react/components/charts/breakdown-card.d.ts +1 -2
- package/dist/react/components/charts/breakdown-card.d.ts.map +1 -1
- package/dist/react/components/charts/chart-card.d.ts +2 -2
- package/dist/react/components/charts/chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/chart-card.js +1 -1
- package/dist/react/components/charts/chart-card.js.map +1 -1
- package/dist/react/components/charts/chart-theme.d.ts +1 -1
- package/dist/react/components/charts/chart-theme.d.ts.map +1 -1
- package/dist/react/components/charts/chart-theme.js +1 -1
- package/dist/react/components/charts/chart-theme.js.map +1 -1
- package/dist/react/components/charts/distribution-chart-card.d.ts +1 -2
- package/dist/react/components/charts/distribution-chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/distribution-chart-card.js +1 -1
- package/dist/react/components/charts/gauge-card.d.ts +1 -2
- package/dist/react/components/charts/gauge-card.d.ts.map +1 -1
- package/dist/react/components/charts/stacked-area-chart-card.d.ts +2 -2
- package/dist/react/components/charts/stacked-area-chart-card.d.ts.map +1 -1
- package/dist/react/components/charts/stacked-area-chart-card.js +1 -1
- package/dist/react/components/entries-table.d.ts +1 -1
- package/dist/react/components/entries-table.d.ts.map +1 -1
- package/dist/react/components/entries-table.js +3 -2
- package/dist/react/components/entries-table.js.map +1 -1
- package/dist/react/components/entry-detail.d.ts +1 -1
- package/dist/react/components/entry-detail.d.ts.map +1 -1
- package/dist/react/components/entry-detail.js +11 -11
- package/dist/react/components/entry-detail.js.map +1 -1
- package/dist/react/components/entry-insights.d.ts +1 -1
- package/dist/react/components/entry-insights.d.ts.map +1 -1
- package/dist/react/components/entry-insights.js +6 -6
- package/dist/react/components/entry-insights.js.map +1 -1
- package/dist/react/components/export-json-toolbar.d.ts +1 -1
- package/dist/react/components/export-json-toolbar.d.ts.map +1 -1
- package/dist/react/components/extensions/panel-actions.d.ts +3 -3
- package/dist/react/components/extensions/panel-actions.d.ts.map +1 -1
- package/dist/react/components/extensions/panel-column-menu.d.ts +1 -2
- package/dist/react/components/extensions/panel-column-menu.d.ts.map +1 -1
- package/dist/react/components/extensions/panel-renderer.d.ts +1 -2
- package/dist/react/components/extensions/panel-renderer.d.ts.map +1 -1
- package/dist/react/components/extensions/panel-renderer.js +3 -3
- package/dist/react/components/extensions/panel-renderer.js.map +1 -1
- package/dist/react/components/extensions/panel-table-header.d.ts +2 -3
- package/dist/react/components/extensions/panel-table-header.d.ts.map +1 -1
- package/dist/react/components/extensions/panel-table.d.ts +1 -2
- package/dist/react/components/extensions/panel-table.d.ts.map +1 -1
- package/dist/react/components/extensions/stat-card.d.ts +1 -2
- package/dist/react/components/extensions/stat-card.d.ts.map +1 -1
- package/dist/react/components/extensions/stat-card.js +2 -2
- package/dist/react/components/extensions/stat-card.js.map +1 -1
- package/dist/react/components/extensions/table-columns.js +1 -1
- package/dist/react/components/extensions/table-columns.js.map +1 -1
- package/dist/react/components/flamegraph-view.d.ts +1 -2
- package/dist/react/components/flamegraph-view.d.ts.map +1 -1
- package/dist/react/components/flamegraph-view.js +1 -1
- package/dist/react/components/flamegraph-view.js.map +1 -1
- package/dist/react/components/inertia-badge.d.ts +1 -1
- package/dist/react/components/inertia-badge.d.ts.map +1 -1
- package/dist/react/components/inertia-body.d.ts +1 -1
- package/dist/react/components/inertia-body.d.ts.map +1 -1
- package/dist/react/components/inertia-body.js +9 -9
- package/dist/react/components/inertia-body.js.map +1 -1
- package/dist/react/components/official-event.d.ts +1 -1
- package/dist/react/components/official-event.d.ts.map +1 -1
- package/dist/react/components/official-event.js +1 -1
- package/dist/react/components/official-event.js.map +1 -1
- package/dist/react/components/pulse-panel.d.ts +1 -1
- package/dist/react/components/pulse-panel.d.ts.map +1 -1
- package/dist/react/components/pulse-panel.js +2 -2
- package/dist/react/components/pulse-panel.js.map +1 -1
- package/dist/react/components/queue-sparkline.d.ts +2 -2
- package/dist/react/components/queue-sparkline.d.ts.map +1 -1
- package/dist/react/components/queue-sparkline.js +1 -1
- package/dist/react/components/queue-sparkline.js.map +1 -1
- package/dist/react/components/queues/EnqueueJobForm.d.ts +1 -1
- package/dist/react/components/queues/EnqueueJobForm.d.ts.map +1 -1
- package/dist/react/components/queues/EnqueueJobForm.js +1 -1
- package/dist/react/components/queues/EnqueueJobForm.js.map +1 -1
- package/dist/react/components/queues/JobActions.d.ts +3 -3
- package/dist/react/components/queues/JobActions.d.ts.map +1 -1
- package/dist/react/components/queues/JobDetailDrawer.d.ts +1 -1
- package/dist/react/components/queues/JobDetailDrawer.d.ts.map +1 -1
- package/dist/react/components/queues/JobDetailDrawer.js +4 -4
- package/dist/react/components/queues/JobDetailDrawer.js.map +1 -1
- package/dist/react/components/queues/JobTable.d.ts +1 -1
- package/dist/react/components/queues/JobTable.d.ts.map +1 -1
- package/dist/react/components/queues/QueueList.d.ts +1 -1
- package/dist/react/components/queues/QueueList.d.ts.map +1 -1
- package/dist/react/components/queues/QueueList.js +2 -2
- package/dist/react/components/queues/QueueList.js.map +1 -1
- package/dist/react/components/queues/QueueStateTabs.d.ts +1 -1
- package/dist/react/components/queues/QueueStateTabs.d.ts.map +1 -1
- package/dist/react/components/queues-panel.d.ts +1 -1
- package/dist/react/components/queues-panel.d.ts.map +1 -1
- package/dist/react/components/request-timeline.d.ts +1 -1
- package/dist/react/components/request-timeline.d.ts.map +1 -1
- package/dist/react/components/retention-indicator.d.ts +1 -1
- package/dist/react/components/retention-indicator.d.ts.map +1 -1
- package/dist/react/components/retention-indicator.js +1 -1
- package/dist/react/components/retention-indicator.js.map +1 -1
- package/dist/react/components/sparkline.d.ts +1 -1
- package/dist/react/components/sparkline.d.ts.map +1 -1
- package/dist/react/components/stacked-bars.d.ts +1 -1
- package/dist/react/components/stacked-bars.d.ts.map +1 -1
- package/dist/react/components/tag-autocomplete.d.ts +1 -1
- package/dist/react/components/tag-autocomplete.d.ts.map +1 -1
- package/dist/react/components/waterfall-view.d.ts +1 -1
- package/dist/react/components/waterfall-view.d.ts.map +1 -1
- package/dist/react/components/waterfall-view.js +1 -1
- package/dist/react/components/waterfall-view.js.map +1 -1
- package/dist/react/components/window-select.d.ts +1 -1
- package/dist/react/components/window-select.d.ts.map +1 -1
- package/dist/react/telescope-context.d.ts +1 -1
- package/dist/react/telescope-context.d.ts.map +1 -1
- package/dist/react/ui/badge.d.ts +1 -1
- package/dist/react/ui/badge.d.ts.map +1 -1
- package/dist/react/ui/chart.d.ts +5 -5
- package/dist/react/ui/chart.d.ts.map +1 -1
- package/dist/react/ui/chart.js +2 -2
- package/dist/react/ui/chart.js.map +1 -1
- package/dist/react/ui/select.d.ts.map +1 -1
- package/dist/react/ui/select.js +1 -1
- package/dist/react/ui/select.js.map +1 -1
- package/dist/react/ui/table.js +1 -1
- package/dist/react/ui/table.js.map +1 -1
- package/dist/server/console-registration.d.ts.map +1 -1
- package/dist/server/console-registration.js +4 -2
- package/dist/server/console-registration.js.map +1 -1
- package/dist/server/console-shell.d.ts +53 -0
- package/dist/server/console-shell.d.ts.map +1 -0
- package/dist/server/console-shell.js +130 -0
- package/dist/server/console-shell.js.map +1 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/telescope-ui.controller.d.ts +2 -1
- package/dist/server/telescope-ui.controller.d.ts.map +1 -1
- package/dist/server/telescope-ui.controller.js +30 -11
- package/dist/server/telescope-ui.controller.js.map +1 -1
- package/dist/server/telescope-ui.options.d.ts +25 -0
- package/dist/server/telescope-ui.options.d.ts.map +1 -1
- package/dist/server/telescope-ui.options.js.map +1 -1
- package/dist/spa/assets/index-B5IIRiHt.js +228 -0
- package/dist/spa/assets/index-C2zgCbqj.css +1 -0
- package/dist/spa/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/dist/spa/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/spa/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/dist/spa/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- package/dist/spa/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
- package/dist/spa/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
- package/dist/spa/assets/sora-latin-400-normal-CRt88UEn.woff2 +0 -0
- package/dist/spa/assets/sora-latin-400-normal-OW7qkl5a.woff +0 -0
- package/dist/spa/assets/sora-latin-500-normal-01eiPEn0.woff2 +0 -0
- package/dist/spa/assets/sora-latin-500-normal-w58xtEt9.woff +0 -0
- package/dist/spa/assets/sora-latin-600-normal-1_7fyUAY.woff +0 -0
- package/dist/spa/assets/sora-latin-600-normal-Cdg4DaK0.woff2 +0 -0
- package/dist/spa/assets/sora-latin-700-normal-9waGdLWo.woff2 +0 -0
- package/dist/spa/assets/sora-latin-700-normal-BKPfQAnC.woff +0 -0
- package/dist/spa/index.html +8 -2
- package/package.json +19 -13
- package/dist/spa/assets/index-BXt80gfq.js +0 -159
- package/dist/spa/assets/index-DdEYuSwo.css +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { isSameOriginPath } from '@dudousxd/nestjs-telescope';
|
|
2
|
+
/** A same-origin path with no backslash or control character (what the SPA will follow). */
|
|
3
|
+
function safePath(path) {
|
|
4
|
+
return (isSameOriginPath(path) &&
|
|
5
|
+
!path.includes('\\') &&
|
|
6
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: rejecting control characters is the point
|
|
7
|
+
!/[\u0000-\u001f\u007f]/.test(path));
|
|
8
|
+
}
|
|
9
|
+
function text(value) {
|
|
10
|
+
return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
|
|
11
|
+
}
|
|
12
|
+
/** Read a property without letting a throwing getter escape. */
|
|
13
|
+
function read(source, key) {
|
|
14
|
+
if (typeof source !== 'object' || source === null)
|
|
15
|
+
return undefined;
|
|
16
|
+
try {
|
|
17
|
+
return source[key];
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** A role's name: a string, or an object's `name` / `role`. */
|
|
24
|
+
function roleName(value) {
|
|
25
|
+
if (typeof value === 'string')
|
|
26
|
+
return text(value);
|
|
27
|
+
return text(read(value, 'name')) ?? text(read(value, 'role'));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A viewer from any user-ish object: `fullName` → `name` → `email` for the label, `email`, and the
|
|
31
|
+
* role from `role`, else the first of `roles` (strings or `{ name }`). `undefined` when nothing
|
|
32
|
+
* usable is there.
|
|
33
|
+
*/
|
|
34
|
+
export function viewerFromUser(user) {
|
|
35
|
+
if (typeof user !== 'object' || user === null)
|
|
36
|
+
return undefined;
|
|
37
|
+
const email = text(read(user, 'email'));
|
|
38
|
+
const label = text(read(user, 'fullName')) ?? text(read(user, 'name')) ?? email;
|
|
39
|
+
if (!label)
|
|
40
|
+
return undefined;
|
|
41
|
+
const roles = read(user, 'roles');
|
|
42
|
+
const role = roleName(read(user, 'role')) ?? (Array.isArray(roles) ? roleName(roles[0]) : undefined);
|
|
43
|
+
return { label, ...(email ? { email } : {}), ...(role ? { role } : {}) };
|
|
44
|
+
}
|
|
45
|
+
/** Keep only the fields the SPA renders, as trimmed non-empty strings. */
|
|
46
|
+
function cleanViewer(value) {
|
|
47
|
+
const label = text(read(value, 'label'));
|
|
48
|
+
if (!label)
|
|
49
|
+
return undefined;
|
|
50
|
+
const email = text(read(value, 'email'));
|
|
51
|
+
const role = text(read(value, 'role'));
|
|
52
|
+
return { label, ...(email ? { email } : {}), ...(role ? { role } : {}) };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The viewer for this request: the host's `viewer(request)` option when set (a throw or an empty
|
|
56
|
+
* answer means no user row), else a structural read of `request.user` — whatever the host's guards
|
|
57
|
+
* already put there. It never triggers an authentication.
|
|
58
|
+
*/
|
|
59
|
+
export async function resolveConsoleViewer(request, resolver) {
|
|
60
|
+
if (resolver) {
|
|
61
|
+
try {
|
|
62
|
+
return cleanViewer(await resolver(request));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return viewerFromUser(read(request, 'user'));
|
|
69
|
+
}
|
|
70
|
+
/** The sign-out an account console announced on the registry (`account.signOut`), read structurally. */
|
|
71
|
+
function announcedSignOut(registry) {
|
|
72
|
+
const signOut = read(read(registry, 'account'), 'signOut');
|
|
73
|
+
if (typeof signOut === 'string')
|
|
74
|
+
return signOut;
|
|
75
|
+
const action = read(signOut, 'action');
|
|
76
|
+
if (typeof action === 'string')
|
|
77
|
+
return { action };
|
|
78
|
+
const href = read(signOut, 'href');
|
|
79
|
+
if (typeof href === 'string')
|
|
80
|
+
return { href };
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
/** The request's CSRF token, when the host's middleware exposes one (`req.csrfToken()` or a string). */
|
|
84
|
+
function requestCsrfToken(request) {
|
|
85
|
+
const token = read(request, 'csrfToken');
|
|
86
|
+
if (typeof token === 'string')
|
|
87
|
+
return text(token);
|
|
88
|
+
if (typeof token === 'function') {
|
|
89
|
+
try {
|
|
90
|
+
return text(token.call(request));
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The sign-out the footer offers: the host's `signOut` option when set (`false` = none), else the
|
|
100
|
+
* one an account console announced on the Aviary consoles registry (`account.signOut`), else none.
|
|
101
|
+
* Only same-origin paths are emitted. A POST action carries a CSRF token when there is one: the
|
|
102
|
+
* option's `csrfToken(request)`, else the request's own (`req.csrfToken()`), read structurally.
|
|
103
|
+
*/
|
|
104
|
+
export function resolveConsoleSignOut(request, configured, registry) {
|
|
105
|
+
if (configured === false)
|
|
106
|
+
return undefined;
|
|
107
|
+
const option = configured ?? announcedSignOut(registry);
|
|
108
|
+
if (option === undefined || option === false)
|
|
109
|
+
return undefined;
|
|
110
|
+
if (typeof option === 'object' && 'href' in option) {
|
|
111
|
+
return safePath(option.href) ? { href: option.href } : undefined;
|
|
112
|
+
}
|
|
113
|
+
const action = typeof option === 'string' ? option : option.action;
|
|
114
|
+
if (!safePath(action))
|
|
115
|
+
return undefined;
|
|
116
|
+
let csrfToken;
|
|
117
|
+
if (typeof option === 'object' && typeof option.csrfToken === 'function') {
|
|
118
|
+
try {
|
|
119
|
+
csrfToken = text(option.csrfToken(request));
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
csrfToken = undefined;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
csrfToken = requestCsrfToken(request);
|
|
127
|
+
}
|
|
128
|
+
return { action, ...(csrfToken ? { csrfToken } : {}) };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=console-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-shell.js","sourceRoot":"","sources":["../../src/server/console-shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAyC9D,4FAA4F;AAC5F,SAAS,QAAQ,CAAC,IAAa;IAC7B,OAAO,CACL,gBAAgB,CAAC,IAAI,CAAC;QACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,qGAAqG;QACrG,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC;AAED,gEAAgE;AAChE,SAAS,IAAI,CAAC,MAAe,EAAE,GAAW;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACpE,IAAI,CAAC;QACH,OAAQ,MAAkC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC;IAChF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GACR,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1F,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAgB,EAChB,QAA2C;IAE3C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,wGAAwG;AACxG,SAAS,gBAAgB,CAAC,QAAiB;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,wGAAwG;AACxG,SAAS,gBAAgB,CAAC,OAAgB;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,IAAI,CAAE,KAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,UAA4C,EAC5C,QAAiB;IAEjB,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC/D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,SAA6B,CAAC;IAClC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACzE,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzD,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ export { TelescopeUiModule } from './telescope-ui.module.js';
|
|
|
2
2
|
export { TELESCOPE_DASHBOARD_CONFIG_ID, TelescopeUiController, } from './telescope-ui.controller.js';
|
|
3
3
|
export { TelescopeConsoleRegistration } from './console-registration.js';
|
|
4
4
|
export { TELESCOPE_UI_OPTIONS, type TelescopeUiModuleOptions } from './telescope-ui.options.js';
|
|
5
|
+
export * from './console-shell.js';
|
|
5
6
|
export { ConsoleAccessDenied, ConsoleAuthorizeFilter, ConsoleAuthorizeGuard, ConsolePage, UseConsoleAuthorize, anyAuthorize, authorizeByToken, normalizeConsoleResult, resolveConsoleAuthorize, type ConsoleAuthorize, type ConsoleAuthorizeResult, type ConsoleAuthorizer, type ConsoleAuthorizerClass, type ConsoleDecide, type ConsoleDecision, type ConsolePolicyCheck, type UseConsoleAuthorizeOptions, } from '@dudousxd/nestjs-telescope';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAEhG,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,GAChC,MAAM,4BAA4B,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -2,6 +2,8 @@ export { TelescopeUiModule } from './telescope-ui.module.js';
|
|
|
2
2
|
export { TELESCOPE_DASHBOARD_CONFIG_ID, TelescopeUiController, } from './telescope-ui.controller.js';
|
|
3
3
|
export { TelescopeConsoleRegistration } from './console-registration.js';
|
|
4
4
|
export { TELESCOPE_UI_OPTIONS } from './telescope-ui.options.js';
|
|
5
|
+
// The console shell's sidebar footer: who is signed in, and how to sign out.
|
|
6
|
+
export * from './console-shell.js';
|
|
5
7
|
// The console access contract, re-exported from core so the UI's `authorize`
|
|
6
8
|
// can be written from this entry point.
|
|
7
9
|
export { ConsoleAccessDenied, ConsoleAuthorizeFilter, ConsoleAuthorizeGuard, ConsolePage, UseConsoleAuthorize, anyAuthorize, authorizeByToken, normalizeConsoleResult, resolveConsoleAuthorize, } from '@dudousxd/nestjs-telescope';
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAiC,MAAM,2BAA2B,CAAC;AAChG,6EAA6E;AAC7E,wCAAwC;AACxC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,GASxB,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAiC,MAAM,2BAA2B,CAAC;AAChG,6EAA6E;AAC7E,cAAc,oBAAoB,CAAC;AACnC,6EAA6E;AAC7E,wCAAwC;AACxC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,GASxB,MAAM,4BAA4B,CAAC"}
|
|
@@ -3,10 +3,11 @@ import { type TelescopeUiModuleOptions } from './telescope-ui.options.js';
|
|
|
3
3
|
/** The id of the page's JSON config block. */
|
|
4
4
|
export declare const TELESCOPE_DASHBOARD_CONFIG_ID = "telescope-dashboard-config";
|
|
5
5
|
export declare class TelescopeUiController {
|
|
6
|
+
private readonly options;
|
|
6
7
|
private readonly assetsDir;
|
|
7
8
|
private readonly path;
|
|
8
9
|
constructor(options: TelescopeUiModuleOptions);
|
|
9
|
-
index(): string
|
|
10
|
+
index(request?: unknown): Promise<string>;
|
|
10
11
|
asset(file: string): StreamableFile;
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=telescope-ui.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope-ui.controller.d.ts","sourceRoot":"","sources":["../../src/server/telescope-ui.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telescope-ui.controller.d.ts","sourceRoot":"","sources":["../../src/server/telescope-ui.controller.ts"],"names":[],"mappings":"AAUA,OAAO,EAQL,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAwB,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAmChG,8CAA8C;AAC9C,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAgC1E,qBAEa,qBAAqB;IAIU,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHlE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAE6B,OAAO,EAAE,wBAAwB;IAYtF,KAAK,CAAQ,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAatD,KAAK,CAAgB,IAAI,EAAE,MAAM,GAAG,cAAc;CAcnD"}
|
|
@@ -13,8 +13,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
import { existsSync, readFileSync } from 'node:fs';
|
|
14
14
|
import { basename, extname, join, resolve, sep } from 'node:path';
|
|
15
15
|
import { fileURLToPath } from 'node:url';
|
|
16
|
-
import { ConsolePage, TELESCOPE_CONSOLE_ID, consoleSwitcherConfig, normalizeTelescopePath, } from '@dudousxd/nestjs-telescope';
|
|
17
|
-
import { Controller, Get, Header, Inject, NotFoundException, Param, StreamableFile, } from '@nestjs/common';
|
|
16
|
+
import { ConsolePage, TELESCOPE_CONSOLE_ID, consoleSwitcherConfig, normalizeTelescopePath, readAviaryConsoles, } from '@dudousxd/nestjs-telescope';
|
|
17
|
+
import { Controller, Get, Header, Inject, NotFoundException, Param, Req, StreamableFile, } from '@nestjs/common';
|
|
18
|
+
import { resolveConsoleSignOut, resolveConsoleViewer } from './console-shell.js';
|
|
18
19
|
import { TELESCOPE_UI_OPTIONS } from './telescope-ui.options.js';
|
|
19
20
|
/** dist/server/telescope-ui.controller.js -> ../spa */
|
|
20
21
|
function defaultAssetsDir() {
|
|
@@ -27,6 +28,8 @@ const CONTENT_TYPES = {
|
|
|
27
28
|
'.svg': 'image/svg+xml',
|
|
28
29
|
'.json': 'application/json; charset=utf-8',
|
|
29
30
|
'.ico': 'image/x-icon',
|
|
31
|
+
'.woff2': 'font/woff2',
|
|
32
|
+
'.woff': 'font/woff',
|
|
30
33
|
};
|
|
31
34
|
/**
|
|
32
35
|
* The SPA is built once with a fixed Vite `base` of `/telescope/`, so every
|
|
@@ -35,8 +38,8 @@ const CONTENT_TYPES = {
|
|
|
35
38
|
* time instead of rebuilding the bundle per-path. When the path is the default
|
|
36
39
|
* `'telescope'` the source and target strings are identical, so this is a no-op.
|
|
37
40
|
*/
|
|
38
|
-
function rewriteAssetBase(html, path) {
|
|
39
|
-
const injectedBase = `<script>window.__TELESCOPE_BASE__ = ${JSON.stringify(`/${path}`)};</script>${
|
|
41
|
+
function rewriteAssetBase(html, path, config) {
|
|
42
|
+
const injectedBase = `<script>window.__TELESCOPE_BASE__ = ${JSON.stringify(`/${path}`)};</script>${config}`;
|
|
40
43
|
const rebased = html.split('/telescope/').join(`/${path}/`);
|
|
41
44
|
// Expose the runtime base before the bundle so the client can derive API URLs.
|
|
42
45
|
if (rebased.includes('</head>')) {
|
|
@@ -48,21 +51,35 @@ function rewriteAssetBase(html, path) {
|
|
|
48
51
|
export const TELESCOPE_DASHBOARD_CONFIG_ID = 'telescope-dashboard-config';
|
|
49
52
|
/**
|
|
50
53
|
* The page's JSON config block (`telescope-dashboard-config`, CSP-safe: data, not script). It
|
|
51
|
-
* carries `switcher` only when another Aviary console is registered
|
|
54
|
+
* carries `switcher` only when another Aviary console is registered; `search` (⌘K, answering per
|
|
55
|
+
* console too) whenever this console is in the registry; `viewer` and `signOut` for the sidebar
|
|
56
|
+
* footer when they resolve (see `TelescopeUiModuleOptions.viewer` / `signOut`).
|
|
52
57
|
*/
|
|
53
|
-
function configBlock(path) {
|
|
54
|
-
const
|
|
58
|
+
async function configBlock(path, request, options) {
|
|
59
|
+
const api = `/${path}/api`;
|
|
60
|
+
const switcher = consoleSwitcherConfig(TELESCOPE_CONSOLE_ID, `${api}/consoles`);
|
|
61
|
+
const registry = readAviaryConsoles();
|
|
62
|
+
const registered = registry?.entries.some((entry) => entry.id === TELESCOPE_CONSOLE_ID);
|
|
63
|
+
const viewer = await resolveConsoleViewer(request, options.viewer);
|
|
64
|
+
const signOut = resolveConsoleSignOut(request, options.signOut, registry);
|
|
55
65
|
const json = JSON.stringify({
|
|
56
66
|
base: `/${path}`,
|
|
57
67
|
...(switcher !== undefined ? { switcher } : {}),
|
|
68
|
+
...(registered
|
|
69
|
+
? { search: { endpoint: `${api}/consoles/search`, self: TELESCOPE_CONSOLE_ID } }
|
|
70
|
+
: {}),
|
|
71
|
+
...(viewer ? { viewer } : {}),
|
|
72
|
+
...(signOut ? { signOut } : {}),
|
|
58
73
|
}).replaceAll('<', '\\u003c');
|
|
59
74
|
return `<script type="application/json" id="${TELESCOPE_DASHBOARD_CONFIG_ID}">${json}</script>`;
|
|
60
75
|
}
|
|
61
76
|
// A denied browser navigation gets a page (or a redirect), not JSON.
|
|
62
77
|
let TelescopeUiController = class TelescopeUiController {
|
|
78
|
+
options;
|
|
63
79
|
assetsDir;
|
|
64
80
|
path;
|
|
65
81
|
constructor(options) {
|
|
82
|
+
this.options = options;
|
|
66
83
|
this.assetsDir = options.assetsDir ?? defaultAssetsDir();
|
|
67
84
|
this.path = normalizeTelescopePath(options.path);
|
|
68
85
|
}
|
|
@@ -70,12 +87,13 @@ let TelescopeUiController = class TelescopeUiController {
|
|
|
70
87
|
// browser keeps loading a stale bundle across deploys (the classic "one widget
|
|
71
88
|
// stuck loading / old labels after an upgrade"). The hashed assets below are
|
|
72
89
|
// immutable and cached forever instead.
|
|
73
|
-
index() {
|
|
90
|
+
async index(request) {
|
|
74
91
|
const indexPath = join(this.assetsDir, 'index.html');
|
|
75
92
|
if (!existsSync(indexPath)) {
|
|
76
93
|
throw new NotFoundException('Telescope UI is not built. Run the package build.');
|
|
77
94
|
}
|
|
78
|
-
|
|
95
|
+
const config = await configBlock(this.path, request, this.options);
|
|
96
|
+
return rewriteAssetBase(readFileSync(indexPath, 'utf8'), this.path, config);
|
|
79
97
|
}
|
|
80
98
|
// Asset filenames are content-hashed by the build, so they're safe to cache
|
|
81
99
|
// forever — a new bundle gets a new filename referenced by the (uncached) index.
|
|
@@ -99,9 +117,10 @@ __decorate([
|
|
|
99
117
|
Get(),
|
|
100
118
|
Header('Content-Type', 'text/html; charset=utf-8'),
|
|
101
119
|
Header('Cache-Control', 'no-store, must-revalidate'),
|
|
120
|
+
__param(0, Req()),
|
|
102
121
|
__metadata("design:type", Function),
|
|
103
|
-
__metadata("design:paramtypes", []),
|
|
104
|
-
__metadata("design:returntype",
|
|
122
|
+
__metadata("design:paramtypes", [Object]),
|
|
123
|
+
__metadata("design:returntype", Promise)
|
|
105
124
|
], TelescopeUiController.prototype, "index", null);
|
|
106
125
|
__decorate([
|
|
107
126
|
Get('assets/:file'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope-ui.controller.js","sourceRoot":"","sources":["../../src/server/telescope-ui.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"telescope-ui.controller.js","sourceRoot":"","sources":["../../src/server/telescope-ui.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ConsoleAuthorize } from '@dudousxd/nestjs-telescope';
|
|
2
2
|
import type { DynamicModule } from '@nestjs/common';
|
|
3
|
+
import type { ConsoleSignOutOption, ConsoleViewerResolver } from './console-shell.js';
|
|
3
4
|
export declare const TELESCOPE_UI_OPTIONS: unique symbol;
|
|
4
5
|
export interface TelescopeUiModuleOptions {
|
|
5
6
|
/** Directory of the built SPA (index.html + assets/). Defaults to the bundled dist/spa. */
|
|
@@ -71,5 +72,29 @@ export interface TelescopeUiModuleOptions {
|
|
|
71
72
|
* DI resolution path for whatever the {@link decorators} need.
|
|
72
73
|
*/
|
|
73
74
|
imports?: DynamicModule['imports'];
|
|
75
|
+
/**
|
|
76
|
+
* Who the console's sidebar footer says is signed in: `(request) => ({ label, email?, role? })`,
|
|
77
|
+
* sync or async. `null`/`undefined` or a throw shows no user row.
|
|
78
|
+
*
|
|
79
|
+
* Omitted: `request.user` is read structurally — whatever your guards ({@link decorators})
|
|
80
|
+
* already put there: `fullName` → `name` → `email` for the label, and `role` or the first of
|
|
81
|
+
* `roles` (a string or `{ name }`). Reading it never triggers an authentication. With
|
|
82
|
+
* `forRootAsync` it can come from the factory.
|
|
83
|
+
*/
|
|
84
|
+
viewer?: ConsoleViewerResolver;
|
|
85
|
+
/**
|
|
86
|
+
* The sidebar footer's sign-out. One of:
|
|
87
|
+
*
|
|
88
|
+
* - `'/logout'`: a POST form to that path (with `_csrf` when the request exposes
|
|
89
|
+
* `req.csrfToken()`);
|
|
90
|
+
* - `{ href: '/logout' }`: a plain link;
|
|
91
|
+
* - `{ action: '/logout', csrfToken: (request) => token }`: a POST form with your token as `_csrf`;
|
|
92
|
+
* - `false`: none, even when an account console announced one.
|
|
93
|
+
*
|
|
94
|
+
* Omitted: the sign-out an account console announced on the Aviary consoles registry
|
|
95
|
+
* (`account.signOut`), else none. Only same-origin paths (`/x`) are ever sent to the page. With
|
|
96
|
+
* `forRootAsync` it can come from the factory.
|
|
97
|
+
*/
|
|
98
|
+
signOut?: ConsoleSignOutOption;
|
|
74
99
|
}
|
|
75
100
|
//# sourceMappingURL=telescope-ui.options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope-ui.options.d.ts","sourceRoot":"","sources":["../../src/server/telescope-ui.options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"telescope-ui.options.d.ts","sourceRoot":"","sources":["../../src/server/telescope-ui.options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,eAAO,MAAM,oBAAoB,eAAiC,CAAC;AAEnE,MAAM,WAAW,wBAAwB;IACvC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope-ui.options.js","sourceRoot":"","sources":["../../src/server/telescope-ui.options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telescope-ui.options.js","sourceRoot":"","sources":["../../src/server/telescope-ui.options.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC"}
|