@everystack/cli 0.2.25 → 0.2.27

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@everystack/cli",
3
- "version": "0.2.25",
3
+ "version": "0.2.27",
4
4
  "description": "CLI and OTA updates for Expo apps on everystack",
5
5
  "license": "AGPL-3.0-only",
6
6
  "publishConfig": {
@@ -294,6 +294,19 @@ export async function discoverConfig(
294
294
  );
295
295
  }
296
296
 
297
+ // Media bucket fallback: if not found via naming convention (custom/pre-existing bucket),
298
+ // try reading from .sst/outputs.json where sst.config.ts return values land.
299
+ let mediaBucket = bucketsResult.mediaBucket;
300
+ if (!mediaBucket) {
301
+ try {
302
+ const raw = await fs.readFile(path.resolve('.sst', 'outputs.json'), 'utf8');
303
+ const outputs = JSON.parse(raw);
304
+ if (outputs.mediaBucket) mediaBucket = outputs.mediaBucket;
305
+ } catch {
306
+ // outputs.json not available — non-fatal
307
+ }
308
+ }
309
+
297
310
  return {
298
311
  baseUrl: lambdaResult.routerUrl || '',
299
312
  region,
@@ -302,7 +315,7 @@ export async function discoverConfig(
302
315
  workerFunctionName: workerFn,
303
316
  updatesBucket: bucketsResult.updatesBucket,
304
317
  clientBundlesBucket: bucketsResult.clientBundlesBucket,
305
- mediaBucket: bucketsResult.mediaBucket,
318
+ mediaBucket,
306
319
  kvsArn: cfResult.kvsArn,
307
320
  distributionId,
308
321
  };
@@ -313,9 +326,11 @@ export async function discoverConfig(
313
326
  // ---------------------------------------------------------------------------
314
327
 
315
328
  const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
329
+ const CACHE_VERSION = 2; // Bump when CachedOutputs schema changes to invalidate stale caches
316
330
 
317
331
  interface CachedOutputs {
318
332
  _cachedAt: number;
333
+ _version?: number;
319
334
  routerUrl?: string;
320
335
  apiFunctionName?: string;
321
336
  imageFunctionName?: string;
@@ -335,6 +350,7 @@ export async function getCachedConfig(stage: string): Promise<DiscoveredConfig |
335
350
  try {
336
351
  const raw = await fs.readFile(cachePath(stage), 'utf8');
337
352
  const cached: CachedOutputs = JSON.parse(raw);
353
+ if ((cached._version || 0) < CACHE_VERSION) return null;
338
354
  if (Date.now() - cached._cachedAt > CACHE_TTL_MS) return null;
339
355
  if (!cached.apiFunctionName || !cached.updatesBucket || !cached.clientBundlesBucket) {
340
356
  return null;
@@ -359,6 +375,7 @@ export async function getCachedConfig(stage: string): Promise<DiscoveredConfig |
359
375
  export async function setCachedConfig(stage: string, config: DiscoveredConfig): Promise<void> {
360
376
  const data: CachedOutputs = {
361
377
  _cachedAt: Date.now(),
378
+ _version: CACHE_VERSION,
362
379
  routerUrl: config.baseUrl,
363
380
  apiFunctionName: config.apiFunctionName,
364
381
  imageFunctionName: config.imageFunctionName,