MCPcopy Create free account
hub / github.com/astercloud/aster / validateMessage

Method validateMessage

ui/src/protocol/message-processor.ts:175–259  ·  view source on GitHub ↗

* Validate a message and return errors if any

(message: AsterUIMessage)

Source from the content-addressed store, hash-verified

173 * Validate a message and return errors if any
174 */
175 validateMessage(message: AsterUIMessage): ValidationError[] {
176 const errors: ValidationError[] = [];
177
178 // Check that exactly one message type is present
179 const messageTypes = [
180 message.createSurface,
181 message.surfaceUpdate,
182 message.dataModelUpdate,
183 message.beginRendering,
184 message.deleteSurface,
185 ].filter(Boolean);
186
187 if (messageTypes.length === 0) {
188 errors.push(createValidationError('', '/', 'Message must contain exactly one operation type'));
189 }
190 else if (messageTypes.length > 1) {
191 errors.push(createValidationError('', '/', 'Message must contain exactly one operation type'));
192 }
193
194 // Validate createSurface
195 if (message.createSurface) {
196 if (!message.createSurface.surfaceId) {
197 errors.push(createValidationError('', '/createSurface/surfaceId', 'surfaceId is required'));
198 }
199 }
200
201 // Validate surfaceUpdate
202 if (message.surfaceUpdate) {
203 if (!message.surfaceUpdate.surfaceId) {
204 errors.push(createValidationError('', '/surfaceUpdate/surfaceId', 'surfaceId is required'));
205 }
206 if (!Array.isArray(message.surfaceUpdate.components)) {
207 errors.push(createValidationError(
208 message.surfaceUpdate.surfaceId || '',
209 '/surfaceUpdate/components',
210 'components must be an array',
211 ));
212 }
213 }
214
215 // Validate dataModelUpdate
216 if (message.dataModelUpdate) {
217 if (!message.dataModelUpdate.surfaceId) {
218 errors.push(createValidationError('', '/dataModelUpdate/surfaceId', 'surfaceId is required'));
219 }
220 const op = message.dataModelUpdate.op;
221 if (op && !['add', 'replace', 'remove'].includes(op)) {
222 errors.push(createValidationError(
223 message.dataModelUpdate.surfaceId || '',
224 '/dataModelUpdate/op',
225 'op must be "add", "replace", or "remove"',
226 ));
227 }
228 if (op !== 'remove' && message.dataModelUpdate.contents === undefined) {
229 errors.push(createValidationError(
230 message.dataModelUpdate.surfaceId || '',
231 '/dataModelUpdate/contents',
232 'contents is required for add and replace operations',

Callers 2

processMessageMethod · 0.95

Calls 2

createValidationErrorFunction · 0.90
filterMethod · 0.80

Tested by

no test coverage detected