@inoceanlee/brc 2.1.1 → 2.1.2

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 (99) hide show
  1. package/dist/cli.js +68 -16
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/setup.d.ts +14 -0
  4. package/dist/commands/setup.js +57 -0
  5. package/dist/commands/setup.js.map +1 -0
  6. package/dist/config/manager.js +16 -8
  7. package/dist/config/manager.js.map +1 -1
  8. package/dist/config/settings.d.ts +5 -1
  9. package/dist/config/settings.js +5 -1
  10. package/dist/config/settings.js.map +1 -1
  11. package/dist/lifecycle/identity.d.ts +8 -0
  12. package/dist/lifecycle/identity.js +126 -0
  13. package/dist/lifecycle/identity.js.map +1 -0
  14. package/dist/lifecycle/lock-store.d.ts +28 -0
  15. package/dist/lifecycle/lock-store.js +204 -0
  16. package/dist/lifecycle/lock-store.js.map +1 -0
  17. package/dist/lifecycle/lock.d.ts +12 -3
  18. package/dist/lifecycle/lock.js +50 -74
  19. package/dist/lifecycle/lock.js.map +1 -1
  20. package/dist/lifecycle/processes.d.ts +5 -7
  21. package/dist/lifecycle/processes.js +106 -108
  22. package/dist/lifecycle/processes.js.map +1 -1
  23. package/dist/lifecycle/services.d.ts +1 -0
  24. package/dist/lifecycle/services.js +2 -5
  25. package/dist/lifecycle/services.js.map +1 -1
  26. package/dist/maintenance/cleanup.js +177 -71
  27. package/dist/maintenance/cleanup.js.map +1 -1
  28. package/dist/native/win32-x64/brc-process.exe +0 -0
  29. package/dist/progress.d.ts +29 -0
  30. package/dist/progress.js +159 -0
  31. package/dist/progress.js.map +1 -0
  32. package/dist/services/agent/cli.js +1 -2
  33. package/dist/services/agent/cli.js.map +1 -1
  34. package/dist/services/agent/core/config-field-definitions.d.ts +1 -0
  35. package/dist/services/agent/core/config-field-definitions.js +36 -0
  36. package/dist/services/agent/core/config-field-definitions.js.map +1 -1
  37. package/dist/services/agent/core/config-manager.d.ts +3 -5
  38. package/dist/services/agent/core/config-manager.js +64 -109
  39. package/dist/services/agent/core/config-manager.js.map +1 -1
  40. package/dist/services/agent/core/config-storage.d.ts +11 -0
  41. package/dist/services/agent/core/config-storage.js +66 -0
  42. package/dist/services/agent/core/config-storage.js.map +1 -0
  43. package/dist/services/agent/core/config.d.ts +5 -0
  44. package/dist/services/agent/core/config.js +5 -1
  45. package/dist/services/agent/core/config.js.map +1 -1
  46. package/dist/services/agent/core/handlers/filesystem-handlers.js +3 -2
  47. package/dist/services/agent/core/handlers/filesystem-handlers.js.map +1 -1
  48. package/dist/services/agent/core/tools/config.d.ts +3 -1
  49. package/dist/services/agent/core/tools/config.js +5 -66
  50. package/dist/services/agent/core/tools/config.js.map +1 -1
  51. package/dist/services/agent/core/tools/edit.js +2 -1
  52. package/dist/services/agent/core/tools/edit.js.map +1 -1
  53. package/dist/services/agent/core/tools/filesystem.js +15 -21
  54. package/dist/services/agent/core/tools/filesystem.js.map +1 -1
  55. package/dist/services/agent/core/tools/improved-process-tools.js +3 -2
  56. package/dist/services/agent/core/tools/improved-process-tools.js.map +1 -1
  57. package/dist/services/agent/core/tools/schemas.d.ts +2 -2
  58. package/dist/services/agent/core/tools/schemas.js +1 -1
  59. package/dist/services/agent/core/tools/schemas.js.map +1 -1
  60. package/dist/services/agent/core/utils/files/text-reader.d.ts +31 -0
  61. package/dist/services/agent/core/utils/files/text-reader.js +261 -0
  62. package/dist/services/agent/core/utils/files/text-reader.js.map +1 -0
  63. package/dist/services/agent/core/utils/files/text.d.ts +1 -25
  64. package/dist/services/agent/core/utils/files/text.js +6 -245
  65. package/dist/services/agent/core/utils/files/text.js.map +1 -1
  66. package/dist/services/agent/core/utils/fuzzySearchLogger.js +2 -2
  67. package/dist/services/agent/core/utils/fuzzySearchLogger.js.map +1 -1
  68. package/dist/services/agent/core/utils/toolHistory.d.ts +2 -1
  69. package/dist/services/agent/core/utils/toolHistory.js +65 -79
  70. package/dist/services/agent/core/utils/toolHistory.js.map +1 -1
  71. package/dist/services/agent/core/utils/toolHistoryStorage.d.ts +11 -0
  72. package/dist/services/agent/core/utils/toolHistoryStorage.js +135 -0
  73. package/dist/services/agent/core/utils/toolHistoryStorage.js.map +1 -0
  74. package/dist/services/agent/dispatcher.js +3 -5
  75. package/dist/services/agent/dispatcher.js.map +1 -1
  76. package/dist/services/agent/service.js +2 -1
  77. package/dist/services/agent/service.js.map +1 -1
  78. package/dist/services/agent/transport/pairing.js +24 -24
  79. package/dist/services/agent/transport/pairing.js.map +1 -1
  80. package/dist/services/relay/store/sqlite.d.ts +1 -6
  81. package/dist/services/relay/store/sqlite.js +84 -84
  82. package/dist/services/relay/store/sqlite.js.map +1 -1
  83. package/dist/traefik/core.d.ts +17 -5
  84. package/dist/traefik/core.js +70 -64
  85. package/dist/traefik/core.js.map +1 -1
  86. package/dist/traefik/input.d.ts +6 -7
  87. package/dist/traefik/input.js +46 -88
  88. package/dist/traefik/input.js.map +1 -1
  89. package/dist/traefik/manager.d.ts +13 -0
  90. package/dist/traefik/manager.js +64 -24
  91. package/dist/traefik/manager.js.map +1 -1
  92. package/dist/traefik/output.d.ts +9 -11
  93. package/dist/traefik/output.js +112 -46
  94. package/dist/traefik/output.js.map +1 -1
  95. package/dist/traefik/runtime.d.ts +1 -1
  96. package/dist/traefik/runtime.js +4 -3
  97. package/dist/traefik/runtime.js.map +1 -1
  98. package/node_modules/brc-shared/package.json +1 -1
  99. package/package.json +2 -2
