aboutsummaryrefslogtreecommitdiffstats
path: root/packages/plugins-queue-restate/src/idProvider.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/plugins-queue-restate/src/idProvider.ts')
-rw-r--r--packages/plugins-queue-restate/src/idProvider.ts18
1 files changed, 18 insertions, 0 deletions
diff --git a/packages/plugins-queue-restate/src/idProvider.ts b/packages/plugins-queue-restate/src/idProvider.ts
new file mode 100644
index 00000000..72ebc860
--- /dev/null
+++ b/packages/plugins-queue-restate/src/idProvider.ts
@@ -0,0 +1,18 @@
+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;
+ },
+ },
+});
+
+export async function genId(ctx: Context) {
+ return ctx
+ .objectClient<typeof idProvider>({ name: "IdProvider" }, "IdProvider")
+ .get();
+}