From 14d7fa4a75ba89c1502a64643bcee71797e513f8 Mon Sep 17 00:00:00 2001 From: Flotapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Sat, 25 Jul 2026 00:48:49 +0200 Subject: [PATCH] feat(providers): stub profiles for gelato/thirdweb/wormhole (fix 404 on registry-only meta-providers) (#1402) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 3 providers were added to PROVIDER_REGISTRY but never appear as a bench row slug — the bench uses different slugs at row level: - gelato: ink-rpc uses ink-official (Gelato-hosted, logo aliased to gelato) - thirdweb: was in 4 bench specs, removed 2026-07-24 to unblock /products/thirdweb 500 - wormhole: bench 101 uses source_chain slugs (solana/ethereum/...), not 'wormhole' Without a bench appearance, getProvider() returned undefined and /products/ 404s. Follow the existing PERP_VENUE_SEED pattern: seed stub profiles so the Organization page from the registry renders. Also bumps cache keys v45→v46 / v48→v49 for the getProviders() output change. Co-authored-by: Florent Tapponnier --- src/lib/providers.ts | 33 +++++++++++++++++++++++++++++++++ src/lib/spec.ts | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/lib/providers.ts b/src/lib/providers.ts index 3ce54b77..6afd3930 100644 --- a/src/lib/providers.ts +++ b/src/lib/providers.ts @@ -453,6 +453,29 @@ async function buildProviders(): Promise { }); } + // Seed stub profiles for meta-providers registered in PROVIDER_REGISTRY + // whose slug is intentionally NOT emitted as a bench row (they wrap + // benches at the protocol / infra level instead). Without this, + // /products/ 404s even though the registry has a full org page. + // - gelato: hosts Ink's rpc-gel endpoint (bench row uses ink-official) + // - thirdweb: hosts .rpc.thirdweb.com paths (currently not + // wired to any bench row after the 2026-07-24 removal that unblocked + // the /products/thirdweb 500 rollback loop) + // - wormhole: is the entire wormhole-vaa-latency bench itself; the + // rows are source_chain slugs (solana / ethereum / …), not "wormhole" + for (const v of REGISTRY_STUB_SEED) { + const key = v.slug.toLowerCase(); + if (byKey.has(key)) continue; + byKey.set(key, { + slug: v.slug, + name: v.name, + type: "protocol", + appearances: [], + wins: 0, + categories: [], + }); + } + const profiles = Array.from(byKey.values()).filter( (p) => !isBlacklistedSlug(p.slug), ); @@ -532,6 +555,16 @@ const PERP_VENUE_SEED = [ { slug: "grvt", name: "GRVT" }, ]; +// Meta-providers that live in PROVIDER_REGISTRY but never appear as a +// bench row slug directly. Adding them here creates a stub profile so +// /products/ renders the Organization page from the registry +// instead of 404-ing. +const REGISTRY_STUB_SEED = [ + { slug: "gelato", name: "Gelato" }, + { slug: "thirdweb", name: "ThirdWeb" }, + { slug: "wormhole", name: "Wormhole" }, +]; + /** Cross-request cache. The expensive part isn't `getBenchmarks()` * itself (already wrapped in unstable_cache) but the per-provider * ranking + wins + per-chain aggregation post-processing on top. A 60 diff --git a/src/lib/spec.ts b/src/lib/spec.ts index 688c1884..b2a64bfe 100644 --- a/src/lib/spec.ts +++ b/src/lib/spec.ts @@ -514,7 +514,7 @@ const loadAllBenchmarksCached = unstable_cache( // -> ws-head-latency-ethereum + ungate on prod). // v34: bumped with bench-unfiltered-v31 (084 indexer-latency dropped). // Wormhole VAA latency ship (bench 101). - // v47: 027 solana-tx-landing-latency removed from main (see bench-unfiltered-v45). + // v47: 027 solana-tx-landing-latency removed from main (see bench-unfiltered-v46). // v49: network-coverage split into asset-registry-coverage + dex-network-coverage // (bench SET changed, see bench-unfiltered-v46). // v50: staging pipeline shuffle (see bench-unfiltered-v47).