@scalebun/cli 1.12.0 → 1.12.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.
- package/lib/api/client.d.ts +25 -2
- package/lib/api/client.d.ts.map +1 -1
- package/lib/api/client.js +129 -13
- package/lib/api/client.js.map +1 -1
- package/lib/commands/ota-delete-bundle.d.ts.map +1 -1
- package/lib/commands/ota-delete-bundle.js +4 -15
- package/lib/commands/ota-delete-bundle.js.map +1 -1
- package/lib/commands/ota-keys.d.ts.map +1 -1
- package/lib/commands/ota-keys.js +46 -133
- package/lib/commands/ota-keys.js.map +1 -1
- package/lib/commands/ota-publish.d.ts.map +1 -1
- package/lib/commands/ota-publish.js +34 -11
- package/lib/commands/ota-publish.js.map +1 -1
- package/lib/commands/ota-rollout.d.ts.map +1 -1
- package/lib/commands/ota-rollout.js +1 -12
- package/lib/commands/ota-rollout.js.map +1 -1
- package/lib/utils/bundle.d.ts.map +1 -1
- package/lib/utils/bundle.js +35 -3
- package/lib/utils/bundle.js.map +1 -1
- package/lib/utils/prompt.d.ts +0 -29
- package/lib/utils/prompt.d.ts.map +1 -1
- package/lib/utils/prompt.js +0 -38
- package/lib/utils/prompt.js.map +1 -1
- package/package.json +1 -1
package/lib/api/client.d.ts
CHANGED
|
@@ -10,8 +10,17 @@ export declare class ApiClient {
|
|
|
10
10
|
constructor(creds: Credentials);
|
|
11
11
|
/** GET request — returns parsed JSON. */
|
|
12
12
|
get<T = unknown>(path: string): Promise<T>;
|
|
13
|
-
/**
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* POST request — sends JSON body, returns parsed JSON.
|
|
15
|
+
*
|
|
16
|
+
* Pass `{ retry: true }` for calls that are safe to repeat after a dropped
|
|
17
|
+
* connection (e.g. presign) so a single network blip does not abort the whole
|
|
18
|
+
* operation. Left off by default: a blind retry of a non-idempotent write
|
|
19
|
+
* could duplicate it.
|
|
20
|
+
*/
|
|
21
|
+
post<T = unknown>(path: string, body?: unknown, opts?: {
|
|
22
|
+
retry?: boolean;
|
|
23
|
+
}): Promise<T>;
|
|
15
24
|
/** PATCH request — sends JSON body, returns parsed JSON. */
|
|
16
25
|
patch<T = unknown>(path: string, body?: unknown): Promise<T>;
|
|
17
26
|
/** DELETE request — returns parsed JSON. */
|
|
@@ -24,6 +33,20 @@ export declare class ApiClient {
|
|
|
24
33
|
postMultipart(path: string, body: Buffer, contentType: string, extraHeaders?: Record<string, string>): Promise<unknown>;
|
|
25
34
|
/** Upload raw bytes via PUT to an arbitrary URL (presigned S3/R2). */
|
|
26
35
|
putBytes(url: string, data: Buffer, contentType: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Perform a request with bounded retries for transient failures.
|
|
38
|
+
*
|
|
39
|
+
* A "socket hang up" (ECONNRESET), a connection timeout, or a 502/503/504 from
|
|
40
|
+
* the gateway means the call never got a real answer — retrying is the correct
|
|
41
|
+
* response, not a duplicate. GETs retry by default; other methods retry only
|
|
42
|
+
* when the caller opts in (`retry: true`), which publish does for presign: it
|
|
43
|
+
* is effectively idempotent (a stray UPLOADING bundle row is superseded on the
|
|
44
|
+
* next attempt), and one network blip should never abort a whole publish.
|
|
45
|
+
*/
|
|
27
46
|
private request;
|
|
47
|
+
/** A single request/response round-trip. Rejects with {@link HttpError} on a
|
|
48
|
+
* non-2xx status (carrying the code) and with the raw error on a transport
|
|
49
|
+
* failure, so the retry policy in {@link request} can classify both. */
|
|
50
|
+
private attempt;
|
|
28
51
|
}
|
|
29
52
|
//# sourceMappingURL=client.d.ts.map
|
package/lib/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA0ExD;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,EAAE,WAAW;IAU9B,yCAAyC;IACnC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD;;;;;;;OAOG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GACzB,OAAO,CAAC,CAAC,CAAC;IAIb,4DAA4D;IACtD,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlE,4CAA4C;IACtC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAInD;;;;OAIG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACxC,OAAO,CAAC,OAAO,CAAC;IAgDnB,sEAAsE;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C7E;;;;;;;;;OASG;YACW,OAAO;IA8BrB;;6EAEyE;IACzE,OAAO,CAAC,OAAO;CAgFhB"}
|
package/lib/api/client.js
CHANGED
|
@@ -37,6 +37,68 @@ exports.ApiClient = void 0;
|
|
|
37
37
|
const https = __importStar(require("https"));
|
|
38
38
|
const http = __importStar(require("http"));
|
|
39
39
|
const transportSecurity_1 = require("../utils/transportSecurity");
|
|
40
|
+
/**
|
|
41
|
+
* A CLI run makes only a handful of control-plane calls, and often with a long
|
|
42
|
+
* gap between them: Metro bundling and Hermes compilation sit between the
|
|
43
|
+
* warm-up request and the presign request. Node 19+ defaults the global agent
|
|
44
|
+
* to keepAlive:true, so that later request reuses a pooled socket the server
|
|
45
|
+
* (or the Caddy proxy in front of it) has already closed after its idle
|
|
46
|
+
* timeout. The write lands on a half-closed socket and surfaces as an
|
|
47
|
+
* intermittent "socket hang up" (ECONNRESET) — exactly the presign failures.
|
|
48
|
+
*
|
|
49
|
+
* A dedicated agent with keepAlive:false gives every request a fresh
|
|
50
|
+
* connection. At this call volume the extra handshake is irrelevant, and it
|
|
51
|
+
* removes the stale-socket race at the source.
|
|
52
|
+
*/
|
|
53
|
+
const httpsAgent = new https.Agent({ keepAlive: false });
|
|
54
|
+
const httpAgent = new http.Agent({ keepAlive: false });
|
|
55
|
+
/** Network error codes worth another attempt — the request never got a reply. */
|
|
56
|
+
const RETRYABLE_CODES = new Set([
|
|
57
|
+
'ECONNRESET',
|
|
58
|
+
'ECONNABORTED',
|
|
59
|
+
'ETIMEDOUT',
|
|
60
|
+
'EPIPE',
|
|
61
|
+
'EAI_AGAIN',
|
|
62
|
+
]);
|
|
63
|
+
/** Transient HTTP statuses (gateway / overload). 4xx and plain 500 are NOT here
|
|
64
|
+
* on purpose — those are deterministic and retrying only hides the real error. */
|
|
65
|
+
const RETRYABLE_STATUS = new Set([429, 502, 503, 504]);
|
|
66
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
67
|
+
/** Carries the HTTP status so the retry policy can tell 4xx from a gateway blip. */
|
|
68
|
+
class HttpError extends Error {
|
|
69
|
+
constructor(message, statusCode) {
|
|
70
|
+
super(message);
|
|
71
|
+
this.statusCode = statusCode;
|
|
72
|
+
this.name = 'HttpError';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** A failure is retryable if it never produced a real answer (dropped socket,
|
|
76
|
+
* timeout, DNS blip) or came back as a transient gateway/overload status. */
|
|
77
|
+
function isRetryable(err) {
|
|
78
|
+
if (err instanceof HttpError) {
|
|
79
|
+
return err.statusCode !== undefined && RETRYABLE_STATUS.has(err.statusCode);
|
|
80
|
+
}
|
|
81
|
+
const code = err?.code;
|
|
82
|
+
if (code && RETRYABLE_CODES.has(code))
|
|
83
|
+
return true;
|
|
84
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
85
|
+
return /socket hang up|ECONNRESET|ECONNABORTED|ETIMEDOUT|EPIPE|timed out/i.test(msg);
|
|
86
|
+
}
|
|
87
|
+
/** Exponential backoff (300ms, 900ms, 2700ms) with ±20% jitter, capped at 5s. */
|
|
88
|
+
function backoffMs(attempt) {
|
|
89
|
+
const base = 300 * Math.pow(3, attempt - 1);
|
|
90
|
+
const jitter = base * 0.2 * (Math.random() * 2 - 1);
|
|
91
|
+
return Math.min(base + jitter, 5000);
|
|
92
|
+
}
|
|
93
|
+
/** Short, human label for the retry notice on stderr. */
|
|
94
|
+
function describeError(err) {
|
|
95
|
+
if (err instanceof HttpError && err.statusCode)
|
|
96
|
+
return `HTTP ${err.statusCode}`;
|
|
97
|
+
const code = err?.code;
|
|
98
|
+
if (code)
|
|
99
|
+
return code;
|
|
100
|
+
return err instanceof Error ? err.message.split('\n')[0] : 'network error';
|
|
101
|
+
}
|
|
40
102
|
/**
|
|
41
103
|
* Minimal HTTP client for the Scalebun backend API.
|
|
42
104
|
* Uses PAT-based auth (Authorization: Bearer <token>).
|
|
@@ -56,9 +118,16 @@ class ApiClient {
|
|
|
56
118
|
async get(path) {
|
|
57
119
|
return this.request('GET', path);
|
|
58
120
|
}
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
|
|
121
|
+
/**
|
|
122
|
+
* POST request — sends JSON body, returns parsed JSON.
|
|
123
|
+
*
|
|
124
|
+
* Pass `{ retry: true }` for calls that are safe to repeat after a dropped
|
|
125
|
+
* connection (e.g. presign) so a single network blip does not abort the whole
|
|
126
|
+
* operation. Left off by default: a blind retry of a non-idempotent write
|
|
127
|
+
* could duplicate it.
|
|
128
|
+
*/
|
|
129
|
+
async post(path, body, opts) {
|
|
130
|
+
return this.request('POST', path, body, opts);
|
|
62
131
|
}
|
|
63
132
|
/** PATCH request — sends JSON body, returns parsed JSON. */
|
|
64
133
|
async patch(path, body) {
|
|
@@ -76,7 +145,8 @@ class ApiClient {
|
|
|
76
145
|
async postMultipart(path, body, contentType, extraHeaders = {}) {
|
|
77
146
|
return new Promise((resolve, reject) => {
|
|
78
147
|
const parsed = new URL(`${this.apiUrl}${path}`);
|
|
79
|
-
const
|
|
148
|
+
const isHttps = parsed.protocol === 'https:';
|
|
149
|
+
const transport = isHttps ? https : http;
|
|
80
150
|
const req = transport.request({
|
|
81
151
|
hostname: parsed.hostname,
|
|
82
152
|
port: parsed.port || undefined,
|
|
@@ -89,6 +159,7 @@ class ApiClient {
|
|
|
89
159
|
'Content-Length': body.length,
|
|
90
160
|
...extraHeaders,
|
|
91
161
|
},
|
|
162
|
+
agent: isHttps ? httpsAgent : httpAgent,
|
|
92
163
|
timeout: 120000,
|
|
93
164
|
}, (res) => {
|
|
94
165
|
const chunks = [];
|
|
@@ -121,7 +192,8 @@ class ApiClient {
|
|
|
121
192
|
async putBytes(url, data, contentType) {
|
|
122
193
|
return new Promise((resolve, reject) => {
|
|
123
194
|
const parsed = new URL(url);
|
|
124
|
-
const
|
|
195
|
+
const isHttps = parsed.protocol === 'https:';
|
|
196
|
+
const transport = isHttps ? https : http;
|
|
125
197
|
const req = transport.request({
|
|
126
198
|
hostname: parsed.hostname,
|
|
127
199
|
port: parsed.port || undefined,
|
|
@@ -131,6 +203,7 @@ class ApiClient {
|
|
|
131
203
|
'Content-Type': contentType,
|
|
132
204
|
'Content-Length': data.length,
|
|
133
205
|
},
|
|
206
|
+
agent: isHttps ? httpsAgent : httpAgent,
|
|
134
207
|
timeout: 600000, // 10 minutes
|
|
135
208
|
}, (res) => {
|
|
136
209
|
const chunks = [];
|
|
@@ -154,11 +227,48 @@ class ApiClient {
|
|
|
154
227
|
req.end();
|
|
155
228
|
});
|
|
156
229
|
}
|
|
157
|
-
|
|
230
|
+
/**
|
|
231
|
+
* Perform a request with bounded retries for transient failures.
|
|
232
|
+
*
|
|
233
|
+
* A "socket hang up" (ECONNRESET), a connection timeout, or a 502/503/504 from
|
|
234
|
+
* the gateway means the call never got a real answer — retrying is the correct
|
|
235
|
+
* response, not a duplicate. GETs retry by default; other methods retry only
|
|
236
|
+
* when the caller opts in (`retry: true`), which publish does for presign: it
|
|
237
|
+
* is effectively idempotent (a stray UPLOADING bundle row is superseded on the
|
|
238
|
+
* next attempt), and one network blip should never abort a whole publish.
|
|
239
|
+
*/
|
|
240
|
+
async request(method, path, body, opts) {
|
|
241
|
+
const retry = opts?.retry ?? method === 'GET';
|
|
242
|
+
const maxAttempts = retry ? 4 : 1;
|
|
243
|
+
let lastErr;
|
|
244
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
245
|
+
try {
|
|
246
|
+
return await this.attempt(method, path, body);
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
lastErr = err;
|
|
250
|
+
if (attempt < maxAttempts && isRetryable(err)) {
|
|
251
|
+
const delay = backoffMs(attempt);
|
|
252
|
+
process.stderr.write(` ↻ ${method} ${path} — ${describeError(err)}; ` +
|
|
253
|
+
`retrying in ${Math.round(delay)}ms (attempt ${attempt + 1}/${maxAttempts})\n`);
|
|
254
|
+
await sleep(delay);
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
throw err;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Unreachable: the loop either returns a value or throws on the last attempt.
|
|
261
|
+
throw lastErr;
|
|
262
|
+
}
|
|
263
|
+
/** A single request/response round-trip. Rejects with {@link HttpError} on a
|
|
264
|
+
* non-2xx status (carrying the code) and with the raw error on a transport
|
|
265
|
+
* failure, so the retry policy in {@link request} can classify both. */
|
|
266
|
+
attempt(method, path, body) {
|
|
158
267
|
return new Promise((resolve, reject) => {
|
|
159
268
|
const fullUrl = `${this.apiUrl}${path}`;
|
|
160
269
|
const parsed = new URL(fullUrl);
|
|
161
|
-
const
|
|
270
|
+
const isHttps = parsed.protocol === 'https:';
|
|
271
|
+
const transport = isHttps ? https : http;
|
|
162
272
|
const headers = {
|
|
163
273
|
Authorization: `Bearer ${this.token}`,
|
|
164
274
|
Accept: 'application/json',
|
|
@@ -175,13 +285,15 @@ class ApiClient {
|
|
|
175
285
|
path: parsed.pathname + parsed.search,
|
|
176
286
|
method,
|
|
177
287
|
headers,
|
|
288
|
+
agent: isHttps ? httpsAgent : httpAgent,
|
|
178
289
|
timeout: 30000,
|
|
179
290
|
}, (res) => {
|
|
180
291
|
const chunks = [];
|
|
181
292
|
res.on('data', (c) => chunks.push(c));
|
|
182
293
|
res.on('end', () => {
|
|
183
294
|
const raw = Buffer.concat(chunks).toString('utf-8');
|
|
184
|
-
|
|
295
|
+
const status = res.statusCode ?? 0;
|
|
296
|
+
if (status >= 200 && status < 300) {
|
|
185
297
|
try {
|
|
186
298
|
resolve(JSON.parse(raw));
|
|
187
299
|
}
|
|
@@ -189,25 +301,29 @@ class ApiClient {
|
|
|
189
301
|
resolve(raw);
|
|
190
302
|
}
|
|
191
303
|
}
|
|
192
|
-
else if (
|
|
304
|
+
else if (status === 401) {
|
|
193
305
|
// The most common cause by far is an expired credential — the old
|
|
194
306
|
// login flow stored 15-minute session JWTs, and CI secrets rot.
|
|
195
307
|
// A bare "Unauthorized" cost real debugging time during the first
|
|
196
308
|
// device run; the fix is one command, so name it.
|
|
197
|
-
reject(new
|
|
309
|
+
reject(new HttpError(`API error (HTTP 401): ${raw.slice(0, 200)}\n` +
|
|
198
310
|
` Your credential is invalid or has expired.\n` +
|
|
199
311
|
` → Locally: run \`scalebun login\`\n` +
|
|
200
|
-
` → In CI: refresh the SCALEBUN_TOKEN secret (create one in the dashboard under Settings → Access Tokens)
|
|
312
|
+
` → In CI: refresh the SCALEBUN_TOKEN secret (create one in the dashboard under Settings → Access Tokens)`, 401));
|
|
201
313
|
}
|
|
202
314
|
else {
|
|
203
|
-
reject(new
|
|
315
|
+
reject(new HttpError(`API error (HTTP ${status}): ${raw.slice(0, 500)}`, status));
|
|
204
316
|
}
|
|
205
317
|
});
|
|
206
318
|
});
|
|
207
319
|
req.on('error', reject);
|
|
208
320
|
req.on('timeout', () => {
|
|
209
321
|
req.destroy();
|
|
210
|
-
|
|
322
|
+
// Tag the timeout so isRetryable() treats it like the dropped-socket
|
|
323
|
+
// case rather than an opaque Error.
|
|
324
|
+
const e = new Error('Request timed out');
|
|
325
|
+
e.code = 'ETIMEDOUT';
|
|
326
|
+
reject(e);
|
|
211
327
|
});
|
|
212
328
|
if (payload)
|
|
213
329
|
req.write(payload);
|
package/lib/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;AAE7B,kEAAgE;AAEhE;;;;GAIG;AACH,MAAa,SAAS;IAIpB,YAAY,KAAkB;QAC5B,uEAAuE;QACvE,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,gDAAgD;QAChD,IAAI,CAAC,MAAM,GAAG,IAAA,sCAAkB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,GAAG,CAAc,IAAY;QACjC,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ota-delete-bundle.d.ts","sourceRoot":"","sources":["../../src/commands/ota-delete-bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ota-delete-bundle.d.ts","sourceRoot":"","sources":["../../src/commands/ota-delete-bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAiDjE"}
|
|
@@ -32,17 +32,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.registerOtaDeleteBundleCommand = registerOtaDeleteBundleCommand;
|
|
40
37
|
const readline = __importStar(require("readline"));
|
|
41
38
|
const credentials_1 = require("../utils/credentials");
|
|
42
39
|
const client_1 = require("../api/client");
|
|
43
|
-
const resolve_1 = require("../utils/resolve");
|
|
44
|
-
const output_1 = require("../utils/output");
|
|
45
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
46
40
|
/**
|
|
47
41
|
* `scalebun ota delete-bundle` — permanent, irreversible artifact deletion.
|
|
48
42
|
*
|
|
@@ -56,11 +50,10 @@ function registerOtaDeleteBundleCommand(ota) {
|
|
|
56
50
|
.command('delete-bundle')
|
|
57
51
|
.alias('delete')
|
|
58
52
|
.description('Delete an OTA bundle permanently')
|
|
59
|
-
.
|
|
53
|
+
.requiredOption('--app-id <id>', 'Scalebun app ID')
|
|
60
54
|
.requiredOption('--bundle-id <id>', 'OTA bundle ID to delete')
|
|
61
55
|
.option('--yes', 'Skip the confirmation prompt (required in CI / non-interactive shells)')
|
|
62
56
|
.action(async (opts) => {
|
|
63
|
-
const appId = await (0, resolve_1.resolveAppId)({ appId: opts.appId });
|
|
64
57
|
const creds = (0, credentials_1.readCredentials)();
|
|
65
58
|
if (!creds) {
|
|
66
59
|
console.error('❌ Not logged in. Run `scalebun login` first.');
|
|
@@ -72,7 +65,7 @@ function registerOtaDeleteBundleCommand(ota) {
|
|
|
72
65
|
' Re-run with --yes if this is intentional.');
|
|
73
66
|
process.exit(1);
|
|
74
67
|
}
|
|
75
|
-
console.log(`\n⚠️ This permanently deletes bundle ${opts.bundleId} from app ${appId}.\n` +
|
|
68
|
+
console.log(`\n⚠️ This permanently deletes bundle ${opts.bundleId} from app ${opts.appId}.\n` +
|
|
76
69
|
' Devices still running it keep their local copy, but it can never be\n' +
|
|
77
70
|
' re-served, and any release pointing at it becomes undeliverable.\n');
|
|
78
71
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
@@ -85,13 +78,9 @@ function registerOtaDeleteBundleCommand(ota) {
|
|
|
85
78
|
}
|
|
86
79
|
const client = new client_1.ApiClient(creds);
|
|
87
80
|
try {
|
|
88
|
-
console.log(`🗑️ Deleting bundle ${opts.bundleId} from App ${appId}…`);
|
|
89
|
-
await client.delete(`/saas/apps/${appId}/ota/bundles/${opts.bundleId}`);
|
|
81
|
+
console.log(`🗑️ Deleting bundle ${opts.bundleId} from App ${opts.appId}…`);
|
|
82
|
+
await client.delete(`/saas/apps/${opts.appId}/ota/bundles/${opts.bundleId}`);
|
|
90
83
|
console.log(`✅ Bundle ${opts.bundleId} deleted successfully.`);
|
|
91
|
-
(0, output_1.printNextSteps)([
|
|
92
|
-
{ label: 'Check nothing points at it', argv: ['ota', 'releases'] },
|
|
93
|
-
{ label: 'List what remains', argv: ['ota', 'bundles'] },
|
|
94
|
-
], chalk_1.default.cyan);
|
|
95
84
|
}
|
|
96
85
|
catch (err) {
|
|
97
86
|
console.error(`❌ Failed to delete bundle: ${err.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ota-delete-bundle.js","sourceRoot":"","sources":["../../src/commands/ota-delete-bundle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ota-delete-bundle.js","sourceRoot":"","sources":["../../src/commands/ota-delete-bundle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,wEAiDC;AA9DD,mDAAqC;AAErC,sDAAuD;AACvD,0CAA0C;AAE1C;;;;;;;GAOG;AACH,SAAgB,8BAA8B,CAAC,GAAY;IACzD,GAAG;SACA,OAAO,CAAC,eAAe,CAAC;SACxB,KAAK,CAAC,QAAQ,CAAC;SACf,WAAW,CAAC,kCAAkC,CAAC;SAC/C,cAAc,CAAC,eAAe,EAAE,iBAAiB,CAAC;SAClD,cAAc,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;SAC7D,MAAM,CAAC,OAAO,EAAE,wEAAwE,CAAC;SACzF,MAAM,CAAC,KAAK,EAAE,IAAwD,EAAE,EAAE;QACzE,MAAM,KAAK,GAAG,IAAA,6BAAe,GAAE,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CACX,yEAAyE;oBACvE,8CAA8C,CACjD,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,GAAG,CACT,yCAAyC,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,KAAK,KAAK;gBAChF,0EAA0E;gBAC1E,uEAAuE,CAC1E,CAAC;YACF,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CACnD,EAAE,CAAC,QAAQ,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAC3D,CAAC;YACF,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAC5E,MAAM,MAAM,CAAC,MAAM,CAAM,cAAc,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,QAAQ,wBAAwB,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ota-keys.d.ts","sourceRoot":"","sources":["../../src/commands/ota-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AA4BjC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CA8B1F;AAUD,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAInE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,MAAgB,GAAG,MAAM,GAAG,IAAI,CASzE;
|
|
1
|
+
{"version":3,"file":"ota-keys.d.ts","sourceRoot":"","sources":["../../src/commands/ota-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AA4BjC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CA8B1F;AAUD,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAInE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,MAAgB,GAAG,MAAM,GAAG,IAAI,CASzE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA6UzD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAcf"}
|