@rudderjs/telescope 0.0.1 → 0.0.2
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/README.md +101 -27
- package/dist/api/routes.d.ts +10 -6
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +42 -54
- package/dist/api/routes.js.map +1 -1
- package/dist/batch-context.d.ts +19 -0
- package/dist/batch-context.d.ts.map +1 -0
- package/dist/batch-context.js +24 -0
- package/dist/batch-context.js.map +1 -0
- package/dist/collectors/ai.d.ts +13 -0
- package/dist/collectors/ai.d.ts.map +1 -0
- package/dist/collectors/ai.js +61 -0
- package/dist/collectors/ai.js.map +1 -0
- package/dist/collectors/broadcast.d.ts +10 -0
- package/dist/collectors/broadcast.d.ts.map +1 -0
- package/dist/collectors/broadcast.js +46 -0
- package/dist/collectors/broadcast.js.map +1 -0
- package/dist/collectors/cache.d.ts.map +1 -1
- package/dist/collectors/cache.js +5 -4
- package/dist/collectors/cache.js.map +1 -1
- package/dist/collectors/command.d.ts +21 -0
- package/dist/collectors/command.d.ts.map +1 -0
- package/dist/collectors/command.js +55 -0
- package/dist/collectors/command.js.map +1 -0
- package/dist/collectors/dump.d.ts +17 -0
- package/dist/collectors/dump.d.ts.map +1 -0
- package/dist/collectors/dump.js +37 -0
- package/dist/collectors/dump.js.map +1 -0
- package/dist/collectors/event.d.ts.map +1 -1
- package/dist/collectors/event.js +2 -1
- package/dist/collectors/event.js.map +1 -1
- package/dist/collectors/exception.d.ts +1 -0
- package/dist/collectors/exception.d.ts.map +1 -1
- package/dist/collectors/exception.js +23 -4
- package/dist/collectors/exception.js.map +1 -1
- package/dist/collectors/gate.d.ts +18 -0
- package/dist/collectors/gate.d.ts.map +1 -0
- package/dist/collectors/gate.js +49 -0
- package/dist/collectors/gate.js.map +1 -0
- package/dist/collectors/http.d.ts +21 -0
- package/dist/collectors/http.d.ts.map +1 -0
- package/dist/collectors/http.js +64 -0
- package/dist/collectors/http.js.map +1 -0
- package/dist/collectors/job.d.ts.map +1 -1
- package/dist/collectors/job.js +3 -2
- package/dist/collectors/job.js.map +1 -1
- package/dist/collectors/live.d.ts +13 -0
- package/dist/collectors/live.d.ts.map +1 -0
- package/dist/collectors/live.js +60 -0
- package/dist/collectors/live.js.map +1 -0
- package/dist/collectors/log.d.ts.map +1 -1
- package/dist/collectors/log.js +2 -1
- package/dist/collectors/log.js.map +1 -1
- package/dist/collectors/mail.d.ts.map +1 -1
- package/dist/collectors/mail.js +2 -1
- package/dist/collectors/mail.js.map +1 -1
- package/dist/collectors/mcp.d.ts +14 -0
- package/dist/collectors/mcp.d.ts.map +1 -0
- package/dist/collectors/mcp.js +49 -0
- package/dist/collectors/mcp.js.map +1 -0
- package/dist/collectors/model.d.ts +6 -0
- package/dist/collectors/model.d.ts.map +1 -1
- package/dist/collectors/model.js +44 -1
- package/dist/collectors/model.js.map +1 -1
- package/dist/collectors/notification.d.ts.map +1 -1
- package/dist/collectors/notification.js +2 -1
- package/dist/collectors/notification.js.map +1 -1
- package/dist/collectors/query.d.ts.map +1 -1
- package/dist/collectors/query.js +5 -3
- package/dist/collectors/query.js.map +1 -1
- package/dist/collectors/request.d.ts +2 -1
- package/dist/collectors/request.d.ts.map +1 -1
- package/dist/collectors/request.js +78 -4
- package/dist/collectors/request.js.map +1 -1
- package/dist/index.d.ts +17 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +152 -95
- package/dist/index.js.map +1 -1
- package/dist/redact.d.ts +25 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +55 -0
- package/dist/redact.js.map +1 -0
- package/dist/routes.d.ts +22 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +105 -0
- package/dist/routes.js.map +1 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +13 -0
- package/dist/storage.js.map +1 -1
- package/dist/types.d.ts +32 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -1
- package/dist/views/vanilla/Dashboard.d.ts +10 -0
- package/dist/views/vanilla/Dashboard.d.ts.map +1 -0
- package/dist/views/vanilla/Dashboard.js +48 -0
- package/dist/views/vanilla/Dashboard.js.map +1 -0
- package/dist/views/vanilla/EntryList.d.ts +29 -0
- package/dist/views/vanilla/EntryList.d.ts.map +1 -0
- package/dist/views/vanilla/EntryList.js +172 -0
- package/dist/views/vanilla/EntryList.js.map +1 -0
- package/dist/views/vanilla/Layout.d.ts +25 -0
- package/dist/views/vanilla/Layout.d.ts.map +1 -0
- package/dist/views/vanilla/Layout.js +225 -0
- package/dist/views/vanilla/Layout.js.map +1 -0
- package/dist/views/vanilla/_html.d.ts +27 -0
- package/dist/views/vanilla/_html.d.ts.map +1 -0
- package/dist/views/vanilla/_html.js +55 -0
- package/dist/views/vanilla/_html.js.map +1 -0
- package/dist/views/vanilla/columns.d.ts +20 -0
- package/dist/views/vanilla/columns.d.ts.map +1 -0
- package/dist/views/vanilla/columns.js +181 -0
- package/dist/views/vanilla/columns.js.map +1 -0
- package/dist/views/vanilla/details/Batch.d.ts +14 -0
- package/dist/views/vanilla/details/Batch.d.ts.map +1 -0
- package/dist/views/vanilla/details/Batch.js +120 -0
- package/dist/views/vanilla/details/Batch.js.map +1 -0
- package/dist/views/vanilla/details/Layout.d.ts +21 -0
- package/dist/views/vanilla/details/Layout.d.ts.map +1 -0
- package/dist/views/vanilla/details/Layout.js +163 -0
- package/dist/views/vanilla/details/Layout.js.map +1 -0
- package/dist/views/vanilla/details/NotFound.d.ts +8 -0
- package/dist/views/vanilla/details/NotFound.d.ts.map +1 -0
- package/dist/views/vanilla/details/NotFound.js +20 -0
- package/dist/views/vanilla/details/NotFound.js.map +1 -0
- package/dist/views/vanilla/details/index.d.ts +5 -0
- package/dist/views/vanilla/details/index.d.ts.map +1 -0
- package/dist/views/vanilla/details/index.js +5 -0
- package/dist/views/vanilla/details/index.js.map +1 -0
- package/dist/views/vanilla/details/sections.d.ts +46 -0
- package/dist/views/vanilla/details/sections.d.ts.map +1 -0
- package/dist/views/vanilla/details/sections.js +145 -0
- package/dist/views/vanilla/details/sections.js.map +1 -0
- package/dist/views/vanilla/details/views.d.ts +15 -0
- package/dist/views/vanilla/details/views.d.ts.map +1 -0
- package/dist/views/vanilla/details/views.js +534 -0
- package/dist/views/vanilla/details/views.js.map +1 -0
- package/dist/views/vanilla/index.d.ts +5 -0
- package/dist/views/vanilla/index.d.ts.map +1 -0
- package/dist/views/vanilla/index.js +5 -0
- package/dist/views/vanilla/index.js.map +1 -0
- package/package.json +53 -13
- package/dist/ui/layout.d.ts +0 -11
- package/dist/ui/layout.d.ts.map +0 -1
- package/dist/ui/layout.js +0 -69
- package/dist/ui/layout.js.map +0 -1
- package/dist/ui/pages.d.ts +0 -21
- package/dist/ui/pages.d.ts.map +0 -1
- package/dist/ui/pages.js +0 -225
- package/dist/ui/pages.js.map +0 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTML chrome for Telescope dashboard pages.
|
|
3
|
+
*
|
|
4
|
+
* Vanilla mode (raw template literals + Alpine.js + Tailwind via CDN). No
|
|
5
|
+
* client framework dependency, no build step. The package's UI is fully
|
|
6
|
+
* self-contained so telescope can debug a host app of any framework.
|
|
7
|
+
*
|
|
8
|
+
* SPA navigation: the `telescopeSpa()` Alpine component intercepts internal
|
|
9
|
+
* link clicks, fetches the target page via `fetch()`, swaps the `<main>`
|
|
10
|
+
* content, and pushes to `history.pushState()`. The sidebar never reloads.
|
|
11
|
+
* Back/forward buttons work via `popstate`. External links fall through.
|
|
12
|
+
*/
|
|
13
|
+
export function Layout(props) {
|
|
14
|
+
const { title, body, basePath, activePath } = props;
|
|
15
|
+
const nav = [
|
|
16
|
+
{ label: 'Dashboard', path: '', icon: 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6' },
|
|
17
|
+
{ label: 'Requests', path: '/requests', icon: 'M13 10V3L4 14h7v7l9-11h-7z' },
|
|
18
|
+
{ label: 'Queries', path: '/queries', icon: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4' },
|
|
19
|
+
{ label: 'Jobs', path: '/jobs', icon: 'M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10' },
|
|
20
|
+
{ label: 'Exceptions', path: '/exceptions', icon: 'M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z' },
|
|
21
|
+
{ label: 'Logs', path: '/logs', icon: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z' },
|
|
22
|
+
{ label: 'Mail', path: '/mail', icon: 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' },
|
|
23
|
+
{ label: 'Notifications', path: '/notifications', icon: 'M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9' },
|
|
24
|
+
{ label: 'Events', path: '/events', icon: 'M13 10V3L4 14h7v7l9-11h-7z' },
|
|
25
|
+
{ label: 'Cache', path: '/cache', icon: 'M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4' },
|
|
26
|
+
{ label: 'Schedule', path: '/schedule', icon: 'M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z' },
|
|
27
|
+
{ label: 'Models', path: '/models', icon: 'M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10' },
|
|
28
|
+
{ label: 'Commands', path: '/commands', icon: 'M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z' },
|
|
29
|
+
{ label: 'HTTP Client', path: '/http', icon: 'M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9' },
|
|
30
|
+
{ label: 'Gates', path: '/gates', icon: 'M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z' },
|
|
31
|
+
{ label: 'Dumps', path: '/dumps', icon: 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4' },
|
|
32
|
+
{ label: 'WebSockets', path: '/broadcasts', icon: 'M5.636 18.364a9 9 0 010-12.728m12.728 0a9 9 0 010 12.728m-9.9-2.829a5 5 0 010-7.07m7.072 0a5 5 0 010 7.07M13 12a1 1 0 11-2 0 1 1 0 012 0z' },
|
|
33
|
+
{ label: 'AI', path: '/ai', icon: 'M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z' },
|
|
34
|
+
{ label: 'MCP', path: '/mcp', icon: 'M13 10V3L4 14h7v7l9-11h-7z' },
|
|
35
|
+
{ label: 'Live (Yjs)', path: '/live', icon: 'M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z' },
|
|
36
|
+
];
|
|
37
|
+
// Build nav with Alpine-driven active state
|
|
38
|
+
const navHtml = nav.map(n => {
|
|
39
|
+
const href = `${basePath}${n.path}`;
|
|
40
|
+
const pathExpr = n.path === '' ? `'/'` : `'${n.path}'`;
|
|
41
|
+
return `<a href="${href}" @click.prevent="navigate('${href}')"
|
|
42
|
+
class="flex items-center gap-3 px-3 py-2 text-sm rounded-lg transition"
|
|
43
|
+
:class="currentPath === ${pathExpr} ? 'bg-indigo-50 text-indigo-700 font-medium dark:bg-indigo-950 dark:text-indigo-300' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200'">
|
|
44
|
+
<svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="${n.icon}"/></svg>
|
|
45
|
+
${n.label}
|
|
46
|
+
</a>`;
|
|
47
|
+
}).join('\n ');
|
|
48
|
+
return `<!DOCTYPE html>
|
|
49
|
+
<html lang="en">
|
|
50
|
+
<head>
|
|
51
|
+
<meta charset="UTF-8">
|
|
52
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
53
|
+
<title>${title} — Telescope</title>
|
|
54
|
+
<script>tailwindcss = { config: { darkMode: 'class' } }</script>
|
|
55
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
56
|
+
<script>
|
|
57
|
+
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
58
|
+
document.documentElement.classList.add('dark')
|
|
59
|
+
}
|
|
60
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
|
|
61
|
+
document.documentElement.classList.toggle('dark', e.matches)
|
|
62
|
+
})
|
|
63
|
+
</script>
|
|
64
|
+
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
|
65
|
+
<style>
|
|
66
|
+
[x-cloak] { display: none !important; }
|
|
67
|
+
.badge { @apply inline-flex items-center px-2 py-0.5 rounded text-xs font-medium; }
|
|
68
|
+
</style>
|
|
69
|
+
</head>
|
|
70
|
+
<body class="bg-gray-50 dark:bg-gray-950 text-gray-900 dark:text-gray-100 font-sans antialiased">
|
|
71
|
+
<div x-data="telescopeSpa()" @popstate.window="onPopState()" class="flex min-h-screen">
|
|
72
|
+
<!-- Sidebar -->
|
|
73
|
+
<aside class="w-56 bg-white dark:bg-gray-900 border-r border-gray-200 dark:border-gray-800 flex flex-col">
|
|
74
|
+
<div class="px-4 py-5 flex items-center gap-2 border-b border-gray-100 dark:border-gray-800">
|
|
75
|
+
<a href="${basePath}" @click.prevent="navigate('${basePath}')" class="flex items-center gap-2">
|
|
76
|
+
<div class="w-7 h-7 bg-violet-600 rounded-lg flex items-center justify-center">
|
|
77
|
+
<svg class="w-4 h-4 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
78
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
|
|
79
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"/>
|
|
80
|
+
</svg>
|
|
81
|
+
</div>
|
|
82
|
+
<span class="font-semibold text-sm">Telescope</span>
|
|
83
|
+
</a>
|
|
84
|
+
</div>
|
|
85
|
+
<nav class="flex-1 px-3 py-4 space-y-0.5 overflow-y-auto">
|
|
86
|
+
${navHtml}
|
|
87
|
+
</nav>
|
|
88
|
+
</aside>
|
|
89
|
+
|
|
90
|
+
<!-- Main content -->
|
|
91
|
+
<main id="telescope-main" class="flex-1 overflow-auto" @telescope:navigate.window="navigate($event.detail)">
|
|
92
|
+
<!-- Toolbar -->
|
|
93
|
+
<div class="border-b border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 px-6 py-2 flex items-center justify-end gap-2"
|
|
94
|
+
x-data="telescopeToolbar('${basePath}/api')">
|
|
95
|
+
<button @click="toggleRecording()" class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-lg transition"
|
|
96
|
+
:class="recording ? 'bg-green-50 text-green-700 hover:bg-green-100' : 'bg-red-50 text-red-700 hover:bg-red-100'">
|
|
97
|
+
<span class="w-2 h-2 rounded-full" :class="recording ? 'bg-green-500' : 'bg-red-500'"></span>
|
|
98
|
+
<span x-text="recording ? 'Recording' : 'Paused'"></span>
|
|
99
|
+
</button>
|
|
100
|
+
<button @click="clearAll()" class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-lg bg-gray-50 dark:bg-gray-800 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 transition">
|
|
101
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/></svg>
|
|
102
|
+
Clear
|
|
103
|
+
</button>
|
|
104
|
+
<button @click="refresh()" class="inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-lg bg-gray-50 dark:bg-gray-800 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 transition">
|
|
105
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/></svg>
|
|
106
|
+
Refresh
|
|
107
|
+
</button>
|
|
108
|
+
</div>
|
|
109
|
+
<div class="max-w-6xl mx-auto px-6 py-8">
|
|
110
|
+
${body}
|
|
111
|
+
</div>
|
|
112
|
+
</main>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<script>
|
|
116
|
+
function telescopeToolbar(apiPrefix) {
|
|
117
|
+
return {
|
|
118
|
+
recording: true,
|
|
119
|
+
async init() {
|
|
120
|
+
const data = await fetch(apiPrefix + '/recording').then(r => r.json())
|
|
121
|
+
this.recording = data.recording
|
|
122
|
+
},
|
|
123
|
+
async toggleRecording() {
|
|
124
|
+
const data = await fetch(apiPrefix + '/recording', { method: 'PATCH' }).then(r => r.json())
|
|
125
|
+
this.recording = data.recording
|
|
126
|
+
},
|
|
127
|
+
async clearAll() {
|
|
128
|
+
if (!confirm('Clear all telescope entries?')) return
|
|
129
|
+
await fetch(apiPrefix + '/entries', { method: 'DELETE' })
|
|
130
|
+
this.$dispatch('telescope:navigate', location.href)
|
|
131
|
+
},
|
|
132
|
+
refresh() {
|
|
133
|
+
this.$dispatch('telescope:navigate', location.href)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function telescopeSpa() {
|
|
139
|
+
const basePath = '${basePath}'
|
|
140
|
+
return {
|
|
141
|
+
currentPath: '${activePath}',
|
|
142
|
+
|
|
143
|
+
async navigate(href) {
|
|
144
|
+
// Stop any running auto-refresh timers from the previous page
|
|
145
|
+
this.stopPageTimers()
|
|
146
|
+
|
|
147
|
+
try {
|
|
148
|
+
const res = await fetch(href)
|
|
149
|
+
if (!res.ok) { window.location.href = href; return }
|
|
150
|
+
const text = await res.text()
|
|
151
|
+
const doc = new DOMParser().parseFromString(text, 'text/html')
|
|
152
|
+
const newMain = doc.getElementById('telescope-main')
|
|
153
|
+
if (!newMain) { window.location.href = href; return }
|
|
154
|
+
|
|
155
|
+
const mainEl = document.getElementById('telescope-main')
|
|
156
|
+
|
|
157
|
+
// Tear down old Alpine trees before replacing content
|
|
158
|
+
Alpine.mutateDom(() => {
|
|
159
|
+
mainEl.innerHTML = newMain.innerHTML
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
// Execute <script> tags from the swapped content — innerHTML
|
|
163
|
+
// doesn't execute scripts, so we need to manually create and
|
|
164
|
+
// append new <script> elements.
|
|
165
|
+
mainEl.querySelectorAll('script').forEach(oldScript => {
|
|
166
|
+
const newScript = document.createElement('script')
|
|
167
|
+
newScript.textContent = oldScript.textContent
|
|
168
|
+
oldScript.replaceWith(newScript)
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
// Now initialize Alpine on the new DOM
|
|
172
|
+
Alpine.initTree(mainEl)
|
|
173
|
+
|
|
174
|
+
// Update active path (strip basePath prefix for sidebar matching)
|
|
175
|
+
const url = new URL(href, location.origin)
|
|
176
|
+
const relative = url.pathname.replace(basePath, '') || '/'
|
|
177
|
+
this.currentPath = relative
|
|
178
|
+
|
|
179
|
+
// Update browser URL and title
|
|
180
|
+
const newTitle = doc.querySelector('title')
|
|
181
|
+
if (newTitle) document.title = newTitle.textContent
|
|
182
|
+
// Don't push if this was triggered by back/forward
|
|
183
|
+
if (this._isPopState) {
|
|
184
|
+
this._isPopState = false
|
|
185
|
+
} else {
|
|
186
|
+
history.pushState(null, '', href)
|
|
187
|
+
}
|
|
188
|
+
} catch (e) {
|
|
189
|
+
console.error('[Telescope SPA]', e)
|
|
190
|
+
window.location.href = href
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
onPopState() {
|
|
195
|
+
this.stopPageTimers()
|
|
196
|
+
// Fetch the page the browser navigated to
|
|
197
|
+
this._isPopState = true
|
|
198
|
+
this.navigate(location.href)
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
_isPopState: false,
|
|
202
|
+
|
|
203
|
+
stopPageTimers() {
|
|
204
|
+
// Clear any auto-refresh intervals from EntryList pages
|
|
205
|
+
const mainEl = document.getElementById('telescope-main')
|
|
206
|
+
if (mainEl) {
|
|
207
|
+
mainEl.querySelectorAll('[x-data]').forEach(el => {
|
|
208
|
+
if (el._x_dataStack) {
|
|
209
|
+
for (const data of el._x_dataStack) {
|
|
210
|
+
if (data._refreshTimer) {
|
|
211
|
+
clearInterval(data._refreshTimer)
|
|
212
|
+
data._refreshTimer = null
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
})
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
</script>
|
|
222
|
+
</body>
|
|
223
|
+
</html>`;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=Layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/views/vanilla/Layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAEnD,MAAM,GAAG,GAAc;QACrB,EAAE,KAAK,EAAE,WAAW,EAAM,IAAI,EAAE,EAAE,EAAe,IAAI,EAAE,kJAAkJ,EAAE;QAC3M,EAAE,KAAK,EAAE,UAAU,EAAO,IAAI,EAAE,WAAW,EAAM,IAAI,EAAE,4BAA4B,EAAE;QACrF,EAAE,KAAK,EAAE,SAAS,EAAQ,IAAI,EAAE,UAAU,EAAO,IAAI,EAAE,6GAA6G,EAAE;QACtK,EAAE,KAAK,EAAE,MAAM,EAAW,IAAI,EAAE,OAAO,EAAU,IAAI,EAAE,wJAAwJ,EAAE;QACjN,EAAE,KAAK,EAAE,YAAY,EAAK,IAAI,EAAE,aAAa,EAAI,IAAI,EAAE,sIAAsI,EAAE;QAC/L,EAAE,KAAK,EAAE,MAAM,EAAW,IAAI,EAAE,OAAO,EAAU,IAAI,EAAE,sHAAsH,EAAE;QAC/K,EAAE,KAAK,EAAE,MAAM,EAAW,IAAI,EAAE,OAAO,EAAU,IAAI,EAAE,sGAAsG,EAAE;QAC/J,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,+LAA+L,EAAE;QACzP,EAAE,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,SAAS,EAAQ,IAAI,EAAE,4BAA4B,EAAE;QACrF,EAAE,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,QAAQ,EAAS,IAAI,EAAE,mFAAmF,EAAE;QAC5I,EAAE,KAAK,EAAE,UAAU,EAAO,IAAI,EAAE,WAAW,EAAM,IAAI,EAAE,6CAA6C,EAAE;QACtG,EAAE,KAAK,EAAE,QAAQ,EAAS,IAAI,EAAE,SAAS,EAAQ,IAAI,EAAE,wJAAwJ,EAAE;QACjN,EAAE,KAAK,EAAE,UAAU,EAAO,IAAI,EAAE,WAAW,EAAM,IAAI,EAAE,sFAAsF,EAAE;QAC/I,EAAE,KAAK,EAAE,aAAa,EAAI,IAAI,EAAE,OAAO,EAAU,IAAI,EAAE,sIAAsI,EAAE;QAC/L,EAAE,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,QAAQ,EAAS,IAAI,EAAE,sGAAsG,EAAE;QAC/J,EAAE,KAAK,EAAE,OAAO,EAAU,IAAI,EAAE,QAAQ,EAAS,IAAI,EAAE,uCAAuC,EAAE;QAChG,EAAE,KAAK,EAAE,YAAY,EAAK,IAAI,EAAE,aAAa,EAAI,IAAI,EAAE,2IAA2I,EAAE;QACpM,EAAE,KAAK,EAAE,IAAI,EAAY,IAAI,EAAE,KAAK,EAAY,IAAI,EAAE,kNAAkN,EAAE;QAC1Q,EAAE,KAAK,EAAE,KAAK,EAAW,IAAI,EAAE,MAAM,EAAW,IAAI,EAAE,4BAA4B,EAAE;QACpF,EAAE,KAAK,EAAE,YAAY,EAAK,IAAI,EAAE,OAAO,EAAU,IAAI,EAAE,sMAAsM,EAAE;KAChQ,CAAA;IAED,4CAA4C;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAA;QACtD,OAAO,YAAY,IAAI,+BAA+B,IAAI;;oCAE1B,QAAQ;0KAC8H,CAAC,CAAC,IAAI;QACxK,CAAC,CAAC,KAAK;SACN,CAAA;IACP,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAErB,OAAO;;;;;WAKE,KAAK;;;;;;;;;;;;;;;;;;;;;;mBAsBG,QAAQ,+BAA+B,QAAQ;;;;;;;;;;;UAWxD,OAAO;;;;;;;;uCAQsB,QAAQ;;;;;;;;;;;;;;;;UAgBrC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA6BY,QAAQ;;wBAEV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkF1B,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny HTML templating helper — inlined from `@rudderjs/view`'s `html\`\``,
|
|
3
|
+
* `escapeHtml`, and `SafeString` so telescope doesn't need to pull
|
|
4
|
+
* `@rudderjs/view` (which has a `vike` peer dep that's unwanted baggage
|
|
5
|
+
* for a self-contained debug tool).
|
|
6
|
+
*
|
|
7
|
+
* If `@rudderjs/view` ever drops the Vike peer or splits the HTML helpers
|
|
8
|
+
* into a separate package, this file can be replaced with a one-line
|
|
9
|
+
* `export ... from '@rudderjs/view'`.
|
|
10
|
+
*
|
|
11
|
+
* The semantics match `@rudderjs/view` exactly:
|
|
12
|
+
* - Primitives are escaped via `escapeHtml`
|
|
13
|
+
* - `null`/`undefined`/`false` render as empty string
|
|
14
|
+
* - Arrays recursively render and join (no separator)
|
|
15
|
+
* - `SafeString` instances pass through unchanged (the escape hatch for
|
|
16
|
+
* composing nested templates or injecting trusted markup)
|
|
17
|
+
*/
|
|
18
|
+
export declare class SafeString {
|
|
19
|
+
readonly value: string;
|
|
20
|
+
constructor(value: string);
|
|
21
|
+
toString(): string;
|
|
22
|
+
}
|
|
23
|
+
export declare function escapeHtml(value: unknown): string;
|
|
24
|
+
export declare function html(strings: TemplateStringsArray, ...values: unknown[]): SafeString;
|
|
25
|
+
/** Wrap pre-rendered, trusted HTML so it passes through `html\`\`` interpolation unchanged. */
|
|
26
|
+
export declare function raw(value: string): SafeString;
|
|
27
|
+
//# sourceMappingURL=_html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_html.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/_html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qBAAa,UAAU;aACO,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IACzC,QAAQ,IAAI,MAAM;CACnB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AASD,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAMpF;AAED,+FAA+F;AAC/F,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAE7C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny HTML templating helper — inlined from `@rudderjs/view`'s `html\`\``,
|
|
3
|
+
* `escapeHtml`, and `SafeString` so telescope doesn't need to pull
|
|
4
|
+
* `@rudderjs/view` (which has a `vike` peer dep that's unwanted baggage
|
|
5
|
+
* for a self-contained debug tool).
|
|
6
|
+
*
|
|
7
|
+
* If `@rudderjs/view` ever drops the Vike peer or splits the HTML helpers
|
|
8
|
+
* into a separate package, this file can be replaced with a one-line
|
|
9
|
+
* `export ... from '@rudderjs/view'`.
|
|
10
|
+
*
|
|
11
|
+
* The semantics match `@rudderjs/view` exactly:
|
|
12
|
+
* - Primitives are escaped via `escapeHtml`
|
|
13
|
+
* - `null`/`undefined`/`false` render as empty string
|
|
14
|
+
* - Arrays recursively render and join (no separator)
|
|
15
|
+
* - `SafeString` instances pass through unchanged (the escape hatch for
|
|
16
|
+
* composing nested templates or injecting trusted markup)
|
|
17
|
+
*/
|
|
18
|
+
export class SafeString {
|
|
19
|
+
value;
|
|
20
|
+
constructor(value) {
|
|
21
|
+
this.value = value;
|
|
22
|
+
}
|
|
23
|
+
toString() { return this.value; }
|
|
24
|
+
}
|
|
25
|
+
export function escapeHtml(value) {
|
|
26
|
+
if (value === null || value === undefined)
|
|
27
|
+
return '';
|
|
28
|
+
return String(value)
|
|
29
|
+
.replace(/&/g, '&')
|
|
30
|
+
.replace(/</g, '<')
|
|
31
|
+
.replace(/>/g, '>')
|
|
32
|
+
.replace(/"/g, '"')
|
|
33
|
+
.replace(/'/g, ''');
|
|
34
|
+
}
|
|
35
|
+
function renderHtmlValue(value) {
|
|
36
|
+
if (value === null || value === undefined || value === false)
|
|
37
|
+
return '';
|
|
38
|
+
if (value instanceof SafeString)
|
|
39
|
+
return value.value;
|
|
40
|
+
if (Array.isArray(value))
|
|
41
|
+
return value.map(renderHtmlValue).join('');
|
|
42
|
+
return escapeHtml(value);
|
|
43
|
+
}
|
|
44
|
+
export function html(strings, ...values) {
|
|
45
|
+
let out = strings[0] ?? '';
|
|
46
|
+
for (let i = 0; i < values.length; i++) {
|
|
47
|
+
out += renderHtmlValue(values[i]) + (strings[i + 1] ?? '');
|
|
48
|
+
}
|
|
49
|
+
return new SafeString(out);
|
|
50
|
+
}
|
|
51
|
+
/** Wrap pre-rendered, trusted HTML so it passes through `html\`\`` interpolation unchanged. */
|
|
52
|
+
export function raw(value) {
|
|
53
|
+
return new SafeString(value);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=_html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_html.js","sourceRoot":"","sources":["../../../src/views/vanilla/_html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,OAAO,UAAU;IACO;IAA5B,YAA4B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAC7C,QAAQ,KAAa,OAAO,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;CACzC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACpD,OAAO,MAAM,CAAC,KAAK,CAAC;SACjB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,EAAE,CAAA;IACvE,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC,KAAK,CAAA;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACpE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAiB;IACtE,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,GAAG,CAAC,KAAa;IAC/B,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Column } from './EntryList.js';
|
|
2
|
+
/**
|
|
3
|
+
* Per-watcher column configurations for the generic `EntryList` template.
|
|
4
|
+
*
|
|
5
|
+
* Each entry maps a watcher type to its display config. The map key is
|
|
6
|
+
* the entry type as it appears in the URL (e.g. `requests`, `queries`),
|
|
7
|
+
* NOT the singular `EntryType` from `../../src/types.ts`.
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT: Column `key` expressions are placed inside HTML `x-text="..."`
|
|
10
|
+
* attributes (double-quoted). Use single quotes for string literals inside
|
|
11
|
+
* expressions — e.g. `"entry.content.status || '—'"` not `'...'`.
|
|
12
|
+
*/
|
|
13
|
+
export interface PageConfig {
|
|
14
|
+
/** Singular type name passed to EntryList — backend uses pluralisation rules */
|
|
15
|
+
type: string;
|
|
16
|
+
title: string;
|
|
17
|
+
columns: Column[];
|
|
18
|
+
}
|
|
19
|
+
export declare const pages: Record<string, PageConfig>;
|
|
20
|
+
//# sourceMappingURL=columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,gFAAgF;IAChF,IAAI,EAAK,MAAM,CAAA;IACf,KAAK,EAAI,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAqM5C,CAAA"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
export const pages = {
|
|
2
|
+
requests: {
|
|
3
|
+
type: 'request',
|
|
4
|
+
title: 'Requests',
|
|
5
|
+
columns: [
|
|
6
|
+
{ label: 'Method', key: 'entry.content.method', badge: true },
|
|
7
|
+
{ label: 'Path', key: 'entry.content.path', mono: true },
|
|
8
|
+
{ label: 'Status', key: "entry.content.status || '—'", badge: true },
|
|
9
|
+
{ label: 'Duration', key: "entry.content.duration + 'ms'", className: 'text-right' },
|
|
10
|
+
],
|
|
11
|
+
},
|
|
12
|
+
queries: {
|
|
13
|
+
type: 'query',
|
|
14
|
+
title: 'Queries',
|
|
15
|
+
columns: [
|
|
16
|
+
{ label: 'SQL', key: 'entry.content.sql', mono: true, className: 'truncate max-w-md' },
|
|
17
|
+
{ label: 'Duration', key: "entry.content.duration + 'ms'", className: 'text-right' },
|
|
18
|
+
{ label: 'Model', key: "entry.content.model || '—'" },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
jobs: {
|
|
22
|
+
type: 'job',
|
|
23
|
+
title: 'Jobs',
|
|
24
|
+
columns: [
|
|
25
|
+
{ label: 'Class', key: 'entry.content.class', mono: true },
|
|
26
|
+
{ label: 'Queue', key: 'entry.content.queue' },
|
|
27
|
+
{ label: 'Status', key: 'entry.content.status', badge: true },
|
|
28
|
+
{ label: 'Duration', key: "(entry.content.duration || 0) + 'ms'", className: 'text-right' },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
exceptions: {
|
|
32
|
+
type: 'exception',
|
|
33
|
+
title: 'Exceptions',
|
|
34
|
+
columns: [
|
|
35
|
+
{ label: 'Class', key: 'entry.content.class', mono: true, className: 'text-red-600' },
|
|
36
|
+
{ label: 'Message', key: 'entry.content.message', className: 'truncate max-w-md' },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
logs: {
|
|
40
|
+
type: 'log',
|
|
41
|
+
title: 'Logs',
|
|
42
|
+
columns: [
|
|
43
|
+
{ label: 'Level', key: 'entry.content.level', badge: true },
|
|
44
|
+
{ label: 'Channel', key: 'entry.content.channel' },
|
|
45
|
+
{ label: 'Message', key: 'entry.content.message', className: 'truncate max-w-lg' },
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
mail: {
|
|
49
|
+
type: 'mail',
|
|
50
|
+
title: 'Mail',
|
|
51
|
+
columns: [
|
|
52
|
+
{ label: 'Class', key: 'entry.content.class', mono: true },
|
|
53
|
+
{ label: 'Subject', key: 'entry.content.subject', className: 'truncate max-w-md' },
|
|
54
|
+
{ label: 'To', key: "Array.isArray(entry.content.to) ? entry.content.to.join(', ') : entry.content.to" },
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
notifications: {
|
|
58
|
+
type: 'notification',
|
|
59
|
+
title: 'Notifications',
|
|
60
|
+
columns: [
|
|
61
|
+
{ label: 'Class', key: 'entry.content.class', mono: true },
|
|
62
|
+
{ label: 'Channel', key: 'entry.content.channel' },
|
|
63
|
+
{ label: 'Notifiable', key: 'entry.content.notifiable' },
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
events: {
|
|
67
|
+
type: 'event',
|
|
68
|
+
title: 'Events',
|
|
69
|
+
columns: [
|
|
70
|
+
{ label: 'Name', key: 'entry.content.name', mono: true },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
cache: {
|
|
74
|
+
type: 'cache',
|
|
75
|
+
title: 'Cache',
|
|
76
|
+
columns: [
|
|
77
|
+
{ label: 'Key', key: "entry.content.key || '—'", mono: true, className: 'truncate max-w-md' },
|
|
78
|
+
{ label: 'Operation', key: 'entry.content.operation', badge: true },
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
schedule: {
|
|
82
|
+
type: 'schedule',
|
|
83
|
+
title: 'Scheduled Tasks',
|
|
84
|
+
columns: [
|
|
85
|
+
{ label: 'Description', key: 'entry.content.description' },
|
|
86
|
+
{ label: 'Expression', key: 'entry.content.expression', mono: true },
|
|
87
|
+
{ label: 'Status', key: 'entry.content.status', badge: true },
|
|
88
|
+
{ label: 'Duration', key: "(entry.content.duration || 0) + 'ms'", className: 'text-right' },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
models: {
|
|
92
|
+
type: 'model',
|
|
93
|
+
title: 'Model Changes',
|
|
94
|
+
columns: [
|
|
95
|
+
{ label: 'Model', key: 'entry.content.model', mono: true },
|
|
96
|
+
{ label: 'Action', key: 'entry.content.action', badge: true },
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
commands: {
|
|
100
|
+
type: 'command',
|
|
101
|
+
title: 'Commands',
|
|
102
|
+
columns: [
|
|
103
|
+
{ label: 'Name', key: 'entry.content.name', mono: true },
|
|
104
|
+
{ label: 'Source', key: 'entry.content.source', badge: true },
|
|
105
|
+
{ label: 'Exit', key: 'entry.content.exitCode', className: 'text-right font-mono text-xs' },
|
|
106
|
+
{ label: 'Duration', key: "(entry.content.duration || 0) + 'ms'", className: 'text-right' },
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
http: {
|
|
110
|
+
type: 'http',
|
|
111
|
+
title: 'HTTP Client',
|
|
112
|
+
columns: [
|
|
113
|
+
{ label: 'Method', key: 'entry.content.method', badge: true },
|
|
114
|
+
{ label: 'URL', key: 'entry.content.url', mono: true, className: 'truncate max-w-md' },
|
|
115
|
+
{ label: 'Status', key: "entry.content.status || 'ERR'", badge: true },
|
|
116
|
+
{ label: 'Duration', key: "(entry.content.duration || 0) + 'ms'", className: 'text-right' },
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
gates: {
|
|
120
|
+
type: 'gate',
|
|
121
|
+
title: 'Gates',
|
|
122
|
+
columns: [
|
|
123
|
+
{ label: 'Ability', key: 'entry.content.ability', mono: true },
|
|
124
|
+
{ label: 'Result', key: "entry.content.allowed ? 'Allowed' : 'Denied'", badge: true },
|
|
125
|
+
{ label: 'Via', key: 'entry.content.resolvedVia', badge: true },
|
|
126
|
+
{ label: 'Duration', key: "(entry.content.duration || 0) + 'ms'", className: 'text-right' },
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
dumps: {
|
|
130
|
+
type: 'dump',
|
|
131
|
+
title: 'Dumps',
|
|
132
|
+
columns: [
|
|
133
|
+
{ label: 'Method', key: 'entry.content.method', badge: true },
|
|
134
|
+
{ label: 'Args', key: "entry.content.count + ' value(s)'" },
|
|
135
|
+
{ label: 'Caller', key: "entry.content.caller || '—'", mono: true, className: 'truncate max-w-md text-xs' },
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
broadcasts: {
|
|
139
|
+
type: 'broadcast',
|
|
140
|
+
title: 'WebSockets',
|
|
141
|
+
columns: [
|
|
142
|
+
{ label: 'Kind', key: 'entry.content.kind', badge: true },
|
|
143
|
+
{ label: 'Channel', key: "entry.content.channel || '—'", mono: true, className: 'truncate max-w-md' },
|
|
144
|
+
{ label: 'Event', key: "entry.content.event || '—'" },
|
|
145
|
+
{ label: 'Conn', key: "(entry.content.connectionId || '').slice(0, 8) || '—'", mono: true, className: 'text-xs' },
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
live: {
|
|
149
|
+
type: 'live',
|
|
150
|
+
title: 'Live (Yjs)',
|
|
151
|
+
columns: [
|
|
152
|
+
{ label: 'Kind', key: 'entry.content.kind', badge: true },
|
|
153
|
+
{ label: 'Doc', key: "entry.content.docName || '—'", mono: true, className: 'truncate max-w-xs' },
|
|
154
|
+
{ label: 'Client', key: "(entry.content.clientId || '').slice(0, 8) || '—'", mono: true, className: 'text-xs' },
|
|
155
|
+
{ label: 'Bytes', key: "entry.content.byteSize != null ? entry.content.byteSize : '—'", className: 'text-right font-mono text-xs' },
|
|
156
|
+
],
|
|
157
|
+
},
|
|
158
|
+
ai: {
|
|
159
|
+
type: 'ai',
|
|
160
|
+
title: 'AI',
|
|
161
|
+
columns: [
|
|
162
|
+
{ label: 'Agent', key: 'entry.content.agentName' },
|
|
163
|
+
{ label: 'Model', key: 'entry.content.model', badge: true },
|
|
164
|
+
{ label: 'Tokens', key: "entry.content.tokens?.total ?? '—'" },
|
|
165
|
+
{ label: 'Tools', key: "entry.content.toolCallCount || '—'" },
|
|
166
|
+
{ label: 'Duration', key: "entry.content.duration + 'ms'" },
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
mcp: {
|
|
170
|
+
type: 'mcp',
|
|
171
|
+
title: 'MCP',
|
|
172
|
+
columns: [
|
|
173
|
+
{ label: 'Server', key: 'entry.content.serverName', badge: true },
|
|
174
|
+
{ label: 'Type', key: "entry.content.kind ? entry.content.kind.split('.')[0] : '—'", badge: true },
|
|
175
|
+
{ label: 'Name', key: 'entry.content.name', mono: true, className: 'truncate max-w-xs' },
|
|
176
|
+
{ label: 'Duration', key: "entry.content.duration != null ? Math.round(entry.content.duration) + 'ms' : '—'", className: 'text-right font-mono text-xs' },
|
|
177
|
+
{ label: 'Status', key: "entry.content.error ? 'Failed' : 'OK'", badge: true },
|
|
178
|
+
],
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
//# sourceMappingURL=columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/views/vanilla/columns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TelescopeEntry } from '../../../types.js';
|
|
2
|
+
export interface BatchPageProps {
|
|
3
|
+
basePath: string;
|
|
4
|
+
batchId: string;
|
|
5
|
+
entries: TelescopeEntry[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Batch view — lists every entry sharing one `batchId`. Typically a single
|
|
9
|
+
* HTTP request and all the queries / cache lookups / events / model writes
|
|
10
|
+
* it triggered. The framework's batch propagation through the request
|
|
11
|
+
* lifecycle is what makes this useful.
|
|
12
|
+
*/
|
|
13
|
+
export declare function BatchPage(props: BatchPageProps): string;
|
|
14
|
+
//# sourceMappingURL=Batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Batch.d.ts","sourceRoot":"","sources":["../../../../src/views/vanilla/details/Batch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAG,MAAM,CAAA;IAChB,OAAO,EAAG,cAAc,EAAE,CAAA;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CA2FvD"}
|