1import * as Schema from "effect/Schema";
2import * as Rpc from "effect/rpc/Rpc";
3import * as RpcGroup from "effect/rpc/RpcGroup";
4import * as RpcSchema from "effect/rpc/RpcSchema";
5
6/**
7 * Procedures served on each {@link RpcDurableObject} instance.
8 * The DO instance *is* the session, so payloads don't include a per-
9 * session id — the keying happens at `getByName(...)`.
10 */
11export class CounterRpcs extends RpcGroup.make(
12 Rpc.make("Increment", {
13 payload: {},
14 success: Schema.Struct({ count: Schema.Number }),
15 }),
16 Rpc.make("Get", {
17 payload: {},
18 success: Schema.Struct({ count: Schema.Number }),
19 }),
20 Rpc.make("CountUpTo", {
21 payload: { upto: Schema.Number },
22 success: RpcSchema.Stream(Schema.Number, Schema.Never),
23 }),
24 Rpc.make("Reset", {
25 payload: {},
26 success: Schema.Void,
27 }),
28) {}