@urateam/cli 0.1.42 → 0.1.44

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.
@@ -5,7 +5,7 @@ import { bootstrapSsoFromEnv } from "../sso-bootstrap.js";
5
5
  import { preflightClaudeAuth } from "../lib/preflight-claude-auth.js";
6
6
  import { preflightDirs } from "../lib/preflight-dirs.js";
7
7
  import { buildRepoConfigsFromEnv, requireRepoConfigs } from "../lib/build-repo-configs.js";
8
- import { resolveUserLevelHome } from "../lib/user-level-config.js";
8
+ import { resolveUserLevelHome, userLevelConfigPath, readUserLevelConfig, } from "../lib/user-level-config.js";
9
9
  /**
10
10
  * User-level: also load `~/.urateam/.env` (or `$URATEAM_HOME/.env`) so secrets
11
11
  * load regardless of cwd. Node's `loadEnvFile()` in `index.ts` already loads
@@ -33,6 +33,7 @@ export const startCommand = new Command("start")
33
33
  .description("Start production server (webhook + dashboard)")
34
34
  .option("--port <port>", "Webhook server port", "3000")
35
35
  .option("--dashboard-port <port>", "Dashboard port", "3001")
36
+ .option("--tunnel <mode>", "Auto-launch a Cloudflare tunnel: 'none' (default), 'cloudflare-quick' (free, ephemeral URL), or 'cloudflare-token' (requires CLOUDFLARE_TUNNEL_TOKEN + URATEAM_PUBLIC_URL)", "none")
36
37
  .action(async (options) => {
37
38
  try {
38
39
  loadUserLevelEnv();
@@ -273,6 +274,158 @@ export const startCommand = new Command("start")
273
274
  console.log(`Repos: ${Object.keys(config.repoConfigs).length}`);
274
275
  const webhookServer = serve({ fetch: app.fetch, port });
275
276
  const dashServer = serve({ fetch: dashboardApp.fetch, port: dashboardPort });
277
+ // --- Optional tunnel (cloudflared) ---
278
+ // Brings a public URL up via cloudflared when `--tunnel <mode>` is set.
279
+ // "none" (default) is a no-op. The TunnelManager supervises the child
280
+ // with exponential-backoff restart; failures are logged but don't crash
281
+ // the daemon — the daemon stays up on the local ports so operators can
282
+ // still SSH in and debug.
283
+ let tunnelManager;
284
+ if (options.tunnel && options.tunnel !== "none") {
285
+ const mode = options.tunnel;
286
+ if (mode !== "cloudflare-quick" && mode !== "cloudflare-token") {
287
+ console.error(`--tunnel: unknown mode '${options.tunnel}'. Allowed: none, cloudflare-quick, cloudflare-token`);
288
+ process.exit(1);
289
+ }
290
+ const { TunnelManager, CloudflaredMissingError } = await import("../lib/tunnel.js");
291
+ const token = process.env.CLOUDFLARE_TUNNEL_TOKEN;
292
+ const publicUrl = process.env.URATEAM_PUBLIC_URL;
293
+ tunnelManager = new TunnelManager({
294
+ mode,
295
+ localPort: port,
296
+ token,
297
+ publicUrl,
298
+ });
299
+ try {
300
+ const result = await tunnelManager.start();
301
+ process.env.URATEAM_PUBLIC_URL = result.publicUrl;
302
+ console.log(`Tunnel: ${result.publicUrl} (${mode})`);
303
+ // Attach a runtime error handler BEFORE any subsequent restart can
304
+ // exhaust the cap. EventEmitter throws if "error" emits without a
305
+ // listener; without this, a flapping cloudflared would crash the
306
+ // daemon when the restart cap is hit.
307
+ tunnelManager.on("error", (err) => {
308
+ console.error(`Tunnel: supervisor gave up (${err.message}); daemon continues on local ports`);
309
+ });
310
+ try {
311
+ const { logAuditEvent, tunnelStartedEvent } = await import("@urateam/core");
312
+ void logAuditEvent(db, tunnelStartedEvent({
313
+ provider: mode,
314
+ publicUrl: result.publicUrl,
315
+ restartCount: result.restartCount,
316
+ }));
317
+ }
318
+ catch {
319
+ // audit must never crash startup
320
+ }
321
+ }
322
+ catch (err) {
323
+ if (err instanceof CloudflaredMissingError) {
324
+ console.error(err.message);
325
+ }
326
+ else {
327
+ console.error(`Tunnel: failed to start (${err.message}); daemon will run on local ports only`);
328
+ }
329
+ tunnelManager = undefined;
330
+ }
331
+ }
332
+ // --- Optional user-level config hot-reload ---
333
+ // Watches ~/.urateam/config.json (or $URATEAM_HOME/config.json) and
334
+ // applies safe changes without a daemon restart. Activates only when
335
+ // we're in user-level mode (no REPO_* env vars AND config.json exists);
336
+ // project-level (sidecar) installs are env-var driven and don't need
337
+ // hot-reload. Unsafe field changes (url, path, defaultBranch) log a
338
+ // "restart required" warning. Removals with in-flight pipeline runs
339
+ // are deferred to the next reload to avoid mid-flight interruption.
340
+ let configWatcher;
341
+ const userLevelMode = !process.env.REPO_TEAM_ID &&
342
+ !process.env.REPO_URL &&
343
+ readUserLevelConfig() !== null;
344
+ if (userLevelMode) {
345
+ const { ConfigWatcher, hashConfig } = await import("../lib/config-watcher.js");
346
+ const initial = readUserLevelConfig();
347
+ configWatcher = new ConfigWatcher(initial, {
348
+ path: userLevelConfigPath(),
349
+ });
350
+ const deriveKeyFromUrl = (url) => {
351
+ const stripped = url.replace(/\.git$/, "");
352
+ const last = stripped.split(/[/:]/).filter(Boolean).pop() ?? "repo";
353
+ return last.replace(/[^A-Za-z0-9._-]/g, "-");
354
+ };
355
+ configWatcher.on("applied", async (diff) => {
356
+ for (const r of diff.added) {
357
+ const key = r.teamId ?? deriveKeyFromUrl(r.url);
358
+ config.repoConfigs[key] = {
359
+ url: r.url,
360
+ defaultBranch: r.defaultBranch,
361
+ testCommand: r.testCommand,
362
+ buildCommand: r.buildCommand,
363
+ ...(r.labelPattern && { labelPattern: r.labelPattern }),
364
+ };
365
+ console.log(`config: + ${r.url} (live)`);
366
+ }
367
+ for (const m of diff.modifiedSafe) {
368
+ // Look up the OLD entry using the previous teamId / URL slug —
369
+ // not the new ones — so we find the entry even when teamId
370
+ // itself changed.
371
+ const oldKey = m.prev.teamId ?? deriveKeyFromUrl(m.prev.url);
372
+ const existing = config.repoConfigs[oldKey];
373
+ if (existing) {
374
+ if (m.fields.includes("testCommand")) {
375
+ existing.testCommand = m.repo.testCommand;
376
+ }
377
+ if (m.fields.includes("buildCommand")) {
378
+ existing.buildCommand = m.repo.buildCommand;
379
+ }
380
+ if (m.fields.includes("labelPattern")) {
381
+ existing.labelPattern = m.repo.labelPattern;
382
+ }
383
+ if (m.fields.includes("teamId")) {
384
+ // The map-key changes when teamId changes — re-key the entry
385
+ // under the new key so webhook routing keeps working.
386
+ const newKey = m.repo.teamId ?? deriveKeyFromUrl(m.repo.url);
387
+ if (newKey !== oldKey) {
388
+ delete config.repoConfigs[oldKey];
389
+ config.repoConfigs[newKey] = existing;
390
+ }
391
+ }
392
+ console.log(`config: ~ ${m.repo.url} (${m.fields.join(",")}) — applied live`);
393
+ }
394
+ }
395
+ for (const m of diff.modifiedUnsafe) {
396
+ console.warn(`config: ! ${m.repo.url} unsafe field change (${m.fields.join(",")}) — restart required to apply`);
397
+ }
398
+ // Removal: delete the entry from the live repoConfigs immediately.
399
+ // In-flight pipeline runs hold their own snapshot of the runner state
400
+ // and continue uninterrupted — removing the entry only stops the
401
+ // webhook/PM router from sending NEW work to the repo. Operators
402
+ // who need to forcibly stop in-flight runs should use `ura stop`
403
+ // or `ura halt`.
404
+ for (const r of diff.removed) {
405
+ const key = r.teamId ?? deriveKeyFromUrl(r.url);
406
+ delete config.repoConfigs[key];
407
+ console.log(`config: - ${r.url} (live; in-flight runs continue)`);
408
+ }
409
+ try {
410
+ const { logAuditEvent, configReloadedEvent } = await import("@urateam/core");
411
+ void logAuditEvent(db, configReloadedEvent({
412
+ added: diff.added.map((r) => r.url),
413
+ removed: diff.removed.map((r) => r.url),
414
+ modifiedSafe: diff.modifiedSafe.map((m) => m.repo.url),
415
+ modifiedUnsafe: diff.modifiedUnsafe.map((m) => m.repo.url),
416
+ sha256: hashConfig(configWatcher.getCurrent()),
417
+ }));
418
+ }
419
+ catch {
420
+ // audit must never crash the watcher loop
421
+ }
422
+ });
423
+ configWatcher.on("error", (err) => {
424
+ console.warn(`config-watcher: ${err.message}; keeping previous in-memory config`);
425
+ });
426
+ configWatcher.start();
427
+ console.log(`Config: watching ${userLevelConfigPath()} (live reload)`);
428
+ }
276
429
  // --- Worktree cleanup cron ---
277
430
  // agentRunDir is already resolved above (before preflightClaudeAuth).
278
431
  const _parsedTtl = parseInt(process.env.WORKTREE_TTL_HOURS ?? "24", 10);
@@ -294,8 +447,10 @@ export const startCommand = new Command("start")
294
447
  const agentBranchTtlDays = Number.isFinite(_parsedAgentBranchTtl) && _parsedAgentBranchTtl > 0
295
448
  ? _parsedAgentBranchTtl
296
449
  : 7;
297
- const repoUrls = Object.values(config.repoConfigs).map((r) => r.url);
450
+ // Compute repoUrls per-tick so hot-reloaded additions/removals are
451
+ // picked up by the branch sweep without requiring a daemon restart.
298
452
  async function runBranchSweepTick() {
453
+ const repoUrls = Object.values(config.repoConfigs).map((r) => r.url);
299
454
  try {
300
455
  await runAgentBranchSweep({
301
456
  db,
@@ -387,13 +542,41 @@ export const startCommand = new Command("start")
387
542
  console.log(`Release Manager: enabled (schedule "${rmConfig.schedule}", repo ${rmRepoUrl}, branch ${rmConfig.branch})`);
388
543
  }
389
544
  // --- Graceful shutdown ---
390
- function shutdown() {
545
+ async function shutdown() {
391
546
  console.log("Shutting down...");
392
547
  clearInterval(cleanupInterval);
393
548
  clearInterval(branchSweepInterval);
394
549
  if (pmInterval)
395
550
  clearInterval(pmInterval);
396
551
  rmScheduler?.stop();
552
+ configWatcher?.stop();
553
+ // Stop tunnel before closing HTTP servers so cloudflared sees clean
554
+ // disconnects instead of a half-open socket dance. Emit `tunnel.stopped`
555
+ // for observability of intentional shutdowns.
556
+ if (tunnelManager) {
557
+ // Capture restartCount BEFORE stop() — the count reflects how many
558
+ // times cloudflared crashed during the daemon's life, which is the
559
+ // metric operators want to see for "did this tunnel flap?".
560
+ const restartCount = tunnelManager.getRestartCount();
561
+ try {
562
+ await tunnelManager.stop();
563
+ try {
564
+ const { logAuditEvent, tunnelStoppedEvent } = await import("@urateam/core");
565
+ void logAuditEvent(db, tunnelStoppedEvent({
566
+ provider: options.tunnel,
567
+ restartCount,
568
+ exitCode: null,
569
+ signal: "SIGTERM",
570
+ }));
571
+ }
572
+ catch {
573
+ // audit must never crash shutdown
574
+ }
575
+ }
576
+ catch (err) {
577
+ console.error(`Tunnel shutdown error: ${err.message}`);
578
+ }
579
+ }
397
580
  let closed = 0;
398
581
  const onClose = () => { if (++closed === 2)
399
582
  process.exit(0); };
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { type UserLevelConfig, type UserLevelRepo } from "./user-level-config.js";
3
+ /**
4
+ * Fields that are safe to swap mid-flight. Changes to these propagate
5
+ * immediately into the live repoConfigs.
6
+ */
7
+ export declare const SAFE_REPO_FIELDS: readonly ["labelPattern", "testCommand", "buildCommand", "teamId"];
8
+ /**
9
+ * Fields that change the daemon's wiring in ways the runner can't pick up
10
+ * mid-flight. Modifying these triggers a "restart required" warning.
11
+ */
12
+ export declare const UNSAFE_REPO_FIELDS: readonly ["url", "path", "defaultBranch"];
13
+ export interface ConfigDiff {
14
+ /** Repo URLs that are present in the new config but not the previous. */
15
+ added: UserLevelRepo[];
16
+ /** Repo URLs that were in the previous but not the new config. */
17
+ removed: UserLevelRepo[];
18
+ /**
19
+ * Repos present in both, with at least one safe field changed.
20
+ * Carries the previous entry (so the caller can derive the OLD map key)
21
+ * and the new entry plus the list of changed safe-field names.
22
+ */
23
+ modifiedSafe: Array<{
24
+ prev: UserLevelRepo;
25
+ repo: UserLevelRepo;
26
+ fields: string[];
27
+ }>;
28
+ /** Same as modifiedSafe but for unsafe-field changes (restart required). */
29
+ modifiedUnsafe: Array<{
30
+ prev: UserLevelRepo;
31
+ repo: UserLevelRepo;
32
+ fields: string[];
33
+ }>;
34
+ }
35
+ /**
36
+ * Compute the diff between two configs, splitting modifications into
37
+ * safe-to-apply vs restart-required categories.
38
+ */
39
+ export declare function diffRepos(prev: UserLevelConfig, next: UserLevelConfig): ConfigDiff;
40
+ /**
41
+ * SHA-256 of the JSON-stringified config, for audit observability.
42
+ *
43
+ * Used only for the `config.reloaded` audit event payload — advisory, not
44
+ * load-bearing for any routing decision. The hash assumes both inputs come
45
+ * from `JSON.parse(readFileSync(...))` so key insertion order matches the
46
+ * file's; we don't normalise nested key ordering here.
47
+ */
48
+ export declare function hashConfig(cfg: UserLevelConfig): string;
49
+ export interface ConfigWatcherOpts {
50
+ /** Absolute path to `config.json`. */
51
+ path: string;
52
+ /** Debounce window for fs.watch fires. Default 1000ms. */
53
+ debounceMs?: number;
54
+ /**
55
+ * Reader override (tests pass a stub that returns the next config without
56
+ * touching the disk). Default reads + zod-validates via
57
+ * `readUserLevelConfig()`.
58
+ */
59
+ reader?: () => UserLevelConfig | null;
60
+ /** Logger (defaults to console). */
61
+ log?: (msg: string) => void;
62
+ }
63
+ export declare class ConfigWatcher extends EventEmitter {
64
+ private readonly opts;
65
+ private watcher;
66
+ private debounceTimer;
67
+ private current;
68
+ private readonly debounceMs;
69
+ private readonly read;
70
+ private readonly log;
71
+ constructor(initial: UserLevelConfig, opts: ConfigWatcherOpts);
72
+ start(): void;
73
+ /**
74
+ * Cancels any pending debounce timer and schedules a fresh one. Called
75
+ * internally by `start()`'s fs.watch handler and exposed publicly so the
76
+ * unit tests can exercise debounce coalescing deterministically (fake
77
+ * timers can't drive fs.watch on the OS).
78
+ */
79
+ scheduleReload(): void;
80
+ stop(): void;
81
+ /** Current in-memory config (last successfully validated). */
82
+ getCurrent(): UserLevelConfig;
83
+ /**
84
+ * Force a reload regardless of fs.watch firing. Useful for tests and for
85
+ * operators who want to verify the watcher is working (`ura repo reload`
86
+ * could call into this in a future iteration).
87
+ */
88
+ reloadNow(): void;
89
+ private handleChange;
90
+ }
91
+ //# sourceMappingURL=config-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.d.ts","sourceRoot":"","sources":["../../src/lib/config-watcher.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,oEAK0B,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,2CAIwB,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,kEAAkE;IAClE,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB;;;;OAIG;IACH,YAAY,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,aAAa,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,4EAA4E;IAC5E,cAAc,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,aAAa,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;CACJ;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,eAAe,GACpB,UAAU,CAmCZ;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAEvD;AAED,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACtC,oCAAoC;IACpC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,qBAAa,aAAc,SAAQ,YAAY;IAU3C,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;gBAG1C,OAAO,EAAE,eAAe,EACP,IAAI,EAAE,iBAAiB;IAS1C,KAAK,IAAI,IAAI;IAKb;;;;;OAKG;IACH,cAAc,IAAI,IAAI;IAQtB,IAAI,IAAI,IAAI;IAWZ,8DAA8D;IAC9D,UAAU,IAAI,eAAe;IAI7B;;;;OAIG;IACH,SAAS,IAAI,IAAI;IAIjB,OAAO,CAAC,YAAY;CA4BrB"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Hot-reload of `~/.urateam/config.json` (`$URATEAM_HOME/config.json`).
3
+ *
4
+ * Watches the file via `fs.watch` with debouncing (default 1s), re-reads
5
+ * + zod-validates on change, diffs against the previous config, and emits
6
+ * an `applied` event with the diff. Schema-validation failures keep the
7
+ * previous in-memory config and emit `error`.
8
+ *
9
+ * The watcher is read-only — callers handle the mutation (since they own
10
+ * the live `repoConfigs` object that the runner reads from). JS objects
11
+ * are pass-by-reference + single-threaded, so a property-level mutation
12
+ * propagates to the runner without any new lock.
13
+ */
14
+ import { watch } from "node:fs";
15
+ import { createHash } from "node:crypto";
16
+ import { EventEmitter } from "node:events";
17
+ import { readUserLevelConfig, } from "./user-level-config.js";
18
+ /**
19
+ * Fields that are safe to swap mid-flight. Changes to these propagate
20
+ * immediately into the live repoConfigs.
21
+ */
22
+ export const SAFE_REPO_FIELDS = [
23
+ "labelPattern",
24
+ "testCommand",
25
+ "buildCommand",
26
+ "teamId",
27
+ ];
28
+ /**
29
+ * Fields that change the daemon's wiring in ways the runner can't pick up
30
+ * mid-flight. Modifying these triggers a "restart required" warning.
31
+ */
32
+ export const UNSAFE_REPO_FIELDS = [
33
+ "url",
34
+ "path",
35
+ "defaultBranch",
36
+ ];
37
+ /**
38
+ * Compute the diff between two configs, splitting modifications into
39
+ * safe-to-apply vs restart-required categories.
40
+ */
41
+ export function diffRepos(prev, next) {
42
+ const prevByUrl = new Map(prev.repos.map((r) => [r.url, r]));
43
+ const nextByUrl = new Map(next.repos.map((r) => [r.url, r]));
44
+ const added = [];
45
+ const removed = [];
46
+ const modifiedSafe = [];
47
+ const modifiedUnsafe = [];
48
+ for (const [url, next] of nextByUrl) {
49
+ const prev = prevByUrl.get(url);
50
+ if (!prev) {
51
+ added.push(next);
52
+ continue;
53
+ }
54
+ const safeChanged = [];
55
+ const unsafeChanged = [];
56
+ for (const f of SAFE_REPO_FIELDS) {
57
+ if (prev[f] !== next[f])
58
+ safeChanged.push(f);
59
+ }
60
+ for (const f of UNSAFE_REPO_FIELDS) {
61
+ if (prev[f] !== next[f])
62
+ unsafeChanged.push(f);
63
+ }
64
+ if (safeChanged.length > 0) {
65
+ modifiedSafe.push({ prev, repo: next, fields: safeChanged });
66
+ }
67
+ if (unsafeChanged.length > 0) {
68
+ modifiedUnsafe.push({ prev, repo: next, fields: unsafeChanged });
69
+ }
70
+ }
71
+ for (const [url, prev] of prevByUrl) {
72
+ if (!nextByUrl.has(url))
73
+ removed.push(prev);
74
+ }
75
+ return { added, removed, modifiedSafe, modifiedUnsafe };
76
+ }
77
+ /**
78
+ * SHA-256 of the JSON-stringified config, for audit observability.
79
+ *
80
+ * Used only for the `config.reloaded` audit event payload — advisory, not
81
+ * load-bearing for any routing decision. The hash assumes both inputs come
82
+ * from `JSON.parse(readFileSync(...))` so key insertion order matches the
83
+ * file's; we don't normalise nested key ordering here.
84
+ */
85
+ export function hashConfig(cfg) {
86
+ return createHash("sha256").update(JSON.stringify(cfg)).digest("hex");
87
+ }
88
+ export class ConfigWatcher extends EventEmitter {
89
+ opts;
90
+ watcher = null;
91
+ debounceTimer = null;
92
+ current;
93
+ debounceMs;
94
+ read;
95
+ log;
96
+ constructor(initial, opts) {
97
+ super();
98
+ this.opts = opts;
99
+ this.current = initial;
100
+ this.debounceMs = opts.debounceMs ?? 1000;
101
+ this.read = opts.reader ?? readUserLevelConfig;
102
+ this.log = opts.log ?? ((m) => console.log(m));
103
+ }
104
+ start() {
105
+ if (this.watcher)
106
+ return;
107
+ this.watcher = watch(this.opts.path, () => this.scheduleReload());
108
+ }
109
+ /**
110
+ * Cancels any pending debounce timer and schedules a fresh one. Called
111
+ * internally by `start()`'s fs.watch handler and exposed publicly so the
112
+ * unit tests can exercise debounce coalescing deterministically (fake
113
+ * timers can't drive fs.watch on the OS).
114
+ */
115
+ scheduleReload() {
116
+ if (this.debounceTimer)
117
+ clearTimeout(this.debounceTimer);
118
+ this.debounceTimer = setTimeout(() => this.handleChange(), this.debounceMs);
119
+ }
120
+ stop() {
121
+ if (this.debounceTimer) {
122
+ clearTimeout(this.debounceTimer);
123
+ this.debounceTimer = null;
124
+ }
125
+ if (this.watcher) {
126
+ this.watcher.close();
127
+ this.watcher = null;
128
+ }
129
+ }
130
+ /** Current in-memory config (last successfully validated). */
131
+ getCurrent() {
132
+ return this.current;
133
+ }
134
+ /**
135
+ * Force a reload regardless of fs.watch firing. Useful for tests and for
136
+ * operators who want to verify the watcher is working (`ura repo reload`
137
+ * could call into this in a future iteration).
138
+ */
139
+ reloadNow() {
140
+ this.handleChange();
141
+ }
142
+ handleChange() {
143
+ let next;
144
+ try {
145
+ next = this.read();
146
+ }
147
+ catch (err) {
148
+ this.log(`config-watcher: schema validation failed; keeping previous config. ${err.message}`);
149
+ this.emit("error", err);
150
+ return;
151
+ }
152
+ if (!next) {
153
+ this.log("config-watcher: config file disappeared; keeping previous in-memory config");
154
+ return;
155
+ }
156
+ const diff = diffRepos(this.current, next);
157
+ const isEmpty = diff.added.length === 0 &&
158
+ diff.removed.length === 0 &&
159
+ diff.modifiedSafe.length === 0 &&
160
+ diff.modifiedUnsafe.length === 0;
161
+ this.current = next;
162
+ if (!isEmpty) {
163
+ this.emit("applied", diff);
164
+ }
165
+ }
166
+ }
167
+ //# sourceMappingURL=config-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.js","sourceRoot":"","sources":["../../src/lib/config-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,KAAK,EAAkB,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,mBAAmB,GAGpB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,cAAc;IACd,aAAa;IACb,cAAc;IACd,QAAQ;CAC6C,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK;IACL,MAAM;IACN,eAAe;CACsC,CAAC;AAyBxD;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,IAAqB,EACrB,IAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,YAAY,GAA+B,EAAE,CAAC;IACpD,MAAM,cAAc,GAAiC,EAAE,CAAC;IAExD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,GAAoB;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAiBD,MAAM,OAAO,aAAc,SAAQ,YAAY;IAU1B;IATX,OAAO,GAAqB,IAAI,CAAC;IACjC,aAAa,GAA0B,IAAI,CAAC;IAC5C,OAAO,CAAkB;IAChB,UAAU,CAAS;IACnB,IAAI,CAA+B;IACnC,GAAG,CAAwB;IAE5C,YACE,OAAwB,EACP,IAAuB;QAExC,KAAK,EAAE,CAAC;QAFS,SAAI,GAAJ,IAAI,CAAmB;QAGxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,mBAAmB,CAAC;QAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,UAAU,CAC7B,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EACzB,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,IAAI,IAA4B,CAAC;QACjC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CACN,sEAAuE,GAAa,CAAC,OAAO,EAAE,CAC/F,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CACN,4EAA4E,CAC7E,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,OAAO,GACX,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF"}