zephyr-agent
Version:
Zephyr plugin agent
56 lines (55 loc) • 2.12 kB
JavaScript
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