@testsmith/api-spector 0.4.8 → 0.4.9

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/out/main/wsdl.js CHANGED
@@ -4,10 +4,10 @@ const promises = require("fs/promises");
4
4
  const path = require("path");
5
5
  const https = require("https");
6
6
  const http = require("http");
7
- const soapHandler = require("./chunks/soap-handler-BXx842MN.js");
8
- const _import = require("./chunks/import-DcenB5Q_.js");
7
+ const soapHandler = require("./chunks/soap-handler-pOrJ625E.js");
8
+ const _import = require("./chunks/import-ChCkdHOB.js");
9
9
  const cliCommon = require("./chunks/cli-common-BKYgsbGB.js");
10
- require("./chunks/handle-rimXXdJH.js");
10
+ require("./chunks/handle-CF2LjTGV.js");
11
11
  require("@xmldom/xmldom");
12
12
  require("uuid");
13
13
  require("crypto");
@@ -76,6 +76,10 @@ const IPC = {
76
76
  startFlow: "oauth2:startFlow",
77
77
  refreshToken: "oauth2:refreshToken"
78
78
  },
79
+ // ─── HashiCorp Vault (interactive OIDC login) ──────────────────────────────
80
+ vault: {
81
+ oidcLogin: "vault:oidcLogin"
82
+ },
79
83
  // ─── Mock servers ──────────────────────────────────────────────────────────
