Skip to content

Examples

The Effect entrypoint takes the same ports as Effect values:

import * as Effect from "effect/Effect";
import { make } from "@fungi.computer/bird-dog/effect";
const room = await Effect.runPromise(
make({
outbox: {
put: () => Effect.void,
read: () => Effect.succeed(undefined),
list: () => Effect.succeed([]),
delete: () => Effect.void,
},
post: () => Effect.succeed(true),
scheduleWake: () => Effect.void,
now: () => Date.now(),
}),
);
await Effect.runPromise(room.drainOutbox());

Use the schemas to parse mail that arrives from outside your process:

import * as Schema from "effect/Schema";
import { BirdDogMailSchema } from "@fungi.computer/bird-dog/effect";
const mail = Schema.decodeUnknownSync(BirdDogMailSchema)(JSON.parse(body));

The package tests cover job translation, payload decoding, replayed settlement after a restart, quiet cancellation, retry re-arming after reopen, bounded paging past full pages, retry exhaustion, receipt walks, wake failure after fan-out, and parity between the Promise and Effect schemas. From the package directory:

Terminal window
pnpm test