koala73/worldmonitor · error

Missing publisher origin for provider: ${provider}

Error message

Missing publisher origin for provider: ${provider}

What it means

providerOrigin could not resolve a publisher origin for a manifest provider: the provider's entry in PROVIDER_ORIGINS maps to null (resolveSourceOrigin failed for all of its hosts). This is a static registry-build defect in the ACTIVE_PROVIDERS manifest data — a provider lacks a usable host/origin — not a runtime user-input problem.

Source

Thrown at api/mcp/registry/source-tools.ts:62

const PROVIDER_HOSTS = new Map<string, string[]>();
for (const entry of ACTIVE_PROVIDERS) {
  const provider = entry.provider || entry.host;
  const hosts = PROVIDER_HOSTS.get(provider) || [];
  if (!hosts.includes(entry.host)) hosts.push(entry.host);
  PROVIDER_HOSTS.set(provider, hosts);
}

const PROVIDER_ORIGINS = new Map<string, string | null>();
for (const [provider, hosts] of PROVIDER_HOSTS) {
  PROVIDER_ORIGINS.set(provider, resolveSourceOrigin({ provider, hosts }));
}

function providerOrigin(entry: ManifestEntry): string | null {
  const provider = entry.provider || entry.host;
  const origin = PROVIDER_ORIGINS.get(provider);
  if (origin === undefined && !PROVIDER_ORIGINS.has(provider)) {
    throw new Error(`Missing publisher origin for provider: ${provider}`);
  }
  return origin ?? null;
}

const SOURCE_VIEWS = ['summary', 'providers', 'outlets'] as const;
const SOURCE_PLATFORMS = ['telegram'] as const;
const DEFAULT_ROW_LIMIT = 50;
const MAX_ROW_LIMIT = 200;

interface PlatformIdentity {
  platform: (typeof SOURCE_PLATFORMS)[number];
  handle: string;
}

const PLATFORM_IDENTITIES_BY_SOURCE = new Map<string, PlatformIdentity[]>();
for (const entry of TELEGRAM_CHANNEL_TRUST) {
  const identities = PLATFORM_IDENTITIES_BY_SOURCE.get(entry.name) || [];
  identities.push({ platform: 'telegram', handle: entry.handle });

View on GitHub (pinned to eeab0a219f)

Solutions

  1. Fix the provider's manifest entry in ACTIVE_PROVIDERS so it includes a resolvable host
  2. Make providerOrigin return a safe default or skip the provider instead of throwing when the origin is missing
  3. Add a registry unit test asserting every ACTIVE_PROVIDERS entry resolves to a non-null origin
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at api/mcp/registry/source-tools.ts:62 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of koala73/worldmonitor@eeab0a219f (2026-08-21). Data as JSON: /api/errors/bedd9339b2165d79. Report an issue: GitHub.