80
84
  mock: {
81
85
  start: "mock:start",
@@ -242,6 +246,8 @@ const api = {
242
246
  pickOutputDir: () => electron.ipcRenderer.invoke(IPC.dialog.pickDir),
243
247
  saveGeneratedFiles: (files, outputDir) => electron.ipcRenderer.invoke(IPC.generate.save, files, outputDir),
244
248
  saveGeneratedFilesAsZip: (files, collectionName, target) => electron.ipcRenderer.invoke(IPC.generate.saveZip, files, collectionName, target),
249
+ // ─── HashiCorp Vault (interactive OIDC login) ─────────────────────────────
250
+ vaultOidcLogin: (opts) => electron.ipcRenderer.invoke(IPC.vault.oidcLogin, opts),
245
251
  // ─── OAuth 2.0 ────────────────────────────────────────────────────────────
246
252
  oauth2StartFlow: (auth, vars) => electron.ipcRenderer.invoke(IPC.oauth2.startFlow, auth, vars),
247
253
  oauth2RefreshToken: (auth, vars, refreshToken) => electron.ipcRenderer.invoke(IPC.oauth2.refreshToken, auth, vars, refreshToken),
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-400:oklch(85.2% .199 91.936);--color-green-400:oklch(79.2% .209 151.711);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:var(--ts-green-400);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:var(--ts-green-800);--color-emerald-900:var(--ts-green-900);--color-emerald-950:oklch(26.2% .051 172.552);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-800:oklch(45% .085 224.283);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:var(--ts-blue-400);--color-blue-500:var(--ts-blue-500);--color-blue-600:var(--ts-blue-600);--color-blue-700:var(--ts-blue-700);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-purple-400:oklch(71.4% .203 305.504);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-gray-400:oklch(70.7% .022 261.325);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-surface-100:var(--surface-100);--color-surface-200:var(--surface-200);--color-surface-400:var(--surface-400);--color-surface-500:var(--surface-500);--color-surface-700:var(--surface-700);--color-surface-800:var(--surface-800);--color-surface-900:var(--surface-900);--color-surface-950:var(--surface-950)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-1\/2{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-full{left:100%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.z-\[120\]{z-index:120}.z-\[200\]{z-index:200}.z-\[300\]{z-index:300}.col-1{grid-column:1}.col-2{grid-column:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-px{margin-top:1px}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-6{margin-left:calc(var(--spacing) * 6)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-24{height:calc(var(--spacing) * 24)}.h-\[min\(760px\,90vh\)\]{height:min(760px,90vh)}.h-full{height:100%}.h-screen{height:100vh}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-52{max-height:calc(var(--spacing) * 52)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[45vh\]{max-height:45vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[75vh\]{max-height:75vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-96{width:calc(var(--spacing) * 96)}.w-\[420px\]{width:420px}.w-\[480px\]{width:480px}.w-\[500px\]{width:500px}.w-\[520px\]{width:520px}.w-\[560px\]{width:560px}.w-\[600px\]{width:600px}.w-\[640px\]{width:640px}.w-\[680px\]{width:680px}.w-\[720px\]{width:720px}.w-\[780px\]{width:780px}.w-\[min\(1000px\,94vw\)\]{width:min(1000px,94vw)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[60px\]{max-width:60px}.max-w-\[64px\]{max-width:64px}.max-w-\[120px\]{max-width:120px}.max-w-\[140px\]{max-width:140px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[260px\]{max-width:260px}.max-w-\[420px\]{max-width:420px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[72px\]{min-width:72px}.min-w-\[100px\]{min-width:100px}.min-w-\[120px\]{min-width:120px}.min-w-\[160px\]{min-width:160px}.min-w-\[170px\]{min-width:170px}.min-w-\[180px\]{min-width:180px}.min-w-\[220px\]{min-width:220px}.min-w-\[260px\]{min-width:260px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-500{border-color:var(--color-amber-500)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/30{border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.border-amber-700\/40{border-color:#b7500066}@supports (color:color-mix(in lab, red, red)){.border-amber-700\/40{border-color:color-mix(in oklab, var(--color-amber-700) 40%, transparent)}}.border-amber-800\/50{border-color:#953d0080}@supports (color:color-mix(in lab, red, red)){.border-amber-800\/50{border-color:color-mix(in oklab, var(--color-amber-800) 50%, transparent)}}.border-amber-900\/50{border-color:#7b330680}@supports (color:color-mix(in lab, red, red)){.border-amber-900\/50{border-color:color-mix(in oklab, var(--color-amber-900) 50%, transparent)}}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-700,.border-blue-700\/50{border-color:var(--color-blue-700)}@supports (color:color-mix(in lab, red, red)){.border-blue-700\/50{border-color:color-mix(in oklab, var(--color-blue-700) 50%, transparent)}}.border-blue-800{border-color:var(--color-blue-800)}.border-blue-800\/40{border-color:#193cb866}@supports (color:color-mix(in lab, red, red)){.border-blue-800\/40{border-color:color-mix(in oklab, var(--color-blue-800) 40%, transparent)}}.border-blue-800\/50{border-color:#193cb880}@supports (color:color-mix(in lab, red, red)){.border-blue-800\/50{border-color:color-mix(in oklab, var(--color-blue-800) 50%, transparent)}}.border-emerald-400\/50{border-color:var(--color-emerald-400)}@supports (color:color-mix(in lab, red, red)){.border-emerald-400\/50{border-color:color-mix(in oklab, var(--color-emerald-400) 50%, transparent)}}.border-emerald-700{border-color:var(--color-emerald-700)}.border-emerald-800\/30{border-color:var(--color-emerald-800)}@supports (color:color-mix(in lab, red, red)){.border-emerald-800\/30{border-color:color-mix(in oklab, var(--color-emerald-800) 30%, transparent)}}.border-emerald-800\/50{border-color:var(--color-emerald-800)}@supports (color:color-mix(in lab, red, red)){.border-emerald-800\/50{border-color:color-mix(in oklab, var(--color-emerald-800) 50%, transparent)}}.border-orange-500{border-color:var(--color-orange-500)}.border-red-600{border-color:var(--color-red-600)}.border-red-700{border-color:var(--color-red-700)}.border-red-700\/50{border-color:#bf000f80}@supports (color:color-mix(in lab, red, red)){.border-red-700\/50{border-color:color-mix(in oklab, var(--color-red-700) 50%, transparent)}}.border-red-800{border-color:var(--color-red-800)}.border-red-800\/40{border-color:#9f071266}@supports (color:color-mix(in lab, red, red)){.border-red-800\/40{border-color:color-mix(in oklab, var(--color-red-800) 40%, transparent)}}.border-red-800\/50{border-color:#9f071280}@supports (color:color-mix(in lab, red, red)){.border-red-800\/50{border-color:color-mix(in oklab, var(--color-red-800) 50%, transparent)}}.border-red-800\/60{border-color:#9f071299}@supports (color:color-mix(in lab, red, red)){.border-red-800\/60{border-color:color-mix(in oklab, var(--color-red-800) 60%, transparent)}}.border-red-900{border-color:var(--color-red-900)}.border-surface-700,.border-surface-700\/50{border-color:var(--color-surface-700)}@supports (color:color-mix(in lab, red, red)){.border-surface-700\/50{border-color:color-mix(in oklab, var(--color-surface-700) 50%, transparent)}}.border-surface-800,.border-surface-800\/40{border-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.border-surface-800\/40{border-color:color-mix(in oklab, var(--color-surface-800) 40%, transparent)}}.border-surface-800\/50{border-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.border-surface-800\/50{border-color:color-mix(in oklab, var(--color-surface-800) 50%, transparent)}}.border-surface-800\/60{border-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.border-surface-800\/60{border-color:color-mix(in oklab, var(--color-surface-800) 60%, transparent)}}.border-transparent{border-color:#0000}.border-violet-500{border-color:var(--color-violet-500)}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\/10{border-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.border-b-blue-500{border-bottom-color:var(--color-blue-500)}.bg-\[\#1e1b2e\]{background-color:#1e1b2e}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-700{background-color:var(--color-amber-700)}.bg-amber-700\/80{background-color:#b75000cc}@supports (color:color-mix(in lab, red, red)){.bg-amber-700\/80{background-color:color-mix(in oklab, var(--color-amber-700) 80%, transparent)}}.bg-amber-800\/40{background-color:#953d0066}@supports (color:color-mix(in lab, red, red)){.bg-amber-800\/40{background-color:color-mix(in oklab, var(--color-amber-800) 40%, transparent)}}.bg-amber-900\/20{background-color:#7b330633}@supports (color:color-mix(in lab, red, red)){.bg-amber-900\/20{background-color:color-mix(in oklab, var(--color-amber-900) 20%, transparent)}}.bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab, red, red)){.bg-amber-900\/30{background-color:color-mix(in oklab, var(--color-amber-900) 30%, transparent)}}.bg-amber-900\/40{background-color:#7b330666}@supports (color:color-mix(in lab, red, red)){.bg-amber-900\/40{background-color:color-mix(in oklab, var(--color-amber-900) 40%, transparent)}}.bg-amber-900\/50{background-color:#7b330680}@supports (color:color-mix(in lab, red, red)){.bg-amber-900\/50{background-color:color-mix(in oklab, var(--color-amber-900) 50%, transparent)}}.bg-amber-950\/20{background-color:#46190133}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/20{background-color:color-mix(in oklab, var(--color-amber-950) 20%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/20{background-color:color-mix(in oklab, var(--color-blue-900) 20%, transparent)}}.bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/30{background-color:color-mix(in oklab, var(--color-blue-900) 30%, transparent)}}.bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/50{background-color:color-mix(in oklab, var(--color-blue-900) 50%, transparent)}}.bg-blue-950\/30{background-color:#1624564d}@supports (color:color-mix(in lab, red, red)){.bg-blue-950\/30{background-color:color-mix(in oklab, var(--color-blue-950) 30%, transparent)}}.bg-blue-950\/40{background-color:#16245666}@supports (color:color-mix(in lab, red, red)){.bg-blue-950\/40{background-color:color-mix(in oklab, var(--color-blue-950) 40%, transparent)}}.bg-blue-950\/50{background-color:#16245680}@supports (color:color-mix(in lab, red, red)){.bg-blue-950\/50{background-color:color-mix(in oklab, var(--color-blue-950) 50%, transparent)}}.bg-cyan-700{background-color:var(--color-cyan-700)}.bg-cyan-700\/80{background-color:#007492cc}@supports (color:color-mix(in lab, red, red)){.bg-cyan-700\/80{background-color:color-mix(in oklab, var(--color-cyan-700) 80%, transparent)}}.bg-cyan-800{background-color:var(--color-cyan-800)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-700{background-color:var(--color-emerald-700)}.bg-emerald-800\/30{background-color:var(--color-emerald-800)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-800\/30{background-color:color-mix(in oklab, var(--color-emerald-800) 30%, transparent)}}.bg-emerald-900\/20{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/20{background-color:color-mix(in oklab, var(--color-emerald-900) 20%, transparent)}}.bg-emerald-900\/30{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/30{background-color:color-mix(in oklab, var(--color-emerald-900) 30%, transparent)}}.bg-emerald-900\/40{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/40{background-color:color-mix(in oklab, var(--color-emerald-900) 40%, transparent)}}.bg-emerald-900\/50{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/50{background-color:color-mix(in oklab, var(--color-emerald-900) 50%, transparent)}}.bg-emerald-950\/30{background-color:#002c224d}@supports (color:color-mix(in lab, red, red)){.bg-emerald-950\/30{background-color:color-mix(in oklab, var(--color-emerald-950) 30%, transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-900\/50{background-color:#7e2a0c80}@supports (color:color-mix(in lab, red, red)){.bg-orange-900\/50{background-color:color-mix(in oklab, var(--color-orange-900) 50%, transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-700{background-color:var(--color-red-700)}.bg-red-800{background-color:var(--color-red-800)}.bg-red-800\/60{background-color:#9f071299}@supports (color:color-mix(in lab, red, red)){.bg-red-800\/60{background-color:color-mix(in oklab, var(--color-red-800) 60%, transparent)}}.bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/20{background-color:color-mix(in oklab, var(--color-red-900) 20%, transparent)}}.bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/30{background-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/40{background-color:color-mix(in oklab, var(--color-red-900) 40%, transparent)}}.bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/50{background-color:color-mix(in oklab, var(--color-red-900) 50%, transparent)}}.bg-red-950{background-color:var(--color-red-950)}.bg-red-950\/20{background-color:#46080933}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/20{background-color:color-mix(in oklab, var(--color-red-950) 20%, transparent)}}.bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/30{background-color:color-mix(in oklab, var(--color-red-950) 30%, transparent)}}.bg-red-950\/50{background-color:#46080980}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/50{background-color:color-mix(in oklab, var(--color-red-950) 50%, transparent)}}.bg-surface-500{background-color:var(--color-surface-500)}.bg-surface-700,.bg-surface-700\/60{background-color:var(--color-surface-700)}@supports (color:color-mix(in lab, red, red)){.bg-surface-700\/60{background-color:color-mix(in oklab, var(--color-surface-700) 60%, transparent)}}.bg-surface-800,.bg-surface-800\/30{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.bg-surface-800\/30{background-color:color-mix(in oklab, var(--color-surface-800) 30%, transparent)}}.bg-surface-800\/40{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.bg-surface-800\/40{background-color:color-mix(in oklab, var(--color-surface-800) 40%, transparent)}}.bg-surface-800\/50{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.bg-surface-800\/50{background-color:color-mix(in oklab, var(--color-surface-800) 50%, transparent)}}.bg-surface-800\/60{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.bg-surface-800\/60{background-color:color-mix(in oklab, var(--color-surface-800) 60%, transparent)}}.bg-surface-900,.bg-surface-900\/40{background-color:var(--color-surface-900)}@supports (color:color-mix(in lab, red, red)){.bg-surface-900\/40{background-color:color-mix(in oklab, var(--color-surface-900) 40%, transparent)}}.bg-surface-900\/50{background-color:var(--color-surface-900)}@supports (color:color-mix(in lab, red, red)){.bg-surface-900\/50{background-color:color-mix(in oklab, var(--color-surface-900) 50%, transparent)}}.bg-surface-900\/60{background-color:var(--color-surface-900)}@supports (color:color-mix(in lab, red, red)){.bg-surface-900\/60{background-color:color-mix(in oklab, var(--color-surface-900) 60%, transparent)}}.bg-surface-950,.bg-surface-950\/40{background-color:var(--color-surface-950)}@supports (color:color-mix(in lab, red, red)){.bg-surface-950\/40{background-color:color-mix(in oklab, var(--color-surface-950) 40%, transparent)}}.bg-surface-950\/50{background-color:var(--color-surface-950)}@supports (color:color-mix(in lab, red, red)){.bg-surface-950\/50{background-color:color-mix(in oklab, var(--color-surface-950) 50%, transparent)}}.bg-transparent{background-color:#0000}.bg-violet-600{background-color:var(--color-violet-600)}.bg-violet-700{background-color:var(--color-violet-700)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pt-20{padding-top:calc(var(--spacing) * 20)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pt-\[20vh\]{padding-top:20vh}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-amber-50{color:var(--color-amber-50)}.text-amber-100{color:var(--color-amber-100)}.text-amber-200\/90{color:#fee685e6}@supports (color:color-mix(in lab, red, red)){.text-amber-200\/90{color:color-mix(in oklab, var(--color-amber-200) 90%, transparent)}}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab, red, red)){.text-amber-400\/80{color:color-mix(in oklab, var(--color-amber-400) 80%, transparent)}}.text-amber-600{color:var(--color-amber-600)}.text-blue-200{color:var(--color-blue-200)}.text-blue-200\/90{color:#bedbffe6}@supports (color:color-mix(in lab, red, red)){.text-blue-200\/90{color:color-mix(in oklab, var(--color-blue-200) 90%, transparent)}}.text-blue-300{color:var(--color-blue-300)}.text-blue-400,.text-blue-400\/60{color:var(--color-blue-400)}@supports (color:color-mix(in lab, red, red)){.text-blue-400\/60{color:color-mix(in oklab, var(--color-blue-400) 60%, transparent)}}.text-blue-400\/80{color:var(--color-blue-400)}@supports (color:color-mix(in lab, red, red)){.text-blue-400\/80{color:color-mix(in oklab, var(--color-blue-400) 80%, transparent)}}.text-blue-500{color:var(--color-blue-500)}.text-cyan-50{color:var(--color-cyan-50)}.text-cyan-200{color:var(--color-cyan-200)}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400,.text-emerald-400\/80{color:var(--color-emerald-400)}@supports (color:color-mix(in lab, red, red)){.text-emerald-400\/80{color:color-mix(in oklab, var(--color-emerald-400) 80%, transparent)}}.text-fuchsia-400{color:var(--color-fuchsia-400)}.text-gray-400{color:var(--color-gray-400)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-purple-400\/70{color:#c07effb3}@supports (color:color-mix(in lab, red, red)){.text-purple-400\/70{color:color-mix(in oklab, var(--color-purple-400) 70%, transparent)}}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-sky-400{color:var(--color-sky-400)}.text-surface-100{color:var(--color-surface-100)}.text-surface-200{color:var(--color-surface-200)}.text-surface-400{color:var(--color-surface-400)}.text-surface-500{color:var(--color-surface-500)}.text-surface-700{color:var(--color-surface-700)}.text-violet-400{color:var(--color-violet-400)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.placeholder-surface-500::placeholder{color:var(--color-surface-500)}.placeholder-surface-700::placeholder{color:var(--color-surface-700)}.accent-blue-500{accent-color:var(--color-blue-500)}.accent-blue-600{accent-color:var(--color-blue-600)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-red-500{--tw-ring-color:var(--color-red-500)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-blue-500{outline-color:var(--color-blue-500)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\[request\:send\]{request:send}.\[writing-mode\:vertical-rl\]{writing-mode:vertical-rl}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/ab\:block:is(:where(.group\/ab):hover *),.group-hover\/cli\:block:is(:where(.group\/cli):hover *){display:block}}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-fuchsia-500:hover{border-color:var(--color-fuchsia-500)}.hover\:border-surface-500:hover{border-color:var(--color-surface-500)}.hover\:bg-amber-900\/50:hover{background-color:#7b330680}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-900\/50:hover{background-color:color-mix(in oklab, var(--color-amber-900) 50%, transparent)}}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-blue-900\/50:hover{background-color:#1c398e80}@supports (color:color-mix(in lab, red, red)){.hover\:bg-blue-900\/50:hover{background-color:color-mix(in oklab, var(--color-blue-900) 50%, transparent)}}.hover\:bg-emerald-600:hover{background-color:var(--color-emerald-600)}.hover\:bg-emerald-900\/50:hover{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-emerald-900\/50:hover{background-color:color-mix(in oklab, var(--color-emerald-900) 50%, transparent)}}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-800:hover{background-color:var(--color-red-800)}.hover\:bg-red-800\/50:hover{background-color:#9f071280}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-800\/50:hover{background-color:color-mix(in oklab, var(--color-red-800) 50%, transparent)}}.hover\:bg-red-900\/30:hover{background-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-900\/30:hover{background-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.hover\:bg-red-900\/40:hover{background-color:#82181a66}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-900\/40:hover{background-color:color-mix(in oklab, var(--color-red-900) 40%, transparent)}}.hover\:bg-red-900\/60:hover{background-color:#82181a99}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-900\/60:hover{background-color:color-mix(in oklab, var(--color-red-900) 60%, transparent)}}.hover\:bg-red-950\/50:hover{background-color:#46080980}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-950\/50:hover{background-color:color-mix(in oklab, var(--color-red-950) 50%, transparent)}}.hover\:bg-surface-700:hover,.hover\:bg-surface-700\/60:hover{background-color:var(--color-surface-700)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-700\/60:hover{background-color:color-mix(in oklab, var(--color-surface-700) 60%, transparent)}}.hover\:bg-surface-800:hover,.hover\:bg-surface-800\/20:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/20:hover{background-color:color-mix(in oklab, var(--color-surface-800) 20%, transparent)}}.hover\:bg-surface-800\/30:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/30:hover{background-color:color-mix(in oklab, var(--color-surface-800) 30%, transparent)}}.hover\:bg-surface-800\/40:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/40:hover{background-color:color-mix(in oklab, var(--color-surface-800) 40%, transparent)}}.hover\:bg-surface-800\/50:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/50:hover{background-color:color-mix(in oklab, var(--color-surface-800) 50%, transparent)}}.hover\:bg-surface-800\/60:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/60:hover{background-color:color-mix(in oklab, var(--color-surface-800) 60%, transparent)}}.hover\:bg-surface-900\/50:hover{background-color:var(--color-surface-900)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-900\/50:hover{background-color:color-mix(in oklab, var(--color-surface-900) 50%, transparent)}}.hover\:bg-violet-500\/10:hover{background-color:#8d54ff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-violet-500\/10:hover{background-color:color-mix(in oklab, var(--color-violet-500) 10%, transparent)}}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-amber-400:hover{color:var(--color-amber-400)}.hover\:text-blue-200:hover{color:var(--color-blue-200)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-emerald-300:hover{color:var(--color-emerald-300)}.hover\:text-emerald-400:hover{color:var(--color-emerald-400)}.hover\:text-fuchsia-400:hover{color:var(--color-fuchsia-400)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-surface-100:hover{color:var(--color-surface-100)}.hover\:text-surface-200:hover{color:var(--color-surface-200)}.hover\:text-surface-400:hover{color:var(--color-surface-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:border-blue-500:focus,.focus\:border-blue-500\/60:focus{border-color:var(--color-blue-500)}@supports (color:color-mix(in lab, red, red)){.focus\:border-blue-500\/60:focus{border-color:color-mix(in oklab, var(--color-blue-500) 60%, transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-500:focus,.focus\:ring-blue-500\/50:focus{--tw-ring-color:var(--color-blue-500)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-blue-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 50%, transparent)}}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-surface-700:disabled{background-color:var(--color-surface-700)}.disabled\:bg-surface-800:disabled{background-color:var(--color-surface-800)}.disabled\:bg-surface-900:disabled{background-color:var(--color-surface-900)}.disabled\:text-surface-400:disabled{color:var(--color-surface-400)}.disabled\:text-surface-500:disabled{color:var(--color-surface-500)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-blue-700:disabled:hover{background-color:var(--color-blue-700)}.disabled\:hover\:bg-surface-800:disabled:hover{background-color:var(--color-surface-800)}.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}}@media (min-width:64rem){.lg\:block{display:block}}}:root{--ts-blue-400:#6aa3c8;--ts-blue-500:#3d7fb2;--ts-blue-600:#205d96;--ts-blue-700:#1a4e7e;--ts-green-400:#9fc93c;--ts-green-800:#4a5e1d;--ts-green-900:#2d3a12;--drag-region:28px;--surface-50:#f0eff4;--surface-100:#dddce3;--surface-200:#c4c2cb;--surface-400:#9d9aa8;--surface-500:#7a7785;--surface-700:#615e6d;--surface-800:#3d3b48;--surface-900:#312f3b;--surface-950:#272630;--text-primary:#e4e3ea;--text-muted:#9d9aa8;--wordmark-muted:#9d9aa8;--bg-app:#272630;--border:#3d3b48}:root.light{--surface-50:#272630;--surface-100:#312f3b;--surface-200:#3d3b48;--surface-400:#615e6d;--surface-500:#716e7b;--surface-700:#908e9a;--surface-800:#c4c2cb;--surface-900:#d5d3dc;--surface-950:#e2e0e9;--text-primary:#1c1b24;--text-muted:#615e6d;--wordmark-muted:#4a5568;--bg-app:#e2e0e9;--border:#c4c2cb;--ts-green-400:#567818}*{box-sizing:border-box}body{background:var(--bg-app);color:var(--text-primary);margin:0;padding:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:13px;overflow:hidden}.drag-region{-webkit-app-region:drag;height:var(--drag-region)}.no-drag{-webkit-app-region:no-drag}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.cm-editor{height:100%}.cm-scroller{overflow:auto}:root.light .text-white,:root.light .hover\:text-white:hover{color:var(--text-primary)!important}:root.light .bg-blue-500,:root.light .bg-blue-600,:root.light .bg-blue-700,:root.light .hover\:bg-blue-500:hover,:root.light .hover\:bg-blue-600:hover,:root.light .bg-emerald-600,:root.light .bg-emerald-700,:root.light .hover\:bg-emerald-600:hover,:root.light .bg-red-600,:root.light .bg-red-700,:root.light .hover\:bg-red-600:hover,:root.light .bg-amber-600,:root.light .bg-orange-600,:root.light .bg-cyan-700,:root.light .bg-cyan-800,:root.light .bg-violet-600,:root.light .bg-violet-700{color:#fff!important}:root.light .text-orange-400{color:#c2410c!important}:root.light .text-orange-500{color:#9a3412!important}:root.light input::placeholder,:root.light textarea::placeholder{opacity:1;color:var(--text-muted)!important}:root.light .bg-surface-800{background-color:var(--surface-800)}:root.light option{color:#1c1b24;background:#d5d3dc}:root.light .text-red-200{color:#7f1d1d!important}:root.light .text-red-300{color:#b91c1c!important}:root.light .text-red-400{color:#dc2626!important}:root.light .text-red-500{color:#991b1b!important}:root.light .bg-red-800{background-color:#fecaca!important}:root.light .bg-red-900\/30{background-color:#fee2e2!important}:root.light .bg-red-900\/20{background-color:#fef2f2!important}:root.light .bg-red-900\/50{background-color:#fee2e2!important}:root.light .bg-red-950\/20{background-color:#fef2f2!important}:root.light .bg-red-950\/30{background-color:#fee2e2!important}:root.light .bg-red-950\/50{background-color:#fecaca!important}:root.light .border-red-700,:root.light .border-red-800,:root.light .border-red-800\/50,:root.light .border-red-800\/60{border-color:#fca5a5!important}:root.light .text-emerald-300{color:#15803d!important}:root.light .text-emerald-400{color:#16a34a!important}:root.light .bg-emerald-900\/20{background-color:#f0fdf4!important}:root.light .bg-emerald-900\/30,:root.light .bg-emerald-900\/50,:root.light .bg-emerald-950\/30{background-color:#dcfce7!important}:root.light .border-emerald-800,:root.light .border-emerald-700,:root.light .border-emerald-800\/50{border-color:#86efac!important}:root.light .text-amber-300{color:#b45309!important}:root.light .text-amber-400{color:#d97706!important}:root.light .bg-amber-800\/40{background-color:#fef3c7!important}:root.light .text-cyan-400{color:#0e7490!important}:root.light .text-blue-200{color:#1e3a8a!important}:root.light .text-blue-300{color:#1d4ed8!important}:root.light .text-blue-400{color:#2563eb!important}:root.light .bg-blue-900\/50{background-color:#dbeafe!important}:root.light .bg-blue-950\/40{background-color:#eff6ff!important}:root.light .bg-blue-950\/50{background-color:#dbeafe!important}:root.light .border-blue-700,:root.light .border-blue-800\/50{border-color:#93c5fd!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
@@ -67444,7 +67444,7 @@ function WelcomeScreen() {
67444
67444
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-surface-400 text-sm max-w-sm", children: "Local-first API testing with Robot Framework & Playwright code generation. Secrets stay on your machine." }),
67445
67445
  /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[11px] mt-3", style: { color: "var(--text-muted)" }, children: [
67446
67446
  "version ",
67447
- "0.4.8"
67447
+ "0.4.9"
67448
67448
  ] })
67449
67449
  ] }),
67450
67450
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3 w-64", children: [
@@ -68166,7 +68166,6 @@ function WorkspaceSettingsModal({ onClose }) {
68166
68166
  existing.tls?.rejectUnauthorized !== false
68167
68167
  // default true
68168
68168
  );
68169
- const [dashboardUrl, setDashboardUrl] = reactExports.useState(existing.dashboardUrl ?? "");
68170
68169
  const [cloudEnabled2, setCloudEnabled] = reactExports.useState(existing.cloud?.enabled ?? false);
68171
68170
  const [cloudToken, setCloudToken] = reactExports.useState("");
68172
68171
  const cloudTokenSet = existing.cloud?.tokenSet ?? false;
@@ -68181,6 +68180,37 @@ function WorkspaceSettingsModal({ onClose }) {
68181
68180
  setCloudTest({ status: "err", msg: e.message });
68182
68181
  }
68183
68182
  }
68183
+ const sec = existing.secrets ?? {};
68184
+ const [vAddress, setVAddress] = reactExports.useState(sec.vault?.address ?? "");
68185
+ const [vNamespace, setVNamespace] = reactExports.useState(sec.vault?.namespace ?? "");
68186
+ const [vAuthMethod, setVAuthMethod] = reactExports.useState(sec.vault?.authMethod ?? "token");
68187
+ const [vRoleId, setVRoleId] = reactExports.useState(sec.vault?.roleId ?? "");
68188
+ const [vJwtRole, setVJwtRole] = reactExports.useState(sec.vault?.jwtRole ?? "");
68189
+ const [vLoginMount, setVLoginMount] = reactExports.useState(sec.vault?.loginMount ?? "");
68190
+ const [vKvVersion, setVKvVersion] = reactExports.useState(sec.vault?.kvVersion ?? "auto");
68191
+ const [vSkipVerify, setVSkipVerify] = reactExports.useState(sec.vault?.skipVerify ?? false);
68192
+ const [awsRegion, setAwsRegion] = reactExports.useState(sec.aws?.region ?? "");
68193
+ const [azVault, setAzVault] = reactExports.useState(sec.azure?.vault ?? "");
68194
+ const [azTenantId, setAzTenantId] = reactExports.useState(sec.azure?.tenantId ?? "");
68195
+ const [azClientId, setAzClientId] = reactExports.useState(sec.azure?.clientId ?? "");
68196
+ const [opConnectHost, setOpConnectHost] = reactExports.useState(sec.onePassword?.connectHost ?? "");
68197
+ const [oidc, setOidc] = reactExports.useState({ status: "idle" });
68198
+ async function vaultOidcLogin() {
68199
+ setOidc({ status: "busy", msg: "Complete the sign-in in your browser…" });
68200
+ try {
68201
+ const r = await electron$c.vaultOidcLogin({
68202
+ address: vAddress.trim(),
68203
+ mount: vLoginMount.trim() || void 0,
68204
+ role: vJwtRole.trim() || void 0,
68205
+ namespace: vNamespace.trim() || void 0,
68206
+ skipVerify: vSkipVerify
68207
+ });
68208
+ const mins = Math.round((r.expiresInSeconds ?? 0) / 60);
68209
+ setOidc({ status: "ok", msg: `Signed in${mins ? ` · token expires in ~${mins} min` : ""}` });
68210
+ } catch (e) {
68211
+ setOidc({ status: "err", msg: e.message });
68212
+ }
68213
+ }
68184
68214
  const [patterns, setPatterns] = reactExports.useState(
68185
68215
  existing.piiMaskPatterns ?? DEFAULT_PII_PATTERNS
68186
68216
  );
@@ -68212,8 +68242,6 @@ function WorkspaceSettingsModal({ onClose }) {
68212
68242
  rejectUnauthorized
68213
68243
  };
68214
68244
  settings.piiMaskPatterns = patterns;
68215
- if (dashboardUrl.trim()) settings.dashboardUrl = dashboardUrl.trim();
68216
- else delete settings.dashboardUrl;
68217
68245
  if (cloudEnabled2 || cloudTokenSet || cloudToken.trim()) {
68218
68246
  settings.cloud = {
68219
68247
  enabled: cloudEnabled2,
@@ -68227,6 +68255,26 @@ function WorkspaceSettingsModal({ onClose }) {
68227
68255
  else delete settings.defaultEnvironment;
68228
68256
  if (persistHistory) settings.persistHistory = true;
68229
68257
  else delete settings.persistHistory;
68258
+ const secrets = {};
68259
+ const vault = {};
68260
+ if (vAddress.trim()) vault.address = vAddress.trim();
68261
+ if (vNamespace.trim()) vault.namespace = vNamespace.trim();
68262
+ if (vAuthMethod !== "token") vault.authMethod = vAuthMethod;
68263
+ if (vRoleId.trim()) vault.roleId = vRoleId.trim();
68264
+ if (vJwtRole.trim()) vault.jwtRole = vJwtRole.trim();
68265
+ if (vLoginMount.trim()) vault.loginMount = vLoginMount.trim();
68266
+ if (vKvVersion !== "auto") vault.kvVersion = vKvVersion;
68267
+ if (vSkipVerify) vault.skipVerify = true;
68268
+ if (Object.keys(vault).length) secrets.vault = vault;
68269
+ if (awsRegion.trim()) secrets.aws = { region: awsRegion.trim() };
68270
+ const azure = {};
68271
+ if (azVault.trim()) azure.vault = azVault.trim();
68272
+ if (azTenantId.trim()) azure.tenantId = azTenantId.trim();
68273
+ if (azClientId.trim()) azure.clientId = azClientId.trim();
68274
+ if (Object.keys(azure).length) secrets.azure = azure;
68275
+ if (opConnectHost.trim()) secrets.onePassword = { connectHost: opConnectHost.trim() };
68276
+ if (Object.keys(secrets).length) settings.secrets = secrets;
68277
+ else delete settings.secrets;
68230
68278
  updateWorkspaceSettings(settings);
68231
68279
  const updated = useStore.getState().workspace;
68232
68280
  if (updated) await electron$c.saveWorkspace(updated);
@@ -68247,7 +68295,7 @@ function WorkspaceSettingsModal({ onClose }) {
68247
68295
  { id: "proxy", label: "Proxy" },
68248
68296
  { id: "tls", label: "TLS / Certificates" },
68249
68297
  { id: "privacy", label: "Privacy" },
68250
- { id: "contracts", label: "Contracts" },
68298
+ { id: "secrets", label: "Secrets" },
68251
68299
  { id: "cloud", label: "Cloud" }
68252
68300
  ];
68253
68301
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -68390,21 +68438,6 @@ function WorkspaceSettingsModal({ onClose }) {
68390
68438
  ] })
68391
68439
  ] })
68392
68440
  ] }),
68393
- activeTab === "contracts" && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
68394
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68395
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Dashboard URL (optional)" }),
68396
- /* @__PURE__ */ jsxRuntimeExports.jsx(
68397
- "input",
68398
- {
68399
- value: dashboardUrl,
68400
- onChange: (e) => setDashboardUrl(e.target.value),
68401
- placeholder: "http://localhost:8080",
68402
- className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68403
- }
68404
- )
68405
- ] }),
68406
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-surface-600 text-[11px]", children: 'Where your contract dashboard is served (api-spector contract report --serve, locally or as a docker container). Adds an "Open dashboard" link to the contract results panel. The link is view-only: recorded results reach the dashboard through the workspace files, not through this URL.' })
68407
- ] }),
68408
68441
  activeTab === "cloud" && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
