paperclipai/paperclip · error · Error

Unsupported expose field(s): ${unknownKeys.sort().join(", ")

Error message

Unsupported expose field(s): ${unknownKeys.sort().join(", ")}

What it means

Strict-schema guard in resolveDeclaredRuntimeExposureConfig: the exposure block's declared type is recognized, but it contains keys outside the known sub-fields. Unknown keys throw (rather than being silently dropped) so typos like 'hosts' vs 'host' surface immediately; the sorted key list names exactly which fields were unrecognized.

Source

Thrown at packages/shared/src/validators/runtime-exposure.ts:154

}

/**
 * Resolve the exposure config a service *declared* (as opposed to the one it
 * inherits by default). Returns null unless the block explicitly opts in.
 *
 * Recognized sub-fields fall back to {@link DEFAULT_TAILSCALE_HTTPS_EXPOSURE},
 * so `{ type: "tailscale_https" }` is a complete declaration; unknown keys still
 * throw rather than being silently dropped.
 */
export function resolveDeclaredRuntimeExposureConfig(
  value: unknown,
): RuntimeExposureConfigInput | null {
  if (readRuntimeExposureIntent(value) !== "enabled") return null;
  const expose = value as Record<string, unknown>;
  const known = new Set<string>([...RUNTIME_EXPOSURE_CONFIG_KEYS, ...RUNTIME_EXPOSURE_TRANSPORT_KEYS]);
  const unknownKeys = Object.keys(expose).filter((key) => !known.has(key));
  if (unknownKeys.length > 0) {
    throw new Error(`Unsupported expose field(s): ${unknownKeys.sort().join(", ")}`);
  }
  const merged: Record<string, unknown> = { ...DEFAULT_TAILSCALE_HTTPS_EXPOSURE };
  for (const key of RUNTIME_EXPOSURE_CONFIG_KEYS) {
    if (expose[key] !== undefined) merged[key] = expose[key];
  }
  // `tailscaleHttps: true` is shorthand for the provider; normalize it away.
  merged.type = "tailscale_https";
  return runtimeExposureConfigSchema.parse(merged);
}

View on GitHub (pinned to 120ae5428f)

Solutions

  1. Remove the unsupported fields from the expose config; use only documented keys.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/shared/src/validators/runtime-exposure.ts:154 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18). Data as JSON: /api/errors/153dd4fdd1666eb8. Report an issue: GitHub.