Examples
Basic
The simplest signal. Define it, trigger it, done.
signals/greet.ts
import { signal, z } from "station-signal"; export const greet = signal("greet") .input(z.object({ name: z.string() })) .every("5s") .run(async (input) => { console.log(`Hello, ${input.name}!`); });runner.ts
import path from "node:path";import { SignalRunner } from "station-signal";import { greet } from "./signals/greet.js"; const runner = SignalRunner.create(path.join(import.meta.dirname, "signals")); setTimeout(async () => { const id = await greet.trigger({ name: "World" }); console.log(`[trigger] Enqueued run: ${id}`);}, 500); await runner.start();signal() creates a named job. .input() sets a Zod schema for validation. .every("5s") makes it recurring. .run() defines the handler. SignalRunner.create() is a shorthand that auto-discovers all signals exported from files in a directory.
Run it: pnpm --filter example-basic start