68409
68442
  /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "flex items-start gap-2 cursor-pointer", children: [
68410
68443
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -68549,6 +68582,200 @@ function WorkspaceSettingsModal({ onClose }) {
68549
68582
  }
68550
68583
  )
68551
68584
  ] })
68585
+ ] }),
68586
+ activeTab === "secrets" && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
68587
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-surface-600 text-[11px]", children: [
68588
+ "Reference secrets from an external manager instead of storing them. Put a reference like",
68589
+ " ",
68590
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-surface-400", children: "vault:secret/data/app#token" }),
68591
+ " in an environment variable or an auth field; it is resolved at send-time and never written to the workspace. This connection config is non-secret — tokens and secret-ids come from your environment (or the Vault sign-in below)."
68592
+ ] }),
68593
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 border border-surface-800 rounded p-3", children: [
68594
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[10px] uppercase tracking-wider text-surface-500 font-semibold", children: "HashiCorp Vault" }),
68595
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68596
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Address (VAULT_ADDR)" }),
68597
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68598
+ "input",
68599
+ {
68600
+ value: vAddress,
68601
+ onChange: (e) => setVAddress(e.target.value),
68602
+ placeholder: "https://vault.acme.internal:8200",
68603
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68604
+ }
68605
+ )
68606
+ ] }),
68607
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
68608
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68609
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Namespace" }),
68610
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68611
+ "input",
68612
+ {
68613
+ value: vNamespace,
68614
+ onChange: (e) => setVNamespace(e.target.value),
68615
+ placeholder: "(Enterprise)",
68616
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68617
+ }
68618
+ )
68619
+ ] }),
68620
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68621
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Auth method" }),
68622
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
68623
+ "select",
68624
+ {
68625
+ value: vAuthMethod,
68626
+ onChange: (e) => setVAuthMethod(e.target.value),
68627
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500",
68628
+ children: [
68629
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "token", children: "Token / OIDC" }),
68630
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "approle", children: "AppRole" }),
68631
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "jwt", children: "JWT (CI)" })
68632
+ ]
68633
+ }
68634
+ )
68635
+ ] })
68636
+ ] }),
68637
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
68638
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68639
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Role (AppRole/JWT/OIDC)" }),
68640
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68641
+ "input",
68642
+ {
68643
+ value: vJwtRole,
68644
+ onChange: (e) => setVJwtRole(e.target.value),
68645
+ placeholder: "apispector",
68646
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68647
+ }
68648
+ )
68649
+ ] }),
68650
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68651
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Login mount" }),
68652
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68653
+ "input",
68654
+ {
68655
+ value: vLoginMount,
68656
+ onChange: (e) => setVLoginMount(e.target.value),
68657
+ placeholder: "oidc / approle / jwt",
68658
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68659
+ }
68660
+ )
68661
+ ] })
68662
+ ] }),
68663
+ vAuthMethod === "approle" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68664
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: [
68665
+ "Role ID ",
68666
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-surface-600 normal-case", children: "(secret id via VAULT_SECRET_ID)" })
68667
+ ] }),
68668
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68669
+ "input",
68670
+ {
68671
+ value: vRoleId,
68672
+ onChange: (e) => setVRoleId(e.target.value),
68673
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono"
68674
+ }
68675
+ )
68676
+ ] }),
68677
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
68678
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68679
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "KV version" }),
68680
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
68681
+ "select",
68682
+ {
68683
+ value: vKvVersion,
68684
+ onChange: (e) => setVKvVersion(e.target.value),
68685
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500",
68686
+ children: [
68687
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "auto", children: "auto" }),
68688
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "2", children: "v2" }),
68689
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "1", children: "v1" })
68690
+ ]
68691
+ }
68692
+ )
68693
+ ] }),
68694
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "flex items-center gap-2 mt-4 cursor-pointer", children: [
68695
+ /* @__PURE__ */ jsxRuntimeExports.jsx("input", { type: "checkbox", checked: vSkipVerify, onChange: (e) => setVSkipVerify(e.target.checked) }),
68696
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-surface-300", children: "Skip TLS verify (dev)" })
68697
+ ] })
68698
+ ] }),
68699
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mt-1", children: [
68700
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68701
+ "button",
68702
+ {
68703
+ onClick: vaultOidcLogin,
68704
+ disabled: !vAddress.trim() || oidc.status === "busy",
68705
+ className: "px-3 py-1.5 bg-surface-700 hover:bg-surface-600 disabled:opacity-40 rounded transition-colors",
68706
+ children: oidc.status === "busy" ? "Waiting for browser…" : "Sign in with OIDC"
68707
+ }
68708
+ ),
68709
+ oidc.msg && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `text-[11px] ${oidc.status === "ok" ? "text-green-400" : oidc.status === "err" ? "text-red-400" : "text-surface-500"}`, children: oidc.msg })
68710
+ ] }),
68711
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-surface-600 text-[11px]", children: "Opens your browser to sign in; the short-lived token is used for this session only." })
68712
+ ] }),
68713
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68714
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: [
68715
+ "AWS region ",
68716
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-surface-600 normal-case", children: "(credentials from AWS_* env)" })
68717
+ ] }),
68718
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68719
+ "input",
68720
+ {
68721
+ value: awsRegion,
68722
+ onChange: (e) => setAwsRegion(e.target.value),
68723
+ placeholder: "eu-west-1",
68724
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68725
+ }
68726
+ )
68727
+ ] }),
68728
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
68729
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68730
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Azure vault" }),
68731
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68732
+ "input",
68733
+ {
68734
+ value: azVault,
68735
+ onChange: (e) => setAzVault(e.target.value),
68736
+ placeholder: "acme-kv",
68737
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68738
+ }
68739
+ )
68740
+ ] }),
68741
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68742
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Tenant id" }),
68743
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68744
+ "input",
68745
+ {
68746
+ value: azTenantId,
68747
+ onChange: (e) => setAzTenantId(e.target.value),
68748
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono"
68749
+ }
68750
+ )
68751
+ ] }),
68752
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68753
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Client id" }),
68754
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68755
+ "input",
68756
+ {
68757
+ value: azClientId,
68758
+ onChange: (e) => setAzClientId(e.target.value),
68759
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono"
68760
+ }
68761
+ )
68762
+ ] })
68763
+ ] }),
68764
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
68765
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: [
68766
+ "1Password Connect host ",
68767
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-surface-600 normal-case", children: "(token from OP_CONNECT_TOKEN)" })
68768
+ ] }),
68769
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68770
+ "input",
68771
+ {
68772
+ value: opConnectHost,
68773
+ onChange: (e) => setOpConnectHost(e.target.value),
68774
+ placeholder: "https://op.acme.internal",
68775
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
68776
+ }
68777
+ )
68778
+ ] })
68552
68779
  ] })
