@scalebun/cli 1.10.2 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/lib/commands/ci-init.d.ts.map +1 -1
  2. package/lib/commands/ci-init.js +80 -2
  3. package/lib/commands/ci-init.js.map +1 -1
  4. package/lib/commands/doctor.d.ts.map +1 -1
  5. package/lib/commands/doctor.js +148 -3
  6. package/lib/commands/doctor.js.map +1 -1
  7. package/lib/commands/link.d.ts +16 -0
  8. package/lib/commands/link.d.ts.map +1 -0
  9. package/lib/commands/link.js +164 -0
  10. package/lib/commands/link.js.map +1 -0
  11. package/lib/commands/login.d.ts.map +1 -1
  12. package/lib/commands/login.js +29 -7
  13. package/lib/commands/login.js.map +1 -1
  14. package/lib/commands/ota-bundle.d.ts +15 -2
  15. package/lib/commands/ota-bundle.d.ts.map +1 -1
  16. package/lib/commands/ota-bundle.js +142 -12
  17. package/lib/commands/ota-bundle.js.map +1 -1
  18. package/lib/commands/ota-channels.d.ts.map +1 -1
  19. package/lib/commands/ota-channels.js +213 -21
  20. package/lib/commands/ota-channels.js.map +1 -1
  21. package/lib/commands/ota-delete-bundle.d.ts.map +1 -1
  22. package/lib/commands/ota-delete-bundle.js +15 -4
  23. package/lib/commands/ota-delete-bundle.js.map +1 -1
  24. package/lib/commands/ota-inspect.d.ts +3 -0
  25. package/lib/commands/ota-inspect.d.ts.map +1 -0
  26. package/lib/commands/ota-inspect.js +258 -0
  27. package/lib/commands/ota-inspect.js.map +1 -0
  28. package/lib/commands/ota-keys.d.ts +25 -0
  29. package/lib/commands/ota-keys.d.ts.map +1 -1
  30. package/lib/commands/ota-keys.js +329 -27
  31. package/lib/commands/ota-keys.js.map +1 -1
  32. package/lib/commands/ota-promote.d.ts +3 -0
  33. package/lib/commands/ota-promote.d.ts.map +1 -0
  34. package/lib/commands/ota-promote.js +194 -0
  35. package/lib/commands/ota-promote.js.map +1 -0
  36. package/lib/commands/ota-publish.d.ts.map +1 -1
  37. package/lib/commands/ota-publish.js +108 -38
  38. package/lib/commands/ota-publish.js.map +1 -1
  39. package/lib/commands/ota-rollout.d.ts.map +1 -1
  40. package/lib/commands/ota-rollout.js +212 -171
  41. package/lib/commands/ota-rollout.js.map +1 -1
  42. package/lib/commands/quickstart.d.ts.map +1 -1
  43. package/lib/commands/quickstart.js +110 -8
  44. package/lib/commands/quickstart.js.map +1 -1
  45. package/lib/commands/shell.d.ts +28 -0
  46. package/lib/commands/shell.d.ts.map +1 -0
  47. package/lib/commands/shell.js +512 -0
  48. package/lib/commands/shell.js.map +1 -0
  49. package/lib/index.js +140 -4
  50. package/lib/index.js.map +1 -1
  51. package/lib/ui/menu.d.ts +109 -0
  52. package/lib/ui/menu.d.ts.map +1 -0
  53. package/lib/ui/menu.js +314 -0
  54. package/lib/ui/menu.js.map +1 -0
  55. package/lib/utils/bundle.d.ts.map +1 -1
  56. package/lib/utils/bundle.js +7 -1
  57. package/lib/utils/bundle.js.map +1 -1
  58. package/lib/utils/context.d.ts +88 -0
  59. package/lib/utils/context.d.ts.map +1 -0
  60. package/lib/utils/context.js +247 -0
  61. package/lib/utils/context.js.map +1 -0
  62. package/lib/utils/credentials.d.ts +16 -0
  63. package/lib/utils/credentials.d.ts.map +1 -1
  64. package/lib/utils/credentials.js +14 -3
  65. package/lib/utils/credentials.js.map +1 -1
  66. package/lib/utils/guide.d.ts +63 -0
  67. package/lib/utils/guide.d.ts.map +1 -0
  68. package/lib/utils/guide.js +189 -0
  69. package/lib/utils/guide.js.map +1 -0
  70. package/lib/utils/output.d.ts +96 -0
  71. package/lib/utils/output.d.ts.map +1 -0
  72. package/lib/utils/output.js +135 -0
  73. package/lib/utils/output.js.map +1 -0
  74. package/lib/utils/prompt.d.ts +109 -6
  75. package/lib/utils/prompt.d.ts.map +1 -1
  76. package/lib/utils/prompt.js +222 -20
  77. package/lib/utils/prompt.js.map +1 -1
  78. package/lib/utils/provenance.d.ts +30 -0
  79. package/lib/utils/provenance.d.ts.map +1 -0
  80. package/lib/utils/provenance.js +157 -0
  81. package/lib/utils/provenance.js.map +1 -0
  82. package/lib/utils/resolve.d.ts +81 -0
  83. package/lib/utils/resolve.d.ts.map +1 -0
  84. package/lib/utils/resolve.js +139 -0
  85. package/lib/utils/resolve.js.map +1 -0
  86. package/lib/utils/sdkBin.d.ts +18 -0
  87. package/lib/utils/sdkBin.d.ts.map +1 -0
  88. package/lib/utils/sdkBin.js +76 -0
  89. package/lib/utils/sdkBin.js.map +1 -0
  90. package/lib/utils/ui.d.ts +10 -1
  91. package/lib/utils/ui.d.ts.map +1 -1
  92. package/lib/utils/ui.js +18 -57
  93. package/lib/utils/ui.js.map +1 -1
  94. package/lib/utils/validate.d.ts +62 -0
  95. package/lib/utils/validate.d.ts.map +1 -0
  96. package/lib/utils/validate.js +189 -0
  97. package/lib/utils/validate.js.map +1 -0
  98. package/package.json +3 -2
