@cortexkit/opencode-anthropic-auth
Advanced tools
Sorry, the diff of this file is too big to display
+1
-1
| #!/usr/bin/env node | ||
| import{l as y,m as w,o as l,p as u,q as m,ra as b,ta as k}from"./index-z4vzznkk.js";import{stdin as A,stdout as $}from"node:process";import{createInterface as R}from"node:readline/promises";function v(){return{version:1,main:{type:"opencode",provider:"anthropic"},fallbackOn:[401,403,429],refresh:{enabled:!0,intervalMinutes:10,refreshBeforeExpiryMinutes:240},quota:{enabled:!0,checkIntervalMinutes:5,minimumRemaining:{five_hour:10,seven_day:20},failClosedOnUnknownQuota:!0},accounts:[]}}function h(){console.log(`Usage: | ||
| import{l as y,m as w,o as l,p as u,q as m,ra as b,ta as k}from"./index-gjnk6q4x.js";import{stdin as A,stdout as $}from"node:process";import{createInterface as R}from"node:readline/promises";function v(){return{version:1,main:{type:"opencode",provider:"anthropic"},fallbackOn:[401,403,429],refresh:{enabled:!0,intervalMinutes:10,refreshBeforeExpiryMinutes:240},quota:{enabled:!0,checkIntervalMinutes:5,minimumRemaining:{five_hour:10,seven_day:20},failClosedOnUnknownQuota:!0},accounts:[]}}function h(){console.log(`Usage: | ||
| opencode-anthropic-auth login [label] | ||
@@ -4,0 +4,0 @@ opencode-anthropic-auth list |
+3
-3
@@ -1,5 +0,5 @@ | ||
| import{$ as S1,A as N1,B as _1,C as H0,D as K0,E as F1,F as Z0,G as M1,H as B1,I as q0,J as v1,K as S0,L as U1,M as $0,N as G0,O as D0,P as p,Q as x1,R as V0,S as s0,T as e0,U as E0,V as j1,W as J1,X as K1,Y as P0,Z as H1,_ as q1,a as p0,aa as E1,b as c0,ba as A1,c as s,ca as R1,d as e,da as C1,e as o0,ea as X0,f as d,fa as W0,g as t0,ga as f1,h as a0,ha as A0,i as r0,ia as Y0,j as F0,ja as T1,k as w1,ka as w0,l as M0,la as y1,m as B0,ma as R0,n as H,na as z0,oa as k1,p as E,pa as g1,q as v0,qa as m1,r as z1,s as j0,sa as b1,t as J0,u as I1,v as O1,w as U0,x as Q1,y as x0,z as L1}from"./index-z4vzznkk.js";import{randomUUID as Wj}from"node:crypto";function b(j){return typeof j==="object"&&j!==null}function s1(j){if(Array.isArray(j))return j;if(b(j)&&Array.isArray(j.data))return j.data;return[]}function e1(j){if(!b(j)||!b(j.info))return;return typeof j.info.role==="string"?j.info.role:void 0}function m0(j){if(!b(j)||!b(j.info))return null;let J=j.info,K=b(J.model)?J.model:void 0,Z=typeof J.agent==="string"?J.agent:void 0,D=typeof K?.providerID==="string"?K.providerID:typeof J.providerID==="string"?J.providerID:void 0,V=typeof K?.modelID==="string"?K.modelID:typeof J.modelID==="string"?J.modelID:void 0,M=typeof K?.variant==="string"?K.variant:typeof J.variant==="string"?J.variant:void 0;if(!Z&&(!D||!V)&&!M)return null;let A={};if(Z)A.agent=Z;if(D&&V)A.model={providerID:D,modelID:V};if(M)A.variant=M;return A}function b0(j,J){return{agent:j.agent??J.agent,model:j.model??J.model,variant:j.variant??J.variant}}function h0(j){return Boolean(j.agent&&j.model&&j.variant)}async function u0(j,J){if(!j||!J)return null;let K=j;if(typeof K.session?.messages!=="function")return null;let Z=[];try{Z=s1(await Promise.resolve(K.session.messages({path:{id:J},query:{limit:100}})))}catch{return null}if(Z.length===0)return null;let D={};for(let V=Z.length-1;V>=0;V--){if(e1(Z[V])!=="assistant")continue;let M=m0(Z[V]);if(!M)continue;if(D=b0(D,M),h0(D))return D}for(let V=Z.length-1;V>=0;V--){let M=m0(Z[V]);if(!M)continue;if(D=b0(D,M),h0(D))return D}if(!D.agent&&!D.model&&!D.variant)return null;return D}function d0(j){return`${p0}${j.charAt(0).toUpperCase()}${j.slice(1)}`}function jj(j){if(j==="StructuredOutput")return j;return`${j.charAt(0).toLowerCase()}${j.slice(1)}`}function Z1(j,J){let K=new Headers;if(j instanceof Request)j.headers.forEach((D,V)=>{K.set(V,D)});let Z=J?.headers;if(Z){if(Z instanceof Headers)Z.forEach((D,V)=>{K.set(V,D)});else if(Array.isArray(Z))for(let D of Z){let[V,M]=D;if(typeof M<"u")K.set(V,String(M))}else for(let[D,V]of Object.entries(Z))if(typeof V<"u")K.set(D,String(V))}return K}function N0(j){return j.set("anthropic-beta",s(j.get("anthropic-beta"),[c0])),j}function i(j,J,K={}){return J1(j,J,K)}function Jj(j){if(j.tools&&Array.isArray(j.tools))j.tools=j.tools.map((J)=>({...J,name:J.name?d0(J.name):J.name}));if(j.messages&&Array.isArray(j.messages))j.messages=j.messages.map((J)=>{if(J.content&&Array.isArray(J.content))J.content=J.content.map((K)=>{if(K.type==="tool_use"&&K.name)return{...K,name:d0(K.name)};return K});return J});return JSON.stringify(K1(j))}function Q0(j){return j.replace(/"name"\s*:\s*"mcp_([^"]+)"/g,(J,K)=>`"name": "${jj(K)}"`)}function i0(j,J=!1){if(J)return{ready:Q0(j),pending:""};let K=j.length,Z='"name"',D=Math.max(0,j.length-Z.length+1);for(let M=D;M<j.length;M++)if(Z.startsWith(j.slice(M))){K=Math.min(K,M);break}let V=j.lastIndexOf(Z);if(V!==-1){let M=j.slice(V);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(M))K=Math.min(K,V)}if(K<j.length)return{ready:Q0(j.slice(0,K)),pending:j.slice(K)};return{ready:Q0(j),pending:""}}function $1(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let j=process.env.ANTHROPIC_INSECURE?.trim();return j==="1"||j==="true"}function Kj(){let j=process.env.ANTHROPIC_BASE_URL?.trim();if(!j)return null;try{let J=new URL(j);if(J.protocol!=="http:"&&J.protocol!=="https:"||J.username||J.password)return null;return J}catch{return null}}function G1(j){let J=null;try{if(typeof j==="string"||j instanceof URL)J=new URL(j.toString());else if(j instanceof Request)J=new URL(j.url)}catch{J=null}if(!J)return{input:j,url:null};let K=J.href,Z=Kj();if(Z)J.protocol=Z.protocol,J.host=Z.host;if(J.pathname==="/v1/messages"&&!J.searchParams.has("beta"))J.searchParams.set("beta","true");if(J.href===K)return{input:j,url:J};return{input:j instanceof Request?new Request(J.toString(),j):J,url:J}}function t(j){let Z=j.split(/\n\n+/).filter((D)=>{if(D.includes(o0))return!1;for(let V of a0)if(D.includes(V))return!1;return!0}).join(` | ||
| import{$ as S1,A as _1,B as F1,C as H0,D as Z0,E as B1,F as p,G as q0,H as M1,I as S0,J as v1,K as A0,L as U1,M as $0,N as G0,O as D0,P as c,Q as x1,R as V0,S as e0,T as j1,U as E0,V as J1,W as K1,X as Z1,Y as P0,Z as H1,_ as q1,a as c0,aa as A1,b as o0,ba as E1,c as e,ca as C1,d as j0,da as R1,e as t0,ea as X0,f as d,fa as W0,g as a0,ga as T1,h as r0,ha as C0,i as s0,ia as Y0,j as F0,ja as f1,k as z1,ka as w0,l as B0,la as y1,m as M0,ma as R0,n as U,na as z0,oa as k1,p as A,pa as g1,q as v0,qa as b1,r as I1,s as J0,sa as m1,t as K0,u as O1,v as Q1,w as U0,x as L1,y as x0,z as N1}from"./index-gjnk6q4x.js";import{randomUUID as Wj}from"node:crypto";function m(j){return typeof j==="object"&&j!==null}function s1(j){if(Array.isArray(j))return j;if(m(j)&&Array.isArray(j.data))return j.data;return[]}function e1(j){if(!m(j)||!m(j.info))return;return typeof j.info.role==="string"?j.info.role:void 0}function m0(j){if(!m(j)||!m(j.info))return null;let J=j.info,K=m(J.model)?J.model:void 0,$=typeof J.agent==="string"?J.agent:void 0,D=typeof K?.providerID==="string"?K.providerID:typeof J.providerID==="string"?J.providerID:void 0,V=typeof K?.modelID==="string"?K.modelID:typeof J.modelID==="string"?J.modelID:void 0,B=typeof K?.variant==="string"?K.variant:typeof J.variant==="string"?J.variant:void 0;if(!$&&(!D||!V)&&!B)return null;let E={};if($)E.agent=$;if(D&&V)E.model={providerID:D,modelID:V};if(B)E.variant=B;return E}function h0(j,J){return{agent:j.agent??J.agent,model:j.model??J.model,variant:j.variant??J.variant}}function u0(j){return Boolean(j.agent&&j.model&&j.variant)}async function d0(j,J){if(!j||!J)return null;let K=j;if(typeof K.session?.messages!=="function")return null;let $=[];try{$=s1(await Promise.resolve(K.session.messages({path:{id:J},query:{limit:100}})))}catch{return null}if($.length===0)return null;let D={};for(let V=$.length-1;V>=0;V--){if(e1($[V])!=="assistant")continue;let B=m0($[V]);if(!B)continue;if(D=h0(D,B),u0(D))return D}for(let V=$.length-1;V>=0;V--){let B=m0($[V]);if(!B)continue;if(D=h0(D,B),u0(D))return D}if(!D.agent&&!D.model&&!D.variant)return null;return D}function l0(j){return`${c0}${j.charAt(0).toUpperCase()}${j.slice(1)}`}function jj(j){if(j==="StructuredOutput")return j;return`${j.charAt(0).toLowerCase()}${j.slice(1)}`}function $1(j,J){let K=new Headers;if(j instanceof Request)j.headers.forEach((D,V)=>{K.set(V,D)});let $=J?.headers;if($){if($ instanceof Headers)$.forEach((D,V)=>{K.set(V,D)});else if(Array.isArray($))for(let D of $){let[V,B]=D;if(typeof B<"u")K.set(V,String(B))}else for(let[D,V]of Object.entries($))if(typeof V<"u")K.set(D,String(V))}return K}function N0(j){return j.set("anthropic-beta",e(j.get("anthropic-beta"),[o0])),j}function l(j,J,K={}){return K1(j,J,K)}function Jj(j){if(j.tools&&Array.isArray(j.tools))j.tools=j.tools.map((J)=>({...J,name:J.name?l0(J.name):J.name}));if(j.messages&&Array.isArray(j.messages))j.messages=j.messages.map((J)=>{if(J.content&&Array.isArray(J.content))J.content=J.content.map((K)=>{if(K.type==="tool_use"&&K.name)return{...K,name:l0(K.name)};return K});return J});return JSON.stringify(Z1(j))}function Q0(j){return j.replace(/"name"\s*:\s*"mcp_([^"]+)"/g,(J,K)=>`"name": "${jj(K)}"`)}function i0(j,J=!1){if(J)return{ready:Q0(j),pending:""};let K=j.length,$='"name"',D=Math.max(0,j.length-$.length+1);for(let B=D;B<j.length;B++)if($.startsWith(j.slice(B))){K=Math.min(K,B);break}let V=j.lastIndexOf($);if(V!==-1){let B=j.slice(V);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(B))K=Math.min(K,V)}if(K<j.length)return{ready:Q0(j.slice(0,K)),pending:j.slice(K)};return{ready:Q0(j),pending:""}}function G1(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let j=process.env.ANTHROPIC_INSECURE?.trim();return j==="1"||j==="true"}function Kj(){let j=process.env.ANTHROPIC_BASE_URL?.trim();if(!j)return null;try{let J=new URL(j);if(J.protocol!=="http:"&&J.protocol!=="https:"||J.username||J.password)return null;return J}catch{return null}}function D1(j){let J=null;try{if(typeof j==="string"||j instanceof URL)J=new URL(j.toString());else if(j instanceof Request)J=new URL(j.url)}catch{J=null}if(!J)return{input:j,url:null};let K=J.href,$=Kj();if($)J.protocol=$.protocol,J.host=$.host;if(J.pathname==="/v1/messages"&&!J.searchParams.has("beta"))J.searchParams.set("beta","true");if(J.href===K)return{input:j,url:J};return{input:j instanceof Request?new Request(J.toString(),j):J,url:J}}function a(j){let $=j.split(/\n\n+/).filter((D)=>{if(D.includes(t0))return!1;for(let V of r0)if(D.includes(V))return!1;return!0}).join(` | ||
| `);for(let D of r0)Z=Z.replace(D.match,D.replacement);return Z.trim()}function R(j){return j!=null&&typeof j==="object"&&!Array.isArray(j)}function Zj(j){let J={type:"text",text:d};if(j==null)return[J];if(typeof j==="string"){let Z=t(j);if(Z===d)return[J];return[J,{type:"text",text:Z}]}if(R(j)){let Z=typeof j.type==="string"?j.type:"text",D=typeof j.text==="string"?j.text:"";return[J,{...j,type:Z,text:t(D)}]}if(!Array.isArray(j))return[J];let K=j.map((Z)=>{if(typeof Z==="string")return{type:"text",text:t(Z)};if(R(Z)&&Z.type==="text"&&typeof Z.text==="string")return{...Z,type:"text",text:t(Z.text)};return{type:"text",text:String(Z)}});if(K[0]?.text===d)return K;return[J,...K]}var D1={type:"ephemeral",ttl:"1h"};function $j(j){if(R(j.cache_control))return j.cache_control;if(R(j.cacheControl))return j.cacheControl;return null}function r(j,J){if(!R(j))return!1;return delete j.cacheControl,j.cache_control=J?{...D1}:{type:"ephemeral"},!0}function n0(j){if(!R(j))return;delete j.cache_control,delete j.cacheControl}function Gj(j){if(Array.isArray(j))return j;if(typeof j==="string")return[{type:"text",text:j}];return null}function a(j,J){if(!R(j))return;let K=$j(j);if(!K||K.type!=="ephemeral")return;if(J)K.ttl="1h";else delete K.ttl}function l0(j,J){if(Array.isArray(j.system))for(let K of j.system)a(K,J);else a(j.system,J);if(!Array.isArray(j.messages))return;for(let K of j.messages)if(a(K,J),R(K)&&Array.isArray(K.content))for(let Z of K.content)a(Z,J)}function Dj(j,J){if(Array.isArray(j.system))for(let K of j.system)J(K);else J(j.system);if(!Array.isArray(j.messages))return;for(let K of j.messages)if(J(K),R(K)&&Array.isArray(K.content))for(let Z of K.content)J(Z)}function V1(j){n0(j),Dj(j,n0)}function Vj(j){V1(j),j.cache_control={...D1}}function L0(j){if(!R(j))return!1;let J=Gj(j.content);if(!J?.length)return r(j,!0);j.content=J;let K=[...J].reverse().find((Z)=>R(Z)&&Z.type!=="thinking");return r(K??j,!0)}function Pj(j){if(V1(j),Array.isArray(j.system)){let K=j.system.findIndex((V)=>R(V)&&V.text===d),Z=j.system.slice(K>=0?K+1:0).filter(R),D=Z[Z.length-1];r(D,!0)}else r(j.system,!0);if(!Array.isArray(j.messages))return;L0(j.messages[0]),L0(j.messages[1]);let J=j.messages.length-2;if(J>1)L0(j.messages[J])}function Xj(j,J){if(!J.enabled){l0(j,!1),delete j.cache_control,delete j.cacheControl;return}if(J.mode==="automatic"){Vj(j);return}if(J.mode==="hybrid"){Pj(j);return}l0(j,!0),delete j.cacheControl}async function P1(j,J={}){try{let K=JSON.parse(j),Z=Array.isArray(K.messages)&&K.messages.some((D)=>D.role==="user")?e0(K.messages,void 0,t0):null;if(K.system=Zj(K.system),Z&&Array.isArray(K.system))K.system.unshift({type:"text",text:Z});if(Xj(K,{enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit"}),J.fastModeEnabled&&e(K.model))K.speed="fast";else if(K.speed==="fast")delete K.speed;if(J.identity)j1(K,J.identity);return await s0(Jj(K))}catch{return j}}function _0(j){if(!j.body)return j;let J=j.body.getReader(),K=new TextDecoder,Z=new TextEncoder,D="",V=new ReadableStream({async pull(M){let{done:A,value:y}=await J.read();if(A){let u=i0(`${D}${K.decode()}`,!0);if(u.ready)M.enqueue(Z.encode(u.ready));M.close();return}let O0=D+K.decode(y,{stream:!0}),h=i0(O0);if(D=h.pending,h.ready)M.enqueue(Z.encode(h.ready))}});return new Response(V,{status:j.status,statusText:j.statusText,headers:j.headers})}var Yj="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",wj=60000,zj=60000,Ij=5000,X1=200,h1=240,Oj=h1,Qj=1,W1=!1;function I0(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function B(){return performance.now()}function q(j){return Math.round(j*10)/10}function Y1(j){return Math.floor(Math.random()*Math.max(0,j))}function Lj(){if(W1||!1||!I0())return;W1=!0;let j=100,J=250,K=B()+j;setInterval(()=>{let Z=B(),D=Z-K;if(K=Z+j,D<J)return;H("[perf] opencode event_loop_lag",{lagMs:q(D),thresholdMs:J})},j).unref?.()}function Nj(j){let J=B(),K={requestId:String(Qj++),start:J,last:J,mark(Z,D){let V=B();if(I0())H("[perf] opencode request stage",{requestId:K.requestId,stage:Z,deltaMs:q(V-K.last),totalMs:q(V-K.start),...D});K.last=V},done(Z,D){let V=B();if(I0())H("[perf] opencode request done",{requestId:K.requestId,stage:Z,deltaMs:q(V-K.last),totalMs:q(V-K.start),...D});K.last=V}};if(I0())H("[perf] opencode request start",{requestId:K.requestId,...j});return K}async function n(j,J,K){let Z=j.client.session,D=await u0(j.client,J),V={path:{id:J},body:{noReply:!0,parts:[{type:"text",text:K,ignored:!0}]}};if(D?.agent)V.body.agent=D.agent;if(D?.model)V.body.model=D.model;if(D?.variant)V.body.variant=D.variant;if(typeof Z?.promptAsync==="function"){await Z.promptAsync(V);return}if(typeof Z?.prompt==="function"){await Promise.resolve(Z.prompt(V));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function l(){throw Error(Yj)}var qj=async(j)=>{Lj();let{client:J}=j,K=new U1;K.startBackgroundRefresh();let Z=null,D=new C1({loadStorage:()=>E(),prepareHeaders:async($,I)=>{if(!A)return $;let L=await A();if(L.type!=="oauth")return $;if(!L.access||L.expires&&L.expires<Date.now()){if(!Z)return $;L.access=await Z()}if(!L.access)return $;try{let Q=JSON.parse(I.bodyText),U=await E0(L.access,typeof Q.model==="string"?Q.model:void 0);if($.delete("anthropic-beta"),i($,L.access,{body:Q,identity:U}),$.set("anthropic-beta",s($.get("anthropic-beta"),[H1])),Q.speed==="fast")N0($)}catch{i($,L.access)}return $},log:H}),V=await E(),M=m1(V);p({enabled:j0(V),mode:J0(V)}),W0(U0(V)),w0(x0(V));let A=null,y=null;function O0($){let I=$?.refresh?.refreshBeforeExpiryMinutes??Oj;return Math.max(h1,I)*60000}function h($){return $?.refresh?.enabled!==!1}async function u($){if(!$)return;let I=await E(),L=I?.refresh?.mainLastRefreshError;if(!I?.refresh||!L?.tokenHash)return;let Q=K0($);if(L.tokenHash===Q)return;I.refresh.mainLastRefreshError=void 0,await v0(I),H("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:L.checkedAt,previousNextRetryAt:L.nextRetryAt,previousRetryCount:L.retryCount})}async function u1(){let $=[];if(A)try{let Q=await A();if(Q.type==="oauth"&&Q.access)$.push({name:"OpenCode anthropic",role:"main",quota:await S0({accessToken:Q.access})});else if(Q.type==="oauth")$.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(Q){$.push({name:"OpenCode anthropic",role:"main",error:Q instanceof Error?Q.message:String(Q)})}let{storage:I,errors:L}=await K.refreshQuotaForAllAccounts();if($.push(...k1(I,new Map(L.map((Q)=>[Q.accountId,Q.message])))),!A)$.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return g1({accounts:$,refreshedAt:Date.now()})}async function d1($){let I=x1($);if(I.type==="enable"||I.type==="disable"){let f=I.type==="enable",k=await I1(f),g=J0(k);return p({enabled:f,mode:g}),V0({argumentsText:$,enabled:f,mode:g})}if(I.type==="mode"){let f=await O1(I.mode),k=j0(f);return p({enabled:k,mode:I.mode}),V0({argumentsText:$,enabled:k,mode:I.mode})}let L=await E(),Q=j0(L),U=J0(L);return p({enabled:Q,mode:U}),V0({argumentsText:$,enabled:Q,mode:U})}async function i1($){let I=q1($),L=await E();if(I.type==="window")L=await N1(I.startHour,I.endHour);else if(I.type==="disable")L=await _1(!1);let Q=S1(L),U=D.stats(Q);return R1({argumentsText:$,enabled:E1(L),window:Q,hybridActive:A1(L),trackedSessions:U.trackedSessions,nextPrewarmAt:U.nextPrewarmAt})}async function n1($){let I=f1($);if(I.type==="enable"||I.type==="disable"){let U=I.type==="enable";return await Q1(U),W0(U),A0({argumentsText:$,enabled:U})}let L=await E(),Q=U0(L);return W0(Q),A0({argumentsText:$,enabled:Q})}async function l1($){let I=y1($);if(I.type==="enable"||I.type==="disable"){let U=I.type==="enable";return await L1(U),w0(U),R0({argumentsText:$,enabled:U})}let L=await E(),Q=x0(L);return w0(Q),R0({argumentsText:$,enabled:Q})}return{config:async($)=>{$.command={...$.command??{},[$0]:{template:$0,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[P0]:{template:P0,description:"Keep hybrid Claude cache warm for recently used sessions during a local time window."},[z0]:{template:z0,description:"Show current Claude OAuth quota usage for all accounts."},[X0]:{template:X0,description:"Show or toggle Anthropic request dump capture for debugging."},[Y0]:{template:Y0,description:"Show or toggle Anthropic fast mode for supported Opus models."}}},"command.execute.before":async($)=>{if($.command===$0)await n(j,$.sessionID,await d1($.arguments)),l();if($.command===P0)await n(j,$.sessionID,await i1($.arguments)),l();if($.command===z0)await n(j,$.sessionID,await u1()),l();if($.command===X0)await n(j,$.sessionID,await n1($.arguments)),l();if($.command===Y0)await n(j,$.sessionID,await l1($.arguments)),l()},auth:{provider:"anthropic",async loader($,I){if(A=$,(await $()).type==="oauth"){let p1=function(){if(y)clearInterval(y),y=null;let P=async()=>{try{let X=await E();if(!h(X))return;let Y=await $();if(Y.type!=="oauth")return;if(await u(Y.refresh),!Y.expires)return;let z=Y.expires-Date.now(),v=O0(X);if(z>v)return;if(H("[refresh] opencode main oauth background due",{expiresInMs:z,refreshBeforeMs:v}),Y.refresh&&Z0(X?.refresh?.mainLastRefreshError,Y.refresh,Date.now())){H("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:X?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:X?.refresh?.mainLastRefreshError?.retryCount});return}if(Y.refresh&&X?.refresh?.mainRefreshLeaseUntil&&X.refresh.mainRefreshLeaseUntil>Date.now()&&X.refresh.mainRefreshLeaseTokenHash===K0(Y.refresh))return;await g(),H("[refresh] opencode main oauth refreshed in background",{expires:Y.expires})}catch(X){H("[refresh] opencode main oauth refresh failed",{message:X instanceof Error?X.message:String(X)})}};if(y=setInterval(()=>{P()},wj+Y1(zj)),"unref"in y)y.unref()},C0=function(P,X){if(P instanceof Request&&P.body)return!1;return X==null||typeof X==="string"},c1=function(P){return P.has("x-parent-session-id")},f0=function(P){return P.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(P)},o1=function(P){return P?.quota?.enabled===!0},t1=function(P,X){let Y=Date.now();if(f||Y<k)return;f=k0(P,X).catch((z)=>{throw k=Y+B1(X),z}).finally(()=>{f=null}),f.catch(()=>{})};for(let P of Object.values(I.models))P.cost={input:0,output:0,cache:{read:0,write:0}};let Q=null,U=null,f=null,k=0;async function g(){if(!Q)Q=(async()=>{let Y=null,z=null,v=null;async function _(O){let w=await E()??{version:1,main:{type:"opencode",provider:"anthropic"},accounts:[]};w.refresh=w.refresh??{},O(w),await v0(w)}async function F(O){let w=Date.now()+Ij;while(Date.now()<w){await new Promise((W)=>setTimeout(W,X1+Y1(X1)));let G=await $();if(G.type!=="oauth"||!G.access)continue;if((G.access!==O.access||G.refresh!==O.refresh||(G.expires??0)>(O.expires??0)+60000)&&(!G.expires||G.expires>Date.now()))return H("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:G.expires?G.expires-Date.now():void 0}),G.access}return null}for(let O=0;O<=2;O++){let w=null;try{if(O>0){let x=500*2**(O-1);await new Promise((c)=>setTimeout(c,x))}if(w=await $(),!w.refresh)throw Error("Token refresh failed: missing refresh token");let G=await E(),N=K0(w.refresh),W=G?.refresh?.mainLastRefreshError;if(H("[refresh] opencode main oauth refresh check",{attempt:O,expiresInMs:w.expires?w.expires-Date.now():void 0,hasBackoff:Boolean(W),backoffActive:W?Z0(W,w.refresh,Date.now()):!1,retryCount:W?.retryCount,nextRetryAt:W?.nextRetryAt}),W&&Z0(W,w.refresh,Date.now()))throw H("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:W.nextRetryAt,retryCount:W.retryCount}),Error(M1(W,Date.now()));if(G?.refresh?.mainRefreshLeaseUntil&&G.refresh.mainRefreshLeaseUntil>Date.now()&&G.refresh.mainRefreshLeaseTokenHash===N){H("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:G.refresh.mainRefreshLeaseUntil});let x=await F(w);if(x)return x;throw Error("Claude OAuth refresh is already in progress")}let S=await z1({name:"opencode-main-oauth-refresh",ttlMs:120000});if(!S){H("[refresh] opencode main oauth refresh skipped file lock");let x=await F(w);if(x)return x;throw Error("Claude OAuth refresh is already in progress")}v=S.release,Y=Wj(),z=N,await _((x)=>{x.refresh=x.refresh??{},x.refresh.mainRefreshLeaseId=Y??void 0,x.refresh.mainRefreshLeaseUntil=Date.now()+120000,x.refresh.mainRefreshLeaseTokenHash=N});let T=await E();if(H("[refresh] opencode main oauth refresh lease acquired",{attempt:O,leaseUntil:Date.now()+120000}),T?.refresh?.mainRefreshLeaseId!==Y||T.refresh.mainRefreshLeaseTokenHash!==N)throw Error("Claude OAuth refresh is already in progress");H("[refresh] opencode main oauth refresh request start",{attempt:O});let C=await w1({refreshToken:w.refresh,maxRetries:0});return await J.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:C.refresh,access:C.access,expires:C.expires}}),await _((x)=>{if(!x?.refresh)return;if(x.refresh.mainLastRefreshError=void 0,x.refresh.mainRefreshLeaseId===Y)x.refresh.mainRefreshLeaseId=void 0,x.refresh.mainRefreshLeaseUntil=void 0,x.refresh.mainRefreshLeaseTokenHash=void 0}),H("[refresh] opencode main oauth refresh succeeded",{attempt:O,expiresInMs:C.expires-Date.now()}),C.access}catch(G){let N=G instanceof Error&&(G.message.includes("fetch failed")||("code"in G)&&(G.code==="ECONNRESET"||G.code==="ECONNREFUSED"||G.code==="ETIMEDOUT"||G.code==="UND_ERR_CONNECT_TIMEOUT"));if(O<2&&(N||G instanceof F0&&G.status>=500))continue;H("[refresh] opencode main oauth refresh attempt failed",{attempt:O,error:G instanceof Error?G.message:String(G),transient:N});let W=w?.refresh;if(W&&G instanceof F0)await _((S)=>{S.refresh=S.refresh??{},S.refresh.mainLastRefreshError=F1({error:G,now:Date.now(),refreshToken:W,previous:S.refresh.mainLastRefreshError})});throw G}finally{if(Y)await _((G)=>{if(!G?.refresh)return;if(G.refresh.mainRefreshLeaseId===Y&&G.refresh.mainRefreshLeaseTokenHash===z)G.refresh.mainRefreshLeaseId=void 0,G.refresh.mainRefreshLeaseUntil=void 0,G.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await v?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{Q=null});return Q}Z=g,p1();async function T0(P,X){if(!P.body||P.status!==200)return X?.mark("inspect_stream_skip",{status:P.status}),{response:P,rateLimited:!1};if(P.headers.get("x-cortexkit-relay-optimistic")==="true")return X?.mark("inspect_stream_skip",{status:P.status,reason:"optimistic_relay"}),{response:P,rateLimited:!1};let Y=B(),z=P.body.getReader(),v=[],_=new TextDecoder,F="",O=0;while(!F.includes(` | ||
| `);for(let D of s0)$=$.replace(D.match,D.replacement);return $.trim()}function C(j){return j!=null&&typeof j==="object"&&!Array.isArray(j)}function Zj(j){let J={type:"text",text:d};if(j==null)return[J];if(typeof j==="string"){let $=a(j);if($===d)return[J];return[J,{type:"text",text:$}]}if(C(j)){let $=typeof j.type==="string"?j.type:"text",D=typeof j.text==="string"?j.text:"";return[J,{...j,type:$,text:a(D)}]}if(!Array.isArray(j))return[J];let K=j.map(($)=>{if(typeof $==="string")return{type:"text",text:a($)};if(C($)&&$.type==="text"&&typeof $.text==="string")return{...$,type:"text",text:a($.text)};return{type:"text",text:String($)}});if(K[0]?.text===d)return K;return[J,...K]}var V1={type:"ephemeral",ttl:"1h"};function $j(j){if(C(j.cache_control))return j.cache_control;if(C(j.cacheControl))return j.cacheControl;return null}function s(j,J){if(!C(j))return!1;return delete j.cacheControl,j.cache_control=J?{...V1}:{type:"ephemeral"},!0}function n0(j){if(!C(j))return;delete j.cache_control,delete j.cacheControl}function Gj(j){if(Array.isArray(j))return j;if(typeof j==="string")return[{type:"text",text:j}];return null}function r(j,J){if(!C(j))return;let K=$j(j);if(!K||K.type!=="ephemeral")return;if(J)K.ttl="1h";else delete K.ttl}function p0(j,J){if(Array.isArray(j.system))for(let K of j.system)r(K,J);else r(j.system,J);if(!Array.isArray(j.messages))return;for(let K of j.messages)if(r(K,J),C(K)&&Array.isArray(K.content))for(let $ of K.content)r($,J)}function Dj(j,J){if(Array.isArray(j.system))for(let K of j.system)J(K);else J(j.system);if(!Array.isArray(j.messages))return;for(let K of j.messages)if(J(K),C(K)&&Array.isArray(K.content))for(let $ of K.content)J($)}function P1(j){n0(j),Dj(j,n0)}function Vj(j){P1(j),j.cache_control={...V1}}function L0(j){if(!C(j))return!1;let J=Gj(j.content);if(!J?.length)return s(j,!0);j.content=J;let K=[...J].reverse().find(($)=>C($)&&$.type!=="thinking");return s(K??j,!0)}function Pj(j){if(P1(j),Array.isArray(j.system)){let K=j.system.findIndex((V)=>C(V)&&V.text===d),$=j.system.slice(K>=0?K+1:0).filter(C),D=$[$.length-1];s(D,!0)}else s(j.system,!0);if(!Array.isArray(j.messages))return;L0(j.messages[0]),L0(j.messages[1]);let J=j.messages.length-2;if(J>1)L0(j.messages[J])}function Xj(j,J){if(!J.enabled){p0(j,!1),delete j.cache_control,delete j.cacheControl;return}if(J.mode==="automatic"){Vj(j);return}if(J.mode==="hybrid"){Pj(j);return}p0(j,!0),delete j.cacheControl}async function X1(j,J={}){try{let K=JSON.parse(j),$=Array.isArray(K.messages)&&K.messages.some((D)=>D.role==="user")?j1(K.messages,void 0,a0):null;if(K.system=Zj(K.system),$&&Array.isArray(K.system))K.system.unshift({type:"text",text:$});if(Xj(K,{enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit"}),J.fastModeEnabled&&j0(K.model))K.speed="fast";else if(K.speed==="fast")delete K.speed;if(J.identity)J1(K,J.identity);return await e0(Jj(K))}catch{return j}}function _0(j){if(!j.body)return j;let J=j.body.getReader(),K=new TextDecoder,$=new TextEncoder,D="",V=new ReadableStream({async pull(B){let{done:E,value:y}=await J.read();if(E){let u=i0(`${D}${K.decode()}`,!0);if(u.ready)B.enqueue($.encode(u.ready));B.close();return}let O0=D+K.decode(y,{stream:!0}),h=i0(O0);if(D=h.pending,h.ready)B.enqueue($.encode(h.ready))}});return new Response(V,{status:j.status,statusText:j.statusText,headers:j.headers})}var Yj="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",wj=60000,zj=60000,Ij=5000,W1=200,h1=240,Oj=h1,Qj=1,Y1=!1;function I0(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function M(){return performance.now()}function S(j){return Math.round(j*10)/10}function w1(j){return Math.floor(Math.random()*Math.max(0,j))}function Lj(){if(Y1||!1||!I0())return;Y1=!0;let j=100,J=250,K=M()+j;setInterval(()=>{let $=M(),D=$-K;if(K=$+j,D<J)return;U("[perf] opencode event_loop_lag",{lagMs:S(D),thresholdMs:J})},j).unref?.()}function Nj(j){let J=M(),K={requestId:String(Qj++),start:J,last:J,mark($,D){let V=M();if(I0())U("[perf] opencode request stage",{requestId:K.requestId,stage:$,deltaMs:S(V-K.last),totalMs:S(V-K.start),...D});K.last=V},done($,D){let V=M();if(I0())U("[perf] opencode request done",{requestId:K.requestId,stage:$,deltaMs:S(V-K.last),totalMs:S(V-K.start),...D});K.last=V}};if(I0())U("[perf] opencode request start",{requestId:K.requestId,...j});return K}async function i(j,J,K){let $=j.client.session,D=await d0(j.client,J),V={path:{id:J},body:{noReply:!0,parts:[{type:"text",text:K,ignored:!0}]}};if(D?.agent)V.body.agent=D.agent;if(D?.model)V.body.model=D.model;if(D?.variant)V.body.variant=D.variant;if(typeof $?.promptAsync==="function"){await $.promptAsync(V);return}if(typeof $?.prompt==="function"){await Promise.resolve($.prompt(V));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function n(){throw Error(Yj)}var qj=async(j)=>{Lj();let{client:J}=j,K=new U1;K.startBackgroundRefresh();let $=null,D=new R1({loadStorage:()=>A(),prepareHeaders:async(Z,Q)=>{if(!E)return Z;let W=await E();if(W.type!=="oauth")return Z;if(!W.access||W.expires&&W.expires<Date.now()){if(!$)return Z;W.access=await $()}if(!W.access)return Z;try{let N=JSON.parse(Q.bodyText),x=await E0(W.access,typeof N.model==="string"?N.model:void 0);if(Z.delete("anthropic-beta"),l(Z,W.access,{body:N,identity:x}),Z.set("anthropic-beta",e(Z.get("anthropic-beta"),[H1])),N.speed==="fast")N0(Z)}catch{l(Z,W.access)}return Z},log:U}),V=await A(),B=b1(V);c({enabled:J0(V),mode:K0(V)}),W0(U0(V)),w0(x0(V));let E=null,y=null;function O0(Z){let Q=Z?.refresh?.refreshBeforeExpiryMinutes??Oj;return Math.max(h1,Q)*60000}function h(Z){return Z?.refresh?.enabled!==!1}async function u(Z){if(!Z)return;let Q=await A(),W=Q?.refresh?.mainLastRefreshError;if(!Q?.refresh||!W?.tokenHash)return;let N=Z0(Z);if(W.tokenHash===N)return;if(W.nextRetryAt&&W.nextRetryAt>Date.now()){U("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:W.nextRetryAt,retryCount:W.retryCount,remainingMs:W.nextRetryAt-Date.now()});return}Q.refresh.mainLastRefreshError=void 0,await v0(Q),U("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:W.checkedAt,previousNextRetryAt:W.nextRetryAt,previousRetryCount:W.retryCount})}async function u1(){let Z=[];if(E)try{let N=await E();if(N.type==="oauth"&&N.access)Z.push({name:"OpenCode anthropic",role:"main",quota:await A0({accessToken:N.access})});else if(N.type==="oauth")Z.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(N){Z.push({name:"OpenCode anthropic",role:"main",error:N instanceof Error?N.message:String(N)})}let{storage:Q,errors:W}=await K.refreshQuotaForAllAccounts();if(Z.push(...k1(Q,new Map(W.map((N)=>[N.accountId,N.message])))),!E)Z.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return g1({accounts:Z,refreshedAt:Date.now()})}async function d1(Z){let Q=x1(Z);if(Q.type==="enable"||Q.type==="disable"){let f=Q.type==="enable",k=await O1(f),g=K0(k);return c({enabled:f,mode:g}),V0({argumentsText:Z,enabled:f,mode:g})}if(Q.type==="mode"){let f=await Q1(Q.mode),k=J0(f);return c({enabled:k,mode:Q.mode}),V0({argumentsText:Z,enabled:k,mode:Q.mode})}let W=await A(),N=J0(W),x=K0(W);return c({enabled:N,mode:x}),V0({argumentsText:Z,enabled:N,mode:x})}async function l1(Z){let Q=q1(Z),W=await A();if(Q.type==="window")W=await _1(Q.startHour,Q.endHour);else if(Q.type==="disable")W=await F1(!1);let N=S1(W),x=D.stats(N);return C1({argumentsText:Z,enabled:A1(W),window:N,hybridActive:E1(W),trackedSessions:x.trackedSessions,nextPrewarmAt:x.nextPrewarmAt})}async function i1(Z){let Q=T1(Z);if(Q.type==="enable"||Q.type==="disable"){let x=Q.type==="enable";return await L1(x),W0(x),C0({argumentsText:Z,enabled:x})}let W=await A(),N=U0(W);return W0(N),C0({argumentsText:Z,enabled:N})}async function n1(Z){let Q=y1(Z);if(Q.type==="enable"||Q.type==="disable"){let x=Q.type==="enable";return await N1(x),w0(x),R0({argumentsText:Z,enabled:x})}let W=await A(),N=x0(W);return w0(N),R0({argumentsText:Z,enabled:N})}return{config:async(Z)=>{Z.command={...Z.command??{},[$0]:{template:$0,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[P0]:{template:P0,description:"Keep hybrid Claude cache warm for recently used sessions during a local time window."},[z0]:{template:z0,description:"Show current Claude OAuth quota usage for all accounts."},[X0]:{template:X0,description:"Show or toggle Anthropic request dump capture for debugging."},[Y0]:{template:Y0,description:"Show or toggle Anthropic fast mode for supported Opus models."}}},"command.execute.before":async(Z)=>{if(Z.command===$0)await i(j,Z.sessionID,await d1(Z.arguments)),n();if(Z.command===P0)await i(j,Z.sessionID,await l1(Z.arguments)),n();if(Z.command===z0)await i(j,Z.sessionID,await u1()),n();if(Z.command===X0)await i(j,Z.sessionID,await i1(Z.arguments)),n();if(Z.command===Y0)await i(j,Z.sessionID,await n1(Z.arguments)),n()},auth:{provider:"anthropic",async loader(Z,Q){if(E=Z,(await Z()).type==="oauth"){let p1=function(){if(y)clearInterval(y),y=null;let P=async()=>{try{let X=await A();if(!h(X))return;let z=await Z();if(z.type!=="oauth")return;if(await u(z.refresh),!z.expires)return;let I=z.expires-Date.now(),v=O0(X);if(I>v)return;if(U("[refresh] opencode main oauth background due",{expiresInMs:I,refreshBeforeMs:v}),z.refresh&&p(X?.refresh?.mainLastRefreshError,z.refresh,Date.now())){U("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:X?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:X?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:I});return}if(z.refresh&&X?.refresh?.mainRefreshLeaseUntil&&X.refresh.mainRefreshLeaseUntil>Date.now()&&X.refresh.mainRefreshLeaseTokenHash===Z0(z.refresh))return;await g();let O=await Z();U("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:O.expires?O.expires-Date.now():void 0})}catch(X){U("[refresh] opencode main oauth refresh failed",{message:X instanceof Error?X.message:String(X)})}};if(y=setInterval(()=>{P()},wj+w1(zj)),"unref"in y)y.unref()},T0=function(P,X){if(P instanceof Request&&P.body)return!1;return X==null||typeof X==="string"},c1=function(P){return P.has("x-parent-session-id")},f0=function(P){return P.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(P)},o1=function(P){return P?.quota?.enabled===!0},t1=function(P,X){let z=Date.now();if(f||z<k)return;f=g0(P,X).catch((I)=>{throw k=z+M1(X),I}).finally(()=>{f=null}),f.catch(()=>{})};for(let P of Object.values(Q.models))P.cost={input:0,output:0,cache:{read:0,write:0}};let N=null,x=null,f=null,k=0;async function g(){if(!N)N=(async()=>{let z=null,I=null,v=null;async function O(L){let Y=await A()??{version:1,main:{type:"opencode",provider:"anthropic"},accounts:[]};Y.refresh=Y.refresh??{},L(Y),await v0(Y)}async function F(L){let Y=Date.now()+Ij;while(Date.now()<Y){await new Promise((w)=>setTimeout(w,W1+w1(W1)));let G=await Z();if(G.type!=="oauth"||!G.access)continue;if((G.access!==L.access||G.refresh!==L.refresh||(G.expires??0)>(L.expires??0)+60000)&&(!G.expires||G.expires>Date.now()))return U("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:G.expires?G.expires-Date.now():void 0}),G.access}return null}for(let L=0;L<=2;L++){let Y=null;try{if(L>0){let H=500*2**(L-1);await new Promise((o)=>setTimeout(o,H))}if(Y=await Z(),!Y.refresh)throw Error("Token refresh failed: missing refresh token");let G=await A(),_=Z0(Y.refresh),w=G?.refresh?.mainLastRefreshError;if(U("[refresh] opencode main oauth refresh check",{attempt:L,expiresInMs:Y.expires?Y.expires-Date.now():void 0,hasBackoff:Boolean(w),backoffActive:w?p(w,Y.refresh,Date.now()):!1,retryCount:w?.retryCount,nextRetryAt:w?.nextRetryAt}),w&&p(w,Y.refresh,Date.now()))throw U("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:w.nextRetryAt,retryCount:w.retryCount}),Error(q0(w,Date.now()));if(G?.refresh?.mainRefreshLeaseUntil&&G.refresh.mainRefreshLeaseUntil>Date.now()&&G.refresh.mainRefreshLeaseTokenHash===_){U("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:G.refresh.mainRefreshLeaseUntil});let H=await F(Y);if(H)return H;throw Error("Claude OAuth refresh is already in progress")}let q=await I1({name:"opencode-main-oauth-refresh",ttlMs:120000});if(!q){U("[refresh] opencode main oauth refresh skipped file lock");let H=await F(Y);if(H)return H;throw Error("Claude OAuth refresh is already in progress")}v=q.release,z=Wj(),I=_,await O((H)=>{H.refresh=H.refresh??{},H.refresh.mainRefreshLeaseId=z??void 0,H.refresh.mainRefreshLeaseUntil=Date.now()+120000,H.refresh.mainRefreshLeaseTokenHash=_});let R=await A();if(U("[refresh] opencode main oauth refresh lease acquired",{attempt:L,leaseUntil:Date.now()+120000}),R?.refresh?.mainRefreshLeaseId!==z||R.refresh.mainRefreshLeaseTokenHash!==_)throw Error("Claude OAuth refresh is already in progress");U("[refresh] opencode main oauth refresh request start",{attempt:L});let T=await z1({refreshToken:Y.refresh,maxRetries:0});return await J.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:T.refresh,access:T.access,expires:T.expires}}),await O((H)=>{if(!H?.refresh)return;if(H.refresh.mainLastRefreshError=void 0,H.refresh.mainRefreshLeaseId===z)H.refresh.mainRefreshLeaseId=void 0,H.refresh.mainRefreshLeaseUntil=void 0,H.refresh.mainRefreshLeaseTokenHash=void 0}),U("[refresh] opencode main oauth refresh succeeded",{attempt:L,expiresInMs:T.expires-Date.now()}),T.access}catch(G){let _=G instanceof Error&&(G.message.includes("fetch failed")||("code"in G)&&(G.code==="ECONNRESET"||G.code==="ECONNREFUSED"||G.code==="ETIMEDOUT"||G.code==="UND_ERR_CONNECT_TIMEOUT"));if(L<2&&(_||G instanceof F0&&G.status>=500))continue;U("[refresh] opencode main oauth refresh attempt failed",{attempt:L,error:G instanceof Error?G.message:String(G),transient:_});let w=Y?.refresh;if(w&&G instanceof F0)await O((q)=>{q.refresh=q.refresh??{},q.refresh.mainLastRefreshError=B1({error:G,now:Date.now(),refreshToken:w,previous:q.refresh.mainLastRefreshError})});throw G}finally{if(z)await O((G)=>{if(!G?.refresh)return;if(G.refresh.mainRefreshLeaseId===z&&G.refresh.mainRefreshLeaseTokenHash===I)G.refresh.mainRefreshLeaseId=void 0,G.refresh.mainRefreshLeaseUntil=void 0,G.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await v?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{N=null});return N}$=g,p1();async function y0(P,X){if(!P.body||P.status!==200)return X?.mark("inspect_stream_skip",{status:P.status}),{response:P,rateLimited:!1};if(P.headers.get("x-cortexkit-relay-optimistic")==="true")return X?.mark("inspect_stream_skip",{status:P.status,reason:"optimistic_relay"}),{response:P,rateLimited:!1};let z=M(),I=P.body.getReader(),v=[],O=new TextDecoder,F="",L=0;while(!F.includes(` | ||
| `)&&F.length<65536){let{done:G,value:N}=await z.read();if(G)break;if(v.push(N),O+=N.byteLength,F+=_.decode(N,{stream:!0}),f0(F))break}if(f0(F))return await z.cancel().catch(()=>{}),X?.mark("inspect_stream_first_event",{ms:q(B()-Y),bytes:O,rateLimited:!0}),{response:P,rateLimited:!0};let w=new ReadableStream({start(G){for(let N of v)G.enqueue(N)},async pull(G){let{done:N,value:W}=await z.read();if(N){G.close();return}G.enqueue(W)},cancel(G){return z.cancel(G)}});return X?.mark("inspect_stream_first_event",{ms:q(B()-Y),bytes:O,rateLimited:!1}),{response:new Response(w,{status:P.status,statusText:P.statusText,headers:P.headers}),rateLimited:!1}}async function y0(P,X,Y,z,v="unknown"){let _=B(),F=Z1(P,X),O=F.get("x-session-affinity")||F.get("x-opencode-session"),w=c1(F);F.delete("x-parent-session-id"),F.delete("x-session-affinity"),F.delete("x-opencode-session");let G=X?.body,N;if(G&&typeof G==="string")try{let m=JSON.parse(G);if(typeof m.model==="string")N=m.model}catch{}let W=await E0(Y,N),S=typeof G==="string"?G.length:void 0;if(G&&typeof G==="string"){let m=B(),o=(()=>{if(!T1())return!1;try{return e(JSON.parse(G).model)}catch{return!1}})();G=await P1(G,{cache1hEnabled:!w&&G0(),cache1hMode:D0(),fastModeEnabled:o,identity:W});try{i(F,Y,{body:JSON.parse(G),identity:W})}catch{i(F,Y,{identity:W})}if(o)N0(F);z?.mark("rewrite_body",{route:v,ms:q(B()-m),originalBytes:S,rewrittenBytes:G.length,cacheEnabled:!w&&G0(),cacheMode:D0(),fastModeEnabled:o,subagent:w})}let T=G1(P);if(v==="main"&&typeof G==="string"&&!w&&G0()&&D0()==="hybrid"){let m=await E();if((await D.track({sessionId:O,url:T.url?.toString()??T.input.toString(),headers:F,bodyText:G,storage:m,cacheMode:"hybrid"})).tracked)z?.mark("cachekeep_track",{session:O})}let C=()=>fetch(T.input,{...X,body:G,headers:F,...$1()&&{tls:{rejectUnauthorized:!1}}}),x=B(),c=await b1({config:M,input:T.input,init:X,headers:F,body:G,fallback:C,affinity:O,optimisticResponse:M?.transport==="websocket"});return z?.mark("send_headers_received",{route:v,ms:q(B()-x),status:c.status,relayConfigured:M!=null,totalSendWithAccessMs:q(B()-_)}),c}async function k0(P,X){let Y=Date.now(),z=await S0({accessToken:P});return U={accessToken:P,refreshAfter:v1(z,X,Y),quota:z},z}async function a1(P,X){let Y=Date.now();if(U?.accessToken!==P)return await k0(P,X);if(Y>=U.refreshAfter)t1(P,X);return U.quota}async function g0(P,X,Y,z,v,_){if(!Y.length)return v??null;await v?.body?.cancel().catch(()=>{});let F=v??null;for(let[O,w]of Y.entries()){let G=w.access;if(!G)continue;let N=await y0(P,X,G,_,`fallback_${O}`);F=N;let W=H0(N.status,z);if(!W){let S=await T0(N,_);N=S.response,F=N,W=S.rateLimited}if(!W)return await K.markUsed(w),N;if(O<Y.length-1)await N.body?.cancel().catch(()=>{})}return F}async function r1(P,X,Y,z,v,_){if(!C0(P,X?.body))return Y;let F=B(),O=_??await E();v?.mark("fallback_load_storage",{ms:q(B()-F),cached:!!_});let w=Y,G=H0(w.status,O);if(!G){let W=await T0(w,v);w=W.response,G=W.rateLimited}if(!G)return w;let N=z;if(!N){let W=B();N=await K.getUsableFallbackAccounts(),v?.mark("fallback_get_accounts",{ms:q(B()-W),accounts:N.length})}return await g0(P,X,N,O,w,v)??w}return{apiKey:"",async fetch(P,X){let Y=X?.body,z=Nj({bodyBytes:typeof Y==="string"?Y.length:void 0,relayConfigured:M!=null}),v=B(),_=await $();if(z.mark("get_auth",{ms:q(B()-v),authType:_.type,hasAccess:Boolean(_.access)}),_.type!=="oauth"){let W=await fetch(P,X);return z.done("non_oauth_passthrough",{status:W.status}),W}if(await u(_.refresh),!_.access||!_.expires||_.expires<Date.now()){H("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(_.access),expiresInMs:_.expires?_.expires-Date.now():void 0});let W=B();_.access=await g(),z.mark("refresh_main_access",{ms:q(B()-W)})}if(!_.access)throw z.done("missing_access_error"),Error("OAuth access token is missing after refresh");let F=B(),O=await E();z.mark("load_storage",{ms:q(B()-F)});let w;if(C0(P,X?.body)&&o1(O))try{let W=B(),S=await a1(_.access,O);if(z.mark("main_quota_for_routing",{ms:q(B()-W),passes:q0(S,O)}),!q0(S,O)){let T=B();w=await K.getUsableFallbackAccounts(),z.mark("preselect_fallback_accounts",{ms:q(B()-T),accounts:w.length});let C=await g0(P,X,w,O,void 0,z);if(C)return z.done("return_preselected_fallback",{status:C.status}),_0(C)}}catch(W){z.mark("main_quota_for_routing_error",{error:W instanceof Error?W.message:String(W)})}let G=await y0(P,X,_.access,z,"main"),N=await r1(P,X,G,w,z,O);return z.done("return_response",{status:N.status}),_0(N)}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let $=await M0("max");return{url:$.url,instructions:"Paste the authorization code here:",method:"code",callback:async(I)=>{return B0(I,$.verifier,$.redirectUri,$.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let $=await M0("console");return{url:$.url,instructions:"Paste the authorization code here:",method:"code",callback:async(I)=>{let L=await B0(I,$.verifier,$.redirectUri,$.state);if(L.type==="failed")return L;return{type:"success",key:(await fetch("https://api.anthropic.com/api/oauth/claude_cli/create_api_key",{method:"POST",headers:{"Content-Type":"application/json",authorization:`Bearer ${L.access}`}}).then((U)=>U.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}};export{qj as AnthropicAuthPlugin}; | ||
| `)&&F.length<65536){let{done:G,value:_}=await I.read();if(G)break;if(v.push(_),L+=_.byteLength,F+=O.decode(_,{stream:!0}),f0(F))break}if(f0(F))return await I.cancel().catch(()=>{}),X?.mark("inspect_stream_first_event",{ms:S(M()-z),bytes:L,rateLimited:!0}),{response:P,rateLimited:!0};let Y=new ReadableStream({start(G){for(let _ of v)G.enqueue(_)},async pull(G){let{done:_,value:w}=await I.read();if(_){G.close();return}G.enqueue(w)},cancel(G){return I.cancel(G)}});return X?.mark("inspect_stream_first_event",{ms:S(M()-z),bytes:L,rateLimited:!1}),{response:new Response(Y,{status:P.status,statusText:P.statusText,headers:P.headers}),rateLimited:!1}}async function k0(P,X,z,I,v="unknown"){let O=M(),F=$1(P,X),L=F.get("x-session-affinity")||F.get("x-opencode-session"),Y=c1(F);F.delete("x-parent-session-id"),F.delete("x-session-affinity"),F.delete("x-opencode-session");let G=X?.body,_;if(G&&typeof G==="string")try{let b=JSON.parse(G);if(typeof b.model==="string")_=b.model}catch{}let w=await E0(z,_),q=typeof G==="string"?G.length:void 0;if(G&&typeof G==="string"){let b=M(),t=(()=>{if(!f1())return!1;try{return j0(JSON.parse(G).model)}catch{return!1}})();G=await X1(G,{cache1hEnabled:!Y&&G0(),cache1hMode:D0(),fastModeEnabled:t,identity:w});try{l(F,z,{body:JSON.parse(G),identity:w})}catch{l(F,z,{identity:w})}if(t)N0(F);I?.mark("rewrite_body",{route:v,ms:S(M()-b),originalBytes:q,rewrittenBytes:G.length,cacheEnabled:!Y&&G0(),cacheMode:D0(),fastModeEnabled:t,subagent:Y})}let R=D1(P);if(v==="main"&&typeof G==="string"&&!Y&&G0()&&D0()==="hybrid"){let b=await A();if((await D.track({sessionId:L,url:R.url?.toString()??R.input.toString(),headers:F,bodyText:G,storage:b,cacheMode:"hybrid"})).tracked)I?.mark("cachekeep_track",{session:L})}let T=()=>fetch(R.input,{...X,body:G,headers:F,...G1()&&{tls:{rejectUnauthorized:!1}}}),H=M(),o=await m1({config:B,input:R.input,init:X,headers:F,body:G,fallback:T,affinity:L,optimisticResponse:B?.transport==="websocket"});return I?.mark("send_headers_received",{route:v,ms:S(M()-H),status:o.status,relayConfigured:B!=null,totalSendWithAccessMs:S(M()-O)}),o}async function g0(P,X){let z=Date.now(),I=await A0({accessToken:P});return x={accessToken:P,refreshAfter:v1(I,X,z),quota:I},I}async function a1(P,X){let z=Date.now();if(x?.accessToken!==P)return await g0(P,X);if(z>=x.refreshAfter)t1(P,X);return x.quota}async function b0(P,X,z,I,v,O){if(!z.length)return v??null;await v?.body?.cancel().catch(()=>{});let F=v??null;for(let[L,Y]of z.entries()){let G=Y.access;if(!G)continue;let _=await k0(P,X,G,O,`fallback_${L}`);F=_;let w=H0(_.status,I);if(!w){let q=await y0(_,O);_=q.response,F=_,w=q.rateLimited}if(!w)return await K.markUsed(Y),_;if(L<z.length-1)await _.body?.cancel().catch(()=>{})}return F}async function r1(P,X,z,I,v,O){if(!T0(P,X?.body))return z;let F=M(),L=O??await A();v?.mark("fallback_load_storage",{ms:S(M()-F),cached:!!O});let Y=z,G=H0(Y.status,L);if(!G){let w=await y0(Y,v);Y=w.response,G=w.rateLimited}if(!G)return Y;let _=I;if(!_){let w=M();_=await K.getUsableFallbackAccounts(),v?.mark("fallback_get_accounts",{ms:S(M()-w),accounts:_.length})}return await b0(P,X,_,L,Y,v)??Y}return{apiKey:"",async fetch(P,X){let z=X?.body,I=Nj({bodyBytes:typeof z==="string"?z.length:void 0,relayConfigured:B!=null}),v=M(),O=await Z();if(I.mark("get_auth",{ms:S(M()-v),authType:O.type,hasAccess:Boolean(O.access)}),O.type!=="oauth"){let w=await fetch(P,X);return I.done("non_oauth_passthrough",{status:w.status}),w}if(await u(O.refresh),!O.access||!O.expires||O.expires<Date.now()){let q=(await A())?.refresh?.mainLastRefreshError;if(O.refresh&&q&&p(q,O.refresh,Date.now()))throw U("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:q.nextRetryAt,retryCount:q.retryCount,expiresInMs:O.expires?O.expires-Date.now():void 0}),Error(q0(q,Date.now()));U("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(O.access),expiresInMs:O.expires?O.expires-Date.now():void 0,expiredAgoMs:O.expires&&O.expires<Date.now()?Date.now()-O.expires:void 0});let R=M();O.access=await g(),I.mark("refresh_main_access",{ms:S(M()-R)})}if(!O.access)throw I.done("missing_access_error"),Error("OAuth access token is missing after refresh");let F=M(),L=await A();I.mark("load_storage",{ms:S(M()-F)});let Y;if(T0(P,X?.body)&&o1(L))try{let w=M(),q=await a1(O.access,L);if(I.mark("main_quota_for_routing",{ms:S(M()-w),passes:S0(q,L)}),!S0(q,L)){let R=M();Y=await K.getUsableFallbackAccounts(),I.mark("preselect_fallback_accounts",{ms:S(M()-R),accounts:Y.length});let T=await b0(P,X,Y,L,void 0,I);if(T)return I.done("return_preselected_fallback",{status:T.status}),_0(T)}}catch(w){I.mark("main_quota_for_routing_error",{error:w instanceof Error?w.message:String(w)})}let G=await k0(P,X,O.access,I,"main"),_=await r1(P,X,G,Y,I,L);return I.done("return_response",{status:_.status}),_0(_)}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let Z=await B0("max");return{url:Z.url,instructions:"Paste the authorization code here:",method:"code",callback:async(Q)=>{return M0(Q,Z.verifier,Z.redirectUri,Z.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let Z=await B0("console");return{url:Z.url,instructions:"Paste the authorization code here:",method:"code",callback:async(Q)=>{let W=await M0(Q,Z.verifier,Z.redirectUri,Z.state);if(W.type==="failed")return W;return{type:"success",key:(await fetch("https://api.anthropic.com/api/oauth/claude_cli/create_api_key",{method:"POST",headers:{"Content-Type":"application/json",authorization:`Bearer ${W.access}`}}).then((x)=>x.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}};export{qj as AnthropicAuthPlugin}; |
+2
-2
| { | ||
| "name": "@cortexkit/opencode-anthropic-auth", | ||
| "version": "1.2.2", | ||
| "version": "1.2.3", | ||
| "type": "module", | ||
@@ -44,4 +44,4 @@ "repository": { | ||
| "dependencies": { | ||
| "@cortexkit/anthropic-auth-core": "1.2.2" | ||
| "@cortexkit/anthropic-auth-core": "1.2.3" | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
130167
0.79%732
0.41%14
16.67%+ Added
- Removed