post
Classes
Section titled “Classes”PostError
Section titled “PostError”Post rejected an unknown route or conflicting key.
Extends
Section titled “Extends”YieldableError<this> &object&Readonly<{message:string; }>
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new PostError(
message):PostError
Parameters
Section titled “Parameters”message
Section titled “message”string
Returns
Section titled “Returns”Overrides
Section titled “Overrides”Data.TaggedError("PostError")<{ readonly message: string; }>.constructor
Properties
Section titled “Properties”message
Section titled “message”message:
string
Inherited from
Section titled “Inherited from”Data.TaggedError("PostError").message
Type Aliases
Section titled “Type Aliases”PostDeliveryResult
Section titled “PostDeliveryResult”PostDeliveryResult =
"accepted"|"duplicate"|"refused"|Readonly<{status:"accepted"|"duplicate";cursor:number; }> |Readonly<{status:"accepted"|"duplicate"|"refused";receipt:Schema.Json; }>
Receiver’s idempotent admission decision.
PostOutboxStore
Section titled “PostOutboxStore”PostOutboxStore<
E> > =Readonly<{put: (key,value) =>Effect.Effect<void,E>>;read: (key) =>Effect.Effect<string|undefined,E>>;list: (limit,afterKey?) =>Effect.Effect<readonlyReadonly<{key:string;value:string; }>[],E>>;delete: (key) =>Effect.Effect<void,E>>; }>
Durable, string-backed rows. A delivered receipt must outlive source replay.
Type Parameters
Section titled “Type Parameters”E
PostOutbox
Section titled “PostOutbox”PostOutbox<
M,E> > =Readonly<{enqueue: (message,at?) =>Effect.Effect<number|undefined,E>>;drain: () =>Effect.Effect<void,E>>;deadLetters: (limit,afterKey?) =>Effect.Effect<M[],E>>; }>
Bounded generic delivery owned by Post.
Type Parameters
Section titled “Type Parameters”M
E
PostEnvelope
Section titled “PostEnvelope”PostEnvelope =
Schema.Schema.Type<typeofPostEnvelopeSchema>>
One addressed event identified by the producer’s stable key.
PostRow
Section titled “PostRow”PostRow =
Schema.Schema.Type<typeofPostRowSchema>>
Pending row, terminal receipt, or dead letter.
PostRoute
Section titled “PostRoute”PostRoute<
A,E,D,AI,EI,DI> > =Readonly<{addressKind:string;address:Schema.Codec<A,AI>>;event:Schema.Codec<E,EI>>;name: (address) =>string;namespace:Readonly<{getByName: (name) =>Readonly<{deliver: (envelope) =>Promise<PostDeliveryResult>>; }>; }>; }> &Readonly<{prepare:Readonly<{event:Schema.Codec<D,DI>>;run: (address,intent,signal) =>Promise<D>>; }>;onDelivered?: (address,event) =>void;onCursor?: (address,event,cursor) =>void;onRefused?: (address,event) =>void; }> |Readonly<{prepare?:undefined;onDelivered?: (address,event) =>void;onCursor?: (address,event,cursor) =>void;onRefused?: (address,event) =>void; }>
Schema-correlated ordinary events or prepared delivery facts.
Type Parameters
Section titled “Type Parameters”A
E
D = E
AI = A
EI = E
DI = EI
PostRegistryRoute
Section titled “PostRegistryRoute”PostRegistryRoute =
Readonly<{addressKind:string;address:Schema.Codec<unknown,unknown>>;event:Schema.Codec<unknown,unknown>>;encodeEnvelope: (envelope) =>PostEnvelope;parseDelivery: (envelope) =>PostEnvelope;prepareEnvelope?: (envelope,signal) =>Promise<PostEnvelope>>;recordDelivered?: (envelope) =>void;nameOf: (envelope) =>string;namespace:PostRoute<never,never>>["namespace"];recordCursor?: (envelope,cursor) =>void;recordRefused?: (envelope) =>void; }>
Runtime operations that preserve the route’s schema evidence.
PostRuntime
Section titled “PostRuntime”PostRuntime<
R> > =Readonly<{send: <K>>(input) =>void;execute: (job) =>Promise<Readonly<{kind:"completed"; }>>;enqueueDue: (limit?,afterKey?) =>Promise<string|undefined>>;deadLetters: (limit?,afterKey?) =>Readonly<{letters: readonlyReadonly<{key:string;reason:"refused"|"exhausted";envelope:PostEnvelope;attempts:number; }>[];nextCursor:string|undefined; }>;latest: <K>>(kind,address) =>Readonly<{key:string;row:PostRow; }> |undefined;retry: (key) =>Promise<void>>;read: (key) =>PostRow|undefined;nextWake: () =>number|null; }>
One producer’s Post operations.
Type Parameters
Section titled “Type Parameters”R extends Record<string, PostRegistryRoute>
Variables
Section titled “Variables”PostDeliveryResultSchema
Section titled “PostDeliveryResultSchema”
constPostDeliveryResultSchema:Union<readonly [Literals<readonly ["accepted","duplicate","refused"]>,Struct<{status:Literals<readonly ["accepted","duplicate"]>;cursor:Int; }>,Struct<{status:Literals<readonly ["accepted","duplicate","refused"]>;receipt:Codec<Json,Json,never,never>>; }>]>
Accepted receipt, revision cursor, or permanent refusal returned by a receiver.
PostEnvelopeSchema
Section titled “PostEnvelopeSchema”
constPostEnvelopeSchema:Struct<{key:String;kind:String;address:Unknown;event:Unknown; }>
Wire envelope parsed at the durable row and receiver boundaries.
PostRowSchema
Section titled “PostRowSchema”
constPostRowSchema:fromJsonString<Union<readonly [Struct<{state:Literal<"pending">>;envelope:Struct<{key:String;kind:String;address:Unknown;event:Unknown; }>;attempts:Int;nextAttemptAt:Number;jobId:optional<String>>;delivery:optional<Struct<{key:String;kind:String;address:Unknown;event:Unknown; }>>;nextKey:optional<String>>; }>,Struct<{state:Literal<"delivered">>;receipt:optional<Codec<Json,Json,never,never>>>>;nextKey:optional<String>>; }>,Struct<{state:Literal<"dead">>;envelope:Struct<{key:String;kind:String;address:Unknown;event:Unknown; }>;attempts:Int;reason:Literals<readonly ["refused","exhausted"]>;receipt:optional<Codec<Json,Json,never,never>>>>;delivery:optional<Struct<{key:String;kind:String;address:Unknown;event:Unknown; }>>;nextKey:optional<String>>; }>]>>
Persisted Post row parser.
Functions
Section titled “Functions”retryDelay()
Section titled “retryDelay()”retryDelay(
attempts):number
BirdDog’s retained bounded retry schedule.
Parameters
Section titled “Parameters”attempts
Section titled “attempts”number
Returns
Section titled “Returns”number
makePostOutbox()
Section titled “makePostOutbox()”makePostOutbox<
M,E>>(options):PostOutbox<M,E>>
The same bounded delivery and receipt machinery serves Post and BirdDog.
Type Parameters
Section titled “Type Parameters”M
E
Parameters
Section titled “Parameters”options
Section titled “options”Readonly<{ message: Schema.Codec<M>; key: (message) => string;
outbox: PostOutboxStore<E>; deliver: (message)
=> Effect.Effect<boolean, E>; scheduleWake: (at) =>
Effect.Effect<void, E>; now: () => number; invalidRow: () => E;
encodingFailed: () => E; }>
Returns
Section titled “Returns”PostOutbox<M, E>
definePostRoute()
Section titled “definePostRoute()”Call Signature
Section titled “Call Signature”definePostRoute<
A,E,AI,EI>>(route):PostRoute<A,E,E,AI,EI,EI> > &Omit<Readonly<{addressKind:string;address:Codec<unknown,unknown>>;event:Codec<unknown,unknown>>;encodeEnvelope: (envelope) =>object;parseDelivery: (envelope) =>object;prepareEnvelope?: (envelope,signal) =>Promise<{key:string;kind:string;address:unknown;event:unknown; }>;recordDelivered?: (envelope) =>void;nameOf: (envelope) =>string;namespace:Readonly<{getByName: (name) =>Readonly<{deliver: (envelope) =>Promise<…>; }>; }>;recordCursor?: (envelope,cursor) =>void;recordRefused?: (envelope) =>void; }>,"address"|"event">>
Preserve each route’s inferred address and event types in a registry.
Type Parameters
Section titled “Type Parameters”A
E
AI = A
EI = E
Parameters
Section titled “Parameters”Readonly<{ addressKind: string; address: Codec<A, AI>;
event: Codec<E, EI>; name: (address) => string; namespace:
Readonly<{ getByName: (name) => Readonly<{ deliver: (envelope)
=> Promise<PostDeliveryResult>; }>; }>; }> &
Readonly<{ prepare?: undefined; onDelivered?: (address, event) =>
void; onCursor?: (address, event, cursor) => void; onRefused?:
(address, event) => void; }>
Returns
Section titled “Returns”PostRoute<A, E, E, AI, EI, EI> &
Omit<Readonly<{ addressKind: string; address: Codec<unknown,
unknown>; event: Codec<unknown, unknown>; encodeEnvelope:
(envelope) => object; parseDelivery: (envelope) => object;
prepareEnvelope?: (envelope, signal) => Promise<{ key: string;
kind: string; address: unknown; event: unknown; }>;
recordDelivered?: (envelope) => void; nameOf: (envelope) => string;
namespace: Readonly<{ getByName: (name) => Readonly<{ deliver:
(envelope) => Promise<…>; }>; }>; recordCursor?: (envelope,
cursor) => void; recordRefused?: (envelope) => void; }>, "address"
| "event">
Call Signature
Section titled “Call Signature”definePostRoute<
A,E,D,AI,EI,DI>>(route):PostRoute<A,E,D,AI,EI,DI> > &Omit<Readonly<{addressKind:string;address:Codec<unknown,unknown>>;event:Codec<unknown,unknown>>;encodeEnvelope: (envelope) =>object;parseDelivery: (envelope) =>object;prepareEnvelope?: (envelope,signal) =>Promise<{key:string;kind:string;address:unknown;event:unknown; }>;recordDelivered?: (envelope) =>void;nameOf: (envelope) =>string;namespace:Readonly<{getByName: (name) =>Readonly<{deliver: (envelope) =>Promise<…>; }>; }>;recordCursor?: (envelope,cursor) =>void;recordRefused?: (envelope) =>void; }>,"address"|"event">>
Preserve each route’s inferred address and event types in a registry.
Type Parameters
Section titled “Type Parameters”A
E
D
AI = A
EI = E
DI = EI
Parameters
Section titled “Parameters”Readonly<{ addressKind: string; address: Codec<A, AI>;
event: Codec<E, EI>; name: (address) => string; namespace:
Readonly<{ getByName: (name) => Readonly<{ deliver: (envelope)
=> Promise<PostDeliveryResult>; }>; }>; }> &
Readonly<{ prepare: Readonly<{ event: Schema.Codec<D, DI>;
run: (address, intent, signal) => Promise<D>; }>;
onDelivered?: (address, event) => void; onCursor?: (address,
event, cursor) => void; onRefused?: (address, event) => void; }>
Returns
Section titled “Returns”PostRoute<A, E, D, AI, EI, DI> &
Omit<Readonly<{ addressKind: string; address: Codec<unknown,
unknown>; event: Codec<unknown, unknown>; encodeEnvelope:
(envelope) => object; parseDelivery: (envelope) => object;
prepareEnvelope?: (envelope, signal) => Promise<{ key: string;
kind: string; address: unknown; event: unknown; }>;
recordDelivered?: (envelope) => void; nameOf: (envelope) => string;
namespace: Readonly<{ getByName: (name) => Readonly<{ deliver:
(envelope) => Promise<…>; }>; }>; recordCursor?: (envelope,
cursor) => void; recordRefused?: (envelope) => void; }>, "address"
| "event">
createPost()
Section titled “createPost()”createPost<
R>>(options):PostRuntime<R>>
Decode at both persisted and DO boundaries with the route’s Effect Schema.
Type Parameters
Section titled “Type Parameters”R extends Record<string, Readonly<{ addressKind: string;
address: Codec<unknown, unknown>; event: Codec<unknown,
unknown>; encodeEnvelope: (envelope) => object; parseDelivery:
(envelope) => object; prepareEnvelope?: (envelope, signal) =>
Promise<{ key: string; kind: string; address: unknown; event:
unknown; }>; recordDelivered?: (envelope) => void; nameOf:
(envelope) => string; namespace: Readonly<{ getByName: (name) =>
Readonly<{ deliver: (envelope) =>
Promise<PostDeliveryResult>; }>; }>;
recordCursor?: (envelope, cursor) => void; recordRefused?:
(envelope) => void; }>>
Parameters
Section titled “Parameters”options
Section titled “options”Readonly<{ routes: R; owner: WatchdogSqliteOwner; transactional:
WatchdogTransactionalProjection; readJob: WatchdogRuntime["read"];
now: () => number; scheduleWake: (at) => Promise<void>; }>
Returns
Section titled “Returns”PostRuntime<R>
admitPost()
Section titled “admitPost()”admitPost<
E,I>>(options):PostDeliveryResult
Consumer admission runs inside the receiver’s own SQLite transaction.
Type Parameters
Section titled “Type Parameters”E
I
Parameters
Section titled “Parameters”options
Section titled “options”Readonly<{ key: string; event: unknown; schema:
Schema.Codec<E, I>; hasReceipt: (key) => boolean; apply:
(event) => PostDeliveryResult; putReceipt: (key)
=> void; }>