@scalebun/cli 1.0.0 → 1.4.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 (57) hide show
  1. package/lib/api/client.d.ts +8 -0
  2. package/lib/api/client.d.ts.map +1 -1
  3. package/lib/api/client.js +70 -2
  4. package/lib/api/client.js.map +1 -1
  5. package/lib/commands/ci-init.d.ts +0 -6
  6. package/lib/commands/ci-init.d.ts.map +1 -1
  7. package/lib/commands/ci-init.js +172 -28
  8. package/lib/commands/ci-init.js.map +1 -1
  9. package/lib/commands/doctor.d.ts +8 -0
  10. package/lib/commands/doctor.d.ts.map +1 -0
  11. package/lib/commands/doctor.js +252 -0
  12. package/lib/commands/doctor.js.map +1 -0
  13. package/lib/commands/login.d.ts +28 -4
  14. package/lib/commands/login.d.ts.map +1 -1
  15. package/lib/commands/login.js +132 -51
  16. package/lib/commands/login.js.map +1 -1
  17. package/lib/commands/ota-bundle.d.ts.map +1 -1
  18. package/lib/commands/ota-bundle.js +2 -0
  19. package/lib/commands/ota-bundle.js.map +1 -1
  20. package/lib/commands/ota-delete-bundle.d.ts +8 -0
  21. package/lib/commands/ota-delete-bundle.d.ts.map +1 -1
  22. package/lib/commands/ota-delete-bundle.js +60 -0
  23. package/lib/commands/ota-delete-bundle.js.map +1 -1
  24. package/lib/commands/ota-keys.d.ts +14 -0
  25. package/lib/commands/ota-keys.d.ts.map +1 -0
  26. package/lib/commands/ota-keys.js +200 -0
  27. package/lib/commands/ota-keys.js.map +1 -0
  28. package/lib/commands/ota-publish.d.ts +10 -0
  29. package/lib/commands/ota-publish.d.ts.map +1 -1
  30. package/lib/commands/ota-publish.js +251 -34
  31. package/lib/commands/ota-publish.js.map +1 -1
  32. package/lib/commands/ota-rollout.d.ts +3 -0
  33. package/lib/commands/ota-rollout.d.ts.map +1 -0
  34. package/lib/commands/ota-rollout.js +235 -0
  35. package/lib/commands/ota-rollout.js.map +1 -0
  36. package/lib/commands/quickstart.d.ts +4 -0
  37. package/lib/commands/quickstart.d.ts.map +1 -0
  38. package/lib/commands/quickstart.js +274 -0
  39. package/lib/commands/quickstart.js.map +1 -0
  40. package/lib/index.js +20 -1
  41. package/lib/index.js.map +1 -1
  42. package/lib/utils/bundle.d.ts +86 -0
  43. package/lib/utils/bundle.d.ts.map +1 -1
  44. package/lib/utils/bundle.js +244 -14
  45. package/lib/utils/bundle.js.map +1 -1
  46. package/lib/utils/credentials.d.ts +12 -1
  47. package/lib/utils/credentials.d.ts.map +1 -1
  48. package/lib/utils/credentials.js +40 -1
  49. package/lib/utils/credentials.js.map +1 -1
  50. package/lib/utils/transportSecurity.d.ts +36 -0
  51. package/lib/utils/transportSecurity.d.ts.map +1 -0
  52. package/lib/utils/transportSecurity.js +74 -0
  53. package/lib/utils/transportSecurity.js.map +1 -0
  54. package/lib/utils/ui.d.ts.map +1 -1
  55. package/lib/utils/ui.js +2 -0
  56. package/lib/utils/ui.js.map +1 -1
  57. package/package.json +1 -1
@@ -33,12 +33,15 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseRolloutPercent = parseRolloutPercent;
36
37
  exports.registerOtaPublishCommand = registerOtaPublishCommand;
37
38
  const fs = __importStar(require("fs"));
39
+ const crypto = __importStar(require("crypto"));
38
40
  const credentials_1 = require("../utils/credentials");
