alibaba/nacos · error · Error

providerName is required when providerUrl is set

Error message

providerName is required when providerUrl is set

What it means

Thrown by serializeProvider when a providerUrl is set but providerName is empty. The provider object requires at least a name; a URL alone is meaningless (the backend would not know whom the URL belongs to). If both are empty, the field is omitted entirely (returns undefined) — only the half-filled case errors.

Source

Thrown at console-ui-next/src/pages/newAgent/agent-console-model.ts:410

  }
  const parsed = parseJson(
    required(values.callInterfaces, 'callInterfaces'),
    'callInterfaces',
  );
  if (!Array.isArray(parsed) || parsed.length === 0) {
    throw new Error('callInterfaces must be a non-empty JSON array');
  }
  return JSON.stringify(parsed);
}

function serializeProvider(values: AgentEditorValues): string | undefined {
  const name = values.providerName.trim();
  const url = values.providerUrl.trim();
  if (!name && !url) {
    return undefined;
  }
  if (!name) {
    throw new Error('providerName is required when providerUrl is set');
  }
  return JSON.stringify(url ? { name, url } : { name });
}

function serializeTags(value: string): string | undefined {
  const tags = value.split(',').map((item) => item.trim()).filter(Boolean);
  return tags.length > 0 ? JSON.stringify(tags) : undefined;
}

export function buildDraftCreateData(
  namespaceId: string,
  values: AgentEditorValues,
  initial: boolean,
  contentMode: DraftContentMode,
  protocolEditors?: StructuredProtocolEditorValues[],
): AgentDraftCreateData {
  const result: AgentDraftCreateData = {
    namespaceId,

View on GitHub (pinned to 9b989acdf1)

Solutions

  1. Provide a providerName whenever you set a providerUrl.
  2. If no provider is needed, clear both fields.
  3. Add a client-side rule linking the two fields (disable URL until name is set).

Example fix

// before
providerName = ''
providerUrl = 'https://vendor.example.com'

// after
providerName = 'Vendor Inc'
providerUrl = 'https://vendor.example.com'
Defensive patterns

Strategy: validation

Validate before calling

function checkProvider(name, url) {
  if (url && !name) throw new Error('providerName required when providerUrl is set');
}

Type guard

function isProviderComplete(name: string, url: string): boolean {
  return (name && url) || (!name && !url) || (name && !url);
}

Try / catch

try { serializeProvider(values); } catch (e) {
  if (/providerName is required/.test(e.message)) { toast.error('Enter a provider name'); }
}

Prevention

When it happens

Trigger: User fills the provider URL field but leaves the provider name blank, or vice-versa intentionally but only name is given (name-only is allowed and produces {name}).

Common situations: Form has two adjacent fields; user fills one. Copy-paste lands only in the URL field. Name field disabled or hidden by a conditional.

Related errors


AI-assisted analysis of alibaba/nacos@9b989acdf1 (2026-08-14). Data as JSON: /api/errors/5cdc09cd8af45c6f. Report an issue: GitHub.