ugly-app 0.1.942 → 0.1.944

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.
@@ -1 +1 @@
1
- {"version":3,"file":"staticOps.d.ts","sourceRoot":"","sources":["../../../src/cli/publish/staticOps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAKL,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,iBAAiB,CAAC;AAI3D,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,QAAoB,CAAC;AAkBpD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAYf;AA4FD,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,KAAK,CAYR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAEzE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,KAAK,CA6GR"}
1
+ {"version":3,"file":"staticOps.d.ts","sourceRoot":"","sources":["../../../src/cli/publish/staticOps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAKL,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,iBAAiB,CAAC;AAI3D,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,QAAoB,CAAC;AAoBpD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAYf;AA4FD,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,KAAK,CAYR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAEzE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,KAAK,CAuIR"}
@@ -23,14 +23,15 @@ const IMMUTABLE = 'public, max-age=31536000, immutable';
23
23
  * In-flight DELETEs against the REST object API, so the first GC of a
24
24
  * long-lived app finishes in minutes rather than hours.
25
25
  *
26
- * Chosen empirically, NOT from the documented 1200-request/5-min API limit —
27
- * 16 in flight sustains far more than that limit's 4 req/s and does not get
28
- * throttled, so R2's object endpoints evidently aren't governed by it.
29
- * Measured: 8,339 deletes in ~3 min (~46 req/s) with zero 429s. Since a
30
- * non-404 failure aborts the sweep, a throttle would surface as a GC warning
31
- * rather than silent data loss — raise this only with the same measurement.
26
+ * Chosen empirically. A single app's sweep runs clean at this rate (measured:
27
+ * 8,339 deletes in ~3 min, ~46 req/s, zero 429s), but a fleet-wide rollout —
28
+ * several apps each clearing tens of thousands of objects back to back — DOES
29
+ * get throttled. So the value is paired with 429 retry below rather than being
30
+ * relied on to stay under any limit; raise it only alongside that backoff.
32
31
  */
33
32
  const DELETE_CONCURRENCY = 16;
33
+ /** 429 retries per object before the sweep gives up on it. */
34
+ const DELETE_MAX_RETRIES = 5;
34
35
  /**
35
36
  * Run `fn` over `items` with at most `limit` in flight, preserving fail-fast
36
37
  * semantics: the first rejection propagates once the in-flight work settles.
@@ -217,10 +218,35 @@ export function createApiR2Ops(args) {
217
218
  // has been deploying for months faces tens of thousands of stale build
218
219
  // objects, which at ~150 ms each is over an hour of wall clock while the
219
220
  // publish appears hung. Run a bounded pool instead.
221
+ // A sweep is tens of thousands of requests long, so ANY per-request
222
+ // failure mode is near-certain to occur at least once — and one
223
+ // unretried failure discards the whole sweep. Both observed live on a
224
+ // 43k-object app: HTTP 429 (the API asking us to slow down) and a bare
225
+ // `fetch failed` (a dropped connection under sustained load). Neither is
226
+ // a real error, so retry both.
227
+ const backoff = (attempt, hintSec) => Number.isFinite(Number(hintSec))
228
+ ? Number(hintSec) * 1000
229
+ : Math.min(2 ** attempt * 500, 8000);
220
230
  await runPool(keys, DELETE_CONCURRENCY, async (key) => {
221
- const res = await globalThis.fetch(`${base}/objects/${encodeURIComponent(key)}`, { method: 'DELETE', headers: auth });
222
- // A 404 means it is already gone, which is the desired end state.
223
- if (!res.ok && res.status !== 404) {
231
+ for (let attempt = 0;; attempt++) {
232
+ const canRetry = attempt < DELETE_MAX_RETRIES;
233
+ let res;
234
+ try {
235
+ res = await globalThis.fetch(`${base}/objects/${encodeURIComponent(key)}`, { method: 'DELETE', headers: auth });
236
+ }
237
+ catch (err) {
238
+ if (!canRetry)
239
+ throw err;
240
+ await new Promise((r) => setTimeout(r, backoff(attempt)));
241
+ continue;
242
+ }
243
+ // A 404 means it is already gone, which is the desired end state.
244
+ if (res.ok || res.status === 404)
245
+ return;
246
+ if ((res.status === 429 || res.status >= 500) && canRetry) {
247
+ await new Promise((r) => setTimeout(r, backoff(attempt, res.headers.get('retry-after'))));
248
+ continue;
249
+ }
224
250
  throw new Error(`r2 delete ${key} failed: ${res.status}`);
225
251
  }
226
252
  });
@@ -1 +1 @@
1
- {"version":3,"file":"staticOps.js","sourceRoot":"","sources":["../../../src/cli/publish/staticOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"staticOps.js","sourceRoot":"","sources":["../../../src/cli/publish/staticOps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAGpD,MAAM,mBAAmB,GAAG,sCAAsC,CAAC;AAEnE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpD,0EAA0E;AAC1E,MAAM,SAAS,GAAG,qCAAqC,CAAC;AAExD;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,8DAA8D;AAC9D,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAU,EACV,KAAa,EACb,EAA8B;IAE9B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EACzC,KAAK,IAAI,EAAE;QACT,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAE,CAAC;YAC5B,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,GAAW;IACzB,2EAA2E;IAC3E,4EAA4E;IAC5E,sCAAsC;IACtC,OAAO,IAAI,UAAU,CACnB,GAAG,CAAC,MAAqB,EACzB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,UAAU,CACf,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAY,EAAE,MAAc;IACvD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,GAAG,GAAmB,EAAE,CAAC;YAC/B,IAAI,KAAyB,CAAC;YAC9B,GAAG,CAAC;gBACF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CACvB,IAAI,oBAAoB,CAAC;oBACvB,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,MAAM;oBACd,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/C,CAAC,CACH,CAAC;gBACF,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;oBACnC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;wBACV,GAAG,CAAC,IAAI,CAAC;4BACP,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;yBAC5C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,CAAC,QAAQ,KAAK,EAAE;YAChB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAG;YACf,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CACvB,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CACnD,CAAC;gBACF,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,IAAI,IAAI,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW;YAC9B,MAAM,EAAE,CAAC,IAAI,CACX,IAAI,gBAAgB,CAAC;gBACnB,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,UAAU;aACzB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK;YAC5C,MAAM,EAAE,CAAC,IAAI,CACX,IAAI,gBAAgB,CAAC;gBACnB,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC;gBAC/B,aAAa,EAAE,KAAK;gBACpB,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,SAAS;aACxB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,MAAM,EAAE,CAAC,IAAI,CACX,IAAI,oBAAoB,CAAC;gBACvB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;aAClD,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAM7B;IACC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC;QACtB,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE;QACD,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,OAAO,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAgB,EAAE,MAAc;IAChE,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAI9B;IACC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,mBAAmB,aAAa,SAAS,eAAe,MAAM,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;IAElD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,GAAG,GAAmB,EAAE,CAAC;YAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,SAAS,CAAC;gBACR,MAAM,GAAG,GACP,GAAG,IAAI,mBAAmB,kBAAkB,CAAC,MAAM,CAAC,gBAAgB;oBACpE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1D,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;gBACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBAClC,GAAG,CAAC,IAAI,CAAC;wBACP,GAAG,EAAE,CAAC,CAAC,GAAG;wBACV,YAAY,EAAE,CAAC,CAAC,aAAa;4BAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;4BAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;qBAChB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC9B,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,MAAM;gBAC/C,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAG;YACf,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAChC,GAAG,IAAI,YAAY,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAC5C,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW;YAC9B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAChC,GAAG,IAAI,YAAY,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAC5C;gBACE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,GAAG,IAAI;oBACP,cAAc,EAAE,WAAW;oBAC3B,eAAe,EAAE,UAAU;iBAC5B;gBACD,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;aACnB,CACF,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK;YAC5C,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,YAAY,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;oBACpE,GAAG,kBAAkB,GAAG,IAAI,GAAG,IAAI,8BAA8B;oBACjE,8DAA8D;oBAC9D,sEAAsE,CACzE,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAChC,GAAG,IAAI,YAAY,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAC5C;gBACE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,GAAG,IAAI;oBACP,cAAc,EAAE,WAAW;oBAC3B,eAAe,EAAE,SAAS;iBAC3B;gBACD,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;aACpC,CACF,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACzB,2DAA2D;YAC3D,wEAAwE;YACxE,wEAAwE;YACxE,uEAAuE;YACvE,yEAAyE;YACzE,oDAAoD;YACpD,oEAAoE;YACpE,gEAAgE;YAChE,sEAAsE;YACtE,uEAAuE;YACvE,yEAAyE;YACzE,+BAA+B;YAC/B,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,OAAuB,EAAU,EAAE,CACnE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI;gBACxB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;YAEzC,MAAM,OAAO,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACpD,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;oBAClC,MAAM,QAAQ,GAAG,OAAO,GAAG,kBAAkB,CAAC;oBAC9C,IAAI,GAAa,CAAC;oBAClB,IAAI,CAAC;wBACH,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAC1B,GAAG,IAAI,YAAY,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAC5C,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CACpC,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC,QAAQ;4BAAE,MAAM,GAAG,CAAC;wBACzB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC1D,SAAS;oBACX,CAAC;oBACD,kEAAkE;oBAClE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;wBAAE,OAAO;oBACzC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;wBAC1D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAChE,CAAC;wBACF,SAAS;oBACX,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.942";
1
+ export declare const CLI_VERSION = "0.1.944";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.942";
2
+ export const CLI_VERSION = "0.1.944";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ugly-app",
3
3
  "packageManager": "pnpm@10.34.5",
4
- "version": "0.1.942",
4
+ "version": "0.1.944",
5
5
  "type": "module",
6
6
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
7
7
  "files": [
@@ -35,15 +35,17 @@ const IMMUTABLE = 'public, max-age=31536000, immutable';
35
35
  * In-flight DELETEs against the REST object API, so the first GC of a
36
36
  * long-lived app finishes in minutes rather than hours.
37
37
  *
38
- * Chosen empirically, NOT from the documented 1200-request/5-min API limit —
39
- * 16 in flight sustains far more than that limit's 4 req/s and does not get
40
- * throttled, so R2's object endpoints evidently aren't governed by it.
41
- * Measured: 8,339 deletes in ~3 min (~46 req/s) with zero 429s. Since a
42
- * non-404 failure aborts the sweep, a throttle would surface as a GC warning
43
- * rather than silent data loss — raise this only with the same measurement.
38
+ * Chosen empirically. A single app's sweep runs clean at this rate (measured:
39
+ * 8,339 deletes in ~3 min, ~46 req/s, zero 429s), but a fleet-wide rollout —
40
+ * several apps each clearing tens of thousands of objects back to back — DOES
41
+ * get throttled. So the value is paired with 429 retry below rather than being
42
+ * relied on to stay under any limit; raise it only alongside that backoff.
44
43
  */
45
44
  const DELETE_CONCURRENCY = 16;
46
45
 
46
+ /** 429 retries per object before the sweep gives up on it. */
47
+ const DELETE_MAX_RETRIES = 5;
48
+
47
49
  /**
48
50
  * Run `fn` over `items` with at most `limit` in flight, preserving fail-fast
49
51
  * semantics: the first rejection propagates once the in-flight work settles.
@@ -285,13 +287,39 @@ export function createApiR2Ops(args: {
285
287
  // has been deploying for months faces tens of thousands of stale build
286
288
  // objects, which at ~150 ms each is over an hour of wall clock while the
287
289
  // publish appears hung. Run a bounded pool instead.
290
+ // A sweep is tens of thousands of requests long, so ANY per-request
291
+ // failure mode is near-certain to occur at least once — and one
292
+ // unretried failure discards the whole sweep. Both observed live on a
293
+ // 43k-object app: HTTP 429 (the API asking us to slow down) and a bare
294
+ // `fetch failed` (a dropped connection under sustained load). Neither is
295
+ // a real error, so retry both.
296
+ const backoff = (attempt: number, hintSec?: string | null): number =>
297
+ Number.isFinite(Number(hintSec))
298
+ ? Number(hintSec) * 1000
299
+ : Math.min(2 ** attempt * 500, 8000);
300
+
288
301
  await runPool(keys, DELETE_CONCURRENCY, async (key) => {
289
- const res = await globalThis.fetch(
290
- `${base}/objects/${encodeURIComponent(key)}`,
291
- { method: 'DELETE', headers: auth },
292
- );
293
- // A 404 means it is already gone, which is the desired end state.
294
- if (!res.ok && res.status !== 404) {
302
+ for (let attempt = 0; ; attempt++) {
303
+ const canRetry = attempt < DELETE_MAX_RETRIES;
304
+ let res: Response;
305
+ try {
306
+ res = await globalThis.fetch(
307
+ `${base}/objects/${encodeURIComponent(key)}`,
308
+ { method: 'DELETE', headers: auth },
309
+ );
310
+ } catch (err) {
311
+ if (!canRetry) throw err;
312
+ await new Promise((r) => setTimeout(r, backoff(attempt)));
313
+ continue;
314
+ }
315
+ // A 404 means it is already gone, which is the desired end state.
316
+ if (res.ok || res.status === 404) return;
317
+ if ((res.status === 429 || res.status >= 500) && canRetry) {
318
+ await new Promise((r) =>
319
+ setTimeout(r, backoff(attempt, res.headers.get('retry-after'))),
320
+ );
321
+ continue;
322
+ }
295
323
  throw new Error(`r2 delete ${key} failed: ${res.status}`);
296
324
  }
297
325
  });
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.942";
2
+ export const CLI_VERSION = "0.1.944";