UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 1.85 kB
import{followClientSession}from"#client/session.js";var SessionEventStream=class{#e=new AbortController;#t=new Set;#n=Promise.withResolvers();caughtUp=this.#n.promise;#r=!1;#i;#a;#o;constructor(e,t){this.setOptions(t),this.caughtUp.catch(()=>{}),t.catchUp||this.#n.resolve(),(async()=>{try{for await(let n of followClientSession(e,{signal:this.#e.signal,resolveHeaders:()=>this.#a,resolveReconnectPolicy:()=>this.#o,startIndex:t.startIndex,onCaughtUp:t.catchUp?()=>this.#n.resolve():void 0})){if(this.#e.signal.aborted)return;t.onEvent(n);for(let e of this.#t)e.push(n);if(n.type===`session.completed`||n.type===`session.failed`)break}this.#n.resolve(),this.#s()}catch(e){this.#n.reject(e),this.#s(e),this.#e.signal.aborted||t.onError(e)}})()}subscribe(e){let t=new SessionEventReader(()=>this.#t.delete(t),e);return this.#r?t.end(this.#i):this.#t.add(t),t}get ended(){return this.#r}setOptions(e){`headers`in e&&(this.#a=e.headers),`streamReconnectPolicy`in e&&(this.#o=e.streamReconnectPolicy)}close(){let e=new DOMException(`Session stream was detached.`,`AbortError`);this.#e.abort(e),this.#n.reject(e),this.#s(e)}#s(e){if(!this.#r){this.#r=!0,this.#i=e;for(let t of this.#t)t.end(e)}}},SessionEventReader=class{#e=[];#t=Promise.withResolvers();#n=!1;#r;#i;constructor(e,t){let abort=()=>this.end(t?.reason);t?.addEventListener(`abort`,abort,{once:!0}),this.#i=()=>{t?.removeEventListener(`abort`,abort),e()},t?.aborted&&abort()}push(e){this.#n||(this.#e.push(e),this.#t.resolve())}end(e){this.#n||(this.#n=!0,this.#r=e,this.#t.resolve())}[Symbol.dispose](){this.end(),this.#e=[],this.#i()}discard(){this.#e=[]}async*[Symbol.asyncIterator](){for(;;){for(;this.#e.length>0;)yield this.#e.shift();if(this.#n){if(this.#r!==void 0)throw this.#r;return}this.#t=Promise.withResolvers(),await this.#t.promise}}};export{SessionEventReader,SessionEventStream};