@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
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderjs/telescope",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"rudderjs": {
|
|
5
|
+
"provider": "TelescopeProvider",
|
|
6
|
+
"stage": "monitoring"
|
|
7
|
+
},
|
|
4
8
|
"license": "MIT",
|
|
5
9
|
"repository": {
|
|
6
10
|
"type": "git",
|
|
@@ -21,21 +25,31 @@
|
|
|
21
25
|
}
|
|
22
26
|
},
|
|
23
27
|
"dependencies": {
|
|
24
|
-
"@rudderjs/
|
|
25
|
-
"@rudderjs/
|
|
28
|
+
"@rudderjs/contracts": "0.0.4",
|
|
29
|
+
"@rudderjs/core": "0.0.9"
|
|
26
30
|
},
|
|
27
31
|
"peerDependencies": {
|
|
28
|
-
"@rudderjs/router": "0.0.
|
|
29
|
-
"@rudderjs/
|
|
30
|
-
"@rudderjs/
|
|
31
|
-
"@rudderjs/
|
|
32
|
-
"@rudderjs/
|
|
33
|
-
"@rudderjs/
|
|
34
|
-
"@rudderjs/
|
|
35
|
-
"@rudderjs/
|
|
36
|
-
"@rudderjs/
|
|
32
|
+
"@rudderjs/router": "0.0.4",
|
|
33
|
+
"@rudderjs/log": "0.0.2",
|
|
34
|
+
"@rudderjs/orm": "0.0.7",
|
|
35
|
+
"@rudderjs/cache": "0.0.7",
|
|
36
|
+
"@rudderjs/queue": "0.0.6",
|
|
37
|
+
"@rudderjs/mail": "0.0.6",
|
|
38
|
+
"@rudderjs/notification": "0.0.6",
|
|
39
|
+
"@rudderjs/schedule": "0.0.7",
|
|
40
|
+
"@rudderjs/middleware": "0.0.8",
|
|
41
|
+
"@rudderjs/broadcast": "0.0.2",
|
|
42
|
+
"@rudderjs/rudder": "0.0.3",
|
|
43
|
+
"@rudderjs/auth": "0.2.1",
|
|
44
|
+
"@rudderjs/mcp": "0.0.2",
|
|
45
|
+
"@rudderjs/live": "0.0.2",
|
|
46
|
+
"@rudderjs/http": "0.0.2",
|
|
47
|
+
"@rudderjs/ai": "0.0.2"
|
|
37
48
|
},
|
|
38
49
|
"peerDependenciesMeta": {
|
|
50
|
+
"@rudderjs/rudder": {
|
|
51
|
+
"optional": true
|
|
52
|
+
},
|
|
39
53
|
"@rudderjs/log": {
|
|
40
54
|
"optional": true
|
|
41
55
|
},
|
|
@@ -56,6 +70,24 @@
|
|
|
56
70
|
},
|
|
57
71
|
"@rudderjs/schedule": {
|
|
58
72
|
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"@rudderjs/broadcast": {
|
|
75
|
+
"optional": true
|
|
76
|
+
},
|
|
77
|
+
"@rudderjs/live": {
|
|
78
|
+
"optional": true
|
|
79
|
+
},
|
|
80
|
+
"@rudderjs/http": {
|
|
81
|
+
"optional": true
|
|
82
|
+
},
|
|
83
|
+
"@rudderjs/auth": {
|
|
84
|
+
"optional": true
|
|
85
|
+
},
|
|
86
|
+
"@rudderjs/ai": {
|
|
87
|
+
"optional": true
|
|
88
|
+
},
|
|
89
|
+
"@rudderjs/mcp": {
|
|
90
|
+
"optional": true
|
|
59
91
|
}
|
|
60
92
|
},
|
|
61
93
|
"optionalDependencies": {
|
|
@@ -64,7 +96,15 @@
|
|
|
64
96
|
"devDependencies": {
|
|
65
97
|
"@types/node": "^20.0.0",
|
|
66
98
|
"@types/better-sqlite3": "^7.6.0",
|
|
67
|
-
"typescript": "^5.4.0"
|
|
99
|
+
"typescript": "^5.4.0",
|
|
100
|
+
"@rudderjs/rudder": "0.0.3",
|
|
101
|
+
"@rudderjs/broadcast": "0.0.2",
|
|
102
|
+
"@rudderjs/http": "0.0.2",
|
|
103
|
+
"@rudderjs/auth": "0.2.1",
|
|
104
|
+
"@rudderjs/live": "0.0.2",
|
|
105
|
+
"@rudderjs/ai": "0.0.2",
|
|
106
|
+
"@rudderjs/support": "0.0.4",
|
|
107
|
+
"@rudderjs/mcp": "0.0.2"
|
|
68
108
|
},
|
|
69
109
|
"author": "Suleiman Shahbari",
|
|
70
110
|
"scripts": {
|
package/dist/ui/layout.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared HTML layout for Telescope UI pages.
|
|
3
|
-
* Sidebar navigation + content area. Alpine.js + Tailwind CDN.
|
|
4
|
-
*/
|
|
5
|
-
export interface NavItem {
|
|
6
|
-
label: string;
|
|
7
|
-
path: string;
|
|
8
|
-
icon: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function layout(title: string, body: string, basePath: string, activePath: string): string;
|
|
11
|
-
//# sourceMappingURL=layout.d.ts.map
|
package/dist/ui/layout.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAG,MAAM,CAAA;IACb,IAAI,EAAG,MAAM,CAAA;CACd;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiEhG"}
|
package/dist/ui/layout.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared HTML layout for Telescope UI pages.
|
|
3
|
-
* Sidebar navigation + content area. Alpine.js + Tailwind CDN.
|
|
4
|
-
*/
|
|
5
|
-
export function layout(title, body, basePath, activePath) {
|
|
6
|
-
const nav = [
|
|
7
|
-
{ 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' },
|
|
8
|
-
{ label: 'Requests', path: '/requests', icon: 'M13 10V3L4 14h7v7l9-11h-7z' },
|
|
9
|
-
{ 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' },
|
|
10
|
-
{ 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' },
|
|
11
|
-
{ 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' },
|
|
12
|
-
{ 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' },
|
|
13
|
-
{ 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' },
|
|
14
|
-
{ 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' },
|
|
15
|
-
{ label: 'Events', path: '/events', icon: 'M13 10V3L4 14h7v7l9-11h-7z' },
|
|
16
|
-
{ 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' },
|
|
17
|
-
{ label: 'Schedule', path: '/schedule', icon: 'M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z' },
|
|
18
|
-
{ 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' },
|
|
19
|
-
];
|
|
20
|
-
const navHtml = nav.map(n => {
|
|
21
|
-
const href = `${basePath}${n.path}`;
|
|
22
|
-
const active = activePath === n.path || (n.path === '' && activePath === '/');
|
|
23
|
-
return `<a href="${href}" class="flex items-center gap-3 px-3 py-2 text-sm rounded-lg transition ${active ? 'bg-indigo-50 text-indigo-700 font-medium' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900'}">
|
|
24
|
-
<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>
|
|
25
|
-
${n.label}
|
|
26
|
-
</a>`;
|
|
27
|
-
}).join('\n ');
|
|
28
|
-
return `<!DOCTYPE html>
|
|
29
|
-
<html lang="en">
|
|
30
|
-
<head>
|
|
31
|
-
<meta charset="UTF-8">
|
|
32
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
33
|
-
<title>${title} — Telescope</title>
|
|
34
|
-
<script src="https://cdn.tailwindcss.com"></script>
|
|
35
|
-
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
|
36
|
-
<style>
|
|
37
|
-
[x-cloak] { display: none !important; }
|
|
38
|
-
.badge { @apply inline-flex items-center px-2 py-0.5 rounded text-xs font-medium; }
|
|
39
|
-
</style>
|
|
40
|
-
</head>
|
|
41
|
-
<body class="bg-gray-50 text-gray-900 font-sans antialiased">
|
|
42
|
-
<div class="flex min-h-screen">
|
|
43
|
-
<!-- Sidebar -->
|
|
44
|
-
<aside class="w-56 bg-white border-r border-gray-200 flex flex-col">
|
|
45
|
-
<div class="px-4 py-5 flex items-center gap-2 border-b border-gray-100">
|
|
46
|
-
<div class="w-7 h-7 bg-violet-600 rounded-lg flex items-center justify-center">
|
|
47
|
-
<svg class="w-4 h-4 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
48
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
|
|
49
|
-
<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"/>
|
|
50
|
-
</svg>
|
|
51
|
-
</div>
|
|
52
|
-
<span class="font-semibold text-sm">Telescope</span>
|
|
53
|
-
</div>
|
|
54
|
-
<nav class="flex-1 px-3 py-4 space-y-0.5 overflow-y-auto">
|
|
55
|
-
${navHtml}
|
|
56
|
-
</nav>
|
|
57
|
-
</aside>
|
|
58
|
-
|
|
59
|
-
<!-- Main content -->
|
|
60
|
-
<main class="flex-1 overflow-auto">
|
|
61
|
-
<div class="max-w-6xl mx-auto px-6 py-8">
|
|
62
|
-
${body}
|
|
63
|
-
</div>
|
|
64
|
-
</main>
|
|
65
|
-
</div>
|
|
66
|
-
</body>
|
|
67
|
-
</html>`;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=layout.js.map
|
package/dist/ui/layout.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,IAAY,EAAE,QAAgB,EAAE,UAAkB;IACtF,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;KAClN,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM,IAAI,GAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACrC,MAAM,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,UAAU,KAAK,GAAG,CAAC,CAAA;QAC7E,OAAO,YAAY,IAAI,4EAA4E,MAAM,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,oDAAoD;0KACvC,CAAC,CAAC,IAAI;QACxK,CAAC,CAAC,KAAK;SACN,CAAA;IACP,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAErB,OAAO;;;;;WAKE,KAAK;;;;;;;;;;;;;;;;;;;;;;UAsBN,OAAO;;;;;;;UAOP,IAAI;;;;;QAKN,CAAA;AACR,CAAC"}
|
package/dist/ui/pages.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export declare function dashboardPage(basePath: string, apiPrefix: string): string;
|
|
2
|
-
export declare function entryListPage(basePath: string, apiPrefix: string, type: string, title: string, columns: Column[]): string;
|
|
3
|
-
export interface Column {
|
|
4
|
-
label: string;
|
|
5
|
-
key: string;
|
|
6
|
-
badge?: boolean;
|
|
7
|
-
mono?: boolean;
|
|
8
|
-
className?: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function requestsPage(basePath: string, api: string): string;
|
|
11
|
-
export declare function queriesPage(basePath: string, api: string): string;
|
|
12
|
-
export declare function jobsPage(basePath: string, api: string): string;
|
|
13
|
-
export declare function exceptionsPage(basePath: string, api: string): string;
|
|
14
|
-
export declare function logsPage(basePath: string, api: string): string;
|
|
15
|
-
export declare function mailPage(basePath: string, api: string): string;
|
|
16
|
-
export declare function notificationsPage(basePath: string, api: string): string;
|
|
17
|
-
export declare function eventsPage(basePath: string, api: string): string;
|
|
18
|
-
export declare function cachePage(basePath: string, api: string): string;
|
|
19
|
-
export declare function schedulePage(basePath: string, api: string): string;
|
|
20
|
-
export declare function modelsPage(basePath: string, api: string): string;
|
|
21
|
-
//# sourceMappingURL=pages.d.ts.map
|
package/dist/ui/pages.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/ui/pages.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAyBzE;AAID,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CA4HR;AAID,MAAM,WAAW,MAAM;IACrB,KAAK,EAAO,MAAM,CAAA;IAClB,GAAG,EAAS,MAAM,CAAA;IAClB,KAAK,CAAC,EAAM,OAAO,CAAA;IACnB,IAAI,CAAC,EAAO,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO9D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhE"}
|
package/dist/ui/pages.js
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { layout } from './layout.js';
|
|
2
|
-
// ─── Dashboard ─────────────────────────────────────────────
|
|
3
|
-
export function dashboardPage(basePath, apiPrefix) {
|
|
4
|
-
return layout('Dashboard', `
|
|
5
|
-
<div x-data="dashboard()" x-init="load()" x-cloak>
|
|
6
|
-
<h2 class="text-xl font-bold mb-6">Dashboard</h2>
|
|
7
|
-
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
|
|
8
|
-
<template x-for="[type, count] of Object.entries(counts)" :key="type">
|
|
9
|
-
<a :href="'${basePath}/' + (type === 'query' ? 'queries' : type + 's')"
|
|
10
|
-
class="bg-white rounded-xl border border-gray-200 p-4 shadow-sm hover:shadow-md transition">
|
|
11
|
-
<div class="text-2xl font-bold" x-text="count"></div>
|
|
12
|
-
<div class="text-sm text-gray-500 capitalize" x-text="type + 's'"></div>
|
|
13
|
-
</a>
|
|
14
|
-
</template>
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
<script>
|
|
18
|
-
function dashboard() {
|
|
19
|
-
return {
|
|
20
|
-
counts: {},
|
|
21
|
-
async load() {
|
|
22
|
-
const data = await fetch('${apiPrefix}/overview').then(r => r.json())
|
|
23
|
-
this.counts = data.counts || {}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
</script>`, basePath, '/');
|
|
28
|
-
}
|
|
29
|
-
// ─── Generic Entry List Page ───────────────────────────────
|
|
30
|
-
export function entryListPage(basePath, apiPrefix, type, title, columns) {
|
|
31
|
-
const colHeaders = columns.map(c => `<th class="px-4 py-3 text-left text-xs uppercase font-medium text-gray-500">${c.label}</th>`).join('\n ');
|
|
32
|
-
const colCells = columns.map(c => {
|
|
33
|
-
if (c.badge) {
|
|
34
|
-
return `<td class="px-4 py-3"><span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium" :class="badgeClass(${c.key})" x-text="${c.key}"></span></td>`;
|
|
35
|
-
}
|
|
36
|
-
if (c.mono) {
|
|
37
|
-
return `<td class="px-4 py-3 font-mono text-xs ${c.className ?? ''}" x-text="${c.key}"></td>`;
|
|
38
|
-
}
|
|
39
|
-
return `<td class="px-4 py-3 ${c.className ?? ''}" x-text="${c.key}"></td>`;
|
|
40
|
-
}).join('\n ');
|
|
41
|
-
const activePath = type === 'query' ? '/queries' : `/${type}s`;
|
|
42
|
-
return layout(title, `
|
|
43
|
-
<div x-data="entryList()" x-init="load()" x-cloak>
|
|
44
|
-
<div class="flex items-center justify-between mb-6">
|
|
45
|
-
<h2 class="text-xl font-bold">${title}</h2>
|
|
46
|
-
<div class="flex gap-2">
|
|
47
|
-
<input type="text" x-model="search" @input.debounce.300ms="load()"
|
|
48
|
-
placeholder="Search..." class="text-sm border border-gray-300 rounded-lg px-3 py-1.5 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 outline-none">
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
<div class="bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden">
|
|
53
|
-
<table class="w-full text-sm">
|
|
54
|
-
<thead class="bg-gray-50 border-b border-gray-200">
|
|
55
|
-
<tr>
|
|
56
|
-
${colHeaders}
|
|
57
|
-
<th class="px-4 py-3 text-right text-xs uppercase font-medium text-gray-500">Time</th>
|
|
58
|
-
</tr>
|
|
59
|
-
</thead>
|
|
60
|
-
<tbody class="divide-y divide-gray-100">
|
|
61
|
-
<template x-for="entry in entries" :key="entry.id">
|
|
62
|
-
<tr class="hover:bg-gray-50 cursor-pointer" @click="selected = entry">
|
|
63
|
-
${colCells}
|
|
64
|
-
<td class="px-4 py-3 text-right text-gray-400 text-xs" x-text="ago(entry.createdAt)"></td>
|
|
65
|
-
</tr>
|
|
66
|
-
</template>
|
|
67
|
-
<tr x-show="entries.length === 0">
|
|
68
|
-
<td colspan="${columns.length + 1}" class="px-4 py-12 text-center text-gray-400">No entries found.</td>
|
|
69
|
-
</tr>
|
|
70
|
-
</tbody>
|
|
71
|
-
</table>
|
|
72
|
-
|
|
73
|
-
<!-- Pagination -->
|
|
74
|
-
<div class="flex items-center justify-between px-4 py-3 border-t border-gray-200 bg-gray-50 text-sm">
|
|
75
|
-
<span class="text-gray-500">Total: <span x-text="meta.total"></span></span>
|
|
76
|
-
<div class="flex gap-1">
|
|
77
|
-
<button @click="page > 1 && (page--, load())" :disabled="page <= 1"
|
|
78
|
-
class="px-3 py-1 border rounded text-xs disabled:opacity-30">Prev</button>
|
|
79
|
-
<span class="px-3 py-1 text-gray-500" x-text="'Page ' + page + ' of ' + meta.last_page"></span>
|
|
80
|
-
<button @click="page < meta.last_page && (page++, load())" :disabled="page >= meta.last_page"
|
|
81
|
-
class="px-3 py-1 border rounded text-xs disabled:opacity-30">Next</button>
|
|
82
|
-
</div>
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
|
|
86
|
-
<!-- Detail Modal -->
|
|
87
|
-
<div x-show="selected" @click.self="selected = null" x-transition
|
|
88
|
-
class="fixed inset-0 bg-black/30 flex items-center justify-center z-50 p-8">
|
|
89
|
-
<div class="bg-white rounded-2xl shadow-xl max-w-2xl w-full max-h-[80vh] overflow-auto" @click.stop>
|
|
90
|
-
<div class="flex items-center justify-between px-6 py-4 border-b border-gray-200">
|
|
91
|
-
<h3 class="font-semibold">Entry Detail</h3>
|
|
92
|
-
<button @click="selected = null" class="text-gray-400 hover:text-gray-600">×</button>
|
|
93
|
-
</div>
|
|
94
|
-
<div class="px-6 py-4">
|
|
95
|
-
<pre class="text-xs bg-gray-50 rounded-lg p-4 overflow-auto" x-text="JSON.stringify(selected?.content, null, 2)"></pre>
|
|
96
|
-
<div class="mt-3 flex flex-wrap gap-1">
|
|
97
|
-
<template x-for="tag in (selected?.tags || [])" :key="tag">
|
|
98
|
-
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs bg-gray-100 text-gray-600" x-text="tag"></span>
|
|
99
|
-
</template>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
<script>
|
|
107
|
-
function entryList() {
|
|
108
|
-
return {
|
|
109
|
-
entries: [],
|
|
110
|
-
meta: { total: 0, last_page: 1 },
|
|
111
|
-
page: 1,
|
|
112
|
-
search: '',
|
|
113
|
-
selected: null,
|
|
114
|
-
|
|
115
|
-
async load() {
|
|
116
|
-
const params = new URLSearchParams({ page: this.page, per_page: 50 })
|
|
117
|
-
if (this.search) params.set('search', this.search)
|
|
118
|
-
const data = await fetch('${apiPrefix}/${type === 'query' ? 'queries' : type + 's'}?' + params).then(r => r.json())
|
|
119
|
-
this.entries = data.data || []
|
|
120
|
-
this.meta = data.meta || { total: 0, last_page: 1 }
|
|
121
|
-
},
|
|
122
|
-
|
|
123
|
-
badgeClass(value) {
|
|
124
|
-
const colors = {
|
|
125
|
-
GET: 'bg-green-100 text-green-700', POST: 'bg-blue-100 text-blue-700',
|
|
126
|
-
PUT: 'bg-amber-100 text-amber-700', DELETE: 'bg-red-100 text-red-700',
|
|
127
|
-
PATCH: 'bg-purple-100 text-purple-700',
|
|
128
|
-
error: 'bg-red-100 text-red-700', warning: 'bg-amber-100 text-amber-700',
|
|
129
|
-
info: 'bg-blue-100 text-blue-700', debug: 'bg-gray-100 text-gray-700',
|
|
130
|
-
dispatched: 'bg-blue-100 text-blue-700', failed: 'bg-red-100 text-red-700',
|
|
131
|
-
hit: 'bg-green-100 text-green-700', miss: 'bg-red-100 text-red-700',
|
|
132
|
-
set: 'bg-blue-100 text-blue-700', forget: 'bg-gray-100 text-gray-700',
|
|
133
|
-
created: 'bg-green-100 text-green-700', updated: 'bg-blue-100 text-blue-700',
|
|
134
|
-
deleted: 'bg-red-100 text-red-700',
|
|
135
|
-
}
|
|
136
|
-
return colors[value] || 'bg-gray-100 text-gray-600'
|
|
137
|
-
},
|
|
138
|
-
|
|
139
|
-
ago(dateStr) {
|
|
140
|
-
const s = Math.floor((Date.now() - new Date(dateStr).getTime()) / 1000)
|
|
141
|
-
if (s < 60) return s + 's ago'
|
|
142
|
-
if (s < 3600) return Math.floor(s / 60) + 'm ago'
|
|
143
|
-
if (s < 86400) return Math.floor(s / 3600) + 'h ago'
|
|
144
|
-
return Math.floor(s / 86400) + 'd ago'
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
</script>`, basePath, activePath);
|
|
149
|
-
}
|
|
150
|
-
// ─── Page definitions for each entry type ──────────────────
|
|
151
|
-
export function requestsPage(basePath, api) {
|
|
152
|
-
return entryListPage(basePath, api, 'request', 'Requests', [
|
|
153
|
-
{ label: 'Method', key: 'entry.content.method', badge: true },
|
|
154
|
-
{ label: 'Path', key: 'entry.content.path', mono: true },
|
|
155
|
-
{ label: 'Duration', key: 'entry.content.duration + "ms"', className: 'text-right' },
|
|
156
|
-
]);
|
|
157
|
-
}
|
|
158
|
-
export function queriesPage(basePath, api) {
|
|
159
|
-
return entryListPage(basePath, api, 'query', 'Queries', [
|
|
160
|
-
{ label: 'SQL', key: 'entry.content.sql', mono: true, className: 'truncate max-w-md' },
|
|
161
|
-
{ label: 'Duration', key: 'entry.content.duration + "ms"', className: 'text-right' },
|
|
162
|
-
{ label: 'Model', key: 'entry.content.model || "—"' },
|
|
163
|
-
]);
|
|
164
|
-
}
|
|
165
|
-
export function jobsPage(basePath, api) {
|
|
166
|
-
return entryListPage(basePath, api, 'job', 'Jobs', [
|
|
167
|
-
{ label: 'Class', key: 'entry.content.class', mono: true },
|
|
168
|
-
{ label: 'Queue', key: 'entry.content.queue' },
|
|
169
|
-
{ label: 'Status', key: 'entry.content.status', badge: true },
|
|
170
|
-
{ label: 'Duration', key: '(entry.content.duration || 0) + "ms"', className: 'text-right' },
|
|
171
|
-
]);
|
|
172
|
-
}
|
|
173
|
-
export function exceptionsPage(basePath, api) {
|
|
174
|
-
return entryListPage(basePath, api, 'exception', 'Exceptions', [
|
|
175
|
-
{ label: 'Class', key: 'entry.content.class', mono: true, className: 'text-red-600' },
|
|
176
|
-
{ label: 'Message', key: 'entry.content.message', className: 'truncate max-w-md' },
|
|
177
|
-
]);
|
|
178
|
-
}
|
|
179
|
-
export function logsPage(basePath, api) {
|
|
180
|
-
return entryListPage(basePath, api, 'log', 'Logs', [
|
|
181
|
-
{ label: 'Level', key: 'entry.content.level', badge: true },
|
|
182
|
-
{ label: 'Channel', key: 'entry.content.channel' },
|
|
183
|
-
{ label: 'Message', key: 'entry.content.message', className: 'truncate max-w-lg' },
|
|
184
|
-
]);
|
|
185
|
-
}
|
|
186
|
-
export function mailPage(basePath, api) {
|
|
187
|
-
return entryListPage(basePath, api, 'mail', 'Mail', [
|
|
188
|
-
{ label: 'Class', key: 'entry.content.class', mono: true },
|
|
189
|
-
{ label: 'Subject', key: 'entry.content.subject', className: 'truncate max-w-md' },
|
|
190
|
-
{ label: 'To', key: 'Array.isArray(entry.content.to) ? entry.content.to.join(", ") : entry.content.to' },
|
|
191
|
-
]);
|
|
192
|
-
}
|
|
193
|
-
export function notificationsPage(basePath, api) {
|
|
194
|
-
return entryListPage(basePath, api, 'notification', 'Notifications', [
|
|
195
|
-
{ label: 'Class', key: 'entry.content.class', mono: true },
|
|
196
|
-
{ label: 'Channel', key: 'entry.content.channel' },
|
|
197
|
-
{ label: 'Notifiable', key: 'entry.content.notifiable' },
|
|
198
|
-
]);
|
|
199
|
-
}
|
|
200
|
-
export function eventsPage(basePath, api) {
|
|
201
|
-
return entryListPage(basePath, api, 'event', 'Events', [
|
|
202
|
-
{ label: 'Name', key: 'entry.content.name', mono: true },
|
|
203
|
-
]);
|
|
204
|
-
}
|
|
205
|
-
export function cachePage(basePath, api) {
|
|
206
|
-
return entryListPage(basePath, api, 'cache', 'Cache', [
|
|
207
|
-
{ label: 'Key', key: 'entry.content.key || "—"', mono: true, className: 'truncate max-w-md' },
|
|
208
|
-
{ label: 'Operation', key: 'entry.content.operation', badge: true },
|
|
209
|
-
]);
|
|
210
|
-
}
|
|
211
|
-
export function schedulePage(basePath, api) {
|
|
212
|
-
return entryListPage(basePath, api, 'schedule', 'Scheduled Tasks', [
|
|
213
|
-
{ label: 'Description', key: 'entry.content.description' },
|
|
214
|
-
{ label: 'Expression', key: 'entry.content.expression', mono: true },
|
|
215
|
-
{ label: 'Status', key: 'entry.content.status', badge: true },
|
|
216
|
-
{ label: 'Duration', key: '(entry.content.duration || 0) + "ms"', className: 'text-right' },
|
|
217
|
-
]);
|
|
218
|
-
}
|
|
219
|
-
export function modelsPage(basePath, api) {
|
|
220
|
-
return entryListPage(basePath, api, 'model', 'Model Changes', [
|
|
221
|
-
{ label: 'Model', key: 'entry.content.model', mono: true },
|
|
222
|
-
{ label: 'Action', key: 'entry.content.action', badge: true },
|
|
223
|
-
]);
|
|
224
|
-
}
|
|
225
|
-
//# sourceMappingURL=pages.js.map
|
package/dist/ui/pages.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/ui/pages.ts"],"names":[],"mappings":"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"}
|