@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
34 lines (28 loc) • 999 B
text/typescript
import {routes} from "@lodestar/api";
import {ApplicationMethods} from "@lodestar/api/server";
import {ApiModules} from "../types.js";
export function getEventsApi({
chain,
}: Pick<ApiModules, "chain" | "config">): ApplicationMethods<routes.events.Endpoints> {
return {
async eventstream({topics, signal, onEvent}) {
const onAbortFns: (() => void)[] = [];
for (const topic of topics) {
// biome-ignore lint/suspicious/noExplicitAny: We need to use `any` type here
const handler = (data: any): void => {
// TODO: What happens if this handler throws? Does it break the other chain.emitter listeners?
onEvent({type: topic, message: data});
};
chain.emitter.on(topic, handler);
onAbortFns.push(() => chain.emitter.off(topic, handler));
}
signal.addEventListener(
"abort",
() => {
for (const abortFn of onAbortFns) abortFn();
},
{once: true}
);
},
};
}