elicitationRequestProblem function

String? elicitationRequestProblem(
  1. Map params
)

Why the params of an elicitation/create request are not what their mode requires, or null (client/elicitation, 2025-11-25+): every request has a message; form mode (or no mode) has a requestedSchema that is a flat object of primitive properties; URL mode has a valid url and an elicitationId.

Implementation

String? elicitationRequestProblem(Map params) {
  if (params['message'] is! String) return '"message" must be a string';
  final mode = params['mode'] ?? 'form';
  if (mode == 'url') {
    final url = params['url'];
    final parsed = url is String ? Uri.tryParse(url) : null;
    if (parsed == null || !parsed.hasScheme || !parsed.hasAuthority) {
      return '"url" must be a valid absolute URL';
    }
    final id = params['elicitationId'];
    if (id is! String || id.isEmpty) return '"elicitationId" is required in URL mode';
    return null;
  }
  if (mode != 'form') return 'unknown mode "$mode"';
  final schema = params['requestedSchema'];
  if (schema is! Map || schema['type'] != 'object') {
    return '"requestedSchema" must be an object schema';
  }
  final properties = schema['properties'];
  if (properties is! Map) return '"requestedSchema.properties" must be an object';
  for (final e in properties.entries) {
    final p = e.value;
    final type = p is Map ? p['type'] : null;
    const primitive = {'string', 'number', 'integer', 'boolean'};
    final ok = primitive.contains(type) ||
        (type == 'array' && p is Map && p['items'] is Map); // multi-select enum
    if (!ok) return 'property "${e.key}" must be a primitive (string, number, integer, boolean) or an enum array';
  }
  return null;
}