@@ -40,9 +40,11 @@ exports.canPromptHidden = canPromptHidden;
40
40
  exports.promptHidden = promptHidden;
41
41
  exports.closePrompts = closePrompts;
42
42
  exports.text = text;
43
+ exports.confirmPhrase = confirmPhrase;
43
44
  exports.confirm = confirm;
44
45
  exports.number = number;
45
46
  exports.select = select;
47
+ exports.confirmDestructive = confirmDestructive;
46
48
  const chalk_1 = __importDefault(require("chalk"));
47
49
  const readline = __importStar(require("readline"));
48
50
  /**
@@ -134,6 +136,13 @@ function promptHidden(query) {
134
136
  // stdin. One interface reads sequential lines correctly. It is created lazily —
135
137
  // after the raw-mode `select`s run — so it never fights their stdin handling.
136
138
  let sharedRl = null;
139
+ // The interactive session used to LEND its own readline to this module, because
140
+ // it held one open for the whole session and two interfaces on one stdin is a
141
+ // top-tier source of "the CLI just hangs" — both attach listeners, the last one
142
+ // consumes the keypress stream, and neither sees a complete line. The session
143
+ // no longer holds one: it owns stdin in raw mode for the menu and hands it back
144
+ // before running anything, so commands are free to make their own prompts here.
145
+ // One owner at a time, enforced by structure rather than by a lending protocol.
137
146
  function getRl() {
138
147
  if (!sharedRl) {
139
148
  sharedRl = readline.createInterface({ input: process.stdin, output: process.stdout });
@@ -167,39 +176,189 @@ function ask(query) {
167
176
  });
168
177
  });
169
178
  }
170
- /** Free-text question with an optional default (shown in parentheses). */
179
+ /**
180
+ * Free-text question with an optional default (shown in parentheses).
181
+ *
182
+ * ── Empty is a question, not an answer ──────────────────────────────────────
183
+ *
184
+ * This used to return '' the moment someone pressed Enter with nothing typed,
185
+ * and every caller then invented its own reaction. `text('App id')` in the
186
+ * publish wizard did `if (!id) process.exit(1)` — a silent exit 1, no message,
187
+ * from a prompt that had just told you it wanted an app id. Others carried the
188
+ * empty string onward until the API rejected a field the user never saw.
189
+ *
190
+ * Pressing Enter at a prompt with no default is almost never a decision; it is
191
+ * someone hurrying, or not knowing what is wanted. So empty now re-asks and
192
+ * explains, and callers with something sensible to fall back on pass a
193
+ * `default` — which is what "Enter means yes" should always have looked like.
194
+ * `allowEmpty` remains for fields that are honestly optional.
195
+ */
171
196
  async function text(query, opts = {}) {
172
197
  const suffix = opts.default ? chalk_1.default.dim(` (${opts.default})`) : '';
173
- const answer = (await ask(`${chalk_1.default.cyan('?')} ${query}${suffix}: `)).trim();
174
- return answer || opts.default || '';
198
+ let empties = 0;
199
+ for (;;) {
200
+ const raw = (await ask(`${chalk_1.default.cyan('?')} ${query}${suffix}: `)).trim();
201
+ const answer = raw || opts.default || '';
202
+ if (!answer && !opts.allowEmpty) {
203
+ bailOnEmptyLoop(++empties, `${query} is required.`);
204
+ console.log(chalk_1.default.yellow(' Nothing entered — this one is needed to continue.'));
205
+ if (opts.help)
206
+ console.log(chalk_1.default.dim(` ${opts.help}`));
207
+ continue;
208
+ }
209
+ const problem = answer && opts.validate ? opts.validate(answer) : null;
210
+ if (problem) {
211
+ console.log(chalk_1.default.yellow(` ${problem}`));
212
+ if (opts.help)
213
+ console.log(chalk_1.default.dim(` ${opts.help}`));
214
+ continue;
215
+ }
216
+ return answer;
217
+ }
218
+ }
219
+ /**
220
+ * Type-this-exact-phrase confirmation, for the destructive commands.
221
+ *
222
+ * Empty and wrong are DIFFERENT mistakes and deserve different answers:
223
+ *
224
+ * empty — cancel. Enter must stay an escape from a prompt that is about to
225
+ * delete a channel or roll back a fleet; re-asking would trap
226
+ * someone whose actual intent was to back out. But say so, rather
227
+ * than printing "Cancelled" and leaving them to guess whether the
228
+ * keystroke registered.
229
+ * wrong — re-ask. A typo in a channel name is not a decision to cancel, and
230
+ * making the operator re-run the whole command mid-incident to fix
231
+ * one character is the worst moment to be pedantic.
232
+ */
233
+ async function confirmPhrase(query, expected, opts = {}) {
234
+ const normalise = (v) => (opts.caseInsensitive ? v.toLowerCase() : v);
235
+ for (;;) {
236
+ const answer = (await ask(`${chalk_1.default.cyan('?')} ${query}`)).trim();
237
+ if (!answer) {
238
+ console.log(chalk_1.default.dim(' Nothing typed — cancelled.'));
239
+ return false;
240
+ }
241
+ if (normalise(answer) === normalise(expected))
242
+ return true;
243
+ console.log(chalk_1.default.yellow(` That is not "${expected}" — got "${answer}".`));
244
+ console.log(chalk_1.default.dim(' Type it exactly, or press Enter to cancel.'));
245
+ }
246
+ }
247
+ /**
248
+ * Guard against a re-ask loop becoming a hang.
249
+ *
250
+ * `ask()` resolves '' both when a person presses Enter and when stdin closes,
251
+ * and the two are indistinguishable from here. So a prompt that re-asks on
252
+ * empty would spin forever against a closed or piped stdin, printing its
253
+ * help text into a void — a CI job that hangs until the runner kills it,
254
+ * looking like a network fault rather than a missing flag.
255
+ *
256
+ * Off a TTY there is nobody to help, so the first empty answer is fatal. On a
257
+ * TTY the cap is high enough that a real person never meets it.
258
+ */
259
+ function bailOnEmptyLoop(attempts, what) {
260
+ const interactive = process.stdin.isTTY && process.stdout.isTTY;
261
+ if (interactive && attempts < 10)
262
+ return;
263
+ console.error(`❌ ${what}`);
264
+ if (!interactive) {
265
+ console.error(' Nothing is attached to answer this prompt — pass it as a flag instead.');
266
+ }
267
+ process.exit(1);
175
268
  }
