@stacksjs/ts-cloud 0.9.3 → 0.9.4
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/aws/index.js +1 -269
- package/dist/bin/chunk-00kg80qg.js +1 -0
- package/dist/bin/{chunk-hzqw8xm5.js → chunk-1k5kszjp.js} +1 -1
- package/dist/bin/{chunk-9v39615t.js → chunk-21e0mavm.js} +1 -1
- package/dist/bin/{chunk-waayf9ay.js → chunk-2empps47.js} +1 -1
- package/dist/bin/{chunk-14cwr6eh.js → chunk-3vqfexc4.js} +1 -1
- package/dist/bin/chunk-5ectjq0b.js +1 -0
- package/dist/bin/{chunk-b5gd39s8.js → chunk-5erkxpt7.js} +4 -4
- package/dist/bin/{chunk-41x17hw1.js → chunk-5mrtzemj.js} +1 -1
- package/dist/bin/{chunk-p8q9bq9g.js → chunk-5n9fmabb.js} +1 -1
- package/dist/bin/{chunk-gqf6jsmy.js → chunk-9knpg30y.js} +1 -1
- package/dist/bin/{chunk-r3kv0vm9.js → chunk-ddk4rt4j.js} +1 -1
- package/dist/bin/{chunk-avm7tnwe.js → chunk-e0rkrq70.js} +1 -1
- package/dist/bin/{chunk-ry030a6b.js → chunk-etrb03mt.js} +1 -1
- package/dist/bin/{chunk-8v7ddyvf.js → chunk-k9t9wvms.js} +1 -1
- package/dist/bin/{chunk-92mea34a.js → chunk-m7dgskt1.js} +1 -1
- package/dist/bin/{chunk-3r4fb59r.js → chunk-mz0wbbsj.js} +1 -1
- package/dist/bin/{chunk-b9qbp8j1.js → chunk-qk9qgepa.js} +1 -1
- package/dist/bin/chunk-rxcvf10f.js +7364 -0
- package/dist/bin/{chunk-r9hjwcj9.js → chunk-tga3hhwk.js} +1 -1
- package/dist/bin/{chunk-ynjvbphf.js → chunk-tx0tqq2k.js} +1 -1
- package/dist/bin/{chunk-57y1zxbf.js → chunk-vm3q5gf2.js} +1 -1
- package/dist/bin/{chunk-bz828v8q.js → chunk-y7s5r8y6.js} +1 -1
- package/dist/bin/{chunk-sgyffpgm.js → chunk-zmegvjp8.js} +1 -1
- package/dist/bin/cli.js +14 -14
- package/dist/bin/dashboard-server.js +1 -1
- package/dist/chunk-0ccta6z6.js +6 -0
- package/dist/chunk-0k1cs6pp.js +1 -0
- package/dist/chunk-1egjn203.js +704 -0
- package/dist/chunk-2wx29qga.js +5 -0
- package/dist/chunk-5m5rqmv7.js +1 -0
- package/dist/chunk-8ea5022g.js +114 -0
- package/dist/chunk-8xqn3c0w.js +2 -0
- package/dist/chunk-b4esxhmw.js +2 -0
- package/dist/chunk-b8e5wzwn.js +44 -0
- package/dist/chunk-bggt4n6e.js +2 -0
- package/dist/chunk-cwkg37rs.js +37 -0
- package/dist/chunk-dskvqt67.js +7355 -0
- package/dist/chunk-gahsdmxf.js +1617 -0
- package/dist/chunk-gnv3r2jg.js +1 -0
- package/dist/chunk-hg3c48cp.js +34 -0
- package/dist/chunk-m5azeva3.js +2 -0
- package/dist/chunk-r3qf56b3.js +92 -0
- package/dist/chunk-sdqa9ghv.js +141 -0
- package/dist/chunk-svrvvcm7.js +1 -0
- package/dist/chunk-v0p3hpc3.js +60 -0
- package/dist/chunk-wdzjbecg.js +50 -0
- package/dist/chunk-ww8k3g7j.js +1 -0
- package/dist/chunk-xmqfc62w.js +1 -0
- package/dist/chunk-xrebj679.js +435 -0
- package/dist/chunk-xt3s24vr.js +2 -0
- package/dist/chunk-y21zk0pn.js +4 -0
- package/dist/deploy/index.js +1 -168
- package/dist/dns/index.js +1 -41
- package/dist/drivers/index.js +1 -154
- package/dist/index.js +100 -6129
- package/dist/protection/index.js +1 -89
- package/dist/push/index.js +1 -509
- package/dist/spend/index.js +1 -173
- package/dist/ui/404.html +1 -1
- package/dist/ui/accept-invitation.html +1 -1
- package/dist/ui/access-denied.html +1 -1
- package/dist/ui/account/automation.html +6 -6
- package/dist/ui/account/security.html +2 -2
- package/dist/ui/applications/compose.html +6 -6
- package/dist/ui/applications/new.html +2 -2
- package/dist/ui/data/backups.html +5 -5
- package/dist/ui/data/services.html +5 -5
- package/dist/ui/data/volumes.html +6 -6
- package/dist/ui/index.html +6 -6
- package/dist/ui/infrastructure/topology.html +5 -5
- package/dist/ui/integrations.html +1 -1
- package/dist/ui/operations/alerts.html +5 -5
- package/dist/ui/operations/configuration.html +5 -5
- package/dist/ui/operations/jobs.html +5 -5
- package/dist/ui/operations/maintenance.html +5 -5
- package/dist/ui/operations/observability.html +6 -6
- package/dist/ui/operations/previews.html +6 -6
- package/dist/ui/operations/queue.html +6 -6
- package/dist/ui/operations/regions.html +6 -6
- package/dist/ui/operations/releases.html +6 -6
- package/dist/ui/operations/spend.html +6 -6
- package/dist/ui/operations/workloads.html +6 -6
- package/dist/ui/security.html +1 -1
- package/dist/ui/server/actions.html +5 -5
- package/dist/ui/server/activity.html +1 -1
- package/dist/ui/server/capacity.html +6 -6
- package/dist/ui/server/database.html +6 -6
- package/dist/ui/server/deployments.html +6 -6
- package/dist/ui/server/diagnostics.html +2 -2
- package/dist/ui/server/firewall.html +6 -6
- package/dist/ui/server/fleet.html +6 -6
- package/dist/ui/server/logs.html +6 -6
- package/dist/ui/server/metrics.html +6 -6
- package/dist/ui/server/security.html +2 -2
- package/dist/ui/server/services.html +1 -1
- package/dist/ui/server/sites.html +6 -6
- package/dist/ui/server/ssh-keys.html +6 -6
- package/dist/ui/server/team.html +6 -6
- package/dist/ui/server/terminal.html +1 -1
- package/dist/ui/serverless/alarms.html +5 -5
- package/dist/ui/serverless/assets.html +2 -2
- package/dist/ui/serverless/cost.html +1 -1
- package/dist/ui/serverless/data.html +6 -6
- package/dist/ui/serverless/deployments.html +2 -2
- package/dist/ui/serverless/firewall.html +1 -1
- package/dist/ui/serverless/functions.html +6 -6
- package/dist/ui/serverless/logs.html +6 -6
- package/dist/ui/serverless/metrics.html +2 -2
- package/dist/ui/serverless/queues.html +6 -6
- package/dist/ui/serverless/secrets.html +6 -6
- package/dist/ui/serverless/traces.html +6 -6
- package/dist/ui/serverless.html +5 -5
- package/package.json +3 -3
- package/dist/bin/chunk-jpjamjey.js +0 -6935
- package/dist/bin/chunk-m2zwtapr.js +0 -1
- package/dist/bin/chunk-rtczra13.js +0 -1
- package/dist/chunk-01d86gt1.js +0 -1324
- package/dist/chunk-050r7ycy.js +0 -46516
- package/dist/chunk-1c8dbv57.js +0 -7278
- package/dist/chunk-29rse4p1.js +0 -12203
- package/dist/chunk-32e7ya18.js +0 -642
- package/dist/chunk-4cjrg98a.js +0 -597
- package/dist/chunk-50jpda9q.js +0 -371
- package/dist/chunk-6a1t7fnq.js +0 -12121
- package/dist/chunk-728jvrr0.js +0 -1701
- package/dist/chunk-7m60qnc8.js +0 -1762
- package/dist/chunk-aa2dkn7b.js +0 -205
- package/dist/chunk-d48vtdj4.js +0 -433
- package/dist/chunk-f55nkpvb.js +0 -8
- package/dist/chunk-fgk8cqew.js +0 -152
- package/dist/chunk-he9a874b.js +0 -769
- package/dist/chunk-k2yyatfw.js +0 -10
- package/dist/chunk-k4px0bnv.js +0 -23
- package/dist/chunk-nsgqsmrh.js +0 -1779
- package/dist/chunk-q0st3se8.js +0 -42033
- package/dist/chunk-qr803fye.js +0 -2122
- package/dist/chunk-rds0sy87.js +0 -1771
- package/dist/chunk-ttz2ra5j.js +0 -12
- package/dist/chunk-v0bahtg2.js +0 -4
- package/dist/chunk-va2yd85b.js +0 -200
- package/dist/chunk-x9s0cqfx.js +0 -13
- package/dist/chunk-zqtpg06c.js +0 -1752
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mszgim4pl4u3mi"><meta name="title" content="stx Project"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="stx Project"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="stx Project"><meta name="twitter:description" content="A website built with stx templating engine"> <script data-stx-runtime src="/_stx/runtime.c696d17a.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Create application</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"><style> .wizard-hero{display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.wizard-shell{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:18px;align-items:start}.wizard-main{min-width:0}.stepper{display:grid;grid-template-columns:repeat(6,1fr);gap:5px;margin:18px 0}.step{border:0;background:transparent;color:var(--muted);display:grid;gap:7px;text-align:left;font-size:.7rem;padding:0}.step::before{content:"";height:3px;border-radius:4px;background:var(--line)}.step.active{color:var(--txt)}.step.active::before,.step.done::before{background:var(--accent)} .wizard-card{border:1px solid var(--line);border-radius:13px;background:var(--panel);padding:22px}.wizard-panel{display:none;gap:16px}.wizard-panel.active{display:grid}.wizard-panel h2{margin:0}.wizard-panel>p{margin:-8px 0 0}.choice-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}.choice{position:relative;border:1px solid var(--line);border-radius:10px;padding:14px;display:grid;gap:5px;cursor:pointer}.choice:has(input:checked){border-color:var(--accent);background:rgba(90,139,224,.1)}.choice input{position:absolute;opacity:0}.choice strong{font-size:.9rem}.choice small{color:var(--muted);line-height:1.4} .fields{display:grid;grid-template-columns:1fr 1fr;gap:11px}.fields.three{grid-template-columns:repeat(3,1fr)}label.field{display:grid;gap:6px;color:var(--txt3);font-size:.72rem;font-weight:750;letter-spacing:.035em}.field input,.field select,.field textarea{width:100%;box-sizing:border-box;background:rgba(255,255,255,.045);border:1px solid var(--panel-br);border-radius:8px;padding:10px;color:var(--txt);font:inherit;font-weight:450;letter-spacing:0}.field :is(input,select,textarea):focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(90,139,224,.12)}.field.check{display:flex;align-items:center;gap:8px}.field.check input{width:auto}.conditional[hidden]{display:none}.advanced{border:1px solid var(--line);border-radius:9px;padding:11px}.advanced summary{cursor:pointer;font-weight:700;font-size:.8rem}.advanced>div{display:grid;gap:11px;margin-top:12px} .detect-card,.plan-block,.draft-card,.registry-row{border:1px solid var(--line);border-radius:10px;padding:13px;display:grid;gap:8px}.detect-card.selected{border-color:var(--accent)}.detect-head,.draft-head,.registry-row{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.evidence{display:flex;gap:6px;flex-wrap:wrap}.evidence span{font-size:.68rem;padding:4px 7px;border-radius:99px;background:rgba(255,255,255,.05);color:var(--muted)}.dropzone{border:1px dashed var(--line);border-radius:11px;padding:24px;text-align:center;color:var(--muted)}.dropzone.drag{border-color:var(--accent);background:rgba(90,139,224,.08)} .wizard-footer{display:flex;justify-content:space-between;gap:10px;margin-top:16px}.footer-group{display:flex;gap:8px;flex-wrap:wrap}.wizard-aside{position:sticky;top:18px;display:grid;gap:14px}.drafts{display:grid;gap:8px;max-height:420px;overflow:auto}.draft-card{background:rgba(255,255,255,.025)}.draft-card h3{margin:0;font-size:.85rem}.draft-card p{margin:0}.review-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.plan-block h3{margin:0;font-size:.82rem}.plan-block ul{margin:0;padding-left:18px}.config-preview{max-height:310px;overflow:auto;font-size:.72rem;white-space:pre-wrap;word-break:break-word}.issue{color:#ff9ca2}.ok-text{color:#7adba0}.confirm-box{border:1px solid rgba(235,188,82,.45);background:rgba(235,188,82,.07);border-radius:10px;padding:13px}.status-line{min-height:1.3em;color:var(--muted)} @media(max-width:1000px){.wizard-shell{grid-template-columns:1fr}.wizard-aside{position:static;grid-template-columns:1fr 1fr}.choice-grid{grid-template-columns:1fr 1fr}.step span{display:none}}@media(max-width:620px){.fields,.fields.three,.review-grid,.wizard-aside{grid-template-columns:1fr}.choice-grid{grid-template-columns:1fr}.wizard-card{padding:16px}.wizard-hero{display:grid}.wizard-footer{align-items:flex-start}.stepper{gap:3px}} </style><style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx-auto><a data-stx-scope="stx_scope_nav_8" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>Project</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="active" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment & secrets</a><a class="" href="/data/backups?env=production">Backups & recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>Project</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
|
|
1
|
+
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mszjhoqdmbbes1"><meta name="title" content="stx Project"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="stx Project"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="stx Project"><meta name="twitter:description" content="A website built with stx templating engine"> <script data-stx-runtime src="/_stx/runtime.c696d17a.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Create application</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"><style> .wizard-hero{display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.wizard-shell{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:18px;align-items:start}.wizard-main{min-width:0}.stepper{display:grid;grid-template-columns:repeat(6,1fr);gap:5px;margin:18px 0}.step{border:0;background:transparent;color:var(--muted);display:grid;gap:7px;text-align:left;font-size:.7rem;padding:0}.step::before{content:"";height:3px;border-radius:4px;background:var(--line)}.step.active{color:var(--txt)}.step.active::before,.step.done::before{background:var(--accent)} .wizard-card{border:1px solid var(--line);border-radius:13px;background:var(--panel);padding:22px}.wizard-panel{display:none;gap:16px}.wizard-panel.active{display:grid}.wizard-panel h2{margin:0}.wizard-panel>p{margin:-8px 0 0}.choice-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}.choice{position:relative;border:1px solid var(--line);border-radius:10px;padding:14px;display:grid;gap:5px;cursor:pointer}.choice:has(input:checked){border-color:var(--accent);background:rgba(90,139,224,.1)}.choice input{position:absolute;opacity:0}.choice strong{font-size:.9rem}.choice small{color:var(--muted);line-height:1.4} .fields{display:grid;grid-template-columns:1fr 1fr;gap:11px}.fields.three{grid-template-columns:repeat(3,1fr)}label.field{display:grid;gap:6px;color:var(--txt3);font-size:.72rem;font-weight:750;letter-spacing:.035em}.field input,.field select,.field textarea{width:100%;box-sizing:border-box;background:rgba(255,255,255,.045);border:1px solid var(--panel-br);border-radius:8px;padding:10px;color:var(--txt);font:inherit;font-weight:450;letter-spacing:0}.field :is(input,select,textarea):focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(90,139,224,.12)}.field.check{display:flex;align-items:center;gap:8px}.field.check input{width:auto}.conditional[hidden]{display:none}.advanced{border:1px solid var(--line);border-radius:9px;padding:11px}.advanced summary{cursor:pointer;font-weight:700;font-size:.8rem}.advanced>div{display:grid;gap:11px;margin-top:12px} .detect-card,.plan-block,.draft-card,.registry-row{border:1px solid var(--line);border-radius:10px;padding:13px;display:grid;gap:8px}.detect-card.selected{border-color:var(--accent)}.detect-head,.draft-head,.registry-row{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.evidence{display:flex;gap:6px;flex-wrap:wrap}.evidence span{font-size:.68rem;padding:4px 7px;border-radius:99px;background:rgba(255,255,255,.05);color:var(--muted)}.dropzone{border:1px dashed var(--line);border-radius:11px;padding:24px;text-align:center;color:var(--muted)}.dropzone.drag{border-color:var(--accent);background:rgba(90,139,224,.08)} .wizard-footer{display:flex;justify-content:space-between;gap:10px;margin-top:16px}.footer-group{display:flex;gap:8px;flex-wrap:wrap}.wizard-aside{position:sticky;top:18px;display:grid;gap:14px}.drafts{display:grid;gap:8px;max-height:420px;overflow:auto}.draft-card{background:rgba(255,255,255,.025)}.draft-card h3{margin:0;font-size:.85rem}.draft-card p{margin:0}.review-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.plan-block h3{margin:0;font-size:.82rem}.plan-block ul{margin:0;padding-left:18px}.config-preview{max-height:310px;overflow:auto;font-size:.72rem;white-space:pre-wrap;word-break:break-word}.issue{color:#ff9ca2}.ok-text{color:#7adba0}.confirm-box{border:1px solid rgba(235,188,82,.45);background:rgba(235,188,82,.07);border-radius:10px;padding:13px}.status-line{min-height:1.3em;color:var(--muted)} @media(max-width:1000px){.wizard-shell{grid-template-columns:1fr}.wizard-aside{position:static;grid-template-columns:1fr 1fr}.choice-grid{grid-template-columns:1fr 1fr}.step span{display:none}}@media(max-width:620px){.fields,.fields.three,.review-grid,.wizard-aside{grid-template-columns:1fr}.choice-grid{grid-template-columns:1fr}.wizard-card{padding:16px}.wizard-hero{display:grid}.wizard-footer{align-items:flex-start}.stepper{gap:3px}} </style><style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx-auto><a data-stx-scope="stx_scope_nav_5" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>Project</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="active" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment & secrets</a><a class="" href="/data/backups?env=production">Backups & recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>Project</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
|
|
2
2
|
(function() {
|
|
3
3
|
var { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
4
4
|
var __destroyHooks = [];
|
|
@@ -349,7 +349,7 @@
|
|
|
349
349
|
|
|
350
350
|
|
|
351
351
|
try { if (typeof __stxScopeRenames !== 'undefined' && __stxScopeRenames) { for (var __stxRK in __stxScopeRenames) __scopeRegistration[__stxRK] = __stxScopeRenames[__stxRK]; } } catch (e) { /* no renames */ }
|
|
352
|
-
window.stx._scopes['
|
|
352
|
+
window.stx._scopes['stx_scope_nav_5'] = __scopeRegistration;
|
|
353
353
|
})();
|
|
354
354
|
</script> <div class="wrap" id="main-content"><div class="crumbs"><a href="/serverless">Project</a><span class="sep">/</span>Create application</div><header class="page wizard-hero"><div><h1>Create application</h1><p>Import source, review detected defaults, and deploy one reproducible manifest.</p></div><button class="btn ghost" type="button" id="new-draft">Start over</button></header><div class="section wizard-shell"><main class="wizard-main"><nav class="stepper" aria-label="Application setup"><button class="active step" data-step="source"><span>1 · Source</span></button><button class="step" data-step="build"><span>2 · Build</span></button><button class="step" data-step="runtime"><span>3 · Runtime</span></button><button class="step" data-step="environment"><span>4 · Environment</span></button><button class="step" data-step="domain"><span>5 · Domain</span></button><button class="step" data-step="review"><span>6 · Review</span></button></nav><form class="wizard-card" id="wizard-form"><section class="active wizard-panel" data-panel="source"><div><h2>Choose source</h2><p class="note">Credentials stay in their connection stores, outside the application manifest.</p></div><div class="choice-grid"><label class="choice"><input type="radio" name="sourceKind" value="git" checked><strong>Git repository</strong><small>Authorized provider connection and ref.</small></label><label class="choice"><input type="radio" name="sourceKind" value="local"><strong>Local config</strong><small>Inspect this project without executing code.</small></label><label class="choice"><input type="radio" name="sourceKind" value="artifact"><strong>Upload artifact</strong><small>Secure ZIP or TAR inspection.</small></label><label class="choice"><input type="radio" name="sourceKind" value="image"><strong>OCI image</strong><small>Prebuilt image from a registry.</small></label></div><div class="conditional" data-source="git"><div class="fields"><label class="field">Connection<select name="gitConnection"></select></label><label class="field">Repository<select name="gitRepository"></select></label><label class="field">Branch or tag<input name="gitRef" value="main"></label><label class="field">Monorepo root<input name="gitRoot" value="."></label></div><details class="advanced"><summary>Advanced Git options</summary><div><div class="fields"><label class="field">Sparse paths<textarea name="sparsePaths" rows="2" placeholder="apps/web packages/shared"></textarea></label><label class="field">Watched paths<textarea name="watchPaths" rows="2" placeholder="apps/web/**"></textarea></label></div><label class="check field"><input type="checkbox" name="submodules">Include submodules</label></div></details></div><div class="conditional" data-source="local" hidden><label class="field">Project-relative root<input name="localRoot" value="."></label></div><div class="conditional" data-source="artifact" hidden><div class="dropzone" id="artifact-drop">Drop a .zip or .tar here, or <button class="btn ghost sm" type="button" id="choose-artifact">choose a file</button><input id="artifact-file" type="file" accept=".zip,.tar" hidden><div id="artifact-choice"></div></div></div><div class="conditional" data-source="image" hidden><div class="fields"><label class="field">Image reference<input name="image" placeholder="registry.example/acme/web:release"></label><label class="field">Registry connection<select name="registryConnection"><option value="">Public image / none</option></select></label></div><details class="advanced"><summary>Add private registry</summary><div><div class="fields"><label class="field">Name<input name="registryName" placeholder="Production OCI"></label><label class="field">Host<input name="registryHost" placeholder="https://registry.example"></label><label class="field">Username<input name="registryUsername" autocomplete="off"></label><label class="field">Password or token<input name="registryPassword" type="password" autocomplete="new-password"></label></div><button class="btn ghost" id="add-registry" type="button">Encrypt connection</button></div></details></div><div class="fields"><label class="field">Application name<input name="name" value="Web" required></label><label class="field">Slug<input name="slug" value="web" pattern="[a-z0-9][a-z0-9-]{1,62}" required></label></div><div class="footer-group"><button class="btn ghost" type="button" id="detect">Detect framework & build</button><span class="status-line" id="detect-status"></span></div></section><section class="wizard-panel" data-panel="build"><div><h2>Detection & build</h2><p class="note">Evidence is shown explicitly. Pick any strategy to override the recommendation.</p></div><div id="detection-results"></div><div class="fields"><label class="field">Build strategy<select name="strategy"><option value="buildpack">Buildpack-style detection</option><option value="server">Server command</option><option value="static">Static output</option><option value="dockerfile">Dockerfile</option><option value="serverless">Serverless package</option><option value="prebuilt_image">Prebuilt image</option></select></label><label class="field">Language runtime<select name="languageRuntime"><option value="bun">Bun</option><option value="node">Node.js</option><option value="php">PHP</option></select></label></div><div class="fields"><label class="field">Install command<input name="installCommand"></label><label class="field">Build command<input name="buildCommand"></label><label class="field">Start command<input name="startCommand"></label><label class="field">Publish directory<input name="publishDirectory" value="dist"></label></div><details class="advanced"><summary>Advanced build options</summary><div><div class="fields"><label class="field">Build context<input name="buildContext" value="."></label><label class="field">Dockerfile path<input name="dockerfile" value="Dockerfile"></label><label class="field">Target stage<input name="targetStage"></label><label class="field">Runtime version<input name="runtimeVersion"></label><label class="field">Build args<textarea name="buildArgs" rows="3" placeholder="PUBLIC_URL=/"></textarea></label><label class="field">Write-only build secret names<textarea name="buildSecrets" rows="3" placeholder="NPM_TOKEN"></textarea></label></div></div></details></section><section class="wizard-panel" data-panel="runtime"><div><h2>Runtime & resources</h2><p class="note">Unsupported build/runtime combinations are rejected before provider mutation.</p></div><div class="fields three"><label class="field">Target<select name="target"><option value="server">Server</option><option value="serverless">Serverless</option><option value="container">Container / Fargate</option></select></label><label class="field">Architecture<select name="architecture"><option value="x86_64">x86_64</option><option value="arm64">arm64</option></select></label><label class="field">Port<input name="port" type="number" min="1" max="65535" value="3000"></label><label class="field">CPU (vCPU)<input name="cpu" type="number" min="0.25" step="0.25" value="0.5"></label><label class="field">Memory (MB)<input name="memory" type="number" min="128" step="128" value="512"></label><label class="field">Minimum instances<input name="minInstances" type="number" min="0" value="0"></label></div><p class="note">Container target uses the full-stack ECS/Fargate service path, including image/build, health, networking, and scaling settings.</p></section><section class="wizard-panel" data-panel="environment"><div><h2>Environment & secrets</h2><p class="note">Drafts store secret names only. Secret values must already exist in the environment secrets boundary.</p></div><div class="fields"><label class="field">Plain environment variables<textarea name="environmentValues" rows="7" placeholder="APP_ENV=production LOG_LEVEL=info"></textarea></label><label class="field">Required secret names<textarea name="secretNames" rows="7" placeholder="DATABASE_PASSWORD API_TOKEN"></textarea></label></div><label class="field">Secret names already configured<textarea name="suppliedSecretNames" rows="3" placeholder="DATABASE_PASSWORD"></textarea></label></section><section class="wizard-panel" data-panel="domain"><div><h2>Domain & health</h2><p class="note">Validation happens before a resource or DNS record is created.</p></div><div class="fields"><label class="field">Environment<select name="environmentId"></select></label><label class="field">Hostname<input name="hostname" placeholder="web.example.com"></label><label class="field">Health protocol<select name="healthProtocol"><option value="http">HTTP</option><option value="https">HTTPS</option><option value="tcp">TCP</option></select></label><label class="field">Health path<input name="healthPath" value="/health"></label></div><label class="check field"><input type="checkbox" name="tls" checked>Provision TLS when a hostname is set</label></section><section class="wizard-panel" data-panel="review"><div><h2>Review & deploy</h2><p class="note">This exact manifest is shared with CLI and API automation.</p></div><div class="review-grid"><div class="plan-block"><h3>Preflight</h3><div id="plan-issues"></div></div><div class="plan-block"><h3>Capabilities & cost drivers</h3><div id="plan-cost"></div></div></div><div class="plan-block"><h3>Generated manifest</h3><pre class="config-preview" id="manifest-preview"></pre></div><div class="plan-block"><h3>Config patch</h3><pre class="config-preview" id="patch-preview"></pre></div><div class="confirm-box"><label class="field">Type the target environment to confirm<input name="confirmEnvironment" autocomplete="off"></label><p class="note" id="confirm-help"></p></div></section><div class="wizard-footer"><div class="footer-group"><button class="btn ghost" id="back" type="button">Back</button><button class="btn ghost" id="save" type="button">Save draft</button></div><div class="footer-group"><button class="btn" id="next" type="button">Continue</button><button class="btn" id="deploy" type="button" hidden>Confirm & deploy</button></div></div><p class="status-line" id="wizard-status" role="status"></p></form></main><aside class="wizard-aside"><section class="panel"><div class="section-heading"><div><h2>Saved drafts</h2><p class="note">Resume without hidden secret values.</p></div></div><div class="drafts" id="draft-list"><div class="note">Loading…</div></div></section><section class="panel"><h2>After creation</h2><ul class="note"><li>Watch the queued operation</li><li>Confirm health checks</li><li>Verify domain and TLS</li><li>Enable Git auto-deploy</li><li>Set alerts and scaling</li></ul></section></aside></div></div> <script data-stx-scoped data-stx-run="always">
|
|
355
355
|
;(function() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="
|
|
2
|
-
function
|
|
1
|
+
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mszjhoqdmbbes1"><meta name="title" content="stx Project"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="stx Project"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="stx Project"><meta name="twitter:description" content="A website built with stx templating engine"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud · Backups & recovery</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"> <script data-stx-runtime src="/_stx/runtime.c696d17a.js"></script> <script data-stx-composables src="/_stx/chunk.5ddb5087.js"></script> <script data-stx-scoped>
|
|
2
|
+
function __stx_setup_1787110569437_5() {
|
|
3
3
|
const { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
4
4
|
|
|
5
5
|
var when = undefined;
|
|
@@ -367,9 +367,9 @@ activeJobs = __stxBundle_0750f100c970["activeJobs"];
|
|
|
367
367
|
actionError = __stxBundle_0750f100c970["actionError"];
|
|
368
368
|
return { when, verifyPoint, values, tone, testDestination, tab, submitRestore, services, selectedPoint, safeError, runPolicy, restoreTarget, restorePlan, refresh, protectPoint, post, pollingState, pollingError, policyOpen, policyName, openRestore, notice, load, latestFailures, lastUpdatedAt, jobsForPoint, inventory, endpoint, destinationOpen, destinationName, createPolicy, createDestination, bytes, busy, api, activeJobs, actionError, __stxBundle_0750f100c970 };
|
|
369
369
|
}
|
|
370
|
-
window.__stx_latestSetup=
|
|
371
|
-
if(window.stx)window.stx._latestSetup=
|
|
372
|
-
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx="
|
|
370
|
+
window.__stx_latestSetup=__stx_setup_1787110569437_5;
|
|
371
|
+
if(window.stx)window.stx._latestSetup=__stx_setup_1787110569437_5;
|
|
372
|
+
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx="__stx_setup_1787110569437_5"><a data-stx-scope="stx_scope_nav_7" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>Project</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment & secrets</a><a class="active" href="/data/backups?env=production">Backups & recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>Project</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
|
|
373
373
|
(function() {
|
|
374
374
|
var { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
375
375
|
var __destroyHooks = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="
|
|
2
|
-
function
|
|
1
|
+
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mszjhoqdmbbes1"><meta name="title" content="stx Project"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="stx Project"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="stx Project"><meta name="twitter:description" content="A website built with stx templating engine"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud · Data services</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"> <script data-stx-runtime src="/_stx/runtime.c696d17a.js"></script> <script data-stx-composables src="/_stx/chunk.5ddb5087.js"></script> <script data-stx-scoped>
|
|
2
|
+
function __stx_setup_1787110569436_4() {
|
|
3
3
|
const { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
4
4
|
|
|
5
5
|
var when = undefined;
|
|
@@ -331,9 +331,9 @@ actionLabels = __stxBundle_0ec490371d35["actionLabels"];
|
|
|
331
331
|
actionError = __stxBundle_0ec490371d35["actionError"];
|
|
332
332
|
return { when, tone, statusFilter, services, serviceOperations, selected, search, runConfiguredAction, runAction, reveal, refresh, providerFilter, previewAction, pollingState, pollingError, plan, operations, operationAction, oneTime, observationEntries, notice, load, lastUpdatedAt, inspect, guidance, formBody, filtered, engineFilter, createService, createOpen, copy, chooseAction, busy, api, actionLabels, actionError, __stxBundle_0ec490371d35 };
|
|
333
333
|
}
|
|
334
|
-
window.__stx_latestSetup=
|
|
335
|
-
if(window.stx)window.stx._latestSetup=
|
|
336
|
-
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx="
|
|
334
|
+
window.__stx_latestSetup=__stx_setup_1787110569436_4;
|
|
335
|
+
if(window.stx)window.stx._latestSetup=__stx_setup_1787110569436_4;
|
|
336
|
+
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx="__stx_setup_1787110569436_4"><a data-stx-scope="stx_scope_nav_6" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>Project</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment & secrets</a><a class="" href="/data/backups?env=production">Backups & recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="active" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>Project</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
|
|
337
337
|
(function() {
|
|
338
338
|
var { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
339
339
|
var __destroyHooks = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="
|
|
2
|
-
function
|
|
1
|
+
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mszjhoqdmbbes1"><meta name="title" content="stx Project"><meta name="description" content="A website built with stx templating engine"><meta property="og:title" content="stx Project"><meta property="og:description" content="A website built with stx templating engine"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="stx Project"><meta name="twitter:description" content="A website built with stx templating engine"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud · Persistent volumes</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"> <script data-stx-runtime src="/_stx/runtime.c696d17a.js"></script> <script data-stx-composables src="/_stx/chunk.5ddb5087.js"></script> <script data-stx-scoped>
|
|
2
|
+
function __stx_setup_1787110569424_0() {
|
|
3
3
|
const { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
4
4
|
|
|
5
5
|
var volumes = undefined;
|
|
@@ -219,9 +219,9 @@ api = __stxBundle_87f7d53bdfa9["api"];
|
|
|
219
219
|
adopt = __stxBundle_87f7d53bdfa9["adopt"];
|
|
220
220
|
return { volumes, tone, snapshot, restore, resize, remove, refresh, pollingState, pollingError, operationFor, mutate, load, lastUpdatedAt, filtered, discover, detach, create, bytes, body, attach, api, adopt, __stxBundle_87f7d53bdfa9 };
|
|
221
221
|
}
|
|
222
|
-
window.__stx_latestSetup=
|
|
223
|
-
if(window.stx)window.stx._latestSetup=
|
|
224
|
-
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx="
|
|
222
|
+
window.__stx_latestSetup=__stx_setup_1787110569424_0;
|
|
223
|
+
if(window.stx)window.stx._latestSetup=__stx_setup_1787110569424_0;
|
|
224
|
+
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.906ee17c.css"></head><body data-stx="__stx_setup_1787110569424_0"><a data-stx-scope="stx_scope_nav_1" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>Project</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment & secrets</a><a class="" href="/data/backups?env=production">Backups & recovery</a><a class="active" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="active" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>Project</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
|
|
225
225
|
(function() {
|
|
226
226
|
var { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
227
227
|
var __destroyHooks = [];
|
|
@@ -572,6 +572,6 @@ if(window.stx)window.stx._latestSetup=__stx_setup_1787105573900_4;
|
|
|
572
572
|
|
|
573
573
|
|
|
574
574
|
try { if (typeof __stxScopeRenames !== 'undefined' && __stxScopeRenames) { for (var __stxRK in __stxScopeRenames) __scopeRegistration[__stxRK] = __stxScopeRenames[__stxRK]; } } catch (e) { /* no renames */ }
|
|
575
|
-
window.stx._scopes['
|
|
575
|
+
window.stx._scopes['stx_scope_nav_1'] = __scopeRegistration;
|
|
576
576
|
})();
|
|
577
577
|
</script> <main class="volume-wrap wrap" id="main-content"><div class="crumbs">Infrastructure <span class="sep">/</span> Persistent volumes</div><header class="page"><div><h1>Persistent volumes</h1><p>Storage with stable identity, explicit consumers, recovery status, capability-aware operations, and safe retirement.</p></div><div class="header-actions" x-cloak><span class="pill" :class="pollingState()==='live'?'ok':'warn'" x-cloak>{{ pollingState() }}</span><small x-cloak>{{ lastUpdatedAt()?.toLocaleTimeString()||'connecting' }}</small><button class="btn ghost sm" @click="discover()">Discover orphans</button><button class="btn sm" @click="createOpen.set(!createOpen())" x-cloak>{{ createOpen()?'Close':'New volume' }}</button></div></header><p class="notice" role="status" @show="!!notice()" x-cloak>{{ notice() }}</p><p class="bad notice" role="alert" @show="!!error()||!!pollingError()" x-cloak>{{ error()||pollingError() }}</p><section class="summary"><article class="panel"><b>Volumes</b><strong x-cloak>{{ volumes().length }}</strong><small>release-independent</small></article><article class="panel"><b>Attached</b><strong x-cloak>{{ volumes().filter(item=>item.attachments.some(m=>m.observedState==='attached')).length }}</strong><small>active consumers</small></article><article class="panel"><b>Protected</b><strong x-cloak>{{ volumes().filter(item=>item.backupState==='protected').length }}</strong><small>recent verified backup</small></article><article class="panel"><b>Orphans</b><strong x-cloak>{{ volumes().filter(item=>item.orphaned).length }}</strong><small>adopt, attach, snapshot, or delete</small></article></section><form class="create-volume panel" @show="createOpen()" @submit="create($event)" x-cloak><div class="wide"><h2>Create persistent volume</h2><p class="note">The identity remains stable through releases. Provider limits are shown before unsupported operations can be submitted.</p></div><label>Name<input name="name" pattern="[a-z0-9][a-z0-9_.-]{1,62}" required placeholder="uploads"></label><label x-cloak>Driver<select name="driver" required><template :for="driver in providers()"><option :value="driver.provider+'|'+driver.type">{{ driver.provider }} · {{ driver.type }}</option></template></select></label><label>Capacity bytes<input name="capacityBytes" type="number" min="1" placeholder="optional"></label><label>Filesystem<input name="filesystem" placeholder="provider default"></label><label class="check"><input name="encrypted" type="checkbox"> Encrypted where supported</label><button class="btn" type="submit" :disabled="busy()">Queue create</button></form><section class="filters panel" x-cloak><input type="search" aria-label="Search volumes" placeholder="Search volume, driver, or state" @input="search.set($event.currentTarget.value)"><span x-cloak>{{ filtered().length }} shown</span></section><div class="volume-workspace" :class="{detail:!!selected()}" x-cloak><section class="volume-cards" x-cloak><template :for="item in filtered()"><article class="panel volume-card" :class="{selected:selected()?.id===item.id}" x-cloak><div class="volume-head" x-cloak><div x-cloak><span class="pill" :class="tone(item.status)" x-cloak>{{ item.status }}</span><span class="pill" x-cloak>{{ item.provider }} · {{ item.type }}</span><h2 x-cloak>{{ item.name }}</h2></div><button class="btn ghost sm" @click="selected.set(item)">Details</button></div><div class="volume-facts"><div><small>Capacity / usage</small><b x-cloak>{{ bytes(item.usedBytes) }} / {{ bytes(item.capacityBytes) }}</b><span x-cloak>{{ item.usagePercent==null?'usage unavailable':item.usagePercent+'%' }}</span></div><div><small>Consumers</small><b x-cloak>{{ item.attachments.filter(m=>m.observedState==='attached').length }}</b><span x-cloak>{{ item.attachments.map(m=>m.targetPath).join(', ')||'detached' }}</span></div><div><small>Recovery</small><b x-cloak>{{ item.backupState }}</b><span x-cloak>{{ item.snapshots.length }} snapshots · {{ item.lastBackupAt||'never backed up' }}</span></div></div><p class="notice warn" @show="!!operationFor(item)" x-cloak>{{ operationFor(item)?.operation?.kind }} · {{ operationFor(item)?.operation?.state }}</p><div class="actions" @show="item.orphaned" x-cloak><button class="btn sm" @click="adopt(item)">Adopt safely</button></div></article></template><div class="empty panel" @show="!filtered().length" x-cloak><strong>No persistent volumes</strong><span>Create one or discover provider resources without deleting anything automatically.</span></div></section><aside class="panel volume-detail" @show="!!selected()" x-cloak><div class="detail-head"><div><small>Selected volume</small><h2 x-cloak>{{ selected()?.name }}</h2></div><button class="btn ghost sm" @click="selected.set(null)">Close</button></div><div class="capabilities"><h3>Capabilities</h3><template :for="entry in Object.entries(selected()?.capabilities||{})"><p x-cloak><b x-cloak>{{ entry[0] }}</b><span :class="entry[1].supported?'ok-text':'muted'" x-cloak>{{ entry[1].supported?'supported':entry[1].reason }}</span></p></template></div><div class="detail-actions"><button class="btn sm" @click="mountOpen.set(!mountOpen())" :disabled="!selected()?.capabilities?.attach?.supported">Attach</button><button class="btn ghost sm" @click="resize()" :disabled="!selected()?.capabilities?.resize?.supported">Resize</button><button class="btn ghost sm" @click="snapshot()" :disabled="!selected()?.capabilities?.snapshot?.supported">Snapshot</button><a class="btn ghost sm" href="/data/backups">Backups</a><button class="btn danger sm" @click="remove()" :disabled="selected()?.attachments.some(item=>item.observedState==='attached')">Delete</button></div><form class="mount-form" @show="mountOpen()" @submit="attach($event)" x-cloak><h3>Mount editor</h3><label x-cloak>Workload<select name="resourceId" required><template :for="resource in resources()"><option :value="resource.id">{{ resource.name }} · {{ resource.kind }}</option></template></select></label><label>Target path<input name="targetPath" required placeholder="/app/uploads"></label><label>UID<input name="uid" type="number" min="0"></label><label>GID<input name="gid" type="number" min="0"></label><label>Mode<input name="mode" pattern="0?[0-7]{3}" placeholder="0750"></label><label>Propagation<select name="propagation"><option>private</option><option>rprivate</option><option>shared</option><option>rshared</option></select></label><label class="check"><input name="readOnly" type="checkbox"> Read only</label><button class="btn" type="submit">Validate and attach</button></form><section><h3>Consumers</h3><template :for="mount in selected()?.attachments||[]"><article class="mount-row" x-cloak><div x-cloak><b x-cloak>{{ resources().find(item=>item.id===mount.resourceId)?.name||mount.resourceId }}</b><code x-cloak>{{ mount.targetPath }}</code><small x-cloak>{{ mount.readOnly?'read only':'read/write' }} · {{ mount.observedState }}</small></div><button class="btn danger sm" @click="detach(mount)" :disabled="mount.observedState!=='attached'">Drain & detach</button></article></template><p class="muted" @show="!selected()?.attachments?.length" x-cloak>No workloads consume this volume.</p></section><section><h3>Recovery points</h3><template :for="snapshot in selected()?.snapshots||[]"><p x-cloak><b x-cloak>{{ snapshot.status }}</b> {{ snapshot.name }} <button class="btn ghost sm" @click="restore(snapshot)" :disabled="!selected()?.capabilities?.restore?.supported">Restore replacement</button></p></template><template :for="point in recoveryPoints().filter(item=>item.resourceId===selected()?.resourceId)"><p x-cloak><b x-cloak>{{ point.verificationState }}</b> {{ point.pointInTime }}</p></template><p class="muted" @show="!selected()?.snapshots?.length" x-cloak>Link a backup policy for verified recovery and restore drills.</p></section></aside></div></main><style> .volume-wrap{padding-bottom:5rem}.header-actions,.actions,.detail-actions{display:flex;gap:.55rem;align-items:center;flex-wrap:wrap}.summary{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin:1rem 0}.summary article{display:grid;gap:.3rem}.summary strong{font-size:1.8rem}.create-volume,.mount-form{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;margin:1rem 0}.wide{grid-column:1/-1}.create-volume label,.mount-form label{display:grid;gap:.35rem}.filters{display:flex;gap:1rem;align-items:center;margin:1rem 0}.filters input{flex:1}.volume-workspace{display:grid}.volume-workspace.detail{grid-template-columns:minmax(0,1fr) minmax(320px,430px);gap:1rem}.volume-cards{display:grid;gap:1rem}.volume-card{display:grid;gap:1rem}.volume-head,.detail-head{display:flex;justify-content:space-between;gap:1rem}.volume-head h2{margin:.5rem 0 0}.volume-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.volume-facts div{display:grid;gap:.25rem}.volume-detail{position:sticky;top:1rem;align-self:start;display:grid;gap:1.25rem}.capabilities p,.mount-row{display:flex;justify-content:space-between;gap:1rem;border-bottom:1px solid var(--border);padding:.55rem 0}.mount-row div{display:grid;gap:.25rem}.ok-text{color:var(--success)}.muted{color:var(--muted)}@media(max-width:900px){.summary{grid-template-columns:repeat(2,1fr)}.volume-workspace.detail{grid-template-columns:1fr}.volume-detail{position:static}.volume-facts{grid-template-columns:1fr}}@media(max-width:560px){.summary,.create-volume,.mount-form{grid-template-columns:1fr}.wide{grid-column:auto}} </style></body></html>
|
package/dist/ui/index.html
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="
|
|
2
|
-
function
|
|
1
|
+
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mszjhoqdmbbes1"><meta name="title" content="ts-cloud - Dashboard"><meta name="description" content="ts-cloud server & deployment dashboard"><meta property="og:title" content="ts-cloud - Dashboard"><meta property="og:description" content="ts-cloud server & deployment dashboard"><meta property="og:type" content="website"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="ts-cloud - Dashboard"><meta name="twitter:description" content="ts-cloud server & deployment dashboard"> <script data-stx-runtime src="/_stx/runtime.c696d17a.js"></script> <script data-stx-composables src="/_stx/chunk.5ddb5087.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Dashboard</title><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E"><link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"><link rel="stylesheet" href="/_stx/style.448ab192.css"><meta name="description" content="ts-cloud server & deployment dashboard"> <script data-stx-scoped>
|
|
2
|
+
function __stx_setup_1787110573869_32() {
|
|
3
3
|
const { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
4
4
|
|
|
5
5
|
var initialData = null;
|
|
@@ -161,9 +161,9 @@ barStyle = __stxBundle_87ebf77e804c["barStyle"];
|
|
|
161
161
|
barCss = __stxBundle_87ebf77e804c["barCss"];
|
|
162
162
|
return { svcTone, servicesC, pollingState, pollingError, pctOf, pTone, pDisp, overallWordC, overallC, n, memSub, memP, loadP, liveData, indicator, gbVal, diskP, data, cpuSub, cpuP, barStyle, barCss, __stxBundle_87ebf77e804c };
|
|
163
163
|
}
|
|
164
|
-
window.__stx_latestSetup=
|
|
165
|
-
if(window.stx)window.stx._latestSetup=
|
|
166
|
-
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.b7a99a5c.css"></head><body data-stx="
|
|
164
|
+
window.__stx_latestSetup=__stx_setup_1787110573869_32;
|
|
165
|
+
if(window.stx)window.stx._latestSetup=__stx_setup_1787110573869_32;
|
|
166
|
+
</script> <style data-stx-cloak>[x-cloak]{display:none !important}</style><link data-crosswind="generated" rel="stylesheet" href="/_stx/crosswind.b7a99a5c.css"></head><body data-stx="__stx_setup_1787110573869_32"><a data-stx-scope="stx_scope_nav_49" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>stacks-production-app</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="active" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment & secrets</a><a class="" href="/data/backups?env=production">Backups & recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>stacks-production-app</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
|
|
167
167
|
(function() {
|
|
168
168
|
var { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
169
169
|
var __destroyHooks = [];
|
|
@@ -514,6 +514,6 @@ if(window.stx)window.stx._latestSetup=__stx_setup_1787105577384_32;
|
|
|
514
514
|
|
|
515
515
|
|
|
516
516
|
try { if (typeof __stxScopeRenames !== 'undefined' && __stxScopeRenames) { for (var __stxRK in __stxScopeRenames) __scopeRegistration[__stxRK] = __stxScopeRenames[__stxRK]; } } catch (e) { /* no renames */ }
|
|
517
|
-
window.stx._scopes['
|
|
517
|
+
window.stx._scopes['stx_scope_nav_49'] = __scopeRegistration;
|
|
518
518
|
})();
|
|
519
519
|
</script> <div class="wrap"><header class="page"><div><h1>Server Dashboard</h1><p>Hetzner · fsn1 · Linux</p><div class="server-line"><span>IP <b>-</b></span><span>Uptime <b>-</b></span><span>CPUs <b>4</b></span><span class="pill" :class="overallC()" x-cloak>{{ overallWordC() }}</span></div></div><div class="header-actions" x-cloak><span class="env" :class="{ bad: pollingState() === 'stale' }" :title="pollingState() === 'stale' ? pollingError() : 'Auto-refreshing every 10s'" x-cloak>{{ indicator() }}</span><a class="btn ghost" href="/server/actions">Operations</a></div></header><div class="grid cards"><a class="panel" href="/server/metrics"><h3>CPU utilization</h3><div class="stat" x-cloak>{{ pDisp(cpuP()) }}<small x-cloak>{{ cpuSub() }}</small></div><div :class="barCss(cpuP())"><i :style="barStyle(cpuP())"></i></div></a><a class="panel" href="/server/metrics"><h3>Memory</h3><div class="stat" x-cloak>{{ pDisp(memP()) }}<small x-cloak>{{ memSub() }}</small></div><div :class="barCss(memP())"><i :style="barStyle(memP())"></i></div></a><a class="panel" href="/server/metrics"><h3>Disk</h3><div class="stat" x-cloak>{{ pDisp(diskP()) }}<small></small></div><div :class="barCss(diskP())"><i :style="barStyle(diskP())"></i></div></a><a class="panel" href="/data/backups"><h3>Backups</h3><div class="stat">0 MB</div><p style="color: var(--txt2); font-size: 13px; margin-top: 8px;">Last not configured</p></a></div><div class="grid cards-3" style="margin-top:16px;"><a class="panel" href="/server/security"><h3>Security</h3><div class="stat"><span class="pill ok">configured</span></div><p style="color: var(--txt2); font-size: 13px; margin-top: 8px;">0 listeners · 0 certs</p></a><a class="panel" href="/server/diagnostics"><h3>Diagnostics</h3><div class="stat">0<small> fail</small></div><p style="color: var(--txt2); font-size: 13px; margin-top: 8px;">0 warnings</p></a><a class="panel" href="/server/activity"><h3>Activity</h3><div class="stat">0</div><p style="color: var(--txt2); font-size: 13px; margin-top: 8px;">deploys, warnings, key changes</p></a></div><div class="section"><h2>Resource Shape <a class="more" href="/server/metrics">Open health →</a></h2><div class="chart-panel panel"><svg class="chart resource-chart" viewBox="0 0 640 210" role="img" aria-label="Server resource chart"><rect x="1" y="1" width="638" height="208" rx="14" class="chart-shell"></rect><line x1="38" x2="620" y1="166" y2="166" class="chart-grid"></line><text x="28" y="170" text-anchor="end" class="chart-axis">0</text><line x1="38" x2="620" y1="129" y2="129" class="chart-grid"></line><text x="28" y="133" text-anchor="end" class="chart-axis">25</text><line x1="38" x2="620" y1="92" y2="92" class="chart-grid"></line><text x="28" y="96" text-anchor="end" class="chart-axis">50</text><line x1="38" x2="620" y1="55" y2="55" class="chart-grid"></line><text x="28" y="59" text-anchor="end" class="chart-axis">75</text><line x1="38" x2="620" y1="18" y2="18" class="chart-grid"></line><text x="28" y="22" text-anchor="end" class="chart-axis">100</text><g class="bar-mark ok"><rect x="61.59459459459464" y="149.72" width="141.56756756756755" height="16.28" rx="7"></rect><text x="132.37837837837841" y="141.72" text-anchor="middle" class="chart-value">11%</text><text x="132.37837837837841" y="190" text-anchor="middle" class="chart-label">CPU</text><title>11% busy · 0.42 load / 4 vCPU</title></g><g class="bar-mark ok"><rect x="258.21621621621625" y="118.64" width="141.56756756756755" height="47.36" rx="7"></rect><text x="329" y="110.64" text-anchor="middle" class="chart-value">32%</text><text x="329" y="190" text-anchor="middle" class="chart-label">Memory</text><title>2.4 / 7.7 GB</title></g><g class="bar-mark ok"><rect x="454.83783783783787" y="109.76" width="141.56756756756755" height="56.239999999999995" rx="7"></rect><text x="525.6216216216217" y="101.76" text-anchor="middle" class="chart-value">38%</text><text x="525.6216216216217" y="190" text-anchor="middle" class="chart-label">Disk</text><title>0 / 0 GB</title></g></svg></div></div><div class="section"><h2>Services <span class="more"><a href="/server/services">View all →</a><a href="/server/logs">Logs →</a><a href="/server/security">Security →</a></span></h2><div class="panel" x-cloak><div class="svc" x-cloak><template :for="svc in servicesC()"><div class="item" x-cloak>{{ svc.name }} <span class="pill" :class="svcTone(svc.status)" x-cloak>{{ svc.status }}</span></div></template></div><div class="compact empty" @show="servicesC().length === 0" x-cloak><strong>No managed services</strong><span>Configured services will appear after the next successful server probe.</span></div></div></div><div class="section"><h2>SSH Keys <a class="more" href="/server/ssh-keys">Manage →</a></h2><div class="panel"><div class="compact empty"><strong>No SSH keys configured</strong><span>Add keys from the management page and apply them on the next deploy.</span></div><p class="note">SSH keys are managed in <span class="mono">infrastructure.compute.sshKeys</span> in your cloud config and applied on the next <span class="mono">cloud deploy</span>.</p></div></div><div class="section"><h2>Sites <a class="more" href="/server/sites">View all →</a></h2><div class="panel"><table><thead><tr><th scope="col">Site</th><th scope="col">Project</th><th scope="col">Route</th><th scope="col">Response</th><th scope="col">TLS</th><th scope="col">Deploy</th><th scope="col">Status</th></tr></thead><tbody><tr><td><b>main</b></td><td><span class="tag">stacks</span></td><td><a href="https://stacksjs.com" class="mono">stacksjs.com</a></td><td class="mono">pending</td><td><span class="warn pill">https</span></td><td style="color: var(--txt2)">service</td><td><span class="pill ok">live</span></td></tr><tr><td><b>api</b></td><td><span class="tag">stacks</span></td><td><span class="mono">internal</span></td><td class="mono">pending</td><td><span class="warn pill">loopback</span></td><td style="color: var(--txt2)">service</td><td><span class="pill ok">live</span></td></tr><tr><td><b>docs</b></td><td><span class="tag">stacks</span></td><td><a href="https://stacksjs.com/docs" class="mono">stacksjs.com/docs</a></td><td class="mono">pending</td><td><span class="warn pill">https</span></td><td style="color: var(--txt2)">server static</td><td><span class="pill ok">live</span></td></tr><tr><td><b>blog</b></td><td><span class="tag">stacks</span></td><td><a href="https://stacksjs.com/blog" class="mono">stacksjs.com/blog</a></td><td class="mono">pending</td><td><span class="warn pill">https</span></td><td style="color: var(--txt2)">server static</td><td><span class="pill ok">live</span></td></tr><tr><td><b>public</b></td><td><span class="tag">stacks</span></td><td><a href="https://stacksjs.com" class="mono">stacksjs.com</a></td><td class="mono">pending</td><td><span class="warn pill">https</span></td><td style="color: var(--txt2)">server static</td><td><span class="pill warn">shadowed</span></td></tr><tr><td><b>verygoodadblock</b></td><td><span class="tag">stacks</span></td><td><a href="https://verygoodadblock.org" class="mono">verygoodadblock.org</a></td><td class="mono">pending</td><td><span class="warn pill">https</span></td><td style="color: var(--txt2)">server static</td><td><span class="pill ok">live</span></td></tr></tbody></table></div></div><div class="cols section"><div><h2>Recent Deployments <a class="more" href="/server/deployments">View all →</a></h2><div class="panel"><svg class="chart deployment-chart disabled" viewBox="0 0 640 164" role="img" aria-label="No deployment history"><rect x="1" y="1" width="638" height="162" rx="14" class="chart-shell"></rect><text x="320" y="76" text-anchor="middle" class="chart-empty-title">No deploy records yet</text><text x="320" y="100" text-anchor="middle" class="chart-empty-sub">Deploy again and this timeline will fill in automatically.</text></svg><div class="compact empty"><strong>No recent deployments</strong><span>No deployment history has been recorded yet.</span></div></div></div><div><h2>Queues & Scheduler <a class="more" href="/server/workers">Details →</a></h2><div class="panel"><div class="kv"><span>queue:default ×2</span><span class="pill ok">running</span></div><div class="kv"><span>queue:emails ×1</span><span class="pill ok">running</span></div><div class="kv"><span>scheduler</span><span class="ok pill">on · 36s ago</span></div></div><div style="height: 16px"></div><h2>Backups <a class="more" href="/data/backups">Details →</a></h2><div class="panel"><div class="kv"><span>destination</span><span class="mono">off</span></div><div class="kv"><span>retention</span><span>0 copies</span></div><div class="kv"><span>last run</span><span style="color: var(--txt2)">not configured</span></div></div></div></div></div></body></html>
|