aboutsummaryrefslogtreecommitdiffstats
path: root/packages/plugins/queue-restate/src/idProvider.ts
blob: 9949383356dfe2bac35e3ca8193f8845214dafad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { Context, object, ObjectContext } from "@restatedev/restate-sdk";

export const idProvider = object({
  name: "IdProvider",
  handlers: {
    get: async (ctx: ObjectContext<{ nextId: number }>): Promise<number> => {
      const state = (await ctx.get("nextId")) ?? 0;
      ctx.set("nextId", state + 1);
      return state;
    },
  },
  options: {
    ingressPrivate: true,
    journalRetention: 0,
  },
});

export async function genId(ctx: Context) {
  return ctx
    .objectClient<typeof idProvider>({ name: "IdProvider" }, "IdProvider")
    .get();
}