UNPKG

actor-kit

Version:

Actor Kit is a library for running state machines in Cloudflare Workers, leveraging XState for robust state management. It provides a framework for managing the logic, lifecycle, persistence, synchronization, and access control of actors in a distributed

52 lines (51 loc) 2.03 kB
import "./schemas-DTUwr6Qg.mjs"; import { t as createAccessToken } from "./createAccessToken-zuXaUS00.mjs"; import { z } from "zod"; //#region src/createActorFetch.ts const ResponseSchema = z.object({ snapshot: z.record(z.unknown()), checksum: z.string() }); function createActorFetch({ actorType, host }) { return async function fetchActor(props, options) { const input = props.input ?? {}; if (!host) throw new Error("Actor Kit host is not defined"); const route = getActorRoute(actorType, props.actorId); const protocol = getHttpProtocol(host); const url = new URL(`${protocol}://${host}${route}`); url.searchParams.append("input", JSON.stringify(input)); if (props.waitForEvent) url.searchParams.append("waitForEvent", JSON.stringify(props.waitForEvent)); if (props.waitForState) url.searchParams.append("waitForState", JSON.stringify(props.waitForState)); if (props.timeout) url.searchParams.append("timeout", props.timeout.toString()); if (props.errorOnWaitTimeout !== void 0) url.searchParams.append("errorOnWaitTimeout", props.errorOnWaitTimeout.toString()); const response = await fetch(url.toString(), { ...options, headers: { ...options?.headers, Authorization: `Bearer ${props.accessToken}` } }); if (!response.ok) { if (response.status === 408 && props.errorOnWaitTimeout !== false) throw new Error(`Timeout waiting for actor response: ${response.statusText}`); throw new Error(`Failed to fetch actor: ${response.statusText}`); } const data = await response.json(); const { checksum, snapshot } = ResponseSchema.parse(data); return { snapshot, checksum }; }; } function getActorRoute(actorType, actorId) { return `/api/${actorType}/${actorId}`; } function getHttpProtocol(host) { return isLocal(host) ? "http" : "https"; } function isLocal(host) { return host.startsWith("localhost") || host.startsWith("127.0.0.1") || host.startsWith("0.0.0.0"); } //#endregion export { createAccessToken, createActorFetch }; //# sourceMappingURL=server.mjs.map