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

1 lines 4.45 kB
{"version":3,"file":"server.mjs","names":[],"sources":["../src/createActorFetch.ts"],"sourcesContent":["import { StateValueFrom } from \"xstate\";\nimport { z } from \"zod\";\nimport { AnyActorKitStateMachine, CallerSnapshotFrom, ClientEventFrom } from \"./types\";\n\nconst ResponseSchema = z.object({\n snapshot: z.record(z.unknown()),\n checksum: z.string(),\n});\n\nexport function createActorFetch<TMachine extends AnyActorKitStateMachine>({\n actorType,\n host,\n}: {\n actorType: string;\n host: string;\n}) {\n return async function fetchActor(\n props: {\n actorId: string;\n accessToken: string;\n input?: Record<string, unknown>;\n waitForEvent?: ClientEventFrom<TMachine>;\n waitForState?: StateValueFrom<TMachine>;\n timeout?: number;\n errorOnWaitTimeout?: boolean;\n },\n options?: RequestInit\n ): Promise<{\n snapshot: CallerSnapshotFrom<TMachine>;\n checksum: string;\n }> {\n const input = props.input ?? {};\n\n if (!host) throw new Error(\"Actor Kit host is not defined\");\n\n const route = getActorRoute(actorType, props.actorId);\n const protocol = getHttpProtocol(host);\n const url = new URL(`${protocol}://${host}${route}`);\n\n // Add input to URL parameters\n url.searchParams.append(\"input\", JSON.stringify(input));\n\n // Add waitForEvent or waitForState to URL parameters\n if (props.waitForEvent) {\n url.searchParams.append(\n \"waitForEvent\",\n JSON.stringify(props.waitForEvent)\n );\n }\n if (props.waitForState) {\n url.searchParams.append(\n \"waitForState\",\n JSON.stringify(props.waitForState)\n );\n }\n\n // Add timeout to URL parameters if specified\n if (props.timeout) {\n url.searchParams.append(\"timeout\", props.timeout.toString());\n }\n\n // Add errorOnWaitTimeout to URL parameters if specified\n if (props.errorOnWaitTimeout !== undefined) {\n url.searchParams.append(\n \"errorOnWaitTimeout\",\n props.errorOnWaitTimeout.toString()\n );\n }\n\n const response = await fetch(url.toString(), {\n ...options,\n headers: {\n ...options?.headers,\n Authorization: `Bearer ${props.accessToken}`,\n },\n });\n\n if (!response.ok) {\n if (response.status === 408 && props.errorOnWaitTimeout !== false) {\n throw new Error(\n `Timeout waiting for actor response: ${response.statusText}`\n );\n }\n throw new Error(`Failed to fetch actor: ${response.statusText}`);\n }\n\n const data = await response.json();\n const { checksum, snapshot } = ResponseSchema.parse(data);\n\n return {\n snapshot: snapshot as CallerSnapshotFrom<TMachine>,\n checksum,\n };\n };\n}\n\nfunction getActorRoute(actorType: string, actorId: string) {\n return `/api/${actorType}/${actorId}`;\n}\n\nfunction getHttpProtocol(host: string): \"http\" | \"https\" {\n return isLocal(host) ? \"http\" : \"https\";\n}\n\nfunction isLocal(host: string): boolean {\n return (\n host.startsWith(\"localhost\") ||\n host.startsWith(\"127.0.0.1\") ||\n host.startsWith(\"0.0.0.0\")\n );\n}\n"],"mappings":";;;;AAIA,MAAM,iBAAiB,EAAE,OAAO;CAC9B,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC;CAC/B,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,SAAgB,iBAA2D,EACzE,WACA,QAIC;AACD,QAAO,eAAe,WACpB,OASA,SAIC;EACD,MAAM,QAAQ,MAAM,SAAS,EAAE;AAE/B,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,gCAAgC;EAE3D,MAAM,QAAQ,cAAc,WAAW,MAAM,QAAQ;EACrD,MAAM,WAAW,gBAAgB,KAAK;EACtC,MAAM,MAAM,IAAI,IAAI,GAAG,SAAS,KAAK,OAAO,QAAQ;AAGpD,MAAI,aAAa,OAAO,SAAS,KAAK,UAAU,MAAM,CAAC;AAGvD,MAAI,MAAM,aACR,KAAI,aAAa,OACf,gBACA,KAAK,UAAU,MAAM,aAAa,CACnC;AAEH,MAAI,MAAM,aACR,KAAI,aAAa,OACf,gBACA,KAAK,UAAU,MAAM,aAAa,CACnC;AAIH,MAAI,MAAM,QACR,KAAI,aAAa,OAAO,WAAW,MAAM,QAAQ,UAAU,CAAC;AAI9D,MAAI,MAAM,uBAAuB,KAAA,EAC/B,KAAI,aAAa,OACf,sBACA,MAAM,mBAAmB,UAAU,CACpC;EAGH,MAAM,WAAW,MAAM,MAAM,IAAI,UAAU,EAAE;GAC3C,GAAG;GACH,SAAS;IACP,GAAG,SAAS;IACZ,eAAe,UAAU,MAAM;IAChC;GACF,CAAC;AAEF,MAAI,CAAC,SAAS,IAAI;AAChB,OAAI,SAAS,WAAW,OAAO,MAAM,uBAAuB,MAC1D,OAAM,IAAI,MACR,uCAAuC,SAAS,aACjD;AAEH,SAAM,IAAI,MAAM,0BAA0B,SAAS,aAAa;;EAGlE,MAAM,OAAO,MAAM,SAAS,MAAM;EAClC,MAAM,EAAE,UAAU,aAAa,eAAe,MAAM,KAAK;AAEzD,SAAO;GACK;GACV;GACD;;;AAIL,SAAS,cAAc,WAAmB,SAAiB;AACzD,QAAO,QAAQ,UAAU,GAAG;;AAG9B,SAAS,gBAAgB,MAAgC;AACvD,QAAO,QAAQ,KAAK,GAAG,SAAS;;AAGlC,SAAS,QAAQ,MAAuB;AACtC,QACE,KAAK,WAAW,YAAY,IAC5B,KAAK,WAAW,YAAY,IAC5B,KAAK,WAAW,UAAU"}