@stacksjs/ts-cloud 0.12.0 → 0.12.1

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.
Files changed (231) hide show
  1. package/dist/aws/index.js +1 -1
  2. package/dist/bin/chunk-0rtn6q5x.js +3 -0
  3. package/dist/bin/chunk-258ehp9s.js +1 -0
  4. package/dist/bin/chunk-2yctv06c.js +1 -0
  5. package/dist/bin/chunk-3276rveh.js +37 -0
  6. package/dist/bin/chunk-3m665jwp.js +70 -0
  7. package/dist/bin/chunk-3s2p9vxj.js +1 -0
  8. package/dist/bin/chunk-4esma5m9.js +1 -0
  9. package/dist/bin/chunk-4n0j3n3b.js +2 -0
  10. package/dist/bin/chunk-54bqchag.js +92 -0
  11. package/dist/bin/{chunk-4q6tad44.js → chunk-5bhx3bsa.js} +121 -121
  12. package/dist/bin/chunk-5zagqd20.js +1 -0
  13. package/dist/bin/chunk-7hw2js5h.js +512 -0
  14. package/dist/bin/chunk-8h1qr6x4.js +50 -0
  15. package/dist/bin/{chunk-w32xv8n4.js → chunk-9vdc7adf.js} +6 -6
  16. package/dist/bin/chunk-a1dd6sby.js +1 -0
  17. package/dist/bin/chunk-a4dw35gs.js +1 -0
  18. package/dist/bin/chunk-a9d55ker.js +1 -0
  19. package/dist/bin/chunk-awa1qade.js +9 -0
  20. package/dist/bin/chunk-b6by94pk.js +2 -0
  21. package/dist/bin/chunk-c8sypnbe.js +2 -0
  22. package/dist/bin/chunk-cx4e3d4w.js +1 -0
  23. package/dist/bin/chunk-d5a3vheh.js +2 -0
  24. package/dist/bin/chunk-e1fym2bd.js +1 -0
  25. package/dist/bin/chunk-ej4h0q2y.js +1 -0
  26. package/dist/bin/chunk-ett305ym.js +4 -0
  27. package/dist/bin/chunk-f11xf3n6.js +2 -0
  28. package/dist/bin/chunk-fq7ktvgy.js +3 -0
  29. package/dist/bin/chunk-fyq4th2m.js +1 -0
  30. package/dist/bin/chunk-g67qr8yf.js +1 -0
  31. package/dist/bin/chunk-gc82cx4h.js +1 -0
  32. package/dist/bin/chunk-hchtvpr9.js +1 -0
  33. package/dist/bin/chunk-hpe4jjce.js +1 -0
  34. package/dist/bin/chunk-k5vprsef.js +6 -0
  35. package/dist/bin/chunk-m22krd4z.js +3 -0
  36. package/dist/bin/chunk-mkppcwz8.js +1 -0
  37. package/dist/bin/chunk-mpjg0kc7.js +2 -0
  38. package/dist/bin/chunk-mrm4m4dk.js +2 -0
  39. package/dist/bin/chunk-nff46rxd.js +1 -0
  40. package/dist/bin/chunk-np1z3bgt.js +1 -0
  41. package/dist/bin/chunk-nskxkk6r.js +1 -0
  42. package/dist/bin/chunk-pez932b1.js +111 -0
  43. package/dist/bin/chunk-qsdf5kzk.js +2 -0
  44. package/dist/bin/chunk-r61qmhv1.js +2 -0
  45. package/dist/bin/chunk-r6gdcz5c.js +1 -0
  46. package/dist/bin/chunk-satwnr42.js +2 -0
  47. package/dist/bin/{chunk-dz1ec589.js → chunk-scqmd4qv.js} +30 -30
  48. package/dist/bin/chunk-smbycpt5.js +44 -0
  49. package/dist/bin/chunk-sn7e0sn7.js +2 -0
  50. package/dist/bin/chunk-ss574pka.js +1 -0
  51. package/dist/bin/chunk-tj0xb2d8.js +585 -0
  52. package/dist/bin/chunk-v3rzf9d0.js +141 -0
  53. package/dist/bin/chunk-wnpma6t3.js +34 -0
  54. package/dist/bin/chunk-xan0e052.js +5 -0
  55. package/dist/bin/chunk-xbk2y43r.js +60 -0
  56. package/dist/bin/chunk-xjp3v95e.js +6 -0
  57. package/dist/bin/chunk-xyt490vp.js +6 -0
  58. package/dist/bin/chunk-yn9r02gy.js +1 -0
  59. package/dist/bin/chunk-zhkhn9cc.js +1 -0
  60. package/dist/bin/cli.js +444 -435
  61. package/dist/bin/dashboard-server.js +1 -1
  62. package/dist/chunk-0zf72ngj.js +1 -0
  63. package/dist/chunk-2hpjte1d.js +704 -0
  64. package/dist/chunk-4m6gwhwr.js +5 -0
  65. package/dist/chunk-5m29dhke.js +34 -0
  66. package/dist/chunk-6fzeemcs.js +114 -0
  67. package/dist/{chunk-jm5mg890.js → chunk-6xcbfs2r.js} +111 -111
  68. package/dist/chunk-bpnhqb70.js +6 -0
  69. package/dist/chunk-ead1nkbr.js +60 -0
  70. package/dist/chunk-fea461tj.js +141 -0
  71. package/dist/chunk-fvjczc73.js +1 -0
  72. package/dist/chunk-gearw6rk.js +4 -0
  73. package/dist/chunk-j60hesb3.js +2 -0
  74. package/dist/chunk-pmgtmt3d.js +1 -0
  75. package/dist/chunk-prf2pkvq.js +5 -0
  76. package/dist/chunk-q0wffgw5.js +37 -0
  77. package/dist/chunk-qcemnt35.js +50 -0
  78. package/dist/chunk-qvbwsaay.js +1 -0
  79. package/dist/chunk-r2pbqcnz.js +2 -0
  80. package/dist/chunk-r6110zv2.js +1 -0
  81. package/dist/{chunk-13qjvbqh.js → chunk-rr1yaj55.js} +1 -1
  82. package/dist/chunk-wcrj06cg.js +44 -0
  83. package/dist/chunk-wte9mh18.js +92 -0
  84. package/dist/{chunk-86ss83s2.js → chunk-y1dh3znq.js} +52 -52
  85. package/dist/chunk-y6e86wjs.js +445 -0
  86. package/dist/chunk-y8b7ht4v.js +1 -0
  87. package/dist/chunk-yf487g6e.js +2 -0
  88. package/dist/chunk-zmmc9j5f.js +2 -0
  89. package/dist/deploy/index.js +1 -1
  90. package/dist/dns/index.js +1 -1
  91. package/dist/drivers/index.js +1 -1
  92. package/dist/index.js +91 -91
  93. package/dist/pages/cloudflare-pages.d.ts +13 -0
  94. package/dist/protection/index.js +1 -1
  95. package/dist/push/index.js +1 -1
  96. package/dist/spend/index.js +1 -1
  97. package/dist/ui/404.html +1 -1
  98. package/dist/ui/accept-invitation.html +1 -1
  99. package/dist/ui/access-denied.html +1 -1
  100. package/dist/ui/account/automation.html +6 -6
  101. package/dist/ui/account/security.html +2 -2
  102. package/dist/ui/applications/compose.html +6 -6
  103. package/dist/ui/applications/new.html +2 -2
  104. package/dist/ui/data/backups.html +80 -80
  105. package/dist/ui/data/services.html +78 -78
  106. package/dist/ui/data/volumes.html +50 -50
  107. package/dist/ui/index.html +50 -50
  108. package/dist/ui/infrastructure/topology.html +118 -118
  109. package/dist/ui/integrations.html +2 -2
  110. package/dist/ui/operations/alerts.html +48 -48
  111. package/dist/ui/operations/configuration.html +6 -6
  112. package/dist/ui/operations/jobs.html +76 -76
  113. package/dist/ui/operations/maintenance.html +6 -6
  114. package/dist/ui/operations/observability.html +81 -81
  115. package/dist/ui/operations/previews.html +6 -6
  116. package/dist/ui/operations/queue.html +6 -6
  117. package/dist/ui/operations/regions.html +6 -6
  118. package/dist/ui/operations/releases.html +6 -6
  119. package/dist/ui/operations/spend.html +54 -54
  120. package/dist/ui/operations/workloads.html +104 -104
  121. package/dist/ui/security.html +2 -2
  122. package/dist/ui/server/actions.html +56 -56
  123. package/dist/ui/server/activity.html +2 -2
  124. package/dist/ui/server/capacity.html +6 -6
  125. package/dist/ui/server/database.html +106 -106
  126. package/dist/ui/server/deployments.html +50 -50
  127. package/dist/ui/server/diagnostics.html +1 -1
  128. package/dist/ui/server/firewall.html +76 -76
  129. package/dist/ui/server/fleet.html +33 -33
  130. package/dist/ui/server/logs.html +24 -24
  131. package/dist/ui/server/metrics.html +112 -112
  132. package/dist/ui/server/security.html +2 -2
  133. package/dist/ui/server/services.html +26 -26
  134. package/dist/ui/server/sites.html +119 -119
  135. package/dist/ui/server/ssh-keys.html +52 -52
  136. package/dist/ui/server/team.html +144 -144
  137. package/dist/ui/server/terminal.html +15 -15
  138. package/dist/ui/serverless/alarms.html +52 -52
  139. package/dist/ui/serverless/assets.html +27 -27
  140. package/dist/ui/serverless/cost.html +2 -2
  141. package/dist/ui/serverless/data.html +35 -35
  142. package/dist/ui/serverless/deployments.html +27 -27
  143. package/dist/ui/serverless/firewall.html +1 -1
  144. package/dist/ui/serverless/functions.html +39 -39
  145. package/dist/ui/serverless/logs.html +24 -24
  146. package/dist/ui/serverless/metrics.html +2 -2
  147. package/dist/ui/serverless/queues.html +48 -48
  148. package/dist/ui/serverless/secrets.html +52 -52
  149. package/dist/ui/serverless/traces.html +6 -6
  150. package/dist/ui/serverless.html +54 -54
  151. package/dist/ui-src/src/charts.ts +8721 -13558
  152. package/dist/ui-src/src/topology.ts +2 -2
  153. package/package.json +3 -3
  154. package/dist/bin/chunk-0zwknfwp.js +0 -1
  155. package/dist/bin/chunk-3aph4c1w.js +0 -2
  156. package/dist/bin/chunk-5nkqza92.js +0 -1
  157. package/dist/bin/chunk-64vczwwt.js +0 -1
  158. package/dist/bin/chunk-6tfwm33r.js +0 -6
  159. package/dist/bin/chunk-71t1gmsq.js +0 -1
  160. package/dist/bin/chunk-7g2ahkse.js +0 -1
  161. package/dist/bin/chunk-7zhgmp1s.js +0 -3
  162. package/dist/bin/chunk-82mj52xr.js +0 -141
  163. package/dist/bin/chunk-8ewncfce.js +0 -37
  164. package/dist/bin/chunk-9a88fp00.js +0 -2
  165. package/dist/bin/chunk-9kf0np8j.js +0 -44
  166. package/dist/bin/chunk-a7w13qfm.js +0 -2
  167. package/dist/bin/chunk-b4wt9jcg.js +0 -60
  168. package/dist/bin/chunk-btsyjhk7.js +0 -92
  169. package/dist/bin/chunk-c0bdafbx.js +0 -2
  170. package/dist/bin/chunk-cd0ps58j.js +0 -1
  171. package/dist/bin/chunk-cxt74wsj.js +0 -1
  172. package/dist/bin/chunk-d7ke90zt.js +0 -2
  173. package/dist/bin/chunk-djg4zyqk.js +0 -1
  174. package/dist/bin/chunk-dkaz333b.js +0 -1
  175. package/dist/bin/chunk-dkf4qsp2.js +0 -1
  176. package/dist/bin/chunk-e2bybahr.js +0 -3
  177. package/dist/bin/chunk-e5ab5twy.js +0 -50
  178. package/dist/bin/chunk-edvvx3hg.js +0 -1
  179. package/dist/bin/chunk-ehc63fvs.js +0 -2
  180. package/dist/bin/chunk-f06c5np9.js +0 -1
  181. package/dist/bin/chunk-g6baf9c5.js +0 -512
  182. package/dist/bin/chunk-gq8794k6.js +0 -1
  183. package/dist/bin/chunk-hq9x489e.js +0 -70
  184. package/dist/bin/chunk-ja1vjdn1.js +0 -6
  185. package/dist/bin/chunk-k3120rx6.js +0 -1
  186. package/dist/bin/chunk-kg61p5hw.js +0 -3
  187. package/dist/bin/chunk-mcr0r4at.js +0 -2
  188. package/dist/bin/chunk-mfrf9q4b.js +0 -2
  189. package/dist/bin/chunk-my3ewh3a.js +0 -34
  190. package/dist/bin/chunk-nw3d4k52.js +0 -1
  191. package/dist/bin/chunk-p70bc9yr.js +0 -1
  192. package/dist/bin/chunk-q5cmfpzt.js +0 -1
  193. package/dist/bin/chunk-rtecnmts.js +0 -4
  194. package/dist/bin/chunk-rv18092e.js +0 -585
  195. package/dist/bin/chunk-s4yzes15.js +0 -2
  196. package/dist/bin/chunk-sj5csg49.js +0 -2
  197. package/dist/bin/chunk-ta7sh0cc.js +0 -1
  198. package/dist/bin/chunk-tfbs8k8v.js +0 -111
  199. package/dist/bin/chunk-tvz9c388.js +0 -1
  200. package/dist/bin/chunk-x6f61g36.js +0 -9
  201. package/dist/bin/chunk-xhwqpgwq.js +0 -2
  202. package/dist/bin/chunk-xk08030d.js +0 -6
  203. package/dist/bin/chunk-xkfrqqcs.js +0 -1
  204. package/dist/bin/chunk-y1h63vpm.js +0 -1
  205. package/dist/bin/chunk-zdt2rjk6.js +0 -1
  206. package/dist/bin/chunk-zh2d4704.js +0 -1
  207. package/dist/bin/chunk-zpe64t4r.js +0 -1
  208. package/dist/chunk-152he7m3.js +0 -92
  209. package/dist/chunk-1qdne0bf.js +0 -1
  210. package/dist/chunk-3mgj3hrh.js +0 -5
  211. package/dist/chunk-6kpbveb8.js +0 -5
  212. package/dist/chunk-73ztr55z.js +0 -2
  213. package/dist/chunk-a84gmpyh.js +0 -1
  214. package/dist/chunk-aj025v2s.js +0 -4
  215. package/dist/chunk-b087qsyf.js +0 -704
  216. package/dist/chunk-by2bwzk6.js +0 -141
  217. package/dist/chunk-h42zck7h.js +0 -60
  218. package/dist/chunk-hn40z11p.js +0 -37
  219. package/dist/chunk-m8fs0233.js +0 -34
  220. package/dist/chunk-mz0dk78z.js +0 -6
  221. package/dist/chunk-nms5q44e.js +0 -1
  222. package/dist/chunk-nzqxdkch.js +0 -445
  223. package/dist/chunk-qm32ytbr.js +0 -1
  224. package/dist/chunk-t0xgmhd6.js +0 -114
  225. package/dist/chunk-t3t9ymec.js +0 -1
  226. package/dist/chunk-tz9myq9a.js +0 -2
  227. package/dist/chunk-wavjkdb8.js +0 -2
  228. package/dist/chunk-x3hay61c.js +0 -44
  229. package/dist/chunk-xcj8zfmg.js +0 -2
  230. package/dist/chunk-y2v22hkv.js +0 -1
  231. package/dist/chunk-y4xkj2f1.js +0 -50
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mt7l77jbzlapbv"><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> <script data-stx-composables>;(function(){
1
+ <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mt7lgvq3gjbx1h"><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> <script data-stx-composables>;(function(){
2
2
  window.__composables = window.__composables || {};
