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

3 lines (2 loc) 1.88 kB
import{applyPatch as e}from"fast-json-patch";import{produce as t}from"immer";function r(r){let o=r.initialSnapshot,n=null;const s=new Set;let c=0;const a=async()=>{const i=function(e){const{host:t,actorId:r,actorType:o,accessToken:n,checksum:s}=e,c=`${/^(localhost|127\.0\.0\.1|192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)/.test(t)?"ws":"wss"}://${t}/api/${o}/${r}`,a=new URLSearchParams({accessToken:n});s&&a.append("checksum",s);return`${c}?${a.toString()}`}(r);return n=new WebSocket(i),n.addEventListener("open",(()=>{c=0})),n.addEventListener("message",(n=>{try{const c=JSON.parse("string"==typeof n.data?n.data:(new TextDecoder).decode(n.data));o=t(o,(t=>{e(t,c.operations)})),r.onStateChange?.(o),s.forEach((e=>e(o)))}catch(e){console.error("[ActorKitClient] Error processing message:",e),r.onError?.(e)}})),n.addEventListener("error",(e=>{console.error("[ActorKitClient] WebSocket error:",e),console.error("[ActorKitClient] Error details:",{message:e.message,type:e.type,target:e.target,eventPhase:e.eventPhase}),r.onError?.(new Error(`WebSocket error: ${JSON.stringify(e)}`))})),n.addEventListener("close",(e=>{if(c<5){c++;const e=Math.min(1e3*Math.pow(2,c),3e4);setTimeout(a,e)}else console.error("[ActorKitClient] Max reconnection attempts reached")})),new Promise((e=>{n.addEventListener("open",(()=>e()))}))},i=e=>(s.add(e),()=>{s.delete(e)});return{connect:a,disconnect:()=>{n&&(n.close(),n=null)},send:e=>{n&&n.readyState===WebSocket.OPEN?n.send(JSON.stringify(e)):r.onError?.(new Error("Cannot send event: WebSocket is not connected"))},getState:()=>o,subscribe:i,waitFor:async(e,t=5e3)=>e(o)?Promise.resolve():new Promise(((r,o)=>{let n=null;t>0&&(n=setTimeout((()=>{s(),o(new Error(`Timeout waiting for condition after ${t}ms`))}),t));const s=i((t=>{e(t)&&(n&&clearTimeout(n),s(),r())}))}))}}export{r as createActorKitClient}; //# sourceMappingURL=browser.js.map