Menu
popagent
publicLatest change 7f0ff66d6d9fb6468416c58bee46bd3d08169501 - Checkpoint browser channels and memory work by AkurAI Build
export type BrowserSseEvent = { event: string; data: unknown };
export function parseBrowserSse(input: string): { events: BrowserSseEvent[]; rest: string } {
const normalized = input.replaceAll("\r\n", "\n");
const blocks = normalized.split("\n\n");
const rest = blocks.pop() ?? "";
const events: BrowserSseEvent[] = [];
for (const block of blocks) {
let event = "message";
const data: string[] = [];
for (const line of block.split("\n")) {
if (line.startsWith("event:")) event = line.slice(6).trim();
else if (line.startsWith("data:")) data.push(line.slice(5).trimStart());
}
if (!data.length) continue;
try {
events.push({ event, data: JSON.parse(data.join("\n")) });
} catch {
// Ignore a malformed event while preserving later complete events.
}
}
return { events, rest };
}