68553
68780
  ] }),
68554
68781
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2 px-4 py-3 border-t border-surface-800 flex-shrink-0", children: [
@@ -72575,10 +72802,13 @@ function ContractPanel({ fuzzReport, setFuzzReport }) {
72575
72802
  },
72576
72803
  m
72577
72804
  )) }),
72578
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-surface-500 leading-relaxed", children: mode === "consumer" ? "Sends requests to the real provider and validates each response against the contract defined in the Contract tab." : mode === "provider" ? "Static analysis: validates that your requests conform to the provider's published OpenAPI spec (no HTTP calls)." : mode === "provider-live" ? "Replays each contract against a running provider, seeding provider states first. The real provider verification." : mode === "fuzz" ? "Sends malformed inputs generated from the spec (or, with no spec, the request body) and flags responses that crash (5xx) or accept invalid input." : "Checks static schema compatibility between consumer contracts and provider spec, then verifies live responses." }),
72579
- (mode === "provider-live" || isFuzz) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [
72805
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-surface-500 leading-relaxed", children: mode === "consumer" ? "Sends requests to the real provider and validates each response against the contract defined in the Contract tab. Set a base URL below to send host-less (design-first) contracts." : mode === "provider" ? "Static analysis: validates that your requests conform to the provider's published OpenAPI spec (no HTTP calls)." : mode === "provider-live" ? "Replays each contract against a running provider, seeding provider states first. The real provider verification." : mode === "fuzz" ? "Sends malformed inputs generated from the spec (or, with no spec, the request body) and flags responses that crash (5xx) or accept invalid input." : "Checks static schema compatibility between consumer contracts and provider spec, then verifies live responses." }),
72806
+ (mode === "consumer" || mode === "provider-live" || isFuzz) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [
72580
72807
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
72581
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] text-surface-500 uppercase tracking-wider font-medium block mb-1", children: "Provider base URL" }),
72808
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "text-[10px] text-surface-500 uppercase tracking-wider font-medium block mb-1", children: [
72809
+ "Provider base URL ",
72810
+ mode === "consumer" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "normal-case text-surface-600", children: "(optional)" })
72811
+ ] }),
72582
72812
  /* @__PURE__ */ jsxRuntimeExports.jsx(
72583
72813
  "input",
72584
72814
  {
@@ -72588,7 +72818,7 @@ function ContractPanel({ fuzzReport, setFuzzReport }) {
72588
72818
  className: "w-full text-xs bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
72589
72819
  }
72590
72820
  ),
72591
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-surface-600 mt-1 leading-relaxed", children: isFuzz ? "Required. Each fuzzed request is rebased onto this origin before it is sent." : "Each request is rebased onto this origin before being replayed against the live provider." })
72821
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-surface-600 mt-1 leading-relaxed", children: isFuzz ? "Required. Each fuzzed request is rebased onto this origin before it is sent." : mode === "consumer" ? "Optional. Rebase each request onto this origin before sending, so design-first contracts that carry only a path (e.g. /brands) can run. Requests with a full URL are sent as-is." : "Each request is rebased onto this origin before being replayed against the live provider." })
72592
72822
  ] }),
