Spaces:
Paused
Paused
Commit History
-
Add cache restart-persistence and 7-day cleanup job
FTA77001ad3b12
-
fix: resolve_tvdb checks series/movie results before episode results
FTA7700TMDB's find-by-tvdb_id can return a match in tv_episode_results for an unrelated show alongside the correct tv_results match for the same query. Checking episode results first (as the code previously did) caused OPDB to render the wrong title's art. Confirmed real case: TVDB series ID 121361 (Game of Thrones) matched an unrelated Alfred Hitchcock Presents episode in tv_episode_results, which was returned instead of the correct tv_results entry. Series/movie results are now checked first; episode results remain a fallback for legitimate bare-numeric TVDB episode IDs.3ed56e3
-
Add retry-with-backoff (3 attempts, 1s/2s) to Cloudflare edge purge, given confirmed intermittent stalls
FTA77003b18611 -
Add Deno Deploy control test to isolate Cloudflare-specific vs edge-network-general stall
FTA7700ed0e1f4 -
Add second control TLS test against cloudflare.com to isolate Cloudflare-network-wide vs Worker-specific stall
FTA7700e30f93c -
Add control-group TLS test against TMDB to isolate Cloudflare-specific vs platform-wide outbound TLS stall
FTA7700d9f32e7 -
Add raw TLS-only handshake diagnostic to isolate TLS layer from HTTP layer
FTA7700d6ae4e7 -
Add HTTP/1.1-forced variant to network diagnostics to isolate PMTU/fragmentation hypothesis
FTA7700fbe330c -
Add network diagnostics route: staged DNS/TCP/TLS timing to Cloudflare Worker + raw IPv6 connect test
FTA77009c5146c -
Surface Cloudflare edge-purge failures instead of silently reporting success; relabel poster-origin audit count to avoid confusion with settings-staleness
FTA77000e78008
-
Reuse a single pooled IPv4-only client for Cloudflare purge calls instead of rebuilding one per request
FTA7700f3ac5bb -
Three-state Library status: Actual/Outdated/Not Rendered, matching frontend to backend status field
FTA77003ac16a9 -
Actually apply the timestamp-based staleness rewrite (previous attempt silently failed to anchor-match)
FTA77003f07709
-
Rewrite Library staleness checker to use timestamp comparison instead of predicted cache_key matching, which false-positived on titles with partial rating-source availability (e.g. Letterboxd has no TV data)
FTA77007cb5dfa
-
Add Library staleness-check endpoint: compares expected cache_key per item against current settings
FTA77007a863ad -
Add unconditional diagnostic logging around upsert_meta_db to trace missing image_meta rows
FTA77003aa6553
-
Replace IPv4-only resolver with hickory-resolver (Ipv4Only strategy) to avoid combined A/AAAA lookup stalls
FTA7700d9f1add -
Add timing instrumentation to IPv4-only DNS resolver
FTA77004596802
-
Per-item Library cache purge (all origins incl. OPDB), remove dead library_delete code
FTA77002037d0a
-
Rearrange buttons in purge, refresh stale/duplicate entries
FTA770013e3b99 -
Add Library Cleanup: audit poster origin, soft-delete stale/duplicate entries
FTA77009b2515d
-
Silence unused client param warning in purge_cloudflare_tags
FTA7700ddea1ec -
Force IPv4-only client for Cloudflare purge (HF container IPv6 egress issue)
FTA77006303e9c -
Add Cloudflare edge-cache purge (Workers Cache + Cache-Tag)
FTA77000e00f39 -
Add Cloudflare edge-cache purge (Workers Cache + Cache-Tag)
FTA77001ecada6 -
Purge also clears available_ratings, closing the stale fast-path gap
FTA77008a970e7 -
Add live purge feature: catalogs + library, sourced from Stremio account API
FTA7700ef14e02
-
Add API alias column to admin image lists
FTA77006512c5c
-
Attribute CDN-redirect renders to the requesting API key
FTA77006948b18
-
Track api_key_id on cache entries; admin preview uses correct per-key settings
FTA7700bb0b9d3
-
Add real-content ID preview to settings render preview
FTA77001ef2319 -
Revert SLOW_RATINGS_MS diagnostic threshold back to 1000ms
FTA7700c8104e9 -
Temporarily lower SLOW_RATINGS_MS to 300 for provider latency diagnostic
FTA7700605b97d -
Add DB connection host/port debug log; lower max_connections to 20
FTA7700d0de779
-
Add live-generation fallback to admin image preview under EXTERNAL_CACHE_ONLY
FTA7700831a088 -
Add live-generation fallback to admin image preview under EXTERNAL_CACHE_ONLY
FTA77001a13633 -
Add live-generation fallback to admin image preview under EXTERNAL_CACHE_ONLY
FTA7700caefe59
-
Tune LOGO_AREA_HEIGHT 260 -> 150 for larger on-screen badge proportion
FTA77000786ba9
-
Fix logo badge size inconsistency: fixed-height logo box
FTA77000d4041b
-
Update api/src/routes/app.rs
Verified signaturec80c879
-
Allow HF iframe embedding via CSP frame-ancestors
FTA7700789131c
-
fix: actually apply Postgres connector to main.rs
FTA77008fd7c15
-
Update v003_badge_shape_background_cache.rs
FTA770098402d7 -
Update v002_backdrop_position_direction_cache.rs
FTA770048bbdc9 -
Update v002_backdrop_position_direction_cache.rs
FTA7700ba91d25 -
Update v001_backdrop_cache_keys.rs
FTA7700add2feb -
Update lib.rs
FTA77008e0d072 -
Update mod.rs
FTA770024398eb
-
fix(logging): strip API keys from upstream error URLs before logging
PNRxAreqwest embeds the full request URL — query string included — in both the Display and Debug of its errors. TMDB, OMDb, MDBList and fanart all pass their API key as a query parameter (`?api_key=…` / `?apikey=…`), so an upstream 404/timeout/decode error logged via `AppError::Api` leaked the key into the logs, e.g.: mdblist rating fetch failed: API error: HTTP status client error (404 Not Found) for url (https://api.mdblist.com/imdb/show/tt…?apikey=<KEY>) Sanitize the error object itself at the only two `AppError::Api` construction sites — the `From<reqwest::Error>` conversion (every `?`/`error_for_status()?`) and the direct build in `services::retry` — by dropping the URL's query string (`set_query(None)`). Scrubbing the stored error rather than one Display site also protects Debug output and the moka `Arc<AppError>` → `Other(_.to_string())` laundering paths in image::serve. Scheme/host/path are kept for debugging; the key is never in them. Trakt sends its key as a header, whic…937da1f -
fix(image): preserve client error status from cache under concurrent requests
PNRxAImage requests are de-duplicated through moka's `try_get_with`, which returns the init closure's error as `Arc<AppError>`. On concurrent calls for the same key, moka hands every waiter a *clone* of that `Arc`, so `Arc::try_unwrap` fails (strong count > 1) and the `Err` arm collapsed the error to `AppError::Other` — a 500. The visible symptom was a spurious 500 in prod: status=500 Internal Server Error error=id not found: no logo available A single request for a title with no logo correctly returns 404; it only flipped to 500 when several identical requests raced (the inflight herd), which is exactly when the Arc is shared. The poster and episode serve paths had the same bug. Add `AppError::from_cached`, which moves the error out when it is the sole owner and otherwise rebuilds the client-facing variants by reference so the HTTP status is preserved; only genuinely-internal variants collapse to `Other`. Use it at all three image serve sites, and replace the hand-rolled equivalent…62f0fc0