@secondcontext/btx-cli 0.0.5 → 0.0.7
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/README.md +10 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/bin.js +165 -27
- package/dist/bin.js.map +1 -1
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +146 -15
- package/dist/login.js.map +1 -1
- package/dist/runtime-cli.d.ts.map +1 -1
- package/dist/runtime-cli.js +210 -3
- package/dist/runtime-cli.js.map +1 -1
- package/dist/self-update.d.ts +22 -0
- package/dist/self-update.d.ts.map +1 -0
- package/dist/self-update.js +312 -0
- package/dist/self-update.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
const PACKAGE_NAME = '@secondcontext/btx-cli';
|
|
6
|
+
const UPDATE_STATE_PATH = path.join(os.homedir(), '.btx', 'cli-update-state.json');
|
|
7
|
+
const UPDATE_CHECK_TTL_MS = 6 * 60 * 60 * 1000;
|
|
8
|
+
const AUTO_UPDATE_RETRY_TTL_MS = 12 * 60 * 60 * 1000;
|
|
9
|
+
const UPDATE_CHECK_TIMEOUT_MS = 1500;
|
|
10
|
+
let cachedCliPackageMetadata;
|
|
11
|
+
let cachedGlobalNpmRoot;
|
|
12
|
+
function readJson(filePath) {
|
|
13
|
+
if (!existsSync(filePath))
|
|
14
|
+
return null;
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse(readFileSync(filePath, 'utf8'));
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function writeJsonAtomic(filePath, value) {
|
|
23
|
+
const directory = path.dirname(filePath);
|
|
24
|
+
const tmpPath = `${filePath}.tmp`;
|
|
25
|
+
mkdirSync(directory, { recursive: true });
|
|
26
|
+
writeFileSync(tmpPath, JSON.stringify(value, null, 2), 'utf8');
|
|
27
|
+
renameSync(tmpPath, filePath);
|
|
28
|
+
}
|
|
29
|
+
function loadUpdateState() {
|
|
30
|
+
return readJson(UPDATE_STATE_PATH) ?? {};
|
|
31
|
+
}
|
|
32
|
+
function saveUpdateState(update) {
|
|
33
|
+
writeJsonAtomic(UPDATE_STATE_PATH, {
|
|
34
|
+
...loadUpdateState(),
|
|
35
|
+
...update,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function isRecent(timestamp, durationMs) {
|
|
39
|
+
if (!timestamp)
|
|
40
|
+
return false;
|
|
41
|
+
const value = Date.parse(timestamp);
|
|
42
|
+
if (Number.isNaN(value))
|
|
43
|
+
return false;
|
|
44
|
+
return Date.now() - value < durationMs;
|
|
45
|
+
}
|
|
46
|
+
function parseVersion(version) {
|
|
47
|
+
const match = version.trim().match(/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);
|
|
48
|
+
if (!match)
|
|
49
|
+
return null;
|
|
50
|
+
return match.slice(1).map((part) => Number.parseInt(part, 10));
|
|
51
|
+
}
|
|
52
|
+
function compareVersions(a, b) {
|
|
53
|
+
const parsedA = parseVersion(a);
|
|
54
|
+
const parsedB = parseVersion(b);
|
|
55
|
+
if (!parsedA || !parsedB) {
|
|
56
|
+
return a.localeCompare(b, undefined, {
|
|
57
|
+
numeric: true,
|
|
58
|
+
sensitivity: 'base',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
for (let index = 0; index < 3; index += 1) {
|
|
62
|
+
const difference = parsedA[index] - parsedB[index];
|
|
63
|
+
if (difference !== 0)
|
|
64
|
+
return difference;
|
|
65
|
+
}
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
function isWithin(parent, child) {
|
|
69
|
+
const relative = path.relative(parent, child);
|
|
70
|
+
return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
|
|
71
|
+
}
|
|
72
|
+
function resolveNpmCommand() {
|
|
73
|
+
return process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
74
|
+
}
|
|
75
|
+
function findCliPackageMetadata(startPath) {
|
|
76
|
+
if (!startPath)
|
|
77
|
+
return null;
|
|
78
|
+
let current = path.resolve(path.dirname(startPath));
|
|
79
|
+
while (true) {
|
|
80
|
+
const packageJsonPath = path.join(current, 'package.json');
|
|
81
|
+
if (existsSync(packageJsonPath)) {
|
|
82
|
+
try {
|
|
83
|
+
const parsed = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
84
|
+
if (parsed.name === PACKAGE_NAME && typeof parsed.version === 'string' && parsed.version.trim()) {
|
|
85
|
+
return {
|
|
86
|
+
packageRoot: current,
|
|
87
|
+
version: parsed.version.trim(),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// keep searching
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const parent = path.dirname(current);
|
|
96
|
+
if (parent === current)
|
|
97
|
+
return null;
|
|
98
|
+
current = parent;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function resolveCliPackageMetadata() {
|
|
102
|
+
if (cachedCliPackageMetadata !== undefined)
|
|
103
|
+
return cachedCliPackageMetadata;
|
|
104
|
+
cachedCliPackageMetadata = findCliPackageMetadata(process.argv[1]);
|
|
105
|
+
return cachedCliPackageMetadata;
|
|
106
|
+
}
|
|
107
|
+
function resolveCurrentCliVersion() {
|
|
108
|
+
const testOverride = process.env.BTX_TEST_CURRENT_VERSION?.trim();
|
|
109
|
+
if (testOverride)
|
|
110
|
+
return testOverride;
|
|
111
|
+
const metadata = resolveCliPackageMetadata();
|
|
112
|
+
if (metadata?.version)
|
|
113
|
+
return metadata.version;
|
|
114
|
+
if (typeof __BTX_CLI_VERSION__ !== 'undefined' && __BTX_CLI_VERSION__) {
|
|
115
|
+
return __BTX_CLI_VERSION__;
|
|
116
|
+
}
|
|
117
|
+
return '0.0.0';
|
|
118
|
+
}
|
|
119
|
+
function resolveGlobalNpmRoot() {
|
|
120
|
+
if (cachedGlobalNpmRoot !== undefined)
|
|
121
|
+
return cachedGlobalNpmRoot;
|
|
122
|
+
const result = spawnSync(resolveNpmCommand(), ['root', '-g'], {
|
|
123
|
+
encoding: 'utf8',
|
|
124
|
+
});
|
|
125
|
+
if (result.error || result.status !== 0) {
|
|
126
|
+
cachedGlobalNpmRoot = null;
|
|
127
|
+
return cachedGlobalNpmRoot;
|
|
128
|
+
}
|
|
129
|
+
const root = result.stdout.trim();
|
|
130
|
+
cachedGlobalNpmRoot = root || null;
|
|
131
|
+
return cachedGlobalNpmRoot;
|
|
132
|
+
}
|
|
133
|
+
function resolveInstallMode(metadata) {
|
|
134
|
+
if (metadata) {
|
|
135
|
+
if (!metadata.packageRoot.includes(`${path.sep}node_modules${path.sep}`)) {
|
|
136
|
+
return 'source';
|
|
137
|
+
}
|
|
138
|
+
if (process.env.BTX_TEST_CAN_SELF_UPDATE === 'true')
|
|
139
|
+
return 'global-npm';
|
|
140
|
+
if (process.env.BTX_TEST_CAN_SELF_UPDATE === 'false')
|
|
141
|
+
return 'node-modules';
|
|
142
|
+
const globalRoot = resolveGlobalNpmRoot();
|
|
143
|
+
if (globalRoot && isWithin(globalRoot, metadata.packageRoot)) {
|
|
144
|
+
return 'global-npm';
|
|
145
|
+
}
|
|
146
|
+
return 'node-modules';
|
|
147
|
+
}
|
|
148
|
+
const entryPath = process.argv[1] ? path.resolve(process.argv[1]) : '';
|
|
149
|
+
if (process.env.BTX_TEST_CAN_SELF_UPDATE === 'true')
|
|
150
|
+
return 'global-npm';
|
|
151
|
+
if (process.env.BTX_TEST_CAN_SELF_UPDATE === 'false')
|
|
152
|
+
return 'embedded';
|
|
153
|
+
if (process.env.BTX_CLI_PATH || entryPath.endsWith(`${path.sep}resources${path.sep}btx-cli.cjs`)) {
|
|
154
|
+
return 'embedded';
|
|
155
|
+
}
|
|
156
|
+
if (entryPath.includes(`${path.sep}resources${path.sep}`) && entryPath.endsWith('btx-cli.cjs')) {
|
|
157
|
+
return 'embedded';
|
|
158
|
+
}
|
|
159
|
+
return 'unknown';
|
|
160
|
+
}
|
|
161
|
+
async function fetchLatestVersion(forceRefresh = false) {
|
|
162
|
+
const testOverride = process.env.BTX_TEST_LATEST_VERSION?.trim();
|
|
163
|
+
if (testOverride) {
|
|
164
|
+
return {
|
|
165
|
+
latestVersion: testOverride,
|
|
166
|
+
checkedAt: new Date().toISOString(),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const state = loadUpdateState();
|
|
170
|
+
if (!forceRefresh && state.latestVersion && isRecent(state.checkedAt, UPDATE_CHECK_TTL_MS)) {
|
|
171
|
+
return {
|
|
172
|
+
latestVersion: state.latestVersion,
|
|
173
|
+
checkedAt: state.checkedAt ?? null,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const controller = new AbortController();
|
|
177
|
+
const timeout = setTimeout(() => {
|
|
178
|
+
controller.abort();
|
|
179
|
+
}, UPDATE_CHECK_TIMEOUT_MS);
|
|
180
|
+
try {
|
|
181
|
+
const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(PACKAGE_NAME)}/latest`, {
|
|
182
|
+
headers: {
|
|
183
|
+
accept: 'application/json',
|
|
184
|
+
},
|
|
185
|
+
signal: controller.signal,
|
|
186
|
+
});
|
|
187
|
+
if (response.ok) {
|
|
188
|
+
const parsed = (await response.json());
|
|
189
|
+
if (typeof parsed.version === 'string' && parsed.version.trim()) {
|
|
190
|
+
const checkedAt = new Date().toISOString();
|
|
191
|
+
saveUpdateState({
|
|
192
|
+
latestVersion: parsed.version.trim(),
|
|
193
|
+
checkedAt,
|
|
194
|
+
});
|
|
195
|
+
return {
|
|
196
|
+
latestVersion: parsed.version.trim(),
|
|
197
|
+
checkedAt,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// best effort
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
clearTimeout(timeout);
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
latestVersion: state.latestVersion ?? null,
|
|
210
|
+
checkedAt: state.checkedAt ?? null,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function recordUpdateAttempt(version) {
|
|
214
|
+
saveUpdateState({
|
|
215
|
+
lastAttemptedVersion: version,
|
|
216
|
+
lastAttemptedAt: new Date().toISOString(),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
function shouldSkipRecentAutoUpdateAttempt(version) {
|
|
220
|
+
const state = loadUpdateState();
|
|
221
|
+
return (state.lastAttemptedVersion === version &&
|
|
222
|
+
isRecent(state.lastAttemptedAt, AUTO_UPDATE_RETRY_TTL_MS));
|
|
223
|
+
}
|
|
224
|
+
export async function getCliVersionInfo(options = {}) {
|
|
225
|
+
const metadata = resolveCliPackageMetadata();
|
|
226
|
+
const currentVersion = resolveCurrentCliVersion();
|
|
227
|
+
const installMode = resolveInstallMode(metadata);
|
|
228
|
+
const latest = await fetchLatestVersion(options.forceRefresh === true);
|
|
229
|
+
const latestVersion = latest.latestVersion;
|
|
230
|
+
return {
|
|
231
|
+
currentVersion,
|
|
232
|
+
latestVersion,
|
|
233
|
+
updateAvailable: !!latestVersion && compareVersions(latestVersion, currentVersion) > 0,
|
|
234
|
+
installMode,
|
|
235
|
+
canSelfUpdate: installMode === 'global-npm',
|
|
236
|
+
checkedAt: latest.checkedAt,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
export async function updateCliToLatest(options = {}) {
|
|
240
|
+
const versionInfo = await getCliVersionInfo({ forceRefresh: true });
|
|
241
|
+
if (!versionInfo.latestVersion) {
|
|
242
|
+
return {
|
|
243
|
+
...versionInfo,
|
|
244
|
+
attempted: false,
|
|
245
|
+
updated: false,
|
|
246
|
+
upToDate: false,
|
|
247
|
+
reason: 'Could not determine the latest BTX CLI version from npm.',
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
if (!versionInfo.updateAvailable) {
|
|
251
|
+
return {
|
|
252
|
+
...versionInfo,
|
|
253
|
+
attempted: false,
|
|
254
|
+
updated: false,
|
|
255
|
+
upToDate: true,
|
|
256
|
+
reason: `BTX CLI is already up to date (${versionInfo.currentVersion}).`,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
if (!versionInfo.canSelfUpdate) {
|
|
260
|
+
return {
|
|
261
|
+
...versionInfo,
|
|
262
|
+
attempted: false,
|
|
263
|
+
updated: false,
|
|
264
|
+
upToDate: false,
|
|
265
|
+
reason: 'Automatic updates are only supported for the standalone globally installed npm package.',
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
if (options.auto === true && shouldSkipRecentAutoUpdateAttempt(versionInfo.latestVersion)) {
|
|
269
|
+
return {
|
|
270
|
+
...versionInfo,
|
|
271
|
+
attempted: false,
|
|
272
|
+
updated: false,
|
|
273
|
+
upToDate: false,
|
|
274
|
+
reason: `Skipped a repeated auto-update attempt for BTX CLI ${versionInfo.latestVersion}.`,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
recordUpdateAttempt(versionInfo.latestVersion);
|
|
278
|
+
const testUpdateLogPath = process.env.BTX_TEST_UPDATE_LOG;
|
|
279
|
+
if (testUpdateLogPath) {
|
|
280
|
+
appendFileSync(testUpdateLogPath, JSON.stringify({
|
|
281
|
+
packageName: PACKAGE_NAME,
|
|
282
|
+
targetVersion: versionInfo.latestVersion,
|
|
283
|
+
auto: options.auto === true,
|
|
284
|
+
}) + '\n', 'utf8');
|
|
285
|
+
return {
|
|
286
|
+
...versionInfo,
|
|
287
|
+
attempted: true,
|
|
288
|
+
updated: true,
|
|
289
|
+
upToDate: false,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
const result = spawnSync(resolveNpmCommand(), ['install', '-g', `${PACKAGE_NAME}@${versionInfo.latestVersion}`], {
|
|
293
|
+
stdio: 'inherit',
|
|
294
|
+
});
|
|
295
|
+
if (result.error || result.status !== 0) {
|
|
296
|
+
return {
|
|
297
|
+
...versionInfo,
|
|
298
|
+
attempted: true,
|
|
299
|
+
updated: false,
|
|
300
|
+
upToDate: false,
|
|
301
|
+
reason: result.error?.message ??
|
|
302
|
+
`npm install exited with status ${result.status ?? 'unknown'} while updating BTX CLI.`,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
...versionInfo,
|
|
307
|
+
attempted: true,
|
|
308
|
+
updated: true,
|
|
309
|
+
upToDate: false,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=self-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../src/self-update.ts"],"names":[],"mappings":"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"}
|