station-kit 1.0.9 → 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 +57 -36
- package/.next/standalone/packages/station-kit/.next/app-path-routes-manifest.json +13 -10
- package/.next/standalone/packages/station-kit/.next/build-manifest.json +2 -2
- package/.next/standalone/packages/station-kit/.next/prerender-manifest.json +72 -24
- 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 +13 -10
- 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 +6 -4
- package/dist/config/schema.d.ts +31 -3
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +4 -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 +58 -6
- package/dist/server/auth/keys.d.ts.map +1 -1
- package/dist/server/auth/keys.js +179 -14
- 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 +5 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +169 -24
- package/dist/server/index.js.map +1 -1
- package/dist/server/log-store.d.ts +102 -6
- package/dist/server/log-store.d.ts.map +1 -1
- package/dist/server/log-store.js +140 -32
- package/dist/server/log-store.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 +9 -3
- 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 +20 -60
- 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 +11 -32
- 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 +13 -11
- 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 +35 -3
- package/src/index.ts +12 -0
- package/src/server/auth/keys.ts +215 -15
- package/src/server/auth/session.ts +38 -11
- package/src/server/index.ts +192 -23
- package/src/server/log-store.ts +196 -45
- 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 +9 -3
- package/src/server/routes/runs.ts +21 -68
- 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 +12 -36
- 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/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/demLiQWDy62JuUkBw-ILG/_buildManifest.js +0 -1
- /package/.next/standalone/packages/station-kit/.next/static/{demLiQWDy62JuUkBw-ILG → vTGEzSqxhR_E57YAFn9DC}/_ssgManifest.js +0 -0
package/dist/server/index.js
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { createMiddleware } from "hono/factory";
|
|
3
|
+
import { bodyLimit } from "hono/body-limit";
|
|
3
4
|
import { serve } from "@hono/node-server";
|
|
4
5
|
import { resolve } from "node:path";
|
|
5
|
-
import { existsSync } from "node:fs";
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { randomBytes } from "node:crypto";
|
|
6
8
|
import { SignalRunner, MemoryAdapter, parseInterval } from "station-signal";
|
|
7
9
|
import { BroadcastRunner, BroadcastMemoryAdapter } from "station-broadcast";
|
|
10
|
+
import { BeaconRunner, BeaconMemoryAdapter } from "station-beacon";
|
|
8
11
|
import { ScheduleReconciler, } from "station-schedules";
|
|
12
|
+
import { EnvStore, FileEnvStorage } from "station-env";
|
|
9
13
|
import { ensureStationDir } from "../station-dir.js";
|
|
10
14
|
import { WebSocketHub } from "./ws.js";
|
|
11
15
|
import { SSEHub } from "./sse.js";
|
|
12
16
|
import { LogBuffer } from "./log-buffer.js";
|
|
13
|
-
import { LogStore } from "./log-store.js";
|
|
14
|
-
import { StationSignalSubscriber, StationBroadcastSubscriber } from "./subscriber.js";
|
|
17
|
+
import { LogStore, FileLogStorage } from "./log-store.js";
|
|
18
|
+
import { StationSignalSubscriber, StationBroadcastSubscriber, StationBeaconSubscriber } from "./subscriber.js";
|
|
15
19
|
import { healthRoutes } from "./routes/health.js";
|
|
16
20
|
import { signalRoutes } from "./routes/signals.js";
|
|
17
21
|
import { runRoutes } from "./routes/runs.js";
|
|
18
22
|
import { broadcastRoutes } from "./routes/broadcasts.js";
|
|
19
|
-
import {
|
|
23
|
+
import { beaconRoutes } from "./routes/beacons.js";
|
|
24
|
+
import { KeyStore, FileKeyStorage } from "./auth/keys.js";
|
|
20
25
|
import { verifySessionToken, verifyCredentials, createSessionToken } from "./auth/session.js";
|
|
21
26
|
import { authResolver } from "./middleware/auth.js";
|
|
22
27
|
import { requireScope } from "./middleware/scope-guard.js";
|
|
@@ -31,23 +36,34 @@ import { v1AuthRoutes } from "./routes/v1/auth.js";
|
|
|
31
36
|
import { v1EventRoutes } from "./routes/v1/events.js";
|
|
32
37
|
import { v1DefinitionRoutes, v1DefinitionReadRoutes } from "./routes/v1/definitions.js";
|
|
33
38
|
import { v1ScheduleRoutes, v1ScheduleReadRoutes } from "./routes/v1/schedules.js";
|
|
39
|
+
import { v1EnvRoutes, v1EnvReadRoutes } from "./routes/v1/env.js";
|
|
34
40
|
import { v1ExpressionRoutes } from "./routes/v1/expressions.js";
|
|
35
|
-
export { KeyStore, SqliteKeyStorage, MemoryKeyStorage, } from "./auth/keys.js";
|
|
41
|
+
export { KeyStore, FileKeyStorage, SqliteKeyStorage, MemoryKeyStorage, } from "./auth/keys.js";
|
|
42
|
+
export { LogStore, FileLogStorage, MemoryLogStorage, } from "./log-store.js";
|
|
36
43
|
export async function createStation(config, cwd, nextPort) {
|
|
37
44
|
const signalAdapter = config.adapter ?? new MemoryAdapter();
|
|
38
45
|
const broadcastAdapter = config.broadcastAdapter ?? (config.broadcastsDir ? new BroadcastMemoryAdapter() : undefined);
|
|
46
|
+
const beaconAdapter = config.beaconAdapter ?? (config.beaconsDir ? new BeaconMemoryAdapter() : undefined);
|
|
39
47
|
const { dataDir } = ensureStationDir(cwd, config.stationDir);
|
|
48
|
+
warnIfLegacySqliteFiles(dataDir);
|
|
40
49
|
const wsHub = new WebSocketHub();
|
|
41
50
|
const sseHub = new SSEHub();
|
|
42
51
|
const logBuffer = new LogBuffer();
|
|
43
|
-
const logStore = new LogStore(
|
|
52
|
+
const logStore = new LogStore(config.logStorage ?? new FileLogStorage({
|
|
53
|
+
filePath: resolve(dataDir, "station-logs.jsonl"),
|
|
54
|
+
onError: (err) => console.error("[station] log write failed:", err),
|
|
55
|
+
}));
|
|
56
|
+
// Runtime env store: defaults to a JSON file so `.env()` requirements and
|
|
57
|
+
// dashboard-defined variables work out of the box. Pass a durable adapter
|
|
58
|
+
// via `envStorage` for multi-process deployments.
|
|
59
|
+
const envStore = new EnvStore(config.envStorage ?? new FileEnvStorage({ filePath: resolve(dataDir, "station-env.json") }));
|
|
44
60
|
// Auth: create KeyStore and SessionConfig if auth is configured
|
|
45
61
|
let keyStore;
|
|
46
62
|
let sessionConfig;
|
|
47
63
|
if (config.auth) {
|
|
48
64
|
const storage = config.auth.keyStorage
|
|
49
|
-
?? new
|
|
50
|
-
keyStore = new KeyStore(storage);
|
|
65
|
+
?? new FileKeyStorage({ filePath: resolve(dataDir, "station-keys.json") });
|
|
66
|
+
keyStore = new KeyStore(storage, { pepper: resolveKeyPepper(dataDir) });
|
|
51
67
|
sessionConfig = {
|
|
52
68
|
username: config.auth.username,
|
|
53
69
|
password: config.auth.password,
|
|
@@ -65,15 +81,23 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
65
81
|
: existsSync(resolve(cwd, "broadcasts"))
|
|
66
82
|
? resolve(cwd, "broadcasts")
|
|
67
83
|
: undefined;
|
|
84
|
+
const beaconsDir = config.beaconsDir
|
|
85
|
+
? resolve(cwd, config.beaconsDir)
|
|
86
|
+
: existsSync(resolve(cwd, "beacons"))
|
|
87
|
+
? resolve(cwd, "beacons")
|
|
88
|
+
: undefined;
|
|
68
89
|
// Create subscribers (always — they collect metadata)
|
|
69
90
|
const stationSignalSub = new StationSignalSubscriber(wsHub, logBuffer, logStore);
|
|
70
91
|
const stationBroadcastSub = new StationBroadcastSubscriber(wsHub);
|
|
92
|
+
const stationBeaconSub = new StationBeaconSubscriber(wsHub, logBuffer, logStore);
|
|
71
93
|
// Wire SSE hub into subscribers so events reach both WS and SSE clients
|
|
72
94
|
stationSignalSub.setSSEHub(sseHub);
|
|
73
95
|
stationBroadcastSub.setSSEHub(sseHub);
|
|
96
|
+
stationBeaconSub.setSSEHub(sseHub);
|
|
74
97
|
// Create runners if enabled
|
|
75
98
|
let signalRunner;
|
|
76
99
|
let broadcastRunner;
|
|
100
|
+
let beaconRunner;
|
|
77
101
|
const scheduleAdapter = config.scheduleAdapter;
|
|
78
102
|
if (config.runRunners) {
|
|
79
103
|
// Build schedule reconcilers up front. Each reconciler handles only the
|
|
@@ -97,6 +121,7 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
97
121
|
retryBackoffMs: config.runner.retryBackoffMs,
|
|
98
122
|
subscribers: [stationSignalSub],
|
|
99
123
|
scheduleReconciler: signalScheduleReconciler,
|
|
124
|
+
envProvider: envStore,
|
|
100
125
|
});
|
|
101
126
|
if (broadcastsDir || broadcastAdapter) {
|
|
102
127
|
const broadcastScheduleReconciler = scheduleAdapter
|
|
@@ -118,9 +143,25 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
118
143
|
scheduleReconciler: broadcastScheduleReconciler,
|
|
119
144
|
});
|
|
120
145
|
}
|
|
146
|
+
if (beaconsDir || beaconAdapter) {
|
|
147
|
+
beaconRunner = new BeaconRunner({
|
|
148
|
+
beaconsDir,
|
|
149
|
+
adapter: beaconAdapter ?? new BeaconMemoryAdapter(),
|
|
150
|
+
signalRunner, // beacons can trigger signals into the shared queue
|
|
151
|
+
subscribers: [stationBeaconSub],
|
|
152
|
+
envProvider: envStore,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
121
155
|
}
|
|
122
156
|
// Build Hono app
|
|
123
157
|
const app = new Hono();
|
|
158
|
+
// Bound request bodies so oversized payloads can't be parsed/stored.
|
|
159
|
+
app.use("/api/*", bodyLimit({
|
|
160
|
+
maxSize: 5 * 1024 * 1024,
|
|
161
|
+
onError: (c) => c.json({ error: "payload_too_large", message: "Request body too large." }, 413),
|
|
162
|
+
}));
|
|
163
|
+
// Brute-force protection for the dashboard login (the v1 login is limited below).
|
|
164
|
+
app.use("/api/auth/login", rateLimiter({ windowMs: 60_000, max: 10 }));
|
|
124
165
|
// ── Dashboard auth routes (always accessible) ──────────────────────
|
|
125
166
|
app.get("/api/auth/check", async (c) => {
|
|
126
167
|
if (!sessionConfig) {
|
|
@@ -179,20 +220,35 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
179
220
|
app.route("/api", signalRoutes({ signalRunner, signalAdapter, signalSubscriber: stationSignalSub }));
|
|
180
221
|
app.route("/api", runRoutes({ signalRunner, signalAdapter, logBuffer, logStore, signalSubscriber: stationSignalSub }));
|
|
181
222
|
app.route("/api", broadcastRoutes({ broadcastRunner, broadcastAdapter, broadcastSubscriber: stationBroadcastSub, logBuffer, logStore }));
|
|
223
|
+
app.route("/api", beaconRoutes({ beaconRunner, beaconAdapter, logBuffer, logStore }));
|
|
182
224
|
// ── v1 API routes (authenticated) ──────────────────────────────────
|
|
183
225
|
// Public v1 routes (no auth required)
|
|
184
226
|
app.route("/api/v1", v1HealthRoutes({ signalAdapter, broadcastAdapter }));
|
|
185
|
-
// Auth routes: public but rate-limited to prevent brute force
|
|
227
|
+
// Auth routes: public but rate-limited to prevent brute force. The limiter
|
|
228
|
+
// is scoped to /auth/* — a "/*" limiter here would run for every /api/v1
|
|
229
|
+
// route mounted after this app and throttle the whole API to 10 req/min.
|
|
186
230
|
const authApp = new Hono();
|
|
187
|
-
authApp.use("/*", rateLimiter({ windowMs: 60_000, max: 10 }));
|
|
231
|
+
authApp.use("/auth/*", rateLimiter({ windowMs: 60_000, max: 10 }));
|
|
188
232
|
authApp.route("/", v1AuthRoutes({ sessionConfig }));
|
|
189
233
|
app.route("/api/v1", authApp);
|
|
190
234
|
// Authenticated v1 routes — apply auth resolver middleware
|
|
191
235
|
const v1 = new Hono();
|
|
192
236
|
v1.use("/*", authResolver({ keyStore, sessionConfig }));
|
|
237
|
+
// Hono runs a sub-app's `use("/*")` middleware for routes that sibling
|
|
238
|
+
// sub-apps mount LATER under the same prefix, so per-group scope guards
|
|
239
|
+
// stack instead of isolating (a trigger-only key would be rejected by the
|
|
240
|
+
// read group's guard before reaching /trigger). Attach the guard to each
|
|
241
|
+
// route individually instead.
|
|
242
|
+
const guarded = (scope, group) => {
|
|
243
|
+
const out = new Hono();
|
|
244
|
+
const guard = requireScope(scope);
|
|
245
|
+
for (const r of group.routes) {
|
|
246
|
+
out.on(r.method, r.path, guard, r.handler);
|
|
247
|
+
}
|
|
248
|
+
return out;
|
|
249
|
+
};
|
|
193
250
|
// Read-scope routes
|
|
194
251
|
const readRoutes = new Hono();
|
|
195
|
-
readRoutes.use("/*", requireScope("read"));
|
|
196
252
|
readRoutes.route("/", v1SignalRoutes({ signalRunner, signalSubscriber: stationSignalSub }));
|
|
197
253
|
readRoutes.route("/", v1RunRoutes({ signalRunner, signalAdapter, logBuffer, logStore }));
|
|
198
254
|
readRoutes.route("/", v1BroadcastRoutes({ broadcastRunner, broadcastAdapter, broadcastSubscriber: stationBroadcastSub }));
|
|
@@ -200,21 +256,19 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
200
256
|
readRoutes.route("/", v1ExpressionRoutes());
|
|
201
257
|
// Schedule GET + preview are read-scoped; mutating routes are mounted under admin below.
|
|
202
258
|
readRoutes.route("/", v1ScheduleReadRoutes({ scheduleAdapter }));
|
|
259
|
+
// Env GET is read-scoped (secret values redacted); mutations are admin-only below.
|
|
260
|
+
readRoutes.route("/", v1EnvReadRoutes({ envStore }));
|
|
203
261
|
readRoutes.route("/", v1DefinitionReadRoutes({
|
|
204
262
|
broadcastRunner,
|
|
205
263
|
broadcastAdapter,
|
|
206
264
|
signalRunner,
|
|
207
265
|
signalSubscriber: stationSignalSub,
|
|
208
266
|
}));
|
|
209
|
-
v1.route("/", readRoutes);
|
|
267
|
+
v1.route("/", guarded("read", readRoutes));
|
|
210
268
|
// Trigger-scope routes
|
|
211
|
-
|
|
212
|
-
triggerRoutes.use("/*", requireScope("trigger"));
|
|
213
|
-
triggerRoutes.route("/", v1TriggerRoutes({ signalRunner, signalAdapter, broadcastRunner, broadcastAdapter, signalSubscriber: stationSignalSub }));
|
|
214
|
-
v1.route("/", triggerRoutes);
|
|
269
|
+
v1.route("/", guarded("trigger", v1TriggerRoutes({ signalRunner, signalAdapter, broadcastRunner, broadcastAdapter, signalSubscriber: stationSignalSub })));
|
|
215
270
|
// Cancel-scope routes — only the cancel endpoints
|
|
216
271
|
const cancelRoutes = new Hono();
|
|
217
|
-
cancelRoutes.use("/*", requireScope("cancel"));
|
|
218
272
|
cancelRoutes.post("/runs/:id/cancel", async (c) => {
|
|
219
273
|
const id = c.req.param("id");
|
|
220
274
|
if (!signalRunner) {
|
|
@@ -237,10 +291,9 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
237
291
|
}
|
|
238
292
|
return c.json({ data: { cancelled: true } });
|
|
239
293
|
});
|
|
240
|
-
v1.route("/", cancelRoutes);
|
|
294
|
+
v1.route("/", guarded("cancel", cancelRoutes));
|
|
241
295
|
// Admin-scope routes — destructive / mutating endpoints
|
|
242
296
|
const adminRoutes = new Hono();
|
|
243
|
-
adminRoutes.use("/*", requireScope("admin"));
|
|
244
297
|
adminRoutes.route("/", v1KeyRoutes({ keyStore }));
|
|
245
298
|
adminRoutes.route("/", v1DefinitionRoutes({
|
|
246
299
|
broadcastRunner,
|
|
@@ -249,7 +302,8 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
249
302
|
signalSubscriber: stationSignalSub,
|
|
250
303
|
}));
|
|
251
304
|
adminRoutes.route("/", v1ScheduleRoutes({ scheduleAdapter }));
|
|
252
|
-
|
|
305
|
+
adminRoutes.route("/", v1EnvRoutes({ envStore }));
|
|
306
|
+
v1.route("/", guarded("admin", adminRoutes));
|
|
253
307
|
app.route("/api/v1", v1);
|
|
254
308
|
// ── Proxy to Next.js standalone server ──────────────────────────
|
|
255
309
|
if (nextPort) {
|
|
@@ -300,6 +354,11 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
300
354
|
keyStore,
|
|
301
355
|
dataDir,
|
|
302
356
|
async start() {
|
|
357
|
+
if (!config.auth && !isLoopbackHost(config.host)) {
|
|
358
|
+
console.warn(`[station] WARNING: no auth configured while binding to ${config.host} — ` +
|
|
359
|
+
"anyone who can reach this port can view logs and trigger, cancel, or rerun jobs. " +
|
|
360
|
+
"Set auth (STATION_AUTH_USERNAME/STATION_AUTH_PASSWORD) or bind to 127.0.0.1.");
|
|
361
|
+
}
|
|
303
362
|
// Start runners (non-blocking — they have internal poll loops)
|
|
304
363
|
if (config.runRunners) {
|
|
305
364
|
if (signalRunner) {
|
|
@@ -312,16 +371,43 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
312
371
|
console.error("[station] Broadcast runner error:", err);
|
|
313
372
|
});
|
|
314
373
|
}
|
|
374
|
+
if (beaconRunner) {
|
|
375
|
+
beaconRunner.start().catch((err) => {
|
|
376
|
+
console.error("[station] Beacon runner error:", err);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
315
379
|
}
|
|
316
380
|
// Start Hono server
|
|
317
381
|
httpServer = serve({ fetch: app.fetch, port: config.port, hostname: config.host }, (info) => {
|
|
318
382
|
console.log(`[station] Running on http://${config.host}:${info.port}`);
|
|
319
383
|
});
|
|
320
|
-
// Attach WebSocket to the HTTP server
|
|
321
|
-
|
|
384
|
+
// Attach WebSocket to the HTTP server. The upgrade path never passes
|
|
385
|
+
// through Hono middleware, so it enforces auth itself: session cookie
|
|
386
|
+
// or a read-scoped API key, mirroring the SSE endpoint.
|
|
387
|
+
wsHub.attach(httpServer, async (req) => {
|
|
388
|
+
if (!sessionConfig && !keyStore)
|
|
389
|
+
return true;
|
|
390
|
+
const cookie = req.headers.cookie;
|
|
391
|
+
if (cookie && sessionConfig) {
|
|
392
|
+
const match = cookie.match(/station_session=([^;]+)/);
|
|
393
|
+
if (match && verifySessionToken(match[1], sessionConfig))
|
|
394
|
+
return true;
|
|
395
|
+
}
|
|
396
|
+
const authHeader = req.headers.authorization;
|
|
397
|
+
if (authHeader?.startsWith("Bearer ") && keyStore) {
|
|
398
|
+
const key = await keyStore.verify(authHeader.slice(7));
|
|
399
|
+
if (key?.scopes.includes("read"))
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
return false;
|
|
403
|
+
});
|
|
322
404
|
},
|
|
323
405
|
async stop() {
|
|
324
|
-
// Stop
|
|
406
|
+
// Stop beacons first — they are producers that may trigger signals.
|
|
407
|
+
if (beaconRunner) {
|
|
408
|
+
await beaconRunner.stop({ graceful: true, timeoutMs: 5000 });
|
|
409
|
+
}
|
|
410
|
+
// Stop broadcast runner next — it queries the DB during graceful shutdown
|
|
325
411
|
if (broadcastRunner) {
|
|
326
412
|
await broadcastRunner.stop({ graceful: true, timeoutMs: 5000 });
|
|
327
413
|
}
|
|
@@ -330,12 +416,71 @@ export async function createStation(config, cwd, nextPort) {
|
|
|
330
416
|
}
|
|
331
417
|
wsHub.close();
|
|
332
418
|
sseHub.close();
|
|
333
|
-
logStore.close();
|
|
419
|
+
await logStore.close();
|
|
334
420
|
await keyStore?.close();
|
|
421
|
+
await envStore.close();
|
|
335
422
|
if (httpServer) {
|
|
336
423
|
httpServer.close();
|
|
337
424
|
}
|
|
338
425
|
},
|
|
339
426
|
};
|
|
340
427
|
}
|
|
428
|
+
// Existing deployments that ran older Station versions persisted keys
|
|
429
|
+
// to `station-keys.db` (SQLite) and run logs to `station-logs.db`. The
|
|
430
|
+
// new defaults are `station-keys.json` and `station-logs.jsonl`; the
|
|
431
|
+
// legacy files are NOT auto-migrated. Emit a one-time warning so an
|
|
432
|
+
// upgrade doesn't silently appear to wipe a user's API keys.
|
|
433
|
+
function isLoopbackHost(host) {
|
|
434
|
+
return host === "127.0.0.1" || host === "localhost" || host === "::1" || host === "[::1]";
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Resolve the API-key pepper (a server-side secret mixed into stored key
|
|
438
|
+
* hashes). Priority: STATION_KEY_PEPPER env var, else a persisted per-install
|
|
439
|
+
* secret at `<dataDir>/station-key-pepper` (generated with 0600 on first run).
|
|
440
|
+
* Persisting it means existing peppered keys keep verifying across restarts.
|
|
441
|
+
*/
|
|
442
|
+
function resolveKeyPepper(dataDir) {
|
|
443
|
+
const fromEnv = process.env.STATION_KEY_PEPPER;
|
|
444
|
+
if (fromEnv)
|
|
445
|
+
return fromEnv;
|
|
446
|
+
const pepperPath = resolve(dataDir, "station-key-pepper");
|
|
447
|
+
try {
|
|
448
|
+
if (existsSync(pepperPath)) {
|
|
449
|
+
const existing = readFileSync(pepperPath, "utf8").trim();
|
|
450
|
+
if (existing)
|
|
451
|
+
return existing;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
catch {
|
|
455
|
+
// Unreadable — fall through and regenerate.
|
|
456
|
+
}
|
|
457
|
+
const pepper = randomBytes(32).toString("hex");
|
|
458
|
+
try {
|
|
459
|
+
writeFileSync(pepperPath, pepper, { mode: 0o600 });
|
|
460
|
+
}
|
|
461
|
+
catch (err) {
|
|
462
|
+
// If we can't persist it, warn: keys created this run won't verify after
|
|
463
|
+
// a restart (a new pepper would be generated). Better than failing boot.
|
|
464
|
+
console.warn(`[station] Could not persist key pepper to ${pepperPath}:`, err);
|
|
465
|
+
}
|
|
466
|
+
return pepper;
|
|
467
|
+
}
|
|
468
|
+
function warnIfLegacySqliteFiles(dataDir) {
|
|
469
|
+
const legacy = [
|
|
470
|
+
{ file: "station-keys.db", replacement: "station-keys.json" },
|
|
471
|
+
{ file: "station-logs.db", replacement: "station-logs.jsonl" },
|
|
472
|
+
];
|
|
473
|
+
for (const { file, replacement } of legacy) {
|
|
474
|
+
const legacyPath = resolve(dataDir, file);
|
|
475
|
+
if (!existsSync(legacyPath))
|
|
476
|
+
continue;
|
|
477
|
+
const replacementPath = resolve(dataDir, replacement);
|
|
478
|
+
if (existsSync(replacementPath))
|
|
479
|
+
continue;
|
|
480
|
+
console.warn(`[station] Legacy ${file} detected at ${legacyPath} but no ${replacement} found. ` +
|
|
481
|
+
`Station no longer reads SQLite-backed defaults; data in ${file} will not be loaded. ` +
|
|
482
|
+
`If you need the contents, export them with the better-sqlite3 CLI before upgrading. ` +
|
|
483
|
+
`To suppress this warning, delete or rename ${file}.`);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
341
486
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,107 @@
|
|
|
1
1
|
import type { LogEntry } from "./log-buffer.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Pluggable storage backend for run logs. Implementations only persist
|
|
4
|
+
* and query records — bounded in-memory buffering for live UI streams
|
|
5
|
+
* lives in `LogBuffer`. May be sync or async; the LogStore wrapper
|
|
6
|
+
* normalizes both.
|
|
7
|
+
*
|
|
8
|
+
* Contract for implementers:
|
|
9
|
+
*
|
|
10
|
+
* - **`add(entry)`** is treated as fire-and-forget at the LogStore
|
|
11
|
+
* boundary. Signal runners never block on log writes. Adapters that
|
|
12
|
+
* need durability guarantees (queues, retries, batching) should
|
|
13
|
+
* implement that internally; thrown errors and rejected promises are
|
|
14
|
+
* caught and surfaced via the LogStore's `onError` hook (if set) but
|
|
15
|
+
* never rethrown to the caller.
|
|
16
|
+
* - **`get(runId)`** must return entries for that run in append order
|
|
17
|
+
* (oldest first). Routes that aggregate across runs may re-sort by
|
|
18
|
+
* timestamp, but per-run ordering is the adapter's responsibility.
|
|
19
|
+
* - **`close?()`** is called once on graceful shutdown. Use it to flush
|
|
20
|
+
* any in-flight buffers. It is NOT called on `SIGKILL` / OOM kill —
|
|
21
|
+
* adapters that must guarantee durability per write should not rely
|
|
22
|
+
* on it.
|
|
23
|
+
*
|
|
24
|
+
* Single-process semantics: the built-in `FileLogStorage` is safe for a
|
|
25
|
+
* single Node process. Running multiple processes against the same file
|
|
26
|
+
* path WILL produce interleaved bytes and lost entries — use a real
|
|
27
|
+
* database adapter (Postgres, MySQL, Redis, etc.) for multi-process or
|
|
28
|
+
* distributed deployments.
|
|
29
|
+
*/
|
|
30
|
+
export interface LogStorageAdapter {
|
|
31
|
+
add(entry: LogEntry): Promise<void> | void;
|
|
32
|
+
get(runId: string): Promise<LogEntry[]> | LogEntry[];
|
|
33
|
+
close?(): Promise<void> | void;
|
|
34
|
+
}
|
|
35
|
+
export interface FileLogStorageOptions {
|
|
36
|
+
filePath: string;
|
|
37
|
+
/**
|
|
38
|
+
* Called when a background write to the underlying file fails. Use
|
|
39
|
+
* this to surface persistence problems (disk full, permission denied,
|
|
40
|
+
* etc.) to your monitoring system. If unset, write failures are
|
|
41
|
+
* silently dropped — acceptable for local dev, NOT for production.
|
|
42
|
+
*/
|
|
43
|
+
onError?: (err: unknown) => void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* File-backed log storage using append-only JSONL framing. Each line is
|
|
47
|
+
* a JSON-serialized `LogEntry`; existing entries are loaded into memory
|
|
48
|
+
* on construction; appends are serialized through an async write queue
|
|
49
|
+
* so concurrent writers can't interleave bytes within one process.
|
|
50
|
+
*
|
|
51
|
+
* No native dependencies — works on any Node 18+ install.
|
|
52
|
+
*
|
|
53
|
+
* **Production caveats** (in order of severity):
|
|
54
|
+
*
|
|
55
|
+
* 1. **Single-process only.** Two Node processes appending to the same
|
|
56
|
+
* file WILL interleave bytes once individual JSON lines exceed the
|
|
57
|
+
* OS pipe buffer (4 KB on Linux), corrupting the file.
|
|
58
|
+
* 2. **Best-effort durability.** Writes are queued and flushed via
|
|
59
|
+
* `fs.appendFile`; on `SIGKILL` / OOM kill, in-flight writes are lost.
|
|
60
|
+
* Set `onError` to surface fs failures.
|
|
61
|
+
* 3. **Unbounded memory on replay.** The whole file is loaded into a
|
|
62
|
+
* Map on startup. For high-volume deployments (gigabytes of logs)
|
|
63
|
+
* use a database-backed adapter instead.
|
|
64
|
+
*
|
|
65
|
+
* For multi-process, distributed, or high-durability deployments,
|
|
66
|
+
* implement `LogStorageAdapter` against Postgres / MySQL / Redis / S3.
|
|
67
|
+
*/
|
|
68
|
+
export declare class FileLogStorage implements LogStorageAdapter {
|
|
69
|
+
private path;
|
|
70
|
+
private byRunId;
|
|
71
|
+
private writeQueue;
|
|
72
|
+
private onError;
|
|
73
|
+
constructor(options: FileLogStorageOptions);
|
|
74
|
+
private replay;
|
|
75
|
+
private indexEntry;
|
|
7
76
|
add(entry: LogEntry): void;
|
|
8
77
|
get(runId: string): LogEntry[];
|
|
9
|
-
close(): void
|
|
78
|
+
close(): Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
export declare class MemoryLogStorage implements LogStorageAdapter {
|
|
81
|
+
private byRunId;
|
|
82
|
+
add(entry: LogEntry): void;
|
|
83
|
+
get(runId: string): LogEntry[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* LogStore is the consumer-facing handle that wraps a `LogStorageAdapter`.
|
|
87
|
+
* It exists so signal runners and route handlers can interact with a
|
|
88
|
+
* single concrete type, while the underlying persistence is swappable.
|
|
89
|
+
*
|
|
90
|
+
* `add` is fire-and-forget — adapter promises are caught at this boundary
|
|
91
|
+
* so a slow or failing log backend can never block (or crash) a signal
|
|
92
|
+
* runner. `get` always returns a Promise so callers can transparently
|
|
93
|
+
* support async backends (Postgres, Redis, etc.).
|
|
94
|
+
*/
|
|
95
|
+
export declare class LogStore {
|
|
96
|
+
private storage;
|
|
97
|
+
/**
|
|
98
|
+
* Pass a `LogStorageAdapter` for any backend. The string overload is
|
|
99
|
+
* a shortcut for `new FileLogStorage({ filePath })` — useful for
|
|
100
|
+
* local dev and the default Station data directory.
|
|
101
|
+
*/
|
|
102
|
+
constructor(storageOrPath: LogStorageAdapter | string);
|
|
103
|
+
add(entry: LogEntry): void;
|
|
104
|
+
get(runId: string): Promise<LogEntry[]>;
|
|
105
|
+
close(): Promise<void>;
|
|
10
106
|
}
|
|
11
107
|
//# sourceMappingURL=log-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-store.d.ts","sourceRoot":"","sources":["../../src/server/log-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log-store.d.ts","sourceRoot":"","sources":["../../src/server/log-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3C,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC;IACrD,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChC;AAID,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,cAAe,YAAW,iBAAiB;IACtD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,EAAE,qBAAqB;IAW1C,OAAO,CAAC,MAAM;IAqBd,OAAO,CAAC,UAAU;IASlB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAU1B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAID,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,OAAO,CAAiC;IAEhD,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAS1B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;CAG/B;AAID;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAoB;IAEnC;;;;OAIG;gBACS,aAAa,EAAE,iBAAiB,GAAG,MAAM;IAQrD,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAWpB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|