diff --git a/src/hooks/runtime-fallback/session-messages.ts b/src/hooks/runtime-fallback/session-messages.ts new file mode 100644 index 000000000..9e5a194bf --- /dev/null +++ b/src/hooks/runtime-fallback/session-messages.ts @@ -0,0 +1,38 @@ +export type SessionMessagePart = { + type?: string + text?: string +} + +export type SessionMessage = { + info?: Record + parts?: SessionMessagePart[] +} + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null +} + +function isSessionMessage(value: unknown): value is SessionMessage { + return isRecord(value) +} + +function isSessionMessageArray(value: unknown): value is SessionMessage[] { + return Array.isArray(value) && value.every(isSessionMessage) +} + +export function extractSessionMessages(messagesResponse: unknown): SessionMessage[] | undefined { + if (isSessionMessageArray(messagesResponse)) { + return messagesResponse + } + + if (!isRecord(messagesResponse)) { + return undefined + } + + const data = messagesResponse.data + if (isSessionMessageArray(data)) { + return data + } + + return undefined +}