borgmcp-server 0.1.1

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 (71) hide show
  1. package/LICENSE +105 -0
  2. package/NOTICE +8 -0
  3. package/README.md +119 -0
  4. package/SECURITY.md +38 -0
  5. package/THIRD_PARTY_NOTICES.md +35 -0
  6. package/dist/bootstrap.d.ts +18 -0
  7. package/dist/bootstrap.js +104 -0
  8. package/dist/bootstrap.js.map +1 -0
  9. package/dist/cli.d.ts +7 -0
  10. package/dist/cli.js +96 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/coordination-api.d.ts +25 -0
  13. package/dist/coordination-api.js +457 -0
  14. package/dist/coordination-api.js.map +1 -0
  15. package/dist/credentials.d.ts +58 -0
  16. package/dist/credentials.js +244 -0
  17. package/dist/credentials.js.map +1 -0
  18. package/dist/enrollment.d.ts +17 -0
  19. package/dist/enrollment.js +122 -0
  20. package/dist/enrollment.js.map +1 -0
  21. package/dist/https-server.d.ts +94 -0
  22. package/dist/https-server.js +814 -0
  23. package/dist/https-server.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/main.d.ts +3 -0
  28. package/dist/main.js +67 -0
  29. package/dist/main.js.map +1 -0
  30. package/dist/migrations.d.ts +8 -0
  31. package/dist/migrations.js +366 -0
  32. package/dist/migrations.js.map +1 -0
  33. package/dist/network-policy.d.ts +13 -0
  34. package/dist/network-policy.js +49 -0
  35. package/dist/network-policy.js.map +1 -0
  36. package/dist/operator-error.d.ts +3 -0
  37. package/dist/operator-error.js +63 -0
  38. package/dist/operator-error.js.map +1 -0
  39. package/dist/principal.d.ts +32 -0
  40. package/dist/principal.js +64 -0
  41. package/dist/principal.js.map +1 -0
  42. package/dist/protocol-draft.d.ts +2 -0
  43. package/dist/protocol-draft.js +31 -0
  44. package/dist/protocol-draft.js.map +1 -0
  45. package/dist/service.d.ts +61 -0
  46. package/dist/service.js +455 -0
  47. package/dist/service.js.map +1 -0
  48. package/dist/start-options.d.ts +2 -0
  49. package/dist/start-options.js +46 -0
  50. package/dist/start-options.js.map +1 -0
  51. package/dist/store.d.ts +327 -0
  52. package/dist/store.js +1729 -0
  53. package/dist/store.js.map +1 -0
  54. package/npm-shrinkwrap.json +1942 -0
  55. package/package.json +60 -0
  56. package/src/bootstrap.ts +127 -0
  57. package/src/cli.ts +102 -0
  58. package/src/coordination-api.ts +508 -0
  59. package/src/credentials.ts +319 -0
  60. package/src/enrollment.ts +156 -0
  61. package/src/https-server.ts +962 -0
  62. package/src/index.ts +3 -0
  63. package/src/main.ts +73 -0
  64. package/src/migrations.ts +394 -0
  65. package/src/network-policy.ts +65 -0
  66. package/src/operator-error.ts +97 -0
  67. package/src/principal.ts +106 -0
  68. package/src/protocol-draft.ts +32 -0
  69. package/src/service.ts +525 -0
  70. package/src/start-options.ts +46 -0
  71. package/src/store.ts +2316 -0