72593
72823
  mode === "provider-live" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
72594
72824
  /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "text-[10px] text-surface-500 uppercase tracking-wider font-medium block mb-1", children: [
@@ -72913,7 +73143,6 @@ function ContractResultsPanel() {
72913
73143
  const clearReport = useStore((s) => s.setLastContractReport);
72914
73144
  const activeCollId = useStore((s) => s.activeCollectionId);
72915
73145
  const collections = useStore((s) => s.collections);
72916
- const dashboardUrl = useStore((s) => s.workspace?.settings?.dashboardUrl);
72917
73146
  const [recordOpen, setRecordOpen] = reactExports.useState(false);
72918
73147
  const [pacticipant, setPacticipant] = reactExports.useState("");
72919
73148
  const [version, setVersion] = reactExports.useState("");
@@ -72962,15 +73191,6 @@ function ContractResultsPanel() {
72962
73191
  report.durationMs,
72963
73192
  "ms"
72964
73193
  ] }),
72965
- dashboardUrl && /* @__PURE__ */ jsxRuntimeExports.jsx(
72966
- "button",
72967
- {
72968
- onClick: () => window.electron.openExternal(dashboardUrl),
72969
- className: "text-[11px] text-surface-500 hover:text-surface-200 transition-colors",
72970
- title: `Open the contract dashboard (${dashboardUrl})`,
72971
- children: "Open dashboard"
72972
- }
72973
- ),
72974
73194
  /* @__PURE__ */ jsxRuntimeExports.jsx(
72975
73195
  "button",
72976
73196
  {
@@ -74421,7 +74641,7 @@ function App() {
74421
74641
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { color: "#6aa3c8" }, children: "Spector" }),
74422
74642
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-2 text-[10px] font-normal opacity-50", children: [
74423
74643
  "v",
74424
- "0.4.8"
74644
+ "0.4.9"
74425
74645
  ] }),