39
41
  const client_1 = require("../api/client");
40
42
  const bundle_1 = require("../utils/bundle");
41
43
  const hash_1 = require("../utils/hash");
44
+ const ota_keys_1 = require("./ota-keys");
42
45
  /**
43
46
  * `scalebun ota publish` — the flagship CLI command.
44
47
  *
@@ -51,6 +54,26 @@ const hash_1 = require("../utils/hash");
51
54
  * 6. POST /saas/apps/:appId/ota/bundles/:id/promote → configure installMode & rollout
52
55
  * 7. Print success
53
56
  */
57
+ /**
58
+ * Parse `--rollout`, refusing anything that isn't 0-100.
59
+ *
60
+ * This was `parseInt(x, 10) || 100`, which turned BOTH `--rollout 0` and any
61
+ * typo into a 100% rollout — the opposite of what the operator asked for. A
62
+ * dark release (0%) is a documented, legitimate way to promote a bundle without
63
+ * exposing it, so silently inverting it exposes every production device to an
64
+ * untested bundle. Exits rather than guessing.
65
+ */
66
+ function parseRolloutPercent(raw) {
67
+ if (raw === undefined || raw === '')
68
+ return 100;
69
+ const n = Number(raw);
70
+ if (!Number.isInteger(n) || n < 0 || n > 100) {
71
+ console.error(`❌ --rollout must be a whole number from 0 to 100 (got "${raw}").\n` +
72
+ ' 0 stages the release without serving it to anyone; 100 serves everyone.');
73
+ process.exit(1);
74
+ }
75
+ return n;
76
+ }
54
77
  function registerOtaPublishCommand(ota) {
55
78
  ota
56
79
  .command('publish')
@@ -59,18 +82,23 @@ function registerOtaPublishCommand(ota) {
59
82
  .option('--channel <nameOrId>', 'OTA channel name (e.g. default, beta, production) or channel ID', 'default')
60
83
  .option('--channel-id <id>', 'OTA channel ID (legacy alias)')
61
84
  .option('--platform <platform>', 'Target platform: android | ios', 'android')
62
- .option('--install-mode <mode>', 'Install & execution behavior: IMMEDIATE (forces instant app restart on download), ON_NEXT_RESTART (applies silently on next cold boot - default), ON_NEXT_RESUME (applies when app resumes)', 'ON_NEXT_RESTART')
85
+ .option('--install-mode <mode>', 'IMMEDIATE (SDK restarts the app right after install; also marked mandatory) | ' +
86
+ 'ON_NEXT_RESTART (default: activates on next cold boot) | ' +
87
+ 'ON_NEXT_RESUME (SDK restarts when the app next returns to the foreground)', 'ON_NEXT_RESTART')
63
88
  .option('--target-version <semver>', 'Target app native semver range (e.g. ">=1.0.0", "1.0.0")', '>=1.0.0')
64
89
  .option('--rollout <percent>', 'Target rollout percentage (1-100)', '100')
65
90
  .option('--entry-file <path>', 'JS entry file', 'index.js')
66
91
  .option('--release-note <text>', 'Release note for dashboard display and device changelog')
67
- .option('--hermes', 'Compile to Hermes bytecode (recommended for production)')
68
- .option('--hermes-disabled', 'Explicitly disable Hermes bytecode compilation')
92
+ .option('--hermes', 'Compile to Hermes bytecode (the default — flag kept for compatibility)')
93
+ .option('--hermes-disabled', 'Ship plain JS instead of Hermes bytecode (~20-30% slower cold start)')
94
+ .option('--allow-plain-js', 'Publish uncompiled JS if hermesc fails, instead of aborting')
95
+ .option('--key-dir <dir>', 'Directory holding the ed25519 signing key (default: ./.scalebun)')
69
96
  .option('--skip-bundle', 'Skip react-native bundle (provide --bundle-path instead)')
70
97
  .option('--bundle-path <path>', 'Path to a pre-built bundle file')
71
98
  .option('--custom-bundle-path <path>', 'Alias for --bundle-path (explicit naming)')
72
99
  .option('--sourcemap', 'Generate and upload sourcemap for crash symbolication')
73
100
  .option('--keep-artifacts', 'Keep build artifacts (bundle + sourcemap) after upload')
101
+ .option('--skip-promote', 'Upload and finalize only — do not make the release live')
74
102
  .action(async (opts) => {
75
103
  const creds = (0, credentials_1.readCredentials)();
76
104
  if (!creds) {
@@ -84,11 +112,29 @@ function registerOtaPublishCommand(ota) {
84
112
  process.exit(1);
85
113
  }
86
114
  const installMode = rawInstallMode;
115
+ // Validate BEFORE building: a bad --rollout should cost a second, not a
116
+ // full Hermes compile.
117
+ const rolloutPercent = parseRolloutPercent(opts.rollout);
87
118
  const targetChannel = opts.channelId || opts.channel || 'default';
88
119
  const client = new client_1.ApiClient(creds);
89
120
  const platform = opts.platform;
121
+ // Runtime binding. `targetAppVersion` gates on a marketing string; these
122
+ // are the actual contract between the bundle and the binary that runs
123
+ // it. The backend withholds a bundle from a device whose runtime does
124
+ // not match — see runtime-compat.ts.
125
+ const rnVersion = (0, bundle_1.detectProjectRnVersion)();
126
+ // Generated here, before the build, so it can be compiled into the JS.
127
+ // The SDK reads it back at boot to prove the bundle it installed is the
128
+ // one actually executing.
129
+ const identityToken = crypto.randomBytes(16).toString('hex');
130
+ // Sourcemap outcome tracking — the publish summary must report what
131
+ // actually happened, not what was requested.
132
+ let sourcemapStored = false;
133
+ let sourcemapRegistered = false;
90
134
  // Step 1: Build the bundle (or use pre-built)
91
135
  let bundlePath;
136
+ let hermesBytecodeVersion = null;
137
+ let bundleCarriesMarker = false;
92
138
  if (opts.skipBundle && (opts.bundlePath || opts.customBundlePath)) {
93
139
  bundlePath = opts.bundlePath || opts.customBundlePath;
94
140
  if (!fs.existsSync(bundlePath)) {
@@ -96,20 +142,80 @@ function registerOtaPublishCommand(ota) {
96
142
  process.exit(1);
97
143
  }
98
144
  console.log(`📦 Using pre-built bundle: ${bundlePath}`);
145
+ // A pre-built artifact is taken as-is: injecting a marker would mean
146
+ // rewriting someone else's build output, and if it is already Hermes
147
+ // bytecode a text prefix would corrupt it outright.
148
+ hermesBytecodeVersion = (0, bundle_1.readHermesBytecodeVersion)(bundlePath);
149
+ console.log(' ℹ️ Pre-built bundle — no identity marker injected. Install verification ' +
150
+ 'will be unavailable for this release.');
99
151
  }
100
152
  else {
101
- // Resolve Hermes: --hermes-disabled takes precedence
102
- const useHermes = opts.hermesDisabled ? false : opts.hermes;
153
+ // Hermes is the DEFAULT. The docs have always said "compiled to Hermes
154
+ // bytecode by default (--hermes)" while the flag was actually opt-in —
155
+ // so every publish that didn't know the flag shipped plain JS with a
156
+ // slower cold start and no HBC version for the runtime gate to check.
157
+ // Making the code match the docs is the right direction: bytecode is
158
+ // what production wants, and `--hermes-disabled` remains the opt-out.
159
+ const useHermes = opts.hermesDisabled ? false : true;
103
160
  console.log(`📦 Building ${platform} bundle${useHermes ? ' (Hermes bytecode)' : ''}…`);
104
161
  const result = (0, bundle_1.buildBundle)({
105
162
  platform,
106
163
  entryFile: opts.entryFile,
107
164
  dev: false,
108
165
  hermes: useHermes,
166
+ allowPlainJs: opts.allowPlainJs ?? false,
109
167
  sourcemap: opts.sourcemap,
168
+ identityToken,
110
169
  });
111
170
  bundlePath = result.bundlePath;
171
+ hermesBytecodeVersion = result.hermesBytecodeVersion;
172
+ bundleCarriesMarker = true;
112
173
  console.log(` ✅ Bundle built: ${bundlePath}`);
174
+ // ASSETS DO NOT SHIP OVER OTA.
175
+ //
176
+ // An update is one artifact: the JS/bytecode bundle. Images and fonts
177
+ // are resolved from what the INSTALLED BINARY already contains, so an
178
+ // asset added since the last store build is referenced by the new JS
179
+ // and is not on the device. The update installs cleanly, reports
180
+ // success, and renders a missing image — the worst kind of failure.
181
+ // Metro writes those files next to the bundle and the publish flow
182
+ // has always discarded them without a word. Now it says so.
183
+ if (result.assets.length) {
184
+ const shown = result.assets.slice(0, 5);
185
+ console.log(` ℹ️ This bundle references ${result.assets.length} asset(s). ` +
186
+ 'OTA ships JS only — assets resolve from the installed binary.');
187
+ console.log(` ${shown.join(', ')}${result.assets.length > shown.length ? `, +${result.assets.length - shown.length} more` : ''}`);
188
+ console.log(' Any image or font ADDED since your last store build will be ' +
189
+ 'missing on device. Changing which existing asset you use is fine; ' +
190
+ 'a new one needs a native release (fonts always do).');
191
+ }
192
+ // You asked for bytecode and didn't get it: that is a failed build,
193
+ // not a warning. This degradation has shipped silently twice now —
194
+ // first via `npx hermesc` (not a real package), then via spawnSync's
195
+ // 1MB maxBuffer killing the compiler — and a plain-JS bundle both
196
+ // starts ~20-30% slower and carries no HBC version for the runtime
197
+ // gate to check. If plain JS is what you want, say so.
198
+ if (useHermes && !result.hermesCompiled) {
199
+ console.error('❌ --hermes was requested but the bundle is NOT Hermes bytecode (see the hermesc error above).\n' +
200
+ ' To intentionally publish plain JS, use --hermes-disabled.');
201
+ process.exit(1);
202
+ }
203
+ }
204
+ console.log(` Runtime: RN ${rnVersion ?? 'unknown'}` +
205
+ (hermesBytecodeVersion !== null
206
+ ? `, Hermes HBC v${hermesBytecodeVersion}`
207
+ : ', plain JS'));
208
+ if (!rnVersion) {
209
+ console.warn(' ⚠️ React Native version could not be detected — this bundle will not be ' +
210
+ 'runtime-gated, and can reach binaries that cannot run it.');
211
+ }
212
+ // The sourcemap must be located BEFORE presign, because sourcemaps are
213
+ // uploaded through a presigned URL requested alongside the bundle's.
214
+ const sourcemapPath = opts.sourcemap && fs.existsSync(bundlePath + '.map')
215
+ ? bundlePath + '.map'
216
+ : null;
217
+ if (opts.sourcemap && !sourcemapPath) {
218
+ console.warn(' ⚠️ --sourcemap was passed but no .map file was produced — continuing without one.');
113
219
  }
114
220
  // Step 2: Hash the bundle
115
221
  console.log('🔒 Computing SHA-256…');
@@ -131,6 +237,23 @@ function registerOtaPublishCommand(ota) {
131
237
  sha256,
132
238
  sizeBytes,
133
239
  releaseNote: opts.releaseNote,
240
+ rnVersion: rnVersion ?? undefined,
241
+ hermes: hermesBytecodeVersion !== null,
242
+ hermesBytecodeVersion: hermesBytecodeVersion ?? undefined,
243
+ identityToken: bundleCarriesMarker ? identityToken : undefined,
244
+ // Sourcemaps ride the presign flow: declaring them here returns a
245
+ // second presigned PUT URL. This CLI used to skip these fields and
246
+ // instead POST base64 JSON to /bundles/:id/sourcemap after promote
247
+ // — an endpoint that DOES NOT EXIST and never has. The error was
248
+ // caught and printed as a "non-fatal" warning, so every
249
+ // `--sourcemap` publish ever made silently uploaded nothing while
250
+ // the summary implied symbolication would work.
251
+ ...(sourcemapPath
252
+ ? {
253
+ sourcemapSha256: (0, hash_1.sha256File)(sourcemapPath),
254
+ sourcemapSizeBytes: fs.statSync(sourcemapPath).size,
255
+ }
256
+ : {}),
134
257
  });
135
258
  }
136
259
  catch (err) {
@@ -154,51 +277,120 @@ function registerOtaPublishCommand(ota) {
154
277
  console.log('🔍 Finalizing (server-side hash verification)…');
155
278
  let finalized;
156
279
  try {
157
- finalized = await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/finalize`);
280
+ // OTA-03: sign the bundle hash with the locally-held private key, if
281
+ // this project has adopted signing. The key never leaves this machine —
282
+ // only the detached signature is uploaded, so ScaleBun can serve a
283
+ // signature it could not itself have produced. Unsigned publishes stay
284
+ // valid; the device only enforces once an app embeds a public key.
285
+ const signature = (0, ota_keys_1.signBundleHash)(sha256, opts.keyDir);
286
+ if (signature) {
287
+ console.log(' 🔏 Signed with local ed25519 key');
288
+ }
289
+ finalized = await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/finalize`, signature ? { signature } : undefined);
158
290
  }
159
291
  catch (err) {
160
292
  console.error(`❌ Finalize failed: ${err.message}`);
161
293
  process.exit(1);
162
294
  }
163
295
  // Step 6: Promote release to ACTIVE status with installMode
164
- console.log('🚀 Promoting release to active target channel…');
165
- try {
166
- const rolloutPercent = parseInt(opts.rollout, 10) || 100;
167
- await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/promote`, {
168
- targetAppVersion: opts.targetVersion || '>=1.0.0',
169
- rolloutPercent,
170
- isMandatory: installMode === 'IMMEDIATE',
171
- installMode,
172
- releaseNote: opts.releaseNote,
173
- });
296
+ if (opts.skipPromote) {
297
+ console.log('⏭️ Skipping promotion (--skip-promote) — bundle is uploaded but NOT live.');
298
+ console.log(` Promote later from the dashboard, or re-run without --skip-promote.`);
174
299
  }
175
- catch (err) {
176
- console.warn(` ⚠️ Promotion notice: ${err.message}`);
300
+ else {
301
+ console.log('🚀 Promoting release to active target channel…');
302
+ try {
303
+ await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/promote`, {
304
+ targetAppVersion: opts.targetVersion || '>=1.0.0',
305
+ rolloutPercent,
306
+ isMandatory: installMode === 'IMMEDIATE',
307
+ installMode,
308
+ releaseNote: opts.releaseNote,
309
+ });
310
+ }
311
+ catch (err) {
312
+ // This used to warn and exit 0 — so a CI pipeline printed
313
+ // "published successfully" while no device would ever receive the
314
+ // update (promotion is what makes a bundle live). A pipeline must
315
+ // fail when its purpose failed.
316
+ console.error(`❌ Promotion failed: ${err.message}`);
317
+ console.error(` The bundle IS uploaded (v pending, id ${presigned.bundleId}) but is NOT live.\n` +
318
+ ' Fix the error and promote from the dashboard, or publish again.\n' +
319
+ ' To upload without promoting on purpose, use --skip-promote.');
320
+ process.exit(1);
321
+ }
177
322
  }
178
- // Step 7: Upload sourcemap if generated
179
- if (opts.sourcemap) {
180
- const sourcemapPath = bundlePath + '.map';
181
- if (fs.existsSync(sourcemapPath)) {
182
- console.log('🗺️ Uploading sourcemap for crash symbolication…');
323
+ // Step 7: Upload the sourcemap through its presigned URL.
324
+ // (The old code POSTed base64 JSON to /bundles/:id/sourcemap — a route
325
+ // that has never existed — and downgraded the 404 to a "non-fatal"
326
+ // warning, so symbolication silently never worked for OTA bundles.)
327
+ if (sourcemapPath && presigned.sourcemapUploadUrl) {
328
+ console.log('🗺️ Uploading sourcemap for crash symbolication…');
329
+ try {
330
+ await client.putBytes(presigned.sourcemapUploadUrl, fs.readFileSync(sourcemapPath), 'application/json');
331
+ console.log(' ✅ Sourcemap uploaded');
332
+ sourcemapStored = true;
333
+ // Cleanup happens AFTER symbolication registration below — the
334
+ // symbols upload reads this same file.
335
+ }
336
+ catch (err) {
337
+ console.warn(` ⚠️ Sourcemap upload failed: ${err.message}\n` +
338
+ ' Stack traces from this bundle will not symbolicate. Re-publish to retry.');
339
+ }
340
+ }
341
+ else if (sourcemapPath && !presigned.sourcemapUploadUrl) {
342
+ console.warn(' ⚠️ Backend did not return a sourcemap upload URL — is it up to date?');
343
+ }
344
+ // D6: register the map with SYMBOLICATION, not just storage. The
345
+ // presigned PUT above lands the map in the OTA bundle bucket —
346
+ // `OtaBundle.sourcemapKey` — which NOTHING reads: the symbolication
347
+ // worker only consumes `symbolUpload` rows, written by
348
+ // POST /apps/:appId/symbols. Without this second upload, every
349
+ // `--sourcemap` publish paid to store a map no crash could ever use.
350
+ // That endpoint authenticates with the app's SDK SECRET key (a server
351
+ // credential, deliberately not the client key baked into the binary),
352
+ // so this step is opt-in via SCALEBUN_SDK_SECRET.
353
+ if (sourcemapPath && fs.existsSync(sourcemapPath)) {
354
+ const sdkSecret = process.env.SCALEBUN_SDK_SECRET;
355
+ if (!sdkSecret) {
356
+ console.warn(' ⚠️ SCALEBUN_SDK_SECRET not set — the sourcemap was stored but NOT ' +
357
+ 'registered for crash symbolication. Set the app\'s SDK secret key ' +
358
+ 'in that env var to enable symbolicated stack traces.');
359
+ }
360
+ else {
361
+ console.log('🔣 Registering sourcemap for crash symbolication…');
183
362
  try {
184
- const mapData = fs.readFileSync(sourcemapPath);
185
- await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/sourcemap`, { sourcemap: mapData.toString('base64'), encoding: 'base64' });
186
- console.log(' ✅ Sourcemap uploaded');
187
- if (!opts.keepArtifacts) {
188
- fs.unlinkSync(sourcemapPath);
189
- }
363
+ const boundary = `----scalebun${Date.now().toString(16)}`;
364
+ const mapBytes = fs.readFileSync(sourcemapPath);
365
+ const field = (name, value) => `--${boundary}\r\nContent-Disposition: form-data; name="${name}"\r\n\r\n${value}\r\n`;
366
+ const head = Buffer.from(field('platform', 'js') +
367
+ (rnVersion ? field('version', opts.targetVersion ?? '') : '') +
368
+ field('buildUuid', sha256) +
369
+ `--${boundary}\r\nContent-Disposition: form-data; name="file"; filename="bundle.jsbundle.map"\r\nContent-Type: application/json\r\n\r\n`, 'utf-8');
370
+ const tail = Buffer.from(`\r\n--${boundary}--\r\n`, 'utf-8');
371
+ await client.postMultipart(`/apps/${opts.appId}/symbols`, Buffer.concat([head, mapBytes, tail]), `multipart/form-data; boundary=${boundary}`, { 'x-scalebun-secret-key': sdkSecret });
372
+ console.log(' ✅ Sourcemap registered — crashes from this bundle will symbolicate');
373
+ sourcemapRegistered = true;
190
374
  }
191
375
  catch (err) {
192
- console.warn(` ⚠️ Sourcemap upload failed (non-fatal): ${err.message}`);
376
+ console.warn(` ⚠️ Symbolication registration failed: ${err.message}`);
377
+ }
378
+ }
379
+ if (!opts.keepArtifacts) {
380
+ try {
381
+ fs.unlinkSync(sourcemapPath);
382
+ }
383
+ catch {
384
+ /* non-fatal */
193
385
  }
194
386
  }
195
387
  }
196
388
  // Step 8: Print detailed success summary
197
389
  const installModeLabel = installMode === 'IMMEDIATE'
198
- ? '⚡ IMMEDIATE (App restarts right after download)'
390
+ ? '⚡ IMMEDIATE (SDK restarts the app right after install)'
199
391
  : installMode === 'ON_NEXT_RESUME'
200
- ? '🔄 ON_NEXT_RESUME (Applies when app resumes)'
201
- : '🌙 ON_NEXT_RESTART (Applies silently on next launch)';
392
+ ? '🔄 ON_NEXT_RESUME (SDK restarts on next return to foreground)'
393
+ : '🌙 ON_NEXT_RESTART (activates silently on next launch)';
202
394
  console.log('');
203
395
  console.log(`✅ Bundle v${finalized.version} published successfully!`);
204
396
  console.log(` Channel: ${finalized.channelName} (${finalized.environmentName})`);
@@ -207,7 +399,32 @@ function registerOtaPublishCommand(ota) {
207
399
  console.log(` SHA-256: ${finalized.sha256}`);
208
400
  console.log(` Size: ${(finalized.sizeBytes / 1024).toFixed(1)} KB`);
209
401
  if (opts.sourcemap) {
210
- console.log(` Sourcemap: Uploaded (Stack traces will auto-symbolicate)`);
402
+ // Report what actually happened. This line used to print success
403
+ // whenever --sourcemap was passed — even when no map was produced,
404
+ // the upload failed, or SCALEBUN_SDK_SECRET was unset so nothing was
405
+ // registered for symbolication. CI logs then certified symbolication
406
+ // that would not happen, and the first production crash arrived
407
+ // minified.
408
+ const smState = sourcemapRegistered
409
+ ? 'Uploaded and registered ✓ (stack traces will symbolicate)'
410
+ : sourcemapStored
411
+ ? 'Uploaded, NOT registered — set SCALEBUN_SDK_SECRET to symbolicate'
412
+ : 'NOT uploaded — stack traces from this bundle stay minified';
413
+ console.log(` Sourcemap: ${smState}`);
414
+ }
415
+ const rolloutNow = opts.skipPromote ? 0 : rolloutPercent;
416
+ console.log('');
417
+ console.log('Manage this release:');
418
+ console.log(` scalebun ota releases --app-id ${opts.appId} # see live state`);
419
+ if (!opts.skipPromote && rolloutNow < 100) {
420
+ console.log(` scalebun ota rollout --app-id ${opts.appId} --percent 100 # widen the rollout`);
421
+ }
422
+ console.log(` scalebun ota pause --app-id ${opts.appId} # stop new deliveries`);
423
+ console.log(` scalebun ota rollback --app-id ${opts.appId} # revert every device`);
424
+ if (!opts.skipPromote && rolloutNow === 100) {
425
+ console.log('');
426
+ console.log(' Tip: production releases usually start staged — `--rollout 10`, watch the');
427
+ console.log(' health page, then `ota rollout --percent 100` once it looks clean.');
211
428
  }
212
429
  // Clean up bundle unless --keep-artifacts or using pre-built
213
430
  if (!opts.keepArtifacts && !opts.skipBundle) {
@@ -1 +1 @@
1
- {"version":3,"file":"ota-publish.js","sourceRoot":"","sources":["../../src/commands/ota-publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ota-publish.js","sourceRoot":"","sources":["../../src/commands/ota-publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerOtaRolloutCommands(ota: Command): void;
3
+ //# sourceMappingURL=ota-rollout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ota-rollout.d.ts","sourceRoot":"","sources":["../../src/commands/ota-rollout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0FpC,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAqK7D"}