@camstack/kernel 0.1.1 → 0.1.3

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.
@@ -0,0 +1,154 @@
1
+ import {
2
+ __commonJS,
3
+ __require
4
+ } from "./chunk-LZOMFHX3.mjs";
5
+
6
+ // src/worker/worker-process-manager.js
7
+ var require_worker_process_manager = __commonJS({
8
+ "src/worker/worker-process-manager.js"(exports) {
9
+ "use strict";
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.WorkerProcessManager = void 0;
12
+ var node_child_process_1 = __require("child_process");
13
+ var WorkerProcessManager = class {
14
+ sendToMain;
15
+ processes = /* @__PURE__ */ new Map();
16
+ constructor(sendToMain) {
17
+ this.sendToMain = sendToMain;
18
+ }
19
+ async spawn(config) {
20
+ const child = (0, node_child_process_1.spawn)(config.command, [...config.args ?? []], {
21
+ cwd: config.cwd,
22
+ env: config.env ? { ...process.env, ...config.env } : void 0,
23
+ stdio: ["pipe", "pipe", "pipe"]
24
+ });
25
+ const managed = new ManagedProcess(child, config, this.sendToMain);
26
+ this.processes.set(child.pid, managed);
27
+ this.sendToMain({
28
+ type: "SUB_PROCESS_SPAWNED",
29
+ pid: child.pid,
30
+ name: config.name,
31
+ command: config.command
32
+ });
33
+ child.on("exit", (code) => {
34
+ this.sendToMain({
35
+ type: "SUB_PROCESS_EXITED",
36
+ pid: child.pid,
37
+ code
38
+ });
39
+ if (config.autoRestart && managed.restartCount < (config.maxRestarts ?? 3)) {
40
+ managed.restartCount++;
41
+ setTimeout(() => {
42
+ this.spawn(config).catch(() => {
43
+ });
44
+ }, 2e3);
45
+ }
46
+ });
47
+ return managed;
48
+ }
49
+ listProcesses() {
50
+ return [...this.processes.values()].map((p) => p.toInfo());
51
+ }
52
+ getWorkerStats() {
53
+ const mem = process.memoryUsage();
54
+ const cpu = process.cpuUsage();
55
+ return {
56
+ pid: process.pid,
57
+ cpuPercent: (cpu.user + cpu.system) / 1e6,
58
+ memoryRss: mem.rss,
59
+ heapUsed: mem.heapUsed,
60
+ uptimeSeconds: Math.round(process.uptime()),
61
+ restartCount: 0,
62
+ state: "running"
63
+ };
64
+ }
65
+ async killAll() {
66
+ for (const [, proc] of this.processes) {
67
+ proc.kill("SIGTERM");
68
+ }
69
+ this.processes.clear();
70
+ }
71
+ };
72
+ exports.WorkerProcessManager = WorkerProcessManager;
73
+ var ManagedProcess = class {
74
+ child;
75
+ config;
76
+ sendToMain;
77
+ pid;
78
+ name;
79
+ restartCount = 0;
80
+ startedAt = Date.now();
81
+ exitHandlers = [];
82
+ errorHandlers = [];
83
+ constructor(child, config, sendToMain) {
84
+ this.child = child;
85
+ this.config = config;
86
+ this.sendToMain = sendToMain;
87
+ this.pid = child.pid;
88
+ this.name = config.name;
89
+ child.on("exit", (code) => {
90
+ for (const handler of this.exitHandlers)
91
+ handler(code);
92
+ });
93
+ child.on("error", (err) => {
94
+ for (const handler of this.errorHandlers)
95
+ handler(err);
96
+ });
97
+ }
98
+ getStats() {
99
+ return {
100
+ pid: this.pid,
101
+ cpuPercent: 0,
102
+ memoryRss: 0,
103
+ uptimeSeconds: Math.round((Date.now() - this.startedAt) / 1e3),
104
+ restartCount: this.restartCount,
105
+ state: this.child.exitCode !== null ? "stopped" : "running"
106
+ };
107
+ }
108
+ write(data) {
109
+ this.child.stdin?.write(data);
110
+ }
111
+ get stdout() {
112
+ return this.child.stdout;
113
+ }
114
+ get stderr() {
115
+ return this.child.stderr;
116
+ }
117
+ kill(signal = "SIGTERM") {
118
+ this.child.kill(signal);
119
+ }
120
+ wait() {
121
+ if (this.child.exitCode !== null) {
122
+ return Promise.resolve({ code: this.child.exitCode, signal: null });
123
+ }
124
+ return new Promise((resolve) => {
125
+ this.child.on("exit", (code, signal) => {
126
+ resolve({ code, signal });
127
+ });
128
+ });
129
+ }
130
+ onExit(handler) {
131
+ this.exitHandlers.push(handler);
132
+ }
133
+ onError(handler) {
134
+ this.errorHandlers.push(handler);
135
+ }
136
+ toInfo() {
137
+ return {
138
+ pid: this.pid,
139
+ name: this.name,
140
+ command: this.config.command,
141
+ state: this.child.exitCode !== null ? "stopped" : "running",
142
+ cpuPercent: 0,
143
+ memoryRss: 0,
144
+ uptimeSeconds: Math.round((Date.now() - this.startedAt) / 1e3)
145
+ };
146
+ }
147
+ };
148
+ }
149
+ });
150
+
151
+ export {
152
+ require_worker_process_manager
153
+ };
154
+ //# sourceMappingURL=chunk-RHK5CCAL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/worker/worker-process-manager.ts"],"sourcesContent":["import { spawn, type ChildProcess } from 'node:child_process'\nimport type {\n WorkerToMainMessage,\n WorkerProcessStats,\n SubProcessInfo,\n} from '@camstack/types'\nimport type {\n IAddonProcessManager,\n SubProcessConfig,\n IManagedSubProcess,\n} from '@camstack/types'\n\nexport class WorkerProcessManager implements IAddonProcessManager {\n private readonly processes = new Map<number, ManagedProcess>()\n\n constructor(\n private readonly sendToMain: (msg: WorkerToMainMessage) => void,\n ) {}\n\n async spawn(config: SubProcessConfig): Promise<IManagedSubProcess> {\n const child = spawn(config.command, [...(config.args ?? [])], {\n cwd: config.cwd,\n env: config.env ? { ...process.env, ...config.env } : undefined,\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n\n const managed = new ManagedProcess(child, config, this.sendToMain)\n this.processes.set(child.pid!, managed)\n\n this.sendToMain({\n type: 'SUB_PROCESS_SPAWNED',\n pid: child.pid!,\n name: config.name,\n command: config.command,\n })\n\n child.on('exit', (code) => {\n this.sendToMain({\n type: 'SUB_PROCESS_EXITED',\n pid: child.pid!,\n code,\n })\n\n if (config.autoRestart && managed.restartCount < (config.maxRestarts ?? 3)) {\n managed.restartCount++\n setTimeout(() => {\n this.spawn(config).catch(() => {})\n }, 2000)\n }\n })\n\n return managed\n }\n\n listProcesses(): readonly SubProcessInfo[] {\n return [...this.processes.values()].map((p) => p.toInfo())\n }\n\n getWorkerStats(): WorkerProcessStats {\n const mem = process.memoryUsage()\n const cpu = process.cpuUsage()\n return {\n pid: process.pid,\n cpuPercent: (cpu.user + cpu.system) / 1_000_000,\n memoryRss: mem.rss,\n heapUsed: mem.heapUsed,\n uptimeSeconds: Math.round(process.uptime()),\n restartCount: 0,\n state: 'running',\n }\n }\n\n async killAll(): Promise<void> {\n for (const [, proc] of this.processes) {\n proc.kill('SIGTERM')\n }\n this.processes.clear()\n }\n}\n\nclass ManagedProcess implements IManagedSubProcess {\n readonly pid: number\n readonly name: string\n restartCount = 0\n private readonly startedAt = Date.now()\n private exitHandlers: Array<(code: number | null) => void> = []\n private errorHandlers: Array<(error: Error) => void> = []\n\n constructor(\n private readonly child: ChildProcess,\n private readonly config: SubProcessConfig,\n private readonly sendToMain: (msg: WorkerToMainMessage) => void,\n ) {\n this.pid = child.pid!\n this.name = config.name\n\n child.on('exit', (code) => {\n for (const handler of this.exitHandlers) handler(code)\n })\n\n child.on('error', (err) => {\n for (const handler of this.errorHandlers) handler(err)\n })\n }\n\n getStats(): WorkerProcessStats {\n return {\n pid: this.pid,\n cpuPercent: 0,\n memoryRss: 0,\n uptimeSeconds: Math.round((Date.now() - this.startedAt) / 1000),\n restartCount: this.restartCount,\n state: this.child.exitCode !== null ? 'stopped' : 'running',\n }\n }\n\n write(data: Buffer): void {\n this.child.stdin?.write(data)\n }\n\n get stdout(): AsyncIterable<Buffer> {\n return this.child.stdout as AsyncIterable<Buffer>\n }\n\n get stderr(): AsyncIterable<Buffer> {\n return this.child.stderr as AsyncIterable<Buffer>\n }\n\n kill(signal: NodeJS.Signals = 'SIGTERM'): void {\n this.child.kill(signal)\n }\n\n wait(): Promise<{ code: number | null; signal: string | null }> {\n if (this.child.exitCode !== null) {\n return Promise.resolve({ code: this.child.exitCode, signal: null })\n }\n return new Promise((resolve) => {\n this.child.on('exit', (code, signal) => {\n resolve({ code, signal })\n })\n })\n }\n\n onExit(handler: (code: number | null) => void): void {\n this.exitHandlers.push(handler)\n }\n\n onError(handler: (error: Error) => void): void {\n this.errorHandlers.push(handler)\n }\n\n toInfo(): SubProcessInfo {\n return {\n pid: this.pid,\n name: this.name,\n command: this.config.command,\n state: this.child.exitCode !== null ? 'stopped' : 'running',\n cpuPercent: 0,\n memoryRss: 0,\n uptimeSeconds: Math.round((Date.now() - this.startedAt) / 1000),\n }\n }\n}\n"],"mappings":";AAAA,SAAS,aAAgC;AAYlC,IAAM,uBAAN,MAA2D;AAAA,EAGhE,YACmB,YACjB;AADiB;AAAA,EAChB;AAAA,EAJc,YAAY,oBAAI,IAA4B;AAAA,EAM7D,MAAM,MAAM,QAAuD;AACjE,UAAM,QAAQ,MAAM,OAAO,SAAS,CAAC,GAAI,OAAO,QAAQ,CAAC,CAAE,GAAG;AAAA,MAC5D,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO,MAAM,EAAE,GAAG,QAAQ,KAAK,GAAG,OAAO,IAAI,IAAI;AAAA,MACtD,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,IAChC,CAAC;AAED,UAAM,UAAU,IAAI,eAAe,OAAO,QAAQ,KAAK,UAAU;AACjE,SAAK,UAAU,IAAI,MAAM,KAAM,OAAO;AAEtC,SAAK,WAAW;AAAA,MACd,MAAM;AAAA,MACN,KAAK,MAAM;AAAA,MACX,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,IAClB,CAAC;AAED,UAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,WAAK,WAAW;AAAA,QACd,MAAM;AAAA,QACN,KAAK,MAAM;AAAA,QACX;AAAA,MACF,CAAC;AAED,UAAI,OAAO,eAAe,QAAQ,gBAAgB,OAAO,eAAe,IAAI;AAC1E,gBAAQ;AACR,mBAAW,MAAM;AACf,eAAK,MAAM,MAAM,EAAE,MAAM,MAAM;AAAA,UAAC,CAAC;AAAA,QACnC,GAAG,GAAI;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,gBAA2C;AACzC,WAAO,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAAA,EAC3D;AAAA,EAEA,iBAAqC;AACnC,UAAM,MAAM,QAAQ,YAAY;AAChC,UAAM,MAAM,QAAQ,SAAS;AAC7B,WAAO;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,aAAa,IAAI,OAAO,IAAI,UAAU;AAAA,MACtC,WAAW,IAAI;AAAA,MACf,UAAU,IAAI;AAAA,MACd,eAAe,KAAK,MAAM,QAAQ,OAAO,CAAC;AAAA,MAC1C,cAAc;AAAA,MACd,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAyB;AAC7B,eAAW,CAAC,EAAE,IAAI,KAAK,KAAK,WAAW;AACrC,WAAK,KAAK,SAAS;AAAA,IACrB;AACA,SAAK,UAAU,MAAM;AAAA,EACvB;AACF;AAEA,IAAM,iBAAN,MAAmD;AAAA,EAQjD,YACmB,OACA,QACA,YACjB;AAHiB;AACA;AACA;AAEjB,SAAK,MAAM,MAAM;AACjB,SAAK,OAAO,OAAO;AAEnB,UAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,iBAAW,WAAW,KAAK,aAAc,SAAQ,IAAI;AAAA,IACvD,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,iBAAW,WAAW,KAAK,cAAe,SAAQ,GAAG;AAAA,IACvD,CAAC;AAAA,EACH;AAAA,EAtBS;AAAA,EACA;AAAA,EACT,eAAe;AAAA,EACE,YAAY,KAAK,IAAI;AAAA,EAC9B,eAAqD,CAAC;AAAA,EACtD,gBAA+C,CAAC;AAAA,EAmBxD,WAA+B;AAC7B,WAAO;AAAA,MACL,KAAK,KAAK;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,eAAe,KAAK,OAAO,KAAK,IAAI,IAAI,KAAK,aAAa,GAAI;AAAA,MAC9D,cAAc,KAAK;AAAA,MACnB,OAAO,KAAK,MAAM,aAAa,OAAO,YAAY;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,MAAoB;AACxB,SAAK,MAAM,OAAO,MAAM,IAAI;AAAA,EAC9B;AAAA,EAEA,IAAI,SAAgC;AAClC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,SAAgC;AAClC,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,KAAK,SAAyB,WAAiB;AAC7C,SAAK,MAAM,KAAK,MAAM;AAAA,EACxB;AAAA,EAEA,OAAgE;AAC9D,QAAI,KAAK,MAAM,aAAa,MAAM;AAChC,aAAO,QAAQ,QAAQ,EAAE,MAAM,KAAK,MAAM,UAAU,QAAQ,KAAK,CAAC;AAAA,IACpE;AACA,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,WAAW;AACtC,gBAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,MAC1B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,SAA8C;AACnD,SAAK,aAAa,KAAK,OAAO;AAAA,EAChC;AAAA,EAEA,QAAQ,SAAuC;AAC7C,SAAK,cAAc,KAAK,OAAO;AAAA,EACjC;AAAA,EAEA,SAAyB;AACvB,WAAO;AAAA,MACL,KAAK,KAAK;AAAA,MACV,MAAM,KAAK;AAAA,MACX,SAAS,KAAK,OAAO;AAAA,MACrB,OAAO,KAAK,MAAM,aAAa,OAAO,YAAY;AAAA,MAClD,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,eAAe,KAAK,OAAO,KAAK,IAAI,IAAI,KAAK,aAAa,GAAI;AAAA,IAChE;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/worker/worker-process-manager.ts"],"sourcesContent":["import { spawn, type ChildProcess } from 'node:child_process'\nimport type {\n WorkerToMainMessage,\n WorkerProcessStats,\n SubProcessInfo,\n} from '@camstack/types'\nimport type {\n IAddonProcessManager,\n SubProcessConfig,\n IManagedSubProcess,\n} from '@camstack/types'\n\nexport class WorkerProcessManager implements IAddonProcessManager {\n private readonly processes = new Map<number, ManagedProcess>()\n\n constructor(\n private readonly sendToMain: (msg: WorkerToMainMessage) => void,\n ) {}\n\n async spawn(config: SubProcessConfig): Promise<IManagedSubProcess> {\n const child = spawn(config.command, [...(config.args ?? [])], {\n cwd: config.cwd,\n env: config.env ? { ...process.env, ...config.env } : undefined,\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n\n const managed = new ManagedProcess(child, config, this.sendToMain)\n this.processes.set(child.pid!, managed)\n\n this.sendToMain({\n type: 'SUB_PROCESS_SPAWNED',\n pid: child.pid!,\n name: config.name,\n command: config.command,\n })\n\n child.on('exit', (code) => {\n this.sendToMain({\n type: 'SUB_PROCESS_EXITED',\n pid: child.pid!,\n code,\n })\n\n if (config.autoRestart && managed.restartCount < (config.maxRestarts ?? 3)) {\n managed.restartCount++\n setTimeout(() => {\n this.spawn(config).catch(() => {})\n }, 2000)\n }\n })\n\n return managed\n }\n\n listProcesses(): readonly SubProcessInfo[] {\n return [...this.processes.values()].map((p) => p.toInfo())\n }\n\n getWorkerStats(): WorkerProcessStats {\n const mem = process.memoryUsage()\n const cpu = process.cpuUsage()\n return {\n pid: process.pid,\n cpuPercent: (cpu.user + cpu.system) / 1_000_000,\n memoryRss: mem.rss,\n heapUsed: mem.heapUsed,\n uptimeSeconds: Math.round(process.uptime()),\n restartCount: 0,\n state: 'running',\n }\n }\n\n async killAll(): Promise<void> {\n for (const [, proc] of this.processes) {\n proc.kill('SIGTERM')\n }\n this.processes.clear()\n }\n}\n\nclass ManagedProcess implements IManagedSubProcess {\n readonly pid: number\n readonly name: string\n restartCount = 0\n private readonly startedAt = Date.now()\n private exitHandlers: Array<(code: number | null) => void> = []\n private errorHandlers: Array<(error: Error) => void> = []\n\n constructor(\n private readonly child: ChildProcess,\n private readonly config: SubProcessConfig,\n private readonly sendToMain: (msg: WorkerToMainMessage) => void,\n ) {\n this.pid = child.pid!\n this.name = config.name\n\n child.on('exit', (code) => {\n for (const handler of this.exitHandlers) handler(code)\n })\n\n child.on('error', (err) => {\n for (const handler of this.errorHandlers) handler(err)\n })\n }\n\n getStats(): WorkerProcessStats {\n return {\n pid: this.pid,\n cpuPercent: 0,\n memoryRss: 0,\n uptimeSeconds: Math.round((Date.now() - this.startedAt) / 1000),\n restartCount: this.restartCount,\n state: this.child.exitCode !== null ? 'stopped' : 'running',\n }\n }\n\n write(data: Buffer): void {\n this.child.stdin?.write(data)\n }\n\n get stdout(): AsyncIterable<Buffer> {\n return this.child.stdout as AsyncIterable<Buffer>\n }\n\n get stderr(): AsyncIterable<Buffer> {\n return this.child.stderr as AsyncIterable<Buffer>\n }\n\n kill(signal: NodeJS.Signals = 'SIGTERM'): void {\n this.child.kill(signal)\n }\n\n wait(): Promise<{ code: number | null; signal: string | null }> {\n if (this.child.exitCode !== null) {\n return Promise.resolve({ code: this.child.exitCode, signal: null })\n }\n return new Promise((resolve) => {\n this.child.on('exit', (code, signal) => {\n resolve({ code, signal })\n })\n })\n }\n\n onExit(handler: (code: number | null) => void): void {\n this.exitHandlers.push(handler)\n }\n\n onError(handler: (error: Error) => void): void {\n this.errorHandlers.push(handler)\n }\n\n toInfo(): SubProcessInfo {\n return {\n pid: this.pid,\n name: this.name,\n command: this.config.command,\n state: this.child.exitCode !== null ? 'stopped' : 'running',\n cpuPercent: 0,\n memoryRss: 0,\n uptimeSeconds: Math.round((Date.now() - this.startedAt) / 1000),\n }\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.mts CHANGED
@@ -6,6 +6,8 @@ interface RegisteredAddon {
6
6
  readonly declaration: AddonDeclaration;
7
7
  readonly packageName: string;
8
8
  readonly packageVersion: string;
9
+ /** Human-readable package name from camstack.displayName in package.json */
10
+ readonly packageDisplayName?: string;
9
11
  readonly addonClass: new () => ICamstackAddon;
10
12
  }
