All files / src/trpc/routers subscription.ts

11.11% Statements 1/9
0% Branches 0/8
20% Functions 1/5
11.11% Lines 1/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46                              11x                                                            
/**
 * Subscription Router — SSE event streams
 */
 
import { z } from 'zod';
import type { ProcedureBuilder } from '../trpc.js';
import {
  eventBusIterable,
  ALL_EVENT_TYPES,
  AGENT_EVENT_TYPES,
  TASK_EVENT_TYPES,
  PAGE_EVENT_TYPES,
} from '../subscriptions.js';
 
export function subscriptionProcedures(publicProcedure: ProcedureBuilder) {
  return {
    onEvent: publicProcedure
      .input(z.object({ lastEventId: z.string().nullish() }).optional())
      .subscription(async function* (opts) {
        const signal = opts.signal ?? new AbortController().signal;
        yield* eventBusIterable(opts.ctx.eventBus, ALL_EVENT_TYPES, signal);
      }),
 
    onAgentUpdate: publicProcedure
      .input(z.object({ lastEventId: z.string().nullish() }).optional())
      .subscription(async function* (opts) {
        const signal = opts.signal ?? new AbortController().signal;
        yield* eventBusIterable(opts.ctx.eventBus, AGENT_EVENT_TYPES, signal);
      }),
 
    onTaskUpdate: publicProcedure
      .input(z.object({ lastEventId: z.string().nullish() }).optional())
      .subscription(async function* (opts) {
        const signal = opts.signal ?? new AbortController().signal;
        yield* eventBusIterable(opts.ctx.eventBus, TASK_EVENT_TYPES, signal);
      }),
 
    onPageUpdate: publicProcedure
      .input(z.object({ lastEventId: z.string().nullish() }).optional())
      .subscription(async function* (opts) {
        const signal = opts.signal ?? new AbortController().signal;
        yield* eventBusIterable(opts.ctx.eventBus, PAGE_EVENT_TYPES, signal);
      }),
  };
}