toeverything/AFFiNE · error · Error

Invalid BYOK key.

Error message

Invalid BYOK key.

What it means

normalizeKey's final check throws 'Invalid BYOK key.' when required fields (id, name, credential) are missing or the model definition fails validation, a catch-all guard before persisting or decrypting workspace BYOK keys.

Source

Thrown at packages/frontend/apps/electron/src/main/byok-storage/handlers.ts:173

function normalizeKey(
  key: WorkspaceByokKeyInput,
  existing?: WorkspaceByokKey,
  defaultSortOrder = 0
): WorkspaceByokKey {
  if (!allowedProviders.has(key.provider)) {
    throw new Error('Unsupported BYOK provider.');
  }
  const credential = key.credential ?? existing?.credential;
  const definition = key.definition ?? existing?.definition;
  if (
    definition?.endpoint.kind === 'openai_compatible' &&
    key.provider !== 'openai'
  ) {
    throw new Error('OpenAI-compatible endpoints require OpenAI provider.');
  }
  if (!key.id || !key.name || !credential || !isValidDefinition(definition)) {
    throw new Error('Invalid BYOK key.');
  }
  return {
    id: key.id,
    provider: key.provider,
    name: key.name,
    description: hasOwnField(key, 'description')
      ? (key.description ?? null)
      : (existing?.description ?? null),
    credential,
    definition,
    sortOrder: hasOwnField(key, 'sortOrder')
      ? (key.sortOrder ?? defaultSortOrder)
      : (existing?.sortOrder ?? defaultSortOrder),
    enabled: hasOwnField(key, 'enabled')
      ? (key.enabled ?? true)
      : (existing?.enabled ?? true),
  };
}

View on GitHub (pinned to b4c8548c09)

Solutions

  1. Re-enter the API key; it failed validation against the provider.
  2. Check for extra whitespace or truncation when pasting the key.
  3. Generate a new key in the provider dashboard and save it again.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/frontend/apps/electron/src/main/byok-storage/handlers.ts:173 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of toeverything/AFFiNE@b4c8548c09 (2026-08-18). Data as JSON: /api/errors/084b3618eef8b273. Report an issue: GitHub.