3
3
  var __c = window.__composables;
4
4
  var __stx = window.stx || {};
@@ -49,59 +49,59 @@ async function requestJson(url, init) {
49
49
  window[__n] = __c[__n];
50
50
  }
51
51
  })();</script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Databases</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-scoped>
52
- function __stx_setup_1787597171218_19() {
52
+ function __stx_setup_1787597623475_20() {
53
53
  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;
54
54
 
55
- var EXTERNAL_ENGINES = undefined;
56
- var applySchema = undefined;
57
- var applyVSchema = undefined;
58
- var backupDb = undefined;
59
- var backups = undefined;
60
- var busy = undefined;
61
- var createDb = undefined;
62
- var createKeyspace = undefined;
63
- var createUser = undefined;
64
- var databases = undefined;
65
- var dbError = undefined;
66
- var dbName = undefined;
67
- var ddlSql = undefined;
68
- var engine = undefined;
69
- var failedMigs = undefined;
70
- var installClient = undefined;
71
- var isExternal = undefined;
72
- var isVitess = undefined;
73
- var keyspaces = undefined;
74
- var ksName = undefined;
75
- var ksSharded = undefined;
76
- var load = undefined;
77
- var loadBackups = undefined;
78
- var loadMigrations = undefined;
79
- var loadVitess = undefined;
80
- var migrationAction = undefined;
81
- var migrations = undefined;
82
- var missingPrimary = undefined;
83
- var output = undefined;
84
- var outputShown = undefined;
85
- var post = undefined;
86
- var provisionConfirm = undefined;
87
- var provisionKeyspace = undefined;
88
- var provisionPassword = undefined;
89
- var provisionSharded = undefined;
90
- var provisionUsername = undefined;
91
- var provisionVitess = undefined;
92
- var runningMigs = undefined;
93
- var shards = undefined;
94
- var show = undefined;
95
- var tablets = undefined;
96
- var uAccess = undefined;
97
- var uDatabase = undefined;
98
- var uName = undefined;
99
- var uPass = undefined;
100
- var unhealthy = undefined;
101
- var users = undefined;
102
- var vitessError = undefined;
103
- var vschemaJson = undefined;
104
55
  var vschemaKeyspace = undefined;
56
+ var vschemaJson = undefined;
57
+ var vitessError = undefined;
58
+ var users = undefined;
59
+ var unhealthy = undefined;
60
+ var uPass = undefined;
61
+ var uName = undefined;
62
+ var uDatabase = undefined;
63
+ var uAccess = undefined;
64
+ var tablets = undefined;
65
+ var show = undefined;
66
+ var shards = undefined;
67
+ var runningMigs = undefined;
68
+ var provisionVitess = undefined;
69
+ var provisionUsername = undefined;
70
+ var provisionSharded = undefined;
71
+ var provisionPassword = undefined;
72
+ var provisionKeyspace = undefined;
73
+ var provisionConfirm = undefined;
74
+ var post = undefined;
75
+ var outputShown = undefined;
76
+ var output = undefined;
77
+ var missingPrimary = undefined;
78
+ var migrations = undefined;
79
+ var migrationAction = undefined;
80
+ var loadVitess = undefined;
81
+ var loadMigrations = undefined;
82
+ var loadBackups = undefined;
83
+ var load = undefined;
84
+ var ksSharded = undefined;
85
+ var ksName = undefined;
86
+ var keyspaces = undefined;
87
+ var isVitess = undefined;
88
+ var isExternal = undefined;
89
+ var installClient = undefined;
90
+ var failedMigs = undefined;
91
+ var engine = undefined;
92
+ var ddlSql = undefined;
93
+ var dbName = undefined;
94
+ var dbError = undefined;
95
+ var databases = undefined;
96
+ var createUser = undefined;
97
+ var createKeyspace = undefined;
98
+ var createDb = undefined;
99
+ var busy = undefined;
100
+ var backups = undefined;
101
+ var backupDb = undefined;
102
+ var applyVSchema = undefined;
103
+ var applySchema = undefined;
104
+ var EXTERNAL_ENGINES = undefined;
105
105
  var __stxBundle_99e6809a782b = (function() {
106
106
 
107
107
  class DashboardRequestError extends Error {
@@ -413,63 +413,63 @@ onMount(async () => {
413
413
  loadVitess();
414
414
  loadMigrations();
415
415
  });
416
- return { "EXTERNAL_ENGINES": EXTERNAL_ENGINES, "applySchema": applySchema, "applyVSchema": applyVSchema, "backupDb": backupDb, "backups": backups, "busy": busy, "createDb": createDb, "createKeyspace": createKeyspace, "createUser": createUser, "databases": databases, "dbError": dbError, "dbName": dbName, "ddlSql": ddlSql, "engine": engine, "failedMigs": failedMigs, "installClient": installClient, "isExternal": isExternal, "isVitess": isVitess, "keyspaces": keyspaces, "ksName": ksName, "ksSharded": ksSharded, "load": load, "loadBackups": loadBackups, "loadMigrations": loadMigrations, "loadVitess": loadVitess, "migrationAction": migrationAction, "migrations": migrations, "missingPrimary": missingPrimary, "output": output, "outputShown": outputShown, "post": post, "provisionConfirm": provisionConfirm, "provisionKeyspace": provisionKeyspace, "provisionPassword": provisionPassword, "provisionSharded": provisionSharded, "provisionUsername": provisionUsername, "provisionVitess": provisionVitess, "runningMigs": runningMigs, "shards": shards, "show": show, "tablets": tablets, "uAccess": uAccess, "uDatabase": uDatabase, "uName": uName, "uPass": uPass, "unhealthy": unhealthy, "users": users, "vitessError": vitessError, "vschemaJson": vschemaJson, "vschemaKeyspace": vschemaKeyspace };
416
+ return { "vschemaKeyspace": vschemaKeyspace, "vschemaJson": vschemaJson, "vitessError": vitessError, "users": users, "unhealthy": unhealthy, "uPass": uPass, "uName": uName, "uDatabase": uDatabase, "uAccess": uAccess, "tablets": tablets, "show": show, "shards": shards, "runningMigs": runningMigs, "provisionVitess": provisionVitess, "provisionUsername": provisionUsername, "provisionSharded": provisionSharded, "provisionPassword": provisionPassword, "provisionKeyspace": provisionKeyspace, "provisionConfirm": provisionConfirm, "post": post, "outputShown": outputShown, "output": output, "missingPrimary": missingPrimary, "migrations": migrations, "migrationAction": migrationAction, "loadVitess": loadVitess, "loadMigrations": loadMigrations, "loadBackups": loadBackups, "load": load, "ksSharded": ksSharded, "ksName": ksName, "keyspaces": keyspaces, "isVitess": isVitess, "isExternal": isExternal, "installClient": installClient, "failedMigs": failedMigs, "engine": engine, "ddlSql": ddlSql, "dbName": dbName, "dbError": dbError, "databases": databases, "createUser": createUser, "createKeyspace": createKeyspace, "createDb": createDb, "busy": busy, "backups": backups, "backupDb": backupDb, "applyVSchema": applyVSchema, "applySchema": applySchema, "EXTERNAL_ENGINES": EXTERNAL_ENGINES };
417
417
  })();
418
- EXTERNAL_ENGINES = __stxBundle_99e6809a782b["EXTERNAL_ENGINES"];
419
- applySchema = __stxBundle_99e6809a782b["applySchema"];
420
- applyVSchema = __stxBundle_99e6809a782b["applyVSchema"];
421
- backupDb = __stxBundle_99e6809a782b["backupDb"];
422
- backups = __stxBundle_99e6809a782b["backups"];
423
- busy = __stxBundle_99e6809a782b["busy"];
424
- createDb = __stxBundle_99e6809a782b["createDb"];
425
- createKeyspace = __stxBundle_99e6809a782b["createKeyspace"];
426
- createUser = __stxBundle_99e6809a782b["createUser"];
427
- databases = __stxBundle_99e6809a782b["databases"];
428
- dbError = __stxBundle_99e6809a782b["dbError"];
429
- dbName = __stxBundle_99e6809a782b["dbName"];
430
- ddlSql = __stxBundle_99e6809a782b["ddlSql"];
431
- engine = __stxBundle_99e6809a782b["engine"];
432
- failedMigs = __stxBundle_99e6809a782b["failedMigs"];
433
- installClient = __stxBundle_99e6809a782b["installClient"];
434
- isExternal = __stxBundle_99e6809a782b["isExternal"];
435
- isVitess = __stxBundle_99e6809a782b["isVitess"];
436
- keyspaces = __stxBundle_99e6809a782b["keyspaces"];
437
- ksName = __stxBundle_99e6809a782b["ksName"];
438
- ksSharded = __stxBundle_99e6809a782b["ksSharded"];
439
- load = __stxBundle_99e6809a782b["load"];
440
- loadBackups = __stxBundle_99e6809a782b["loadBackups"];
441
- loadMigrations = __stxBundle_99e6809a782b["loadMigrations"];
442
- loadVitess = __stxBundle_99e6809a782b["loadVitess"];
443
- migrationAction = __stxBundle_99e6809a782b["migrationAction"];
444
- migrations = __stxBundle_99e6809a782b["migrations"];
445
- missingPrimary = __stxBundle_99e6809a782b["missingPrimary"];
446
- output = __stxBundle_99e6809a782b["output"];
447
- outputShown = __stxBundle_99e6809a782b["outputShown"];
448
- post = __stxBundle_99e6809a782b["post"];
449
- provisionConfirm = __stxBundle_99e6809a782b["provisionConfirm"];
450
- provisionKeyspace = __stxBundle_99e6809a782b["provisionKeyspace"];
451
- provisionPassword = __stxBundle_99e6809a782b["provisionPassword"];
452
- provisionSharded = __stxBundle_99e6809a782b["provisionSharded"];
453
- provisionUsername = __stxBundle_99e6809a782b["provisionUsername"];
454
- provisionVitess = __stxBundle_99e6809a782b["provisionVitess"];
455
- runningMigs = __stxBundle_99e6809a782b["runningMigs"];
456
- shards = __stxBundle_99e6809a782b["shards"];
457
- show = __stxBundle_99e6809a782b["show"];
458
- tablets = __stxBundle_99e6809a782b["tablets"];
459
- uAccess = __stxBundle_99e6809a782b["uAccess"];
460
- uDatabase = __stxBundle_99e6809a782b["uDatabase"];
461
- uName = __stxBundle_99e6809a782b["uName"];
462
- uPass = __stxBundle_99e6809a782b["uPass"];
463
- unhealthy = __stxBundle_99e6809a782b["unhealthy"];
464
- users = __stxBundle_99e6809a782b["users"];
465
- vitessError = __stxBundle_99e6809a782b["vitessError"];
466
- vschemaJson = __stxBundle_99e6809a782b["vschemaJson"];
467
418
  vschemaKeyspace = __stxBundle_99e6809a782b["vschemaKeyspace"];
468
- return { EXTERNAL_ENGINES, applySchema, applyVSchema, backupDb, backups, busy, createDb, createKeyspace, createUser, databases, dbError, dbName, ddlSql, engine, failedMigs, installClient, isExternal, isVitess, keyspaces, ksName, ksSharded, load, loadBackups, loadMigrations, loadVitess, migrationAction, migrations, missingPrimary, output, outputShown, post, provisionConfirm, provisionKeyspace, provisionPassword, provisionSharded, provisionUsername, provisionVitess, runningMigs, shards, show, tablets, uAccess, uDatabase, uName, uPass, unhealthy, users, vitessError, vschemaJson, vschemaKeyspace, __stxBundle_99e6809a782b };
419
+ vschemaJson = __stxBundle_99e6809a782b["vschemaJson"];
420
+ vitessError = __stxBundle_99e6809a782b["vitessError"];
421
+ users = __stxBundle_99e6809a782b["users"];
422
+ unhealthy = __stxBundle_99e6809a782b["unhealthy"];
423
+ uPass = __stxBundle_99e6809a782b["uPass"];
424
+ uName = __stxBundle_99e6809a782b["uName"];
425
+ uDatabase = __stxBundle_99e6809a782b["uDatabase"];
426
+ uAccess = __stxBundle_99e6809a782b["uAccess"];
427
+ tablets = __stxBundle_99e6809a782b["tablets"];
428
+ show = __stxBundle_99e6809a782b["show"];
429
+ shards = __stxBundle_99e6809a782b["shards"];
430
+ runningMigs = __stxBundle_99e6809a782b["runningMigs"];
431
+ provisionVitess = __stxBundle_99e6809a782b["provisionVitess"];
432
+ provisionUsername = __stxBundle_99e6809a782b["provisionUsername"];
433
+ provisionSharded = __stxBundle_99e6809a782b["provisionSharded"];
434
+ provisionPassword = __stxBundle_99e6809a782b["provisionPassword"];
435
+ provisionKeyspace = __stxBundle_99e6809a782b["provisionKeyspace"];
436
+ provisionConfirm = __stxBundle_99e6809a782b["provisionConfirm"];
437
+ post = __stxBundle_99e6809a782b["post"];
438
+ outputShown = __stxBundle_99e6809a782b["outputShown"];
439
+ output = __stxBundle_99e6809a782b["output"];
440
+ missingPrimary = __stxBundle_99e6809a782b["missingPrimary"];
441
+ migrations = __stxBundle_99e6809a782b["migrations"];
442
+ migrationAction = __stxBundle_99e6809a782b["migrationAction"];
443
+ loadVitess = __stxBundle_99e6809a782b["loadVitess"];
444
+ loadMigrations = __stxBundle_99e6809a782b["loadMigrations"];
445
+ loadBackups = __stxBundle_99e6809a782b["loadBackups"];
446
+ load = __stxBundle_99e6809a782b["load"];
447
+ ksSharded = __stxBundle_99e6809a782b["ksSharded"];
448
+ ksName = __stxBundle_99e6809a782b["ksName"];
449
+ keyspaces = __stxBundle_99e6809a782b["keyspaces"];
450
+ isVitess = __stxBundle_99e6809a782b["isVitess"];
451
+ isExternal = __stxBundle_99e6809a782b["isExternal"];
452
+ installClient = __stxBundle_99e6809a782b["installClient"];
453
+ failedMigs = __stxBundle_99e6809a782b["failedMigs"];
454
+ engine = __stxBundle_99e6809a782b["engine"];
455
+ ddlSql = __stxBundle_99e6809a782b["ddlSql"];
456
+ dbName = __stxBundle_99e6809a782b["dbName"];
457
+ dbError = __stxBundle_99e6809a782b["dbError"];
458
+ databases = __stxBundle_99e6809a782b["databases"];
459
+ createUser = __stxBundle_99e6809a782b["createUser"];
460
+ createKeyspace = __stxBundle_99e6809a782b["createKeyspace"];
461
+ createDb = __stxBundle_99e6809a782b["createDb"];
462
+ busy = __stxBundle_99e6809a782b["busy"];
463
+ backups = __stxBundle_99e6809a782b["backups"];
464
+ backupDb = __stxBundle_99e6809a782b["backupDb"];
465
+ applyVSchema = __stxBundle_99e6809a782b["applyVSchema"];
466
+ applySchema = __stxBundle_99e6809a782b["applySchema"];
467
+ EXTERNAL_ENGINES = __stxBundle_99e6809a782b["EXTERNAL_ENGINES"];
468
+ return { vschemaKeyspace, vschemaJson, vitessError, users, unhealthy, uPass, uName, uDatabase, uAccess, tablets, show, shards, runningMigs, provisionVitess, provisionUsername, provisionSharded, provisionPassword, provisionKeyspace, provisionConfirm, post, outputShown, output, missingPrimary, migrations, migrationAction, loadVitess, loadMigrations, loadBackups, load, ksSharded, ksName, keyspaces, isVitess, isExternal, installClient, failedMigs, engine, ddlSql, dbName, dbError, databases, createUser, createKeyspace, createDb, busy, backups, backupDb, applyVSchema, applySchema, EXTERNAL_ENGINES, __stxBundle_99e6809a782b };
469
469
  }
470
- window.__stx_latestSetup=__stx_setup_1787597171218_19;
471
- if(window.stx)window.stx._latestSetup=__stx_setup_1787597171218_19;
472
- </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_1787597171218_19"><a data-stx-scope="stx_scope_nav_24" 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>acme-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="" 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 &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; 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>acme-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">
470
+ window.__stx_latestSetup=__stx_setup_1787597623475_20;
471
+ if(window.stx)window.stx._latestSetup=__stx_setup_1787597623475_20;
472
+ </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_1787597623475_20"><a data-stx-scope="stx_scope_nav_26" 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>acme-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="" 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 &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; 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>acme-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">
473
473
  (function() {
474
474
  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;
475
475
  var __destroyHooks = [];
@@ -820,6 +820,6 @@ if(window.stx)window.stx._latestSetup=__stx_setup_1787597171218_19;
820
820
 
821
821
 
822
822
  try { if (typeof __stxScopeRenames !== 'undefined' && __stxScopeRenames) { for (var __stxRK in __stxScopeRenames) __scopeRegistration[__stxRK] = __stxScopeRenames[__stxRK]; } } catch (e) { /* no renames */ }
823
- window.stx._scopes['stx_scope_nav_24'] = __scopeRegistration;
823
+ window.stx._scopes['stx_scope_nav_26'] = __scopeRegistration;
824
824
  })();
825
825
  </script> <div class="wrap"><div class="crumbs"><a href="/">Server</a><span class="sep">/</span> Databases</div><header class="page"><div><h1>Databases &amp; users</h1><p @show="!isExternal()" x-cloak>Create databases and app users on the managed engine (<span class="mono" x-cloak>{{ engine() }}</span>).</p><p @show="isExternal()" x-cloak><span class="mono" x-cloak>{{ engine() }}</span> is an external cluster. This box does not host the engine, so databases and users are managed on the cluster itself.</p></div></header><div class="section" @show="isVitess()" x-cloak><div class="panel"><div class="kv"><span>Engine</span><b class="mono">Vitess</b></div><div class="kv"><span>Endpoint</span><b class="mono">vtgate</b></div><div class="kv"><span>Keyspaces</span><b class="mono" x-cloak>{{ keyspaces().length }}</b></div><div class="kv"><span>Shards</span><b class="mono" x-cloak>{{ shards().length }}</b></div><div class="kv"><span>Tablets</span><b class="mono" x-cloak>{{ tablets().length }}</b></div></div></div><div class="section" @show="isVitess()" x-cloak><h2>Provision or reconcile Vitess</h2><div class="panel"><form class="form-grid" @submit.prevent="provisionVitess()"><div class="field-block"><label for="vitess-keyspace">Keyspace</label><input id="vitess-keyspace" placeholder="app_production" autocomplete="off" :value="provisionKeyspace()" @input="provisionKeyspace.set($event.target.value)"></div><div class="field-block"><label for="vitess-user">Application user</label><input id="vitess-user" placeholder="app" autocomplete="off" :value="provisionUsername()" @input="provisionUsername.set($event.target.value)"></div><div class="field-block"><label for="vitess-password">Write-only password</label><input id="vitess-password" type="password" minlength="16" autocomplete="new-password" :value="provisionPassword()" @input="provisionPassword.set($event.target.value)"></div><div class="field-block"><label for="vitess-topology">Topology</label><select id="vitess-topology" :value="provisionSharded() ? 'sharded' : 'unsharded'" @change="provisionSharded.set($event.target.value === 'sharded')"><option value="unsharded">Unsharded (recommended)</option><option value="sharded">Two shards</option></select></div><div class="field-block wide"><label for="vitess-confirm">Type the keyspace to confirm</label><input id="vitess-confirm" autocomplete="off" :value="provisionConfirm()" @input="provisionConfirm.set($event.target.value)"></div><div class="form-actions"><button class="btn" type="submit" :disabled="busy()">Provision with Pantry</button></div></form><p class="note">Uses the same typed cluster provisioner as <span class="mono">ts-cloud provision</span>: a loopback-only vtgate on 15306, authenticated application access, systemd services, topology bootstrap, and a serving-primary health gate. Running it again reconciles the same declaration.</p></div></div><div class="cols section" @show="!isExternal()" x-cloak><div><h2>Create database</h2><div class="panel"><form class="form-grid" @submit.prevent="createDb()"><div class="field-block wide"><label for="db-name">Name</label><input id="db-name" placeholder="acme_production" autocomplete="off" :value="dbName()" @input="dbName.set($event.target.value)"></div><div class="form-actions"><button class="btn" type="submit" :disabled="busy()">Create database</button></div></form></div></div><div><h2>Create user</h2><div class="panel"><form class="form-grid" @submit.prevent="createUser()"><div class="field-block"><label for="db-user">Username</label><input id="db-user" placeholder="acme_app" autocomplete="off" :value="uName()" @input="uName.set($event.target.value)"></div><div class="field-block"><label for="db-pass">Password</label><input id="db-pass" type="password" autocomplete="new-password" :value="uPass()" @input="uPass.set($event.target.value)"></div><div class="field-block"><label for="db-user-db">Grant on database</label><select id="db-user-db" :value="uDatabase()" @change="uDatabase.set($event.target.value)"><option value="">(none)</option><template :for="n in databases()"><option :value="n">{{ n }}</option></template></select></div><div class="field-block"><label for="db-access">Access</label><select id="db-access" :value="uAccess()" @change="uAccess.set($event.target.value)"><option value="all">all privileges</option><option value="readonly">read only</option></select></div><div class="form-actions"><button class="btn" type="submit" :disabled="busy()">Create user</button></div></form></div></div></div><pre class="action-output" @show="outputShown()" aria-live="polite" x-cloak>{{ output() }}</pre><div class="cols section"><div><h2 @show="!isVitess()" x-cloak>Databases</h2><h2 @show="isVitess()" x-cloak>Keyspaces</h2><div class="panel" x-cloak><template :for="n in databases()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ n }}</span><button class="btn ghost sm" type="button" @show="!isExternal()" :disabled="busy()" @click="backupDb(n)" :aria-label="'Back up ' + n" x-cloak>Back up</button></div></template><span class="item" @show="databases().length === 0 && dbError() !== ''" x-cloak>{{ dbError() }}</span><span class="item" @show="databases().length === 0 && dbError() === '' && !isVitess()" x-cloak>no databases</span><span class="item" @show="databases().length === 0 && dbError() === '' && isVitess()" x-cloak>no keyspaces</span></div></div><div @show="!isExternal()" x-cloak><h2>Users</h2><div class="panel" x-cloak><div class="svc" x-cloak><template :for="n in users()"><span class="item" x-cloak>{{ n }}</span></template><span class="item" @show="users().length === 0 && dbError() !== ''" x-cloak>{{ dbError() }}</span><span class="item" @show="users().length === 0 && dbError() === ''" x-cloak>no users</span></div></div></div><div @show="isVitess()" x-cloak><h2>Shards</h2><div class="panel" x-cloak><template :for="s in shards()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ s.keyspace }}/{{ s.shard }}</span></div></template><span class="item" @show="shards().length === 0" x-cloak>no shards reported</span></div></div></div><div class="section" @show="isVitess()" x-cloak><h2>Tablets</h2><div class="panel" @show="missingPrimary().length > 0" x-cloak><div class="compact empty" x-cloak><strong x-cloak>{{ missingPrimary().length }} shard(s) have no serving PRIMARY</strong><span>Vitess routes writes to a shard's primary. Without one the shard still answers reads and silently fails writes. Check tablet health, then reparent with <span class="mono">vtctldclient PlannedReparentShard</span>.</span></div><template :for="s in missingPrimary()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ s.keyspace }}/{{ s.shard }}</span><b class="mono">no primary</b></div></template></div><div class="panel" @show="unhealthy().length > 0" x-cloak><div class="compact empty" x-cloak><strong x-cloak>{{ unhealthy().length }} tablet(s) not serving</strong></div><template :for="t in unhealthy()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ t.keyspace }}/{{ t.shard }} {{ t.alias }}</span><b class="mono" x-cloak>{{ t.type }} {{ t.state }}</b></div></template></div><div class="panel" x-cloak><template :for="t in tablets()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ t.keyspace }}/{{ t.shard }} {{ t.alias }}</span><b class="mono" style="font-size:11px;color:var(--txt3)" x-cloak>{{ t.type }} {{ t.state }} {{ t.hostname }}</b></div></template><div class="compact empty" @show="tablets().length === 0 && vitessError() === ''" x-cloak><strong>No tablets reported</strong><span>vtgate returned no tablets for this cluster.</span></div><div class="compact empty" @show="vitessError() !== ''" x-cloak><strong>Could not read the Vitess topology</strong><span x-cloak>{{ vitessError() }}</span></div></div></div><div class="section" @show="isVitess()" x-cloak><h2>Schema migrations</h2><div class="panel" @show="failedMigs().length > 0" x-cloak><div class="compact empty" x-cloak><strong x-cloak>{{ failedMigs().length }} migration(s) failed</strong><span>A failed online DDL leaves the table unchanged. Retry once the cause is fixed, or cancel to discard it.</span></div><template :for="m in failedMigs()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ m.keyspace }}/{{ m.shard }} {{ m.table }}</span><span><button class="btn ghost sm" type="button" :disabled="busy()" @click="migrationAction(m.uuid, 'retry')">Retry</button><button class="btn ghost sm" type="button" :disabled="busy()" @click="migrationAction(m.uuid, 'cleanup')">Clean up</button></span></div></template></div><div class="panel" @show="runningMigs().length > 0" x-cloak><div class="compact empty" x-cloak><strong x-cloak>{{ runningMigs().length }} migration(s) in flight</strong></div><template :for="m in runningMigs()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ m.keyspace }}/{{ m.shard }} {{ m.table }} {{ m.progress }}</span><span><button class="btn ghost sm" type="button" :disabled="busy()" @click="migrationAction(m.uuid, 'complete')">Complete</button><button class="btn ghost sm" type="button" :disabled="busy()" @click="migrationAction(m.uuid, 'cancel')">Cancel</button></span></div></template></div><div class="panel" x-cloak><template :for="m in migrations()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ m.table }} <b style="color:var(--txt3)" x-cloak>{{ m.keyspace }}/{{ m.shard }}</b></span><b class="mono" style="font-size:11px;color:var(--txt3)" x-cloak>{{ m.status }} {{ m.progress }} {{ m.added }}</b></div></template><div class="compact empty" @show="migrations().length === 0" x-cloak><strong>No schema migrations</strong><span>Changes applied below appear here with live progress.</span></div></div><h2>Apply a schema change</h2><div class="panel"><form class="form-grid" @submit.prevent="applySchema()"><div class="field-block wide"><label for="ddl-sql">DDL</label><input id="ddl-sql" placeholder="ALTER TABLE users ADD COLUMN nickname VARCHAR(64)" autocomplete="off" :value="ddlSql()" @input="ddlSql.set($event.target.value)"></div><div class="form-actions"><button class="btn" type="submit" :disabled="busy()">Apply online</button></div></form><p class="note">Runs as Vitess online DDL: applied shard by shard without locking the keyspace, revertible, and tracked above. A direct (locking) change is a config choice, not a button, because on a sharded keyspace it is an outage rather than a migration.</p></div></div><div class="section" @show="isVitess()" x-cloak><h2>Topology</h2><div class="cols"><div><h3>Create keyspace</h3><div class="panel"><form class="form-grid" @submit.prevent="createKeyspace()"><div class="field-block wide"><label for="ks-name">Name</label><input id="ks-name" placeholder="commerce" autocomplete="off" :value="ksName()" @input="ksName.set($event.target.value)"></div><div class="field-block"><label for="ks-sharded">Sharded</label><select id="ks-sharded" :value="ksSharded() ? 'yes' : 'no'" @change="ksSharded.set($event.target.value === 'yes')"><option value="yes">sharded</option><option value="no">unsharded</option></select></div><div class="form-actions"><button class="btn" type="submit" :disabled="busy()">Create keyspace</button></div></form><p class="note">A sharded keyspace is not routable until its VSchema names a vindex per table. Apply one next.</p></div></div><div><h3>Apply VSchema</h3><div class="panel"><form class="form-grid" @submit.prevent="applyVSchema()"><div class="field-block"><label for="vs-ks">Keyspace</label><select id="vs-ks" :value="vschemaKeyspace()" @change="vschemaKeyspace.set($event.target.value)"><option value="">(select)</option><template :for="k in keyspaces()"><option :value="k">{{ k }}</option></template></select></div><div class="field-block wide"><label for="vs-json">VSchema JSON</label><input id="vs-json" placeholder='paste database/vschema.json' autocomplete="off" :value="vschemaJson()" @input="vschemaJson.set($event.target.value)"></div><div class="form-actions"><button class="btn" type="submit" :disabled="busy()">Apply VSchema</button></div></form><p class="note">Generate it with <span class="mono">buddy generate:vschema</span>, which derives the sharding topology from your model relationships.</p></div></div></div><div class="panel"><div class="kv"><span>Control plane</span><button class="btn ghost sm" type="button" :disabled="busy()" @click="installClient()">Install vtctldclient</button></div><p class="note">Creating a keyspace and applying a VSchema are vtctld operations, so they need <span class="mono">vitess.vtctldAddr</span> configured and the client installed. Everything else on this page works through vtgate alone.</p></div></div><div class="section" @show="isVitess()" x-cloak><h2>Setup</h2><div class="panel"><div class="kv"><span>1. Point the app at vtgate</span><b class="mono">DB_CONNECTION=vitess, DB_PORT=15306</b></div><div class="kv"><span>2. Generate the VSchema</span><b class="mono">buddy generate:vschema</b></div><div class="kv"><span>3. Apply it</span><b class="mono">vtctldclient ApplyVSchema --vschema-file database/vschema.json &lt;keyspace&gt;</b></div><div class="kv"><span>4. Apply schema changes</span><b class="mono">vtctldclient ApplySchema --sql-file &lt;file&gt; &lt;keyspace&gt;</b></div><p class="note">Port 15306 is vtgate's. Connecting on 3306 reaches one tablet's MySQL and bypasses sharding, which looks like a working connection. A sharded keyspace also rejects foreign keys and AUTO_INCREMENT, so models need <span class="mono">useUuid</span>.</p></div></div><div class="section" @show="!isExternal()" x-cloak><h2>Backups</h2><div class="panel" x-cloak><template :for="b in backups()"><div class="kv" x-cloak><span class="mono" x-cloak>{{ b.database }}</span><b class="mono" style="font-size:11px;color:var(--txt3)" x-cloak>{{ b.file }}</b></div></template><div class="compact empty" @show="backups().length === 0" x-cloak><strong>No database dumps yet</strong><span>Use Back up on a database above to write a gzipped dump to the box.</span></div></div></div><p class="note" @show="!isExternal()" x-cloak>Lists are read live from the engine via the app server. Create operations run as root over the pantry socket; apps connect with the credentials you set here. Per-database dumps are written to <span class="mono">/var/backups/ts-cloud/databases</span>.</p><p class="note" @show="isExternal()" x-cloak>Read live from the cluster through the app server. Creating databases or users, and taking backups, are cluster-side operations and are not offered here - this box hosts no engine to administer.</p></div></body></html>
