@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.
Files changed (173) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +6 -0
  3. package/dist/react/components/batch-timeline.d.ts +1 -1
  4. package/dist/react/components/batch-timeline.d.ts.map +1 -1
  5. package/dist/react/components/cache-badge.d.ts +1 -1
  6. package/dist/react/components/cache-badge.d.ts.map +1 -1
  7. package/dist/react/components/charts/area-chart-card.d.ts +2 -2
  8. package/dist/react/components/charts/area-chart-card.d.ts.map +1 -1
  9. package/dist/react/components/charts/area-chart-card.js +1 -1
  10. package/dist/react/components/charts/bar-chart-card.d.ts +2 -2
  11. package/dist/react/components/charts/bar-chart-card.d.ts.map +1 -1
  12. package/dist/react/components/charts/bar-chart-card.js +1 -1
  13. package/dist/react/components/charts/breakdown-card.d.ts +1 -2
  14. package/dist/react/components/charts/breakdown-card.d.ts.map +1 -1
  15. package/dist/react/components/charts/chart-card.d.ts +2 -2
  16. package/dist/react/components/charts/chart-card.d.ts.map +1 -1
  17. package/dist/react/components/charts/chart-card.js +1 -1
  18. package/dist/react/components/charts/chart-card.js.map +1 -1
  19. package/dist/react/components/charts/chart-theme.d.ts +1 -1
  20. package/dist/react/components/charts/chart-theme.d.ts.map +1 -1
  21. package/dist/react/components/charts/chart-theme.js +1 -1
  22. package/dist/react/components/charts/chart-theme.js.map +1 -1
  23. package/dist/react/components/charts/distribution-chart-card.d.ts +1 -2
  24. package/dist/react/components/charts/distribution-chart-card.d.ts.map +1 -1
  25. package/dist/react/components/charts/distribution-chart-card.js +1 -1
  26. package/dist/react/components/charts/gauge-card.d.ts +1 -2
  27. package/dist/react/components/charts/gauge-card.d.ts.map +1 -1
  28. package/dist/react/components/charts/stacked-area-chart-card.d.ts +2 -2
  29. package/dist/react/components/charts/stacked-area-chart-card.d.ts.map +1 -1
  30. package/dist/react/components/charts/stacked-area-chart-card.js +1 -1
  31. package/dist/react/components/entries-table.d.ts +1 -1
  32. package/dist/react/components/entries-table.d.ts.map +1 -1
  33. package/dist/react/components/entries-table.js +3 -2
  34. package/dist/react/components/entries-table.js.map +1 -1
  35. package/dist/react/components/entry-detail.d.ts +1 -1
  36. package/dist/react/components/entry-detail.d.ts.map +1 -1
  37. package/dist/react/components/entry-detail.js +11 -11
  38. package/dist/react/components/entry-detail.js.map +1 -1
  39. package/dist/react/components/entry-insights.d.ts +1 -1
  40. package/dist/react/components/entry-insights.d.ts.map +1 -1
  41. package/dist/react/components/entry-insights.js +6 -6
  42. package/dist/react/components/entry-insights.js.map +1 -1
  43. package/dist/react/components/export-json-toolbar.d.ts +1 -1
  44. package/dist/react/components/export-json-toolbar.d.ts.map +1 -1
  45. package/dist/react/components/extensions/panel-actions.d.ts +3 -3
  46. package/dist/react/components/extensions/panel-actions.d.ts.map +1 -1
  47. package/dist/react/components/extensions/panel-column-menu.d.ts +1 -2
  48. package/dist/react/components/extensions/panel-column-menu.d.ts.map +1 -1
  49. package/dist/react/components/extensions/panel-renderer.d.ts +1 -2
  50. package/dist/react/components/extensions/panel-renderer.d.ts.map +1 -1
  51. package/dist/react/components/extensions/panel-renderer.js +3 -3
  52. package/dist/react/components/extensions/panel-renderer.js.map +1 -1
  53. package/dist/react/components/extensions/panel-table-header.d.ts +2 -3
  54. package/dist/react/components/extensions/panel-table-header.d.ts.map +1 -1
  55. package/dist/react/components/extensions/panel-table.d.ts +1 -2
  56. package/dist/react/components/extensions/panel-table.d.ts.map +1 -1
  57. package/dist/react/components/extensions/stat-card.d.ts +1 -2
  58. package/dist/react/components/extensions/stat-card.d.ts.map +1 -1
  59. package/dist/react/components/extensions/stat-card.js +2 -2
  60. package/dist/react/components/extensions/stat-card.js.map +1 -1
  61. package/dist/react/components/extensions/table-columns.js +1 -1
  62. package/dist/react/components/extensions/table-columns.js.map +1 -1
  63. package/dist/react/components/flamegraph-view.d.ts +1 -2
  64. package/dist/react/components/flamegraph-view.d.ts.map +1 -1
  65. package/dist/react/components/flamegraph-view.js +1 -1
  66. package/dist/react/components/flamegraph-view.js.map +1 -1
  67. package/dist/react/components/inertia-badge.d.ts +1 -1
  68. package/dist/react/components/inertia-badge.d.ts.map +1 -1
  69. package/dist/react/components/inertia-body.d.ts +1 -1
  70. package/dist/react/components/inertia-body.d.ts.map +1 -1
  71. package/dist/react/components/inertia-body.js +9 -9
  72. package/dist/react/components/inertia-body.js.map +1 -1
  73. package/dist/react/components/official-event.d.ts +1 -1
  74. package/dist/react/components/official-event.d.ts.map +1 -1
  75. package/dist/react/components/official-event.js +1 -1
  76. package/dist/react/components/official-event.js.map +1 -1
  77. package/dist/react/components/pulse-panel.d.ts +1 -1
  78. package/dist/react/components/pulse-panel.d.ts.map +1 -1
  79. package/dist/react/components/pulse-panel.js +2 -2
  80. package/dist/react/components/pulse-panel.js.map +1 -1
  81. package/dist/react/components/queue-sparkline.d.ts +2 -2
  82. package/dist/react/components/queue-sparkline.d.ts.map +1 -1
  83. package/dist/react/components/queue-sparkline.js +1 -1
  84. package/dist/react/components/queue-sparkline.js.map +1 -1
  85. package/dist/react/components/queues/EnqueueJobForm.d.ts +1 -1
  86. package/dist/react/components/queues/EnqueueJobForm.d.ts.map +1 -1
  87. package/dist/react/components/queues/EnqueueJobForm.js +1 -1
  88. package/dist/react/components/queues/EnqueueJobForm.js.map +1 -1
  89. package/dist/react/components/queues/JobActions.d.ts +3 -3
  90. package/dist/react/components/queues/JobActions.d.ts.map +1 -1
  91. package/dist/react/components/queues/JobDetailDrawer.d.ts +1 -1
  92. package/dist/react/components/queues/JobDetailDrawer.d.ts.map +1 -1
  93. package/dist/react/components/queues/JobDetailDrawer.js +4 -4
  94. package/dist/react/components/queues/JobDetailDrawer.js.map +1 -1
  95. package/dist/react/components/queues/JobTable.d.ts +1 -1
  96. package/dist/react/components/queues/JobTable.d.ts.map +1 -1
  97. package/dist/react/components/queues/QueueList.d.ts +1 -1
  98. package/dist/react/components/queues/QueueList.d.ts.map +1 -1
  99. package/dist/react/components/queues/QueueList.js +2 -2
  100. package/dist/react/components/queues/QueueList.js.map +1 -1
  101. package/dist/react/components/queues/QueueStateTabs.d.ts +1 -1
  102. package/dist/react/components/queues/QueueStateTabs.d.ts.map +1 -1
  103. package/dist/react/components/queues-panel.d.ts +1 -1
  104. package/dist/react/components/queues-panel.d.ts.map +1 -1
  105. package/dist/react/components/request-timeline.d.ts +1 -1
  106. package/dist/react/components/request-timeline.d.ts.map +1 -1
  107. package/dist/react/components/retention-indicator.d.ts +1 -1
  108. package/dist/react/components/retention-indicator.d.ts.map +1 -1
  109. package/dist/react/components/retention-indicator.js +1 -1
  110. package/dist/react/components/retention-indicator.js.map +1 -1
  111. package/dist/react/components/sparkline.d.ts +1 -1
  112. package/dist/react/components/sparkline.d.ts.map +1 -1
  113. package/dist/react/components/stacked-bars.d.ts +1 -1
  114. package/dist/react/components/stacked-bars.d.ts.map +1 -1
  115. package/dist/react/components/tag-autocomplete.d.ts +1 -1
  116. package/dist/react/components/tag-autocomplete.d.ts.map +1 -1
  117. package/dist/react/components/waterfall-view.d.ts +1 -1
  118. package/dist/react/components/waterfall-view.d.ts.map +1 -1
  119. package/dist/react/components/waterfall-view.js +1 -1
  120. package/dist/react/components/waterfall-view.js.map +1 -1
  121. package/dist/react/components/window-select.d.ts +1 -1
  122. package/dist/react/components/window-select.d.ts.map +1 -1
  123. package/dist/react/telescope-context.d.ts +1 -1
  124. package/dist/react/telescope-context.d.ts.map +1 -1
  125. package/dist/react/ui/badge.d.ts +1 -1
  126. package/dist/react/ui/badge.d.ts.map +1 -1
  127. package/dist/react/ui/chart.d.ts +5 -5
  128. package/dist/react/ui/chart.d.ts.map +1 -1
  129. package/dist/react/ui/chart.js +2 -2
  130. package/dist/react/ui/chart.js.map +1 -1
  131. package/dist/react/ui/select.d.ts.map +1 -1
  132. package/dist/react/ui/select.js +1 -1
  133. package/dist/react/ui/select.js.map +1 -1
  134. package/dist/react/ui/table.js +1 -1
  135. package/dist/react/ui/table.js.map +1 -1
  136. package/dist/server/console-registration.d.ts.map +1 -1
  137. package/dist/server/console-registration.js +4 -2
  138. package/dist/server/console-registration.js.map +1 -1
  139. package/dist/server/console-shell.d.ts +53 -0
  140. package/dist/server/console-shell.d.ts.map +1 -0
  141. package/dist/server/console-shell.js +130 -0
  142. package/dist/server/console-shell.js.map +1 -0
  143. package/dist/server/index.d.ts +1 -0
  144. package/dist/server/index.d.ts.map +1 -1
  145. package/dist/server/index.js +2 -0
  146. package/dist/server/index.js.map +1 -1
  147. package/dist/server/telescope-ui.controller.d.ts +2 -1
  148. package/dist/server/telescope-ui.controller.d.ts.map +1 -1
  149. package/dist/server/telescope-ui.controller.js +30 -11
  150. package/dist/server/telescope-ui.controller.js.map +1 -1
  151. package/dist/server/telescope-ui.options.d.ts +25 -0
  152. package/dist/server/telescope-ui.options.d.ts.map +1 -1
  153. package/dist/server/telescope-ui.options.js.map +1 -1
  154. package/dist/spa/assets/index-B5IIRiHt.js +228 -0
  155. package/dist/spa/assets/index-C2zgCbqj.css +1 -0
  156. package/dist/spa/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  157. package/dist/spa/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  158. package/dist/spa/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  159. package/dist/spa/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  160. package/dist/spa/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
  161. package/dist/spa/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
  162. package/dist/spa/assets/sora-latin-400-normal-CRt88UEn.woff2 +0 -0
  163. package/dist/spa/assets/sora-latin-400-normal-OW7qkl5a.woff +0 -0
  164. package/dist/spa/assets/sora-latin-500-normal-01eiPEn0.woff2 +0 -0
  165. package/dist/spa/assets/sora-latin-500-normal-w58xtEt9.woff +0 -0
  166. package/dist/spa/assets/sora-latin-600-normal-1_7fyUAY.woff +0 -0
  167. package/dist/spa/assets/sora-latin-600-normal-Cdg4DaK0.woff2 +0 -0
  168. package/dist/spa/assets/sora-latin-700-normal-9waGdLWo.woff2 +0 -0
  169. package/dist/spa/assets/sora-latin-700-normal-BKPfQAnC.woff +0 -0
  170. package/dist/spa/index.html +8 -2
  171. package/package.json +19 -13
  172. package/dist/spa/assets/index-BXt80gfq.js +0 -159
  173. 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":"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"}
@@ -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;AAGhG,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"}
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"}
@@ -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';
@@ -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":"AASA,OAAO,EAOL,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAwB,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAiChG,8CAA8C;AAC9C,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAgB1E,qBAEa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAEY,OAAO,EAAE,wBAAwB;IAY3E,KAAK,IAAI,MAAM;IAYf,KAAK,CAAgB,IAAI,EAAE,MAAM,GAAG,cAAc;CAcnD"}
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>${configBlock(path)}`;
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 switcher = consoleSwitcherConfig(TELESCOPE_CONSOLE_ID, `/${path}/api/consoles`);
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
- return rewriteAssetBase(readFileSync(indexPath, 'utf8'), this.path);
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", String)
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":"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"}
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;AAEpD,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;CACpC"}
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":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC"}
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"}