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


← All examples