@kaitranntt/ccs 8.9.0-dev.1 → 8.9.0-dev.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.
- package/dist/cliproxy/binary/install-lifecycle-lock.d.ts +2 -0
- package/dist/cliproxy/binary/install-lifecycle-lock.d.ts.map +1 -0
- package/dist/cliproxy/binary/install-lifecycle-lock.js +63 -0
- package/dist/cliproxy/binary/install-lifecycle-lock.js.map +1 -0
- package/dist/cliproxy/binary/installer.d.ts +13 -1
- package/dist/cliproxy/binary/installer.d.ts.map +1 -1
- package/dist/cliproxy/binary/installer.js +81 -42
- package/dist/cliproxy/binary/installer.js.map +1 -1
- package/dist/cliproxy/binary/lifecycle.d.ts +6 -1
- package/dist/cliproxy/binary/lifecycle.d.ts.map +1 -1
- package/dist/cliproxy/binary/lifecycle.js +13 -10
- package/dist/cliproxy/binary/lifecycle.js.map +1 -1
- package/dist/cliproxy/binary-manager.d.ts +2 -0
- package/dist/cliproxy/binary-manager.d.ts.map +1 -1
- package/dist/cliproxy/binary-manager.js +31 -29
- package/dist/cliproxy/binary-manager.js.map +1 -1
- package/dist/cliproxy/services/binary-service.d.ts.map +1 -1
- package/dist/cliproxy/services/binary-service.js +24 -20
- package/dist/cliproxy/services/binary-service.js.map +1 -1
- package/dist/cliproxy/types/binary-types.d.ts +1 -0
- package/dist/cliproxy/types/binary-types.d.ts.map +1 -1
- package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts +5 -0
- package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts.map +1 -1
- package/dist/web-server/services/cliproxy-dashboard-install-service.js +53 -36
- package/dist/web-server/services/cliproxy-dashboard-install-service.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-lifecycle-lock.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/binary/install-lifecycle-lock.ts"],"names":[],"mappings":"AAOA,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CA0BZ"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.withInstallLifecycleLock = void 0;
|
|
27
|
+
const async_hooks_1 = require("async_hooks");
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
30
|
+
const lockfile = __importStar(require("proper-lockfile"));
|
|
31
|
+
const heldInstallLocks = new async_hooks_1.AsyncLocalStorage();
|
|
32
|
+
async function withInstallLifecycleLock(lockTarget, operation) {
|
|
33
|
+
const resolvedTarget = path.resolve(lockTarget);
|
|
34
|
+
const held = heldInstallLocks.getStore();
|
|
35
|
+
if (held?.has(resolvedTarget))
|
|
36
|
+
return operation();
|
|
37
|
+
fs.mkdirSync(resolvedTarget, { recursive: true });
|
|
38
|
+
const release = await lockfile.lock(resolvedTarget, {
|
|
39
|
+
stale: 10 * 60 * 1000,
|
|
40
|
+
retries: { retries: 60, factor: 1, minTimeout: 250, maxTimeout: 250 },
|
|
41
|
+
});
|
|
42
|
+
const nextHeld = new Set(held);
|
|
43
|
+
nextHeld.add(resolvedTarget);
|
|
44
|
+
let operationError;
|
|
45
|
+
try {
|
|
46
|
+
return await heldInstallLocks.run(nextHeld, operation);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
operationError = error;
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
try {
|
|
54
|
+
await release();
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!operationError)
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.withInstallLifecycleLock = withInstallLifecycleLock;
|
|
63
|
+
//# sourceMappingURL=install-lifecycle-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-lifecycle-lock.js","sourceRoot":"","sources":["../../../src/cliproxy/binary/install-lifecycle-lock.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgD;AAChD,uCAAyB;AACzB,2CAA6B;AAC7B,0DAA4C;AAE5C,MAAM,gBAAgB,GAAG,IAAI,+BAAiB,EAAe,CAAC;AAEvD,KAAK,UAAU,wBAAwB,CAC5C,UAAkB,EAClB,SAA2B;IAE3B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;IACzC,IAAI,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;QAAE,OAAO,SAAS,EAAE,CAAC;IAElD,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE;QAClD,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACrB,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;KACtE,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7B,IAAI,cAAuB,CAAC;IAE5B,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,GAAG,KAAK,CAAC;QACvB,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,cAAc;gBAAE,MAAM,KAAK,CAAC;QACnC,CAAC;IACH,CAAC;AACH,CAAC;AA7BD,4DA6BC"}
|
|
@@ -2,12 +2,23 @@
|
|
|
2
2
|
* Binary Installer
|
|
3
3
|
* Handles downloading, verifying, and extracting binary.
|
|
4
4
|
*/
|
|
5
|
+
/// <reference types="node" />
|
|
6
|
+
import * as fs from 'fs';
|
|
5
7
|
import { BinaryManagerConfig } from '../types';
|
|
6
8
|
import { detectPlatform } from '../binary/platform-detector';
|
|
9
|
+
import { downloadWithRetry } from './downloader';
|
|
10
|
+
import { verifyChecksum } from './verifier';
|
|
11
|
+
import { extractArchive } from './extractor';
|
|
12
|
+
interface DownloadAndInstallDeps {
|
|
13
|
+
downloadWithRetryFn?: typeof downloadWithRetry;
|
|
14
|
+
verifyChecksumFn?: typeof verifyChecksum;
|
|
15
|
+
extractArchiveFn?: typeof extractArchive;
|
|
16
|
+
renameSyncFn?: typeof fs.renameSync;
|
|
17
|
+
}
|
|
7
18
|
/**
|
|
8
19
|
* Download and install the binary
|
|
9
20
|
*/
|
|
10
|
-
export declare function downloadAndInstall(config: BinaryManagerConfig, verbose?: boolean): Promise<void>;
|
|
21
|
+
export declare function downloadAndInstall(config: BinaryManagerConfig, verbose?: boolean, deps?: DownloadAndInstallDeps): Promise<void>;
|
|
11
22
|
import type { CLIProxyBackend } from '../types';
|
|
12
23
|
/** Delete binary (for cleanup or reinstall) */
|
|
13
24
|
export declare function deleteBinary(binPath: string, verbose?: boolean, backend?: CLIProxyBackend): void;
|
|
@@ -22,4 +33,5 @@ export declare function getBinaryInfo(binPath: string, version: string, backend?
|
|
|
22
33
|
platform: ReturnType<typeof detectPlatform>;
|
|
23
34
|
checksum: string;
|
|
24
35
|
} | null>;
|
|
36
|
+
export {};
|
|
25
37
|
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/binary/installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/binary/installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAGzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EACL,cAAc,EAKf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C,UAAU,sBAAsB;IAC9B,mBAAmB,CAAC,EAAE,OAAO,iBAAiB,CAAC;IAC/C,gBAAgB,CAAC,EAAE,OAAO,cAAc,CAAC;IACzC,gBAAgB,CAAC,EAAE,OAAO,cAAc,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;CACrC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,UAAQ,EACf,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAkHf;AAED,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,+CAA+C;AAC/C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,UAAQ,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAmB9F;AAED,sBAAsB;AACtB,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAGhF;AAED,6BAA6B;AAC7B,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAErF;AAED,mCAAmC;AACnC,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAAC,CAQR"}
|
|
@@ -30,83 +30,122 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
30
30
|
exports.getBinaryInfo = exports.isBinaryInstalled = exports.getBinaryPath = exports.deleteBinary = exports.downloadAndInstall = void 0;
|
|
31
31
|
const fs = __importStar(require("fs"));
|
|
32
32
|
const path = __importStar(require("path"));
|
|
33
|
+
const lockfile = __importStar(require("proper-lockfile"));
|
|
33
34
|
const platform_detector_1 = require("../binary/platform-detector");
|
|
34
35
|
const downloader_1 = require("./downloader");
|
|
35
36
|
const verifier_1 = require("./verifier");
|
|
36
37
|
const extractor_1 = require("./extractor");
|
|
37
|
-
const version_cache_1 = require("./version-cache");
|
|
38
38
|
const progress_indicator_1 = require("../../utils/progress-indicator");
|
|
39
39
|
const ui_1 = require("../../utils/ui");
|
|
40
|
+
const error_types_1 = require("../../errors/error-types");
|
|
40
41
|
/**
|
|
41
42
|
* Download and install the binary
|
|
42
43
|
*/
|
|
43
|
-
async function downloadAndInstall(config, verbose = false) {
|
|
44
|
+
async function downloadAndInstall(config, verbose = false, deps = {}) {
|
|
44
45
|
const backend = config.backend ?? platform_detector_1.DEFAULT_BACKEND;
|
|
45
46
|
const platform = (0, platform_detector_1.detectPlatform)(config.version, backend);
|
|
46
47
|
const downloadUrl = (0, platform_detector_1.getDownloadUrl)(config.version, backend);
|
|
47
48
|
const checksumsUrl = (0, platform_detector_1.getChecksumsUrl)(config.version, backend);
|
|
48
49
|
const backendLabel = backend === 'plus' ? 'CLIProxy Plus' : 'CLIProxy';
|
|
50
|
+
const downloadWithRetryFn = deps.downloadWithRetryFn ?? downloader_1.downloadWithRetry;
|
|
51
|
+
const verifyChecksumFn = deps.verifyChecksumFn ?? verifier_1.verifyChecksum;
|
|
52
|
+
const extractArchiveFn = deps.extractArchiveFn ?? extractor_1.extractArchive;
|
|
53
|
+
const renameSyncFn = deps.renameSyncFn ?? fs.renameSync;
|
|
49
54
|
fs.mkdirSync(config.binPath, { recursive: true });
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
try {
|
|
56
|
-
fs.unlinkSync(existingBinary);
|
|
57
|
-
if (verbose)
|
|
58
|
-
console.error(`[cliproxy] Removed existing binary: ${existingBinary}`);
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
const code = error instanceof Error && 'code' in error ? error.code : '';
|
|
62
|
-
// ETXTBSY: Linux-specific error when unlinking a running executable.
|
|
63
|
-
// EBUSY on Windows may mean something different (mount point, etc.),
|
|
64
|
-
// so only treat ETXTBSY as "binary in use" to avoid misleading messages.
|
|
65
|
-
if (code === 'ETXTBSY') {
|
|
66
|
-
if (verbose)
|
|
67
|
-
console.error(`[cliproxy] Binary is running, cannot replace: ${existingBinary}`);
|
|
68
|
-
throw new Error('CLIProxy binary is currently running and cannot be replaced. Restart the container to apply the update.');
|
|
69
|
-
}
|
|
70
|
-
throw error;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const archivePath = path.join(config.binPath, `cliproxy-archive.${platform.extension}`);
|
|
55
|
+
const releaseLock = await lockfile.lock(config.binPath, {
|
|
56
|
+
stale: 10 * 60 * 1000,
|
|
57
|
+
retries: { retries: 60, factor: 1, minTimeout: 250, maxTimeout: 250 },
|
|
58
|
+
});
|
|
59
|
+
let stagingPath;
|
|
74
60
|
const spinner = new progress_indicator_1.ProgressIndicator(`Downloading ${backendLabel} v${config.version}`);
|
|
75
|
-
|
|
61
|
+
let installError;
|
|
76
62
|
try {
|
|
77
|
-
const
|
|
63
|
+
for (const entry of fs.readdirSync(config.binPath)) {
|
|
64
|
+
if (entry.startsWith('.cliproxy-install-')) {
|
|
65
|
+
fs.rmSync(path.join(config.binPath, entry), { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
stagingPath = fs.mkdtempSync(path.join(config.binPath, '.cliproxy-install-'));
|
|
69
|
+
const archivePath = path.join(stagingPath, `cliproxy-archive.${platform.extension}`);
|
|
70
|
+
const stagedBinary = path.join(stagingPath, (0, platform_detector_1.getExecutableName)(backend));
|
|
71
|
+
const stagedVersion = path.join(stagingPath, '.version');
|
|
72
|
+
const installedBinary = path.join(config.binPath, (0, platform_detector_1.getExecutableName)(backend));
|
|
73
|
+
const installedVersion = path.join(config.binPath, '.version');
|
|
74
|
+
const backupBinary = path.join(stagingPath, '.previous-binary');
|
|
75
|
+
const hadInstalledBinary = fs.existsSync(installedBinary);
|
|
76
|
+
spinner.start();
|
|
77
|
+
const result = await downloadWithRetryFn(downloadUrl, archivePath, {
|
|
78
78
|
maxRetries: config.maxRetries,
|
|
79
79
|
verbose,
|
|
80
80
|
});
|
|
81
81
|
if (!result.success) {
|
|
82
82
|
spinner.fail('Download failed');
|
|
83
|
-
throw new
|
|
83
|
+
throw new error_types_1.NetworkError(result.error || 'Download failed after retries', downloadUrl);
|
|
84
84
|
}
|
|
85
85
|
spinner.update('Verifying checksum');
|
|
86
|
-
const checksumResult = await (
|
|
86
|
+
const checksumResult = await verifyChecksumFn(archivePath, platform.binaryName, checksumsUrl, verbose);
|
|
87
87
|
if (!checksumResult.valid) {
|
|
88
88
|
spinner.fail('Checksum mismatch');
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
`Actual: ${checksumResult.actual}\n\nManual download: ${downloadUrl}`);
|
|
89
|
+
throw new error_types_1.BinaryError(`Checksum mismatch for ${platform.binaryName}\nExpected: ${checksumResult.expected}\n` +
|
|
90
|
+
`Actual: ${checksumResult.actual}\n\nManual download: ${downloadUrl}`, stagedBinary);
|
|
92
91
|
}
|
|
93
92
|
spinner.update('Extracting binary');
|
|
94
|
-
await (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (platform.os !== 'windows'
|
|
99
|
-
fs.chmodSync(
|
|
93
|
+
await extractArchiveFn(archivePath, stagingPath, platform.extension, verbose, backend);
|
|
94
|
+
if (!fs.existsSync(stagedBinary) || !fs.statSync(stagedBinary).isFile()) {
|
|
95
|
+
throw new error_types_1.BinaryError(`Extracted archive did not contain ${(0, platform_detector_1.getExecutableName)(backend)}`, stagedBinary);
|
|
96
|
+
}
|
|
97
|
+
if (platform.os !== 'windows') {
|
|
98
|
+
fs.chmodSync(stagedBinary, 0o755);
|
|
100
99
|
if (verbose)
|
|
101
|
-
console.error(`[cliproxy] Set executable permissions: ${
|
|
100
|
+
console.error(`[cliproxy] Set executable permissions: ${stagedBinary}`);
|
|
102
101
|
}
|
|
103
|
-
(
|
|
102
|
+
fs.writeFileSync(stagedVersion, config.version, 'utf8');
|
|
103
|
+
if (hadInstalledBinary) {
|
|
104
|
+
fs.copyFileSync(installedBinary, backupBinary);
|
|
105
|
+
if (platform.os !== 'windows')
|
|
106
|
+
fs.chmodSync(backupBinary, 0o755);
|
|
107
|
+
}
|
|
108
|
+
renameSyncFn(stagedBinary, installedBinary);
|
|
109
|
+
try {
|
|
110
|
+
renameSyncFn(stagedVersion, installedVersion);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (hadInstalledBinary) {
|
|
114
|
+
renameSyncFn(backupBinary, installedBinary);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
fs.unlinkSync(installedBinary);
|
|
118
|
+
}
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
spinner.succeed(`${backendLabel} ready`);
|
|
104
122
|
console.log((0, ui_1.ok)(`${backendLabel} v${config.version} installed successfully`));
|
|
105
123
|
}
|
|
106
124
|
catch (error) {
|
|
125
|
+
installError = error;
|
|
107
126
|
spinner.fail('Installation failed');
|
|
108
127
|
throw error;
|
|
109
128
|
}
|
|
129
|
+
finally {
|
|
130
|
+
let cleanupError;
|
|
131
|
+
try {
|
|
132
|
+
if (stagingPath)
|
|
133
|
+
fs.rmSync(stagingPath, { recursive: true, force: true });
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
cleanupError = error;
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
try {
|
|
140
|
+
await releaseLock();
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
cleanupError ?? (cleanupError = error);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (!installError && cleanupError)
|
|
147
|
+
throw cleanupError;
|
|
148
|
+
}
|
|
110
149
|
}
|
|
111
150
|
exports.downloadAndInstall = downloadAndInstall;
|
|
112
151
|
/** Delete binary (for cleanup or reinstall) */
|
|
@@ -122,7 +161,7 @@ function deleteBinary(binPath, verbose = false, backend) {
|
|
|
122
161
|
catch (error) {
|
|
123
162
|
const code = error instanceof Error && 'code' in error ? error.code : '';
|
|
124
163
|
if (code === 'ETXTBSY') {
|
|
125
|
-
throw new
|
|
164
|
+
throw new error_types_1.BinaryError('CLIProxy binary is currently running and cannot be deleted.', binaryPath);
|
|
126
165
|
}
|
|
127
166
|
throw error;
|
|
128
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/cliproxy/binary/installer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/cliproxy/binary/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,14 @@
|
|
|
3
3
|
* Handles ensuring binary availability and auto-updates.
|
|
4
4
|
*/
|
|
5
5
|
import { BinaryManagerConfig } from '../types';
|
|
6
|
+
import { downloadAndInstall } from './installer';
|
|
6
7
|
/**
|
|
7
8
|
* Ensure binary is available (download if missing, update if outdated)
|
|
8
9
|
* @returns Path to executable binary
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
interface EnsureBinaryDeps {
|
|
12
|
+
downloadAndInstallFn?: typeof downloadAndInstall;
|
|
13
|
+
}
|
|
14
|
+
export declare function ensureBinary(config: BinaryManagerConfig, deps?: EnsureBinaryDeps): Promise<string>;
|
|
15
|
+
export {};
|
|
11
16
|
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/binary/lifecycle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,mBAAmB,EAAmB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/binary/lifecycle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,mBAAmB,EAAmB,MAAM,UAAU,CAAC;AAOhE,OAAO,EAAE,kBAAkB,EAAiB,MAAM,aAAa,CAAC;AAyFhE;;;GAGG;AACH,UAAU,gBAAgB;IACxB,oBAAoB,CAAC,EAAE,OAAO,kBAAkB,CAAC;CAClD;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,mBAAmB,EAC3B,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAoEjB"}
|
|
@@ -34,6 +34,7 @@ const installer_1 = require("./installer");
|
|
|
34
34
|
const ui_1 = require("../../utils/ui");
|
|
35
35
|
const stats_fetcher_1 = require("../services/stats-fetcher");
|
|
36
36
|
const port_manager_1 = require("../config/port-manager");
|
|
37
|
+
const error_types_1 = require("../../errors/error-types");
|
|
37
38
|
const platform_detector_1 = require("../binary/platform-detector");
|
|
38
39
|
/** Log helper */
|
|
39
40
|
function log(message, verbose) {
|
|
@@ -97,24 +98,26 @@ async function handleAutoUpdate(config, verbose) {
|
|
|
97
98
|
else {
|
|
98
99
|
console.log((0, ui_1.info)(updateMsg));
|
|
99
100
|
console.log((0, ui_1.info)(`Updating ${backendLabel}...`));
|
|
100
|
-
|
|
101
|
+
// The installer stages and validates the replacement before atomically swapping it.
|
|
101
102
|
config.version = targetVersion;
|
|
102
103
|
await (0, installer_1.downloadAndInstall)(config, verbose);
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
|
-
|
|
106
|
-
* Ensure binary is available (download if missing, update if outdated)
|
|
107
|
-
* @returns Path to executable binary
|
|
108
|
-
*/
|
|
109
|
-
async function ensureBinary(config) {
|
|
106
|
+
async function ensureBinary(config, deps = {}) {
|
|
110
107
|
const verbose = config.verbose;
|
|
111
108
|
const backend = config.backend ?? platform_detector_1.DEFAULT_BACKEND;
|
|
112
109
|
const binaryPath = (0, installer_1.getBinaryPath)(config.binPath, backend);
|
|
110
|
+
const downloadAndInstallFn = deps.downloadAndInstallFn ?? installer_1.downloadAndInstall;
|
|
113
111
|
// Binary exists - check for updates unless forceVersion
|
|
114
112
|
if (fs.existsSync(binaryPath)) {
|
|
115
113
|
log(`Binary exists: ${binaryPath}`, verbose);
|
|
114
|
+
if (config.replaceExisting) {
|
|
115
|
+
log(`Force version mode: installing specified version ${config.version}`, verbose);
|
|
116
|
+
await downloadAndInstallFn(config, verbose);
|
|
117
|
+
return binaryPath;
|
|
118
|
+
}
|
|
116
119
|
if (config.forceVersion) {
|
|
117
|
-
log(
|
|
120
|
+
log(`Pinned version mode: using installed version ${config.version}`, verbose);
|
|
118
121
|
return binaryPath;
|
|
119
122
|
}
|
|
120
123
|
if (config.skipAutoUpdate) {
|
|
@@ -132,8 +135,8 @@ async function ensureBinary(config) {
|
|
|
132
135
|
}
|
|
133
136
|
// Binary missing
|
|
134
137
|
if (!config.allowInstall) {
|
|
135
|
-
throw new
|
|
136
|
-
'Run "ccs cliproxy install" when you have network access.');
|
|
138
|
+
throw new error_types_1.BinaryError(`${getBackendLabel(backend)} binary is not installed locally. ` +
|
|
139
|
+
'Run "ccs cliproxy install" when you have network access.', binaryPath);
|
|
137
140
|
}
|
|
138
141
|
// Only log download intent when a download will actually happen
|
|
139
142
|
log('Binary not found, downloading...', verbose);
|
|
@@ -156,7 +159,7 @@ async function ensureBinary(config) {
|
|
|
156
159
|
else {
|
|
157
160
|
log(`Force version mode: using specified version ${config.version}`, verbose);
|
|
158
161
|
}
|
|
159
|
-
await (
|
|
162
|
+
await downloadAndInstallFn(config, verbose);
|
|
160
163
|
return binaryPath;
|
|
161
164
|
}
|
|
162
165
|
exports.ensureBinary = ensureBinary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cliproxy/binary/lifecycle.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AAEzB,uDAK2B;AAC3B,
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cliproxy/binary/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,7 @@ export declare function getStoredConfiguredBackend(): CLIProxyBackend;
|
|
|
27
27
|
* community fork instead of degrading to original.
|
|
28
28
|
*/
|
|
29
29
|
export declare function getConfiguredBackend(options?: ResolveLocalBackendOptions): CLIProxyBackend;
|
|
30
|
+
export declare function withCliproxyInstallLifecycleLock<T>(backend: CLIProxyBackend, operation: () => Promise<T>): Promise<T>;
|
|
30
31
|
/**
|
|
31
32
|
* Binary Manager class for CLIProxyAPI binary lifecycle
|
|
32
33
|
*/
|
|
@@ -67,6 +68,7 @@ interface InstallCliproxyVersionDeps {
|
|
|
67
68
|
formatInfo?: typeof info;
|
|
68
69
|
formatWarn?: typeof warn;
|
|
69
70
|
getInstalledVersion?: typeof getInstalledCliproxyVersion;
|
|
71
|
+
withInstallLifecycleLockFn?: typeof withCliproxyInstallLifecycleLock;
|
|
70
72
|
}
|
|
71
73
|
/** Install a specific version of CLIProxyAPI */
|
|
72
74
|
export declare function installCliproxyVersion(version: string, verbose?: boolean, backend?: CLIProxyBackend, deps?: InstallCliproxyVersionDeps): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-manager.d.ts","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAO1D,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EACL,iBAAiB,EAOjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EAGjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"binary-manager.d.ts","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
29
29
|
return result;
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.migrateVersionPin = exports.isVersionPinned = exports.clearPinnedVersion = exports.savePinnedVersion = exports.getPinnedVersion = exports.getVersionPinPath = exports.checkCliproxyUpdate = exports.fetchLatestCliproxyVersion = exports.installCliproxyVersion = exports.getInstalledCliproxyVersion = exports.getCLIProxyPath = exports.isCLIProxyInstalled = exports.ensureCLIProxyBinary = exports.BinaryManager = exports.getConfiguredBackend = exports.getStoredConfiguredBackend = exports.resolveLocalBackend = exports.syncPlusFallbackStateIfNeeded = exports.getPlusBackendUnavailableMessage = exports.CLIPROXY_PLUS_TRACKING_URL = exports.CLIPROXY_PLUS_FORK_URL = exports.CLIPROXY_PLUS_FALLBACK_TRACKING_URL = exports.CLIPROXY_DELETED_PLUS_REPO = void 0;
|
|
32
|
+
exports.migrateVersionPin = exports.isVersionPinned = exports.clearPinnedVersion = exports.savePinnedVersion = exports.getPinnedVersion = exports.getVersionPinPath = exports.checkCliproxyUpdate = exports.fetchLatestCliproxyVersion = exports.installCliproxyVersion = exports.getInstalledCliproxyVersion = exports.getCLIProxyPath = exports.isCLIProxyInstalled = exports.ensureCLIProxyBinary = exports.BinaryManager = exports.withCliproxyInstallLifecycleLock = exports.getConfiguredBackend = exports.getStoredConfiguredBackend = exports.resolveLocalBackend = exports.syncPlusFallbackStateIfNeeded = exports.getPlusBackendUnavailableMessage = exports.CLIPROXY_PLUS_TRACKING_URL = exports.CLIPROXY_PLUS_FORK_URL = exports.CLIPROXY_PLUS_FALLBACK_TRACKING_URL = exports.CLIPROXY_DELETED_PLUS_REPO = void 0;
|
|
33
33
|
const fs = __importStar(require("fs"));
|
|
34
34
|
const path = __importStar(require("path"));
|
|
35
35
|
const ui_1 = require("../utils/ui");
|
|
@@ -47,6 +47,7 @@ Object.defineProperty(exports, "getVersionPinPath", { enumerable: true, get: fun
|
|
|
47
47
|
Object.defineProperty(exports, "migrateVersionPin", { enumerable: true, get: function () { return binary_1.migrateVersionPin; } });
|
|
48
48
|
const version_cache_1 = require("./binary/version-cache");
|
|
49
49
|
const config_loader_facade_1 = require("../config/config-loader-facade");
|
|
50
|
+
const install_lifecycle_lock_1 = require("./binary/install-lifecycle-lock");
|
|
50
51
|
exports.CLIPROXY_DELETED_PLUS_REPO = 'router-for-me/CLIProxyAPIPlus';
|
|
51
52
|
exports.CLIPROXY_PLUS_FALLBACK_TRACKING_URL = 'https://github.com/kaitranntt/ccs/issues/1062';
|
|
52
53
|
exports.CLIPROXY_PLUS_FORK_URL = 'https://github.com/kaitranntt/CLIProxyAPIPlus';
|
|
@@ -153,6 +154,11 @@ function getBackendBinDir(backend = platform_detector_1.DEFAULT_BACKEND) {
|
|
|
153
154
|
const baseDir = (0, config_generator_1.getBinDir)();
|
|
154
155
|
return `${baseDir}/${backend}`;
|
|
155
156
|
}
|
|
157
|
+
async function withCliproxyInstallLifecycleLock(backend, operation) {
|
|
158
|
+
const lockTarget = path.join((0, config_generator_1.getBinDir)(), `.install-lifecycle-${backend}`);
|
|
159
|
+
return (0, install_lifecycle_lock_1.withInstallLifecycleLock)(lockTarget, operation);
|
|
160
|
+
}
|
|
161
|
+
exports.withCliproxyInstallLifecycleLock = withCliproxyInstallLifecycleLock;
|
|
156
162
|
/** Default configuration (uses backend from config.yaml or defaults to `DEFAULT_BACKEND`) */
|
|
157
163
|
function createDefaultConfig(backend = platform_detector_1.DEFAULT_BACKEND) {
|
|
158
164
|
const backendConfig = platform_detector_1.BACKEND_CONFIG[backend];
|
|
@@ -163,6 +169,7 @@ function createDefaultConfig(backend = platform_detector_1.DEFAULT_BACKEND) {
|
|
|
163
169
|
maxRetries: 3,
|
|
164
170
|
verbose: false,
|
|
165
171
|
forceVersion: false,
|
|
172
|
+
replaceExisting: false,
|
|
166
173
|
skipAutoUpdate: false,
|
|
167
174
|
allowInstall: true,
|
|
168
175
|
backend, // Pass backend for installer to use correct download URL
|
|
@@ -254,39 +261,34 @@ exports.getInstalledCliproxyVersion = getInstalledCliproxyVersion;
|
|
|
254
261
|
async function installCliproxyVersion(version, verbose = false, backend, deps = {}) {
|
|
255
262
|
const configuredBackend = backend ?? getConfiguredOrDefaultBackend();
|
|
256
263
|
const effectiveBackend = resolveLocalBackend(configuredBackend, { notifyOnPlus: true });
|
|
257
|
-
const manager = deps.createManager?.({ version, verbose, forceVersion: true }, effectiveBackend) ??
|
|
258
|
-
new BinaryManager({ version, verbose, forceVersion: true }, effectiveBackend);
|
|
264
|
+
const manager = deps.createManager?.({ version, verbose, forceVersion: true, replaceExisting: true }, effectiveBackend) ??
|
|
265
|
+
new BinaryManager({ version, verbose, forceVersion: true, replaceExisting: true }, effectiveBackend);
|
|
259
266
|
const stopProxyFn = deps.stopProxyFn ?? proxy_lifecycle_service_1.stopProxy;
|
|
260
267
|
const waitForPortFreeFn = deps.waitForPortFreeFn ?? port_utils_1.waitForPortFree;
|
|
261
268
|
const formatInfo = deps.formatInfo ?? ui_1.info;
|
|
262
269
|
const formatWarn = deps.formatWarn ?? ui_1.warn;
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
console.log(formatInfo('Stopping running CLIProxy before update...'));
|
|
268
|
-
const result = await stopProxyFn();
|
|
269
|
-
if (result.stopped) {
|
|
270
|
-
const stoppedPort = result.port ?? (0, port_manager_1.resolveLifecyclePort)();
|
|
271
|
-
// Wait for port to be fully released
|
|
272
|
-
const portFree = await waitForPortFreeFn(stoppedPort, 5000);
|
|
273
|
-
if (!portFree && verbose) {
|
|
274
|
-
console.log(formatWarn('Port did not free up in time, proceeding anyway...'));
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
else if (verbose && result.error && result.error !== 'No active CLIProxy session found') {
|
|
278
|
-
console.log(formatWarn(`Could not stop proxy: ${result.error}`));
|
|
279
|
-
}
|
|
280
|
-
if (manager.isBinaryInstalled()) {
|
|
281
|
-
const label = effectiveBackend === 'plus' ? 'CLIProxy Plus' : 'CLIProxy';
|
|
270
|
+
const withLifecycleLock = deps.withInstallLifecycleLockFn ?? withCliproxyInstallLifecycleLock;
|
|
271
|
+
await withLifecycleLock(effectiveBackend, async () => {
|
|
272
|
+
// Always attempt a best-effort stop first so we also catch untracked proxies
|
|
273
|
+
// that are running without a session lock.
|
|
282
274
|
if (verbose)
|
|
283
|
-
console.log(formatInfo(
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
275
|
+
console.log(formatInfo('Stopping running CLIProxy before update...'));
|
|
276
|
+
const result = await stopProxyFn();
|
|
277
|
+
if (result.stopped) {
|
|
278
|
+
const stoppedPort = result.port ?? (0, port_manager_1.resolveLifecyclePort)();
|
|
279
|
+
const portFree = await waitForPortFreeFn(stoppedPort, 5000);
|
|
280
|
+
if (!portFree && verbose) {
|
|
281
|
+
console.log(formatWarn('Port did not free up in time, proceeding anyway...'));
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else if (verbose && result.error && result.error !== 'No active CLIProxy session found') {
|
|
285
|
+
console.log(formatWarn(`Could not stop proxy: ${result.error}`));
|
|
286
|
+
}
|
|
287
|
+
await manager.ensureBinary();
|
|
288
|
+
if (verbose) {
|
|
289
|
+
console.log(formatInfo('New version will be active on next CLIProxy command'));
|
|
290
|
+
}
|
|
291
|
+
});
|
|
290
292
|
}
|
|
291
293
|
exports.installCliproxyVersion = installCliproxyVersion;
|
|
292
294
|
/** Fetch the latest CLIProxyAPI version from GitHub API */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-manager.js","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,oCAAyC;AACzC,gEAAsD;AACtD,wDAA6D;AAE7D,kEAKoC;AACpC,gFAA+D;AAC/D,oDAAsD;AAEtD,qCAgBkB;
|
|
1
|
+
{"version":3,"file":"binary-manager.js","sourceRoot":"","sources":["../../src/cliproxy/binary-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-service.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/services/binary-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"binary-service.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/services/binary-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,2BAA2B;AAC3B,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,kBAAkB,CAa7E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyBhG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,CAAC,CA+BxB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,CAAC,CAmCxB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAK3D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAKlE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAKxD"}
|
|
@@ -102,13 +102,15 @@ async function installVersion(version, verbose = false, backend) {
|
|
|
102
102
|
const configuredBackend = backend ?? (0, config_loader_facade_1.loadOrCreateUnifiedConfig)().cliproxy?.backend ?? platform_detector_1.DEFAULT_BACKEND;
|
|
103
103
|
const effectiveBackend = (0, binary_manager_1.resolveLocalBackend)(configuredBackend, { notifyOnPlus: true });
|
|
104
104
|
try {
|
|
105
|
-
await (0, binary_manager_1.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
105
|
+
return await (0, binary_manager_1.withCliproxyInstallLifecycleLock)(effectiveBackend, async () => {
|
|
106
|
+
await (0, binary_manager_1.installCliproxyVersion)(version, verbose, effectiveBackend);
|
|
107
|
+
(0, binary_manager_1.savePinnedVersion)(version, effectiveBackend);
|
|
108
|
+
return {
|
|
109
|
+
success: true,
|
|
110
|
+
version,
|
|
111
|
+
wasPinned: true,
|
|
112
|
+
};
|
|
113
|
+
});
|
|
112
114
|
}
|
|
113
115
|
catch (error) {
|
|
114
116
|
return {
|
|
@@ -126,23 +128,25 @@ async function installLatest(verbose = false, backend) {
|
|
|
126
128
|
const configuredBackend = backend ?? (0, config_loader_facade_1.loadOrCreateUnifiedConfig)().cliproxy?.backend ?? platform_detector_1.DEFAULT_BACKEND;
|
|
127
129
|
const effectiveBackend = (0, binary_manager_1.resolveLocalBackend)(configuredBackend, { notifyOnPlus: true });
|
|
128
130
|
try {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
return await (0, binary_manager_1.withCliproxyInstallLifecycleLock)(effectiveBackend, async () => {
|
|
132
|
+
const latestVersion = await (0, binary_manager_1.fetchLatestCliproxyVersion)(effectiveBackend);
|
|
133
|
+
const currentVersion = (0, binary_manager_1.getInstalledCliproxyVersion)(effectiveBackend);
|
|
134
|
+
const wasPinned = (0, binary_manager_1.isVersionPinned)(effectiveBackend);
|
|
135
|
+
if ((0, binary_manager_1.isCLIProxyInstalled)(effectiveBackend) && latestVersion === currentVersion && !wasPinned) {
|
|
136
|
+
return {
|
|
137
|
+
success: true,
|
|
138
|
+
version: latestVersion,
|
|
139
|
+
error: `Already running latest version: v${latestVersion}`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
await (0, binary_manager_1.installCliproxyVersion)(latestVersion, verbose, effectiveBackend);
|
|
143
|
+
(0, binary_manager_1.clearPinnedVersion)(effectiveBackend);
|
|
133
144
|
return {
|
|
134
145
|
success: true,
|
|
135
146
|
version: latestVersion,
|
|
136
|
-
|
|
147
|
+
wasPinned,
|
|
137
148
|
};
|
|
138
|
-
}
|
|
139
|
-
await (0, binary_manager_1.installCliproxyVersion)(latestVersion, verbose, effectiveBackend);
|
|
140
|
-
(0, binary_manager_1.clearPinnedVersion)(effectiveBackend);
|
|
141
|
-
return {
|
|
142
|
-
success: true,
|
|
143
|
-
version: latestVersion,
|
|
144
|
-
wasPinned,
|
|
145
|
-
};
|
|
149
|
+
});
|
|
146
150
|
}
|
|
147
151
|
catch (error) {
|
|
148
152
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-service.js","sourceRoot":"","sources":["../../../src/cliproxy/services/binary-service.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,
|
|
1
|
+
{"version":3,"file":"binary-service.js","sourceRoot":"","sources":["../../../src/cliproxy/services/binary-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-types.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/types/binary-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,eAAe,KACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjC;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sBAAsB;AACtB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"binary-types.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/types/binary-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,eAAe,KACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjC;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sBAAsB;AACtB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { withCliproxyInstallLifecycleLock } from '../../cliproxy/binary-manager';
|
|
1
2
|
import { type ServiceStartResult } from '../../cliproxy/service-manager';
|
|
2
3
|
import type { CLIProxyBackend } from '../../cliproxy/types';
|
|
4
|
+
import { restartCliproxyViaSupervisord } from '../../docker/supervisord-lifecycle';
|
|
3
5
|
interface ProxyStatusLike {
|
|
4
6
|
running: boolean;
|
|
5
7
|
}
|
|
@@ -8,6 +10,9 @@ interface InstallDashboardCliproxyVersionDeps {
|
|
|
8
10
|
isCliproxyRunning: () => Promise<boolean>;
|
|
9
11
|
installCliproxyVersion: (version: string, verbose?: boolean, backend?: CLIProxyBackend) => Promise<void>;
|
|
10
12
|
ensureCliproxyService: () => Promise<ServiceStartResult>;
|
|
13
|
+
isRunningUnderSupervisord?: () => boolean;
|
|
14
|
+
restartCliproxyViaSupervisord?: typeof restartCliproxyViaSupervisord;
|
|
15
|
+
withInstallLifecycleLock?: typeof withCliproxyInstallLifecycleLock;
|
|
11
16
|
}
|
|
12
17
|
export interface DashboardCliproxyInstallResult {
|
|
13
18
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliproxy-dashboard-install-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cliproxy-dashboard-install-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gCAAgC,EACjC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGhG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAEL,6BAA6B,EAC9B,MAAM,oCAAoC,CAAC;AAE5C,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,mCAAmC;IAC3C,cAAc,EAAE,MAAM,eAAe,CAAC;IACtC,iBAAiB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,sBAAsB,EAAE,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,eAAe,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,qBAAqB,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzD,yBAAyB,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1C,6BAA6B,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACrE,wBAAwB,CAAC,EAAE,OAAO,gCAAgC,CAAC;CACpE;AASD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4BD,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,mCAAiD,GACtD,OAAO,CAAC,8BAA8B,CAAC,CAoDzC"}
|
|
@@ -6,6 +6,7 @@ const port_manager_1 = require("../../cliproxy/config/port-manager");
|
|
|
6
6
|
const service_manager_1 = require("../../cliproxy/service-manager");
|
|
7
7
|
const session_tracker_1 = require("../../cliproxy/session-tracker");
|
|
8
8
|
const stats_fetcher_1 = require("../../cliproxy/services/stats-fetcher");
|
|
9
|
+
const error_types_1 = require("../../errors/error-types");
|
|
9
10
|
const supervisord_lifecycle_1 = require("../../docker/supervisord-lifecycle");
|
|
10
11
|
const defaultDeps = {
|
|
11
12
|
getProxyStatus: () => (0, session_tracker_1.getProxyStatus)((0, port_manager_1.resolveLifecyclePort)()),
|
|
@@ -20,48 +21,64 @@ async function wasProxyRunning(deps) {
|
|
|
20
21
|
}
|
|
21
22
|
return deps.isCliproxyRunning();
|
|
22
23
|
}
|
|
24
|
+
async function restoreProxyService(deps) {
|
|
25
|
+
const underSupervisord = deps.isRunningUnderSupervisord?.() ?? (0, supervisord_lifecycle_1.isRunningUnderSupervisord)();
|
|
26
|
+
if (underSupervisord) {
|
|
27
|
+
const restart = deps.restartCliproxyViaSupervisord?.() ?? (0, supervisord_lifecycle_1.restartCliproxyViaSupervisord)();
|
|
28
|
+
return {
|
|
29
|
+
started: restart.success,
|
|
30
|
+
alreadyRunning: false,
|
|
31
|
+
port: restart.port ?? (0, port_manager_1.resolveLifecyclePort)(),
|
|
32
|
+
error: restart.error,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return deps.ensureCliproxyService();
|
|
36
|
+
}
|
|
23
37
|
async function installDashboardCliproxyVersion(version, backend, deps = defaultDeps) {
|
|
24
38
|
const effectiveBackend = (0, binary_manager_1.resolveLocalBackend)(backend, { notifyOnPlus: true });
|
|
25
39
|
const backendLabel = effectiveBackend === 'plus' ? 'CLIProxy Plus' : 'CLIProxy';
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
const withLifecycleLock = deps.withInstallLifecycleLock ?? binary_manager_1.withCliproxyInstallLifecycleLock;
|
|
41
|
+
return withLifecycleLock(effectiveBackend, async () => {
|
|
42
|
+
const shouldRestoreService = await wasProxyRunning(deps);
|
|
43
|
+
// The installer owns the stop-and-replace lifecycle, including best-effort
|
|
44
|
+
// shutdown for tracked and untracked proxies before swapping the binary.
|
|
45
|
+
try {
|
|
46
|
+
await deps.installCliproxyVersion(version, true, effectiveBackend);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (shouldRestoreService) {
|
|
50
|
+
const restoreResult = await restoreProxyService(deps);
|
|
51
|
+
if (!restoreResult.started && !restoreResult.alreadyRunning) {
|
|
52
|
+
const installMessage = error instanceof Error ? error.message : String(error);
|
|
53
|
+
throw new error_types_1.ProxyError(`${installMessage}; previous ${backendLabel} service also failed to restart: ${restoreResult.error ?? 'unknown restart error'}`, restoreResult.port);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
if (!shouldRestoreService) {
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
restarted: false,
|
|
62
|
+
message: `Successfully installed ${backendLabel} v${version}`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// In Docker, supervisord owns process lifecycle — delegate restart to it
|
|
66
|
+
const startResult = await restoreProxyService(deps);
|
|
67
|
+
if (!startResult.started && !startResult.alreadyRunning) {
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
restarted: false,
|
|
71
|
+
error: startResult.error || `Installed ${backendLabel} v${version}, but restart failed`,
|
|
72
|
+
message: `Installed ${backendLabel} v${version}, but failed to restart it`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
31
75
|
return {
|
|
32
76
|
success: true,
|
|
33
|
-
restarted:
|
|
34
|
-
|
|
77
|
+
restarted: true,
|
|
78
|
+
port: startResult.port,
|
|
79
|
+
message: `Successfully installed ${backendLabel} v${version} and restarted it on port ${startResult.port}`,
|
|
35
80
|
};
|
|
36
|
-
}
|
|
37
|
-
// In Docker, supervisord owns process lifecycle — delegate restart to it
|
|
38
|
-
if ((0, supervisord_lifecycle_1.isRunningUnderSupervisord)()) {
|
|
39
|
-
const result = (0, supervisord_lifecycle_1.restartCliproxyViaSupervisord)();
|
|
40
|
-
return {
|
|
41
|
-
success: result.success,
|
|
42
|
-
restarted: result.success,
|
|
43
|
-
port: result.port,
|
|
44
|
-
error: result.error,
|
|
45
|
-
message: result.success
|
|
46
|
-
? `Successfully installed ${backendLabel} v${version} and restarted it on port ${result.port}`
|
|
47
|
-
: `Installed ${backendLabel} v${version}, but restart failed`,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
const startResult = await deps.ensureCliproxyService();
|
|
51
|
-
if (!startResult.started && !startResult.alreadyRunning) {
|
|
52
|
-
return {
|
|
53
|
-
success: false,
|
|
54
|
-
restarted: false,
|
|
55
|
-
error: startResult.error || `Installed ${backendLabel} v${version}, but restart failed`,
|
|
56
|
-
message: `Installed ${backendLabel} v${version}, but failed to restart it`,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
return {
|
|
60
|
-
success: true,
|
|
61
|
-
restarted: true,
|
|
62
|
-
port: startResult.port,
|
|
63
|
-
message: `Successfully installed ${backendLabel} v${version} and restarted it on port ${startResult.port}`,
|
|
64
|
-
};
|
|
81
|
+
});
|
|
65
82
|
}
|
|
66
83
|
exports.installDashboardCliproxyVersion = installDashboardCliproxyVersion;
|
|
67
84
|
//# sourceMappingURL=cliproxy-dashboard-install-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliproxy-dashboard-install-service.js","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"cliproxy-dashboard-install-service.js","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":"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"}
|