Effect.gen(function* () {
const setRetry = Stream.succeed("retry: 10000");
const keepAlive = Stream.schedule(Effect.succeed(":keep-alive"), Schedule.fixed(Duration.seconds(15)));
const encoder = new TextEncoder();
const initialEvent = Stream.succeed(`id: ${Date.now()}\ndata: hello`);
// Write the stream to the response
const stream = pipe(
setRetry,
Stream.merge(keepAlive),
Stream.merge(initialEvent),
Stream.map((_) => encoder.encode(`${_}\n\n`)),
);
yield* HttpApp.appendPreResponseHandler((_req, response) =>
Effect.orDie(
HttpServerResponse.setHeaders(response, {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache, no-transform",
"X-Accel-Buffering": "no",
Connection: "keep-alive",
"Access-Control-Allow-Origin": "*",
}),
),
);
return ???;
})
Effect.gen(function* () {
const setRetry = Stream.succeed("retry: 10000");
const keepAlive = Stream.schedule(Effect.succeed(":keep-alive"), Schedule.fixed(Duration.seconds(15)));
const encoder = new TextEncoder();
const initialEvent = Stream.succeed(`id: ${Date.now()}\ndata: hello`);
// Write the stream to the response
const stream = pipe(
setRetry,
Stream.merge(keepAlive),
Stream.merge(initialEvent),
Stream.map((_) => encoder.encode(`${_}\n\n`)),
);
yield* HttpApp.appendPreResponseHandler((_req, response) =>
Effect.orDie(
HttpServerResponse.setHeaders(response, {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache, no-transform",
"X-Accel-Buffering": "no",
Connection: "keep-alive",
"Access-Control-Allow-Origin": "*",
}),
),
);
return ???;
})