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
JavaScript
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