@@ -1,31 +1,31 @@
1
- <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mt7l77jbzlapbv"><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> <script data-stx-composables src="/_stx/chunk.9fd39d5b.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Deployments</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-scoped>
2
- function __stx_setup_1787597171340_24() {
1
+ <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mt7lgvq3gjbx1h"><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> <script data-stx-composables src="/_stx/chunk.9fd39d5b.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - Deployments</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-scoped>
2
+ function __stx_setup_1787597623618_23() {
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 initialDeps = [];
6
6
 
7
- var askOp = undefined;
8
- var busy = undefined;
9
- var canRun = undefined;
10
- var cancelOp = undefined;
11
- var confirmDanger = undefined;
12
- var confirmLabel = undefined;
13
- var confirmTok = undefined;
14
- var confirmVerb = undefined;
15
- var deps = undefined;
16
- var filtered = undefined;
17
- var initialFilters = undefined;
18
- var opOutput = undefined;
19
- var opShown = undefined;
20
- var pending = undefined;
21
- var refresh = undefined;
22
- var runOp = undefined;
23
- var setFilter = undefined;
24
- var site = undefined;
25
- var sites = undefined;
26
- var status = undefined;
27
- var tone = undefined;
28
7
  var typed = undefined;
8
+ var tone = undefined;
9
+ var status = undefined;
10
+ var sites = undefined;
11
+ var site = undefined;
12
+ var setFilter = undefined;
13
+ var runOp = undefined;
14
+ var refresh = undefined;
15
+ var pending = undefined;
16
+ var opShown = undefined;
17
+ var opOutput = undefined;
18
+ var initialFilters = undefined;
19
+ var filtered = undefined;
20
+ var deps = undefined;
21
+ var confirmVerb = undefined;
22
+ var confirmTok = undefined;
23
+ var confirmLabel = undefined;
24
+ var confirmDanger = undefined;
25
+ var cancelOp = undefined;
26
+ var canRun = undefined;
27
+ var busy = undefined;
28
+ var askOp = undefined;
29
29
  var __stxBundle_5f35de5a3ce9 = (function() {
30
30
 
31
31
  var DANGEROUS_OPERATION = /(?:^|:)(?:delete|disable|destroy|purge|remove|restore|rollback|stop)(?::|$)/i;
@@ -136,35 +136,35 @@ var { opOutput, opShown, pending, typed, busy, confirmTok, confirmVerb, confirmD
136
136
  ` + body.stderr : "") + (body.error ? `
137
137
  ` + body.error : "");
138
138
  });
139
- return { "askOp": askOp, "busy": busy, "canRun": canRun, "cancelOp": cancelOp, "confirmDanger": confirmDanger, "confirmLabel": confirmLabel, "confirmTok": confirmTok, "confirmVerb": confirmVerb, "deps": deps, "filtered": filtered, "initialFilters": initialFilters, "opOutput": opOutput, "opShown": opShown, "pending": pending, "refresh": refresh, "runOp": runOp, "setFilter": setFilter, "site": site, "sites": sites, "status": status, "tone": tone, "typed": typed };
139
+ return { "typed": typed, "tone": tone, "status": status, "sites": sites, "site": site, "setFilter": setFilter, "runOp": runOp, "refresh": refresh, "pending": pending, "opShown": opShown, "opOutput": opOutput, "initialFilters": initialFilters, "filtered": filtered, "deps": deps, "confirmVerb": confirmVerb, "confirmTok": confirmTok, "confirmLabel": confirmLabel, "confirmDanger": confirmDanger, "cancelOp": cancelOp, "canRun": canRun, "busy": busy, "askOp": askOp };
140
140
  })();
141
- askOp = __stxBundle_5f35de5a3ce9["askOp"];
142
- busy = __stxBundle_5f35de5a3ce9["busy"];
143
- canRun = __stxBundle_5f35de5a3ce9["canRun"];
144
- cancelOp = __stxBundle_5f35de5a3ce9["cancelOp"];
145
- confirmDanger = __stxBundle_5f35de5a3ce9["confirmDanger"];
146
- confirmLabel = __stxBundle_5f35de5a3ce9["confirmLabel"];
147
- confirmTok = __stxBundle_5f35de5a3ce9["confirmTok"];
148
- confirmVerb = __stxBundle_5f35de5a3ce9["confirmVerb"];
149
- deps = __stxBundle_5f35de5a3ce9["deps"];
150
- filtered = __stxBundle_5f35de5a3ce9["filtered"];
151
- initialFilters = __stxBundle_5f35de5a3ce9["initialFilters"];
152
- opOutput = __stxBundle_5f35de5a3ce9["opOutput"];
153
- opShown = __stxBundle_5f35de5a3ce9["opShown"];
154
- pending = __stxBundle_5f35de5a3ce9["pending"];
155
- refresh = __stxBundle_5f35de5a3ce9["refresh"];
156
- runOp = __stxBundle_5f35de5a3ce9["runOp"];
157
- setFilter = __stxBundle_5f35de5a3ce9["setFilter"];
158
- site = __stxBundle_5f35de5a3ce9["site"];
159
- sites = __stxBundle_5f35de5a3ce9["sites"];
160
- status = __stxBundle_5f35de5a3ce9["status"];
161
- tone = __stxBundle_5f35de5a3ce9["tone"];
162
141
  typed = __stxBundle_5f35de5a3ce9["typed"];
163
- return { askOp, busy, canRun, cancelOp, confirmDanger, confirmLabel, confirmTok, confirmVerb, deps, filtered, initialFilters, opOutput, opShown, pending, refresh, runOp, setFilter, site, sites, status, tone, typed, __stxBundle_5f35de5a3ce9 };
142
+ tone = __stxBundle_5f35de5a3ce9["tone"];
143
+ status = __stxBundle_5f35de5a3ce9["status"];
144
+ sites = __stxBundle_5f35de5a3ce9["sites"];
145
+ site = __stxBundle_5f35de5a3ce9["site"];
146
+ setFilter = __stxBundle_5f35de5a3ce9["setFilter"];
147
+ runOp = __stxBundle_5f35de5a3ce9["runOp"];
148
+ refresh = __stxBundle_5f35de5a3ce9["refresh"];
149
+ pending = __stxBundle_5f35de5a3ce9["pending"];
150
+ opShown = __stxBundle_5f35de5a3ce9["opShown"];
151
+ opOutput = __stxBundle_5f35de5a3ce9["opOutput"];
152
+ initialFilters = __stxBundle_5f35de5a3ce9["initialFilters"];
153
+ filtered = __stxBundle_5f35de5a3ce9["filtered"];
154
+ deps = __stxBundle_5f35de5a3ce9["deps"];
155
+ confirmVerb = __stxBundle_5f35de5a3ce9["confirmVerb"];
156
+ confirmTok = __stxBundle_5f35de5a3ce9["confirmTok"];
157
+ confirmLabel = __stxBundle_5f35de5a3ce9["confirmLabel"];
158
+ confirmDanger = __stxBundle_5f35de5a3ce9["confirmDanger"];
159
+ cancelOp = __stxBundle_5f35de5a3ce9["cancelOp"];
160
+ canRun = __stxBundle_5f35de5a3ce9["canRun"];
161
+ busy = __stxBundle_5f35de5a3ce9["busy"];
162
+ askOp = __stxBundle_5f35de5a3ce9["askOp"];
163
+ return { typed, tone, status, sites, site, setFilter, runOp, refresh, pending, opShown, opOutput, initialFilters, filtered, deps, confirmVerb, confirmTok, confirmLabel, confirmDanger, cancelOp, canRun, busy, askOp, __stxBundle_5f35de5a3ce9 };
164
164
  }
165
- window.__stx_latestSetup=__stx_setup_1787597171340_24;
166
- if(window.stx)window.stx._latestSetup=__stx_setup_1787597171340_24;
167
- </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_1787597171340_24"><a data-stx-scope="stx_scope_nav_29" 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>acme-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 &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; 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>acme-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">
165
+ window.__stx_latestSetup=__stx_setup_1787597623618_23;
166
+ if(window.stx)window.stx._latestSetup=__stx_setup_1787597623618_23;
167
+ </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_1787597623618_23"><a data-stx-scope="stx_scope_nav_22" 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>acme-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 &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; 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>acme-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">
168
168
  (function() {
169
169
  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;
170
170
  var __destroyHooks = [];
@@ -515,6 +515,6 @@ if(window.stx)window.stx._latestSetup=__stx_setup_1787597171340_24;
515
515
 
516
516
 
517
517
  try { if (typeof __stxScopeRenames !== 'undefined' && __stxScopeRenames) { for (var __stxRK in __stxScopeRenames) __scopeRegistration[__stxRK] = __stxScopeRenames[__stxRK]; } } catch (e) { /* no renames */ }
518
- window.stx._scopes['stx_scope_nav_29'] = __scopeRegistration;
518
+ window.stx._scopes['stx_scope_nav_22'] = __scopeRegistration;
519
519
  })();
520
520
  </script> <div class="wrap"><div class="crumbs"><a href="/">Server</a><span class="sep">/</span> Deployments</div><header class="page"><div><h1>Deployments</h1><p>Server release history, newest first.</p></div><div class="cmds header-actions"><span class="accent cmd">cloud server:deploy acme-production-app</span></div></header><div class="section"><div class="panel"><div class="chart-panel subtle"><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><div class="filters"><div class="segmented" role="group" aria-label="Filter deployment status"><button type="button" :class="{ active: status() === 'all' }" @click="setFilter('status', 'all', status)">All</button><button type="button" :class="{ active: status() === 'success' }" @click="setFilter('status', 'success', status)">Success</button><button type="button" :class="{ active: status() === 'failed' }" @click="setFilter('status', 'failed', status)">Failed</button></div><label class="select-filter"><span>Site</span><select :value="site()" @change="setFilter('site', $event.target.value, site)"><option value="all">All sites</option><template :for="s in sites()"><option :value="s">{{ s }}</option></template></select></label></div><table><thead><tr><th scope="col">Build</th><th scope="col">Site</th><th scope="col">Branch</th><th scope="col">Status</th><th scope="col">Steps</th><th scope="col">By</th><th scope="col">Took</th><th scope="col">When</th><th scope="col">Action</th></tr></thead><tbody><template :for="d in filtered()"><tr><td class="mono" x-cloak>{{ d.sha }}</td><td x-cloak><b x-cloak>{{ d.site }}</b></td><td class="mono" style="color:var(--txt3)" x-cloak>{{ d.branch }}</td><td x-cloak><span class="pill" :class="tone(d.status)" x-cloak>{{ d.status }}</span></td><td class="mono" style="font-size:11px;color:var(--txt3)" x-cloak>{{ d.steps.join(' · ') }}</td><td style="color:var(--txt2)" x-cloak>{{ d.by }}</td><td class="mono" x-cloak>{{ d.took }}</td><td style="color:var(--txt3)" x-cloak>{{ d.when }}</td><td class="table-actions"><span class="mono">read only</span></td></tr></template></tbody></table><div class="empty" @show="deps().length === 0" x-cloak><strong>No deployments yet</strong><span>No deployment history has been recorded yet.</span></div><div class="compact empty" @show="deps().length > 0 && filtered().length === 0" x-cloak><strong>No matches</strong><span>Try a different status or site filter.</span></div><div class="op-confirm panel" @show="pending() !== null" role="group" aria-labelledby="op-confirm-prompt" x-cloak><span id="op-confirm-prompt" x-cloak>Type <b class="mono" x-cloak>{{ confirmTok() }}</b> to {{ confirmVerb() }}:</span><input data-stx-ref="opConfirmInput" class="op-confirm-input" :value="typed()" @input="typed.set($event.target.value)" @keydown.enter="runOp()" placeholder="confirm" autocomplete="off" aria-labelledby="op-confirm-prompt"><button type="button" class="btn sm" :class="{ danger: confirmDanger() }" :disabled="!canRun()" @click="runOp()" x-cloak>{{ confirmLabel() }}</button><button type="button" class="btn ghost sm" :disabled="busy()" @click="cancelOp()">Cancel</button></div><pre class="action-output op-output" @show="opShown()" aria-live="polite" x-cloak>{{ opOutput() }}</pre><p class="note">Roll back a site to any prior release, or inspect a box with <span class="mono">cloud server:logs acme-production-app</span>.</p></div></div></div></body></html>
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mt7l77jbzlapbv"><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 - Diagnostics</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 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_25" 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 &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; 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">
1
+ <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="mt7lgvq3gjbx1h"><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 - Diagnostics</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 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_25" 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 &amp; secrets</a><a class="" href="/data/backups?env=production">Backups &amp; 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">
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 = [];