proofscan 0.10.26 → 0.10.27
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/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +22 -0
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/connectors.d.ts.map +1 -1
- package/dist/commands/connectors.js +10 -3
- package/dist/commands/connectors.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/monitor.d.ts +6 -0
- package/dist/commands/monitor.d.ts.map +1 -0
- package/dist/commands/monitor.js +58 -0
- package/dist/commands/monitor.js.map +1 -0
- package/dist/html/analytics.d.ts +58 -0
- package/dist/html/analytics.d.ts.map +1 -0
- package/dist/html/analytics.js +337 -0
- package/dist/html/analytics.js.map +1 -0
- package/dist/html/index.d.ts +3 -2
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +3 -1
- package/dist/html/index.js.map +1 -1
- package/dist/html/templates.d.ts +9 -1
- package/dist/html/templates.d.ts.map +1 -1
- package/dist/html/templates.js +580 -30
- package/dist/html/templates.js.map +1 -1
- package/dist/html/types.d.ts +93 -0
- package/dist/html/types.d.ts.map +1 -1
- package/dist/html/types.js.map +1 -1
- package/dist/monitor/data/aggregator.d.ts +13 -0
- package/dist/monitor/data/aggregator.d.ts.map +1 -0
- package/dist/monitor/data/aggregator.js +101 -0
- package/dist/monitor/data/aggregator.js.map +1 -0
- package/dist/monitor/data/connectors.d.ts +13 -0
- package/dist/monitor/data/connectors.d.ts.map +1 -0
- package/dist/monitor/data/connectors.js +326 -0
- package/dist/monitor/data/connectors.js.map +1 -0
- package/dist/monitor/data/popl.d.ts +30 -0
- package/dist/monitor/data/popl.d.ts.map +1 -0
- package/dist/monitor/data/popl.js +310 -0
- package/dist/monitor/data/popl.js.map +1 -0
- package/dist/monitor/index.d.ts +6 -0
- package/dist/monitor/index.d.ts.map +1 -0
- package/dist/monitor/index.js +6 -0
- package/dist/monitor/index.js.map +1 -0
- package/dist/monitor/routes/api.d.ts +7 -0
- package/dist/monitor/routes/api.d.ts.map +1 -0
- package/dist/monitor/routes/api.js +63 -0
- package/dist/monitor/routes/api.js.map +1 -0
- package/dist/monitor/routes/connectors.d.ts +7 -0
- package/dist/monitor/routes/connectors.d.ts.map +1 -0
- package/dist/monitor/routes/connectors.js +417 -0
- package/dist/monitor/routes/connectors.js.map +1 -0
- package/dist/monitor/routes/home.d.ts +7 -0
- package/dist/monitor/routes/home.d.ts.map +1 -0
- package/dist/monitor/routes/home.js +15 -0
- package/dist/monitor/routes/home.js.map +1 -0
- package/dist/monitor/routes/index.d.ts +10 -0
- package/dist/monitor/routes/index.d.ts.map +1 -0
- package/dist/monitor/routes/index.js +19 -0
- package/dist/monitor/routes/index.js.map +1 -0
- package/dist/monitor/routes/popl.d.ts +7 -0
- package/dist/monitor/routes/popl.d.ts.map +1 -0
- package/dist/monitor/routes/popl.js +84 -0
- package/dist/monitor/routes/popl.js.map +1 -0
- package/dist/monitor/server.d.ts +24 -0
- package/dist/monitor/server.d.ts.map +1 -0
- package/dist/monitor/server.js +52 -0
- package/dist/monitor/server.js.map +1 -0
- package/dist/monitor/templates/components.d.ts +21 -0
- package/dist/monitor/templates/components.d.ts.map +1 -0
- package/dist/monitor/templates/components.js +405 -0
- package/dist/monitor/templates/components.js.map +1 -0
- package/dist/monitor/templates/home.d.ts +9 -0
- package/dist/monitor/templates/home.d.ts.map +1 -0
- package/dist/monitor/templates/home.js +322 -0
- package/dist/monitor/templates/home.js.map +1 -0
- package/dist/monitor/templates/layout.d.ts +26 -0
- package/dist/monitor/templates/layout.d.ts.map +1 -0
- package/dist/monitor/templates/layout.js +186 -0
- package/dist/monitor/templates/layout.js.map +1 -0
- package/dist/monitor/templates/popl.d.ts +33 -0
- package/dist/monitor/templates/popl.d.ts.map +1 -0
- package/dist/monitor/templates/popl.js +654 -0
- package/dist/monitor/templates/popl.js.map +1 -0
- package/dist/monitor/types.d.ts +121 -0
- package/dist/monitor/types.d.ts.map +1 -0
- package/dist/monitor/types.js +5 -0
- package/dist/monitor/types.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProofScan Web Monitor - POPL entry routes
|
|
3
|
+
*/
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { join, resolve, relative } from 'path';
|
|
6
|
+
import { readFile, stat } from 'fs/promises';
|
|
7
|
+
import { renderPoplDetailPage, renderPopl404Page, renderArtifactPage } from '../templates/popl.js';
|
|
8
|
+
import { getPoplEntry } from '../data/popl.js';
|
|
9
|
+
export const poplRoutes = new Hono();
|
|
10
|
+
// GET /:proof_id - POPL entry detail page
|
|
11
|
+
poplRoutes.get('/:proof_id', async (c) => {
|
|
12
|
+
const proofId = c.req.param('proof_id');
|
|
13
|
+
const entry = await getPoplEntry(proofId);
|
|
14
|
+
if (!entry) {
|
|
15
|
+
return c.html(renderPopl404Page(proofId), 404);
|
|
16
|
+
}
|
|
17
|
+
const html = renderPoplDetailPage(entry);
|
|
18
|
+
return c.html(html);
|
|
19
|
+
});
|
|
20
|
+
// GET /:proof_id/artifacts/:name - View artifact content
|
|
21
|
+
poplRoutes.get('/:proof_id/artifacts/:name', async (c) => {
|
|
22
|
+
const proofId = c.req.param('proof_id');
|
|
23
|
+
const artifactName = c.req.param('name');
|
|
24
|
+
const entry = await getPoplEntry(proofId);
|
|
25
|
+
if (!entry) {
|
|
26
|
+
return c.html(renderPopl404Page(proofId), 404);
|
|
27
|
+
}
|
|
28
|
+
// Find artifact by name
|
|
29
|
+
const artifact = entry.artifacts.find((a) => a.name === artifactName);
|
|
30
|
+
if (!artifact) {
|
|
31
|
+
return c.html(renderArtifactPage({
|
|
32
|
+
proofId,
|
|
33
|
+
artifactName,
|
|
34
|
+
error: `Artifact "${artifactName}" not found in POPL entry`,
|
|
35
|
+
}), 404);
|
|
36
|
+
}
|
|
37
|
+
// Try to read the artifact file
|
|
38
|
+
const poplDir = join(process.cwd(), '.popl', 'popl_entries', proofId);
|
|
39
|
+
const artifactPath = resolve(poplDir, artifact.path);
|
|
40
|
+
// Security: Prevent path traversal attacks
|
|
41
|
+
const relativePath = relative(poplDir, artifactPath);
|
|
42
|
+
if (relativePath.startsWith('..') || relativePath.startsWith('/')) {
|
|
43
|
+
return c.html(renderArtifactPage({
|
|
44
|
+
proofId,
|
|
45
|
+
artifactName,
|
|
46
|
+
artifact,
|
|
47
|
+
error: 'Invalid artifact path: access denied',
|
|
48
|
+
}), 403);
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
// Check if file exists and get stats
|
|
52
|
+
const fileStat = await stat(artifactPath);
|
|
53
|
+
const maxSize = 1024 * 1024; // 1MB limit for display
|
|
54
|
+
if (fileStat.size > maxSize) {
|
|
55
|
+
return c.html(renderArtifactPage({
|
|
56
|
+
proofId,
|
|
57
|
+
artifactName,
|
|
58
|
+
artifact,
|
|
59
|
+
error: `File too large to display (${(fileStat.size / 1024 / 1024).toFixed(2)} MB). Maximum: 1 MB`,
|
|
60
|
+
}), 200);
|
|
61
|
+
}
|
|
62
|
+
const content = await readFile(artifactPath, 'utf-8');
|
|
63
|
+
// Determine content type based on file extension
|
|
64
|
+
const ext = artifact.path.split('.').pop()?.toLowerCase();
|
|
65
|
+
const isJson = ext === 'json' || content.trim().startsWith('{') || content.trim().startsWith('[');
|
|
66
|
+
return c.html(renderArtifactPage({
|
|
67
|
+
proofId,
|
|
68
|
+
artifactName,
|
|
69
|
+
artifact,
|
|
70
|
+
content,
|
|
71
|
+
isJson,
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
76
|
+
return c.html(renderArtifactPage({
|
|
77
|
+
proofId,
|
|
78
|
+
artifactName,
|
|
79
|
+
artifact,
|
|
80
|
+
error: `Failed to read artifact: ${errorMessage}`,
|
|
81
|
+
}), 500);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=popl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popl.js","sourceRoot":"","sources":["../../../src/monitor/routes/popl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProofScan Web Monitor - Hono Server
|
|
3
|
+
*/
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import type { Server } from 'node:http';
|
|
6
|
+
import type { MonitorServerOptions } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Context variables available in all routes
|
|
9
|
+
*/
|
|
10
|
+
export type MonitorEnv = {
|
|
11
|
+
Variables: {
|
|
12
|
+
configPath: string;
|
|
13
|
+
generatedAt: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Create the Hono application with all routes
|
|
18
|
+
*/
|
|
19
|
+
export declare function createMonitorApp(options: MonitorServerOptions): Hono<MonitorEnv>;
|
|
20
|
+
/**
|
|
21
|
+
* Start the monitor server
|
|
22
|
+
*/
|
|
23
|
+
export declare function startMonitorServer(options: MonitorServerOptions): Promise<Server>;
|
|
24
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/monitor/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,CAchF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProofScan Web Monitor - Hono Server
|
|
3
|
+
*/
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { serve } from '@hono/node-server';
|
|
6
|
+
import { registerRoutes } from './routes/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create the Hono application with all routes
|
|
9
|
+
*/
|
|
10
|
+
export function createMonitorApp(options) {
|
|
11
|
+
const app = new Hono();
|
|
12
|
+
// Middleware: inject context into all requests
|
|
13
|
+
app.use('*', async (c, next) => {
|
|
14
|
+
c.set('configPath', options.configPath);
|
|
15
|
+
c.set('generatedAt', new Date().toISOString());
|
|
16
|
+
await next();
|
|
17
|
+
});
|
|
18
|
+
// Register all routes
|
|
19
|
+
registerRoutes(app);
|
|
20
|
+
return app;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Start the monitor server
|
|
24
|
+
*/
|
|
25
|
+
export function startMonitorServer(options) {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const app = createMonitorApp(options);
|
|
28
|
+
const server = serve({
|
|
29
|
+
fetch: app.fetch,
|
|
30
|
+
port: options.port,
|
|
31
|
+
hostname: options.host,
|
|
32
|
+
}, (info) => {
|
|
33
|
+
console.log(`ProofScan Monitor running at http://${info.address}:${info.port}`);
|
|
34
|
+
console.log(' Mode: Offline (read-only)');
|
|
35
|
+
console.log(' Press Ctrl+C to stop');
|
|
36
|
+
console.log('');
|
|
37
|
+
resolve(server);
|
|
38
|
+
});
|
|
39
|
+
// Handle server errors (e.g., EADDRINUSE)
|
|
40
|
+
server.on('error', (err) => {
|
|
41
|
+
if (err.code === 'EADDRINUSE') {
|
|
42
|
+
console.error(`Error: Port ${options.port} is already in use`);
|
|
43
|
+
console.error(`Try a different port with: pfs monitor start --port <port>`);
|
|
44
|
+
reject(err);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
reject(err);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/monitor/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYnD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAc,CAAC;IAEnC,+CAA+C;IAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC7B,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,KAAK,CAClB;YACE,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,IAAI;SACvB,EACD,CAAC,IAAI,EAAE,EAAE;YACP,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,MAA2B,CAAC,CAAC;QACvC,CAAC,CACF,CAAC;QAEF,0CAA0C;QACzC,MAA4B,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YACvE,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,IAAI,oBAAoB,CAAC,CAAC;gBAC/D,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBAC5E,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProofScan Web Monitor - UI Components
|
|
3
|
+
*/
|
|
4
|
+
import type { MonitorConnectorCard, MonitorPoplKpis } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Render POPL KPI panel with latest entries list
|
|
7
|
+
*/
|
|
8
|
+
export declare function renderPoplPanel(popl: MonitorPoplKpis | null): string;
|
|
9
|
+
/**
|
|
10
|
+
* Get POPL panel styles
|
|
11
|
+
*/
|
|
12
|
+
export declare function getPoplPanelStyles(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Render connector card
|
|
15
|
+
*/
|
|
16
|
+
export declare function renderConnectorCard(card: MonitorConnectorCard): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get connector card styles
|
|
19
|
+
*/
|
|
20
|
+
export declare function getConnectorCardStyles(): string;
|
|
21
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/monitor/templates/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAEhB,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,CAuDpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAuI3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAgDtE;AAoDD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAoG/C"}
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProofScan Web Monitor - UI Components
|
|
3
|
+
*/
|
|
4
|
+
import { escapeHtml } from './layout.js';
|
|
5
|
+
/**
|
|
6
|
+
* Render POPL KPI panel with latest entries list
|
|
7
|
+
*/
|
|
8
|
+
export function renderPoplPanel(popl) {
|
|
9
|
+
if (!popl) {
|
|
10
|
+
return `
|
|
11
|
+
<div class="popl-panel popl-empty">
|
|
12
|
+
<div class="popl-title">POPL</div>
|
|
13
|
+
<div class="popl-message">Not initialized</div>
|
|
14
|
+
</div>
|
|
15
|
+
`;
|
|
16
|
+
}
|
|
17
|
+
// Render latest entries list
|
|
18
|
+
const latestEntriesHtml = popl.latest_entries.length > 0
|
|
19
|
+
? `
|
|
20
|
+
<div class="popl-latest-list">
|
|
21
|
+
<div class="popl-latest-title">Recent Entries</div>
|
|
22
|
+
${popl.latest_entries
|
|
23
|
+
.map((entry) => {
|
|
24
|
+
const trustClass = `popl-trust-${entry.trust_level}`;
|
|
25
|
+
const shortId = entry.id.slice(0, 12);
|
|
26
|
+
return `
|
|
27
|
+
<a href="/popl/${encodeURIComponent(entry.id)}" class="popl-latest-item">
|
|
28
|
+
<span class="popl-latest-id">${escapeHtml(shortId)}...</span>
|
|
29
|
+
<span class="popl-latest-badge ${trustClass}">${escapeHtml(entry.trust_label)}</span>
|
|
30
|
+
</a>
|
|
31
|
+
`;
|
|
32
|
+
})
|
|
33
|
+
.join('')}
|
|
34
|
+
</div>
|
|
35
|
+
`
|
|
36
|
+
: '<div class="popl-no-entries">No entries yet</div>';
|
|
37
|
+
return `
|
|
38
|
+
<div class="popl-panel">
|
|
39
|
+
<div class="popl-kpis">
|
|
40
|
+
<div class="popl-kpi">
|
|
41
|
+
<span class="popl-value">${popl.entries}</span>
|
|
42
|
+
<span class="popl-label">Entries</span>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="popl-kpi">
|
|
45
|
+
<span class="popl-value popl-inscribed">${popl.inscribed}</span>
|
|
46
|
+
<span class="popl-label">Inscribed</span>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="popl-kpi">
|
|
49
|
+
<span class="popl-value popl-ipfs">${popl.ipfs_only}</span>
|
|
50
|
+
<span class="popl-label">IPFS Only</span>
|
|
51
|
+
</div>
|
|
52
|
+
<div class="popl-kpi">
|
|
53
|
+
<span class="popl-value popl-failed">${popl.failed}</span>
|
|
54
|
+
<span class="popl-label">Failed</span>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
${latestEntriesHtml}
|
|
58
|
+
</div>
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get POPL panel styles
|
|
63
|
+
*/
|
|
64
|
+
export function getPoplPanelStyles() {
|
|
65
|
+
return `
|
|
66
|
+
.popl-panel {
|
|
67
|
+
background: var(--bg-secondary);
|
|
68
|
+
border: 1px solid var(--border-color);
|
|
69
|
+
border-radius: 8px;
|
|
70
|
+
padding: 16px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.popl-panel.popl-empty {
|
|
74
|
+
display: flex;
|
|
75
|
+
align-items: center;
|
|
76
|
+
gap: 12px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.popl-title {
|
|
80
|
+
font-weight: 600;
|
|
81
|
+
color: var(--text-secondary);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.popl-message {
|
|
85
|
+
color: var(--text-secondary);
|
|
86
|
+
font-size: 12px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.popl-kpis {
|
|
90
|
+
display: flex;
|
|
91
|
+
gap: 24px;
|
|
92
|
+
margin-bottom: 8px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.popl-kpi {
|
|
96
|
+
display: flex;
|
|
97
|
+
flex-direction: column;
|
|
98
|
+
align-items: center;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.popl-value {
|
|
102
|
+
font-size: 20px;
|
|
103
|
+
font-weight: 600;
|
|
104
|
+
color: var(--accent-blue);
|
|
105
|
+
font-family: 'SF Mono', Consolas, monospace;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.popl-value.popl-inscribed { color: var(--accent-green); }
|
|
109
|
+
.popl-value.popl-ipfs { color: var(--accent-yellow); }
|
|
110
|
+
.popl-value.popl-failed { color: var(--accent-red); }
|
|
111
|
+
|
|
112
|
+
.popl-label {
|
|
113
|
+
font-size: 11px;
|
|
114
|
+
color: var(--text-secondary);
|
|
115
|
+
text-transform: uppercase;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.popl-latest {
|
|
119
|
+
font-size: 12px;
|
|
120
|
+
color: var(--text-secondary);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.popl-latest-list {
|
|
124
|
+
margin-top: 12px;
|
|
125
|
+
padding-top: 12px;
|
|
126
|
+
border-top: 1px solid var(--border-color);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.popl-latest-title {
|
|
130
|
+
font-size: 11px;
|
|
131
|
+
color: var(--text-secondary);
|
|
132
|
+
text-transform: uppercase;
|
|
133
|
+
margin-bottom: 8px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.popl-latest-item {
|
|
137
|
+
display: flex;
|
|
138
|
+
align-items: center;
|
|
139
|
+
justify-content: space-between;
|
|
140
|
+
padding: 6px 8px;
|
|
141
|
+
margin-bottom: 4px;
|
|
142
|
+
background: var(--bg-tertiary);
|
|
143
|
+
border: 1px solid transparent;
|
|
144
|
+
border-radius: 4px;
|
|
145
|
+
text-decoration: none;
|
|
146
|
+
transition: border-color 0.15s;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.popl-latest-item:hover {
|
|
150
|
+
border-color: var(--accent-blue);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.popl-latest-id {
|
|
154
|
+
font-family: 'SF Mono', Consolas, monospace;
|
|
155
|
+
font-size: 11px;
|
|
156
|
+
color: var(--accent-blue);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.popl-latest-badge {
|
|
160
|
+
padding: 2px 8px;
|
|
161
|
+
border-radius: 10px;
|
|
162
|
+
font-size: 10px;
|
|
163
|
+
font-weight: 500;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.popl-trust-0 {
|
|
167
|
+
background: var(--bg-tertiary);
|
|
168
|
+
border: 1px solid var(--border-color);
|
|
169
|
+
color: var(--text-secondary);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.popl-trust-1 {
|
|
173
|
+
background: rgba(63, 185, 80, 0.15);
|
|
174
|
+
border: 1px solid rgba(63, 185, 80, 0.3);
|
|
175
|
+
color: var(--accent-green);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.popl-trust-2 {
|
|
179
|
+
background: rgba(0, 212, 255, 0.15);
|
|
180
|
+
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
181
|
+
color: var(--accent-blue);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.popl-trust-3 {
|
|
185
|
+
background: rgba(255, 215, 0, 0.15);
|
|
186
|
+
border: 1px solid rgba(255, 215, 0, 0.3);
|
|
187
|
+
color: #ffd700;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.popl-no-entries {
|
|
191
|
+
font-size: 12px;
|
|
192
|
+
color: var(--text-secondary);
|
|
193
|
+
font-style: italic;
|
|
194
|
+
margin-top: 12px;
|
|
195
|
+
padding-top: 12px;
|
|
196
|
+
border-top: 1px solid var(--border-color);
|
|
197
|
+
}
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Render connector card
|
|
202
|
+
*/
|
|
203
|
+
export function renderConnectorCard(card) {
|
|
204
|
+
const statusBadge = getStatusBadge(card.status);
|
|
205
|
+
const enabledBadge = card.enabled
|
|
206
|
+
? '<span class="badge badge-enabled">Enabled</span>'
|
|
207
|
+
: '<span class="badge badge-disabled">Disabled</span>';
|
|
208
|
+
const capabilities = renderCapabilities(card.capabilities);
|
|
209
|
+
const transportBadge = `<span class="badge badge-transport">${card.transport}</span>`;
|
|
210
|
+
const disabledClass = card.enabled ? '' : 'card-disabled';
|
|
211
|
+
return `
|
|
212
|
+
<a href="/connectors/${escapeHtml(card.connector_id)}" class="connector-card ${disabledClass}" data-id="${escapeHtml(card.connector_id)}" data-capabilities="${getCapabilitiesData(card.capabilities)}" data-transport="${card.transport}">
|
|
213
|
+
<div class="card-header">
|
|
214
|
+
<div class="card-title">${escapeHtml(card.connector_id)}</div>
|
|
215
|
+
<div class="card-badges">
|
|
216
|
+
${statusBadge}
|
|
217
|
+
${enabledBadge}
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
<div class="card-package">${escapeHtml(card.package_name)}@${escapeHtml(card.package_version)}</div>
|
|
221
|
+
<div class="card-capabilities">
|
|
222
|
+
${capabilities}
|
|
223
|
+
${transportBadge}
|
|
224
|
+
</div>
|
|
225
|
+
<div class="card-kpis">
|
|
226
|
+
<div class="card-kpi">
|
|
227
|
+
<span class="kpi-value">${formatNumber(card.kpis.sessions)}</span>
|
|
228
|
+
<span class="kpi-label">Sessions</span>
|
|
229
|
+
</div>
|
|
230
|
+
<div class="card-kpi">
|
|
231
|
+
<span class="kpi-value">${formatNumber(card.kpis.rpcs)}</span>
|
|
232
|
+
<span class="kpi-label">RPCs</span>
|
|
233
|
+
</div>
|
|
234
|
+
<div class="card-kpi">
|
|
235
|
+
<span class="kpi-value">${formatNumber(card.kpis.errors)}</span>
|
|
236
|
+
<span class="kpi-label">Errors</span>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="card-kpi">
|
|
239
|
+
<span class="kpi-value">${card.kpis.avg_latency_ms !== null ? card.kpis.avg_latency_ms + 'ms' : '-'}</span>
|
|
240
|
+
<span class="kpi-label">Avg</span>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="card-footer">
|
|
244
|
+
<span class="card-activity">Last: ${escapeHtml(card.last_activity_relative)}</span>
|
|
245
|
+
</div>
|
|
246
|
+
</a>
|
|
247
|
+
`;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get status badge HTML
|
|
251
|
+
*/
|
|
252
|
+
function getStatusBadge(status) {
|
|
253
|
+
const classes = {
|
|
254
|
+
OK: 'badge-ok',
|
|
255
|
+
WARN: 'badge-warn',
|
|
256
|
+
ERR: 'badge-err',
|
|
257
|
+
OFFLINE: 'badge-offline',
|
|
258
|
+
};
|
|
259
|
+
return `<span class="badge ${classes[status]}">${status}</span>`;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Render capability badges
|
|
263
|
+
*/
|
|
264
|
+
function renderCapabilities(capabilities) {
|
|
265
|
+
const badges = [];
|
|
266
|
+
if (capabilities.tools)
|
|
267
|
+
badges.push('<span class="badge badge-capability">tools</span>');
|
|
268
|
+
if (capabilities.resources)
|
|
269
|
+
badges.push('<span class="badge badge-capability">resources</span>');
|
|
270
|
+
if (capabilities.prompts)
|
|
271
|
+
badges.push('<span class="badge badge-capability">prompts</span>');
|
|
272
|
+
if (capabilities.subscriptions)
|
|
273
|
+
badges.push('<span class="badge badge-capability">subscriptions</span>');
|
|
274
|
+
return badges.join('');
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get capabilities as data attribute value
|
|
278
|
+
*/
|
|
279
|
+
function getCapabilitiesData(capabilities) {
|
|
280
|
+
const caps = [];
|
|
281
|
+
if (capabilities.tools)
|
|
282
|
+
caps.push('tools');
|
|
283
|
+
if (capabilities.resources)
|
|
284
|
+
caps.push('resources');
|
|
285
|
+
if (capabilities.prompts)
|
|
286
|
+
caps.push('prompts');
|
|
287
|
+
if (capabilities.subscriptions)
|
|
288
|
+
caps.push('subscriptions');
|
|
289
|
+
return caps.join(',');
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Format number with K/M suffix
|
|
293
|
+
*/
|
|
294
|
+
function formatNumber(n) {
|
|
295
|
+
if (n >= 1000000)
|
|
296
|
+
return (n / 1000000).toFixed(1) + 'M';
|
|
297
|
+
if (n >= 1000)
|
|
298
|
+
return (n / 1000).toFixed(1) + 'K';
|
|
299
|
+
return String(n);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Get connector card styles
|
|
303
|
+
*/
|
|
304
|
+
export function getConnectorCardStyles() {
|
|
305
|
+
return `
|
|
306
|
+
.connector-cards {
|
|
307
|
+
display: grid;
|
|
308
|
+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
309
|
+
gap: 16px;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.connector-card {
|
|
313
|
+
display: block;
|
|
314
|
+
background: var(--bg-secondary);
|
|
315
|
+
border: 1px solid var(--border-color);
|
|
316
|
+
border-radius: 8px;
|
|
317
|
+
padding: 16px;
|
|
318
|
+
text-decoration: none;
|
|
319
|
+
transition: border-color 0.15s, transform 0.15s;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.connector-card:hover {
|
|
323
|
+
border-color: var(--accent-blue);
|
|
324
|
+
transform: translateY(-2px);
|
|
325
|
+
text-decoration: none;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.connector-card.card-disabled {
|
|
329
|
+
opacity: 0.6;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.connector-card.card-disabled:hover {
|
|
333
|
+
opacity: 0.8;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.card-header {
|
|
337
|
+
display: flex;
|
|
338
|
+
justify-content: space-between;
|
|
339
|
+
align-items: flex-start;
|
|
340
|
+
margin-bottom: 8px;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.card-title {
|
|
344
|
+
font-size: 16px;
|
|
345
|
+
font-weight: 600;
|
|
346
|
+
color: var(--text-primary);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.card-badges {
|
|
350
|
+
display: flex;
|
|
351
|
+
gap: 6px;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.card-package {
|
|
355
|
+
font-size: 12px;
|
|
356
|
+
color: var(--text-secondary);
|
|
357
|
+
font-family: 'SF Mono', Consolas, monospace;
|
|
358
|
+
margin-bottom: 12px;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.card-capabilities {
|
|
362
|
+
display: flex;
|
|
363
|
+
flex-wrap: wrap;
|
|
364
|
+
gap: 6px;
|
|
365
|
+
margin-bottom: 12px;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.card-kpis {
|
|
369
|
+
display: grid;
|
|
370
|
+
grid-template-columns: repeat(4, 1fr);
|
|
371
|
+
gap: 8px;
|
|
372
|
+
padding: 12px 0;
|
|
373
|
+
border-top: 1px solid var(--border-color);
|
|
374
|
+
border-bottom: 1px solid var(--border-color);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.card-kpi {
|
|
378
|
+
text-align: center;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.card-kpi .kpi-value {
|
|
382
|
+
display: block;
|
|
383
|
+
font-size: 14px;
|
|
384
|
+
font-weight: 600;
|
|
385
|
+
color: var(--accent-blue);
|
|
386
|
+
font-family: 'SF Mono', Consolas, monospace;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.card-kpi .kpi-label {
|
|
390
|
+
font-size: 10px;
|
|
391
|
+
color: var(--text-secondary);
|
|
392
|
+
text-transform: uppercase;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.card-footer {
|
|
396
|
+
padding-top: 8px;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.card-activity {
|
|
400
|
+
font-size: 12px;
|
|
401
|
+
color: var(--text-secondary);
|
|
402
|
+
}
|
|
403
|
+
`;
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/monitor/templates/components.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../../src/monitor/templates/home.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAUnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA0D5D"}
|