Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

161 lines
3.9 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; img-src 'self' data:; connect-src 'self' https://* http://localhost:* http://127.0.0.1:*;"
/>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Service Proxy Demo</title>
<style>
:root {
color-scheme: light dark;
--bg: #ffffff;
--fg: #111827;
--card-bg: rgba(255, 255, 255, 0.85);
--border: rgba(15, 23, 42, 0.08);
--muted: #475569;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, 'Noto Sans',
'Helvetica Neue', Arial, 'Apple Color Emoji', 'Segoe UI Emoji', sans-serif;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0b1120;
--fg: #e2e8f0;
--card-bg: rgba(15, 23, 42, 0.6);
--border: rgba(148, 163, 184, 0.15);
--muted: #94a3b8;
}
}
body {
margin: 0;
min-height: 100vh;
background: var(--bg);
color: var(--fg);
display: flex;
align-items: center;
justify-content: center;
padding: 32px 16px;
}
.card {
width: min(720px, 100%);
background: var(--card-bg);
border-radius: 16px;
border: 1px solid var(--border);
box-shadow: 0 20px 45px rgba(15, 23, 42, 0.08);
padding: 24px 28px;
display: grid;
gap: 16px;
}
h1 {
font-size: 24px;
margin: 0;
}
p {
margin: 0;
color: var(--muted);
}
table {
width: 100%;
border-collapse: collapse;
background: rgba(255, 255, 255, 0.6);
border-radius: 12px;
overflow: hidden;
}
thead {
background: rgba(148, 163, 184, 0.25);
}
th,
td {
padding: 12px 16px;
text-align: left;
border-bottom: 1px solid var(--border);
font-size: 14px;
}
tbody tr:last-child td {
border-bottom: none;
}
.status-pill {
display: inline-flex;
align-items: center;
padding: 4px 10px;
border-radius: 999px;
font-size: 12px;
text-transform: capitalize;
background: rgba(59, 130, 246, 0.12);
color: #1d4ed8;
}
.status-pill[data-status='closed'] {
background: rgba(22, 163, 74, 0.12);
color: #15803d;
}
.status-pill[data-status='open'] {
background: rgba(239, 68, 68, 0.12);
color: #b91c1c;
}
.pill-muted {
color: var(--muted);
}
.error {
border: 1px solid rgba(239, 68, 68, 0.3);
background: rgba(239, 68, 68, 0.08);
color: #b91c1c;
border-radius: 12px;
padding: 16px;
font-size: 14px;
}
button {
appearance: none;
border: none;
border-radius: 999px;
padding: 10px 16px;
font-size: 14px;
background: #2563eb;
color: white;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 8px;
}
button:hover {
background: #1d4ed8;
}
</style>
</head>
<body>
<div class="card" id="app">
<header>
<h1>Service Proxy Demo</h1>
<p>This extension fetches tickets via the runner service proxy without exposing API keys to the browser.</p>
</header>
<section id="ticket-content">
<p id="loading" data-state="loading">Loading ticket list…</p>
</section>
<footer>
<button type="button" id="refresh-btn">
<span aria-hidden="true"></span>
Refresh Tickets
</button>
</footer>
</div>
<script type="module" src="./main.js"></script>
</body>
</html>