176
- /** Yes/no question. Empty input takes the default. */
269
+ const YES = new Set(['y', 'yes', 'true', '1']);
270
+ const NO = new Set(['n', 'no', 'false', '0']);
271
+ /**
272
+ * Yes/no question. Empty input takes the default; anything unrecognised
273
+ * RE-ASKS.
274
+ *
275
+ * ── Why it re-asks ──────────────────────────────────────────────────────────
276
+ *
277
+ * This used to be `return answer === 'y' || answer === 'yes'`, so every input
278
+ * that was not literally yes counted as no. Typing `50` at
279
+ * "Promote v14 to 100% of devices? (y/N)" — a completely reasonable thing to
280
+ * type when you wanted 50% — silently meant "no", and the CLI reported
281
+ * "Cancelled — nothing was promoted" as though the user had declined. The
282
+ * person did not decline. They answered a different question, and the tool
283
+ * discarded the answer and blamed them for it.
284
+ *
285
+ * The same swallow hid `yes please`, `Y ` with a stray space, and a mistyped
286
+ * `t`. Silently reading all of those as "no" is safe for the fleet and awful
287
+ * for the human: the destructive path is protected while the intent is lost
288
+ * without a word.
289
+ */
177
290
  async function confirm(query, opts = {}) {
178
- const def = opts.default ?? false;
179
- const answer = (await ask(`${chalk_1.default.cyan('?')} ${query} ${chalk_1.default.dim(def ? '(Y/n)' : '(y/N)')}: `))
180
- .trim()
181
- .toLowerCase();
182
- if (!answer)
183
- return def;
184
- return answer === 'y' || answer === 'yes';
291
+ const required = opts.default === undefined;
292
+ // The suffix has to tell the truth about what Enter does. `(y/n)` with
293
+ // neither letter capitalised is the standing convention for "no default,
294
+ // answer the question" — writing `(y/N)` here and then re-asking would be a
295
+ // prompt that lies about its own contract.
296
+ const suffix = required ? '(y/n)' : opts.default ? '(Y/n)' : '(y/N)';
297
+ let empties = 0;
298
+ for (;;) {
299
+ const answer = (await ask(`${chalk_1.default.cyan('?')} ${query} ${chalk_1.default.dim(suffix)}: `))
300
+ .trim()
301
+ .toLowerCase();
302
+ if (!answer) {
303
+ if (!required)
304
+ return opts.default;
305
+ bailOnEmptyLoop(++empties, `${query} needs a yes or no.`);
306
+ console.log(chalk_1.default.yellow(' This one has no default — answer y or n.'));
307
+ console.log(chalk_1.default.dim(' Ctrl+C backs out without doing anything.'));
308
+ continue;
309
+ }
310
+ if (YES.has(answer))
311
+ return true;
312
+ if (NO.has(answer))
313
+ return false;
314
+ // A number here almost always means the user was answering the quantity in
315
+ // the question rather than the yes/no, so say so instead of "invalid".
316
+ if (/^\d+%?$/.test(answer)) {
317
+ console.log(chalk_1.default.yellow(` "${answer}" looks like a number — this is a yes or no question.`));
318
+ if (opts.numericHint)
319
+ console.log(chalk_1.default.dim(` ${opts.numericHint}`));
320
+ }
321
+ else {
322
+ console.log(chalk_1.default.yellow(` Please answer y or n — got "${answer}".`));
323
+ }
324
+ }
185
325
  }