11
13
  declare class AddonLoader {
@@ -370,24 +372,24 @@ declare const bootstrapSchema: z.ZodObject<{
370
372
  keyPath?: string | undefined;
371
373
  }>>;
372
374
  }, "strip", z.ZodTypeAny, {
373
- hub: {
374
- url: string;
375
- token: string;
376
- };
377
375
  agent: {
378
376
  name: string;
379
377
  statusPort: number;
380
378
  };
381
- mode: "hub" | "agent";
379
+ mode: "agent" | "hub";
380
+ auth: {
381
+ jwtSecret: string | null;
382
+ adminUsername: string;
383
+ adminPassword: string;
384
+ };
382
385
  server: {
383
386
  port: number;
384
387
  host: string;
385
388
  dataPath: string;
386
389
  };
387
- auth: {
388
- jwtSecret: string | null;
389
- adminUsername: string;
390
- adminPassword: string;
390
+ hub: {
391
+ url: string;
392
+ token: string;
391
393
  };
392
394
  tls: {
393
395
  enabled: boolean;
@@ -395,24 +397,24 @@ declare const bootstrapSchema: z.ZodObject<{
395
397
  keyPath?: string | undefined;
396
398
  };
397
399
  }, {
398
- hub?: {
399
- url?: string | undefined;
400
- token?: string | undefined;
401
- } | undefined;
402
400
  agent?: {
403
401
  name?: string | undefined;
404
402
  statusPort?: number | undefined;
405
403
  } | undefined;
406
- mode?: "hub" | "agent" | undefined;
404
+ mode?: "agent" | "hub" | undefined;
405
+ auth?: {
406
+ jwtSecret?: string | null | undefined;
407
+ adminUsername?: string | undefined;
408
+ adminPassword?: string | undefined;
409
+ } | undefined;
407
410
  server?: {
408
411
  port?: number | undefined;
409
412
  host?: string | undefined;
410
413
  dataPath?: string | undefined;
411
414
  } | undefined;
412
- auth?: {
413
- jwtSecret?: string | null | undefined;
414
- adminUsername?: string | undefined;
415
- adminPassword?: string | undefined;
415
+ hub?: {
416
+ url?: string | undefined;
417
+ token?: string | undefined;
416
418
  } | undefined;
417
419
  tls?: {
418
420
  enabled?: boolean | undefined;
package/dist/index.d.ts CHANGED
@@ -6,6 +6,8 @@ interface RegisteredAddon {
6
6
  readonly declaration: AddonDeclaration;
7
7
  readonly packageName: string;
8
8
  readonly packageVersion: string;
9
+ /** Human-readable package name from camstack.displayName in package.json */
10
+ readonly packageDisplayName?: string;
9
11
  readonly addonClass: new () => ICamstackAddon;
10
12
  }
11
13
  declare class AddonLoader {
@@ -370,24 +372,24 @@ declare const bootstrapSchema: z.ZodObject<{
370
372
  keyPath?: string | undefined;
371
373
  }>>;
372
374
  }, "strip", z.ZodTypeAny, {
373
- hub: {
374
- url: string;
375
- token: string;
376
- };
377
375
  agent: {
378
376
  name: string;
379
377
  statusPort: number;
380
378
  };
381
- mode: "hub" | "agent";
379
+ mode: "agent" | "hub";
380
+ auth: {
381
+ jwtSecret: string | null;
382
+ adminUsername: string;
383
+ adminPassword: string;
384
+ };
382
385
  server: {
383
386
  port: number;
384
387
  host: string;
385
388
  dataPath: string;
386
389
  };
387
- auth: {
388
- jwtSecret: string | null;
389
- adminUsername: string;
390
- adminPassword: string;
390
+ hub: {
391
+ url: string;
392
+ token: string;
391
393
  };
392
394
  tls: {
393
395
  enabled: boolean;
@@ -395,24 +397,24 @@ declare const bootstrapSchema: z.ZodObject<{
395
397
  keyPath?: string | undefined;
396
398
  };
397
399
  }, {
398
- hub?: {
399
- url?: string | undefined;
400
- token?: string | undefined;
401
- } | undefined;
402
400
  agent?: {
403
401
  name?: string | undefined;
404
402
  statusPort?: number | undefined;
405
403
  } | undefined;
406
- mode?: "hub" | "agent" | undefined;
404
+ mode?: "agent" | "hub" | undefined;
405
+ auth?: {
406
+ jwtSecret?: string | null | undefined;
407
+ adminUsername?: string | undefined;
408
+ adminPassword?: string | undefined;
409
+ } | undefined;
407
410
  server?: {
408
411
  port?: number | undefined;
409
412
  host?: string | undefined;
410
413
  dataPath?: string | undefined;
411
414
  } | undefined;
412
- auth?: {
413
- jwtSecret?: string | null | undefined;
414
- adminUsername?: string | undefined;
415
- adminPassword?: string | undefined;
415
+ hub?: {
416
+ url?: string | undefined;
417
+ token?: string | undefined;
416
418
  } | undefined;
417
419
  tls?: {
418
420
  enabled?: boolean | undefined;