diff --git a/renderers/web_core/src/v0_9/processing/message-processor.test.ts b/renderers/web_core/src/v0_9/processing/message-processor.test.ts index 9217f5313..e02fa0b3d 100644 --- a/renderers/web_core/src/v0_9/processing/message-processor.test.ts +++ b/renderers/web_core/src/v0_9/processing/message-processor.test.ts @@ -643,6 +643,31 @@ describe('MessageProcessor', () => { }, /Surface not found for message: unknown-s/); }); + describe('processMessages wrapper', () => { + it('processes a list of messages', () => { + processor.processMessages({ + messages: [ + { + version: 'v0.9', + createSurface: { + surfaceId: 's1', + catalogId: 'test-catalog', + }, + }, + { + version: 'v0.9', + createSurface: { + surfaceId: 's2', + catalogId: 'test-catalog', + }, + }, + ], + }); + assert.ok(processor.model.getSurface('s1')); + assert.ok(processor.model.getSurface('s2')); + }); + }); + it('resolves paths correctly via resolvePath', () => { assert.strictEqual(processor.resolvePath('/foo', '/bar'), '/foo'); assert.strictEqual(processor.resolvePath('foo', '/bar'), '/bar/foo'); diff --git a/renderers/web_core/src/v0_9/processing/message-processor.ts b/renderers/web_core/src/v0_9/processing/message-processor.ts index 75c61a5a7..ecf00b112 100644 --- a/renderers/web_core/src/v0_9/processing/message-processor.ts +++ b/renderers/web_core/src/v0_9/processing/message-processor.ts @@ -27,6 +27,8 @@ import { UpdateComponentsMessage, UpdateDataModelMessage, DeleteSurfaceMessage, + A2uiMessageList, + A2uiMessageListWrapper, } from '../schema/server-to-client.js'; import { A2uiClientCapabilities, @@ -222,12 +224,13 @@ export class MessageProcessor { } /** - * Processes a list of messages. + * Processes a list of messages or a messages wrapper. * - * @param messages The messages to process. + * @param messages The messages or messages wrapper to process. */ - processMessages(messages: A2uiMessage[]): void { - for (const message of messages) { + processMessages(messages: A2uiMessage[] | A2uiMessageListWrapper): void { + const messageList = Array.isArray(messages) ? messages : messages.messages; + for (const message of messageList) { this.processMessage(message); } } diff --git a/renderers/web_core/src/v0_9/schema/client-to-server.ts b/renderers/web_core/src/v0_9/schema/client-to-server.ts index 893947ab7..a6d62cdc0 100644 --- a/renderers/web_core/src/v0_9/schema/client-to-server.ts +++ b/renderers/web_core/src/v0_9/schema/client-to-server.ts @@ -125,3 +125,18 @@ export type A2uiClientAction = z.infer; export type A2uiClientError = z.infer; export type A2uiClientMessage = z.infer; export type A2uiClientDataModel = z.infer; + +export const A2uiClientMessageListSchema = z + .array(A2uiClientMessageSchema) + .describe('A list of client messages.'); + +export type A2uiClientMessageList = z.infer; + +export const A2uiClientMessageListWrapperSchema = z + .object({ + messages: A2uiClientMessageListSchema, + }) + .strict() + .describe('An object wrapping a list of client messages.'); + +export type A2uiClientMessageListWrapper = z.infer; \ No newline at end of file diff --git a/renderers/web_core/src/v0_9/schema/server-to-client.ts b/renderers/web_core/src/v0_9/schema/server-to-client.ts index 55337e970..31cad3bdb 100644 --- a/renderers/web_core/src/v0_9/schema/server-to-client.ts +++ b/renderers/web_core/src/v0_9/schema/server-to-client.ts @@ -143,3 +143,19 @@ export type A2uiMessage = | UpdateComponentsMessage | UpdateDataModelMessage | DeleteSurfaceMessage; + +export const A2uiMessageListSchema = z + .array(A2uiMessageSchema) + .describe('A list of messages.'); + +export type A2uiMessageList = z.infer; + +export const A2uiMessageListWrapperSchema = z + .object({ + messages: A2uiMessageListSchema, + }) + .strict() + .describe('An object wrapping a list of messages.'); + +export type A2uiMessageListWrapper = z.infer; +