{"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"}