elicitationRequestProblem function
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;
}