@lizard-build/cli 0.3.39 → 0.3.40
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/commands/git.js +7 -6
- package/dist/commands/git.js.map +1 -1
- package/dist/commands/login.js +5 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logs.js +4 -1
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/redeploy.js +8 -6
- package/dist/commands/redeploy.js.map +1 -1
- package/dist/commands/secrets.js +5 -0
- package/dist/commands/secrets.js.map +1 -1
- package/dist/commands/ssh.js +24 -18
- package/dist/commands/ssh.js.map +1 -1
- package/dist/commands/up.js +26 -16
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/upgrade.js +20 -1
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +8 -2
- package/dist/lib/api.js +28 -5
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/auth.d.ts +8 -1
- package/dist/lib/auth.js +33 -3
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/config.js +14 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/updater.d.ts +22 -4
- package/dist/lib/updater.js +137 -49
- package/dist/lib/updater.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/git.ts +11 -6
- package/src/commands/login.ts +5 -0
- package/src/commands/logs.ts +12 -5
- package/src/commands/redeploy.ts +12 -6
- package/src/commands/secrets.ts +8 -0
- package/src/commands/ssh.ts +24 -25
- package/src/commands/up.ts +26 -17
- package/src/commands/upgrade.ts +21 -1
- package/src/index.ts +12 -1
- package/src/lib/api.ts +25 -4
- package/src/lib/auth.ts +33 -3
- package/src/lib/config.ts +13 -2
- package/src/lib/updater.ts +130 -45
- package/test/unit/config.test.ts +29 -0
package/dist/commands/upgrade.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import { info, success, isJSONMode, printJSON } from "../lib/format.js";
|
|
3
|
-
import { CURRENT_VERSION, getLatestVersion, selfUpdate } from "../lib/updater.js";
|
|
3
|
+
import { CURRENT_VERSION, getLatestVersion, selfUpdate, isStandaloneBinary } from "../lib/updater.js";
|
|
4
4
|
export function registerUpgrade(program) {
|
|
5
5
|
program
|
|
6
6
|
.command("upgrade")
|
|
@@ -57,6 +57,25 @@ export function registerUpgrade(program) {
|
|
|
57
57
|
info(chalk.dim(`Run \`lizard upgrade\` to install`));
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
+
// npm install — self-replacing process.execPath would overwrite the
|
|
61
|
+
// user's node binary. Point at npm instead.
|
|
62
|
+
if (!isStandaloneBinary()) {
|
|
63
|
+
if (isJSONMode()) {
|
|
64
|
+
printJSON({
|
|
65
|
+
currentVersion: CURRENT_VERSION,
|
|
66
|
+
latestVersion: latest,
|
|
67
|
+
updateAvailable: true,
|
|
68
|
+
upgraded: false,
|
|
69
|
+
method: "npm",
|
|
70
|
+
hint: "npm install -g @lizard-build/cli@latest",
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
info(`Update available: v${CURRENT_VERSION} → ${chalk.green("v" + latest)}`);
|
|
75
|
+
info(`This copy was installed via npm. Upgrade with:`);
|
|
76
|
+
info(` ${chalk.cyan("npm install -g @lizard-build/cli@latest")}`);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
60
79
|
info(`Upgrading v${CURRENT_VERSION} → ${chalk.green("v" + latest)}...`);
|
|
61
80
|
try {
|
|
62
81
|
await selfUpdate((msg) => info(chalk.dim(msg)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import chalk from "chalk";
|
|
|
4
4
|
import { setJSONMode, isJSONMode, error } from "./lib/format.js";
|
|
5
5
|
import { requireAuth } from "./lib/auth.js";
|
|
6
6
|
import { setBaseURL, setAccessToken, APIError } from "./lib/api.js";
|
|
7
|
-
import { checkForUpdateInBackground, CURRENT_VERSION } from "./lib/updater.js";
|
|
7
|
+
import { checkForUpdateInBackground, runBackgroundUpdate, CURRENT_VERSION } from "./lib/updater.js";
|
|
8
8
|
const BANNER = chalk.rgb(16, 185, 129)([
|
|
9
9
|
"╔═══════════════════════════════════════════════════╗",
|
|
10
10
|
"║ ║",
|
|
@@ -207,6 +207,12 @@ function dumpCommand(cmd) {
|
|
|
207
207
|
};
|
|
208
208
|
}
|
|
209
209
|
async function main() {
|
|
210
|
+
// Hidden entry point: detached child spawned by checkForUpdateInBackground.
|
|
211
|
+
// Handled before commander so it never shows up in help or telemetry.
|
|
212
|
+
if (process.argv.includes("__lizard-update")) {
|
|
213
|
+
await runBackgroundUpdate();
|
|
214
|
+
process.exit(0);
|
|
215
|
+
}
|
|
210
216
|
// Set JSON mode from argv *before* parseAsync so the catch block below
|
|
211
217
|
// honors --json even when commander rejects before our preAction hook
|
|
212
218
|
// fires (e.g. unknown command, malformed global flag). Non-TTY auto-mode
|
|
@@ -256,6 +262,9 @@ async function main() {
|
|
|
256
262
|
}
|
|
257
263
|
else {
|
|
258
264
|
error(msg);
|
|
265
|
+
if (status === 401) {
|
|
266
|
+
process.stderr.write("Run `lizard login` to re-authenticate.\n");
|
|
267
|
+
}
|
|
259
268
|
}
|
|
260
269
|
// Exit codes derived from APIError.status (or tagged error codes), not message text
|
|
261
270
|
const isAuth = status === 401 || status === 403 || code === "NOT_AUTHENTICATED";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api.d.ts
CHANGED
|
@@ -30,5 +30,11 @@ export declare const api: {
|
|
|
30
30
|
patch: <T = any>(path: string, body?: unknown) => Promise<T>;
|
|
31
31
|
delete: <T = any>(path: string) => Promise<T>;
|
|
32
32
|
};
|
|
33
|
-
/** Stream SSE and call handler for each data line. Return false to stop.
|
|
34
|
-
|
|
33
|
+
/** Stream SSE and call handler for each data line. Return false to stop.
|
|
34
|
+
*
|
|
35
|
+
* `opts.idleTimeoutMs` — stop (resolve) when no *event* arrives for that
|
|
36
|
+
* long. Heartbeat comments don't reset the timer. Used by `--tail`-style
|
|
37
|
+
* snapshot reads that must not follow a live stream forever. */
|
|
38
|
+
export declare function streamSSE(path: string, handler: (event: string, data: string) => boolean | void, opts?: {
|
|
39
|
+
idleTimeoutMs?: number;
|
|
40
|
+
}): Promise<void>;
|
package/dist/lib/api.js
CHANGED
|
@@ -88,8 +88,12 @@ export const api = {
|
|
|
88
88
|
patch: (path, body) => request("PATCH", path, body),
|
|
89
89
|
delete: (path) => request("DELETE", path),
|
|
90
90
|
};
|
|
91
|
-
/** Stream SSE and call handler for each data line. Return false to stop.
|
|
92
|
-
|
|
91
|
+
/** Stream SSE and call handler for each data line. Return false to stop.
|
|
92
|
+
*
|
|
93
|
+
* `opts.idleTimeoutMs` — stop (resolve) when no *event* arrives for that
|
|
94
|
+
* long. Heartbeat comments don't reset the timer. Used by `--tail`-style
|
|
95
|
+
* snapshot reads that must not follow a live stream forever. */
|
|
96
|
+
export function streamSSE(path, handler, opts = {}) {
|
|
93
97
|
return new Promise((resolve, reject) => {
|
|
94
98
|
const url = new URL(baseURL + path);
|
|
95
99
|
const token = _accessToken || getToken();
|
|
@@ -108,6 +112,21 @@ export function streamSSE(path, handler) {
|
|
|
108
112
|
res.on("end", () => reject(new APIError(res.statusCode, `SSE failed: ${body}`)));
|
|
109
113
|
return;
|
|
110
114
|
}
|
|
115
|
+
let idleTimer;
|
|
116
|
+
const finish = () => {
|
|
117
|
+
if (idleTimer)
|
|
118
|
+
clearTimeout(idleTimer);
|
|
119
|
+
req.destroy();
|
|
120
|
+
resolve();
|
|
121
|
+
};
|
|
122
|
+
const armIdleTimer = () => {
|
|
123
|
+
if (!opts.idleTimeoutMs)
|
|
124
|
+
return;
|
|
125
|
+
if (idleTimer)
|
|
126
|
+
clearTimeout(idleTimer);
|
|
127
|
+
idleTimer = setTimeout(finish, opts.idleTimeoutMs);
|
|
128
|
+
};
|
|
129
|
+
armIdleTimer();
|
|
111
130
|
let buffer = "";
|
|
112
131
|
let currentEvent = "";
|
|
113
132
|
let currentData = "";
|
|
@@ -120,10 +139,10 @@ export function streamSSE(path, handler) {
|
|
|
120
139
|
const trimmed = line.replace(/\r$/, "");
|
|
121
140
|
if (trimmed === "") {
|
|
122
141
|
if (currentData) {
|
|
142
|
+
armIdleTimer();
|
|
123
143
|
const cont = handler(currentEvent, currentData);
|
|
124
144
|
if (cont === false) {
|
|
125
|
-
|
|
126
|
-
resolve();
|
|
145
|
+
finish();
|
|
127
146
|
return;
|
|
128
147
|
}
|
|
129
148
|
}
|
|
@@ -138,7 +157,11 @@ export function streamSSE(path, handler) {
|
|
|
138
157
|
}
|
|
139
158
|
}
|
|
140
159
|
});
|
|
141
|
-
res.on("end",
|
|
160
|
+
res.on("end", () => {
|
|
161
|
+
if (idleTimer)
|
|
162
|
+
clearTimeout(idleTimer);
|
|
163
|
+
resolve();
|
|
164
|
+
});
|
|
142
165
|
res.on("error", reject);
|
|
143
166
|
});
|
|
144
167
|
req.on("error", reject);
|
package/dist/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth.d.ts
CHANGED
|
@@ -7,7 +7,14 @@ export declare function saveCredentials(creds: Credentials): void;
|
|
|
7
7
|
export declare function clearCredentials(): void;
|
|
8
8
|
export declare function isLoggedIn(): boolean;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Expiry of a JWT in epoch-ms, decoded from the `exp` claim. Returns null
|
|
11
|
+
* for opaque/undecodable tokens — those are treated as valid and left for
|
|
12
|
+
* the server to reject.
|
|
13
|
+
*/
|
|
14
|
+
export declare function jwtExpiryMs(token: string): number | null;
|
|
15
|
+
/**
|
|
16
|
+
* Ensure the user is authenticated. If not logged in (or the saved token
|
|
17
|
+
* has expired — there is no refresh endpoint) and TTY, auto-login.
|
|
11
18
|
* Returns credentials or throws.
|
|
12
19
|
*/
|
|
13
20
|
export declare function requireAuth(): Promise<Credentials>;
|
package/dist/lib/auth.js
CHANGED
|
@@ -26,7 +26,32 @@ function isTTY() {
|
|
|
26
26
|
return Boolean(process.stdout.isTTY);
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* Expiry of a JWT in epoch-ms, decoded from the `exp` claim. Returns null
|
|
30
|
+
* for opaque/undecodable tokens — those are treated as valid and left for
|
|
31
|
+
* the server to reject.
|
|
32
|
+
*/
|
|
33
|
+
export function jwtExpiryMs(token) {
|
|
34
|
+
try {
|
|
35
|
+
const payload = token.split(".")[1];
|
|
36
|
+
if (!payload)
|
|
37
|
+
return null;
|
|
38
|
+
const decoded = JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
|
|
39
|
+
return typeof decoded.exp === "number" ? decoded.exp * 1000 : null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function isExpired(creds) {
|
|
46
|
+
const expMs = jwtExpiryMs(creds.accessToken) ??
|
|
47
|
+
(creds.expiresAt ? Date.parse(creds.expiresAt) : null);
|
|
48
|
+
if (expMs === null || Number.isNaN(expMs))
|
|
49
|
+
return false;
|
|
50
|
+
return Date.now() > expMs - 60_000; // 60s margin
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Ensure the user is authenticated. If not logged in (or the saved token
|
|
54
|
+
* has expired — there is no refresh endpoint) and TTY, auto-login.
|
|
30
55
|
* Returns credentials or throws.
|
|
31
56
|
*/
|
|
32
57
|
export async function requireAuth() {
|
|
@@ -38,13 +63,18 @@ export async function requireAuth() {
|
|
|
38
63
|
};
|
|
39
64
|
}
|
|
40
65
|
const creds = loadCredentials();
|
|
41
|
-
if (creds)
|
|
66
|
+
if (creds && !isExpired(creds))
|
|
42
67
|
return creds;
|
|
43
68
|
if (!isTTY()) {
|
|
44
|
-
const err = new Error(
|
|
69
|
+
const err = new Error(creds
|
|
70
|
+
? "Session expired. Run `lizard login` again or set LIZARD_TOKEN."
|
|
71
|
+
: "Not authenticated. Set LIZARD_TOKEN or run `lizard login` first.");
|
|
45
72
|
err.code = "NOT_AUTHENTICATED";
|
|
46
73
|
throw err;
|
|
47
74
|
}
|
|
75
|
+
if (creds) {
|
|
76
|
+
process.stderr.write("Session expired — logging in again...\n");
|
|
77
|
+
}
|
|
48
78
|
const { performLogin } = await import("../commands/login.js");
|
|
49
79
|
return performLogin();
|
|
50
80
|
}
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,UAAU,EACV,UAAU,GAEX,MAAM,aAAa,CAAC;AAIrB,yDAAyD;AACzD,MAAM,UAAU,QAAQ;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9D,OAAO,eAAe,EAAE,EAAE,WAAW,IAAI,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,EAAE,CAAC,WAAW,IAAI,IAAI,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,WAAW,CAAC;IAC1B,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,EAAE,KAAK,IAAI,CAAC;AAC7B,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -59,7 +59,15 @@ export function updateProjectLink(patch, cwd = process.cwd()) {
|
|
|
59
59
|
const existing = getProjectLink(cwd);
|
|
60
60
|
if (!existing)
|
|
61
61
|
return;
|
|
62
|
-
|
|
62
|
+
const merged = { ...existing, ...patch };
|
|
63
|
+
// An explicit serviceId/serviceName in the patch (including `undefined`,
|
|
64
|
+
// i.e. "clear it") must override the legacy mirror too — otherwise
|
|
65
|
+
// setProjectLink resurrects the old value from appId/appName.
|
|
66
|
+
if ("serviceId" in patch)
|
|
67
|
+
merged.appId = patch.serviceId;
|
|
68
|
+
if ("serviceName" in patch)
|
|
69
|
+
merged.appName = patch.serviceName;
|
|
70
|
+
setProjectLink(merged, cwd);
|
|
63
71
|
}
|
|
64
72
|
export function clearProjectLink(cwd = process.cwd()) {
|
|
65
73
|
const config = loadConfig();
|
|
@@ -82,7 +90,11 @@ export async function resolveProjectId(flagValue) {
|
|
|
82
90
|
}
|
|
83
91
|
const { api } = await import("./api.js");
|
|
84
92
|
const projects = await api.get("/api/projects");
|
|
85
|
-
|
|
93
|
+
// Case-insensitive, matching `lizard link` / `lizard init` behaviour.
|
|
94
|
+
const lower = flagValue.toLowerCase();
|
|
95
|
+
const match = projects.find((p) => p.id.toLowerCase() === lower ||
|
|
96
|
+
p.slug?.toLowerCase() === lower ||
|
|
97
|
+
p.name?.toLowerCase() === lower);
|
|
86
98
|
if (!match)
|
|
87
99
|
throw new Error(`Project "${flagValue}" not found.`);
|
|
88
100
|
return match.id;
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C,4EAA4E;AAC5E,8EAA8E;AAC9E,yEAAyE;AACzE,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW;QAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AACD,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC;AAgCD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAW,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC9D,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACxD,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO;QACL,GAAG,GAAG;QACN,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK;QACrC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAiB,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IAC3E,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC;IACvB,wCAAwC;IACxC,MAAM,UAAU,GAAgB;QAC9B,GAAG,IAAI;QACP,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK;QACnC,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO;QACzC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK;QACvC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO;KAC9C,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;IAClC,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAA2B,EAC3B,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/updater.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
export declare const CURRENT_VERSION = "0.3.
|
|
1
|
+
export declare const CURRENT_VERSION = "0.3.40";
|
|
2
|
+
/**
|
|
3
|
+
* True only when running as the Bun-compiled standalone binary. Under
|
|
4
|
+
* npm/node, `process.execPath` is the *node* executable — self-update would
|
|
5
|
+
* overwrite the user's Node.js install with the lizard binary.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isStandaloneBinary(): boolean;
|
|
2
8
|
export type LatestVersionResult = {
|
|
3
9
|
kind: "ok";
|
|
4
10
|
version: string;
|
|
@@ -9,8 +15,20 @@ export type LatestVersionResult = {
|
|
|
9
15
|
kind: "error";
|
|
10
16
|
};
|
|
11
17
|
export declare function getLatestVersion(): Promise<LatestVersionResult>;
|
|
18
|
+
export declare function isNewerVersion(latest: string, current: string): boolean;
|
|
12
19
|
export declare function selfUpdate(onProgress?: (msg: string) => void): Promise<boolean>;
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
20
|
+
/**
|
|
21
|
+
* Kick off an update check without delaying the current command.
|
|
22
|
+
*
|
|
23
|
+
* The check+download runs in a *detached child process* (`lizard
|
|
24
|
+
* __lizard-update`): an in-process fetch would keep the event loop alive and
|
|
25
|
+
* make every command linger until GitHub answers. Checks are throttled via a
|
|
26
|
+
* stamp file (6h), disabled with LIZARD_NO_UPDATE/CI, and only run for the
|
|
27
|
+
* standalone binary — npm installs upgrade through npm.
|
|
28
|
+
*/
|
|
16
29
|
export declare function checkForUpdateInBackground(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Body of the hidden `__lizard-update` command: check the latest release and
|
|
32
|
+
* install it, leaving a notice file for the next foreground run.
|
|
33
|
+
*/
|
|
34
|
+
export declare function runBackgroundUpdate(): Promise<void>;
|
package/dist/lib/updater.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { createWriteStream, existsSync, renameSync, chmodSync } from "node:fs";
|
|
1
|
+
import { createWriteStream, existsSync, renameSync, chmodSync, unlinkSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
2
2
|
import { pipeline } from "node:stream/promises";
|
|
3
3
|
import { Readable } from "node:stream";
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
|
|
4
|
+
import { join, dirname } from "node:path";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import { spawn } from "node:child_process";
|
|
7
|
+
export const CURRENT_VERSION = "0.3.40";
|
|
7
8
|
const RELEASES_API = "https://api.github.com/repos/lizard-build/lizard-cli/releases/latest";
|
|
8
9
|
const RELEASE_BASE = "https://github.com/lizard-build/lizard-cli/releases/latest/download";
|
|
10
|
+
/** Minimum gap between background update checks. */
|
|
11
|
+
const CHECK_INTERVAL_MS = 6 * 60 * 60 * 1000; // 6h
|
|
9
12
|
function getBinaryName() {
|
|
10
13
|
const os = process.platform;
|
|
11
14
|
const arch = process.arch;
|
|
@@ -19,6 +22,21 @@ function getBinaryName() {
|
|
|
19
22
|
return "lizard-linux-arm64";
|
|
20
23
|
return null;
|
|
21
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* True only when running as the Bun-compiled standalone binary. Under
|
|
27
|
+
* npm/node, `process.execPath` is the *node* executable — self-update would
|
|
28
|
+
* overwrite the user's Node.js install with the lizard binary.
|
|
29
|
+
*/
|
|
30
|
+
export function isStandaloneBinary() {
|
|
31
|
+
return typeof globalThis.Bun !== "undefined";
|
|
32
|
+
}
|
|
33
|
+
function stateDir() {
|
|
34
|
+
return process.env.LIZARD_HOME
|
|
35
|
+
? join(process.env.LIZARD_HOME, ".lizard")
|
|
36
|
+
: join(os.homedir(), ".lizard");
|
|
37
|
+
}
|
|
38
|
+
const checkStampFile = () => join(stateDir(), "update-check.json");
|
|
39
|
+
const updateNoticeFile = () => join(stateDir(), "update-notice.json");
|
|
22
40
|
export async function getLatestVersion() {
|
|
23
41
|
try {
|
|
24
42
|
const res = await fetch(RELEASES_API, {
|
|
@@ -39,64 +57,134 @@ export async function getLatestVersion() {
|
|
|
39
57
|
return { kind: "error" };
|
|
40
58
|
}
|
|
41
59
|
}
|
|
60
|
+
export function isNewerVersion(latest, current) {
|
|
61
|
+
const [maj, min, pat] = latest.split(".").map(Number);
|
|
62
|
+
const [cmaj, cmin, cpat] = current.split(".").map(Number);
|
|
63
|
+
if (![maj, min, pat, cmaj, cmin, cpat].every(Number.isFinite))
|
|
64
|
+
return false;
|
|
65
|
+
return maj > cmaj || (maj === cmaj && min > cmin) || (maj === cmaj && min === cmin && pat > cpat);
|
|
66
|
+
}
|
|
42
67
|
export async function selfUpdate(onProgress) {
|
|
43
68
|
const binaryName = getBinaryName();
|
|
44
69
|
if (!binaryName)
|
|
45
70
|
return false;
|
|
46
|
-
//
|
|
71
|
+
// Refuse to replace anything that isn't the standalone lizard binary —
|
|
72
|
+
// under npm the execPath is the user's node executable.
|
|
73
|
+
if (!isStandaloneBinary())
|
|
74
|
+
return false;
|
|
47
75
|
const currentBin = process.execPath;
|
|
48
76
|
if (!existsSync(currentBin))
|
|
49
77
|
return false;
|
|
50
78
|
const url = `${RELEASE_BASE}/${binaryName}`;
|
|
51
|
-
|
|
79
|
+
// Download next to the target binary: rename() must stay on one filesystem
|
|
80
|
+
// (tmpdir is often tmpfs on Linux → EXDEV).
|
|
81
|
+
const tmp = join(dirname(currentBin), `.lizard-update-${process.pid}`);
|
|
52
82
|
onProgress?.(`Downloading ${binaryName}...`);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
83
|
+
try {
|
|
84
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(60000) });
|
|
85
|
+
if (!res.ok)
|
|
86
|
+
throw new Error(`Download failed: ${res.status}`);
|
|
87
|
+
const writer = createWriteStream(tmp);
|
|
88
|
+
await pipeline(Readable.fromWeb(res.body), writer);
|
|
89
|
+
chmodSync(tmp, 0o755);
|
|
90
|
+
onProgress?.("Installing...");
|
|
91
|
+
renameSync(tmp, currentBin);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
try {
|
|
96
|
+
unlinkSync(tmp);
|
|
97
|
+
}
|
|
98
|
+
catch { }
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
62
101
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
102
|
+
function readJSON(file) {
|
|
103
|
+
try {
|
|
104
|
+
return JSON.parse(readFileSync(file, "utf8"));
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function writeJSON(file, data) {
|
|
111
|
+
try {
|
|
112
|
+
mkdirSync(stateDir(), { recursive: true });
|
|
113
|
+
writeFileSync(file, JSON.stringify(data));
|
|
114
|
+
}
|
|
115
|
+
catch { }
|
|
116
|
+
}
|
|
117
|
+
function autoUpdateDisabled() {
|
|
118
|
+
return Boolean(process.env.LIZARD_NO_UPDATE || process.env.CI);
|
|
119
|
+
}
|
|
120
|
+
/** Print (once) the notice left behind by a completed background update. */
|
|
121
|
+
function flushUpdateNotice() {
|
|
122
|
+
const notice = readJSON(updateNoticeFile());
|
|
123
|
+
if (!notice?.to)
|
|
124
|
+
return;
|
|
125
|
+
try {
|
|
126
|
+
unlinkSync(updateNoticeFile());
|
|
127
|
+
}
|
|
128
|
+
catch { }
|
|
129
|
+
// We are already running the replaced binary, so notice.to should match.
|
|
130
|
+
if (notice.to === CURRENT_VERSION && notice.from !== CURRENT_VERSION) {
|
|
131
|
+
process.stderr.write(` lizard auto-updated: v${notice.from} → v${notice.to}\n`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Kick off an update check without delaying the current command.
|
|
136
|
+
*
|
|
137
|
+
* The check+download runs in a *detached child process* (`lizard
|
|
138
|
+
* __lizard-update`): an in-process fetch would keep the event loop alive and
|
|
139
|
+
* make every command linger until GitHub answers. Checks are throttled via a
|
|
140
|
+
* stamp file (6h), disabled with LIZARD_NO_UPDATE/CI, and only run for the
|
|
141
|
+
* standalone binary — npm installs upgrade through npm.
|
|
142
|
+
*/
|
|
66
143
|
export function checkForUpdateInBackground() {
|
|
67
|
-
// Only auto-update in TTY; skip CI / piped output
|
|
68
144
|
if (!process.stdout.isTTY)
|
|
69
145
|
return;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
146
|
+
if (autoUpdateDisabled())
|
|
147
|
+
return;
|
|
148
|
+
flushUpdateNotice();
|
|
149
|
+
if (!isStandaloneBinary())
|
|
150
|
+
return;
|
|
151
|
+
const stamp = readJSON(checkStampFile());
|
|
152
|
+
if (stamp?.lastCheckAt && Date.now() - stamp.lastCheckAt < CHECK_INTERVAL_MS)
|
|
153
|
+
return;
|
|
154
|
+
// Stamp before spawning so parallel commands don't pile up children.
|
|
155
|
+
writeJSON(checkStampFile(), { lastCheckAt: Date.now(), lastVersion: CURRENT_VERSION });
|
|
156
|
+
try {
|
|
157
|
+
const child = spawn(process.execPath, ["__lizard-update"], {
|
|
158
|
+
detached: true,
|
|
159
|
+
stdio: "ignore",
|
|
160
|
+
});
|
|
161
|
+
child.unref();
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// never break the actual command over an update check
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Body of the hidden `__lizard-update` command: check the latest release and
|
|
169
|
+
* install it, leaving a notice file for the next foreground run.
|
|
170
|
+
*/
|
|
171
|
+
export async function runBackgroundUpdate() {
|
|
172
|
+
if (autoUpdateDisabled() || !isStandaloneBinary())
|
|
173
|
+
return;
|
|
174
|
+
const r = await getLatestVersion();
|
|
175
|
+
writeJSON(checkStampFile(), { lastCheckAt: Date.now(), lastVersion: r.kind === "ok" ? r.version : CURRENT_VERSION });
|
|
176
|
+
if (r.kind !== "ok")
|
|
177
|
+
return;
|
|
178
|
+
if (!isNewerVersion(r.version, CURRENT_VERSION))
|
|
179
|
+
return;
|
|
180
|
+
try {
|
|
181
|
+
const ok = await selfUpdate();
|
|
182
|
+
if (ok) {
|
|
183
|
+
writeJSON(updateNoticeFile(), { from: CURRENT_VERSION, to: r.version, at: Date.now() });
|
|
92
184
|
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
});
|
|
98
|
-
// Don't block process exit
|
|
99
|
-
if (typeof promise.unref === "function")
|
|
100
|
-
promise.unref();
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// silent — retried after the next throttle window
|
|
188
|
+
}
|
|
101
189
|
}
|
|
102
190
|
//# sourceMappingURL=updater.js.map
|