UNPKG

zephyr-agent

Version:
56 lines (55 loc) • 2.12 kB
import "node:module"; import { EventSource } from "eventsource"; import { ze_debug } from "../logging/index.mjs"; import { ZeErrors, ZephyrError } from "../errors/index.mjs"; class AuthListener { workerUrl; constructor(workerUrl){ workerUrl.pathname = '/sse'; this.workerUrl = workerUrl; } async waitForToken(timeoutMs = 300000) { const sessionId = this.workerUrl.searchParams.get('sessionId'); if (!sessionId) throw new ZephyrError(ZeErrors.ERR_UNKNOWN, { message: 'Session ID is required' }); return new Promise((resolve, reject)=>{ const eventSource = new EventSource(this.workerUrl); const timeout = setTimeout(()=>{ eventSource.close(); reject(new ZephyrError(ZeErrors.ERR_UNKNOWN, { message: 'Auth timeout' })); }, timeoutMs); eventSource.onmessage = (event)=>{ try { const data = JSON.parse(event.data); if ('token' === data.type) { clearTimeout(timeout); eventSource.close(); const token = data.token ?? data.tokens?.access_token; resolve({ sessionId, token }); } else if ('error' === data.type) { clearTimeout(timeout); eventSource.close(); reject(new Error(data.message)); } else ze_debug('AuthListener', `Unknown message type: ${data.type}`); } catch (err) { clearTimeout(timeout); eventSource.close(); reject(err); } }; eventSource.onerror = (error)=>{ clearTimeout(timeout); eventSource.close(); reject(error); }; }); } } export { AuthListener }; //# sourceMappingURL=sse.mjs.map