Files
tyx_AI_xhs/tests/e2e/fixtures/event-sync.ts
T

38 lines
1.1 KiB
TypeScript

import { connectEventSource, createEventSyncController } from "../../../apps/web/src/event-sync.js";
interface TimelineEntry {
action: string;
detail?: string;
}
declare global {
interface Window {
wp0EventFixture: {
timeline: TimelineEntry[];
};
}
}
const timeline: TimelineEntry[] = [];
const request = async (url: string, action: string, detail?: string) => {
timeline.push({ action, ...(detail ? { detail } : {}) });
const response = await fetch(url);
if (!response.ok) throw new Error(`${action} failed`);
await response.json();
};
const controller = createEventSyncController({
bootstrap: () => request("/api/v1/bootstrap", "bootstrap"),
refetchEntity: (entityRef) =>
request(`/__test/entity?ref=${encodeURIComponent(entityRef)}`, "refetch_entity", entityRef),
refetchModels: (input) =>
request("/__test/models", "refetch_models", input.reason),
});
const source = connectEventSource("/api/v1/events", controller);
source.addEventListener("open", () => {
timeline.push({ action: "connected" });
document.getElementById("status")!.textContent = "connected";
});
window.wp0EventFixture = { timeline };