UNPKG

eve

Version:

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

1 lines • 2.06 kB
import{ChatGptSignInRequiredError}from"./oauth.js";import{ChatGptSignedOutError,isChatGptTokenFresh}from"./token.js";import{CodexAppServerClient,CodexBinaryNotFoundError}from"./codex-app-server.js";import{getDefaultChatGptCredentialStore}from"./credential-store.js";function createCodexTokenBroker(e={}){let t=e.appServer??new CodexAppServerClient(e),n=e.store??getDefaultChatGptCredentialStore(),r=e.now??Date.now,i,a={kind:`checking`},o,s,c;return{credentialOwner(){return i},getToken(e){return getToken(e.reason)},refreshState(){if(c!==void 0)return c;let e=refreshAuthState();return c=e,e.finally(()=>{c===e&&(c=void 0)}),e},state(){return a}};async function refreshAuthState(){s!==void 0&&await s.promise.catch(()=>void 0),i===`codex`&&(a.kind===`signed-out`||a.kind===`reauth-required`)?t.restart?.():i===`eve`&&(i=void 0),o=void 0;try{await getToken(`request`)}catch{}return a}function getToken(e){let t=e===`rejected`;if(!t&&o!==void 0&&isChatGptTokenFresh(o,r()))return Promise.resolve(o);if(s!==void 0&&(!t||s.forced))return s.promise;let n=s?.promise,i=(n===void 0?resolveToken(t):n.catch(()=>void 0).then(()=>resolveToken(t))).finally(()=>{s?.promise===i&&(s=void 0)});return s={forced:t,promise:i},i}async function resolveToken(s){try{let c;if(i===`eve`)c=await n.resolveToken({forceRefresh:s,fetch:e.fetch,now:r});else try{c=await t.resolveToken({forceRefresh:s,now:r}),i=`codex`}catch(t){if(!(t instanceof CodexBinaryNotFoundError))throw i??=`codex`,t;i=`eve`,c=await n.resolveToken({forceRefresh:s,fetch:e.fetch,now:r})}return o=c,a=readyState(c),c}catch(e){throw o=void 0,a=e instanceof ChatGptSignInRequiredError?{kind:`reauth-required`}:e instanceof ChatGptSignedOutError?{kind:`signed-out`}:{kind:`unavailable`,reason:e instanceof Error?e.message:String(e)},e}}}let defaultBroker;function getDefaultCodexTokenBroker(){return defaultBroker??=createCodexTokenBroker(),defaultBroker}function readyState(e){return{kind:`ready`,...e.accountLabel!==void 0&&{accountLabel:e.accountLabel}}}export{createCodexTokenBroker,getDefaultCodexTokenBroker};