@stacksjs/ts-cloud 0.11.7 → 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.
- package/dist/aws/index.js +1 -1
- package/dist/bin/chunk-0rtn6q5x.js +3 -0
- package/dist/bin/chunk-258ehp9s.js +1 -0
- package/dist/bin/chunk-2yctv06c.js +1 -0
- package/dist/bin/chunk-3276rveh.js +37 -0
- package/dist/bin/chunk-3m665jwp.js +70 -0
- package/dist/bin/chunk-3s2p9vxj.js +1 -0
- package/dist/bin/chunk-4esma5m9.js +1 -0
- package/dist/bin/chunk-4n0j3n3b.js +2 -0
- package/dist/bin/chunk-54bqchag.js +92 -0
- package/dist/bin/{chunk-4q6tad44.js → chunk-5bhx3bsa.js} +121 -121
- package/dist/bin/chunk-5zagqd20.js +1 -0
- package/dist/bin/chunk-7hw2js5h.js +512 -0
- package/dist/bin/chunk-8h1qr6x4.js +50 -0
- package/dist/bin/{chunk-w32xv8n4.js → chunk-9vdc7adf.js} +6 -6
- package/dist/bin/chunk-a1dd6sby.js +1 -0
- package/dist/bin/chunk-a4dw35gs.js +1 -0
- package/dist/bin/chunk-a9d55ker.js +1 -0
- package/dist/bin/chunk-awa1qade.js +9 -0
- package/dist/bin/chunk-b6by94pk.js +2 -0
- package/dist/bin/chunk-c8sypnbe.js +2 -0
- package/dist/bin/chunk-cx4e3d4w.js +1 -0
- package/dist/bin/chunk-d5a3vheh.js +2 -0
- package/dist/bin/chunk-e1fym2bd.js +1 -0
- package/dist/bin/chunk-ej4h0q2y.js +1 -0
- package/dist/bin/chunk-ett305ym.js +4 -0
- package/dist/bin/chunk-f11xf3n6.js +2 -0
- package/dist/bin/chunk-fq7ktvgy.js +3 -0
- package/dist/bin/chunk-fyq4th2m.js +1 -0
- package/dist/bin/chunk-g67qr8yf.js +1 -0
- package/dist/bin/chunk-gc82cx4h.js +1 -0
- package/dist/bin/chunk-hchtvpr9.js +1 -0
- package/dist/bin/chunk-hpe4jjce.js +1 -0
- package/dist/bin/chunk-k5vprsef.js +6 -0
- package/dist/bin/chunk-m22krd4z.js +3 -0
- package/dist/bin/chunk-mkppcwz8.js +1 -0
- package/dist/bin/chunk-mpjg0kc7.js +2 -0
- package/dist/bin/chunk-mrm4m4dk.js +2 -0
- package/dist/bin/chunk-nff46rxd.js +1 -0
- package/dist/bin/chunk-np1z3bgt.js +1 -0
- package/dist/bin/chunk-nskxkk6r.js +1 -0
- package/dist/bin/chunk-pez932b1.js +111 -0
- package/dist/bin/chunk-qsdf5kzk.js +2 -0
- package/dist/bin/chunk-r61qmhv1.js +2 -0
- package/dist/bin/chunk-r6gdcz5c.js +1 -0
- package/dist/bin/chunk-satwnr42.js +2 -0
- package/dist/bin/{chunk-dz1ec589.js → chunk-scqmd4qv.js} +30 -30
- package/dist/bin/chunk-smbycpt5.js +44 -0
- package/dist/bin/chunk-sn7e0sn7.js +2 -0
- package/dist/bin/chunk-ss574pka.js +1 -0
- package/dist/bin/chunk-tj0xb2d8.js +585 -0
- package/dist/bin/chunk-v3rzf9d0.js +141 -0
- package/dist/bin/chunk-wnpma6t3.js +34 -0
- package/dist/bin/chunk-xan0e052.js +5 -0
- package/dist/bin/chunk-xbk2y43r.js +60 -0
- package/dist/bin/chunk-xjp3v95e.js +6 -0
- package/dist/bin/chunk-xyt490vp.js +6 -0
- package/dist/bin/chunk-yn9r02gy.js +1 -0
- package/dist/bin/chunk-zhkhn9cc.js +1 -0
- package/dist/bin/cli.js +445 -430
- package/dist/bin/dashboard-server.js +1 -1
- package/dist/chunk-0zf72ngj.js +1 -0
- package/dist/chunk-2hpjte1d.js +704 -0
- package/dist/chunk-4m6gwhwr.js +5 -0
- package/dist/chunk-5m29dhke.js +34 -0
- package/dist/chunk-6fzeemcs.js +114 -0
- package/dist/{chunk-zz52xje8.js → chunk-6xcbfs2r.js} +111 -111
- package/dist/chunk-bpnhqb70.js +6 -0
- package/dist/chunk-ead1nkbr.js +60 -0
- package/dist/chunk-fea461tj.js +141 -0
- package/dist/chunk-fvjczc73.js +1 -0
- package/dist/chunk-gearw6rk.js +4 -0
- package/dist/chunk-j60hesb3.js +2 -0
- package/dist/chunk-pmgtmt3d.js +1 -0
- package/dist/chunk-prf2pkvq.js +5 -0
- package/dist/chunk-q0wffgw5.js +37 -0
- package/dist/chunk-qcemnt35.js +50 -0
- package/dist/chunk-qvbwsaay.js +1 -0
- package/dist/chunk-r2pbqcnz.js +2 -0
- package/dist/chunk-r6110zv2.js +1 -0
- package/dist/chunk-rr1yaj55.js +2 -0
- package/dist/chunk-wcrj06cg.js +44 -0
- package/dist/chunk-wte9mh18.js +92 -0
- package/dist/{chunk-aw0cgv5w.js → chunk-y1dh3znq.js} +52 -52
- package/dist/chunk-y6e86wjs.js +445 -0
- package/dist/chunk-y8b7ht4v.js +1 -0
- package/dist/chunk-yf487g6e.js +2 -0
- package/dist/chunk-zmmc9j5f.js +2 -0
- package/dist/deploy/index.js +1 -1
- package/dist/dns/index.js +1 -1
- package/dist/drivers/index.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +91 -91
- package/dist/operations/drained-sites.d.ts +56 -0
- package/dist/operations/drained-sites.test.d.ts +1 -0
- package/dist/pages/cloudflare-pages.d.ts +240 -0
- package/dist/pages/cloudflare-pages.test.d.ts +1 -0
- package/dist/pages/index.d.ts +2 -0
- package/dist/protection/index.js +1 -1
- package/dist/push/index.js +1 -1
- package/dist/spend/index.js +1 -1
- package/dist/ui/404.html +1 -1
- package/dist/ui/accept-invitation.html +1 -1
- package/dist/ui/access-denied.html +1 -1
- package/dist/ui/account/automation.html +6 -6
- package/dist/ui/account/security.html +2 -2
- package/dist/ui/applications/compose.html +6 -6
- package/dist/ui/applications/new.html +2 -2
- package/dist/ui/data/backups.html +80 -80
- package/dist/ui/data/services.html +78 -78
- package/dist/ui/data/volumes.html +50 -50
- package/dist/ui/index.html +50 -50
- package/dist/ui/infrastructure/topology.html +118 -118
- package/dist/ui/integrations.html +2 -2
- package/dist/ui/operations/alerts.html +48 -48
- package/dist/ui/operations/configuration.html +6 -6
- package/dist/ui/operations/jobs.html +75 -75
- package/dist/ui/operations/maintenance.html +6 -6
- package/dist/ui/operations/observability.html +82 -82
- package/dist/ui/operations/previews.html +6 -6
- package/dist/ui/operations/queue.html +6 -6
- package/dist/ui/operations/regions.html +6 -6
- package/dist/ui/operations/releases.html +6 -6
- package/dist/ui/operations/spend.html +54 -54
- package/dist/ui/operations/workloads.html +104 -104
- package/dist/ui/security.html +2 -2
- package/dist/ui/server/actions.html +56 -56
- package/dist/ui/server/activity.html +2 -2
- package/dist/ui/server/capacity.html +6 -6
- package/dist/ui/server/database.html +105 -105
- package/dist/ui/server/deployments.html +50 -50
- package/dist/ui/server/diagnostics.html +2 -2
- package/dist/ui/server/firewall.html +76 -76
- package/dist/ui/server/fleet.html +34 -34
- package/dist/ui/server/logs.html +24 -24
- package/dist/ui/server/metrics.html +112 -112
- package/dist/ui/server/security.html +1 -1
- package/dist/ui/server/services.html +26 -26
- package/dist/ui/server/sites.html +120 -120
- package/dist/ui/server/ssh-keys.html +52 -52
- package/dist/ui/server/team.html +144 -144
- package/dist/ui/server/terminal.html +15 -15
- package/dist/ui/serverless/alarms.html +52 -52
- package/dist/ui/serverless/assets.html +27 -27
- package/dist/ui/serverless/cost.html +2 -2
- package/dist/ui/serverless/data.html +35 -35
- package/dist/ui/serverless/deployments.html +27 -27
- package/dist/ui/serverless/firewall.html +2 -2
- package/dist/ui/serverless/functions.html +40 -40
- package/dist/ui/serverless/logs.html +24 -24
- package/dist/ui/serverless/metrics.html +2 -2
- package/dist/ui/serverless/queues.html +48 -48
- package/dist/ui/serverless/secrets.html +52 -52
- package/dist/ui/serverless/traces.html +6 -6
- package/dist/ui/serverless.html +53 -53
- package/dist/ui-src/src/charts.ts +8721 -13558
- package/dist/ui-src/src/topology.ts +2 -2
- package/package.json +4 -3
- package/dist/bin/chunk-0zwknfwp.js +0 -1
- package/dist/bin/chunk-3aph4c1w.js +0 -2
- package/dist/bin/chunk-4xhj37nj.js +0 -37
- package/dist/bin/chunk-5nkqza92.js +0 -1
- package/dist/bin/chunk-5nsqz5n3.js +0 -585
- package/dist/bin/chunk-64vczwwt.js +0 -1
- package/dist/bin/chunk-6tfwm33r.js +0 -6
- package/dist/bin/chunk-7g2ahkse.js +0 -1
- package/dist/bin/chunk-7zhgmp1s.js +0 -3
- package/dist/bin/chunk-82mj52xr.js +0 -141
- package/dist/bin/chunk-8khgprf6.js +0 -44
- package/dist/bin/chunk-9a88fp00.js +0 -2
- package/dist/bin/chunk-a7w13qfm.js +0 -2
- package/dist/bin/chunk-b4wt9jcg.js +0 -60
- package/dist/bin/chunk-btsyjhk7.js +0 -92
- package/dist/bin/chunk-c0bdafbx.js +0 -2
- package/dist/bin/chunk-cbsys5v8.js +0 -111
- package/dist/bin/chunk-cd0ps58j.js +0 -1
- package/dist/bin/chunk-d7ke90zt.js +0 -2
- package/dist/bin/chunk-djg4zyqk.js +0 -1
- package/dist/bin/chunk-dkaz333b.js +0 -1
- package/dist/bin/chunk-dkf4qsp2.js +0 -1
- package/dist/bin/chunk-e2bybahr.js +0 -3
- package/dist/bin/chunk-e5ab5twy.js +0 -50
- package/dist/bin/chunk-edvvx3hg.js +0 -1
- package/dist/bin/chunk-ehc63fvs.js +0 -2
- package/dist/bin/chunk-f06c5np9.js +0 -1
- package/dist/bin/chunk-g0fm1xcs.js +0 -1
- package/dist/bin/chunk-gq8794k6.js +0 -1
- package/dist/bin/chunk-hq9x489e.js +0 -70
- package/dist/bin/chunk-j447p8t4.js +0 -512
- package/dist/bin/chunk-ja1vjdn1.js +0 -6
- package/dist/bin/chunk-k3120rx6.js +0 -1
- package/dist/bin/chunk-kg61p5hw.js +0 -3
- package/dist/bin/chunk-mcr0r4at.js +0 -2
- package/dist/bin/chunk-mfrf9q4b.js +0 -2
- package/dist/bin/chunk-my3ewh3a.js +0 -34
- package/dist/bin/chunk-nw3d4k52.js +0 -1
- package/dist/bin/chunk-p70bc9yr.js +0 -1
- package/dist/bin/chunk-r6b3pq31.js +0 -4
- package/dist/bin/chunk-s4yzes15.js +0 -2
- package/dist/bin/chunk-sj5csg49.js +0 -2
- package/dist/bin/chunk-tvz9c388.js +0 -1
- package/dist/bin/chunk-wkx799z2.js +0 -1
- package/dist/bin/chunk-x6f61g36.js +0 -9
- package/dist/bin/chunk-xhwqpgwq.js +0 -2
- package/dist/bin/chunk-xk08030d.js +0 -6
- package/dist/bin/chunk-y1h63vpm.js +0 -1
- package/dist/bin/chunk-yw6f160x.js +0 -1
- package/dist/bin/chunk-zdt2rjk6.js +0 -1
- package/dist/bin/chunk-zh2d4704.js +0 -1
- package/dist/bin/chunk-znnawt0k.js +0 -1
- package/dist/bin/chunk-zpe64t4r.js +0 -1
- package/dist/bin/chunk-zsf6pccz.js +0 -1
- package/dist/chunk-1qdne0bf.js +0 -1
- package/dist/chunk-5vt93kxx.js +0 -1
- package/dist/chunk-73ztr55z.js +0 -2
- package/dist/chunk-95e6aeqz.js +0 -1
- package/dist/chunk-aj025v2s.js +0 -4
- package/dist/chunk-aw0spg20.js +0 -445
- package/dist/chunk-by2bwzk6.js +0 -141
- package/dist/chunk-dr4pj8hp.js +0 -5
- package/dist/chunk-hn40z11p.js +0 -37
- package/dist/chunk-kasdm9tx.js +0 -34
- package/dist/chunk-mz0dk78z.js +0 -6
- package/dist/chunk-nk7sav4r.js +0 -92
- package/dist/chunk-p10xt3jb.js +0 -1
- package/dist/chunk-q0rc1ax9.js +0 -114
- package/dist/chunk-q9q6cmt0.js +0 -1
- package/dist/chunk-rd38qdnf.js +0 -1
- package/dist/chunk-tz9myq9a.js +0 -2
- package/dist/chunk-wavjkdb8.js +0 -2
- package/dist/chunk-x3hay61c.js +0 -44
- package/dist/chunk-xcj8zfmg.js +0 -2
- package/dist/chunk-y4xkj2f1.js +0 -50
- package/dist/chunk-ywjkyg8p.js +0 -704
- package/dist/chunk-z2qqwy7e.js +0 -2
- package/dist/chunk-zam6ecam.js +0 -60
package/dist/ui/server/team.html
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="
|
|
2
|
-
function
|
|
1
|
+
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="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.d5301f79.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud - People & access</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_1787597624628_29() {
|
|
3
3
|
const { batch, computed, configureFetch, defineEmits, defineExpose, definePageMeta, defineProps, defineSlots, defineStore, derived, effect, goBack, goForward, inject, invalidateRoute, isDerived, isSignal, navigate, nextTick, onBeforeMount, onBeforeUnmount, onDestroy, onMount, onMounted, onUnmounted, peek, provide, reactive, ref, refresh, registerStoresClient, setRouteParams, state, untrack, useAsync, useClickOutside, useColorMode, useCookie, useCounter, useDark, useDebounce, useDebouncedValue, useEventListener, useFetch, useFocus, useHead, useId, useInterval, useLocalStorage, useMediaQuery, useMutation, useOptimistic, usePreferredContrast, usePreferredDark, usePreferredLight, usePreferredReducedMotion, useQuery, useReactiveProp, useRef, useRoute, useRouteParam, useRouteParams, useScrollLock, useSearchParams, useSeoMeta, useSessionStorage, useSlots, useStore, useThrottle, useTimeout, useToggle, useWebSocket, watch, watchEffect, watchMultiple, withDefaults } = window.stx;
|
|
4
4
|
|
|
5
|
-
var accessDiff = undefined;
|
|
6
|
-
var actorName = undefined;
|
|
7
|
-
var askOp = undefined;
|
|
8
|
-
var beginEdit = undefined;
|
|
9
|
-
var beginRemove = undefined;
|
|
10
|
-
var busy = undefined;
|
|
11
|
-
var canRun = undefined;
|
|
12
|
-
var cancelOp = undefined;
|
|
13
|
-
var changeMembership = undefined;
|
|
14
|
-
var confirmDanger = undefined;
|
|
15
|
-
var confirmLabel = undefined;
|
|
16
|
-
var confirmTok = undefined;
|
|
17
|
-
var confirmVerb = undefined;
|
|
18
|
-
var editConfirm = undefined;
|
|
19
|
-
var editPassword = undefined;
|
|
20
|
-
var editRole = undefined;
|
|
21
|
-
var editScopeId = undefined;
|
|
22
|
-
var editScopeType = undefined;
|
|
23
|
-
var editing = undefined;
|
|
24
|
-
var email = undefined;
|
|
25
|
-
var environments = undefined;
|
|
26
|
-
var invitationAction = undefined;
|
|
27
|
-
var invitationState = undefined;
|
|
28
|
-
var invitations = undefined;
|
|
29
|
-
var invite = undefined;
|
|
30
|
-
var issued = undefined;
|
|
31
|
-
var load = undefined;
|
|
32
|
-
var loadOidc = undefined;
|
|
33
|
-
var memberships = undefined;
|
|
34
|
-
var message = undefined;
|
|
35
|
-
var messageKind = undefined;
|
|
36
|
-
var oidcCallbackPattern = undefined;
|
|
37
|
-
var oidcClientId = undefined;
|
|
38
|
-
var oidcClientSecret = undefined;
|
|
39
|
-
var oidcCode = undefined;
|
|
40
|
-
var oidcDefaultRole = undefined;
|
|
41
|
-
var oidcDomains = undefined;
|
|
42
|
-
var oidcEditing = undefined;
|
|
43
|
-
var oidcEnforce = undefined;
|
|
44
|
-
var oidcFormOpen = undefined;
|
|
45
|
-
var oidcIssuer = undefined;
|
|
46
|
-
var oidcName = undefined;
|
|
47
|
-
var oidcPassword = undefined;
|
|
48
|
-
var oidcProviders = undefined;
|
|
49
|
-
var oidcSlug = undefined;
|
|
50
|
-
var oidcStepUp = undefined;
|
|
51
|
-
var opOutput = undefined;
|
|
52
|
-
var opShown = undefined;
|
|
53
|
-
var organization = undefined;
|
|
54
|
-
var ownerPassword = undefined;
|
|
55
|
-
var pageBusy = undefined;
|
|
56
|
-
var pending = undefined;
|
|
57
|
-
var project = undefined;
|
|
58
|
-
var removeMembership = undefined;
|
|
59
|
-
var removePassword = undefined;
|
|
60
|
-
var removing = undefined;
|
|
61
|
-
var resetOidc = undefined;
|
|
62
|
-
var resources = undefined;
|
|
63
|
-
var roleSummary = undefined;
|
|
64
|
-
var roleTemplate = undefined;
|
|
65
|
-
var runOp = undefined;
|
|
66
|
-
var saveOidc = undefined;
|
|
67
|
-
var scopeId = undefined;
|
|
68
|
-
var scopeLabel = undefined;
|
|
69
|
-
var scopeType = undefined;
|
|
70
|
-
var setMessage = undefined;
|
|
71
|
-
var setOidcEnabled = undefined;
|
|
72
|
-
var setScope = undefined;
|
|
73
5
|
var typed = undefined;
|
|
6
|
+
var setScope = undefined;
|
|
7
|
+
var setOidcEnabled = undefined;
|
|
8
|
+
var setMessage = undefined;
|
|
9
|
+
var scopeType = undefined;
|
|
10
|
+
var scopeLabel = undefined;
|
|
11
|
+
var scopeId = undefined;
|
|
12
|
+
var saveOidc = undefined;
|
|
13
|
+
var runOp = undefined;
|
|
14
|
+
var roleTemplate = undefined;
|
|
15
|
+
var roleSummary = undefined;
|
|
16
|
+
var resources = undefined;
|
|
17
|
+
var resetOidc = undefined;
|
|
18
|
+
var removing = undefined;
|
|
19
|
+
var removePassword = undefined;
|
|
20
|
+
var removeMembership = undefined;
|
|
21
|
+
var project = undefined;
|
|
22
|
+
var pending = undefined;
|
|
23
|
+
var pageBusy = undefined;
|
|
24
|
+
var ownerPassword = undefined;
|
|
25
|
+
var organization = undefined;
|
|
26
|
+
var opShown = undefined;
|
|
27
|
+
var opOutput = undefined;
|
|
28
|
+
var oidcStepUp = undefined;
|
|
29
|
+
var oidcSlug = undefined;
|
|
30
|
+
var oidcProviders = undefined;
|
|
31
|
+
var oidcPassword = undefined;
|
|
32
|
+
var oidcName = undefined;
|
|
33
|
+
var oidcIssuer = undefined;
|
|
34
|
+
var oidcFormOpen = undefined;
|
|
35
|
+
var oidcEnforce = undefined;
|
|
36
|
+
var oidcEditing = undefined;
|
|
37
|
+
var oidcDomains = undefined;
|
|
38
|
+
var oidcDefaultRole = undefined;
|
|
39
|
+
var oidcCode = undefined;
|
|
40
|
+
var oidcClientSecret = undefined;
|
|
41
|
+
var oidcClientId = undefined;
|
|
42
|
+
var oidcCallbackPattern = undefined;
|
|
43
|
+
var messageKind = undefined;
|
|
44
|
+
var message = undefined;
|
|
45
|
+
var memberships = undefined;
|
|
46
|
+
var loadOidc = undefined;
|
|
47
|
+
var load = undefined;
|
|
48
|
+
var issued = undefined;
|
|
49
|
+
var invite = undefined;
|
|
50
|
+
var invitations = undefined;
|
|
51
|
+
var invitationState = undefined;
|
|
52
|
+
var invitationAction = undefined;
|
|
53
|
+
var environments = undefined;
|
|
54
|
+
var email = undefined;
|
|
55
|
+
var editing = undefined;
|
|
56
|
+
var editScopeType = undefined;
|
|
57
|
+
var editScopeId = undefined;
|
|
58
|
+
var editRole = undefined;
|
|
59
|
+
var editPassword = undefined;
|
|
60
|
+
var editConfirm = undefined;
|
|
61
|
+
var confirmVerb = undefined;
|
|
62
|
+
var confirmTok = undefined;
|
|
63
|
+
var confirmLabel = undefined;
|
|
64
|
+
var confirmDanger = undefined;
|
|
65
|
+
var changeMembership = undefined;
|
|
66
|
+
var cancelOp = undefined;
|
|
67
|
+
var canRun = undefined;
|
|
68
|
+
var busy = undefined;
|
|
69
|
+
var beginRemove = undefined;
|
|
70
|
+
var beginEdit = undefined;
|
|
71
|
+
var askOp = undefined;
|
|
72
|
+
var actorName = undefined;
|
|
73
|
+
var accessDiff = undefined;
|
|
74
74
|
var __stxBundle_68f465b3f416 = (function() {
|
|
75
75
|
|
|
76
76
|
var DANGEROUS_OPERATION = /(?:^|:)(?:delete|disable|destroy|purge|remove|restore|rollback|stop)(?::|$)/i;
|
|
@@ -447,82 +447,82 @@ onMount(() => {
|
|
|
447
447
|
load();
|
|
448
448
|
loadOidc();
|
|
449
449
|
});
|
|
450
|
-
return { "
|
|
450
|
+
return { "typed": typed, "setScope": setScope, "setOidcEnabled": setOidcEnabled, "setMessage": setMessage, "scopeType": scopeType, "scopeLabel": scopeLabel, "scopeId": scopeId, "saveOidc": saveOidc, "runOp": runOp, "roleTemplate": roleTemplate, "roleSummary": roleSummary, "resources": resources, "resetOidc": resetOidc, "removing": removing, "removePassword": removePassword, "removeMembership": removeMembership, "project": project, "pending": pending, "pageBusy": pageBusy, "ownerPassword": ownerPassword, "organization": organization, "opShown": opShown, "opOutput": opOutput, "oidcStepUp": oidcStepUp, "oidcSlug": oidcSlug, "oidcProviders": oidcProviders, "oidcPassword": oidcPassword, "oidcName": oidcName, "oidcIssuer": oidcIssuer, "oidcFormOpen": oidcFormOpen, "oidcEnforce": oidcEnforce, "oidcEditing": oidcEditing, "oidcDomains": oidcDomains, "oidcDefaultRole": oidcDefaultRole, "oidcCode": oidcCode, "oidcClientSecret": oidcClientSecret, "oidcClientId": oidcClientId, "oidcCallbackPattern": oidcCallbackPattern, "messageKind": messageKind, "message": message, "memberships": memberships, "loadOidc": loadOidc, "load": load, "issued": issued, "invite": invite, "invitations": invitations, "invitationState": invitationState, "invitationAction": invitationAction, "environments": environments, "email": email, "editing": editing, "editScopeType": editScopeType, "editScopeId": editScopeId, "editRole": editRole, "editPassword": editPassword, "editConfirm": editConfirm, "confirmVerb": confirmVerb, "confirmTok": confirmTok, "confirmLabel": confirmLabel, "confirmDanger": confirmDanger, "changeMembership": changeMembership, "cancelOp": cancelOp, "canRun": canRun, "busy": busy, "beginRemove": beginRemove, "beginEdit": beginEdit, "askOp": askOp, "actorName": actorName, "accessDiff": accessDiff };
|
|
451
451
|
})();
|
|
452
|
-
accessDiff = __stxBundle_68f465b3f416["accessDiff"];
|
|
453
|
-
actorName = __stxBundle_68f465b3f416["actorName"];
|
|
454
|
-
askOp = __stxBundle_68f465b3f416["askOp"];
|
|
455
|
-
beginEdit = __stxBundle_68f465b3f416["beginEdit"];
|
|
456
|
-
beginRemove = __stxBundle_68f465b3f416["beginRemove"];
|
|
457
|
-
busy = __stxBundle_68f465b3f416["busy"];
|
|
458
|
-
canRun = __stxBundle_68f465b3f416["canRun"];
|
|
459
|
-
cancelOp = __stxBundle_68f465b3f416["cancelOp"];
|
|
460
|
-
changeMembership = __stxBundle_68f465b3f416["changeMembership"];
|
|
461
|
-
confirmDanger = __stxBundle_68f465b3f416["confirmDanger"];
|
|
462
|
-
confirmLabel = __stxBundle_68f465b3f416["confirmLabel"];
|
|
463
|
-
confirmTok = __stxBundle_68f465b3f416["confirmTok"];
|
|
464
|
-
confirmVerb = __stxBundle_68f465b3f416["confirmVerb"];
|
|
465
|
-
editConfirm = __stxBundle_68f465b3f416["editConfirm"];
|
|
466
|
-
editPassword = __stxBundle_68f465b3f416["editPassword"];
|
|
467
|
-
editRole = __stxBundle_68f465b3f416["editRole"];
|
|
468
|
-
editScopeId = __stxBundle_68f465b3f416["editScopeId"];
|
|
469
|
-
editScopeType = __stxBundle_68f465b3f416["editScopeType"];
|
|
470
|
-
editing = __stxBundle_68f465b3f416["editing"];
|
|
471
|
-
email = __stxBundle_68f465b3f416["email"];
|
|
472
|
-
environments = __stxBundle_68f465b3f416["environments"];
|
|
473
|
-
invitationAction = __stxBundle_68f465b3f416["invitationAction"];
|
|
474
|
-
invitationState = __stxBundle_68f465b3f416["invitationState"];
|
|
475
|
-
invitations = __stxBundle_68f465b3f416["invitations"];
|
|
476
|
-
invite = __stxBundle_68f465b3f416["invite"];
|
|
477
|
-
issued = __stxBundle_68f465b3f416["issued"];
|
|
478
|
-
load = __stxBundle_68f465b3f416["load"];
|
|
479
|
-
loadOidc = __stxBundle_68f465b3f416["loadOidc"];
|
|
480
|
-
memberships = __stxBundle_68f465b3f416["memberships"];
|
|
481
|
-
message = __stxBundle_68f465b3f416["message"];
|
|
482
|
-
messageKind = __stxBundle_68f465b3f416["messageKind"];
|
|
483
|
-
oidcCallbackPattern = __stxBundle_68f465b3f416["oidcCallbackPattern"];
|
|
484
|
-
oidcClientId = __stxBundle_68f465b3f416["oidcClientId"];
|
|
485
|
-
oidcClientSecret = __stxBundle_68f465b3f416["oidcClientSecret"];
|
|
486
|
-
oidcCode = __stxBundle_68f465b3f416["oidcCode"];
|
|
487
|
-
oidcDefaultRole = __stxBundle_68f465b3f416["oidcDefaultRole"];
|
|
488
|
-
oidcDomains = __stxBundle_68f465b3f416["oidcDomains"];
|
|
489
|
-
oidcEditing = __stxBundle_68f465b3f416["oidcEditing"];
|
|
490
|
-
oidcEnforce = __stxBundle_68f465b3f416["oidcEnforce"];
|
|
491
|
-
oidcFormOpen = __stxBundle_68f465b3f416["oidcFormOpen"];
|
|
492
|
-
oidcIssuer = __stxBundle_68f465b3f416["oidcIssuer"];
|
|
493
|
-
oidcName = __stxBundle_68f465b3f416["oidcName"];
|
|
494
|
-
oidcPassword = __stxBundle_68f465b3f416["oidcPassword"];
|
|
495
|
-
oidcProviders = __stxBundle_68f465b3f416["oidcProviders"];
|
|
496
|
-
oidcSlug = __stxBundle_68f465b3f416["oidcSlug"];
|
|
497
|
-
oidcStepUp = __stxBundle_68f465b3f416["oidcStepUp"];
|
|
498
|
-
opOutput = __stxBundle_68f465b3f416["opOutput"];
|
|
499
|
-
opShown = __stxBundle_68f465b3f416["opShown"];
|
|
500
|
-
organization = __stxBundle_68f465b3f416["organization"];
|
|
501
|
-
ownerPassword = __stxBundle_68f465b3f416["ownerPassword"];
|
|
502
|
-
pageBusy = __stxBundle_68f465b3f416["pageBusy"];
|
|
503
|
-
pending = __stxBundle_68f465b3f416["pending"];
|
|
504
|
-
project = __stxBundle_68f465b3f416["project"];
|
|
505
|
-
removeMembership = __stxBundle_68f465b3f416["removeMembership"];
|
|
506
|
-
removePassword = __stxBundle_68f465b3f416["removePassword"];
|
|
507
|
-
removing = __stxBundle_68f465b3f416["removing"];
|
|
508
|
-
resetOidc = __stxBundle_68f465b3f416["resetOidc"];
|
|
509
|
-
resources = __stxBundle_68f465b3f416["resources"];
|
|
510
|
-
roleSummary = __stxBundle_68f465b3f416["roleSummary"];
|
|
511
|
-
roleTemplate = __stxBundle_68f465b3f416["roleTemplate"];
|
|
512
|
-
runOp = __stxBundle_68f465b3f416["runOp"];
|
|
513
|
-
saveOidc = __stxBundle_68f465b3f416["saveOidc"];
|
|
514
|
-
scopeId = __stxBundle_68f465b3f416["scopeId"];
|
|
515
|
-
scopeLabel = __stxBundle_68f465b3f416["scopeLabel"];
|
|
516
|
-
scopeType = __stxBundle_68f465b3f416["scopeType"];
|
|
517
|
-
setMessage = __stxBundle_68f465b3f416["setMessage"];
|
|
518
|
-
setOidcEnabled = __stxBundle_68f465b3f416["setOidcEnabled"];
|
|
519
|
-
setScope = __stxBundle_68f465b3f416["setScope"];
|
|
520
452
|
typed = __stxBundle_68f465b3f416["typed"];
|
|
521
|
-
|
|
453
|
+
setScope = __stxBundle_68f465b3f416["setScope"];
|
|
454
|
+
setOidcEnabled = __stxBundle_68f465b3f416["setOidcEnabled"];
|
|
455
|
+
setMessage = __stxBundle_68f465b3f416["setMessage"];
|
|
456
|
+
scopeType = __stxBundle_68f465b3f416["scopeType"];
|
|
457
|
+
scopeLabel = __stxBundle_68f465b3f416["scopeLabel"];
|
|
458
|
+
scopeId = __stxBundle_68f465b3f416["scopeId"];
|
|
459
|
+
saveOidc = __stxBundle_68f465b3f416["saveOidc"];
|
|
460
|
+
runOp = __stxBundle_68f465b3f416["runOp"];
|
|
461
|
+
roleTemplate = __stxBundle_68f465b3f416["roleTemplate"];
|
|
462
|
+
roleSummary = __stxBundle_68f465b3f416["roleSummary"];
|
|
463
|
+
resources = __stxBundle_68f465b3f416["resources"];
|
|
464
|
+
resetOidc = __stxBundle_68f465b3f416["resetOidc"];
|
|
465
|
+
removing = __stxBundle_68f465b3f416["removing"];
|
|
466
|
+
removePassword = __stxBundle_68f465b3f416["removePassword"];
|
|
467
|
+
removeMembership = __stxBundle_68f465b3f416["removeMembership"];
|
|
468
|
+
project = __stxBundle_68f465b3f416["project"];
|
|
469
|
+
pending = __stxBundle_68f465b3f416["pending"];
|
|
470
|
+
pageBusy = __stxBundle_68f465b3f416["pageBusy"];
|
|
471
|
+
ownerPassword = __stxBundle_68f465b3f416["ownerPassword"];
|
|
472
|
+
organization = __stxBundle_68f465b3f416["organization"];
|
|
473
|
+
opShown = __stxBundle_68f465b3f416["opShown"];
|
|
474
|
+
opOutput = __stxBundle_68f465b3f416["opOutput"];
|
|
475
|
+
oidcStepUp = __stxBundle_68f465b3f416["oidcStepUp"];
|
|
476
|
+
oidcSlug = __stxBundle_68f465b3f416["oidcSlug"];
|
|
477
|
+
oidcProviders = __stxBundle_68f465b3f416["oidcProviders"];
|
|
478
|
+
oidcPassword = __stxBundle_68f465b3f416["oidcPassword"];
|
|
479
|
+
oidcName = __stxBundle_68f465b3f416["oidcName"];
|
|
480
|
+
oidcIssuer = __stxBundle_68f465b3f416["oidcIssuer"];
|
|
481
|
+
oidcFormOpen = __stxBundle_68f465b3f416["oidcFormOpen"];
|
|
482
|
+
oidcEnforce = __stxBundle_68f465b3f416["oidcEnforce"];
|
|
483
|
+
oidcEditing = __stxBundle_68f465b3f416["oidcEditing"];
|
|
484
|
+
oidcDomains = __stxBundle_68f465b3f416["oidcDomains"];
|
|
485
|
+
oidcDefaultRole = __stxBundle_68f465b3f416["oidcDefaultRole"];
|
|
486
|
+
oidcCode = __stxBundle_68f465b3f416["oidcCode"];
|
|
487
|
+
oidcClientSecret = __stxBundle_68f465b3f416["oidcClientSecret"];
|
|
488
|
+
oidcClientId = __stxBundle_68f465b3f416["oidcClientId"];
|
|
489
|
+
oidcCallbackPattern = __stxBundle_68f465b3f416["oidcCallbackPattern"];
|
|
490
|
+
messageKind = __stxBundle_68f465b3f416["messageKind"];
|
|
491
|
+
message = __stxBundle_68f465b3f416["message"];
|
|
492
|
+
memberships = __stxBundle_68f465b3f416["memberships"];
|
|
493
|
+
loadOidc = __stxBundle_68f465b3f416["loadOidc"];
|
|
494
|
+
load = __stxBundle_68f465b3f416["load"];
|
|
495
|
+
issued = __stxBundle_68f465b3f416["issued"];
|
|
496
|
+
invite = __stxBundle_68f465b3f416["invite"];
|
|
497
|
+
invitations = __stxBundle_68f465b3f416["invitations"];
|
|
498
|
+
invitationState = __stxBundle_68f465b3f416["invitationState"];
|
|
499
|
+
invitationAction = __stxBundle_68f465b3f416["invitationAction"];
|
|
500
|
+
environments = __stxBundle_68f465b3f416["environments"];
|
|
501
|
+
email = __stxBundle_68f465b3f416["email"];
|
|
502
|
+
editing = __stxBundle_68f465b3f416["editing"];
|
|
503
|
+
editScopeType = __stxBundle_68f465b3f416["editScopeType"];
|
|
504
|
+
editScopeId = __stxBundle_68f465b3f416["editScopeId"];
|
|
505
|
+
editRole = __stxBundle_68f465b3f416["editRole"];
|
|
506
|
+
editPassword = __stxBundle_68f465b3f416["editPassword"];
|
|
507
|
+
editConfirm = __stxBundle_68f465b3f416["editConfirm"];
|
|
508
|
+
confirmVerb = __stxBundle_68f465b3f416["confirmVerb"];
|
|
509
|
+
confirmTok = __stxBundle_68f465b3f416["confirmTok"];
|
|
510
|
+
confirmLabel = __stxBundle_68f465b3f416["confirmLabel"];
|
|
511
|
+
confirmDanger = __stxBundle_68f465b3f416["confirmDanger"];
|
|
512
|
+
changeMembership = __stxBundle_68f465b3f416["changeMembership"];
|
|
513
|
+
cancelOp = __stxBundle_68f465b3f416["cancelOp"];
|
|
514
|
+
canRun = __stxBundle_68f465b3f416["canRun"];
|
|
515
|
+
busy = __stxBundle_68f465b3f416["busy"];
|
|
516
|
+
beginRemove = __stxBundle_68f465b3f416["beginRemove"];
|
|
517
|
+
beginEdit = __stxBundle_68f465b3f416["beginEdit"];
|
|
518
|
+
askOp = __stxBundle_68f465b3f416["askOp"];
|
|
519
|
+
actorName = __stxBundle_68f465b3f416["actorName"];
|
|
520
|
+
accessDiff = __stxBundle_68f465b3f416["accessDiff"];
|
|
521
|
+
return { typed, setScope, setOidcEnabled, setMessage, scopeType, scopeLabel, scopeId, saveOidc, runOp, roleTemplate, roleSummary, resources, resetOidc, removing, removePassword, removeMembership, project, pending, pageBusy, ownerPassword, organization, opShown, opOutput, oidcStepUp, oidcSlug, oidcProviders, oidcPassword, oidcName, oidcIssuer, oidcFormOpen, oidcEnforce, oidcEditing, oidcDomains, oidcDefaultRole, oidcCode, oidcClientSecret, oidcClientId, oidcCallbackPattern, messageKind, message, memberships, loadOidc, load, issued, invite, invitations, invitationState, invitationAction, environments, email, editing, editScopeType, editScopeId, editRole, editPassword, editConfirm, confirmVerb, confirmTok, confirmLabel, confirmDanger, changeMembership, cancelOp, canRun, busy, beginRemove, beginEdit, askOp, actorName, accessDiff, __stxBundle_68f465b3f416 };
|
|
522
522
|
}
|
|
523
|
-
window.__stx_latestSetup=
|
|
524
|
-
if(window.stx)window.stx._latestSetup=
|
|
525
|
-
</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="
|
|
523
|
+
window.__stx_latestSetup=__stx_setup_1787597624628_29;
|
|
524
|
+
if(window.stx)window.stx._latestSetup=__stx_setup_1787597624628_29;
|
|
525
|
+
</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_1787597624628_29"><a data-stx-scope="stx_scope_nav_40" 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 & secrets</a><a class="" href="/data/backups?env=production">Backups & recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="active" 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">
|
|
526
526
|
(function() {
|
|
527
527
|
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;
|
|
528
528
|
var __destroyHooks = [];
|
|
@@ -873,6 +873,6 @@ if(window.stx)window.stx._latestSetup=__stx_setup_1787514991635_27;
|
|
|
873
873
|
|
|
874
874
|
|
|
875
875
|
try { if (typeof __stxScopeRenames !== 'undefined' && __stxScopeRenames) { for (var __stxRK in __stxScopeRenames) __scopeRegistration[__stxRK] = __stxScopeRenames[__stxRK]; } } catch (e) { /* no renames */ }
|
|
876
|
-
window.stx._scopes['
|
|
876
|
+
window.stx._scopes['stx_scope_nav_40'] = __scopeRegistration;
|
|
877
877
|
})();
|
|
878
878
|
</script> <div class="wrap"><div class="crumbs"><a href="/">Dashboard</a><span class="sep">/</span> Organization <span class="sep">/</span> People & access</div><header class="page"><div><h1>People & access</h1><p>Organization roles are inherited only within their assigned project, environment, or resource scope. Explicit denies always win.</p></div></header><div class="access-message msg" :class="messageKind()" role="status" x-cloak>{{ message() }}</div><div class="section"><h2>Single sign-on</h2><div class="panel sso-panel"><div class="sso-intro"><div><strong>OpenID Connect providers</strong><p>Discovery, issuer binding, state, nonce, PKCE, signed ID tokens, and verified email-domain policy are enforced. Provider access and refresh tokens are discarded.</p></div><button class="btn" type="button" @click="resetOidc(null)">Add provider</button></div><div class="recovery-warning"><strong>Keep the recovery path proven.</strong><span>Organization owners can always use local sign-in. Before enforcement, verify the owner email, save MFA recovery codes, and test <code>cloud auth:oidc:disable <slug> --confirm <slug></code> from the host.</span></div><div class="callback" @show="!!oidcCallbackPattern()" x-cloak><span>Callback URI</span><code x-cloak>{{ oidcCallbackPattern() }}</code></div><div class="provider-list" x-cloak><template :for="provider in oidcProviders()"><div class="provider-row" x-cloak><div x-cloak><strong x-cloak>{{ provider.name }}</strong><span x-cloak>{{ provider.issuer }}</span><small x-cloak>{{ provider.allowedDomains.join(', ') }} · new users: {{ provider.defaultRole }} · {{ provider.enforceSso ? 'SSO required' : 'local sign-in allowed' }}</small></div><span class="tag" :class="provider.enabled ? 'ok' : ''" x-cloak>{{ provider.enabled ? 'Enabled' : 'Disabled' }}</span><div class="table-actions"><button class="btn ghost sm" type="button" @click="resetOidc(provider)">Configure</button></div></div></template><div class="compact empty" @show="oidcProviders().length === 0" x-cloak><strong>No SSO providers</strong><span>Local authentication remains available until an OIDC provider is explicitly configured.</span></div></div></div></div><div class="section" @show="oidcFormOpen()" x-cloak><h2 x-cloak>{{ oidcEditing() ? 'Configure SSO provider' : 'Add SSO provider' }}</h2><div class="panel"><form class="form-grid" @submit.prevent="saveOidc()"><div class="field-block"><label for="oidc-name">Display name</label><input id="oidc-name" :value="oidcName()" @input="oidcName.set($event.target.value)" placeholder="Acme Workforce" required></div><div class="field-block"><label for="oidc-slug">Slug</label><input id="oidc-slug" :value="oidcSlug()" @input="oidcSlug.set($event.target.value)" pattern="[a-z0-9][a-z0-9-]{1,47}" placeholder="workforce" required></div><div class="field-block"><label for="oidc-issuer">Exact issuer URL</label><input id="oidc-issuer" type="url" :value="oidcIssuer()" @input="oidcIssuer.set($event.target.value)" placeholder="https://identity.example.com" required><small>HTTPS discovery issuer must match this value exactly.</small></div><div class="field-block"><label for="oidc-client">Client ID</label><input id="oidc-client" :value="oidcClientId()" @input="oidcClientId.set($event.target.value)" autocomplete="off" required></div><div class="field-block"><label for="oidc-secret">Client secret</label><input id="oidc-secret" type="password" :value="oidcClientSecret()" @input="oidcClientSecret.set($event.target.value)" autocomplete="new-password" :required="!oidcEditing()"><small x-cloak>{{ oidcEditing() ? 'Leave empty to preserve the encrypted secret.' : 'Encrypted at rest with the authentication key.' }}</small></div><div class="field-block"><label for="oidc-domains">Allowed email domains</label><input id="oidc-domains" :value="oidcDomains()" @input="oidcDomains.set($event.target.value)" placeholder="example.com, subsidiary.example.com" required><small>Exact domains only; wildcards are rejected.</small></div><div class="field-block"><label for="oidc-role">Provisioned-user role</label><select id="oidc-role" :value="oidcDefaultRole()" @change="oidcDefaultRole.set($event.target.value)"><option value="viewer">Viewer</option><option value="auditor">Auditor</option><option value="deployer">Developer / deployer</option><option value="operator">Operator</option><option value="admin">Admin</option></select></div><label class="check"><input type="checkbox" :checked="oidcEnforce()" @change="oidcEnforce.set($event.target.checked)"><span><b>Require SSO for matching non-owner accounts</b><small>Owners retain local emergency sign-in. Requires verified owner email and unused MFA recovery codes.</small></span></label><div class="field-block"><label for="oidc-password">Owner password</label><input id="oidc-password" type="password" autocomplete="current-password" :value="oidcPassword()" @input="oidcPassword.set($event.target.value)" required></div><div class="field-block"><label for="oidc-code">Authenticator or recovery code</label><input id="oidc-code" autocomplete="one-time-code" :value="oidcCode()" @input="oidcCode.set($event.target.value)"><small>Required when MFA is enabled.</small></div><div class="form-actions"><button class="btn" type="submit">Save provider</button><button class="btn danger" type="button" @show="oidcEditing()?.enabled" @click="setOidcEnabled(oidcEditing(), false)" x-cloak>Disable provider</button><button class="btn ghost" type="button" @show="oidcEditing() && !oidcEditing()?.enabled" @click="setOidcEnabled(oidcEditing(), true)" x-cloak>Enable provider</button><button class="btn ghost" type="button" @click="oidcFormOpen.set(false); oidcEditing.set(null); oidcSlug.set('')">Cancel</button></div></form></div></div><div class="section"><h2>Invite a member</h2><div class="panel"><form class="form-grid" @submit.prevent="invite()"><div class="field-block"><label for="invite-email">Email</label><input id="invite-email" type="email" autocomplete="email" placeholder="dana@example.com" :value="email()" @input="email.set($event.target.value)" required></div><div class="field-block"><label for="invite-role">Role template</label><select id="invite-role" :value="roleTemplate()" @change="roleTemplate.set($event.target.value)"><option value="deployer">Developer / deployer</option><option value="operator">Operator</option><option value="viewer">Viewer</option><option value="auditor">Auditor</option><option value="admin">Admin</option><option value="owner">Owner</option></select><small x-cloak>{{ roleSummary[roleTemplate()] }}</small></div><div class="field-block"><label for="invite-scope">Access scope</label><select id="invite-scope" :value="scopeType()" @change="scopeType.set($event.target.value); setScope($event.target.value, scopeId)"><option value="organization">Entire organization</option><option value="project">Current project</option><option value="environment">One environment</option><option value="resource">One resource</option></select></div><div class="field-block" @show="scopeType() === 'environment'" x-cloak><label for="invite-environment">Environment</label><select id="invite-environment" :value="scopeId()" @change="scopeId.set($event.target.value)"><template :for="item in environments()"><option :value="item.id">{{ item.name }}</option></template></select></div><div class="field-block" @show="scopeType() === 'resource'" x-cloak><label for="invite-resource">Resource</label><select id="invite-resource" :value="scopeId()" @change="scopeId.set($event.target.value)"><template :for="item in resources()"><option :value="item.id">{{ item.name }} · {{ item.slug }}</option></template></select></div><div class="field-block" @show="roleTemplate() === 'owner'" x-cloak><label for="invite-owner-password">Your password</label><input id="invite-owner-password" type="password" autocomplete="current-password" :value="ownerPassword()" @input="ownerPassword.set($event.target.value)"><small>Required when adding another owner.</small></div><div class="form-actions"><button class="btn" type="submit" :disabled="pageBusy()">Create invitation</button></div></form><div class="issued" @show="!!issued()" x-cloak><strong>One-time acceptance link</strong><code x-cloak>{{ issued()?.acceptUrl }}</code><span>Copy this link now. Only its SHA-256 hash is stored, and resending replaces it.</span></div></div></div><div class="section"><h2>Members</h2><div class="panel"><table><thead><tr><th scope="col">Person</th><th scope="col">Role</th><th scope="col">Effective scope</th><th scope="col">Last activity</th><th scope="col"></th></tr></thead><tbody><template :for="member in memberships()"><tr><td x-cloak><b x-cloak>{{ actorName(member) }}</b><span class="mono uname" x-cloak>{{ member.actor?.externalId?.replace('dashboard:', '') }}</span></td><td x-cloak><span class="tag" x-cloak>{{ member.roleTemplate }}</span><small class="role-detail" x-cloak>{{ roleSummary[member.roleTemplate] }}</small></td><td x-cloak><b x-cloak>{{ scopeLabel(member.scope) }}</b><small class="role-detail" x-cloak>{{ member.source === 'legacy' ? 'Migrated direct access' : 'Inherited from membership' }}</small></td><td x-cloak>{{ member.lastActiveAt ? new Date(member.lastActiveAt).toLocaleString() : 'Never' }}</td><td class="table-actions"><button class="btn ghost sm" type="button" :aria-label="'Edit access for ' + actorName(member)" @click="beginEdit(member)">Edit access</button><button class="btn danger sm" type="button" :aria-label="'Remove ' + actorName(member)" @click="beginRemove(member)">Remove</button></td></tr></template></tbody></table><div class="compact empty" @show="memberships().length === 0" x-cloak><strong>No members</strong><span>Create an invitation to add someone.</span></div></div></div><div class="section" @show="editing() !== null" x-cloak><h2>Edit access</h2><div class="panel"><form class="form-grid" @submit.prevent="changeMembership(false)"><div class="field-block"><label>Role template</label><select :value="editRole()" @change="editRole.set($event.target.value)"><option value="owner">Owner</option><option value="admin">Admin</option><option value="deployer">Developer / deployer</option><option value="operator">Operator</option><option value="viewer">Viewer</option><option value="auditor">Auditor</option></select></div><div class="field-block"><label>Scope</label><select :value="editScopeType()" @change="editScopeType.set($event.target.value); setScope($event.target.value, editScopeId)"><option value="organization">Entire organization</option><option value="project">Current project</option><option value="environment">One environment</option><option value="resource">One resource</option></select></div><div class="field-block" @show="editScopeType() === 'environment'" x-cloak><label>Environment</label><select :value="editScopeId()" @change="editScopeId.set($event.target.value)"><template :for="item in environments()"><option :value="item.id">{{ item.name }}</option></template></select></div><div class="field-block" @show="editScopeType() === 'resource'" x-cloak><label>Resource</label><select :value="editScopeId()" @change="editScopeId.set($event.target.value)"><template :for="item in resources()"><option :value="item.id">{{ item.name }} · {{ item.slug }}</option></template></select></div><div class="field-block"><label>Owner password</label><input type="password" autocomplete="current-password" :value="editPassword()" @input="editPassword.set($event.target.value)"><small>Required when adding, removing, or changing an owner.</small></div><div class="field-block"><label>Confirmation</label><input :placeholder="editing()?.id" :value="editConfirm()" @input="editConfirm.set($event.target.value)"><small>After previewing, type the membership ID.</small></div><div class="access-diff" @show="!!accessDiff()" x-cloak><div><strong>Gained</strong><span x-cloak>{{ accessDiff()?.gained?.join(', ') || 'None' }}</span></div><div><strong>Lost</strong><span x-cloak>{{ accessDiff()?.lost?.join(', ') || 'None' }}</span></div></div><div class="form-actions"><button class="btn ghost" type="button" @click="changeMembership(true)">Preview effective access</button><button class="btn" type="submit">Apply change</button><button class="btn ghost" type="button" @click="editing.set(null)">Cancel</button></div></form></div></div><div class="section" @show="pending() !== null" x-cloak><h2>Remove membership</h2><div class="panel"><div class="field-block"><label for="remove-owner-password">Your password (required when removing an owner)</label><input id="remove-owner-password" type="password" autocomplete="current-password" :value="removePassword()" @input="removePassword.set($event.target.value)"></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></div></div><div class="section"><h2>Pending & previous invitations</h2><div class="panel"><table><thead><tr><th scope="col">Email</th><th scope="col">Role</th><th scope="col">Scope</th><th scope="col">State</th><th scope="col"></th></tr></thead><tbody><template :for="invitation in invitations()"><tr><td x-cloak>{{ invitation.email }}</td><td x-cloak><span class="tag" x-cloak>{{ invitation.roleTemplate }}</span></td><td x-cloak>{{ scopeLabel(invitation.scope) }}</td><td x-cloak>{{ invitationState(invitation) }}</td><td class="table-actions"><button class="btn ghost sm" type="button" :disabled="pageBusy()" @show="invitation.state !== 'accepted'" @click="invitationAction(invitation, 'resend')" x-cloak>Resend</button><button class="btn danger sm" type="button" :disabled="pageBusy()" @show="invitation.state === 'pending'" @click="invitationAction(invitation, 'revoke')" x-cloak>Revoke</button></td></tr></template></tbody></table><div class="compact empty" @show="invitations().length === 0" x-cloak><strong>No invitations</strong><span>New and previous invitation states appear here.</span></div></div></div></div><style> .access-message { min-height: 20px; margin-top: 12px; } .issued { display:grid; gap:7px; margin-top:16px; padding:14px 16px; border:1px solid rgba(53,209,155,.28); background:var(--okbg); border-radius:12px; } .issued code { user-select:all; overflow-wrap:anywhere; padding:8px 10px; border-radius:8px; background:rgba(0,0,0,.25); } .uname { display:block; margin-top:3px; color:var(--txt3); } .role-detail { display:block; margin-top:4px; max-width:260px; color:var(--txt3); } .access-diff { grid-column:1/-1; display:grid; grid-template-columns:1fr 1fr; gap:10px; } .access-diff div { display:grid; gap:4px; padding:12px; border:1px solid var(--panel-br); border-radius:10px; } .access-diff span { color:var(--txt2); font-size:12px; line-height:1.5; } .sso-panel,.provider-list { display:grid; gap:14px; } .sso-intro { display:flex; align-items:flex-start; justify-content:space-between; gap:18px; } .sso-intro p { color:var(--txt2); font-size:13px; line-height:1.55; max-width:720px; margin-top:4px; } .recovery-warning { display:grid; gap:4px; padding:12px 14px; border:1px solid rgba(240,184,79,.3); background:rgba(240,184,79,.08); border-radius:10px; } .recovery-warning span,.provider-row span,.provider-row small { color:var(--txt2); font-size:12px; line-height:1.5; } .callback { display:grid; gap:5px; } .callback span { color:var(--txt3); text-transform:uppercase; font-size:10px; font-weight:800; letter-spacing:.06em; } .callback code { user-select:all; overflow-wrap:anywhere; } .provider-row { display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center; gap:14px; padding:14px; border:1px solid var(--panel-br); border-radius:10px; } .provider-row>div:first-child { min-width:0; display:grid; gap:3px; } .provider-row>div:first-child span { overflow-wrap:anywhere; } .check { display:flex; gap:10px; align-items:flex-start; padding:12px; border:1px solid var(--panel-br); border-radius:10px; } .check input { width:auto; margin-top:3px; } .check span { display:grid; gap:3px; } .check small { color:var(--txt3); line-height:1.45; } @media(max-width:640px){.access-diff{grid-template-columns:1fr}} </style></body></html>
|
|
@@ -74,13 +74,13 @@ window.stx.mount(function() {
|
|
|
74
74
|
+ 'or it should be imported from a relative path so the bundler includes it.'
|
|
75
75
|
);
|
|
76
76
|
});
|
|
77
|
-
var buf = undefined;
|
|
78
|
-
var clearOut = undefined;
|
|
79
|
-
var cmd = undefined;
|
|
80
|
-
var reconnect = undefined;
|
|
81
|
-
var send = undefined;
|
|
82
|
-
var status = undefined;
|
|
83
77
|
var statusTone = undefined;
|
|
78
|
+
var status = undefined;
|
|
79
|
+
var send = undefined;
|
|
80
|
+
var reconnect = undefined;
|
|
81
|
+
var cmd = undefined;
|
|
82
|
+
var clearOut = undefined;
|
|
83
|
+
var buf = undefined;
|
|
84
84
|
var __stxBundle_a5cf706c9f03 = (function() {
|
|
85
85
|
|
|
86
86
|
function useTerminal(path = "/api/terminal") {
|
|
@@ -128,18 +128,18 @@ function useTerminal(path = "/api/terminal") {
|
|
|
128
128
|
|
|
129
129
|
|
|
130
130
|
var { buf, cmd, status, send, reconnect, clearOut, statusTone } = useTerminal();
|
|
131
|
-
return { "
|
|
131
|
+
return { "statusTone": statusTone, "status": status, "send": send, "reconnect": reconnect, "cmd": cmd, "clearOut": clearOut, "buf": buf };
|
|
132
132
|
})();
|
|
133
|
-
buf = __stxBundle_a5cf706c9f03["buf"];
|
|
134
|
-
clearOut = __stxBundle_a5cf706c9f03["clearOut"];
|
|
135
|
-
cmd = __stxBundle_a5cf706c9f03["cmd"];
|
|
136
|
-
reconnect = __stxBundle_a5cf706c9f03["reconnect"];
|
|
137
|
-
send = __stxBundle_a5cf706c9f03["send"];
|
|
138
|
-
status = __stxBundle_a5cf706c9f03["status"];
|
|
139
133
|
statusTone = __stxBundle_a5cf706c9f03["statusTone"];
|
|
134
|
+
status = __stxBundle_a5cf706c9f03["status"];
|
|
135
|
+
send = __stxBundle_a5cf706c9f03["send"];
|
|
136
|
+
reconnect = __stxBundle_a5cf706c9f03["reconnect"];
|
|
137
|
+
cmd = __stxBundle_a5cf706c9f03["cmd"];
|
|
138
|
+
clearOut = __stxBundle_a5cf706c9f03["clearOut"];
|
|
139
|
+
buf = __stxBundle_a5cf706c9f03["buf"];
|
|
140
140
|
|
|
141
141
|
return { buf, cmd, status, send, reconnect, clearOut, statusTone };
|
|
142
|
-
})</script> <!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta name="stx-build" content="
|
|
142
|
+
})</script> <!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"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ts-cloud · Terminal</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_34" class="skip-link" href="#main-content">Skip to content</a><button class="nav-toggle-button" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false"><span></span><span></span><span></span></button><button class="nav-scrim" type="button" aria-label="Close navigation"></button><aside class="app-sidebar" id="primary-navigation" aria-label="Primary navigation"><a class="brand" href="/?env=production"><span class="dot"></span><span>ts-cloud</span></a><div class="sidebar-context"><span class="context-label">Project</span><strong>stacks-production-app</strong></div><div class="environment-picker" aria-label="Environment"><span class="context-label">Environment</span><details><summary class="environment-current production"><span>PROD</span><strong>production</strong></summary></details></div><button class="command-trigger" type="button" aria-keyshortcuts="Meta+K Control+K"><span>Search resources</span><kbd>⌘ K</kbd></button><div class="nav-groups"><section class="nav-group"><h2>Overview</h2><a class="active" href="/?env=production">Dashboard</a><a href="/server/activity?env=production">Activity</a></section><section class="nav-group"><h2>Applications</h2><a class="" href="/server/sites?env=production">Services</a><a class="" href="/server/deployments?env=production">Deployments</a><a class="" href="/server/logs?env=production">Logs</a><a class="" href="/integrations?env=production">Git integrations</a><a class="" href="/applications/new?env=production">Create application</a><a class="" href="/applications/compose?env=production">Compose applications</a></section><section class="nav-group"><h2>Operations</h2><a class="" href="/operations/queue?env=production">Deployment queue</a><a class="" href="/operations/previews?env=production">Preview environments</a><a class="" href="/operations/releases?env=production">Releases & promotion</a><a class="" href="/operations/regions?env=production">Regions & failover</a><a class="" href="/operations/maintenance?env=production">Maintenance & DR</a><a class="" href="/operations/workloads?env=production">Workloads</a><a class="" href="/operations/observability?env=production">Observability</a><a class="" href="/operations/alerts?env=production">Alerts & health</a><a class="" href="/operations/spend?env=production">Spend & budgets</a><a href="/server/metrics?env=production">Metrics</a><a href="/server/services?env=production">Runtime services</a><a class="" href="/operations/jobs?env=production">Workers & schedules</a><a class="" href="/operations/configuration?env=production">Environment & secrets</a><a class="" href="/data/backups?env=production">Backups & recovery</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/actions?env=production">Run operations</a></section><section class="nav-group"><h2>Infrastructure</h2><a class="" href="/infrastructure/topology?env=production">Infrastructure map</a><a class="" href="/data/services?env=production">Data services</a><a class="" href="/data/volumes?env=production">Persistent volumes</a><a href="/server/firewall?env=production">Network & firewall</a><a href="/server/ssh-keys?env=production">SSH keys</a><a class="" href="/server/fleet?env=production">Fleet inventory</a><a class="" href="/server/capacity?env=production">Capacity & placement</a><a href="/security?env=production">Security posture</a><a href="/server/terminal?env=production">Terminal</a></section><section class="nav-group"><h2>Organization</h2><a class="" href="/server/team?env=production">People & access</a><a class="" href="/account/automation?env=production">API & automation</a></section><section class="nav-group"><h2>Account</h2><a class="" href="/account/security?env=production">Sign-in & security</a></section></div><form method="post" action="/api/logout" class="signout"><button type="submit">Sign out</button></form></aside><dialog class="command-palette" aria-labelledby="command-title"><div class="command-search"><span aria-hidden="true">⌕</span><input type="search" placeholder="Search services, domains, deployments…" aria-label="Search resources" autocomplete="off"><button type="button" class="command-close" aria-label="Close search">Esc</button></div><h2 id="command-title" class="sr-only">Search resources and navigation</h2><div class="command-status" role="status">Start typing to search this project.</div><section class="saved-views" aria-labelledby="saved-views-title"><div class="saved-views-heading"><h3 id="saved-views-title">Saved views</h3><form class="save-view-form"><label class="sr-only" for="save-view-name">Saved view name</label><input id="save-view-name" maxlength="64" placeholder="Name this view" autocomplete="off"><button type="submit">Save current filters</button></form></div><div class="saved-view-list"></div></section><form class="tag-result-form"><label for="tag-result-name">Tag selected resource</label><input id="tag-result-name" maxlength="32" placeholder="customer-facing" pattern="[A-Za-z0-9][A-Za-z0-9 -]{0,31}" autocomplete="off"><input class="tag-color" type="color" value="#5a8be0" aria-label="Tag color"><button type="submit">Add tag</button></form><div class="command-results" role="listbox" aria-label="Search results"></div><footer><span>↑ ↓ navigate</span><span>Enter open</span><span>Esc close</span></footer></dialog><div class="context-bar" aria-label="Current scope"><div class="context-path"><div class="context-breadcrumb"><span>stacks-production-app</span><i>/</i><strong>production</strong></div><div class="context-filters" aria-label="Active filters"></div></div><span class="scope-safety production">Production scope</span></div> <script data-stx-scoped data-stx-run="always">
|
|
143
143
|
(function() {
|
|
144
144
|
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;
|
|
145
145
|
var __destroyHooks = [];
|
|
@@ -490,6 +490,6 @@ statusTone = __stxBundle_a5cf706c9f03["statusTone"];
|
|
|
490
490
|
|
|
491
491
|
|
|
492
492
|
try { if (typeof __stxScopeRenames !== 'undefined' && __stxScopeRenames) { for (var __stxRK in __stxScopeRenames) __scopeRegistration[__stxRK] = __stxScopeRenames[__stxRK]; } } catch (e) { /* no renames */ }
|
|
493
|
-
window.stx._scopes['
|
|
493
|
+
window.stx._scopes['stx_scope_nav_34'] = __scopeRegistration;
|
|
494
494
|
})();
|
|
495
495
|
</script> <div class="wrap"><div class="crumbs"><a href="/">Server</a><span class="sep">/</span> Terminal</div><header class="page"><div><h1>Terminal</h1><p>A live shell on the dashboard host. Type a command and press Enter; output streams back.</p></div><div class="header-actions"><span class="pill" :class="statusTone(status())"></span><button class="btn ghost sm" type="button" @click="clearOut()">Clear</button><button class="btn ghost sm" type="button" @click="reconnect()">Reconnect</button></div></header><div class="section"><div class="panel"><pre data-stx-ref="terminalOutput" id="term-out" class="logs" aria-live="polite" aria-label="Terminal output" style="max-height:520px; white-space:pre-wrap; overflow-wrap:anywhere;"></pre><div class="field" style="margin-top:12px;"><label class="sr-only" for="terminal-command">Command</label><input id="terminal-command" :value="cmd()" @input="cmd.set($event.target.value)" @keydown.enter="send()" placeholder="e.g. systemctl status rpx-gateway, tail -n 50 /var/log/syslog" autocomplete="off" spellcheck="false" style="font-family:ui-monospace, SFMono-Regular, Menlo, monospace;"><button class="btn" type="button" @click="send()">Run</button></div><p class="note">The shell runs on the machine serving this dashboard (in box mode, the provisioned server) and is protected by the same Basic auth. It is line-oriented, so full-screen programs like vim or htop are not supported. Disable it with <span class="mono">TS_CLOUD_DASHBOARD_TERMINAL=0</span>.</p></div></div></div></body></html>
|