186
326
  /** Integer question with optional default and min/max validation (loops until valid). */
187
327
  async function number(query, opts = {}) {
188
328
  const { min, max } = opts;
189
329
  const range = min !== undefined && max !== undefined ? ` between ${min} and ${max}` : '';
330
+ let empties = 0;
190
331
  // eslint-disable-next-line no-constant-condition
191
332
  while (true) {
192
333
  const suffix = opts.default !== undefined ? chalk_1.default.dim(` (${opts.default})`) : '';
193
334
  const raw = (await ask(`${chalk_1.default.cyan('?')} ${query}${suffix}: `)).trim();
194
335
  if (!raw && opts.default !== undefined)
195
336
  return opts.default;
196
- const n = Number(raw);
197
- if (Number.isInteger(n) &&
198
- (min === undefined || n >= min) &&
199
- (max === undefined || n <= max)) {
200
- return n;
337
+ // Empty with no default fell through to the format check below and was
338
+ // reported as `got ""`, which describes the input rather than the problem.
339
+ if (!raw) {
340
+ bailOnEmptyLoop(++empties, `${query} is required.`);
341
+ console.log(chalk_1.default.yellow(` Nothing entered — enter a whole number${range}.`));
342
+ continue;
343
+ }
344
+ // A trailing % is the obvious thing to type for something the question
345
+ // calls a percentage. Number('50%') is NaN, so without this the prompt
346
+ // rejects the right answer for a formatting reason.
347
+ const cleaned = raw.replace(/%$/, '').trim();
348
+ // Strict rather than Number(): that accepts '0x10', '1e3' and Infinity,
349
+ // and reading a hex literal as a rollout percentage helps nobody.
350
+ if (!/^[+-]?\d+$/.test(cleaned)) {
351
+ console.log(chalk_1.default.yellow(/^[+-]?\d*\.\d+$/.test(cleaned)
352
+ ? ` Whole numbers only${range} — got "${raw}".`
353
+ : ` Please enter a whole number${range} — got "${raw}".`));
354
+ continue;
201
355
  }
202
- console.log(chalk_1.default.yellow(` Please enter a whole number${range}.`));
356
+ const n = Number(cleaned);
357
+ if ((min !== undefined && n < min) || (max !== undefined && n > max)) {
358
+ console.log(chalk_1.default.yellow(` ${n} is out of range — enter a whole number${range}.`));
359
+ continue;
360
+ }
361
+ return n;
203
362
  }
204
363
  }
205
364
  /**
@@ -224,10 +383,16 @@ async function numberedSelect(query, choices, def) {
224
383
  const raw = (await ask(` Choose 1-${choices.length} ${chalk_1.default.dim(`(${def + 1})`)}: `)).trim();
225
384
  if (!raw)
226
385
  return choices[def].value;
227
- const n = parseInt(raw, 10);
228
- if (Number.isInteger(n) && n >= 1 && n <= choices.length)
386
+ // parseInt('2abc') is 2, so a typo used to select a neighbour of what the
387
+ // user meant. Require the whole answer to be the number.
388
+ if (!/^\d+$/.test(raw)) {
389
+ console.log(chalk_1.default.yellow(` Enter a number between 1 and ${choices.length} — got "${raw}".`));
390
+ continue;
391
+ }
392
+ const n = Number(raw);
393
+ if (n >= 1 && n <= choices.length)
229
394
  return choices[n - 1].value;
230
- console.log(chalk_1.default.yellow(` Enter a number between 1 and ${choices.length}.`));
395
+ console.log(chalk_1.default.yellow(` ${n} is not on the list — choose between 1 and ${choices.length}.`));
231
396
  }
232
397
  }
233
398
  function arrowSelect(query, choices, def) {
@@ -290,4 +455,41 @@ function arrowSelect(query, choices, def) {
290
455
  stdin.on('data', onData);
291
456
  });
292
457
  }
458
+ /**
459
+ * The "are you sure" for anything that cannot be undone.
460
+ *
461
+ * ── Why a select and not a y/n ──────────────────────────────────────────────
462
+ *
463
+ * A y/n prompt is answered by muscle memory: `y` is the key people press to get
464
+ * past a question, and the ones worth stopping for look identical to the ones
465
+ * that are not. A list has to be READ before it can be answered — the cursor
466
+ * starts on the safe row, and choosing the destructive one is a deliberate move
467
+ * downward rather than a reflex.
468
+ *
469
+ * `select()` gives arrow keys on a TTY and a numbered prompt anywhere else, so
470
+ * this degrades to something answerable over SSH or in a pipe.
471
+ *
472
+ * `consequence` is printed BEFORE the list, in the imperative present, because
473
+ * the moment to say what will happen is while the reader still has a choice.
474
+ * Off a TTY there is nobody to ask: the caller must have passed an explicit
475
+ * flag, and we say which one rather than hanging on a prompt nothing can answer.
476
+ */
477
+ async function confirmDestructive(opts) {
478
+ const { title, consequence = [], confirmLabel, flag = '--yes' } = opts;
479
+ console.log('');
480
+ console.log(chalk_1.default.yellow(`⚠️ ${title}`));
481
+ for (const line of consequence)
482
+ console.log(chalk_1.default.dim(` ${line}`));
483
+ console.log('');
484
+ if (!process.stdin.isTTY) {
485
+ console.error(`Refusing to continue without confirmation — there is no terminal to ask.
486
+ ` +
487
+ `Pass ${flag} if this is intentional.`);
488
+ return false;
489
+ }
490
+ return select('Are you sure?', [
491
+ { label: 'No, cancel', value: false, hint: 'nothing changes' },
492
+ { label: confirmLabel, value: true, hint: 'cannot be undone' },
493
+ ], { default: 0 });
494
+ }
293
495
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Build provenance for an OTA bundle — where the code came from and which CI run
3
+ * produced it. Sent (optionally) with the presign request so the dashboard can
4
+ * show Git SHA / PR / CI build / pipeline. Every field is best-effort: on a
5
+ * developer's laptop only the git fields resolve; in CI the run metadata fills in.
6
+ */
7
+ export interface Provenance {
8
+ gitSha?: string;
9
+ gitBranch?: string;
10
+ prNumber?: number;
11
+ ciProvider?: string;
12
+ ciPipeline?: string;
13
+ ciBuildNumber?: string;
14
+ ciRunUrl?: string;
15
+ }
16
+ export declare function collectProvenance(cwd?: string): Provenance;
17
+ export interface AssetEntry {
18
+ path: string;
19
+ assetType: 'js' | 'image' | 'font' | 'other';
20
+ sizeBytes: number;
21
+ sha256?: string;
22
+ }
23
+ /**
24
+ * Enumerate the bundle + its Metro assets into a manifest the backend stores as
25
+ * per-asset rows (so the dashboard can diff added/changed/removed and size
26
+ * regressions). The JS bundle is always the first entry; `assetsDir` is the
27
+ * `--assets-dest` directory from `buildBundle` (absent for pre-built bundles).
28
+ */
29
+ export declare function collectAssetManifest(bundlePath: string, bundleSha256: string, bundleSizeBytes: number, assetsDir?: string): AssetEntry[];
30
+ //# sourceMappingURL=provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/utils/provenance.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAsBD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,UAAU,CAmDzE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,UAAU,EAAE,CA6Bd"}
@@ -0,0 +1,157 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.collectProvenance = collectProvenance;
37
+ exports.collectAssetManifest = collectAssetManifest;
38
+ const childProcess = __importStar(require("child_process"));
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const hash_1 = require("./hash");
42
+ function git(args, cwd) {
43
+ try {
44
+ const out = childProcess
45
+ .execFileSync('git', args, { cwd, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] })
46
+ .trim();
47
+ return out || undefined;
48
+ }
49
+ catch {
50
+ return undefined;
51
+ }
52
+ }
53
+ /** Drop undefined keys so the JSON body stays clean. */
54
+ function compact(p) {
55
+ const out = {};
56
+ for (const [k, v] of Object.entries(p)) {
57
+ if (v !== undefined && v !== null && v !== '')
58
+ out[k] = v;
59
+ }
60
+ return out;
61
+ }
62
+ function collectProvenance(cwd = process.cwd()) {
63
+ const env = process.env;
64
+ // GitHub Actions
65
+ if (env.GITHUB_ACTIONS === 'true') {
66
+ const prMatch = /refs\/pull\/(\d+)\//.exec(env.GITHUB_REF ?? '');
67
+ return compact({
68
+ gitSha: env.GITHUB_SHA ?? git(['rev-parse', 'HEAD'], cwd),
69
+ gitBranch: env.GITHUB_REF_NAME ?? git(['rev-parse', '--abbrev-ref', 'HEAD'], cwd),
70
+ prNumber: prMatch ? Number(prMatch[1]) : undefined,
71
+ ciProvider: 'github-actions',
72
+ ciPipeline: env.GITHUB_WORKFLOW,
73
+ ciBuildNumber: env.GITHUB_RUN_NUMBER,
74
+ ciRunUrl: env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY && env.GITHUB_RUN_ID
75
+ ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}`
76
+ : undefined,
77
+ });
78
+ }
79
+ // GitLab CI
80
+ if (env.GITLAB_CI === 'true') {
81
+ return compact({
82
+ gitSha: env.CI_COMMIT_SHA ?? git(['rev-parse', 'HEAD'], cwd),
83
+ gitBranch: env.CI_COMMIT_REF_NAME ?? git(['rev-parse', '--abbrev-ref', 'HEAD'], cwd),
84
+ prNumber: env.CI_MERGE_REQUEST_IID ? Number(env.CI_MERGE_REQUEST_IID) : undefined,
85
+ ciProvider: 'gitlab-ci',
86
+ ciPipeline: env.CI_PIPELINE_NAME ?? env.CI_PROJECT_PATH,
87
+ ciBuildNumber: env.CI_PIPELINE_IID,
88
+ ciRunUrl: env.CI_PIPELINE_URL,
89
+ });
90
+ }
91
+ // Bitrise
92
+ if (env.BITRISE_IO === 'true') {
93
+ return compact({
94
+ gitSha: env.BITRISE_GIT_COMMIT ?? git(['rev-parse', 'HEAD'], cwd),
95
+ gitBranch: env.BITRISE_GIT_BRANCH ?? git(['rev-parse', '--abbrev-ref', 'HEAD'], cwd),
96
+ prNumber: env.BITRISE_PULL_REQUEST ? Number(env.BITRISE_PULL_REQUEST) : undefined,
97
+ ciProvider: 'bitrise',
98
+ ciPipeline: env.BITRISE_TRIGGERED_WORKFLOW_ID,
99
+ ciBuildNumber: env.BITRISE_BUILD_NUMBER,
100
+ ciRunUrl: env.BITRISE_BUILD_URL,
101
+ });
102
+ }
103
+ // Local / unknown CI — resolve what git can tell us.
104
+ return compact({
105
+ gitSha: git(['rev-parse', 'HEAD'], cwd),
106
+ gitBranch: git(['rev-parse', '--abbrev-ref', 'HEAD'], cwd),
107
+ });
108
+ }
109
+ function assetTypeForExt(p) {
110
+ const e = path.extname(p).toLowerCase();
111
+ if (['.js', '.jsbundle', '.hbc', '.bundle'].includes(e))
112
+ return 'js';
113
+ if (['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.bmp', '.ico'].includes(e))
114
+ return 'image';
115
+ if (['.ttf', '.otf', '.woff', '.woff2'].includes(e))
116
+ return 'font';
117
+ return 'other';
118
+ }
119
+ /**
120
+ * Enumerate the bundle + its Metro assets into a manifest the backend stores as
121
+ * per-asset rows (so the dashboard can diff added/changed/removed and size
122
+ * regressions). The JS bundle is always the first entry; `assetsDir` is the
123
+ * `--assets-dest` directory from `buildBundle` (absent for pre-built bundles).
124
+ */
125
+ function collectAssetManifest(bundlePath, bundleSha256, bundleSizeBytes, assetsDir) {
126
+ const assets = [
127
+ { path: path.basename(bundlePath), assetType: 'js', sizeBytes: bundleSizeBytes, sha256: bundleSha256 },
128
+ ];
129
+ if (assetsDir && fs.existsSync(assetsDir)) {
130
+ const walk = (dir) => {
131
+ for (const name of fs.readdirSync(dir)) {
132
+ const full = path.join(dir, name);
133
+ const st = fs.statSync(full);
134
+ if (st.isDirectory()) {
135
+ walk(full);
136
+ }
137
+ else {
138
+ const rel = path.relative(assetsDir, full).split(path.sep).join('/');
139
+ assets.push({
140
+ path: rel,
141
+ assetType: assetTypeForExt(name),
142
+ sizeBytes: st.size,
143
+ sha256: (0, hash_1.sha256File)(full),
144
+ });
145
+ }
146
+ }
147
+ };
148
+ try {
149
+ walk(assetsDir);
150
+ }
151
+ catch {
152
+ /* best-effort — a missing asset dir just means a JS-only manifest */
153
+ }
154
+ }
155
+ return assets;
156
+ }
157
+ //# sourceMappingURL=provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/utils/provenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Resolving what a command should act on, without making the operator type it.
3
+ *
4
+ * ── The chain, in order ─────────────────────────────────────────────────────
5
+ *
6
+ * 1. an explicit flag — always wins
7
+ * 2. SCALEBUN_APP_ID / scalebun.json — the common case, and silent
8
+ * 3. the account has exactly one app — auto-select and say so
9
+ * 4. a TTY — interactive picker
10
+ * 5. no TTY — hard error naming the flag
11
+ *
12
+ * Layer 5 is the one that must never be skipped. A prompt that blocks in CI is
13
+ * a deploy that hangs until the job times out, and it looks like a network
14
+ * fault rather than a missing flag. The publish wizard already got this right
15
+ * (`ota-publish.ts`, TTY-gated); this generalises that rule so every command
16
+ * inherits it instead of re-deciding.
17
+ *
18
+ * ── Why resolving beats prompting ───────────────────────────────────────────
19
+ *
20
+ * Prompting on nine commands turns a nine-flag problem into a nine-prompt
21
+ * problem. Layer 2 is where the win is: `scalebun link` once, and the flag
22
+ * disappears from every later invocation. There is a cost argument too —
23
+ * `fetchAllApps` walks orgs → projects → project-detail, so resolving from the
24
+ * network on every command pays N+1 HTTP calls every time.
25
+ */
26
+ export interface ResolveOpts {
27
+ /** The explicit flag value, if the user passed one. */
28
+ appId?: string;
29
+ /** Skip layers 3 and 4 — set by --json / --non-interactive / --yes. */
30
+ nonInteractive?: boolean;
31
+ /** Flag name to quote in the non-TTY error. */
32
+ flag?: string;
33
+ }
34
+ /**
35
+ * True when this process must not prompt: no TTY, or the caller forbade it.
36
+ *
37
+ * `isJson()` is the authority on machine mode rather than a per-command
38
+ * `opts.json`. Commander does not hand root options down to subcommand
39
+ * handlers — and because the root declares `--json` too, it consumes the flag
40
+ * before a subcommand ever sees it. So the flag is read once from raw argv at
41
+ * startup (`applyGlobalFlags`) and every consumer asks `output.ts`. The
42
+ * per-command `--json` declarations remain, purely so `--help` documents them.
43
+ */
44
+ export declare function isNonInteractive(opts?: {
45
+ nonInteractive?: boolean;
46
+ }): boolean;
47
+ /**
48
+ * Resolve the app id for a command.
49
+ *
50
+ * Never returns an empty string — it either returns an id or exits with a
51
+ * message naming the exact flag to pass.
52
+ */
53
+ export declare function resolveAppId(opts?: ResolveOpts): Promise<string>;
54
+ /**
55
+ * Resolve a release for the control commands.
56
+ *
57
+ * `pause` and `rollback` already accepted an optional --release-id and fell
58
+ * back to "the single ACTIVE release"; `resume` required it and never resolved,
59
+ * which made the undo of the panic button the hardest command to type. This
60
+ * generalises the resolver and lets each caller say which statuses count —
61
+ * so `resume` can look for PAUSED rather than ACTIVE.
62
+ */
63
+ export interface ReleaseRow {
64
+ id: string;
65
+ status: string;
66
+ rolloutPercent?: number;
67
+ bundle?: {
68
+ version?: number;
69
+ platform?: string;
70
+ };
71
+ }
72
+ export declare function describeRelease(r: ReleaseRow): string;
73
+ export declare function resolveRelease(releases: ReleaseRow[], opts: {
74
+ releaseId?: string;
75
+ /** Statuses that qualify when no id was given. */
76
+ statuses: string[];
77
+ /** Verb used in messages: "resume", "pause", … */
78
+ verb: string;
79
+ nonInteractive?: boolean;
80
+ }): Promise<ReleaseRow>;
81
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/utils/resolve.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CASjF;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsE1E;AAmBD;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAIrD;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,UAAU,EAAE,EACtB,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,OAAO,CAAC,UAAU,CAAC,CAmCrB"}