@@ -0,0 +1,455 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { lstat, open, readFile, unlink } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { bootstrapServer, loadDigestKey, loadTlsPrivateKey, } from "./bootstrap.js";
6
+ import { CredentialAuthority, CredentialDigester } from "./credentials.js";
7
+ import { CoordinationApi } from "./coordination-api.js";
8
+ import { createEnrollmentExchange } from "./enrollment.js";
9
+ import { DEFAULT_SERVICE_LIMITS, startHttpsServer, } from "./https-server.js";
10
+ import { createPart2ProtocolInfo } from "./protocol-draft.js";
11
+ import { resolveBindOptions } from "./network-policy.js";
12
+ import { operatorErrors } from "./operator-error.js";
13
+ import { parseStartOptions } from "./start-options.js";
14
+ import { DEFAULT_STORAGE_LIMITS, openStore } from "./store.js";
15
+ const guardedRuntimeFailures = new Set();
16
+ let nodeServerTestHooks;
17
+ export function installNodeServerTestHooks(hooks) {
18
+ if (nodeServerTestHooks !== undefined)
19
+ throw new Error("Node server test hooks are already installed.");
20
+ nodeServerTestHooks = Object.freeze({ ...hooks });
21
+ return () => {
22
+ nodeServerTestHooks = undefined;
23
+ };
24
+ }
25
+ export function createNodeServerService(dependencies) {
26
+ return {
27
+ async start(args) {
28
+ const shutdown = dependencies.installShutdownHandlers?.();
29
+ let bind;
30
+ let dataDirectory;
31
+ let storageLimits;
32
+ try {
33
+ throwIfShutdown(shutdown?.signal);
34
+ await dependencies.onStartupPhase?.("pre-lock");
35
+ throwIfShutdown(shutdown?.signal);
36
+ bind = parseStartOptions(args);
37
+ const bindMode = resolveBindOptions(bind).mode;
38
+ dataDirectory = dependencies.environment.BORG_SERVER_DATA_DIR;
39
+ storageLimits = resolveStorageLimits(dependencies.environment);
40
+ if (bindMode === "lan" && dataDirectory !== undefined) {
41
+ await assertLanCaKeyOffline(dataDirectory);
42
+ throwIfShutdown(shutdown?.signal);
43
+ }
44
+ }
45
+ catch (error) {
46
+ shutdown?.dispose();
47
+ if (error instanceof ShutdownRequestedError)
48
+ return;
49
+ throw error;
50
+ }
51
+ const keyPath = dependencies.environment.BORG_SERVER_TLS_KEY_FILE ??
52
+ (dataDirectory === undefined ? undefined : join(dataDirectory, "server.key"));
53
+ const certificatePath = dependencies.environment.BORG_SERVER_TLS_CERT_FILE ??
54
+ (dataDirectory === undefined ? undefined : join(dataDirectory, "server.crt"));
55
+ const caPath = dependencies.environment.BORG_SERVER_TLS_CA_FILE ??
56
+ (dataDirectory === undefined ? undefined : join(dataDirectory, "ca.crt"));
57
+ if (keyPath === undefined || certificatePath === undefined) {
58
+ shutdown?.dispose();
59
+ throw operatorErrors.SERVER_FILES_MISSING;
60
+ }
61
+ let runtimeLock;
62
+ try {
63
+ runtimeLock = dataDirectory === undefined ? undefined : await acquireRuntimeLock(dataDirectory);
64
+ await dependencies.onStartupPhase?.("post-lock");
65
+ throwIfShutdown(shutdown?.signal);
66
+ }
67
+ catch (error) {
68
+ await runtimeLock?.release().catch(() => undefined);
69
+ shutdown?.dispose();
70
+ if (error instanceof ShutdownRequestedError)
71
+ return;
72
+ throw error;
73
+ }
74
+ let running;
75
+ let key;
76
+ try {
77
+ throwIfShutdown(shutdown?.signal);
78
+ key = await dependencies.readPrivateKey(keyPath);
79
+ throwIfShutdown(shutdown?.signal);
80
+ }
81
+ catch (error) {
82
+ key?.fill(0);
83
+ await runtimeLock?.release().catch(() => undefined);
84
+ shutdown?.dispose();
85
+ if (error instanceof ShutdownRequestedError)
86
+ return;
87
+ throw error;
88
+ }
89
+ if (key === undefined)
90
+ throw new Error("TLS private key is unavailable.");
91
+ let authRuntime;
92
+ let digester;
93
+ try {
94
+ const cert = await dependencies.readFile(certificatePath);
95
+ throwIfShutdown(shutdown?.signal);
96
+ const ca = caPath === undefined ? undefined : await dependencies.readFile(caPath);
97
+ throwIfShutdown(shutdown?.signal);
98
+ let authority;
99
+ let coordinationApi;
100
+ if (dataDirectory !== undefined) {
101
+ authRuntime = await (dependencies.openStore ?? openStore)({
102
+ path: join(dataDirectory, "borg.db"),
103
+ storageLimits,
104
+ });
105
+ throwIfShutdown(shutdown?.signal);
106
+ const digestKey = await loadDigestKey(join(dataDirectory, "credential-digest.key"));
107
+ try {
108
+ throwIfShutdown(shutdown?.signal);
109
+ digester = new CredentialDigester(digestKey);
110
+ }
111
+ finally {
112
+ digestKey.fill(0);
113
+ }
114
+ authority = new CredentialAuthority(authRuntime.credentials, digester);
115
+ coordinationApi = new CoordinationApi(authRuntime, authority);
116
+ }
117
+ await dependencies.onStartupPhase?.("pre-listen");
118
+ throwIfShutdown(shutdown?.signal);
119
+ running = await dependencies.startServer({
120
+ bind,
121
+ tls: { key, cert, ...(ca === undefined ? {} : { ca }) },
122
+ limits: DEFAULT_SERVICE_LIMITS,
123
+ protocolInfo: createPart2ProtocolInfo(DEFAULT_SERVICE_LIMITS),
124
+ authorizeProtocol: async (authorization) => {
125
+ if (authority === undefined)
126
+ return false;
127
+ const result = authority.authenticateStatus(authorization);
128
+ return typeof result === "object" ? true : result;
129
+ },
130
+ ...(authority === undefined
131
+ ? {}
132
+ : { exchangeEnrollment: createEnrollmentExchange(authority) }),
133
+ ...(authority === undefined
134
+ ? {}
135
+ : {
136
+ authorizeCoordination: async (authorization) => {
137
+ return authority.authenticateStatus(authorization);
138
+ },
139
+ }),
140
+ ...(coordinationApi === undefined
141
+ ? {}
142
+ : { handleCoordination: (request) => coordinationApi.handle(request) }),
143
+ });
144
+ throwIfShutdown(shutdown?.signal);
145
+ }
146
+ catch (error) {
147
+ try {
148
+ await teardownRuntime({ running, authRuntime, digester, runtimeLock });
149
+ }
150
+ catch (cleanupError) {
151
+ shutdown?.dispose();
152
+ throw fatalTeardownError(error, cleanupError);
153
+ }
154
+ shutdown?.dispose();
155
+ if (error instanceof ShutdownRequestedError)
156
+ return;
157
+ throw error;
158
+ }
159
+ finally {
160
+ key.fill(0);
161
+ }
162
+ let failed = false;
163
+ let failure;
164
+ try {
165
+ throwIfShutdown(shutdown?.signal);
166
+ dependencies.onStarted(running.origin);
167
+ await dependencies.waitForShutdown(running, shutdown?.signal);
168
+ }
169
+ catch (error) {
170
+ failed = true;
171
+ failure = error;
172
+ }
173
+ try {
174
+ await teardownRuntime({ running, authRuntime, digester, runtimeLock });
175
+ }
176
+ catch (cleanupError) {
177
+ shutdown?.dispose();
178
+ throw fatalTeardownError(failed ? failure : undefined, cleanupError);
179
+ }
180
+ shutdown?.dispose();
181
+ if (failure instanceof ShutdownRequestedError)
182
+ return;
183
+ if (failed)
184
+ throw failure;
185
+ },
186
+ };
187
+ }
188
+ export async function assertLanCaKeyOffline(runtimeDataDirectory) {
189
+ try {
190
+ await lstat(join(runtimeDataDirectory, "ca.key"));
191
+ }
192
+ catch (error) {
193
+ if (error.code === "ENOENT")
194
+ return;
195
+ throw error;
196
+ }
197
+ throw operatorErrors.LAN_CA_KEY_ONLINE;
198
+ }
199
+ export function selectServerEnvironment(environment) {
200
+ const keyFile = environment["BORG_SERVER_TLS_KEY_FILE"];
201
+ const certificateFile = environment["BORG_SERVER_TLS_CERT_FILE"];
202
+ const caFile = environment["BORG_SERVER_TLS_CA_FILE"];
203
+ const dataDirectory = environment["BORG_SERVER_DATA_DIR"];
204
+ const bindHost = environment["BORG_SERVER_BIND_HOST"];
205
+ const maxActivityEntries = environment["BORG_SERVER_MAX_ACTIVITY_ENTRIES_PER_CUBE"];
206
+ const maxDatabaseBytes = environment["BORG_SERVER_MAX_DATABASE_BYTES"];
207
+ const minFreeDiskBytes = environment["BORG_SERVER_MIN_FREE_DISK_BYTES"];
208
+ return {
209
+ ...(keyFile === undefined ? {} : { BORG_SERVER_TLS_KEY_FILE: keyFile }),
210
+ ...(certificateFile === undefined
211
+ ? {}
212
+ : { BORG_SERVER_TLS_CERT_FILE: certificateFile }),
213
+ ...(caFile === undefined ? {} : { BORG_SERVER_TLS_CA_FILE: caFile }),
214
+ ...(dataDirectory === undefined ? {} : { BORG_SERVER_DATA_DIR: dataDirectory }),
215
+ ...(bindHost === undefined ? {} : { BORG_SERVER_BIND_HOST: bindHost }),
216
+ ...(maxActivityEntries === undefined
217
+ ? {}
218
+ : { BORG_SERVER_MAX_ACTIVITY_ENTRIES_PER_CUBE: maxActivityEntries }),
219
+ ...(maxDatabaseBytes === undefined ? {} : { BORG_SERVER_MAX_DATABASE_BYTES: maxDatabaseBytes }),
220
+ ...(minFreeDiskBytes === undefined ? {} : { BORG_SERVER_MIN_FREE_DISK_BYTES: minFreeDiskBytes }),
221
+ };
222
+ }
223
+ export function resolveStorageLimits(environment) {
224
+ return {
225
+ maxActivityEntriesPerCube: positiveEnvironmentInteger(environment.BORG_SERVER_MAX_ACTIVITY_ENTRIES_PER_CUBE, DEFAULT_STORAGE_LIMITS.maxActivityEntriesPerCube, "BORG_SERVER_MAX_ACTIVITY_ENTRIES_PER_CUBE"),
226
+ maxDatabaseBytes: positiveEnvironmentInteger(environment.BORG_SERVER_MAX_DATABASE_BYTES, DEFAULT_STORAGE_LIMITS.maxDatabaseBytes, "BORG_SERVER_MAX_DATABASE_BYTES"),
227
+ minFreeDiskBytes: positiveEnvironmentInteger(environment.BORG_SERVER_MIN_FREE_DISK_BYTES, DEFAULT_STORAGE_LIMITS.minFreeDiskBytes, "BORG_SERVER_MIN_FREE_DISK_BYTES"),
228
+ };
229
+ }
230
+ function positiveEnvironmentInteger(value, fallback, name) {
231
+ if (value === undefined)
232
+ return fallback;
233
+ const code = storageOperatorErrorCode(name);
234
+ if (!/^[1-9][0-9]*$/u.test(value))
235
+ throw operatorErrors[code];
236
+ const parsed = Number(value);
237
+ if (!Number.isSafeInteger(parsed))
238
+ throw operatorErrors[code];
239
+ return parsed;
240
+ }
241
+ function storageOperatorErrorCode(name) {
242
+ if (name === "BORG_SERVER_MAX_ACTIVITY_ENTRIES_PER_CUBE")
243
+ return "ACTIVITY_LIMIT_INVALID";
244
+ if (name === "BORG_SERVER_MAX_DATABASE_BYTES")
245
+ return "DATABASE_LIMIT_INVALID";
246
+ if (name === "BORG_SERVER_MIN_FREE_DISK_BYTES")
247
+ return "DISK_RESERVE_INVALID";
248
+ throw new Error("Unknown storage environment setting.");
249
+ }
250
+ const serverEnvironment = selectServerEnvironment(process.env);
251
+ const dataDirectory = serverEnvironment.BORG_SERVER_DATA_DIR ?? join(homedir(), ".borg", "server");
252
+ const startOnlyService = createNodeServerService({
253
+ environment: { ...serverEnvironment, BORG_SERVER_DATA_DIR: dataDirectory },
254
+ readFile,
255
+ readPrivateKey: loadTlsPrivateKey,
256
+ startServer: async (options) => {
257
+ const running = await startHttpsServer(options);
258
+ return nodeServerTestHooks?.wrapRunningServer?.(running) ?? running;
259
+ },
260
+ onStarted: (origin) => {
261
+ console.error(`Borg server listening on ${origin}`);
262
+ nodeServerTestHooks?.onListening?.(origin);
263
+ },
264
+ onStartupPhase: (phase) => nodeServerTestHooks?.onStartupPhase?.(phase) ?? Promise.resolve(),
265
+ installShutdownHandlers: () => {
266
+ const handlers = installProcessShutdownHandlers();
267
+ handlers.signal.addEventListener("abort", () => nodeServerTestHooks?.onSignalObserved?.(), {
268
+ once: true,
269
+ });
270
+ return handlers;
271
+ },
272
+ waitForShutdown,
273
+ });
274
+ export const nodeServerService = {
275
+ start: startOnlyService.start,
276
+ setup: () => bootstrapServer(dataDirectory, resolveSetupBindHost(serverEnvironment)),
277
+ ...createOfflineCredentialService(dataDirectory),
278
+ };
279
+ function resolveSetupBindHost(environment) {
280
+ return resolveBindOptions({
281
+ ...(environment.BORG_SERVER_BIND_HOST === undefined
282
+ ? {}
283
+ : { host: environment.BORG_SERVER_BIND_HOST }),
284
+ lanConsent: true,
285
+ }).host;
286
+ }
287
+ export function createOfflineCredentialService(offlineDataDirectory) {
288
+ const withAuthority = async (operation) => {
289
+ const runtimeLock = await acquireRuntimeLock(offlineDataDirectory);
290
+ let runtime;
291
+ let digester;
292
+ try {
293
+ runtime = await openStore({ path: join(offlineDataDirectory, "borg.db") });
294
+ const digestKey = await loadDigestKey(join(offlineDataDirectory, "credential-digest.key"));
295
+ digester = new CredentialDigester(digestKey);
296
+ digestKey.fill(0);
297
+ return operation(new CredentialAuthority(runtime.credentials, digester), runtime);
298
+ }
299
+ finally {
300
+ digester?.destroy();
301
+ runtime?.close();
302
+ await runtimeLock.release();
303
+ }
304
+ };
305
+ return {
306
+ rotateClient: (clientId) => withAuthority((authority) => authority.rotateClient(clientId)),
307
+ revokeClient: (clientId) => withAuthority((authority) => authority.revokeClient(clientId)),
308
+ grantClient: (clientId, cubeId, access) => withAuthority((_authority, runtime) => {
309
+ if (!runtime.credentials.clientIsActive(clientId)) {
310
+ throw operatorErrors.CLIENT_NOT_FOUND;
311
+ }
312
+ runtime.maintenance.grantClientCube({ clientId, cubeId, access });
313
+ }),
314
+ ungrantClient: (clientId, cubeId) => withAuthority((_authority, runtime) => {
315
+ if (!runtime.credentials.clientIsActive(clientId))
316
+ throw operatorErrors.CLIENT_NOT_FOUND;
317
+ if (!runtime.maintenance.removeClientCubeGrant(clientId, cubeId)) {
318
+ throw operatorErrors.GRANT_NOT_FOUND;
319
+ }
320
+ }),
321
+ createClientInvitation: (recoveryCredential) => withAuthority((authority) => {
322
+ const invitation = authority.createInvitation(recoveryCredential, 15 * 60_000);
323
+ if (invitation === null)
324
+ throw operatorErrors.RECOVERY_INVALID;
325
+ return invitation;
326
+ }),
327
+ replaceOwnerInvitation: (recoveryCredential) => withAuthority((authority) => {
328
+ const invitation = authority.replaceOwnerInvitation(recoveryCredential, 15 * 60_000);
329
+ if (invitation === null)
330
+ throw operatorErrors.RECOVERY_INVALID;
331
+ return invitation;
332
+ }),
333
+ };
334
+ }
335
+ async function teardownRuntime(resources) {
336
+ try {
337
+ await resources.running?.close();
338
+ }
339
+ catch (error) {
340
+ guardedRuntimeFailures.add(Object.freeze({ ...resources }));
341
+ throw error;
342
+ }
343
+ try {
344
+ resources.authRuntime?.close();
345
+ resources.digester?.destroy();
346
+ }
347
+ catch (error) {
348
+ guardedRuntimeFailures.add(Object.freeze({ ...resources, running: undefined }));
349
+ throw error;
350
+ }
351
+ await resources.runtimeLock?.release();
352
+ }
353
+ const fatalTeardownErrors = new WeakSet();
354
+ const fatalTeardownCapability = Object.freeze({});
355
+ class FatalTeardownError extends AggregateError {
356
+ constructor(capability, primary, cleanup) {
357
+ super(primary === undefined ? [cleanup] : [primary, cleanup], "Server teardown could not be confirmed; the runtime remains locked.");
358
+ if (capability !== fatalTeardownCapability) {
359
+ throw new Error("Fatal teardown error construction is unavailable.");
360
+ }
361
+ this.name = "FatalTeardownError";
362
+ fatalTeardownErrors.add(this);
363
+ Object.freeze(this);
364
+ }
365
+ }
366
+ export function isFatalTeardownError(error) {
367
+ return typeof error === "object" && error !== null && fatalTeardownErrors.has(error);
368
+ }
369
+ function fatalTeardownError(primary, cleanup) {
370
+ return new FatalTeardownError(fatalTeardownCapability, primary, cleanup);
371
+ }
372
+ export async function acquireRuntimeLock(runtimeDataDirectory) {
373
+ const path = join(runtimeDataDirectory, "runtime.lock");
374
+ const nonce = randomUUID();
375
+ try {
376
+ const handle = await open(path, "wx", 0o600);
377
+ try {
378
+ await handle.writeFile(JSON.stringify({ pid: process.pid, nonce }));
379
+ }
380
+ catch (error) {
381
+ await handle.close();
382
+ await unlink(path).catch(() => undefined);
383
+ throw error;
384
+ }
385
+ return {
386
+ release: async () => {
387
+ await handle.close();
388
+ try {
389
+ const current = JSON.parse(await readFile(path, "utf8"));
390
+ if (current.nonce === nonce)
391
+ await unlink(path);
392
+ }
393
+ catch (error) {
394
+ if (error.code !== "ENOENT")
395
+ throw error;
396
+ }
397
+ },
398
+ };
399
+ }
400
+ catch (error) {
401
+ if (error.code !== "EEXIST")
402
+ throw error;
403
+ const metadata = await lstat(path);
404
+ if (!metadata.isFile() || metadata.isSymbolicLink() || (metadata.mode & 0o077) !== 0) {
405
+ throw operatorErrors.RUNTIME_LOCK_UNSAFE;
406
+ }
407
+ let pid;
408
+ try {
409
+ const value = JSON.parse(await readFile(path, "utf8"));
410
+ if (!Number.isSafeInteger(value.pid) || value.pid <= 0)
411
+ throw new Error();
412
+ pid = value.pid;
413
+ }
414
+ catch {
415
+ throw operatorErrors.RUNTIME_LOCK_INVALID;
416
+ }
417
+ if (processIsAlive(pid))
418
+ throw operatorErrors.RUNTIME_ACTIVE;
419
+ throw operatorErrors.RUNTIME_LOCK_STALE;
420
+ }
421
+ }
422
+ function processIsAlive(pid) {
423
+ try {
424
+ process.kill(pid, 0);
425
+ return true;
426
+ }
427
+ catch (error) {
428
+ return error.code !== "ESRCH";
429
+ }
430
+ }
431
+ class ShutdownRequestedError extends Error {
432
+ }
433
+ function throwIfShutdown(signal) {
434
+ if (signal?.aborted === true)
435
+ throw new ShutdownRequestedError("Server shutdown requested.");
436
+ }
437
+ export function installProcessShutdownHandlers() {
438
+ const controller = new AbortController();
439
+ const stop = () => controller.abort();
440
+ process.once("SIGINT", stop);
441
+ process.once("SIGTERM", stop);
442
+ return {
443
+ signal: controller.signal,
444
+ dispose: () => {
445
+ process.off("SIGINT", stop);
446
+ process.off("SIGTERM", stop);
447
+ },
448
+ };
449
+ }
450
+ function waitForShutdown(_server, signal) {
451
+ if (signal?.aborted === true)
452
+ return Promise.resolve();
453
+ return new Promise((resolve) => signal?.addEventListener("abort", () => resolve(), { once: true }));
454
+ }
455
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { BindOptionsInput } from "./network-policy.js";
2
+ export declare function parseStartOptions(args: readonly string[]): BindOptionsInput;
@@ -0,0 +1,46 @@
1
+ import { operatorErrors } from "./operator-error.js";
2
+ export function parseStartOptions(args) {
3
+ let host;
4
+ let port;
5
+ let lanConsent = false;
6
+ for (let index = 0; index < args.length; index += 1) {
7
+ const argument = args[index];
8
+ if (argument === "--lan") {
9
+ if (lanConsent)
10
+ throw operatorErrors.START_LAN_DUPLICATE;
11
+ lanConsent = true;
12
+ continue;
13
+ }
14
+ if (argument === "--host") {
15
+ if (host !== undefined)
16
+ throw operatorErrors.START_HOST_DUPLICATE;
17
+ host = requiredValue(args, index, "START_HOST_MISSING");
18
+ index += 1;
19
+ continue;
20
+ }
21
+ if (argument === "--port") {
22
+ if (port !== undefined)
23
+ throw operatorErrors.START_PORT_DUPLICATE;
24
+ const value = requiredValue(args, index, "START_PORT_MISSING");
25
+ if (!/^\d+$/u.test(value))
26
+ throw operatorErrors.START_PORT_INVALID;
27
+ port = Number(value);
28
+ index += 1;
29
+ continue;
30
+ }
31
+ throw operatorErrors.START_OPTION_UNKNOWN;
32
+ }
33
+ return {
34
+ ...(host === undefined ? {} : { host }),
35
+ ...(port === undefined ? {} : { port }),
36
+ ...(lanConsent ? { lanConsent: true } : {}),
37
+ };
38
+ }
39
+ function requiredValue(args, index, code) {
40
+ const value = args[index + 1];
41
+ if (value === undefined || value.startsWith("--")) {
42
+ throw operatorErrors[code];
43
+ }
44
+ return value;
45
+ }
46
+ //# sourceMappingURL=start-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-options.js","sourceRoot":"","sources":["../src/start-options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA0B,MAAM,qBAAqB,CAAC;AAE7E,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,IAAwB,CAAC;IAC7B,IAAI,IAAwB,CAAC;IAC7B,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,UAAU;gBAAE,MAAM,cAAc,CAAC,mBAAmB,CAAC;YACzD,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,cAAc,CAAC,oBAAoB,CAAC;YAClE,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;YACxD,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,cAAc,CAAC,oBAAoB,CAAC;YAClE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,cAAc,CAAC,kBAAkB,CAAC;YACnE,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,cAAc,CAAC,oBAAoB,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAuB,EAAE,KAAa,EAAE,IAAuB;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}