@scalebun/cli 1.10.1 → 1.11.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.
- package/lib/commands/ci-init.d.ts.map +1 -1
- package/lib/commands/ci-init.js +80 -2
- package/lib/commands/ci-init.js.map +1 -1
- package/lib/commands/doctor.d.ts.map +1 -1
- package/lib/commands/doctor.js +148 -3
- package/lib/commands/doctor.js.map +1 -1
- package/lib/commands/link.d.ts +16 -0
- package/lib/commands/link.d.ts.map +1 -0
- package/lib/commands/link.js +164 -0
- package/lib/commands/link.js.map +1 -0
- package/lib/commands/login.d.ts.map +1 -1
- package/lib/commands/login.js +29 -7
- package/lib/commands/login.js.map +1 -1
- package/lib/commands/ota-bundle.d.ts +15 -2
- package/lib/commands/ota-bundle.d.ts.map +1 -1
- package/lib/commands/ota-bundle.js +142 -12
- package/lib/commands/ota-bundle.js.map +1 -1
- package/lib/commands/ota-channels.d.ts.map +1 -1
- package/lib/commands/ota-channels.js +213 -21
- package/lib/commands/ota-channels.js.map +1 -1
- package/lib/commands/ota-inspect.d.ts +3 -0
- package/lib/commands/ota-inspect.d.ts.map +1 -0
- package/lib/commands/ota-inspect.js +258 -0
- package/lib/commands/ota-inspect.js.map +1 -0
- package/lib/commands/ota-keys.d.ts +18 -0
- package/lib/commands/ota-keys.d.ts.map +1 -1
- package/lib/commands/ota-keys.js +149 -4
- package/lib/commands/ota-keys.js.map +1 -1
- package/lib/commands/ota-promote.d.ts +3 -0
- package/lib/commands/ota-promote.d.ts.map +1 -0
- package/lib/commands/ota-promote.js +194 -0
- package/lib/commands/ota-promote.js.map +1 -0
- package/lib/commands/ota-publish.d.ts.map +1 -1
- package/lib/commands/ota-publish.js +114 -38
- 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 +201 -171
- package/lib/commands/ota-rollout.js.map +1 -1
- package/lib/commands/quickstart.d.ts.map +1 -1
- package/lib/commands/quickstart.js +110 -8
- package/lib/commands/quickstart.js.map +1 -1
- package/lib/commands/shell.d.ts +28 -0
- package/lib/commands/shell.d.ts.map +1 -0
- package/lib/commands/shell.js +512 -0
- package/lib/commands/shell.js.map +1 -0
- package/lib/index.js +140 -4
- package/lib/index.js.map +1 -1
- package/lib/ui/menu.d.ts +109 -0
- package/lib/ui/menu.d.ts.map +1 -0
- package/lib/ui/menu.js +314 -0
- package/lib/ui/menu.js.map +1 -0
- package/lib/utils/bundle.d.ts.map +1 -1
- package/lib/utils/bundle.js +24 -3
- package/lib/utils/bundle.js.map +1 -1
- package/lib/utils/context.d.ts +88 -0
- package/lib/utils/context.d.ts.map +1 -0
- package/lib/utils/context.js +247 -0
- package/lib/utils/context.js.map +1 -0
- package/lib/utils/credentials.d.ts +16 -0
- package/lib/utils/credentials.d.ts.map +1 -1
- package/lib/utils/credentials.js +14 -3
- package/lib/utils/credentials.js.map +1 -1
- package/lib/utils/guide.d.ts +63 -0
- package/lib/utils/guide.d.ts.map +1 -0
- package/lib/utils/guide.js +189 -0
- package/lib/utils/guide.js.map +1 -0
- package/lib/utils/output.d.ts +96 -0
- package/lib/utils/output.d.ts.map +1 -0
- package/lib/utils/output.js +135 -0
- package/lib/utils/output.js.map +1 -0
- package/lib/utils/prompt.d.ts +80 -6
- package/lib/utils/prompt.d.ts.map +1 -1
- package/lib/utils/prompt.js +184 -20
- package/lib/utils/prompt.js.map +1 -1
- package/lib/utils/provenance.d.ts +30 -0
- package/lib/utils/provenance.d.ts.map +1 -0
- package/lib/utils/provenance.js +157 -0
- package/lib/utils/provenance.js.map +1 -0
- package/lib/utils/resolve.d.ts +81 -0
- package/lib/utils/resolve.d.ts.map +1 -0
- package/lib/utils/resolve.js +139 -0
- package/lib/utils/resolve.js.map +1 -0
- package/lib/utils/sdkBin.d.ts +18 -0
- package/lib/utils/sdkBin.d.ts.map +1 -0
- package/lib/utils/sdkBin.js +76 -0
- package/lib/utils/sdkBin.js.map +1 -0
- package/lib/utils/ui.d.ts +10 -1
- package/lib/utils/ui.d.ts.map +1 -1
- package/lib/utils/ui.js +18 -57
- package/lib/utils/ui.js.map +1 -1
- package/lib/utils/validate.d.ts +62 -0
- package/lib/utils/validate.d.ts.map +1 -0
- package/lib/utils/validate.js +189 -0
- package/lib/utils/validate.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerOtaInspectCommands = registerOtaInspectCommands;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const client_1 = require("../api/client");
|
|
9
|
+
const validate_1 = require("../utils/validate");
|
|
10
|
+
const output_1 = require("../utils/output");
|
|
11
|
+
/** Kept beside the flags that accept them so the help text cannot drift. */
|
|
12
|
+
const PLATFORMS = ['android', 'ios'];
|
|
13
|
+
const BUNDLE_SORTS = ['newest', 'oldest', 'version', 'largest'];
|
|
14
|
+
const credentials_1 = require("../utils/credentials");
|
|
15
|
+
const resolve_1 = require("../utils/resolve");
|
|
16
|
+
const context_1 = require("../utils/context");
|
|
17
|
+
const output_2 = require("../utils/output");
|
|
18
|
+
/** Decimal MB, defined once. The dashboard reported MiB on one tab and MB on
|
|
19
|
+
* another, both labelled "MB", so the same bundle showed two sizes. */
|
|
20
|
+
function mb(bytes) {
|
|
21
|
+
if (typeof bytes !== 'number')
|
|
22
|
+
return '—';
|
|
23
|
+
return `${(bytes / 1000000).toFixed(2)} MB`;
|
|
24
|
+
}
|
|
25
|
+
function age(iso) {
|
|
26
|
+
if (!iso)
|
|
27
|
+
return '—';
|
|
28
|
+
const ms = Date.now() - new Date(iso).getTime();
|
|
29
|
+
if (!Number.isFinite(ms) || ms < 0)
|
|
30
|
+
return '—';
|
|
31
|
+
const h = ms / 3600000;
|
|
32
|
+
if (h < 1)
|
|
33
|
+
return `${Math.max(1, Math.round(ms / 60000))}m`;
|
|
34
|
+
if (h < 48)
|
|
35
|
+
return `${Math.round(h)}h`;
|
|
36
|
+
return `${Math.round(h / 24)}d`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* One vocabulary for a rate, used everywhere.
|
|
40
|
+
*
|
|
41
|
+
* The dashboard rendered this five different ways — "no data", "not measured",
|
|
42
|
+
* "too early", a green "0.00% ✓" and a flat "0%". Two of those manufactured a
|
|
43
|
+
* passing grade out of zero installs. Three states only: a number, "collecting"
|
|
44
|
+
* below the floor, or a named reason.
|
|
45
|
+
*/
|
|
46
|
+
const RATE_FLOOR = 25;
|
|
47
|
+
function rate(installs = 0, rollbacks = 0) {
|
|
48
|
+
if (installs === 0)
|
|
49
|
+
return chalk_1.default.dim('no installs');
|
|
50
|
+
if (installs < RATE_FLOOR)
|
|
51
|
+
return chalk_1.default.dim(`collecting · ${installs}/${RATE_FLOOR}`);
|
|
52
|
+
const pct = (rollbacks / installs) * 100;
|
|
53
|
+
const s = `${pct.toFixed(1)}%`;
|
|
54
|
+
return pct >= 5 ? chalk_1.default.red(s) : pct >= 2 ? chalk_1.default.yellow(s) : chalk_1.default.green(s);
|
|
55
|
+
}
|
|
56
|
+
function statusLabel(s) {
|
|
57
|
+
switch (s) {
|
|
58
|
+
case 'ACTIVE': return chalk_1.default.cyan('live');
|
|
59
|
+
case 'PAUSED': return chalk_1.default.yellow('paused');
|
|
60
|
+
case 'ROLLED_BACK': return chalk_1.default.red('rolled back');
|
|
61
|
+
// Superseded is the NORMAL end of every release, so it is never coloured
|
|
62
|
+
// like a failure. Painting it red made 7 of 8 rows look like disasters.
|
|
63
|
+
case 'SUPERSEDED': return chalk_1.default.dim('superseded');
|
|
64
|
+
default: return chalk_1.default.dim(s.toLowerCase());
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function registerOtaInspectCommands(ota) {
|
|
68
|
+
// ── ota bundles ───────────────────────────────────────────────────────────
|
|
69
|
+
ota
|
|
70
|
+
.command('bundles')
|
|
71
|
+
.alias('bundle-list')
|
|
72
|
+
.description('List uploaded bundles — the only way to learn a --bundle-id')
|
|
73
|
+
.option('--app-id <id>', 'Scalebun app ID (resolved from scalebun.json when omitted)')
|
|
74
|
+
.option('--platform <p>', 'ios | android')
|
|
75
|
+
.option('--signed <v>', 'signed | unsigned')
|
|
76
|
+
.option('--search <q>', 'Match version, hash or note')
|
|
77
|
+
.option('--sort <s>', 'newest | oldest | version | largest', 'newest')
|
|
78
|
+
.option('--limit <n>', 'How many to show', '20')
|
|
79
|
+
.option('--latest', 'Print only the newest bundle id, for scripting')
|
|
80
|
+
.option('--json', 'Machine-readable output')
|
|
81
|
+
.action(async (opts) => {
|
|
82
|
+
const creds = (0, credentials_1.readCredentials)();
|
|
83
|
+
if (!creds)
|
|
84
|
+
(0, output_2.fail)('Not signed in.', ['Run `scalebun login`.'], output_2.ExitCode.Usage);
|
|
85
|
+
const appId = await (0, resolve_1.resolveAppId)({ appId: opts.appId, nonInteractive: opts.json });
|
|
86
|
+
// Everything is checked BEFORE the round trip: a typo should cost a
|
|
87
|
+
// second, not a request. (--limit was validated after the fetch, so junk
|
|
88
|
+
// still paid for the network.)
|
|
89
|
+
const limit = (0, validate_1.checkedInt)('--limit', opts.limit, { min: 1, max: 1000, fallback: 20 });
|
|
90
|
+
// Every one of these was forwarded to the API verbatim. A typo did not
|
|
91
|
+
// fail — it produced a filtered list that looked authoritative, which is
|
|
92
|
+
// the worst outcome for a command whose whole job is telling you what
|
|
93
|
+
// exists.
|
|
94
|
+
const qs = new URLSearchParams();
|
|
95
|
+
if (opts.platform)
|
|
96
|
+
qs.set('platform', (0, validate_1.checkedEnum)('--platform', opts.platform, PLATFORMS, { caseInsensitive: true }));
|
|
97
|
+
if (opts.signed)
|
|
98
|
+
qs.set('signed', (0, validate_1.checkedEnum)('--signed', opts.signed, ['signed', 'unsigned'], { caseInsensitive: true }));
|
|
99
|
+
if (opts.search)
|
|
100
|
+
qs.set('search', opts.search);
|
|
101
|
+
if (opts.sort)
|
|
102
|
+
qs.set('sort', (0, validate_1.checkedEnum)('--sort', opts.sort, BUNDLE_SORTS, { caseInsensitive: true }));
|
|
103
|
+
let rows;
|
|
104
|
+
try {
|
|
105
|
+
const res = await new client_1.ApiClient(creds).get(`/saas/apps/${appId}/ota/bundles${qs.toString() ? `?${qs}` : ''}`);
|
|
106
|
+
// The endpoint returns a plain array without `page` and an envelope
|
|
107
|
+
// with it — accept both rather than pinning one shape.
|
|
108
|
+
rows = Array.isArray(res) ? res : (res?.rows ?? []);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
(0, output_2.failFromError)('Could not list bundles', err);
|
|
112
|
+
}
|
|
113
|
+
const shown = rows.slice(0, limit);
|
|
114
|
+
// --latest exists so a pipeline can do the thing that was impossible:
|
|
115
|
+
// BUNDLE=$(scalebun ota bundles --latest)
|
|
116
|
+
if (opts.latest) {
|
|
117
|
+
const newest = shown[0];
|
|
118
|
+
if (!newest)
|
|
119
|
+
(0, output_2.fail)('No bundles on this app.', [], output_2.ExitCode.Usage);
|
|
120
|
+
(0, output_2.emit)(() => console.log(newest.id), { ok: true, bundleId: newest.id, version: newest.version ?? null });
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
(0, output_2.emit)(() => {
|
|
124
|
+
if (!shown.length) {
|
|
125
|
+
console.log('\nNo bundles match.');
|
|
126
|
+
// The early return skipped the block at the end of this function,
|
|
127
|
+
// so the empty state — the one place a next step is worth most,
|
|
128
|
+
// because there is nothing on screen to act on — offered nothing.
|
|
129
|
+
(0, output_1.printNextSteps)([{ label: 'Build and ship one', argv: ['ota', 'publish'] }], chalk_1.default.cyan);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
console.log('');
|
|
133
|
+
for (const b of shown) {
|
|
134
|
+
const v = b.version != null ? `v${b.version}` : b.id.slice(0, 8);
|
|
135
|
+
const sig = b.signature ? chalk_1.default.green('signed') : chalk_1.default.yellow('unsigned');
|
|
136
|
+
console.log(` ${chalk_1.default.bold(v.padEnd(6))} ${chalk_1.default.dim((b.platform ?? '?').padEnd(8))} ` +
|
|
137
|
+
`${mb(b.sizeBytes).padStart(9)} ${sig.padEnd(18)} ${chalk_1.default.dim(age(b.createdAt).padStart(4))} ${chalk_1.default.dim(b.id)}`);
|
|
138
|
+
}
|
|
139
|
+
if (rows.length > shown.length) {
|
|
140
|
+
console.log(chalk_1.default.dim(`\n ${rows.length - shown.length} more — raise --limit to see them.`));
|
|
141
|
+
}
|
|
142
|
+
console.log('');
|
|
143
|
+
// This list exists to find something to promote — its own help text
|
|
144
|
+
// calls it "the only way to learn a --bundle-id". The empty case
|
|
145
|
+
// returned above, so there is nothing to branch on here.
|
|
146
|
+
(0, output_1.printNextSteps)([
|
|
147
|
+
{ label: 'Make one live', argv: ['ota', 'promote'] },
|
|
148
|
+
{ label: 'See what is live', argv: ['ota', 'status'] },
|
|
149
|
+
], chalk_1.default.cyan);
|
|
150
|
+
}, { ok: true, count: shown.length, total: rows.length, bundles: shown });
|
|
151
|
+
});
|
|
152
|
+
// ── ota status ────────────────────────────────────────────────────────────
|
|
153
|
+
ota
|
|
154
|
+
.command('status')
|
|
155
|
+
.description('What is live, and what needs a decision')
|
|
156
|
+
.option('--app-id <id>', 'Scalebun app ID (resolved from scalebun.json when omitted)')
|
|
157
|
+
.option('--fail-on <level>', 'Exit 3 when an item at this level exists: act | read')
|
|
158
|
+
.option('--json', 'Machine-readable output')
|
|
159
|
+
.action(async (opts) => {
|
|
160
|
+
// Checked here rather than where it is used, at the bottom of the action:
|
|
161
|
+
// a typo used to disable the gate silently — `--fail-on acts` matched no
|
|
162
|
+
// branch, the command exited 0, and the pipeline went green having
|
|
163
|
+
// checked nothing. A gate that a typo can switch off is not a gate. And
|
|
164
|
+
// validating up here means the whole report is not printed before the
|
|
165
|
+
// usage error that invalidates it.
|
|
166
|
+
const failOn = opts.failOn
|
|
167
|
+
? (0, validate_1.checkedEnum)('--fail-on', opts.failOn, ['act', 'read'], { caseInsensitive: true })
|
|
168
|
+
: undefined;
|
|
169
|
+
const creds = (0, credentials_1.readCredentials)();
|
|
170
|
+
if (!creds)
|
|
171
|
+
(0, output_2.fail)('Not signed in.', ['Run `scalebun login`.'], output_2.ExitCode.Usage);
|
|
172
|
+
const appId = await (0, resolve_1.resolveAppId)({ appId: opts.appId, nonInteractive: opts.json });
|
|
173
|
+
const client = new client_1.ApiClient(creds);
|
|
174
|
+
// Composed from endpoints that already exist. Attention evaluates guards
|
|
175
|
+
// DRY, so asking for status can never pause a live release.
|
|
176
|
+
const [releases, attention] = await Promise.all([
|
|
177
|
+
client.get(`/saas/apps/${appId}/ota/releases`).catch(() => []),
|
|
178
|
+
client.get(`/saas/apps/${appId}/ota/attention`).catch(() => null),
|
|
179
|
+
]);
|
|
180
|
+
// Any command that fetched releases refreshes the cache the splash reads.
|
|
181
|
+
if (Array.isArray(releases))
|
|
182
|
+
(0, context_1.cacheReleaseCount)(releases.length, process.cwd());
|
|
183
|
+
const live = (releases ?? []).filter((r) => r.status === 'ACTIVE');
|
|
184
|
+
const items = attention?.items ?? [];
|
|
185
|
+
const actItems = items.filter((i) => i.severity === 'act');
|
|
186
|
+
(0, output_2.emit)(() => {
|
|
187
|
+
console.log('');
|
|
188
|
+
if (!live.length) {
|
|
189
|
+
console.log(chalk_1.default.dim(' Nothing is live on this app.'));
|
|
190
|
+
}
|
|
191
|
+
for (const r of live) {
|
|
192
|
+
const v = r.bundle?.version != null ? `v${r.bundle.version}` : r.id.slice(0, 8);
|
|
193
|
+
const s = r.stats ?? {};
|
|
194
|
+
console.log(` ${chalk_1.default.bold(v)} ${statusLabel(r.status)} ${chalk_1.default.dim('@')} ${chalk_1.default.bold(`${r.rolloutPercent ?? 0}%`)}` +
|
|
195
|
+
chalk_1.default.dim(` ${r.bundle?.platform ?? ''} · ${r.bundle?.channel?.name ?? 'default'} · ${age(r.createdAt)} old`));
|
|
196
|
+
console.log(chalk_1.default.dim(` installs `) + String(s.installs ?? 0).padEnd(8) +
|
|
197
|
+
chalk_1.default.dim('rollback rate ') + rate(s.installs, s.rollbacks));
|
|
198
|
+
}
|
|
199
|
+
console.log('');
|
|
200
|
+
if (!attention) {
|
|
201
|
+
console.log(chalk_1.default.yellow(' Could not evaluate what needs a decision.'));
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
const g = attention.guards;
|
|
205
|
+
if (g) {
|
|
206
|
+
// NEVER collapse an unevaluated guard into "0 breaching" — an app
|
|
207
|
+
// that was not measured has not been found clean.
|
|
208
|
+
const breach = g.evaluated
|
|
209
|
+
? `${g.breaching ?? 0} breaching`
|
|
210
|
+
: chalk_1.default.dim(`not evaluated${g.reason ? ` (${g.reason})` : ''}`);
|
|
211
|
+
console.log(chalk_1.default.dim(` guards ${g.armed} armed · ${breach}`));
|
|
212
|
+
}
|
|
213
|
+
if (!items.length) {
|
|
214
|
+
console.log(chalk_1.default.green(' Nothing needs a decision.'));
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
for (const i of items) {
|
|
218
|
+
const tag = i.severity === 'act' ? chalk_1.default.yellow('act ') : chalk_1.default.dim('read');
|
|
219
|
+
console.log(` ${tag} ${i.title}`);
|
|
220
|
+
if (i.facts?.length)
|
|
221
|
+
console.log(chalk_1.default.dim(` ${i.facts.join(' · ')}`));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Offer the levers that match the state. With a release live these
|
|
226
|
+
// are the three things you can do about it; with nothing live the
|
|
227
|
+
// only honest suggestion is to ship something.
|
|
228
|
+
(0, output_1.printNextSteps)(live.length
|
|
229
|
+
? [
|
|
230
|
+
{ label: 'Change the share', argv: ['ota', 'rollout', '--percent', '100'] },
|
|
231
|
+
{ label: 'Stop new deliveries', argv: ['ota', 'pause'] },
|
|
232
|
+
{ label: 'Revert every device', argv: ['ota', 'rollback'] },
|
|
233
|
+
]
|
|
234
|
+
: [{ label: 'Ship an update', argv: ['ota', 'publish'] }], chalk_1.default.cyan);
|
|
235
|
+
}, {
|
|
236
|
+
ok: true,
|
|
237
|
+
live: live.map((r) => ({
|
|
238
|
+
id: r.id, version: r.bundle?.version ?? null,
|
|
239
|
+
rolloutPercent: r.rolloutPercent ?? 0, stats: r.stats ?? {},
|
|
240
|
+
})),
|
|
241
|
+
guards: attention?.guards ?? null,
|
|
242
|
+
attention: items,
|
|
243
|
+
});
|
|
244
|
+
// --fail-on turns status into a CI gate. Exit 3 is "a check you asked for
|
|
245
|
+
// said no" — distinct from a 4xx (2) and from the API being down (4).
|
|
246
|
+
if (failOn === 'act' && actItems.length) {
|
|
247
|
+
if (!(0, output_2.isJson)())
|
|
248
|
+
console.error(chalk_1.default.yellow(` ${actItems.length} decision(s) waiting.`));
|
|
249
|
+
process.exit(output_2.ExitCode.Gate);
|
|
250
|
+
}
|
|
251
|
+
if (failOn === 'read' && items.length) {
|
|
252
|
+
if (!(0, output_2.isJson)())
|
|
253
|
+
console.error(chalk_1.default.yellow(` ${items.length} item(s) to review.`));
|
|
254
|
+
process.exit(output_2.ExitCode.Gate);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=ota-inspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ota-inspect.js","sourceRoot":"","sources":["../../src/commands/ota-inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import * as crypto from 'crypto';
|
|
3
|
+
/**
|
|
4
|
+
* Keep the private key out of version control WITHOUT relying on the operator
|
|
5
|
+
* reading a warning. The previous behaviour printed "NEVER commit this — add
|
|
6
|
+
* .scalebun/ to .gitignore" and stopped; anyone who scrolled past that line
|
|
7
|
+
* committed their signing key, and a signing key in git history is compromised
|
|
8
|
+
* even after the file is deleted.
|
|
9
|
+
*
|
|
10
|
+
* Rules, in order of caution:
|
|
11
|
+
* - Only the key's directory relative to cwd can be ignored by cwd's
|
|
12
|
+
* .gitignore; if --out points outside the project, we cannot help — report
|
|
13
|
+
* the manual step instead of writing a useless entry.
|
|
14
|
+
* - An existing .gitignore is appended to, never rewritten.
|
|
15
|
+
* - A missing .gitignore is created only when cwd is actually a git repo
|
|
16
|
+
* (a `.git` entry exists) — creating one in a non-repo would be litter.
|
|
17
|
+
*
|
|
18
|
+
* @returns a human-readable sentence describing what happened, for the summary.
|
|
19
|
+
*/
|
|
20
|
+
export declare function ensureKeyDirGitignored(outDir: string, cwd?: string): string;
|
|
3
21
|
/** Hex-encoded raw 32-byte ed25519 public key from a Node KeyObject. */
|
|
4
22
|
export declare function rawPublicKeyHex(publicKey: crypto.KeyObject): string;
|
|
5
23
|
export declare function registerOtaKeysCommand(ota: Command): void;
|
|
@@ -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;
|
|
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;AA2BjC;;;;;;;;;;;;;;;;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,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAwQzD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAcf"}
|
package/lib/commands/ota-keys.js
CHANGED
|
@@ -32,14 +32,22 @@ 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
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ensureKeyDirGitignored = ensureKeyDirGitignored;
|
|
36
40
|
exports.rawPublicKeyHex = rawPublicKeyHex;
|
|
37
41
|
exports.registerOtaKeysCommand = registerOtaKeysCommand;
|
|
38
42
|
exports.signBundleHash = signBundleHash;
|
|
39
43
|
const crypto = __importStar(require("crypto"));
|
|
40
44
|
const fs = __importStar(require("fs"));
|
|
41
45
|
const path = __importStar(require("path"));
|
|
46
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
47
|
const credentials_1 = require("../utils/credentials");
|
|
48
|
+
const resolve_1 = require("../utils/resolve");
|
|
49
|
+
const prompt_1 = require("../utils/prompt");
|
|
50
|
+
const output_1 = require("../utils/output");
|
|
43
51
|
const client_1 = require("../api/client");
|
|
44
52
|
/**
|
|
45
53
|
* Bundle signing keys (OTA-03).
|
|
@@ -56,6 +64,55 @@ const client_1 = require("../api/client");
|
|
|
56
64
|
*/
|
|
57
65
|
const KEY_DIR = '.scalebun';
|
|
58
66
|
const PRIVATE_KEY_FILE = 'ota-signing-key.pem';
|
|
67
|
+
/**
|
|
68
|
+
* Keep the private key out of version control WITHOUT relying on the operator
|
|
69
|
+
* reading a warning. The previous behaviour printed "NEVER commit this — add
|
|
70
|
+
* .scalebun/ to .gitignore" and stopped; anyone who scrolled past that line
|
|
71
|
+
* committed their signing key, and a signing key in git history is compromised
|
|
72
|
+
* even after the file is deleted.
|
|
73
|
+
*
|
|
74
|
+
* Rules, in order of caution:
|
|
75
|
+
* - Only the key's directory relative to cwd can be ignored by cwd's
|
|
76
|
+
* .gitignore; if --out points outside the project, we cannot help — report
|
|
77
|
+
* the manual step instead of writing a useless entry.
|
|
78
|
+
* - An existing .gitignore is appended to, never rewritten.
|
|
79
|
+
* - A missing .gitignore is created only when cwd is actually a git repo
|
|
80
|
+
* (a `.git` entry exists) — creating one in a non-repo would be litter.
|
|
81
|
+
*
|
|
82
|
+
* @returns a human-readable sentence describing what happened, for the summary.
|
|
83
|
+
*/
|
|
84
|
+
function ensureKeyDirGitignored(outDir, cwd = process.cwd()) {
|
|
85
|
+
const rel = path.relative(cwd, outDir);
|
|
86
|
+
if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
87
|
+
return `outside this project — add ${outDir} to that location's .gitignore yourself`;
|
|
88
|
+
}
|
|
89
|
+
// Normalise to forward slashes: gitignore patterns use `/` on every platform.
|
|
90
|
+
const entry = rel.split(path.sep).join('/') + '/';
|
|
91
|
+
const gitignorePath = path.join(cwd, '.gitignore');
|
|
92
|
+
try {
|
|
93
|
+
if (fs.existsSync(gitignorePath)) {
|
|
94
|
+
const lines = fs.readFileSync(gitignorePath, 'utf8').split(/\r?\n/);
|
|
95
|
+
const covered = lines.some((l) => {
|
|
96
|
+
const t = l.trim();
|
|
97
|
+
return t === entry || t === entry.slice(0, -1) || t === '/' + entry || t === '/' + entry.slice(0, -1);
|
|
98
|
+
});
|
|
99
|
+
if (covered)
|
|
100
|
+
return `already ignored by .gitignore (${entry})`;
|
|
101
|
+
const body = fs.readFileSync(gitignorePath, 'utf8');
|
|
102
|
+
const sep = body.length === 0 || body.endsWith('\n') ? '' : '\n';
|
|
103
|
+
fs.appendFileSync(gitignorePath, `${sep}\n# ScaleBun OTA signing key — never commit\n${entry}\n`);
|
|
104
|
+
return `added ${entry} to .gitignore`;
|
|
105
|
+
}
|
|
106
|
+
if (fs.existsSync(path.join(cwd, '.git'))) {
|
|
107
|
+
fs.writeFileSync(gitignorePath, `# ScaleBun OTA signing key — never commit\n${entry}\n`);
|
|
108
|
+
return `created .gitignore with ${entry}`;
|
|
109
|
+
}
|
|
110
|
+
return `no git repo detected — if you version this directory, ignore ${entry}`;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
return `could not update .gitignore (${err?.message ?? err}) — add ${entry} yourself`;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
59
116
|
/** Hex-encoded raw 32-byte ed25519 public key from a Node KeyObject. */
|
|
60
117
|
function rawPublicKeyHex(publicKey) {
|
|
61
118
|
// SPKI for ed25519 is a fixed 12-byte header followed by the 32-byte key.
|
|
@@ -82,12 +139,19 @@ function registerOtaKeysCommand(ota) {
|
|
|
82
139
|
const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519');
|
|
83
140
|
fs.mkdirSync(outDir, { recursive: true });
|
|
84
141
|
fs.writeFileSync(privatePath, privateKey.export({ type: 'pkcs8', format: 'pem' }),
|
|
85
|
-
// Owner read/write only.
|
|
142
|
+
// Owner read/write only on POSIX. On Windows Node silently DROPS this
|
|
143
|
+
// mode, so the explicit ACL below is what actually protects the key
|
|
144
|
+
// there — the same treatment the credentials file already gets. A
|
|
145
|
+
// signing key with weaker protection than the login token would be
|
|
146
|
+
// backwards: this file is what proves your code is yours.
|
|
86
147
|
{ mode: 0o600 });
|
|
148
|
+
(0, credentials_1.restrictToCurrentUser)(privatePath, 'your OTA signing private key');
|
|
149
|
+
const gitignoreOutcome = ensureKeyDirGitignored(outDir);
|
|
87
150
|
const publicHex = rawPublicKeyHex(publicKey);
|
|
88
151
|
console.log(`\n🔑 ed25519 signing keypair generated.\n`);
|
|
89
152
|
console.log(` Private key : ${privatePath}`);
|
|
90
|
-
console.log(` NEVER commit
|
|
153
|
+
console.log(` NEVER commit or share this file.`);
|
|
154
|
+
console.log(` Git : ${gitignoreOutcome}`);
|
|
91
155
|
console.log(` Public key : ${publicHex}\n`);
|
|
92
156
|
if (opts.appId) {
|
|
93
157
|
const creds = (0, credentials_1.readCredentials)();
|
|
@@ -114,14 +178,24 @@ function registerOtaKeysCommand(ota) {
|
|
|
114
178
|
else {
|
|
115
179
|
console.log('ℹ️ Pass --app-id to register the public key automatically.\n');
|
|
116
180
|
}
|
|
117
|
-
|
|
181
|
+
// This used to print `verifySignature: myEd25519Verifier` — a
|
|
182
|
+
// placeholder that left every adopter to hand-write ~100 lines of
|
|
183
|
+
// crypto plumbing for the most security-critical path in the product.
|
|
184
|
+
// The SDK now ships that verifier; all the developer owes is one
|
|
185
|
+
// install and the pinned key.
|
|
186
|
+
console.log('Next: install the verifier peers (once per app):\n');
|
|
187
|
+
console.log(' npm install @noble/ed25519 @noble/hashes\n');
|
|
188
|
+
console.log('Then embed the PUBLIC key in your app and enforce it at init:\n');
|
|
118
189
|
console.log(' ScaleBun.init({');
|
|
119
190
|
console.log(' // …');
|
|
120
191
|
console.log(' ota: {');
|
|
192
|
+
console.log(' enabled: true,');
|
|
121
193
|
console.log(` publicSigningKey: '${publicHex}',`);
|
|
122
|
-
console.log(' verifySignature: myEd25519Verifier,');
|
|
123
194
|
console.log(' },');
|
|
124
195
|
console.log(' })\n');
|
|
196
|
+
console.log('The SDK verifies every bundle against that key and REFUSES any update\n' +
|
|
197
|
+
'that does not match. Supply `ota.verifySignature` only if you need to\n' +
|
|
198
|
+
'override it — your own function always takes precedence.\n');
|
|
125
199
|
});
|
|
126
200
|
ota
|
|
127
201
|
.command('register-key')
|
|
@@ -169,6 +243,7 @@ function registerOtaKeysCommand(ota) {
|
|
|
169
243
|
for (const k of keys) {
|
|
170
244
|
const state = k.revokedAt ? 'REVOKED' : 'active';
|
|
171
245
|
console.log(` • ${(k.name ?? 'unnamed').padEnd(20)} ${state.padEnd(8)} ${k.publicKey.slice(0, 16)}…`);
|
|
246
|
+
console.log(` ${k.id}`);
|
|
172
247
|
}
|
|
173
248
|
console.log('');
|
|
174
249
|
}
|
|
@@ -177,6 +252,76 @@ function registerOtaKeysCommand(ota) {
|
|
|
177
252
|
process.exit(1);
|
|
178
253
|
}
|
|
179
254
|
});
|
|
255
|
+
/**
|
|
256
|
+
* `scalebun ota keys revoke` — the missing half of the state above.
|
|
257
|
+
*
|
|
258
|
+
* `ota keys` has always RENDERED a `REVOKED` state that the CLI itself could
|
|
259
|
+
* never produce: the route existed and was role-gated, and only the dashboard
|
|
260
|
+
* could reach it. Key compromise is the one signing operation that is
|
|
261
|
+
* time-critical, and a key ceremony typically runs from a hardened box with
|
|
262
|
+
* no browser session — so "open the dashboard" is exactly the wrong answer.
|
|
263
|
+
*
|
|
264
|
+
* Revocation is a soft delete server-side: the row survives for the audit
|
|
265
|
+
* trail, which is why this is a POST to /revoke and not a DELETE.
|
|
266
|
+
*/
|
|
267
|
+
ota
|
|
268
|
+
.command('revoke-key')
|
|
269
|
+
.description('Revoke a signing key — bundles signed with it stop verifying')
|
|
270
|
+
.requiredOption('--key-id <id>', 'Signing key to revoke (from `scalebun ota keys`)')
|
|
271
|
+
.option('--app-id <id>', 'Scalebun app ID (resolved from scalebun.json when omitted)')
|
|
272
|
+
.option('--yes', 'Skip the confirmation (required off a TTY)')
|
|
273
|
+
.option('--json', 'Machine-readable output')
|
|
274
|
+
.action(async (opts) => {
|
|
275
|
+
const creds = (0, credentials_1.readCredentials)();
|
|
276
|
+
if (!creds)
|
|
277
|
+
(0, output_1.fail)('Not signed in.', ['Run `scalebun login` first.'], output_1.ExitCode.Usage);
|
|
278
|
+
const appId = await (0, resolve_1.resolveAppId)({ appId: opts.appId, nonInteractive: opts.json });
|
|
279
|
+
const client = new client_1.ApiClient(creds);
|
|
280
|
+
let keys;
|
|
281
|
+
try {
|
|
282
|
+
keys = await client.get(`/saas/apps/${appId}/ota/signing-keys`);
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
(0, output_1.failFromError)('Could not list signing keys', err);
|
|
286
|
+
}
|
|
287
|
+
const target = (keys ?? []).find((k) => k.id === opts.keyId);
|
|
288
|
+
if (!target) {
|
|
289
|
+
(0, output_1.fail)(`No signing key ${opts.keyId} on this app.`, (keys ?? []).map((k) => ` ${k.id} ${k.name ?? 'unnamed'}`), output_1.ExitCode.Usage);
|
|
290
|
+
}
|
|
291
|
+
if (target.revokedAt) {
|
|
292
|
+
// Already revoked is not a failure — a rotation script re-running must
|
|
293
|
+
// not fail the pipeline for reaching the state it wanted.
|
|
294
|
+
(0, output_1.emit)(() => console.log(`\n${chalk_1.default.dim(`${target.name ?? target.id} is already revoked.`)}\n`), { ok: true, keyId: target.id, alreadyRevoked: true });
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (!opts.yes) {
|
|
298
|
+
if ((0, resolve_1.isNonInteractive)({ nonInteractive: opts.json })) {
|
|
299
|
+
(0, output_1.fail)('Refusing to revoke a signing key without confirmation.', ['Pass --yes if this is intentional.'], output_1.ExitCode.Usage);
|
|
300
|
+
}
|
|
301
|
+
console.log('');
|
|
302
|
+
console.log(chalk_1.default.yellow(`⚠️ Revoking ${chalk_1.default.bold(target.name ?? target.id)}.\n` +
|
|
303
|
+
' Apps pinning ONLY this key will refuse every future update — that is\n' +
|
|
304
|
+
' fail-closed by design. Register the replacement and ship a build\n' +
|
|
305
|
+
' pinning both before revoking the old one.'));
|
|
306
|
+
const ok = await (0, prompt_1.confirmPhrase)(' Type "revoke" to confirm: ', 'revoke', {
|
|
307
|
+
caseInsensitive: true,
|
|
308
|
+
});
|
|
309
|
+
(0, prompt_1.closePrompts)();
|
|
310
|
+
if (!ok) {
|
|
311
|
+
console.log('Cancelled — the key is still active.');
|
|
312
|
+
process.exit(output_1.ExitCode.Ok);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
try {
|
|
316
|
+
await client.post(`/saas/apps/${appId}/ota/signing-keys/${target.id}/revoke`, {});
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
(0, output_1.failFromError)('Could not revoke the key', err, [
|
|
320
|
+
'Revoking a signing key requires an owner or admin role.',
|
|
321
|
+
]);
|
|
322
|
+
}
|
|
323
|
+
(0, output_1.emit)(() => console.log(`\n🔒 Revoked ${chalk_1.default.bold(target.name ?? target.id)}\n`), { ok: true, keyId: target.id, revoked: true });
|
|
324
|
+
});
|
|
180
325
|
}
|
|
181
326
|
/**
|
|
182
327
|
* Sign a bundle hash with the locally-held private key.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ota-keys.js","sourceRoot":"","sources":["../../src/commands/ota-keys.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ota-keys.js","sourceRoot":"","sources":["../../src/commands/ota-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ota-promote.d.ts","sourceRoot":"","sources":["../../src/commands/ota-promote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDpC,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA6M5D"}
|