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.
Files changed (183) hide show
  1. package/.next/standalone/packages/station-kit/.next/BUILD_ID +1 -1
  2. package/.next/standalone/packages/station-kit/.next/app-build-manifest.json +57 -36
  3. package/.next/standalone/packages/station-kit/.next/app-path-routes-manifest.json +13 -10
  4. package/.next/standalone/packages/station-kit/.next/build-manifest.json +2 -2
  5. package/.next/standalone/packages/station-kit/.next/prerender-manifest.json +72 -24
  6. package/.next/standalone/packages/station-kit/.next/routes-manifest.json +20 -0
  7. package/.next/standalone/packages/station-kit/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/packages/station-kit/.next/server/app/_not-found.html +1 -1
  9. package/.next/standalone/packages/station-kit/.next/server/app/_not-found.rsc +8 -8
  10. package/.next/standalone/packages/station-kit/.next/server/app/beacons/[name]/page.js +2 -0
  11. package/.next/standalone/packages/station-kit/.next/server/app/beacons/[name]/page.js.nft.json +1 -0
  12. package/.next/standalone/packages/station-kit/.next/server/app/beacons/[name]/page_client-reference-manifest.js +1 -0
  13. package/.next/standalone/packages/station-kit/.next/server/app/beacons/page.js +2 -0
  14. package/.next/standalone/packages/station-kit/.next/server/app/beacons/page.js.nft.json +1 -0
  15. package/.next/standalone/packages/station-kit/.next/server/app/beacons/page_client-reference-manifest.js +1 -0
  16. package/.next/standalone/packages/station-kit/.next/server/app/beacons.html +1 -0
  17. package/.next/standalone/packages/station-kit/.next/server/app/beacons.meta +7 -0
  18. package/.next/standalone/packages/station-kit/.next/server/app/beacons.rsc +25 -0
  19. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/[id]/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/dyn/[name]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/dyn/[name]/v/[n]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/new/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/new.html +1 -1
  24. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/new.rsc +9 -9
  25. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts.html +1 -1
  27. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts.rsc +9 -9
  28. package/.next/standalone/packages/station-kit/.next/server/app/environment/page.js +2 -0
  29. package/.next/standalone/packages/station-kit/.next/server/app/environment/page.js.nft.json +1 -0
  30. package/.next/standalone/packages/station-kit/.next/server/app/environment/page_client-reference-manifest.js +1 -0
  31. package/.next/standalone/packages/station-kit/.next/server/app/environment.html +1 -0
  32. package/.next/standalone/packages/station-kit/.next/server/app/environment.meta +7 -0
  33. package/.next/standalone/packages/station-kit/.next/server/app/environment.rsc +25 -0
  34. package/.next/standalone/packages/station-kit/.next/server/app/index.html +1 -1
  35. package/.next/standalone/packages/station-kit/.next/server/app/index.rsc +9 -9
  36. package/.next/standalone/packages/station-kit/.next/server/app/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/packages/station-kit/.next/server/app/playground/expression/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/packages/station-kit/.next/server/app/playground/expression.html +1 -1
  39. package/.next/standalone/packages/station-kit/.next/server/app/playground/expression.rsc +9 -9
  40. package/.next/standalone/packages/station-kit/.next/server/app/runs/[id]/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/packages/station-kit/.next/server/app/schedules/[id]/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/packages/station-kit/.next/server/app/schedules/new/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/packages/station-kit/.next/server/app/schedules/new.html +1 -1
  44. package/.next/standalone/packages/station-kit/.next/server/app/schedules/new.rsc +9 -9
  45. package/.next/standalone/packages/station-kit/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/packages/station-kit/.next/server/app/schedules.html +1 -1
  47. package/.next/standalone/packages/station-kit/.next/server/app/schedules.rsc +9 -9
  48. package/.next/standalone/packages/station-kit/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/packages/station-kit/.next/server/app/settings.html +1 -1
  50. package/.next/standalone/packages/station-kit/.next/server/app/settings.rsc +9 -9
  51. package/.next/standalone/packages/station-kit/.next/server/app/signals/[name]/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/packages/station-kit/.next/server/app/signals/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/packages/station-kit/.next/server/app/signals.html +1 -1
  54. package/.next/standalone/packages/station-kit/.next/server/app/signals.rsc +9 -9
  55. package/.next/standalone/packages/station-kit/.next/server/app-paths-manifest.json +13 -10
  56. package/.next/standalone/packages/station-kit/.next/server/chunks/102.js +1 -1
  57. package/.next/standalone/packages/station-kit/.next/server/pages/404.html +1 -1
  58. package/.next/standalone/packages/station-kit/.next/server/pages/500.html +1 -1
  59. package/.next/standalone/packages/station-kit/.next/server/pages-manifest.json +1 -1
  60. package/.next/standalone/packages/station-kit/.next/server/server-reference-manifest.json +1 -1
  61. package/.next/standalone/packages/station-kit/.next/static/chunks/285-583f23ee7827983f.js +1 -0
  62. package/.next/standalone/packages/station-kit/.next/static/chunks/561-05a7ef9669e3921a.js +1 -0
  63. package/.next/standalone/packages/station-kit/.next/static/chunks/app/beacons/[name]/page-eb1f82847734e145.js +1 -0
  64. package/.next/standalone/packages/station-kit/.next/static/chunks/app/beacons/page-64e296346197e44b.js +1 -0
  65. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/dyn/[name]/v/[n]/page-15edf07ab26241c9.js +1 -0
  66. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/page-b23a03097c8f75c4.js +1 -0
  67. package/.next/standalone/packages/station-kit/.next/static/chunks/app/environment/page-111242bec067fdee.js +1 -0
  68. package/.next/standalone/packages/station-kit/.next/static/chunks/app/layout-e9ac56fcaf7a5ea7.js +1 -0
  69. package/.next/standalone/packages/station-kit/.next/static/chunks/app/page-ef78692958c2fc01.js +1 -0
  70. package/.next/standalone/packages/station-kit/.next/static/chunks/app/playground/expression/page-29294a705dd8f471.js +1 -0
  71. package/.next/standalone/packages/station-kit/.next/static/chunks/app/runs/[id]/page-287bbb8f6dec2e23.js +1 -0
  72. package/.next/standalone/packages/station-kit/.next/static/chunks/app/schedules/page-c869218da203e3b4.js +1 -0
  73. package/.next/standalone/packages/station-kit/.next/static/chunks/app/settings/page-05cf43b6ae6b3187.js +1 -0
  74. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/[name]/page-4027803be00c695a.js +1 -0
  75. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/page-8e076fc5d0188d72.js +1 -0
  76. package/.next/standalone/packages/station-kit/.next/static/css/ddb1646dc25ed100.css +1 -0
  77. package/.next/standalone/packages/station-kit/.next/static/vTGEzSqxhR_E57YAFn9DC/_buildManifest.js +1 -0
  78. package/.next/standalone/packages/station-kit/package.json +6 -4
  79. package/dist/config/schema.d.ts +31 -3
  80. package/dist/config/schema.d.ts.map +1 -1
  81. package/dist/config/schema.js +4 -0
  82. package/dist/config/schema.js.map +1 -1
  83. package/dist/index.d.ts +1 -0
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +3 -0
  86. package/dist/index.js.map +1 -1
  87. package/dist/server/auth/keys.d.ts +58 -6
  88. package/dist/server/auth/keys.d.ts.map +1 -1
  89. package/dist/server/auth/keys.js +179 -14
  90. package/dist/server/auth/keys.js.map +1 -1
  91. package/dist/server/auth/session.d.ts.map +1 -1
  92. package/dist/server/auth/session.js +34 -11
  93. package/dist/server/auth/session.js.map +1 -1
  94. package/dist/server/index.d.ts +5 -2
  95. package/dist/server/index.d.ts.map +1 -1
  96. package/dist/server/index.js +169 -24
  97. package/dist/server/index.js.map +1 -1
  98. package/dist/server/log-store.d.ts +102 -6
  99. package/dist/server/log-store.d.ts.map +1 -1
  100. package/dist/server/log-store.js +140 -32
  101. package/dist/server/log-store.js.map +1 -1
  102. package/dist/server/metadata.d.ts +2 -0
  103. package/dist/server/metadata.d.ts.map +1 -1
  104. package/dist/server/metadata.js.map +1 -1
  105. package/dist/server/middleware/rate-limit.d.ts.map +1 -1
  106. package/dist/server/middleware/rate-limit.js +22 -1
  107. package/dist/server/middleware/rate-limit.js.map +1 -1
  108. package/dist/server/routes/beacons.d.ts +10 -0
  109. package/dist/server/routes/beacons.d.ts.map +1 -0
  110. package/dist/server/routes/beacons.js +98 -0
  111. package/dist/server/routes/beacons.js.map +1 -0
  112. package/dist/server/routes/broadcasts.d.ts.map +1 -1
  113. package/dist/server/routes/broadcasts.js +9 -3
  114. package/dist/server/routes/broadcasts.js.map +1 -1
  115. package/dist/server/routes/runs.d.ts.map +1 -1
  116. package/dist/server/routes/runs.js +20 -60
  117. package/dist/server/routes/runs.js.map +1 -1
  118. package/dist/server/routes/signals.d.ts.map +1 -1
  119. package/dist/server/routes/signals.js +17 -13
  120. package/dist/server/routes/signals.js.map +1 -1
  121. package/dist/server/routes/v1/env.d.ts +10 -0
  122. package/dist/server/routes/v1/env.d.ts.map +1 -0
  123. package/dist/server/routes/v1/env.js +132 -0
  124. package/dist/server/routes/v1/env.js.map +1 -0
  125. package/dist/server/routes/v1/events.js +2 -2
  126. package/dist/server/routes/v1/events.js.map +1 -1
  127. package/dist/server/routes/v1/runs.d.ts.map +1 -1
  128. package/dist/server/routes/v1/runs.js +11 -32
  129. package/dist/server/routes/v1/runs.js.map +1 -1
  130. package/dist/server/sse.d.ts +2 -1
  131. package/dist/server/sse.d.ts.map +1 -1
  132. package/dist/server/sse.js +5 -1
  133. package/dist/server/sse.js.map +1 -1
  134. package/dist/server/subscriber.d.ts +56 -0
  135. package/dist/server/subscriber.d.ts.map +1 -1
  136. package/dist/server/subscriber.js +94 -0
  137. package/dist/server/subscriber.js.map +1 -1
  138. package/dist/server/ws.d.ts +8 -2
  139. package/dist/server/ws.d.ts.map +1 -1
  140. package/dist/server/ws.js +28 -3
  141. package/dist/server/ws.js.map +1 -1
  142. package/package.json +13 -11
  143. package/src/app/beacons/[name]/beacon-detail.tsx +253 -0
  144. package/src/app/beacons/[name]/page.tsx +6 -0
  145. package/src/app/beacons/page.tsx +98 -0
  146. package/src/app/components/shell.tsx +24 -0
  147. package/src/app/components/status-badge.tsx +13 -1
  148. package/src/app/environment/page.tsx +415 -0
  149. package/src/app/globals.css +48 -0
  150. package/src/app/hooks/use-api.ts +80 -0
  151. package/src/config/schema.ts +35 -3
  152. package/src/index.ts +12 -0
  153. package/src/server/auth/keys.ts +215 -15
  154. package/src/server/auth/session.ts +38 -11
  155. package/src/server/index.ts +192 -23
  156. package/src/server/log-store.ts +196 -45
  157. package/src/server/metadata.ts +2 -0
  158. package/src/server/middleware/rate-limit.ts +20 -1
  159. package/src/server/routes/beacons.ts +112 -0
  160. package/src/server/routes/broadcasts.ts +9 -3
  161. package/src/server/routes/runs.ts +21 -68
  162. package/src/server/routes/signals.ts +17 -13
  163. package/src/server/routes/v1/env.ts +144 -0
  164. package/src/server/routes/v1/events.ts +2 -2
  165. package/src/server/routes/v1/runs.ts +12 -36
  166. package/src/server/sse.ts +7 -2
  167. package/src/server/subscriber.ts +111 -0
  168. package/src/server/ws.ts +38 -4
  169. package/.next/standalone/packages/station-kit/.next/static/chunks/285-ff198f0a909c4fdd.js +0 -1
  170. package/.next/standalone/packages/station-kit/.next/static/chunks/561-33d912169940283e.js +0 -1
  171. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/dyn/[name]/v/[n]/page-5eac0507f49a00ec.js +0 -1
  172. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/page-dee500ccc01f0821.js +0 -1
  173. package/.next/standalone/packages/station-kit/.next/static/chunks/app/layout-e14e14f3e5b0b8a9.js +0 -1
  174. package/.next/standalone/packages/station-kit/.next/static/chunks/app/page-aac41ef7a470daab.js +0 -1
  175. package/.next/standalone/packages/station-kit/.next/static/chunks/app/playground/expression/page-dc9d91f3f50f4716.js +0 -1
  176. package/.next/standalone/packages/station-kit/.next/static/chunks/app/runs/[id]/page-9e4c4f751a4bea72.js +0 -1
  177. package/.next/standalone/packages/station-kit/.next/static/chunks/app/schedules/page-738d98dc0b63166e.js +0 -1
  178. package/.next/standalone/packages/station-kit/.next/static/chunks/app/settings/page-fc5654b31f57ac21.js +0 -1
  179. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/[name]/page-4b1c09a539a1ebcd.js +0 -1
  180. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/page-d2f2403dfede87cc.js +0 -1
  181. package/.next/standalone/packages/station-kit/.next/static/css/0be0e65a5f561f37.css +0 -1
  182. package/.next/standalone/packages/station-kit/.next/static/demLiQWDy62JuUkBw-ILG/_buildManifest.js +0 -1
  183. /package/.next/standalone/packages/station-kit/.next/static/{demLiQWDy62JuUkBw-ILG → vTGEzSqxhR_E57YAFn9DC}/_ssgManifest.js +0 -0
@@ -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 { KeyStore, SqliteKeyStorage } from "./auth/keys.js";
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(resolve(dataDir, "station-logs.db"));
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 SqliteKeyStorage({ dbPath: resolve(dataDir, "station-keys.db") });
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
- const triggerRoutes = new Hono();
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
- v1.route("/", adminRoutes);
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
- wsHub.attach(httpServer);
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 broadcast runner first — it queries the DB during graceful shutdown
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
@@ -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
- export declare class LogStore {
3
- private db;
4
- private insertStmt;
5
- private selectStmt;
6
- constructor(dbPath: string);
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":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,UAAU,CAAqB;gBAE3B,MAAM,EAAE,MAAM;IAuB1B,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI1B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAiB9B,KAAK,IAAI,IAAI;CAGd"}
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"}