@@ -1,7 +1,3 @@
1
- import { createHash, randomUUID } from 'node:crypto';
2
- import { createReadStream } from 'node:fs';
3
- import { lstat, mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
4
- import path from 'node:path';
5
1
  export const MAX_EXECUTABLE_BYTES = 512 * 1024 * 1024;
6
2
  export function errorCode(error) {
7
3
  return error && typeof error === 'object' && 'code' in error && typeof error.code === 'string'
@@ -25,64 +21,12 @@ export function parseManifest(value) {
25
21
  }
26
22
  return { version: 1, current: manifest.current, previous: manifest.previous };
27
23
  }
28
- export async function ensureSafeDirectory(root, directory) {
29
- const resolvedRoot = path.resolve(root);
30
- const resolvedDirectory = path.resolve(directory);
31
- const relative = path.relative(resolvedRoot, resolvedDirectory);
32
- if (relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
33
- throw new Error(`Traefik path is outside its installation directory: ${directory}`);
34
- }
35
- await mkdir(resolvedRoot, { recursive: true });
36
- let current = resolvedRoot;
37
- const rootInfo = await lstat(current);
38
- if (rootInfo.isSymbolicLink() || !rootInfo.isDirectory())
39
- throw new Error(`Traefik installation path is not a regular directory: ${current}`);
40
- if (relative === '')
41
- return;
42
- for (const segment of relative.split(path.sep)) {
43
- current = path.join(current, segment);
44
- try {
45
- await lstat(current);
46
- }
47
- catch (error) {
48
- if (errorCode(error) !== 'ENOENT')
49
- throw error;
50
- await mkdir(current);
51
- }
52
- const info = await lstat(current);
53
- if (info.isSymbolicLink() || !info.isDirectory())
54
- throw new Error(`Traefik path is not a regular directory: ${current}`);
55
- }
56
- }
57
- export async function ensureRegularFile(filename) {
58
- const info = await lstat(filename);
59
- if (info.isSymbolicLink() || !info.isFile())
60
- throw new Error(`Traefik path is not a regular file: ${filename}`);
61
- }
62
- export async function readManifest(root) {
63
- const filename = path.join(root, 'versions.json');
64
- try {
65
- await ensureRegularFile(filename);
66
- return parseManifest(JSON.parse(await readFile(filename, 'utf8')));
67
- }
68
- catch (error) {
69
- if (errorCode(error) === 'ENOENT')
70
- return null;
71
- throw error;
72
- }
73
- }
74
24
  export function safeArchivePath(value) {
75
25
  if (!value || value.includes('\\') || value.includes('\0') || value.startsWith('/') || /^[a-z]:/i.test(value))
76
26
  return false;
77
27
  const segments = value.endsWith('/') ? value.slice(0, -1).split('/') : value.split('/');
78
28
  return segments.length > 0 && segments.every((segment) => segment !== '' && segment !== '.' && segment !== '..');
79
29
  }
80
- export async function sha256File(filename) {
81
- const hash = createHash('sha256');
82
- for await (const chunk of createReadStream(filename))
83
- hash.update(chunk);
84
- return hash.digest('hex');
85
- }
86
30
  export function quoteYaml(value) {
87
31
  return JSON.stringify(value.replaceAll('\\', '/'));
88
32
  }
@@ -94,15 +38,77 @@ export function renderTemplate(template, replacements) {
94
38
  throw new Error('Traefik configuration has an unresolved template value.');
95
39
  return result;
96
40
  }
97
- export async function writeAtomic(filename, contents) {
98
- await mkdir(path.dirname(filename), { recursive: true });
99
- const temporary = `${filename}.${randomUUID()}.tmp`;
100
- try {
101
- await writeFile(temporary, contents, { encoding: 'utf8', mode: 0o600, flag: 'wx' });
102
- await rename(temporary, filename);
41
+ export function renderConfig({ templates, dynamicSettings, staticSettings, dynamicPath, generation }) {
42
+ return {
43
+ dynamicConfig: renderTemplate(templates.dynamicConfig, {
44
+ '@@BRC_RELAY_URL@@': quoteYaml(`http://127.0.0.1:${dynamicSettings.services.relayPort}`),
45
+ '@@BRC_RATE_AVERAGE@@': String(dynamicSettings.proxy.rate.average),
46
+ '@@BRC_RATE_PERIOD@@': quoteYaml(dynamicSettings.proxy.rate.period),
47
+ '@@BRC_RATE_BURST@@': String(dynamicSettings.proxy.rate.burst),
48
+ '@@BRC_CONCURRENT@@': String(dynamicSettings.proxy.concurrent),
49
+ '@@BRC_CONFIG_GENERATION@@': quoteYaml(generation),
50
+ }),
51
+ staticConfig: renderTemplate(templates.staticConfig, {
52
+ '@@BRC_WEB_ADDRESS@@': quoteYaml(`127.0.0.1:${staticSettings.services.proxyPort}`),
53
+ '@@BRC_HEALTH_ADDRESS@@': quoteYaml(`127.0.0.1:${staticSettings.services.healthPort}`),
54
+ '@@BRC_DYNAMIC_FILE@@': quoteYaml(dynamicPath),
55
+ }),
56
+ };
57
+ }
58
+ export function readChecksum(contents, filename) {
59
+ for (const line of contents.split(/\r?\n/)) {
60
+ const match = line.trim().match(/^([a-f\d]{64})\s+\*?(.+)$/i);
61
+ if (match?.[2] === filename)
62
+ return match[1].toLowerCase();
103
63
  }
104
- finally {
105
- await rm(temporary, { force: true });
64
+ throw new Error(`Official Traefik checksum file does not contain ${filename}.`);
65
+ }
66
+ export function parseRelease(value) {
67
+ if (!value || typeof value !== 'object' || Array.isArray(value))
68
+ throw new Error('Official Traefik release metadata is malformed.');
69
+ const release = value;
70
+ if (release.draft !== false || release.prerelease !== false || typeof release.tag_name !== 'string') {
71
+ throw new Error('The latest Traefik release is not a stable release.');
106
72
  }
73
+ const match = release.tag_name.match(/^v(\d+\.\d+\.\d+)$/);
74
+ if (!match)
75
+ throw new Error(`Official Traefik release tag is invalid: ${release.tag_name}`);
76
+ const version = match[1];
77
+ const archiveName = `traefik_v${version}_windows_amd64.zip`;
78
+ const checksumName = `traefik_v${version}_checksums.txt`;
79
+ if (!Array.isArray(release.assets))
80
+ throw new Error('Official Traefik release has no asset list.');
81
+ const assets = release.assets;
82
+ const findAsset = (name) => {
83
+ const asset = assets.find((item) => item && typeof item === 'object' && item.name === name);
84
+ const url = asset?.browser_download_url;
85
+ const expected = `https://github.com/traefik/traefik/releases/download/v${version}/${name}`;
86
+ if (url !== expected)
87
+ throw new Error(`Official Traefik asset is missing or has an unexpected URL: ${name}`);
88
+ return expected;
89
+ };
90
+ return { version, archiveName, archiveUrl: findAsset(archiveName), checksumUrl: findAsset(checksumName) };
91
+ }
92
+ export function validateArchiveEntries(entries) {
93
+ const names = new Set();
94
+ let executable;
95
+ for (const entry of entries) {
96
+ if (!safeArchivePath(entry.path))
97
+ throw new Error(`Traefik ZIP contains an unsafe path: ${entry.path}`);
98
+ if (names.has(entry.path))
99
+ throw new Error(`Traefik ZIP contains a duplicate path: ${entry.path}`);
100
+ names.add(entry.path);
101
+ if (entry.path === 'traefik.exe' && entry.type === 'File')
102
+ executable = entry;
103
+ }
104
+ const size = executable?.uncompressedSize;
105
+ if (!executable || typeof size !== 'number' || size < 1 || size > MAX_EXECUTABLE_BYTES) {
106
+ throw new Error('Traefik ZIP does not contain a valid root-level traefik.exe.');
107
+ }
108
+ return executable;
109
+ }
110
+ export function verifyChecksum(actual, expected) {
111
+ if (actual !== expected)
112
+ throw new Error('Official Traefik ZIP SHA-256 checksum does not match.');
107
113
  }
108
114
  //# sourceMappingURL=core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/traefik/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/traefik/core.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,16 @@
1
- import type { BrcPaths } from '../config/paths.js';
2
- import { type TraefikRelease } from './core.js';
1
+ import { type TraefikRelease, type TraefikTemplates, type VersionManifest } from './core.js';
3
2
  export interface TraefikInputOptions {
4
3
  releaseApiUrl?: string;
5
4
  fetch?: typeof fetch;
6
5
  }
7
6
  export declare class TraefikInput {
8
- private readonly paths;
9
7
  private readonly fetchImpl;
10
8
  private readonly releaseApiUrl;
11
- constructor(paths: BrcPaths, options?: TraefikInputOptions);
9
+ constructor(options?: TraefikInputOptions);
12
10
  private queryRelease;
13
11
  latestRelease(): Promise<TraefikRelease>;
14
- downloadAndStage(release: TraefikRelease): Promise<string>;
15
- private readChecksum;
16
- private extractExecutable;
12
+ readTemplates(): Promise<TraefikTemplates>;
13
+ downloadChecksum(release: TraefikRelease): Promise<string>;
14
+ downloadArchive(release: TraefikRelease): Promise<Response>;
17
15
  }
16
+ export declare function readManifest(root: string): Promise<VersionManifest | null>;
@@ -1,20 +1,15 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { createWriteStream } from 'node:fs';
3
- import { mkdir, rm, stat } from 'node:fs/promises';
1
+ import { readFile } from 'node:fs/promises';
4
2
  import path from 'node:path';
5
- import { Readable } from 'node:stream';
6
- import { pipeline } from 'node:stream/promises';
3
+ import { fileURLToPath } from 'node:url';
7
4
  import { setTimeout as sleep } from 'node:timers/promises';
8
- import unzipper from 'unzipper';
9
5
  import { TRAEFIK_RELEASE_LOOKUP_ATTEMPTS, TRAEFIK_RELEASE_RETRY_DELAY_MS } from '../config/settings.js';
10
- import { MAX_EXECUTABLE_BYTES, ensureRegularFile, safeArchivePath, sha256File } from './core.js';
6
+ import { errorCode, parseManifest, parseRelease } from './core.js';
7
+ import { ensureRegularFile } from './output.js';
11
8
  const RELEASE_API_URL = 'https://api.github.com/repos/traefik/traefik/releases/latest';
12
9
  export class TraefikInput {
13
- paths;
14
10
  fetchImpl;
15
11
  releaseApiUrl;
16
- constructor(paths, options = {}) {
17
- this.paths = paths;
12
+ constructor(options = {}) {
18
13
  this.fetchImpl = options.fetch ?? fetch;
19
14
  this.releaseApiUrl = options.releaseApiUrl ?? RELEASE_API_URL;
20
15
  }
@@ -57,88 +52,51 @@ export class TraefikInput {
57
52
  }
58
53
  async latestRelease() {
59
54
  const response = await this.queryRelease();
60
- const value = await response.json();
61
- if (!value || typeof value !== 'object' || Array.isArray(value))
62
- throw new Error('Official Traefik release metadata is malformed.');
63
- const release = value;
64
- if (release.draft !== false || release.prerelease !== false || typeof release.tag_name !== 'string') {
65
- throw new Error('The latest Traefik release is not a stable release.');
66
- }
67
- const match = release.tag_name.match(/^v(\d+\.\d+\.\d+)$/);
68
- if (!match)
69
- throw new Error(`Official Traefik release tag is invalid: ${release.tag_name}`);
70
- const version = match[1];
71
- const archiveName = `traefik_v${version}_windows_amd64.zip`;
72
- const checksumName = `traefik_v${version}_checksums.txt`;
73
- if (!Array.isArray(release.assets))
74
- throw new Error('Official Traefik release has no asset list.');
75
- const assets = release.assets;
76
- const findAsset = (name) => {
77
- const asset = assets.find((item) => item && typeof item === 'object' && item.name === name);
78
- const url = asset?.browser_download_url;
79
- const expected = `https://github.com/traefik/traefik/releases/download/v${version}/${name}`;
80
- if (url !== expected)
81
- throw new Error(`Official Traefik asset is missing or has an unexpected URL: ${name}`);
82
- return expected;
83
- };
84
- return { version, archiveName, archiveUrl: findAsset(archiveName), checksumUrl: findAsset(checksumName) };
55
+ return parseRelease(await response.json());
85
56
  }
86
- async downloadAndStage(release) {
87
- const checksumResponse = await this.fetchImpl(release.checksumUrl, { signal: AbortSignal.timeout(30_000) });
88
- if (!checksumResponse.ok)
89
- throw new Error(`Cannot download the official Traefik checksum file: HTTP ${checksumResponse.status}.`);
90
- const expectedChecksum = this.readChecksum(await checksumResponse.text(), release.archiveName);
91
- const archivePath = path.join(this.paths.tmp, `traefik-${randomUUID()}.zip.part`);
92
- const stage = path.join(this.paths.traefik, 'versions', `.staging-${release.version}-${randomUUID()}`);
93
- try {
94
- const archiveResponse = await this.fetchImpl(release.archiveUrl, { signal: AbortSignal.timeout(5 * 60_000) });
95
- if (!archiveResponse.ok || !archiveResponse.body)
96
- throw new Error(`Cannot download the official Traefik ZIP: HTTP ${archiveResponse.status}.`);
97
- await pipeline(Readable.fromWeb(archiveResponse.body), createWriteStream(archivePath, { flags: 'wx' }));
98
- if (await sha256File(archivePath) !== expectedChecksum)
99
- throw new Error('Official Traefik ZIP SHA-256 checksum does not match.');
100
- await mkdir(stage);
101
- await this.extractExecutable(archivePath, stage);
102
- return stage;
103
- }
104
- catch (error) {
105
- await rm(stage, { recursive: true, force: true });
106
- throw error;
107
- }
108
- finally {
109
- await rm(archivePath, { force: true });
57
+ async readTemplates() {
58
+ const moduleDirectory = path.dirname(fileURLToPath(import.meta.url));
59
+ const candidates = [
60
+ path.resolve(moduleDirectory, '../../deploy/traefik'),
61
+ path.resolve(moduleDirectory, '../../../../deploy/traefik'),
62
+ ];
63
+ for (const directory of candidates) {
64
+ try {
65
+ return {
66
+ staticConfig: await readFile(path.join(directory, 'traefik.yml'), 'utf8'),
67
+ dynamicConfig: await readFile(path.join(directory, 'dynamic.yml'), 'utf8'),
68
+ };
69
+ }
70
+ catch (error) {
71
+ if (errorCode(error) !== 'ENOENT')
72
+ throw error;
73
+ }
110
74
  }
75
+ throw new Error('Traefik deployment templates are missing from the BRC package.');
111
76
  }
112
- readChecksum(contents, filename) {
113
- for (const line of contents.split(/\r?\n/)) {
114
- const match = line.trim().match(/^([a-f\d]{64})\s+\*?(.+)$/i);
115
- if (match?.[2] === filename)
116
- return match[1].toLowerCase();
117
- }
118
- throw new Error(`Official Traefik checksum file does not contain ${filename}.`);
77
+ async downloadChecksum(release) {
78
+ const response = await this.fetchImpl(release.checksumUrl, { signal: AbortSignal.timeout(30_000) });
79
+ if (!response.ok)
80
+ throw new Error(`Cannot download the official Traefik checksum file: HTTP ${response.status}.`);
81
+ return response.text();
119
82
  }
120
- async extractExecutable(archivePath, stage) {
121
- const directory = await unzipper.Open.file(archivePath);
122
- const names = new Set();
123
- let executable;
124
- for (const entry of directory.files) {
125
- if (!safeArchivePath(entry.path))
126
- throw new Error(`Traefik ZIP contains an unsafe path: ${entry.path}`);
127
- if (names.has(entry.path))
128
- throw new Error(`Traefik ZIP contains a duplicate path: ${entry.path}`);
129
- names.add(entry.path);
130
- if (entry.path === 'traefik.exe' && entry.type === 'File')
131
- executable = entry;
132
- }
133
- const executableSize = executable?.uncompressedSize;
134
- if (!executable || typeof executableSize !== 'number' || executableSize < 1 || executableSize > MAX_EXECUTABLE_BYTES) {
135
- throw new Error('Traefik ZIP does not contain a valid root-level traefik.exe.');
136
- }
137
- const target = path.join(stage, 'traefik.exe');
138
- await pipeline(executable.stream(), createWriteStream(target, { flags: 'wx' }));
139
- await ensureRegularFile(target);
140
- if ((await stat(target)).size !== executableSize)
141
- throw new Error('Extracted Traefik executable size does not match its ZIP entry.');
83
+ async downloadArchive(release) {
84
+ const response = await this.fetchImpl(release.archiveUrl, { signal: AbortSignal.timeout(5 * 60_000) });
85
+ if (!response.ok || !response.body)
86
+ throw new Error(`Cannot download the official Traefik ZIP: HTTP ${response.status}.`);
87
+ return response;
88
+ }
89
+ }
90
+ export async function readManifest(root) {
91
+ const filename = path.join(root, 'versions.json');
92
+ try {
93
+ await ensureRegularFile(filename);
94
+ return parseManifest(JSON.parse(await readFile(filename, 'utf8')));
95
+ }
96
+ catch (error) {
97
+ if (errorCode(error) === 'ENOENT')
98
+ return null;
99
+ throw error;
142
100
  }
143
101
  }
144
102
  //# sourceMappingURL=input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/traefik/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,QAA2B,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAuB,MAAM,WAAW,CAAC;AAEtH,MAAM,eAAe,GAAG,8DAA8D,CAAC;AAOvF,MAAM,OAAO,YAAY;IAIM;IAHZ,SAAS,CAAe;IACxB,aAAa,CAAS;IAEvC,YAA6B,KAAe,EAAE,UAA+B,EAAE;QAAlD,UAAK,GAAL,KAAK,CAAU;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,eAAe,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,WAAW,GAAG,+BAA+B,CAAC;QACpD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE;oBAClD,OAAO,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,YAAY,EAAE,iBAAiB,EAAE;oBACnF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;iBACpC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,KAAK,WAAW;oBAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnI,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,CAAC,EAAE;gBAAE,OAAO,QAAQ,CAAC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,GAAG,CAAC;YAC1E,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,MAAM,4CAA4C,CAAC,CAAC;YACtH,CAAC;YACD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACrF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;mBAC1D,iBAAiB,GAAG,8BAA8B,GAAG,IAAI,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,6DAA6D,iBAAiB,oCAAoC,CAAC,CAAC;YACtI,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,CAAC,SAAS,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,wDAAwD,QAAQ,CAAC,MAAM,kDAAkD,CAAC,CAAC;YAC7I,CAAC;YACD,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAa,CAAC;QAC/C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACpI,MAAM,OAAO,GAAG,KAAgC,CAAC;QACjD,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACpG,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,WAAW,GAAG,YAAY,OAAO,oBAAoB,CAAC;QAC5D,MAAM,YAAY,GAAG,YAAY,OAAO,gBAAgB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAmB,CAAC;QAC3C,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAK,IAAgC,CAAC,IAAI,KAAK,IAAI,CAAwC,CAAC;YAChK,MAAM,GAAG,GAAG,KAAK,EAAE,oBAAoB,CAAC;YACxC,MAAM,QAAQ,GAAG,yDAAyD,OAAO,IAAI,IAAI,EAAE,CAAC;YAC5F,IAAI,GAAG,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,IAAI,EAAE,CAAC,CAAC;YAC7G,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAuB;QAC5C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5G,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QAClI,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/F,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,UAAU,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC;QACvG,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9G,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/I,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAgD,CAAC,EAAE,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACpJ,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACjI,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,QAAgB,EAAE,QAAgB;QACrD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC9D,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,QAAQ,GAAG,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,KAAa;QAChE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,IAAI,UAAgC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxG,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACnG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,UAAU,GAAG,KAAK,CAAC;QAChF,CAAC;QACD,MAAM,cAAc,GAAG,UAAU,EAAE,gBAAgB,CAAC;QACpD,IAAI,CAAC,UAAU,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,oBAAoB,EAAE,CAAC;YACrH,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC/C,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChF,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACvI,CAAC;CACF"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/traefik/input.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,19 @@ import type { BrcPaths } from '../config/paths.js';
2
2
  import type { BrcSettings } from '../config/settings.js';
3
3
  import type { ServiceManager } from '../lifecycle/services.js';
4
4
  import { type TraefikInputOptions } from './input.js';
5
+ export interface TraefikProgressEvent {
6
+ operation: 'setup' | 'update' | 'rollback' | 'config';
7
+ stage: 'release' | 'download' | 'verify' | 'stage' | 'health' | 'activate' | 'config';
8
+ status: 'started' | 'completed' | 'failed';
9
+ completedBytes?: number;
10
+ totalBytes?: number;
11
+ }
12
+ export type TraefikProgressReporter = (event: TraefikProgressEvent) => void;
5
13
  export interface TraefikManagerOptions extends TraefikInputOptions {
6
14
  verifyExecutable?: (filename: string, version: string) => Promise<void>;
7
15
  healthCheck?: (filename: string, version: string) => Promise<void>;
8
16
  loadSettings?: () => Promise<Readonly<BrcSettings>>;
17
+ reporter?: TraefikProgressReporter;
9
18
  }
10
19
  export type TraefikLifecycle = Pick<ServiceManager, 'status' | 'withLock'>;
11
20
  export declare class TraefikManager {
@@ -17,6 +26,7 @@ export declare class TraefikManager {
17
26
  private readonly verify;
18
27
  private readonly healthCheck;
19
28
  private readonly loadSettings;
29
+ private readonly reporter?;
20
30
  constructor(paths: BrcPaths, settings: Readonly<BrcSettings>, lifecycle: TraefikLifecycle, options?: TraefikManagerOptions);
21
31
  setup(): Promise<void>;
22
32
  update(): Promise<void>;
@@ -28,6 +38,9 @@ export declare class TraefikManager {
28
38
  private writeConfigAndConfirm;
29
39
  private serviceStatus;
30
40
  private validateCandidate;
41
+ private stageRelease;
42
+ private progress;
43
+ private emit;
31
44
  private isRunning;
32
45
  private restoreVersion;
33
46
  private prepareDirectories;