import type * as AtomIO from "atom.io" import type { Json } from "atom.io/foundations/json" import { setIntoStore, type Store } from "atom.io/internal" import { employSocket, type Socket } from "atom.io/realtime" import { createSubscriber } from "./create-subscriber.ts" export function pullAtom( store: Store, socket: Socket, token: AtomIO.RegularAtomToken, ): () => void { return createSubscriber(socket, token.key, (key) => { const stopWatching = employSocket(socket, `serve:${key}`, (data: J) => { setIntoStore(store, token, data) }) socket.emit(`sub:${token.key}`) return () => { socket.emit(`unsub:${key}`) stopWatching() } }) }