station-kit 1.1.0 → 2.0.0
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/.next/standalone/packages/station-kit/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/station-kit/.next/app-build-manifest.json +55 -34
- package/.next/standalone/packages/station-kit/.next/app-path-routes-manifest.json +11 -8
- package/.next/standalone/packages/station-kit/.next/build-manifest.json +2 -2
- package/.next/standalone/packages/station-kit/.next/prerender-manifest.json +73 -25
- package/.next/standalone/packages/station-kit/.next/routes-manifest.json +20 -0
- package/.next/standalone/packages/station-kit/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/_not-found.rsc +8 -8
- package/.next/standalone/packages/station-kit/.next/server/app/beacons/[name]/page.js +2 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons/[name]/page.js.nft.json +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons/[name]/page_client-reference-manifest.js +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons/page.js +2 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons/page.js.nft.json +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons/page_client-reference-manifest.js +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons.html +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons.meta +7 -0
- package/.next/standalone/packages/station-kit/.next/server/app/beacons.rsc +25 -0
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/dyn/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/dyn/[name]/v/[n]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/new.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/new.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/broadcasts.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app/environment/page.js +2 -0
- package/.next/standalone/packages/station-kit/.next/server/app/environment/page.js.nft.json +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/environment/page_client-reference-manifest.js +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/environment.html +1 -0
- package/.next/standalone/packages/station-kit/.next/server/app/environment.meta +7 -0
- package/.next/standalone/packages/station-kit/.next/server/app/environment.rsc +25 -0
- package/.next/standalone/packages/station-kit/.next/server/app/index.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/index.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/playground/expression/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/playground/expression.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/playground/expression.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app/runs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/schedules/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/schedules/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/schedules/new.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/schedules/new.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/schedules.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/schedules.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/settings.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/settings.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app/signals/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/signals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/signals.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/app/signals.rsc +9 -9
- package/.next/standalone/packages/station-kit/.next/server/app-paths-manifest.json +11 -8
- package/.next/standalone/packages/station-kit/.next/server/chunks/102.js +1 -1
- package/.next/standalone/packages/station-kit/.next/server/pages/404.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/pages/500.html +1 -1
- package/.next/standalone/packages/station-kit/.next/server/pages-manifest.json +1 -1
- package/.next/standalone/packages/station-kit/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/285-583f23ee7827983f.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/561-05a7ef9669e3921a.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/beacons/[name]/page-eb1f82847734e145.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/beacons/page-64e296346197e44b.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/dyn/[name]/v/[n]/page-15edf07ab26241c9.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/page-b23a03097c8f75c4.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/environment/page-111242bec067fdee.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/layout-e9ac56fcaf7a5ea7.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/page-ef78692958c2fc01.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/playground/expression/page-29294a705dd8f471.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/runs/[id]/page-287bbb8f6dec2e23.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/schedules/page-c869218da203e3b4.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/settings/page-05cf43b6ae6b3187.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/[name]/page-4027803be00c695a.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/page-8e076fc5d0188d72.js +1 -0
- package/.next/standalone/packages/station-kit/.next/static/css/ddb1646dc25ed100.css +1 -0
- package/.next/standalone/packages/station-kit/.next/static/vTGEzSqxhR_E57YAFn9DC/_buildManifest.js +1 -0
- package/.next/standalone/packages/station-kit/package.json +4 -1
- package/dist/config/schema.d.ts +18 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +3 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/server/auth/keys.d.ts +18 -1
- package/dist/server/auth/keys.d.ts.map +1 -1
- package/dist/server/auth/keys.js +38 -6
- package/dist/server/auth/keys.js.map +1 -1
- package/dist/server/auth/session.d.ts.map +1 -1
- package/dist/server/auth/session.js +34 -11
- package/dist/server/auth/session.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +135 -18
- package/dist/server/index.js.map +1 -1
- package/dist/server/metadata.d.ts +2 -0
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/metadata.js.map +1 -1
- package/dist/server/middleware/rate-limit.d.ts.map +1 -1
- package/dist/server/middleware/rate-limit.js +22 -1
- package/dist/server/middleware/rate-limit.js.map +1 -1
- package/dist/server/routes/beacons.d.ts +10 -0
- package/dist/server/routes/beacons.d.ts.map +1 -0
- package/dist/server/routes/beacons.js +98 -0
- package/dist/server/routes/beacons.js.map +1 -0
- package/dist/server/routes/broadcasts.d.ts.map +1 -1
- package/dist/server/routes/broadcasts.js +6 -2
- package/dist/server/routes/broadcasts.js.map +1 -1
- package/dist/server/routes/runs.d.ts.map +1 -1
- package/dist/server/routes/runs.js +19 -59
- package/dist/server/routes/runs.js.map +1 -1
- package/dist/server/routes/signals.d.ts.map +1 -1
- package/dist/server/routes/signals.js +17 -13
- package/dist/server/routes/signals.js.map +1 -1
- package/dist/server/routes/v1/env.d.ts +10 -0
- package/dist/server/routes/v1/env.d.ts.map +1 -0
- package/dist/server/routes/v1/env.js +132 -0
- package/dist/server/routes/v1/env.js.map +1 -0
- package/dist/server/routes/v1/events.js +2 -2
- package/dist/server/routes/v1/events.js.map +1 -1
- package/dist/server/routes/v1/runs.d.ts.map +1 -1
- package/dist/server/routes/v1/runs.js +10 -31
- package/dist/server/routes/v1/runs.js.map +1 -1
- package/dist/server/sse.d.ts +2 -1
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +5 -1
- package/dist/server/sse.js.map +1 -1
- package/dist/server/subscriber.d.ts +56 -0
- package/dist/server/subscriber.d.ts.map +1 -1
- package/dist/server/subscriber.js +94 -0
- package/dist/server/subscriber.js.map +1 -1
- package/dist/server/ws.d.ts +8 -2
- package/dist/server/ws.d.ts.map +1 -1
- package/dist/server/ws.js +28 -3
- package/dist/server/ws.js.map +1 -1
- package/package.json +11 -8
- package/src/app/beacons/[name]/beacon-detail.tsx +253 -0
- package/src/app/beacons/[name]/page.tsx +6 -0
- package/src/app/beacons/page.tsx +98 -0
- package/src/app/components/shell.tsx +24 -0
- package/src/app/components/status-badge.tsx +13 -1
- package/src/app/environment/page.tsx +415 -0
- package/src/app/globals.css +48 -0
- package/src/app/hooks/use-api.ts +80 -0
- package/src/config/schema.ts +21 -0
- package/src/index.ts +12 -0
- package/src/server/auth/keys.ts +50 -5
- package/src/server/auth/session.ts +38 -11
- package/src/server/index.ts +144 -18
- package/src/server/metadata.ts +2 -0
- package/src/server/middleware/rate-limit.ts +20 -1
- package/src/server/routes/beacons.ts +112 -0
- package/src/server/routes/broadcasts.ts +6 -2
- package/src/server/routes/runs.ts +20 -67
- package/src/server/routes/signals.ts +17 -13
- package/src/server/routes/v1/env.ts +144 -0
- package/src/server/routes/v1/events.ts +2 -2
- package/src/server/routes/v1/runs.ts +11 -35
- package/src/server/sse.ts +7 -2
- package/src/server/subscriber.ts +111 -0
- package/src/server/ws.ts +38 -4
- package/.next/standalone/packages/station-kit/.next/static/THKSkCipW_pj0F6DRXYEG/_buildManifest.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/285-ff198f0a909c4fdd.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/561-33d912169940283e.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/dyn/[name]/v/[n]/page-5eac0507f49a00ec.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/page-dee500ccc01f0821.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/layout-e14e14f3e5b0b8a9.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/page-aac41ef7a470daab.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/playground/expression/page-dc9d91f3f50f4716.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/runs/[id]/page-9e4c4f751a4bea72.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/schedules/page-738d98dc0b63166e.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/settings/page-fc5654b31f57ac21.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/[name]/page-4b1c09a539a1ebcd.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/page-d2f2403dfede87cc.js +0 -1
- package/.next/standalone/packages/station-kit/.next/static/css/0be0e65a5f561f37.css +0 -1
- /package/.next/standalone/packages/station-kit/.next/static/{THKSkCipW_pj0F6DRXYEG → vTGEzSqxhR_E57YAFn9DC}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--rust:#8B5A2B;--rust-light:#A0622D;--rust-pale:#C4834A;--patina:#4A6741;--patina-light:#5C7C52;--signal-green:#6B9962;--concrete:#F4F1EC;--concrete-dark:#E8E4DC;--concrete-mid:#D4CEBF;--charcoal:#1C1C1E;--charcoal-mid:#2C2C2E;--wire:#3A3A3C;--muted:#8A8A8E;--muted-light:#AEAEB2;--sky:#7FB2CC;--surface:#FFFFFF;--code-bg:#1C1C1E;--code-text:#F4F1EC;--code-key:#AEAEB2;--code-string:#C4834A;--code-number:#7FB2CC;--code-bool:#5C7C52;--code-null:#8A8A8E;--font-display:"Instrument Serif",serif;--font-mono:"IBM Plex Mono",monospace;--font-body:"Space Grotesk",sans-serif;--ease-standard:cubic-bezier(0.25,0.46,0.45,0.94);--ease-enter:cubic-bezier(0.0,0.0,0.2,1.0);--ease-exit:cubic-bezier(0.4,0.0,1.0,1.0);--duration-pulse:2.4s;--duration-blink:3s;--duration-reveal:500ms;--delay-stagger:120ms;--border-width:1.5px;--sidebar-width:200px;--header-height:48px}[data-theme=dark]{--rust:#C4834A;--rust-light:#D4975C;--rust-pale:#E0A86A;--patina:#6B9962;--patina-light:#7DAF72;--signal-green:#8BB882;--concrete:#1A1A1C;--concrete-dark:#252527;--concrete-mid:#3A3A3C;--charcoal:#E8E4DC;--charcoal-mid:#C4C0B8;--wire:#4A4A4C;--muted:#8A8A8E;--muted-light:#6A6A6E;--sky:#8FC2DC;--surface:#222224;--code-bg:#111113}[data-theme=dark] .station-sidebar{--charcoal:#1C1C1E;--charcoal-mid:#2C2C2E;--wire:#3A3A3C;--concrete:#F4F1EC;--concrete-dark:#E8E4DC;--muted:#8A8A8E;--muted-light:#AEAEB2;--rust:#8B5A2B}[data-theme=dark] .status-badge--running{background:rgba(107,153,98,.2)}[data-theme=dark] .status-badge--completed{background:rgba(74,103,65,.18)}[data-theme=dark] .status-badge--failed{background:rgba(196,131,74,.15)}@keyframes signal-pulse{0%{box-shadow:0 0 0 0 rgba(107,153,98,.4)}70%{box-shadow:0 0 0 6px rgba(107,153,98,0)}to{box-shadow:0 0 0 0 rgba(107,153,98,0)}}@keyframes status-blink{0%,45%,55%,to{opacity:1}50%{opacity:.15}}@keyframes stagger-reveal{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes load-sweep{0%{width:0}15%{width:15%}40%{width:45%}70%{width:70%}90%{width:90%}to{width:100%}}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-body);font-weight:300;color:var(--charcoal);background-color:var(--concrete);line-height:1.5}a{color:var(--rust);text-decoration:none}a:hover{color:var(--rust-light)}.font-display{font-family:var(--font-display);font-weight:400}.font-mono{font-family:var(--font-mono);font-size:.875rem}.font-body{font-family:var(--font-body);font-weight:300}.section-label{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.22em;color:var(--rust);display:flex;align-items:center;gap:.5rem}.section-label:before{content:"";display:block;width:1.5rem;height:var(--border-width);background:var(--rust)}.station-layout{display:flex;min-height:100vh}.station-sidebar{width:var(--sidebar-width);background:var(--charcoal);color:var(--concrete);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:10;transition:width .2s var(--ease-standard);overflow:hidden}.station-sidebar-logo{padding:1rem 1rem .75rem;border-bottom:var(--border-width) solid var(--wire)}.station-sidebar-mark{display:flex;align-items:center;gap:.5rem;color:var(--concrete)}.station-sidebar-mark svg{flex-shrink:0;opacity:.85}.station-sidebar-logo h1{font-family:var(--font-display);font-size:1.125rem;font-weight:400;color:var(--concrete);line-height:1}.station-sidebar-logo span{display:block;font-family:var(--font-mono);font-size:.5625rem;color:var(--muted);text-transform:uppercase;letter-spacing:.15em;margin-top:.375rem}.station-sidebar-nav{padding:.5rem 0;flex:1 1}.station-sidebar-nav-label{font-family:var(--font-mono);font-size:.5625rem;text-transform:uppercase;letter-spacing:.2em;color:var(--muted);padding:.5rem 1rem .25rem}.station-sidebar-nav a{display:flex;align-items:center;gap:.5rem;padding:.375rem 1rem;font-family:var(--font-mono);font-size:.8125rem;color:var(--muted-light);border-left:2px solid transparent;transition:color .2s var(--ease-standard),background .2s var(--ease-standard)}.station-sidebar-nav a svg{flex-shrink:0;opacity:.7;transition:opacity .2s var(--ease-standard)}.station-sidebar-nav a:hover{color:var(--concrete);background:var(--charcoal-mid)}.station-sidebar-nav a:hover svg{opacity:1}.station-sidebar-nav a.active{color:var(--concrete);background:var(--wire);border-left:2px solid var(--rust)}.station-sidebar-nav a.active svg{opacity:1}.sidebar-collapse-btn{display:flex;align-items:center;justify-content:center;width:100%;padding:.5rem;border:none;border-top:var(--border-width) solid var(--wire);background:transparent;color:var(--muted);cursor:pointer;transition:color .2s var(--ease-standard),background .2s var(--ease-standard)}.sidebar-collapse-btn:hover{color:var(--concrete);background:var(--charcoal-mid)}[data-collapsed=true] .station-sidebar{width:48px}[data-collapsed=true] .station-main{margin-left:48px}[data-collapsed=true] .nav-label,[data-collapsed=true] .station-sidebar-logo h1,[data-collapsed=true] .station-sidebar-logo>span,[data-collapsed=true] .station-sidebar-nav-label{display:none}[data-collapsed=true] .station-sidebar-logo{padding:.75rem;display:flex;justify-content:center}[data-collapsed=true] .station-sidebar-mark{justify-content:center}[data-collapsed=true] .station-sidebar-nav a{justify-content:center;padding:.5rem;border-left-color:transparent}[data-collapsed=true] .station-sidebar-nav a.active{border-left-color:transparent}.station-main{margin-left:var(--sidebar-width);flex:1 1;display:flex;flex-direction:column;transition:margin-left .2s var(--ease-standard)}.station-header{height:var(--header-height);background:var(--concrete);border-bottom:var(--border-width) solid var(--concrete-dark);justify-content:space-between;padding:0 1.5rem;position:-webkit-sticky;position:sticky;top:0;z-index:5}.breadcrumb,.station-header{display:flex;align-items:center}.breadcrumb{font-family:var(--font-mono);font-size:.75rem;color:var(--muted);gap:0}.breadcrumb-item{display:inline-flex;align-items:center}.breadcrumb-sep{margin:0 .375rem;color:var(--concrete-mid);-webkit-user-select:none;-moz-user-select:none;user-select:none}.breadcrumb-link{color:var(--muted);text-decoration:none;transition:color .15s var(--ease-standard);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.breadcrumb-link:hover{color:var(--rust)}.breadcrumb-segment{color:var(--muted)}.breadcrumb-segment--current{color:var(--charcoal);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.station-content{flex:1 1;padding:1.5rem;max-width:1100px}.status-badge{display:inline-flex;align-items:center;gap:.375rem;padding:.125rem .5rem;border-radius:3px;font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.05em;line-height:1.6}.status-badge-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.status-badge--pending{background:var(--concrete-dark);color:var(--muted)}.status-badge--pending .status-badge-dot{background:var(--muted)}.status-badge--running{background:rgba(74,103,65,.12);color:var(--patina)}.status-badge--running .status-badge-dot{background:var(--signal-green);animation:status-blink var(--duration-blink) ease-in-out infinite}.status-badge--completed{background:rgba(74,103,65,.1);color:var(--patina)}.status-badge--completed .status-badge-dot{background:var(--patina)}.status-badge--failed{background:rgba(139,90,43,.1);color:var(--rust)}.status-badge--failed .status-badge-dot{background:var(--rust)}.status-badge--cancelled{background:rgba(58,58,60,.08);color:var(--muted)}.status-badge--cancelled .status-badge-dot{background:var(--wire)}.status-badge--skipped{background:transparent;color:var(--muted);border:var(--border-width) dashed var(--muted-light)}.status-badge--skipped .status-badge-dot{background:var(--muted-light)}.status-badge--stopped{background:rgba(58,58,60,.08);color:var(--muted)}.status-badge--stopped .status-badge-dot{background:var(--wire)}.status-badge--starting{background:rgba(139,90,43,.1);color:var(--rust)}.status-badge--starting .status-badge-dot{background:var(--rust-pale);animation:status-blink var(--duration-blink) ease-in-out infinite}.status-badge--stopping{background:rgba(139,90,43,.08);color:var(--rust-light)}.status-badge--stopping .status-badge-dot{background:var(--rust-pale);animation:status-blink var(--duration-blink) ease-in-out infinite}.status-badge--backoff{background:rgba(139,90,43,.08);color:var(--rust-light)}.status-badge--backoff .status-badge-dot{background:var(--rust-pale)}.status-badge--errored{background:rgba(139,90,43,.1);color:var(--rust)}.status-badge--errored .status-badge-dot{background:var(--rust)}.station-table{width:100%;border-collapse:collapse;font-family:var(--font-body);font-size:.875rem}.station-table th{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);text-align:left;padding:.5rem .75rem;border-bottom:var(--border-width) solid var(--concrete-dark);font-weight:400}.station-table td{padding:.625rem .75rem;border-bottom:1px solid var(--concrete-dark);vertical-align:middle}.station-table tr:hover td{background:var(--concrete-dark)}.station-table .mono{font-family:var(--font-mono);font-size:.8125rem}.station-table .truncate{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.station-card{background:var(--surface);border:var(--border-width) solid var(--concrete-dark);border-radius:4px;padding:1.25rem}.station-card h3{font-family:var(--font-display);font-size:1.125rem;margin-bottom:.75rem}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));grid-gap:.75rem;gap:.75rem;margin-bottom:1.5rem}.stat-card{background:var(--surface);border:var(--border-width) solid var(--concrete-dark);border-radius:4px;padding:1rem}.stat-card-label{font-family:var(--font-mono);font-size:.625rem;text-transform:uppercase;letter-spacing:.15em;color:var(--muted);margin-bottom:.25rem}.stat-card-value{font-family:var(--font-display);font-size:2rem;color:var(--charcoal);line-height:1.1}.pulse-dot{width:8px;height:8px;border-radius:50%;background:var(--signal-green);animation:signal-pulse var(--duration-pulse) ease-out infinite}.pulse-dot--disconnected{background:var(--muted);animation:none}.step-timeline{position:relative;padding-left:1.5rem}.step-timeline:before{content:"";position:absolute;left:5px;top:0;bottom:0;width:var(--border-width);background:var(--concrete-dark)}.step-timeline-item{position:relative;padding:.75rem 0}.step-timeline-dot{position:absolute;left:-1.5rem;top:1rem;width:10px;height:10px;border-radius:50%;border:var(--border-width) solid var(--concrete-dark);background:var(--surface);transform:translateX(-50%);left:calc(-1.5rem + 5px)}.step-timeline-dot--completed{background:var(--patina);border-color:var(--patina)}.step-timeline-dot--running{background:var(--signal-green);border-color:var(--signal-green);animation:signal-pulse var(--duration-pulse) ease-out infinite}.step-timeline-dot--failed{background:var(--rust);border-color:var(--rust)}.step-timeline-name{font-family:var(--font-mono);font-size:.8125rem;color:var(--charcoal)}.step-timeline-meta{font-family:var(--font-mono);font-size:.6875rem;color:var(--muted);margin-top:.125rem}.json-viewer{font-family:var(--font-mono);font-size:.8125rem;line-height:1.5;background:var(--code-bg);color:var(--code-text);border-radius:4px;padding:1rem;overflow-x:auto}.json-viewer .json-key{color:var(--code-key)}.json-viewer .json-string{color:var(--code-string)}.json-viewer .json-number{color:var(--code-number)}.json-viewer .json-boolean{color:var(--code-bool)}.json-viewer .json-null{color:var(--code-null)}.empty-state{text-align:center;padding:3rem 1rem;color:var(--muted)}.empty-state-text{font-family:var(--font-mono);font-size:.8125rem}.loading-bar{height:var(--border-width);background:var(--concrete-dark);position:relative;overflow:hidden;border-radius:1px}.loading-bar-fill{height:100%;background:var(--rust);animation:load-sweep 3.5s cubic-bezier(.4,0,.2,1) infinite}.dag-container{background:var(--surface);border:var(--border-width) solid var(--concrete-dark);border-radius:4px;padding:1.5rem;overflow-x:auto}.dag-node{cursor:pointer}.dag-node rect{stroke-width:1.5;rx:4;ry:4}.dag-node text{font-family:var(--font-mono);font-size:11px}.dag-edge{fill:none;stroke:var(--concrete-mid);stroke-width:1.5;transition:stroke .3s var(--ease-standard)}.dag-edge--active{stroke:var(--patina);stroke-width:2}.page-title{font-family:var(--font-display);font-size:1.75rem;font-weight:400;margin-bottom:1.5rem;color:var(--charcoal)}.btn{display:inline-flex;align-items:center;gap:.375rem;font-family:var(--font-mono);font-size:.75rem;padding:.375rem .75rem;border:var(--border-width) solid var(--charcoal);border-radius:3px;background:var(--charcoal);color:var(--concrete);cursor:pointer;transition:transform .2s var(--ease-standard),background .2s var(--ease-standard)}.btn:hover{transform:translateY(-2px);background:var(--rust);border-color:var(--rust)}.btn--primary{background:var(--patina);border-color:var(--patina)}.btn--primary:hover{background:var(--patina-light);border-color:var(--patina-light)}.btn--primary:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn--sm{font-size:.6875rem;padding:.25rem .5rem}.btn--danger{background:var(--rust);border-color:var(--rust)}.btn--danger:hover{background:var(--rust-light);border-color:var(--rust-light)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.detail-grid{display:grid;grid-template-columns:auto 1fr;grid-gap:.25rem 1rem;gap:.25rem 1rem;font-size:.875rem}.detail-label{font-family:var(--font-mono);font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.detail-value{font-family:var(--font-body);color:var(--charcoal)}.detail-value.mono{font-family:var(--font-mono);font-size:.8125rem}.reveal-item{animation:stagger-reveal var(--duration-reveal) var(--ease-standard) both}.input-textarea{width:100%;margin-top:.5rem;padding:.75rem;font-family:var(--font-mono);font-size:.8125rem;line-height:1.5;color:var(--code-text);background:var(--code-bg);border:var(--border-width) solid var(--wire);border-radius:4px;resize:vertical;outline:none}.input-textarea:focus{border-color:var(--patina)}.log-container{background:var(--code-bg);border-radius:4px;max-height:400px;overflow-y:auto;overflow-x:auto}.log-line{display:flex;gap:.625rem;padding:.125rem .75rem;font-family:var(--font-mono);font-size:.75rem;line-height:1.6;border-bottom:1px solid var(--wire)}.log-line:last-of-type{border-bottom:none}.log-timestamp{min-width:5.5rem}.log-level,.log-timestamp{color:var(--muted);flex-shrink:0}.log-level{min-width:2rem}.log-level[data-level=stderr]{color:var(--rust-pale)}.log-message{color:var(--code-text);white-space:pre-wrap;word-break:break-all}.schema-ref{border:var(--border-width) solid var(--concrete-dark);border-radius:4px;padding:.75rem;background:var(--surface);margin-bottom:.75rem}.schema-ref-title{font-family:var(--font-mono);font-size:.625rem;text-transform:uppercase;letter-spacing:.15em;color:var(--muted);margin-bottom:.5rem}.schema-field{display:flex;justify-content:space-between;padding:.25rem 0;font-family:var(--font-mono);font-size:.8125rem;border-bottom:1px solid var(--concrete-dark)}.schema-field:last-child{border-bottom:none}.schema-field-name{color:var(--charcoal)}.schema-field-type{color:var(--muted)}.schema-field-type--optional:after{content:"?";color:var(--rust-pale)}.error-block{background:rgba(139,90,43,.08);border:var(--border-width) solid rgba(139,90,43,.2);border-radius:4px;padding:.75rem 1rem;font-size:.8125rem;color:var(--rust);white-space:pre-wrap;word-break:break-word;line-height:1.5}.copy-btn,.error-block{font-family:var(--font-mono)}.copy-btn{position:absolute;top:.5rem;right:.5rem;background:var(--wire);border:none;border-radius:3px;padding:.25rem .5rem;font-size:.625rem;color:var(--muted-light);cursor:pointer;opacity:0;transition:opacity .2s var(--ease-standard);text-transform:uppercase;letter-spacing:.1em}.copy-btn:focus,.json-viewer:hover .copy-btn{opacity:1}.copy-btn:hover{color:var(--concrete);background:var(--muted)}.filter-bar{display:flex;gap:.375rem;margin-bottom:1rem}.filter-btn{font-family:var(--font-mono);font-size:.6875rem;padding:.25rem .625rem;border:var(--border-width) solid var(--concrete-dark);border-radius:3px;background:var(--surface);color:var(--muted);cursor:pointer;text-transform:uppercase;letter-spacing:.05em;transition:all .15s var(--ease-standard)}.filter-btn:hover{border-color:var(--charcoal);color:var(--charcoal)}.filter-btn--active{background:var(--charcoal);border-color:var(--charcoal);color:var(--concrete)}.node-detail{background:var(--surface);border:var(--border-width) solid var(--concrete-dark);border-radius:4px;padding:1.25rem;margin-top:1rem}.node-detail-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}.node-detail-title{font-family:var(--font-mono);font-size:.875rem;font-weight:500}.detail-section{margin-bottom:1.5rem}.detail-section:last-child{margin-bottom:0}.detail-section-label{font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.22em;color:var(--rust);margin-bottom:.5rem;display:flex;align-items:center;gap:.5rem}.detail-section-label:before{content:"";display:block;width:1rem;height:var(--border-width);background:var(--rust)}.meta-value--link{color:var(--rust);cursor:pointer}.meta-value--link:hover{color:var(--rust-light);text-decoration:underline}.dag-node--selected rect{stroke:var(--rust)!important;stroke-width:2.5!important}.json-parse-error{font-family:var(--font-mono);font-size:.6875rem;color:var(--rust);margin-top:.25rem}.station-table tr.clickable-row{cursor:pointer}.station-table tr.clickable-row:hover td{background:var(--concrete-dark)}.page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.page-header-actions{display:flex;gap:.5rem;align-items:center}.schema-pair{display:grid;grid-template-columns:1fr 1fr;grid-gap:1rem;gap:1rem}.config-grid{display:flex;flex-wrap:wrap;gap:1.5rem;margin-bottom:.5rem}.config-item{display:flex;flex-direction:column;gap:.125rem}.config-item-label{font-family:var(--font-mono);font-size:.625rem;text-transform:uppercase;letter-spacing:.15em;color:var(--muted)}.config-item-value{font-family:var(--font-mono);font-size:.875rem;color:var(--charcoal)}.workflow-layout{display:flex;gap:0;align-items:flex-start;border:var(--border-width) solid var(--concrete-dark);border-radius:4px;background:var(--surface);min-height:400px}.workflow-sidebar{width:220px;flex-shrink:0;border-right:var(--border-width) solid var(--concrete-dark);padding:.5rem 0;overflow-y:auto;max-height:calc(100vh - var(--header-height) - 10rem);position:-webkit-sticky;position:sticky;top:calc(var(--header-height) + 1.5rem)}.workflow-sidebar-label{font-family:var(--font-mono);font-size:.6rem;text-transform:uppercase;letter-spacing:.2em;color:var(--muted);padding:.375rem .75rem .5rem}.workflow-node-item{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .75rem;background:none;cursor:pointer;font-family:var(--font-mono);font-size:.8125rem;color:var(--charcoal);text-align:left;transition:background .15s var(--ease-standard);border:none;border-left:2px solid transparent}.workflow-node-item:hover{background:var(--concrete)}.workflow-node-item--active{background:var(--concrete);border-left-color:var(--patina)}.workflow-node-item--failed{color:var(--rust)}.workflow-node-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.workflow-node-dot--running{animation:signal-pulse var(--duration-pulse) ease-out infinite}.workflow-node-name{flex:1 1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workflow-node-duration{font-size:.6875rem;color:var(--muted);flex-shrink:0}.workflow-panel{flex:1 1;min-width:0;padding:1.25rem;overflow-y:auto;max-height:calc(100vh - var(--header-height) - 10rem)}.node-detail-meta{font-family:var(--font-mono);font-size:.75rem;color:var(--muted)}@media (max-width:768px){.workflow-layout{flex-direction:column;min-height:auto}.workflow-sidebar{width:100%;max-height:none;position:static;border-right:none;border-bottom:var(--border-width) solid var(--concrete-dark);display:flex;overflow-x:auto;padding:.25rem;gap:.25rem}.workflow-sidebar-label{display:none}.workflow-node-item{white-space:nowrap;padding:.375rem .5rem;border-left:none;border-bottom:2px solid transparent;font-size:.75rem}.workflow-node-item--active{border-bottom-color:var(--patina);border-left-color:transparent}.workflow-panel{max-height:none}}.collapsible-header{display:flex;align-items:center;gap:.375rem;font-family:var(--font-mono);font-size:.75rem;color:var(--muted);cursor:pointer;background:none;border:none;padding:.375rem 0;text-transform:uppercase;letter-spacing:.1em;transition:color .15s var(--ease-standard)}.collapsible-header:hover{color:var(--charcoal)}.collapsible-chevron{font-size:.625rem;line-height:1}.collapsible-content{padding-top:.5rem}.activity-row{cursor:pointer;border-radius:2px;transition:background .15s var(--ease-standard)}.activity-row:hover{background:var(--concrete-dark)}.theme-toggle{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:var(--muted);cursor:pointer;transition:color .2s var(--ease-standard),background .2s var(--ease-standard)}.theme-toggle:hover{color:var(--charcoal);background:var(--concrete-dark)}.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--concrete)}.login-card{width:320px;background:var(--surface);border:var(--border-width) solid var(--concrete-dark);border-radius:4px;padding:2rem 1.5rem}.login-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1.5rem;color:var(--charcoal)}.login-header h1{font-family:var(--font-display);font-size:1.25rem;font-weight:400}.login-field{margin-bottom:.75rem}.login-field label{display:block;font-family:var(--font-mono);font-size:.625rem;text-transform:uppercase;letter-spacing:.15em;color:var(--muted);margin-bottom:.25rem}.login-field input{width:100%;padding:.5rem .625rem;font-family:var(--font-mono);font-size:.8125rem;color:var(--charcoal);background:var(--concrete);border:var(--border-width) solid var(--concrete-dark);border-radius:3px;outline:none;transition:border-color .15s var(--ease-standard)}.login-field input:focus{border-color:var(--patina)}.login-error{font-family:var(--font-mono);font-size:.75rem;color:var(--rust);margin-bottom:.75rem}.login-btn{width:100%;justify-content:center;margin-top:.25rem}.logout-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:var(--muted);cursor:pointer;transition:color .2s var(--ease-standard),background .2s var(--ease-standard)}.logout-btn:hover{color:var(--rust);background:var(--concrete-dark)}
|
package/.next/standalone/packages/station-kit/.next/static/vTGEzSqxhR_E57YAFn9DC/_buildManifest.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:11,errorRate:1e-4,numBits:211,numHashes:14,bitArray:[0,0,r,1,r,r,r,r,1,e,r,e,e,e,e,r,e,e,r,r,e,r,e,e,r,r,r,r,r,e,e,r,e,e,e,r,r,r,r,e,r,e,r,e,e,r,e,r,e,e,e,r,r,r,r,r,r,r,r,e,e,e,e,r,e,r,e,r,e,r,e,r,e,r,r,e,r,e,e,r,e,r,r,r,e,e,r,e,r,e,e,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,e,r,e,e,r,e,r,r,e,e,e,r,e,r,e,e,e,e,e,e,r,e,e,e,r,e,e,e,r,e,r,r,e,e,r,r,e,r,e,e,e,r,e,r,r,r,r,r,r,e,e,r,r,e,r,r,r,e,e,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,r,e,e,r,r,r,e,r,e,e,r,r,r,e,e,r]},__routerFilterDynamic:{numItems:6,errorRate:1e-4,numBits:116,numHashes:14,bitArray:[r,r,r,e,r,e,r,e,e,e,r,r,r,r,e,e,e,r,r,r,r,r,e,e,e,e,r,e,e,e,r,r,e,e,r,r,e,e,e,e,e,r,e,r,e,e,r,e,e,r,r,e,r,r,r,e,r,r,r,r,r,e,r,e,r,r,e,r,e,e,r,e,r,r,e,e,r,e,e,r,e,e,e,r,e,r,r,e,r,r,e,e,r,e,r,e,r,r,r,r,e,r,e,e,r,r,r,r,e,e,e,e,e,r,e,e]},"/_error":["static/chunks/pages/_error-273a093c18b5ed0f.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "station-kit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Dashboard for station-signal — inspect and control signals and broadcasts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"test": "node --import tsx --test \"test/**/*.test.ts\""
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
+
"station-beacon": "workspace:*",
|
|
39
40
|
"station-broadcast": "workspace:*",
|
|
40
41
|
"station-signal": "workspace:*"
|
|
41
42
|
},
|
|
@@ -46,6 +47,7 @@
|
|
|
46
47
|
"next": "^15",
|
|
47
48
|
"react": "^19",
|
|
48
49
|
"react-dom": "^19",
|
|
50
|
+
"station-env": "workspace:*",
|
|
49
51
|
"station-expressions": "workspace:*",
|
|
50
52
|
"station-schedules": "workspace:*",
|
|
51
53
|
"tsx": "^4.21.0",
|
|
@@ -58,6 +60,7 @@
|
|
|
58
60
|
"@types/ws": "^8",
|
|
59
61
|
"better-sqlite3": "^11.9.1",
|
|
60
62
|
"station-adapter-sqlite": "workspace:*",
|
|
63
|
+
"station-beacon": "workspace:*",
|
|
61
64
|
"station-broadcast": "workspace:*",
|
|
62
65
|
"station-signal": "workspace:*",
|
|
63
66
|
"typescript": "^5.9.3"
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { SignalQueueAdapter } from "station-signal";
|
|
2
2
|
import type { BroadcastQueueAdapter } from "station-broadcast";
|
|
3
|
+
import type { BeaconStateAdapter } from "station-beacon";
|
|
3
4
|
import type { ScheduleAdapter } from "station-schedules";
|
|
5
|
+
import type { EnvStorageAdapter } from "station-env";
|
|
4
6
|
import type { ApiKeyStorageAdapter } from "../server/auth/keys.js";
|
|
5
7
|
import type { LogStorageAdapter } from "../server/log-store.js";
|
|
6
8
|
export interface AuthConfig {
|
|
@@ -32,11 +34,26 @@ export interface StationConfig {
|
|
|
32
34
|
host: string;
|
|
33
35
|
adapter?: SignalQueueAdapter;
|
|
34
36
|
broadcastAdapter?: BroadcastQueueAdapter;
|
|
37
|
+
/**
|
|
38
|
+
* Optional beacon supervision-state adapter. When provided (or when
|
|
39
|
+
* `beaconsDir` is set), the dashboard supervises long-running beacons and
|
|
40
|
+
* exposes them under `/api/beacons`.
|
|
41
|
+
*/
|
|
42
|
+
beaconAdapter?: BeaconStateAdapter;
|
|
35
43
|
/**
|
|
36
44
|
* Optional schedule storage adapter. When provided, runtime-editable
|
|
37
45
|
* schedules are persisted here and reconciled by both runners.
|
|
38
46
|
*/
|
|
39
47
|
scheduleAdapter?: ScheduleAdapter;
|
|
48
|
+
/**
|
|
49
|
+
* Pluggable storage backend for runtime environment variables. Defaults to a
|
|
50
|
+
* JSON file at `<dataDir>/station-env.json` (no native dependencies). When
|
|
51
|
+
* set — or by default — signals/beacons can require env vars via `.env()`,
|
|
52
|
+
* and variables defined here (globally or scoped to specific targets) are
|
|
53
|
+
* injected into runs. For multi-process deployments pass a durable adapter
|
|
54
|
+
* from a `station-adapter-*` package's `/env` subpath.
|
|
55
|
+
*/
|
|
56
|
+
envStorage?: EnvStorageAdapter;
|
|
40
57
|
/**
|
|
41
58
|
* Pluggable storage backend for run logs. Defaults to a `FileLogStorage`
|
|
42
59
|
* (append-only JSONL file at `<dataDir>/station-logs.jsonl`, no native
|
|
@@ -47,6 +64,7 @@ export interface StationConfig {
|
|
|
47
64
|
logStorage?: LogStorageAdapter;
|
|
48
65
|
signalsDir?: string;
|
|
49
66
|
broadcastsDir?: string;
|
|
67
|
+
beaconsDir?: string;
|
|
50
68
|
stationDir: string;
|
|
51
69
|
runner: RunnerConfig;
|
|
52
70
|
broadcastRunner: BroadcastRunnerConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,EAAE,qBAAqB,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,iBAAiB,CAAC,CAAC,GAAG;IAC3F,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAClD,CAAC;AAoBF,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC;;;;OAIG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,EAAE,qBAAqB,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,iBAAiB,CAAC,CAAC,GAAG;IAC3F,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAClD,CAAC;AAoBF,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,CA8CrE"}
|
package/dist/config/schema.js
CHANGED
|
@@ -37,10 +37,13 @@ export function resolveConfig(input) {
|
|
|
37
37
|
host: input.host ?? envHost ?? DEFAULTS.host,
|
|
38
38
|
adapter: input.adapter,
|
|
39
39
|
broadcastAdapter: input.broadcastAdapter,
|
|
40
|
+
beaconAdapter: input.beaconAdapter,
|
|
40
41
|
scheduleAdapter: input.scheduleAdapter,
|
|
42
|
+
envStorage: input.envStorage,
|
|
41
43
|
logStorage: input.logStorage,
|
|
42
44
|
signalsDir: input.signalsDir,
|
|
43
45
|
broadcastsDir: input.broadcastsDir,
|
|
46
|
+
beaconsDir: input.beaconsDir,
|
|
44
47
|
stationDir: input.stationDir ?? DEFAULTS.stationDir,
|
|
45
48
|
runner: {
|
|
46
49
|
pollIntervalMs: input.runner?.pollIntervalMs ?? DEFAULTS.runner.pollIntervalMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export declare function defineConfig(config: StationUserConfig): StationUserConf
|
|
|
3
3
|
export type { StationConfig, StationUserConfig, AuthConfig, DeployConfig } from "./config/schema.js";
|
|
4
4
|
export { resolveConfig } from "./config/schema.js";
|
|
5
5
|
export { loadConfig } from "./config/loader.js";
|
|
6
|
+
export { EnvStore, MemoryEnvStorage, FileEnvStorage, type EnvStorageAdapter, type EnvVar, type EnvVarPublic, type EnvTarget, } from "station-env";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAEzE;AAED,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAEzE;AAED,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,SAAS,GACf,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,7 @@ export function defineConfig(config) {
|
|
|
3
3
|
}
|
|
4
4
|
export { resolveConfig } from "./config/schema.js";
|
|
5
5
|
export { loadConfig } from "./config/loader.js";
|
|
6
|
+
// Re-export the runtime env store surface so consumers can construct custom
|
|
7
|
+
// storage or the store itself without a separate `station-env` import.
|
|
8
|
+
export { EnvStore, MemoryEnvStorage, FileEnvStorage, } from "station-env";
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,4EAA4E;AAC5E,uEAAuE;AACvE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,cAAc,GAKf,MAAM,aAAa,CAAC"}
|
|
@@ -74,6 +74,8 @@ export declare class SqliteKeyStorage implements ApiKeyStorageAdapter {
|
|
|
74
74
|
insert(record: ApiKey): void;
|
|
75
75
|
findByHash(keyHash: string): ApiKey | null;
|
|
76
76
|
list(): ApiKeyPublic[];
|
|
77
|
+
/** Last persisted lastUsed per key id, to skip per-request UPDATEs. */
|
|
78
|
+
private lastTouched;
|
|
77
79
|
touch(id: string, lastUsedIso: string): void;
|
|
78
80
|
revoke(id: string): boolean;
|
|
79
81
|
close(): void;
|
|
@@ -86,15 +88,30 @@ export declare class MemoryKeyStorage implements ApiKeyStorageAdapter {
|
|
|
86
88
|
touch(id: string, lastUsedIso: string): void;
|
|
87
89
|
revoke(id: string): boolean;
|
|
88
90
|
}
|
|
91
|
+
export interface KeyStoreOptions {
|
|
92
|
+
/**
|
|
93
|
+
* Server-side secret ("pepper") mixed into stored key hashes via HMAC.
|
|
94
|
+
* Defense-in-depth: a leaked key file alone can't be brute-forced or
|
|
95
|
+
* precomputed against without also stealing this secret. Optional — when
|
|
96
|
+
* omitted, keys are hashed with plain SHA-256 (legacy behavior). Existing
|
|
97
|
+
* plain-SHA-256 keys keep verifying after a pepper is added (see verify()).
|
|
98
|
+
*/
|
|
99
|
+
pepper?: string;
|
|
100
|
+
}
|
|
89
101
|
export declare class KeyStore {
|
|
90
102
|
private storage;
|
|
103
|
+
private pepper?;
|
|
91
104
|
/**
|
|
92
105
|
* Pass an `ApiKeyStorageAdapter` for any backend. The string overload is
|
|
93
106
|
* retained for backwards compatibility — it constructs a FileKeyStorage
|
|
94
107
|
* at the given path. (Previously this returned a SqliteKeyStorage; SQLite
|
|
95
108
|
* is now opt-in to avoid native build dependencies.)
|
|
96
109
|
*/
|
|
97
|
-
constructor(storageOrPath: ApiKeyStorageAdapter | string);
|
|
110
|
+
constructor(storageOrPath: ApiKeyStorageAdapter | string, options?: KeyStoreOptions);
|
|
111
|
+
/** Peppered hash for new keys — HMAC-SHA256 when a pepper is set, else SHA-256. */
|
|
112
|
+
private hashKey;
|
|
113
|
+
/** Unpeppered SHA-256 — used to verify keys stored before a pepper was configured. */
|
|
114
|
+
private legacyHashKey;
|
|
98
115
|
/** Generate a new API key. Returns the full key (only shown once) and the stored record. */
|
|
99
116
|
create(name: string, scopes?: string[]): Promise<{
|
|
100
117
|
key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/server/auth/keys.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACpE,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC;IACjD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC/C,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChC;AAID,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,oBAAoB;IACzD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,EAAE,qBAAqB;IAM1C,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,KAAK;IA4Bb,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO1C,IAAI,IAAI,YAAY,EAAE;IAStB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/server/auth/keys.ts"],"names":[],"mappings":"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"}
|
package/dist/server/auth/keys.js
CHANGED
|
@@ -93,8 +93,15 @@ export class FileKeyStorage {
|
|
|
93
93
|
const r = this.records.get(id);
|
|
94
94
|
if (!r)
|
|
95
95
|
return;
|
|
96
|
+
const prev = r.lastUsed ? Date.parse(r.lastUsed) : 0;
|
|
96
97
|
r.lastUsed = lastUsedIso;
|
|
97
|
-
|
|
98
|
+
// lastUsed is advisory. flush() rewrites and fsyncs the whole file
|
|
99
|
+
// synchronously — doing that on every authenticated request stalls the
|
|
100
|
+
// event loop, so only persist when the value moves by at least a minute.
|
|
101
|
+
// Reads stay fresh because list() serves from memory.
|
|
102
|
+
if (Date.parse(lastUsedIso) - prev >= 60_000) {
|
|
103
|
+
this.flush();
|
|
104
|
+
}
|
|
98
105
|
}
|
|
99
106
|
revoke(id) {
|
|
100
107
|
const r = this.records.get(id);
|
|
@@ -200,7 +207,15 @@ export class SqliteKeyStorage {
|
|
|
200
207
|
revoked: Boolean(row.revoked),
|
|
201
208
|
}));
|
|
202
209
|
}
|
|
210
|
+
/** Last persisted lastUsed per key id, to skip per-request UPDATEs. */
|
|
211
|
+
lastTouched = new Map();
|
|
203
212
|
touch(id, lastUsedIso) {
|
|
213
|
+
// lastUsed is advisory — throttle writes to once a minute per key.
|
|
214
|
+
const prev = this.lastTouched.get(id) ?? 0;
|
|
215
|
+
const next = Date.parse(lastUsedIso);
|
|
216
|
+
if (next - prev < 60_000)
|
|
217
|
+
return;
|
|
218
|
+
this.lastTouched.set(id, next);
|
|
204
219
|
this.db.prepare(`UPDATE ${this.table} SET last_used = ? WHERE id = ?`).run(lastUsedIso, id);
|
|
205
220
|
}
|
|
206
221
|
revoke(id) {
|
|
@@ -258,16 +273,16 @@ export class MemoryKeyStorage {
|
|
|
258
273
|
return true;
|
|
259
274
|
}
|
|
260
275
|
}
|
|
261
|
-
// ─── KeyStore — owns crypto, delegates persistence ──────────────────
|
|
262
276
|
export class KeyStore {
|
|
263
277
|
storage;
|
|
278
|
+
pepper;
|
|
264
279
|
/**
|
|
265
280
|
* Pass an `ApiKeyStorageAdapter` for any backend. The string overload is
|
|
266
281
|
* retained for backwards compatibility — it constructs a FileKeyStorage
|
|
267
282
|
* at the given path. (Previously this returned a SqliteKeyStorage; SQLite
|
|
268
283
|
* is now opt-in to avoid native build dependencies.)
|
|
269
284
|
*/
|
|
270
|
-
constructor(storageOrPath) {
|
|
285
|
+
constructor(storageOrPath, options) {
|
|
271
286
|
if (typeof storageOrPath === "string") {
|
|
272
287
|
const filePath = storageOrPath.endsWith(".db")
|
|
273
288
|
? storageOrPath.replace(/\.db$/, ".json")
|
|
@@ -277,12 +292,25 @@ export class KeyStore {
|
|
|
277
292
|
else {
|
|
278
293
|
this.storage = storageOrPath;
|
|
279
294
|
}
|
|
295
|
+
if (options?.pepper)
|
|
296
|
+
this.pepper = Buffer.from(options.pepper, "utf8");
|
|
297
|
+
}
|
|
298
|
+
/** Peppered hash for new keys — HMAC-SHA256 when a pepper is set, else SHA-256. */
|
|
299
|
+
hashKey(rawKey) {
|
|
300
|
+
if (this.pepper) {
|
|
301
|
+
return crypto.createHmac("sha256", this.pepper).update(rawKey).digest("hex");
|
|
302
|
+
}
|
|
303
|
+
return crypto.createHash("sha256").update(rawKey).digest("hex");
|
|
304
|
+
}
|
|
305
|
+
/** Unpeppered SHA-256 — used to verify keys stored before a pepper was configured. */
|
|
306
|
+
legacyHashKey(rawKey) {
|
|
307
|
+
return crypto.createHash("sha256").update(rawKey).digest("hex");
|
|
280
308
|
}
|
|
281
309
|
/** Generate a new API key. Returns the full key (only shown once) and the stored record. */
|
|
282
310
|
async create(name, scopes = ["trigger", "read"]) {
|
|
283
311
|
const id = crypto.randomUUID();
|
|
284
312
|
const rawKey = `sk_live_${crypto.randomBytes(16).toString("hex")}`;
|
|
285
|
-
const keyHash =
|
|
313
|
+
const keyHash = this.hashKey(rawKey);
|
|
286
314
|
const keyPrefix = rawKey.slice(0, 12);
|
|
287
315
|
const createdAt = new Date().toISOString();
|
|
288
316
|
const record = {
|
|
@@ -294,8 +322,12 @@ export class KeyStore {
|
|
|
294
322
|
}
|
|
295
323
|
/** Verify an API key. Returns the key record if valid, null otherwise. */
|
|
296
324
|
async verify(rawKey) {
|
|
297
|
-
|
|
298
|
-
|
|
325
|
+
let record = await this.storage.findByHash(this.hashKey(rawKey));
|
|
326
|
+
// Fall back to the unpeppered hash for keys created before the pepper was
|
|
327
|
+
// configured, so enabling a pepper doesn't invalidate existing keys.
|
|
328
|
+
if (!record && this.pepper) {
|
|
329
|
+
record = await this.storage.findByHash(this.legacyHashKey(rawKey));
|
|
330
|
+
}
|
|
299
331
|
if (!record)
|
|
300
332
|
return null;
|
|
301
333
|
if (record.revoked)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/server/auth/keys.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/server/auth/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/server/auth/session.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/server/auth/session.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAqCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAKhE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAchF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAMpG"}
|
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
const SESSION_TTL_MS = 86_400_000; // 24 hours
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Derive the HMAC signing key from the password via HKDF instead of using
|
|
5
|
+
* the cleartext password as the key directly — issued cookies should not be
|
|
6
|
+
* HMACs keyed with the literal admin credential. Cached because HKDF per
|
|
7
|
+
* request would be wasted CPU.
|
|
8
|
+
*/
|
|
9
|
+
const secretCache = new Map();
|
|
10
|
+
function sessionSecret(config) {
|
|
11
|
+
let secret = secretCache.get(config.password);
|
|
12
|
+
if (!secret) {
|
|
13
|
+
secret = Buffer.from(crypto.hkdfSync("sha256", config.password, "station-kit", "session-token-v1", 32));
|
|
14
|
+
secretCache.set(config.password, secret);
|
|
15
|
+
}
|
|
16
|
+
return secret;
|
|
17
|
+
}
|
|
18
|
+
function sign(payload, config) {
|
|
19
|
+
const hmac = crypto.createHmac("sha256", sessionSecret(config));
|
|
6
20
|
hmac.update(payload);
|
|
7
21
|
return hmac.digest("hex");
|
|
8
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Timing-safe string comparison that doesn't leak length: both inputs are
|
|
25
|
+
* hashed to a fixed size before `timingSafeEqual` (which requires equal
|
|
26
|
+
* lengths and would otherwise short-circuit on a length check).
|
|
27
|
+
*/
|
|
28
|
+
function safeEqual(a, b) {
|
|
29
|
+
const ha = crypto.createHash("sha256").update(a).digest();
|
|
30
|
+
const hb = crypto.createHash("sha256").update(b).digest();
|
|
31
|
+
return crypto.timingSafeEqual(ha, hb);
|
|
32
|
+
}
|
|
9
33
|
export function createSessionToken(config) {
|
|
10
34
|
const exp = Date.now() + (config.sessionTtlMs ?? SESSION_TTL_MS);
|
|
11
35
|
const payload = `${config.username}:${exp}`;
|
|
12
|
-
const signature = sign(payload, config
|
|
36
|
+
const signature = sign(payload, config);
|
|
13
37
|
return Buffer.from(`${payload}:${signature}`).toString("base64url");
|
|
14
38
|
}
|
|
15
39
|
export function verifySessionToken(token, config) {
|
|
@@ -24,19 +48,18 @@ export function verifySessionToken(token, config) {
|
|
|
24
48
|
return false;
|
|
25
49
|
if (username !== config.username)
|
|
26
50
|
return false;
|
|
27
|
-
const expected = sign(`${username}:${expStr}`, config
|
|
28
|
-
return
|
|
51
|
+
const expected = sign(`${username}:${expStr}`, config);
|
|
52
|
+
return safeEqual(sig, expected);
|
|
29
53
|
}
|
|
30
54
|
catch {
|
|
31
55
|
return false;
|
|
32
56
|
}
|
|
33
57
|
}
|
|
34
58
|
export function verifyCredentials(username, password, config) {
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const passMatch = password
|
|
39
|
-
crypto.timingSafeEqual(Buffer.from(password), Buffer.from(config.password));
|
|
59
|
+
// Evaluate both comparisons unconditionally so a valid username isn't
|
|
60
|
+
// distinguishable from an invalid one by response time.
|
|
61
|
+
const userMatch = safeEqual(username, config.username);
|
|
62
|
+
const passMatch = safeEqual(password, config.password);
|
|
40
63
|
return userMatch && passMatch;
|
|
41
64
|
}
|
|
42
65
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/server/auth/session.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,WAAW;AAQ9C,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/server/auth/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYzD,OAAO,EAAE,QAAQ,EAAkB,MAAM,gBAAgB,CAAC;AAkB1D,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,MAAM,EACN,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsbnH"}
|