74426
74646
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "mx-2 opacity-30", children: "·" }),
74427
74647
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -5,8 +5,8 @@
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>API Spector</title>
8
- <script type="module" crossorigin src="./assets/index-CEKgq6t0.js"></script>
9
- <link rel="stylesheet" crossorigin href="./assets/index-B_xyaTDo.css">
8
+ <script type="module" crossorigin src="./assets/index-b63nUtxA.js"></script>
9
+ <link rel="stylesheet" crossorigin href="./assets/index-CFvibipL.css">
10
10
  </head>
11
11
 
12
12
  <body>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@testsmith/api-spector",
3
3
  "productName": "API Spector",
4
- "version": "0.4.8",
4
+ "version": "0.4.9",
5
5
  "description": "Local-first API testing tool to inspect, test and mock APIs",
6
6
  "repository": {
7
7
  "type": "git",
package/readme.md CHANGED
@@ -103,6 +103,26 @@ env:
103
103
 
104
104
  If the key is not set, encrypted secrets will not be resolved and a warning will appear in the console output.
105
105
 
106
+ ## External secret managers
107
+
108
+ Instead of storing a secret, reference one in your secret manager and resolve it at run time — nothing is written to the workspace, results, or console. Put a reference in an environment variable (`secretRef`), an auth field, or inline as `{{vault:...}}` anywhere in a request (URL, header, body, or script). Built-in backends:
109
+
110
+ | Provider | Reference |
111
+ |---|---|
112
+ | HashiCorp Vault | `vault:secret/data/app#api_key` |
113
+ | AWS Secrets Manager | `aws:prod/db#password` |
114
+ | Azure Key Vault | `azure:acme-kv/db-password` |
115
+ | 1Password | `op://Prod/Database/password` |
116
+
117
+ Credentials come from the environment (the same conventions each tool already uses), so the same workspace runs unchanged on a laptop and in CI:
118
+
119
+ ```bash
120
+ vault login -method=oidc # or AWS/Azure/1Password env
121
+ api-spector run --workspace ./ws.spector --env prod
122
+ ```
123
+
124
+ The design is pluggable — more backends drop in as providers. See [Secret Managers](docs/reference/secrets-vault.md).
125
+
106
126
  ## Development
107
127
 
108
128
  ```bash