@cortexkit/opencode-openai-auth 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/bin.js +8 -8
  2. package/dist/{codex-request-CjXETpTA.d.ts → codex-request-hw0XcldE.d.ts} +146 -29
  3. package/dist/index-1eq2s1cp.js +2 -0
  4. package/dist/{index-qp5hdpw8.js → index-1tdnrt68.js} +1 -1
  5. package/dist/index-5230x6s8.js +2 -0
  6. package/dist/{index-qxbchh2d.js → index-ag04nyv7.js} +7 -7
  7. package/dist/index-brbqqer5.js +90 -0
  8. package/dist/{index-xwvze96g.js → index-d98f1xdp.js} +1 -1
  9. package/dist/index-jcyrm58f.js +65 -0
  10. package/dist/{index-htvcmtcx.js → index-rsvnabbe.js} +2 -2
  11. package/dist/{index-ftkhhr6d.js → index-s88n2bjn.js} +1 -1
  12. package/dist/{index-bc89akak.js → index-t5m0dhmq.js} +1 -1
  13. package/dist/index-vy729a0b.js +69 -0
  14. package/dist/index-wgwze391.js +2 -0
  15. package/dist/{index-ffg0sgg5.js → index-yhw3hnsh.js} +2 -2
  16. package/dist/index.d.ts +11 -3
  17. package/dist/index.js +1 -1
  18. package/dist/{model-CQcw10oW.d.ts → model-DphbMQce.d.ts} +1 -1
  19. package/dist/{port-file-BDJnzgHH.d.ts → port-file-Cx-wwe5Q.d.ts} +1 -1
  20. package/dist/{protocol-C-kagE6O.d.ts → protocol-CDqdjh74.d.ts} +1 -1
  21. package/dist/rpc/port-file.d.ts +1 -1
  22. package/dist/rpc/port-file.js +1 -1
  23. package/dist/rpc/protocol.d.ts +1 -1
  24. package/dist/rpc/protocol.js +1 -1
  25. package/dist/rpc/rpc-client.d.ts +3 -3
  26. package/dist/rpc/rpc-client.js +1 -1
  27. package/dist/rpc/rpc-dir.js +1 -1
  28. package/dist/{sidebar-state-BfQ4mpZO.d.ts → sidebar-state-pTd9gg9W.d.ts} +71 -7
  29. package/dist/sidebar-state.d.ts +2 -2
  30. package/dist/sidebar-state.js +1 -1
  31. package/dist/{token-z6qq7a1d.js → token-0z5g59p8.js} +1 -1
  32. package/dist/token-util-jf9g6stk.js +1 -0
  33. package/dist/tui-preferences.js +1 -1
  34. package/dist/tui.d.ts +30 -3
  35. package/dist/v2/server.d.ts +2 -2
  36. package/dist/v2/server.js +2 -2
  37. package/package.json +6 -6
  38. package/src/tui-compiled/raw/shared/0332701351b3eeec-format.js +119 -6
  39. package/src/tui-compiled/raw/shared/0f77ebc3c914c9c6-custody.js +294 -16
  40. package/src/tui-compiled/raw/shared/169b2b4bf30909bc-consumer.js +178 -26
  41. package/src/tui-compiled/raw/shared/2577ec69f9973ae9-quota-normalize.js +45 -1
  42. package/src/tui-compiled/raw/shared/30f5bc480f31f51c-roster.js +100 -43
  43. package/src/tui-compiled/raw/shared/375d9cca2def037d-private-files.js +10 -2
  44. package/src/tui-compiled/raw/shared/39c3cb05738fcf6d-projection.js +3 -1
  45. package/src/tui-compiled/raw/shared/42ae93ab554fcec2-open-url.js +7 -9
  46. package/src/tui-compiled/raw/shared/4825e03209d6ae3e-with-lock.js +2 -0
  47. package/src/tui-compiled/raw/shared/4f36d333d081d040-merge.js +17 -3
  48. package/src/tui-compiled/raw/shared/81dddd203f1b92a3-quota-writer.js +253 -0
  49. package/src/tui-compiled/raw/shared/905bffc0220f43d0-map.js +31 -6
  50. package/src/tui-compiled/raw/shared/94f53cfd572ba4bb-availability.js +106 -0
  51. package/src/tui-compiled/raw/shared/abd062d633e29fd2-pool-routing.js +116 -12
  52. package/src/tui-compiled/raw/shared/bfbdd0f9aae56b47-pool-quota.js +15 -3
  53. package/src/tui-compiled/raw/shared/d0f0b6be200311af-insula.js +348 -21
  54. package/src/tui-compiled/raw/shared/d5a8f1061ee2f114-index.js +2 -2
  55. package/src/tui-compiled/raw/shared/dbc61cd405941828-accounts.js +5 -4
  56. package/src/tui-compiled/raw/shared/dc9290c2a7552ba6-watch.js +254 -0
  57. package/src/tui-compiled/raw/shared/e8d3c8da776ef9cd-index.js +5 -1
  58. package/src/tui-compiled/raw/sidebar-state.js +32 -3
  59. package/src/tui-compiled/raw/tui/v2-dialog.js +2 -1
  60. package/src/tui-compiled/raw/tui.tsx +170 -26
  61. package/src/tui-compiled/runtime/shared/0332701351b3eeec-format.js +119 -6
  62. package/src/tui-compiled/runtime/shared/0f77ebc3c914c9c6-custody.js +294 -16
  63. package/src/tui-compiled/runtime/shared/169b2b4bf30909bc-consumer.js +178 -26
  64. package/src/tui-compiled/runtime/shared/2577ec69f9973ae9-quota-normalize.js +45 -1
  65. package/src/tui-compiled/runtime/shared/30f5bc480f31f51c-roster.js +100 -43
  66. package/src/tui-compiled/runtime/shared/375d9cca2def037d-private-files.js +10 -2
  67. package/src/tui-compiled/runtime/shared/39c3cb05738fcf6d-projection.js +3 -1
  68. package/src/tui-compiled/runtime/shared/42ae93ab554fcec2-open-url.js +7 -9
  69. package/src/tui-compiled/runtime/shared/4825e03209d6ae3e-with-lock.js +2 -0
  70. package/src/tui-compiled/runtime/shared/4f36d333d081d040-merge.js +17 -3
  71. package/src/tui-compiled/runtime/shared/81dddd203f1b92a3-quota-writer.js +253 -0
  72. package/src/tui-compiled/runtime/shared/905bffc0220f43d0-map.js +31 -6
  73. package/src/tui-compiled/runtime/shared/94f53cfd572ba4bb-availability.js +106 -0
  74. package/src/tui-compiled/runtime/shared/abd062d633e29fd2-pool-routing.js +116 -12
  75. package/src/tui-compiled/runtime/shared/bfbdd0f9aae56b47-pool-quota.js +15 -3
  76. package/src/tui-compiled/runtime/shared/d0f0b6be200311af-insula.js +348 -21
  77. package/src/tui-compiled/runtime/shared/d5a8f1061ee2f114-index.js +2 -2
  78. package/src/tui-compiled/runtime/shared/dbc61cd405941828-accounts.js +5 -4
  79. package/src/tui-compiled/runtime/shared/dc9290c2a7552ba6-watch.js +254 -0
  80. package/src/tui-compiled/runtime/shared/e8d3c8da776ef9cd-index.js +5 -1
  81. package/src/tui-compiled/runtime/sidebar-state.js +32 -3
  82. package/src/tui-compiled/runtime/tui/v2-dialog.js +2 -1
  83. package/src/tui-compiled/runtime/tui.js +350 -219
  84. package/dist/index-03em8hv1.js +0 -69
  85. package/dist/index-6n4pnfkg.js +0 -2
  86. package/dist/index-ehjj89rx.js +0 -2
  87. package/dist/index-f21addzm.js +0 -90
  88. package/dist/index-r2s51ac1.js +0 -2
  89. package/dist/index-rwbrhkse.js +0 -65
  90. package/dist/token-util-cf0nyh7n.js +0 -1
@@ -1,2 +0,0 @@
1
- import{Bc as g,Cc as WZ,Fc as d,_d as OZ,be as TZ,yc as NZ,zc as PZ}from"./index-f21addzm.js";import{je as XZ,ne as VZ,oe as YZ,pe as y,qe as b}from"./index-qxbchh2d.js";import{He as HZ}from"./index-ehjj89rx.js";import{Pe as I,Qe as $Z,Ue as A,Ve as JZ}from"./index-r2s51ac1.js";import{createHash as dZ}from"node:crypto";import{constants as lZ,copyFileSync as uZ,mkdirSync as rZ,statSync as cZ}from"node:fs";import{readFile as oZ}from"node:fs/promises";import{homedir as aZ,tmpdir as iZ}from"node:os";import{dirname as sZ,join as h}from"node:path";import{chmod as hZ,mkdir as mZ}from"node:fs/promises";import{dirname as ZZ}from"node:path";function k(Z){let{path:$,defaultValue:V,normalize:J}=Z,X=Promise.resolve(),Y=(K)=>{if(K==="")return V;try{return J(JSON.parse(K))}catch{return V}},G=async()=>{try{if(I)await A(ZZ($),Z.secureDir??!0);return await JZ($,I)}catch(K){if(K.code==="ENOENT")return"";throw K}},z=async()=>{try{return Y(await G())}catch(K){if(K instanceof $Z)throw K;return V}},U=(K,D)=>{let P=X.then(K).then((N)=>D?.onResult?.(N));return X=P.catch(()=>{}),P},B={...b.sidebar,name:Z.lockName??b.sidebar.name,timeoutMs:Z.timeoutMs??b.sidebar.timeoutMs},j=async(K,D,P)=>{await XZ($,D,{serialize:JSON.stringify,beforeRename:async()=>{await P?.beforeCommit?.(),await K.assertOwned()}}),await P?.afterRename?.();try{return await K.assertOwned(),!0}catch(N){if(N instanceof YZ)return!1;throw N}},Q=async(K,D,P)=>{Z.logger?.warn("sidebar lock lost after rename; repairing write",{path:$});try{let N=await y($,B,async(W)=>{let H=K(await z(),D);if(H===void 0)return"skipped";return await j(W,H,P)?"written":"lost-again"});if(N==="lost-again")Z.logger?.warn("sidebar repair lost its lock after rename",{path:$});return{status:"lost-after-rename",repair:N}}catch(N){if(!(N instanceof VZ))throw N;return Z.logger?.warn("sidebar repair lock unavailable; repair skipped",{path:$}),{status:"lost-after-rename",repair:"lock-unavailable"}}},L=async(K,D)=>{let P=D,N=ZZ($),W=Z.secureDir??!0;if(I)await A(N,W);else if(await mZ(N,{recursive:!0,mode:448}),W)await hZ(N,448).catch((F)=>{Z.logger?.warn("sidebar directory permission remediation failed",{error:F instanceof Error?F.message:String(F)})});let H=await y($,B,async(F)=>{let s=async(C)=>({value:C,held:await j(F,C,P)});for(let C=0;C<3;C+=1){let e=await G(),t=K(Y(e));if(t===void 0)return;if(C===0)await P?.beforeRecheck?.();if(await G()!==e)continue;return await s(t)}let n=K(await z());return n===void 0?void 0:await s(n)});if(H===void 0)return{status:"skipped"};if(H.held)return{status:"written"};let i=D?.repair??Z.repair;if(!i)return Z.logger?.warn("sidebar lock lost after rename; write not repaired",{path:$}),{status:"lost-after-rename",repair:"none"};return await Q(i,H.value,P)};return{read:z,write:(K,D)=>U(()=>L(()=>K,D),D),update:(K,D)=>U(()=>L(K,D),D)}}var l=["primary","secondary"],pZ={primary:300,secondary:10080};function gZ(Z,$){return NZ({scope:"all",label:$,windowMinutes:Z})}function x0(Z){if(!Z)return[];let $=[];for(let V of l){let J=Z[V];if(!J)continue;let X=J.windowMinutes,Y=X!==void 0&&Number.isFinite(X)&&X>0?X:pZ[V];$.push({key:V,label:gZ(X,V),window:J,windowMs:Y*60000})}return $}var M=HZ("sidebar"),nZ="OPENCODE_OPENAI_AUTH_SIDEBAR_STATE_FILE";function _Z(){let Z=process.env.XDG_STATE_HOME||h(aZ(),".local","state");return h(Z,"cortexkit","openai-auth","sidebar-state.json")}var RZ=h(iZ(),"opencode-openai-auth","sidebar-state.json");function k0(Z){RZ=Z,m.clear()}var eZ=/^[a-f0-9]{64}$/,u=604800000,CZ=256,FZ=3600000;function _(Z){return dZ("sha256").update(Z).digest("hex")}function tZ(Z){return typeof Z==="number"&&Number.isFinite(Z)&&Z>=0?Z:void 0}function MZ(Z){let $=tZ(Z);return $!==void 0?{resetCredits:$}:{}}function Z0(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return;let $={};for(let[V,J]of Object.entries(Z)){if(J===null||typeof J!=="object"||Array.isArray(J))continue;let X=J;if(typeof X.activeId!=="string"||typeof X.route!=="string"||typeof X.updatedAt!=="number"||!Number.isFinite(X.updatedAt))continue;$[V]={activeId:X.activeId,route:X.route,updatedAt:X.updatedAt}}return Object.keys($).length>0?$:void 0}function $0(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return;let $={};for(let[V,J]of Object.entries(Z)){if(!eZ.test(V)||J===null||typeof J!=="object"||Array.isArray(J))continue;let X=J;if(typeof X.accountId!=="string"||X.accountId.length===0||typeof X.assignedAt!=="number"||!Number.isFinite(X.assignedAt)||X.assignedAt<0||typeof X.lastSeenAt!=="number"||!Number.isFinite(X.lastSeenAt)||X.lastSeenAt<0||typeof X.inputBytes!=="number"||!Number.isFinite(X.inputBytes)||X.inputBytes<0)continue;let Y=X.quotaCheckedAt;if(Y!==void 0&&(typeof Y!=="number"||!Number.isFinite(Y)||Y<0))continue;let G=X.wireAccountId;$[V]={accountId:X.accountId,assignedAt:X.assignedAt,lastSeenAt:X.lastSeenAt,inputBytes:X.inputBytes,...Y===void 0?{}:{quotaCheckedAt:Y},...typeof G==="string"?{wireAccountId:G}:{}}}return Object.keys($).length>0?$:void 0}function O(){let Z=process.env[nZ];if(Z)return Z;let $=_Z();if(!m.has($))m.add($),J0($,RZ);return $}var m=new Set;function J0(Z,$){try{rZ(sZ(Z),{recursive:!0,mode:448}),uZ($,Z,lZ.COPYFILE_EXCL)}catch{}}var E={main:{quota:null,killed:!1},fallbacks:[],activeId:void 0,route:"main",lastUpdated:0};function f(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return E;let $=Z,V=$.main,J;if(V!==null&&typeof V==="object"&&!Array.isArray(V)){let K=V;J={quota:"quota"in K?K.quota:null,killed:typeof K.killed==="boolean"?K.killed:!1,...typeof K.mainAccountId==="string"?{mainAccountId:K.mainAccountId}:{},...typeof K.quotaBackedOff==="boolean"?{quotaBackedOff:K.quotaBackedOff}:{},...typeof K.quotaBackoffUntil==="number"?{quotaBackoffUntil:K.quotaBackoffUntil}:{},...typeof K.refreshBackedOff==="boolean"?{refreshBackedOff:K.refreshBackedOff}:{},...typeof K.refreshBackoffUntil==="number"?{refreshBackoffUntil:K.refreshBackoffUntil}:{},...MZ(K.resetCredits)}}else J={quota:null,killed:!1};let X=zZ($.fallbacks),Y=Array.isArray($.vaultAccounts)?zZ($.vaultAccounts):void 0,G=typeof $.activeId==="string"?$.activeId:void 0,z=typeof $.route==="string"?$.route:E.route,U=typeof $.lastUpdated==="number"?$.lastUpdated:0,B=typeof $.planType==="string"?$.planType:void 0,j=typeof $.credits==="number"?$.credits:void 0,Q=Z0($.activeRouting),L=$0($.stickyAssignments);return{main:J,fallbacks:X,activeId:G,route:z,lastUpdated:U,...Q!==void 0?{activeRouting:Q}:{},...L!==void 0?{stickyAssignments:L}:{},...B!==void 0?{planType:B}:{},...j!==void 0?{credits:j}:{},...$.accountPool===!0?{accountPool:!0}:{},...Y!==void 0?{vaultAccounts:Y}:{}}}function zZ(Z){if(!Array.isArray(Z))return[];return Z.filter(($)=>$!==null&&typeof $==="object"&&!Array.isArray($)&&typeof $.id==="string").map(($)=>({id:$.id,...typeof $.credentialId==="string"?{credentialId:$.credentialId}:{},label:typeof $.label==="string"?$.label:void 0,...typeof $.accountId==="string"?{accountId:$.accountId}:{},quota:"quota"in $?$.quota:null,killed:typeof $.killed==="boolean"?$.killed:!1,enabled:typeof $.enabled==="boolean"?$.enabled:!0,...typeof $.routable==="boolean"?{routable:$.routable}:{},...["needs sign-in","turned off in vault","unavailable"].includes($.vaultState)?{vaultState:$.vaultState}:{},...MZ($.resetCredits)}))}function r(Z){return[...Z.fallbacks,...Z.vaultAccounts??[]]}async function X0(Z=O()){try{let $=await oZ(Z,"utf8");return f(JSON.parse($))}catch{return E}}var V0=3600000,GZ=128;function qZ(Z,$,V=Date.now()){if(!(Z.updatedAt>=V-V0&&Z.updatedAt<=V))return!1;if($===void 0)return!0;return Z.activeId==="main"||$.some((X)=>X.enabled!==!1&&X.routable!==!1&&X.killed!==!0&&X.id===Z.activeId)}function Y0(Z,$=Date.now()){let V=Z?.spendControl;if(V?.reached!==!0||typeof V.resetsAt!=="string")return;let J=Date.parse(V.resetsAt);if(!Number.isFinite(J)||J<=$)return;return{resetsAt:V.resetsAt,resetAtMs:J}}function z0(Z,$=Date.now()){let V;for(let X of l){let Y=Z?.[X];if(typeof Y?.resetsAt!=="string"||!Number.isFinite(Y.usedPercent)||Y.usedPercent<100)continue;let G=Date.parse(Y.resetsAt);if(!Number.isFinite(G)||G<=$)continue;if(!V||G<V.resetAtMs)V={resetsAt:Y.resetsAt,resetAtMs:G}}let J=Y0(Z,$);if(J&&(!V||J.resetAtMs<V.resetAtMs))V=J;return V}function q(Z,$=Date.now()){return z0(Z,$)!==void 0}function G0(Z,$,V=Date.now()){if(!$||Z.route!=="sticky-balanced")return;let J=Z.stickyAssignments?.[_($)];if(!J||J.lastSeenAt<V-u)return;if(J.accountId==="main"&&Z.vaultAccounts===void 0)return Z.main?.killed||q(Z.main?.quota,V)?void 0:"main";let X=r(Z).find((Y)=>Y.id===J.accountId);if(!X||X.enabled===!1||X.routable===!1||X.killed===!0||q(X.quota,V))return;return X.id}function w0(Z,$,V=Date.now()){if(!$){if(Z.vaultAccounts===void 0)return{activeId:Z.activeId??"main",route:Z.route};let j=Z.vaultAccounts.find((Q)=>Q.id===Z.activeId&&Q.enabled&&Q.routable!==!1&&!Q.killed);if(j&&!q(j.quota,V))return{activeId:j.id,route:Z.route}}let J=$?Z.activeRouting?.[$]:void 0,X=r(Z),Y=J?.activeId==="main"?Z.main.quota:X.find((j)=>j.id===J?.activeId)?.quota;if(J&&(Z.vaultAccounts===void 0||J.activeId.startsWith("vault:"))&&qZ(J,X,V)&&!q(Y,V))return{activeId:J.activeId,route:J.route};let G=G0(Z,$,V);if(G)return{activeId:G,route:Z.route};let z=Z.vaultAccounts!==void 0,U=(z?c(Z):Z.fallbacks).filter((j)=>j.enabled&&j.routable!==!1&&!j.killed),B=U.find((j)=>!q(j.quota,V))??U[0];return{activeId:z?B?.id??"vault":Z.route==="fallback-first"&&B?B.id:"main",route:Z.route}}function c(Z){let $=Z.vaultAccounts??[],V=new Map($.map((J)=>[J.id,J]));return d($.map((J)=>J.id),wZ(Z),OZ($)??"").flatMap((J)=>{let X=V.get(J);return X?[X]:[]})}function EZ(Z,$,V=Date.now(),J){if(!Z)return;let X=Object.entries(Z).filter(([G,z])=>G!==J&&qZ(z,$,V)),Y=X.length<=GZ?X:X.sort((G,z)=>z[1].updatedAt-G[1].updatedAt).slice(0,GZ);return Y.length>0?Object.fromEntries(Y):void 0}function x(Z,$,V=Date.now(),J){if(!Z)return;let X=0,Y=0,G=0,z=[];for(let[B,j]of Object.entries(Z)){if(B===J){G+=1;continue}if(j.lastSeenAt<V-u){Y+=1;continue}if($!==void 0&&!$.has(j.accountId)){X+=1;continue}z.push([B,j])}let U=X+Y+G;if(U>0)M.debug("pruned sticky assignments",{pid:process.pid,removed:U,reasons:{"account-not-in-roster":X,expired:Y,"explicit-removal":G}});return z.length>0?Object.fromEntries(z):void 0}function xZ(Z,$){let V=Object.keys(Z).length-CZ;if(V<=0)return Z;let J=new Set(Object.entries(Z).filter(([X])=>X!==$).sort(([X,Y],[G,z])=>Y.lastSeenAt-z.lastSeenAt||X.localeCompare(G)).slice(0,V).map(([X])=>X));return Object.fromEntries(Object.entries(Z).filter(([X])=>!J.has(X)))}function IZ(Z,$){if(Z===$)return!0;if(!Z||!$)return!1;let V=Object.entries(Z);if(V.length!==Object.keys($).length)return!1;return V.every(([J,X])=>Object.is($[J],X))}function bZ(Z,$,V,J){return Z!==void 0&&$.has(Z.accountId)&&!V.has(Z.accountId)&&Z.lastSeenAt>=J-u}function vZ(Z,$,V,J){return $>Z.inputBytes||V-Z.lastSeenAt>=FZ||Z.wireAccountId===void 0&&J!==void 0}function SZ(Z,$){return typeof Z.wireAccountId==="string"&&typeof $==="string"&&Z.wireAccountId!==$}function K0(Z){let $=new Map(Z),V={get size(){return $.size},has:(J)=>$.has(J),get:(J)=>$.get(J),entries:()=>$.entries(),keys:()=>$.keys(),values:()=>$.values(),forEach:(J,X)=>{$.forEach((Y,G)=>{J.call(X,Y,G,V)})},[Symbol.iterator]:()=>$[Symbol.iterator]()};return Object.freeze(V)}function j0(Z,$,V){let J=new Map;for(let[X,Y]of Object.entries(Z??{})){if(X===V)continue;if(Y.quotaCheckedAt!==$[Y.accountId])continue;J.set(Y.accountId,(J.get(Y.accountId)??0)+Y.inputBytes)}return K0(J)}function o(Z){if(Z===void 0)return;return new Set(["main",...Z.filter(($)=>$.enabled!==!1&&$.killed!==!0).map(($)=>$.id)])}var p=Promise.resolve();function T(Z){let $=p.then(Z);return p=$.catch(()=>{}),$}var KZ=new Map;function a(Z){let $=KZ.get(Z);if(!$)$=k({path:Z,defaultValue:E,normalize:f,secureDir:Z===_Z(),logger:M}),KZ.set(Z,$);return $}var w=new Set;async function fZ(Z,$){try{await $}catch(V){let J={pid:process.pid,error:V instanceof Error?V.message:String(V)};if(w.has(Z))M.debug("sidebar write failed again",J);else w.add(Z),M.warn("sidebar write failed",J);throw V}if(w.delete(Z))M.info("sidebar write recovered",{pid:process.pid})}function h0(Z,$=O()){return T(()=>fZ($,a($).write(f(Z))))}function L0(Z){return a(Z).read()}function R(Z,$,V){let J=Symbol("sidebar authority changed");return fZ(Z,a(Z).update((X)=>{if(V?.canWrite&&!V.canWrite())return;let Y=$(X);if(Y===void 0)return;if(Y.vaultAccounts!==void 0)Y.activeId=Y.activeId?.startsWith("vault:")?Y.activeId:void 0,Y.activeRouting=Object.fromEntries(Object.entries(Y.activeRouting??{}).filter(([,G])=>G.activeId.startsWith("vault:"))),Y.stickyAssignments=Object.fromEntries(Object.entries(Y.stickyAssignments??{}).filter(([,G])=>G.accountId.startsWith("vault:")&&!Y.vaultAccounts?.some((z)=>z.id===G.accountId&&z.killed)));return f(Y)},{beforeRecheck:async(...X)=>{if(await V?.beforeRecheck?.(...X),V?.canWrite&&!V.canWrite())throw J}}).catch((X)=>{if(X!==J)throw X}))}function v(Z){let $;for(let V of[Z?.primary?.checkedAt,Z?.secondary?.checkedAt,Z?.checkedAt])if(typeof V==="number"&&Number.isFinite(V))$=$===void 0?V:Math.max($,V);return $}function jZ(Z,$){let V=v(Z),J=v($);if(J!==void 0&&(V===void 0||J>V))return $;return Z}function LZ(Z,$){return Z!==void 0&&$!==void 0&&Z===$}function S(Z,$){let V=Z?.checkedAt;if(typeof V==="number"&&Number.isFinite(V))return V;if(typeof $==="number"&&Number.isFinite($))return $;return}function BZ(Z,$,V,J,X){if(Z&&$){let Y=S(Z,J),G=S($,X);if(G!==void 0&&(Y===void 0||G>Y))return $;return Z}return V?$:Z}function UZ(Z,$){if(Z.spendControl!==void 0)return Z.spendControl;if(Z.spendControlCleared===!0)return;return $.spendControl}function QZ(Z,$){if(!Z)return $;if(!$)return Z;let V=v(Z),J=v($),X=J!==void 0&&(V===void 0||J>V),Y=BZ(Z.primary,$.primary,X,Z.checkedAt,$.checkedAt),G=BZ(Z.secondary,$.secondary,X,Z.checkedAt,$.checkedAt),z=X?UZ($,Z):UZ(Z,$),U=z===void 0&&(Z.spendControlCleared===!0||$.spendControlCleared===!0),B;for(let K of[S(Y),S(G)])if(K!==void 0)B=B===void 0?K:Math.max(B,K);let{spendControl:j,spendControlCleared:Q,...L}=Z;return{...L,primary:Y,secondary:G,...z!==void 0?{spendControl:z}:{},...U?{spendControlCleared:!0}:{},checkedAt:B??Z.checkedAt}}function m0(Z,$=O(),V){return T(async()=>{await R($,(J)=>{let X=new Map(J.fallbacks.map((j)=>[j.id,j])),Y=Z.vaultAccounts!==void 0,G=LZ(Z.main.mainAccountId,J.main.mainAccountId),z=G?QZ(Z.main.quota,J.main.quota):jZ(Z.main.quota,J.main.quota),U=Date.now(),B=x(J.stickyAssignments,Y?void 0:o(r(Z)),U);return{...J,...Z,main:Y?Z.main:{...Z.main,quota:z,mainAccountId:G?Z.main.mainAccountId:z===J.main.quota&&z!==Z.main.quota?J.main.mainAccountId:Z.main.mainAccountId},fallbacks:Y?Z.fallbacks:Z.fallbacks.map((j)=>{let Q=X.get(j.id),L=LZ(j.accountId,Q?.accountId),K=L?QZ(j.quota,Q?.quota??null):jZ(j.quota,Q?.quota??null);return{...j,quota:K,accountId:L?j.accountId:K===Q?.quota&&K!==j.quota?Q?.accountId:j.accountId}}),activeId:J.activeId,activeRouting:J.activeRouting,stickyAssignments:B,lastUpdated:Math.max(U,J.lastUpdated+1),accountPool:Z.accountPool===!0?!0:void 0,vaultAccounts:Z.vaultAccounts}},V)})}function p0(Z,$,V=O(),J){return T(async()=>{await R(V,(X)=>{let Y=EZ({...X.activeRouting,[Z.sessionId]:{activeId:Z.activeId,route:Z.route,updatedAt:Z.updatedAt}},$,Date.now()),G=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:o($),Date.now());return{...X,activeId:Z.activeId,route:Z.route,activeRouting:Y,stickyAssignments:G,lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}},J)})}function g0(Z,$=O(),V){return T(async()=>{await R($,(J)=>({...J,activeId:Z.activeId,route:Z.route,lastUpdated:Math.max(Date.now(),J.lastUpdated+1)}),V)})}function d0(Z,$,V=O(),J){return T(async()=>{await R(V,(X)=>{let Y=Date.now(),G=EZ(X.activeRouting,$,Y,Z),z=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:o($),Y,_(Z));return{...X,activeRouting:G,stickyAssignments:z,lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}},J)})}function AZ(Z,$){return bZ(Z,new Set($.validPinnedAccountIds),new Set($.excludeAccountIds),$.now)&&!SZ(Z,$.wireAccountIdByAccount?.[Z.accountId])&&!vZ(Z,$.requestBytes,$.now,$.wireAccountIdByAccount?.[Z.accountId])}function yZ(Z,$){let V=_($.sessionId),J=new Set($.validPinnedAccountIds),X=new Set($.excludeAccountIds),Y=x(Z.stickyAssignments,J,$.now),G=!IZ(Z.stickyAssignments,Y),z=Y?.[V],U=z!==void 0&&SZ(z,$.wireAccountIdByAccount?.[z.accountId]);if(bZ(z,J,X,$.now)&&!U){let Q=vZ(z,$.requestBytes,$.now,$.wireAccountIdByAccount?.[z.accountId]),L=Q?{...z,inputBytes:Math.max(z.inputBytes,$.requestBytes),...z.wireAccountId===void 0&&$.wireAccountIdByAccount?.[z.accountId]!==void 0?{wireAccountId:$.wireAccountIdByAccount?.[z.accountId]}:{},...$.now-z.lastSeenAt>=FZ?{lastSeenAt:$.now}:{}}:z;if(!G&&!Q)return{assignment:L,next:void 0};return{assignment:L,next:{...Z,stickyAssignments:{...Y,[V]:L},lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}let B=$.choose(j0(Y,$.quotaCheckedAtByAccount,U?V:void 0));if(!B){if(!G)return{assignment:void 0,next:void 0};return{assignment:void 0,next:{...Z,stickyAssignments:Y,lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}let j={accountId:B.accountId,assignedAt:$.now,lastSeenAt:$.now,inputBytes:$.requestBytes,...B.quotaCheckedAt===void 0?{}:{quotaCheckedAt:B.quotaCheckedAt},...$.wireAccountIdByAccount?.[B.accountId]===void 0?{}:{wireAccountId:$.wireAccountIdByAccount?.[B.accountId]}};return{assignment:j,next:{...Z,stickyAssignments:xZ({...Y,[V]:j},V),lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}async function l0(Z,$=O(),V){let J=_(Z.sessionId),X=(await L0($)).stickyAssignments?.[J];if(AZ(X,Z))return X;let Y;return await T(async()=>{await R($,(G)=>{let z=yZ(G,Z);return Y=z.assignment,z.next},V)}),Y}function u0(Z,$){let V=Z.stickyAssignments?.[_($.sessionId)];if(AZ(V,$))return{assignment:V,next:void 0};return yZ(Z,$)}function r0(Z,$=O()){let V=_(Z.sessionId),J=new Set(Z.validPinnedAccountIds);return T(async()=>{await R($,(X)=>{let Y=Date.now(),G=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:J,Y),z=G?.[V];if(z&&z.assignedAt>Z.assignment.assignedAt){if(IZ(X.stickyAssignments,G))return;return{...X,stickyAssignments:G,lastUpdated:Math.max(Y,X.lastUpdated+1)}}let B=z!==void 0&&z.accountId===Z.assignment.accountId&&z.assignedAt===Z.assignment.assignedAt?{...Z.assignment,inputBytes:Math.max(z.inputBytes,Z.assignment.inputBytes),lastSeenAt:Math.max(z.lastSeenAt,Z.assignment.lastSeenAt)}:Z.assignment;return{...X,stickyAssignments:xZ({...G,[V]:B},V),lastUpdated:Math.max(Y,X.lastUpdated+1)}})})}async function c0(Z,$=O()){let V=_(Z),J=!1;return await T(async()=>{await R($,(X)=>{let Y=X.stickyAssignments;if(Y?.[V]===void 0){J=!1;return}J=!0;let{[V]:G,...z}=Y;return{...X,...Object.keys(z).length>0?{stickyAssignments:z}:{stickyAssignments:void 0},lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}})}),J}function o0(){return p}var B0=500;function U0(Z,$,V){return new Promise((J,X)=>{let Y=setTimeout(()=>J(V()),$);Y.unref?.(),Z.then((G)=>{clearTimeout(Y),J(G)},(G)=>{clearTimeout(Y),X(G)})})}function a0(Z,$={}){let V=$.readBudgetMs??B0,J,X,Y=()=>{try{let z=cZ(Z);return`${z.ino}:${z.size}:${z.mtimeMs}`}catch{return}},G=(z)=>{if(X&&X.key===z)return X.promise;let U=Date.now(),B=X0(Z).then((L)=>{if(!J||J.readAt<=U)J={state:L,readAt:U,key:z};return{state:L,readAt:U}}),j={key:z,promise:B};X=j;let Q=()=>{if(X===j)X=void 0};return B.then(Q,Q),B};return{get(){let z=Y();if(J&&J.key===z)return Promise.resolve({state:J.state,readAt:J.readAt});return U0(G(z),V,()=>J?{state:J.state,readAt:J.readAt}:{state:E,readAt:0})},read(){return G(Y())},refreshInBackground(){let z=Y();if(J?.key===z)return;G(z)}}}function i0(Z,$,V){let J={assignment:V};Z.delete($),Z.set($,J);while(Z.size>CZ){let X=Z.keys().next().value;if(X===void 0)break;Z.delete(X)}return J}function s0(Z,$){if($.size===0)return Z.state;let V={...Z.state.stickyAssignments},J=!1;for(let[X,Y]of $){if(Y.persistedAt!==void 0&&Z.readAt>Y.persistedAt){$.delete(X);continue}V[X]=Y.assignment,J=!0}if(!J)return Z.state;return{...Z.state,stickyAssignments:V}}function n0(Z){let $=Z.retryDelayMs??500,V=Z.maxRetryDelayMs??30000,J=new Map,X=new Map,Y=new Set,G=0,z=$,U,B=!1,j=()=>{if(U||B||X.size===0)return;U=setTimeout(()=>{U=void 0;let L=[...X];X.clear(),z=Math.min(z*2,V);for(let[K,D]of L){let P=J.get(K);if(P!==void 0)Q(K,D.label,D.write,P)}},z),U.unref?.()},Q=(L,K,D,P)=>{let N;try{N=D()}catch(W){N=Promise.reject(W)}N.then(()=>{if(J.get(L)!==P)return;if(J.delete(L),Y.delete(L))Z.logger.info("sidebar bookkeeping write recovered",{pid:process.pid,write:K});if(Y.size===0)z=$;Z.onWritten?.()},(W)=>{if(J.get(L)!==P)return;let H={pid:process.pid,write:K,error:W instanceof Error?W.message:String(W)};if(B){J.delete(L),Z.logger.debug("sidebar bookkeeping write dropped",H);return}if(Y.has(L))Z.logger.debug("sidebar bookkeeping write failed again",H);else Y.add(L),Z.logger.warn("sidebar bookkeeping write failed; retrying in the background",H);X.set(L,{label:K,write:D}),j()})};return{enqueue(L,K,D){G+=1,J.set(L,G),X.delete(L),Q(L,K,D,G)},cancel(L){J.delete(L),X.delete(L),Y.delete(L)},stop(){if(B=!0,U)clearTimeout(U);U=void 0,X.clear()}}}function Q0(Z){let $=Z.activeId;if(Z.vaultAccounts!==void 0){let V=c(Z).filter((X)=>X.enabled&&X.routable!==!1),J=V.find((X)=>X.id===$)??V[0];return J?{id:J.id,name:J.label??J.id,quota:J.quota,killed:J.killed}:{id:"vault",name:"vault",quota:null,killed:!1}}if($&&$!=="main"){let V=Z.fallbacks.find((J)=>J.enabled&&J.id===$);if(V)return{id:V.id,name:V.label??V.id,quota:V.quota,killed:V.killed}}return{id:"main",name:"main",quota:Z.main.quota,killed:Z.main.killed}}function kZ(Z,$=Date.now()){if(!Z)return;return WZ({limits:l.flatMap((V)=>{let J=Z[V];return J?[{kind:"reading",scope:"all",label:V,usedPercent:J.usedPercent,checkedAt:J.checkedAt??Z.checkedAt??$,windowMinutes:J.windowMinutes,resetsAt:J.resetsAt}]:[]}),...Z.spendControl?{budget:{...Z.spendControl,kind:"reading",checkedAt:Z.checkedAt??$}}:{}})}function e0(Z,$=Date.now()){let V=Z?.primary?.usedPercent??null,J=Z?.secondary?.usedPercent??null,X=kZ(Z,$);return{primaryUsedPercent:V,secondaryUsedPercent:J,text:!X||X.limits.length===0&&!X.budget?null:g(X,{now:$,form:"compact"})}}function wZ(Z){return Z.route==="sticky-balanced"?"roster":TZ(Z.route)}function t0(Z,$={}){let V=$.now??Date.now(),J=Q0(Z).id;return(Z.vaultAccounts!==void 0?c(Z).map((Y)=>({id:Y.id,name:Y.label??Y.id,quota:Y.quota,killed:Y.killed})):D0(Z,J,$.showFallbacks??!0)).map((Y)=>{let G=kZ(Y.quota,V),z=G&&(G.limits.length>0||G.budget)?G:void 0;return{id:Y.id,name:Y.name,killed:Y.killed,active:Y.id===J,stale:z?PZ(z,{now:V}):!1,text:z?g(z,{now:V,form:"narrow"}):null}})}function D0(Z,$,V){let J=[{id:"main",name:"main",quota:Z.main.quota,killed:Z.main.killed},...Z.fallbacks.filter((Y)=>Y.enabled&&(V||Y.id===$)).map((Y)=>({id:Y.id,name:Y.label??Y.id,quota:Y.quota,killed:Y.killed}))],X=new Map(J.map((Y)=>[Y.id,Y]));return d(J.map((Y)=>Y.id),wZ(Z),"main").flatMap((Y)=>{let G=X.get(Y);return G?[G]:[]})}function DZ(Z){let $=globalThis.Bun;return $?.stringWidth?$.stringWidth(Z):Array.from(Z).length}function Z1(Z,$){if(DZ(Z)<=$)return Z;if($<1)return"";let V="",J=0;for(let X of Z){let Y=DZ(X);if(J+Y>$-1)break;V+=X,J+=Y}return`${V}…`}var N0=300000,P0=0.01,W0=1;function $1(Z,$,V){if(!Z.resetsAt)return null;let J=new Date(Z.resetsAt).getTime();if(!Number.isFinite(J))return null;let X=J-$,Y=V-X;if(Y<N0)return null;if(Y<$*P0)return null;if(Y>=$)return null;let G=Z.usedPercent,z=Math.min(Math.max(Y/$*100,0),100),U=G-z,B=Math.abs(U)<W0?"on-pace":U>0?"deficit":"reserve",j=null;if(G>0){let Q=Y*100/G,L=X+Q;if(L<J)j=new Date(L).toISOString()}return{pacePercent:z,deltaPercent:U,state:B,runsOutAt:j}}
2
- export{gZ as Fb,x0 as Gb,k0 as Hb,u as Ib,CZ as Jb,_ as Kb,O as Lb,E as Mb,f as Nb,X0 as Ob,V0 as Pb,GZ as Qb,qZ as Rb,Y0 as Sb,z0 as Tb,q as Ub,G0 as Vb,w0 as Wb,EZ as Xb,x as Yb,h0 as Zb,m0 as _b,p0 as $b,g0 as ac,d0 as bc,yZ as cc,l0 as dc,u0 as ec,r0 as fc,c0 as gc,o0 as hc,B0 as ic,U0 as jc,a0 as kc,i0 as lc,s0 as mc,n0 as nc,Q0 as oc,kZ as pc,e0 as qc,t0 as rc,DZ as sc,Z1 as tc,$1 as uc};
@@ -1,2 +0,0 @@
1
- import{Pe as q,Re as O,Te as A,Ue as y,We as p,Ye as k}from"./index-r2s51ac1.js";import{appendFileSync as QJ,chmodSync as UJ,existsSync as W,renameSync as g,statSync as ZJ}from"node:fs";import{open as $J}from"node:fs/promises";import{dirname as VJ,resolve as IJ}from"node:path";var i=/^(authorization|x-api-key|cookie|set-cookie|refresh|access|token)$/i,e=/\b(Bearer\s+[\w.-]+|sk-[\w-]+|eyJ[\w.-]+)\b|ckh_[A-Za-z0-9_-]{20,}/g;function JJ(J){return J instanceof Error||Object.prototype.toString.call(J)==="[object Error]"}function T(J={}){let H=[e,...J.extraValuePatterns??[]].map((G)=>new RegExp(G.source,G.flags.includes("g")?G.flags:`${G.flags}g`));function Z(G){let U=G.toLowerCase().replace(/[-_]/g,"");return i.test(G)||U.includes("apikey")||U.endsWith("secret")||U.endsWith("password")||U.endsWith("token")&&!U.endsWith("tokens")||!!J.extraSecretKeys?.(U)}function I(G){let U=G,$=[["name",G.name],["message",G.message],["stack",G.stack]];for(let j of["code","status","cause"])if(U[j]!==void 0)$.push([j,U[j]]);let Y=new Set($.map(([j])=>j));for(let j of Object.entries(G))if(!Y.has(j[0]))$.push(j);return $}function B(G,U,$,Y=0){if(typeof G==="string")return H.reduce((j,C)=>j.replace(C,"***REDACTED***"),G);if(!G||typeof G!=="object")return G;if($.has(G))return"[Circular]";$.add(G);try{if(Array.isArray(G))return G.map((N)=>B(N,U,$,Y));let j=JJ(G);if(j&&Y>=8)return"[Truncated]";let C=j?Y+1:Y;return Object.fromEntries((j?I(G):Object.entries(G)).map(([N,z])=>[N,U&&Z(N)?"***REDACTED***":B(z,U,$,C)]))}finally{$.delete(G)}}return{redact:(G)=>B(G,!0,new WeakSet),redactStrings:(G)=>B(G,!1,new WeakSet)}}var F=T(),GJ=F.redact,HJ=F.redactStrings;var D={error:0,warn:1,info:2,debug:3,trace:4},h=5242880,m=3;function b(J){try{UJ(J,384)}catch{}}function jJ(J){try{if(!(W(J)&&ZJ(J).size>=h))return;for(let Z=m-1;Z>=1;Z--)if(W(`${J}.${Z}`)){let I=`${J}.${Z+1}`;g(`${J}.${Z}`,I),b(I)}let H=`${J}.1`;g(J,H),b(H)}catch{}}async function M(J){let{file:H,handle:Z}=J;if(J.file=void 0,J.handle=void 0,H&&Z)await O(H,"log-close",()=>Z.close())}async function w(J,H){await y(VJ(H));try{await A(H,"file",!0)}catch(Z){if(Z.code!=="ENOENT")throw Z;try{await p(H,"")}catch(I){if(I.code!=="EEXIST")throw I;await A(H,"file",!0)}}return J.handle=await O(H,"log-open",()=>$J(H,"a")),J.file=H,J.handle}async function XJ(J,H,Z){H=IJ(H);try{if(J.file!==H)await M(J);let I=J.handle??await w(J,H);if((await O(H,"log-stat",()=>I.stat())).size>=h){await M(J);for(let G=m-1;G>=0;G--){let U=G===0?H:`${H}.${G}`,$=`${H}.${G+1}`;try{await A(U,"file",!0)}catch(Y){if(Y.code==="ENOENT")continue;throw Y}try{await A($,"file",!0)}catch(Y){if(Y.code!=="ENOENT")throw Y}await k(U,$),await A($,"file")}I=await w(J,H)}await O(H,"log-append",()=>I.appendFile(Z,"utf8"))}catch(I){throw await M(J).catch(()=>{}),I}}function YJ(J){try{return` ${JSON.stringify(J)}`}catch{return" [unserializable]"}}function BJ(J){let H,Z,I,B=T(),G,U=[],$,Y=Promise.resolve(),j,C={};function N(Q){let V=Y.then(Q);return Y=V.catch((X)=>{j=X}),V}function z(Q){if(q&&Q.file!==H)N(()=>M(C)).catch(()=>{});H=Q.file,Z=Q.level,B=T(Q),G=Q.captureSink}function s(Q){if(Q===void 0||Q in D)I=Q}function o(){if(H===void 0)return;return(typeof H==="function"?H():H)||void 0}function t(){if(I)return I;let Q=typeof Z==="function"?Z():Z;if(Q&&Q in D)return Q;return"info"}function R(Q=!0){if($)clearTimeout($),$=void 0;if(!U.length){if(q)return N(async()=>{if(Q)await M(C);if(j)throw j});return}let V;try{V=o()}catch{if(U=[],q&&Q)return N(()=>M(C));return}let X=U.join("");if(U=[],!V){if(q&&Q)return N(()=>M(C));return}if(q)return N(async()=>{try{await XJ(C,V,X)}finally{if(Q)await M(C)}});try{if(jJ(V),W(V))b(V);QJ(V,X,{encoding:"utf8",mode:384})}catch{}}function a(){if(!$)$=setTimeout(()=>{$=void 0;let Q=R(!1);if(Q instanceof Promise)Q.catch(()=>{})},500)}function _(Q,V,X,P){if(H===void 0&&G===void 0)return;try{if(D[V]>D[t()])return;let S=B.redactStrings(X),K;try{K=B.redact(P)}catch{K="[unserializable]"}let r=`[${new Date().toISOString()}] ${V.toUpperCase()} [${Q}] ${S}`+(P===void 0?"":YJ(K))+`
2
- `;try{G?.({channel:Q,level:V,message:S,data:K})}catch{}if(H===void 0)return;if(U.push(r),U.length>=50){let E=R(!1);if(E instanceof Promise)E.catch(()=>{})}else a()}catch{}}function n(Q){return{error:(V,X)=>_(Q,"error",V,X),warn:(V,X)=>_(Q,"warn",V,X),info:(V,X)=>_(Q,"info",V,X),debug:(V,X)=>_(Q,"debug",V,X),trace:(V,X)=>_(Q,"trace",V,X)}}function l(){if(q)N(()=>M(C)).catch(()=>{});if(j=void 0,U=[],$)clearTimeout($),$=void 0;H=void 0,Z=void 0,I=void 0,B=T(),G=void 0}if(J)z(J);return{configure:z,createLogger:n,setLogLevel:s,flushLogs:R,reset:l}}var x=BJ();function L(J){x.configure(J);let{configure:H,createLogger:Z,setLogLevel:I,flushLogs:B}=x;return{configure:H,createLogger:Z,setLogLevel:I,flushLogs:B}}function v(J){x.setLogLevel(J)}function u(){return x.flushLogs()}function c(J){return x.createLogger(J)}function f(J){return J==="chatgptaccountid"||J==="email"||J==="orgname"||J==="organizationname"}var d=T({extraSecretKeys:f}),kJ=d.redact,hJ=d.redactStrings;function mJ(J){L({...J,extraSecretKeys:f})}function cJ(J){if(J instanceof Error)return J.message;if(typeof J==="string")return J;try{return JSON.stringify(J)}catch{return String(J)}}function dJ(J){return"notify"in J}import{basename as MJ,dirname as TJ,join as qJ}from"node:path";var AJ="openai-auth.json",_J="openai-auth-state.json";function tJ(J){return MJ(J)===AJ?qJ(TJ(J),_J):`${J}.state.json`}import{execFileSync as OJ,spawn as xJ}from"node:child_process";function lJ(J,H=process.platform,Z=OJ,I=xJ){try{if(H==="win32"){let B=`Start-Process '${J.replaceAll("'","''")}'`,G=Buffer.from(B,"utf16le").toString("base64"),U=I("powershell.exe",["-NoProfile","-NonInteractive","-WindowStyle","Hidden","-EncodedCommand",G],{stdio:"ignore",windowsHide:!0});return U.on("error",()=>{}),U.unref(),U.pid!==void 0}return Z(H==="darwin"?"open":"xdg-open",[J],{stdio:"ignore",timeout:3000}),!0}catch{return!1}}export{T as De,GJ as Ee,v as Fe,u as Ge,c as He,hJ as Ie,mJ as Je,AJ as Ke,tJ as Le,cJ as Me,dJ as Ne,lJ as Oe};
@@ -1,90 +0,0 @@
1
- import{je as y,me as E,pe as A3}from"./index-qxbchh2d.js";import{Ge as H3,He as I,Je as P1,Me as l$}from"./index-ehjj89rx.js";import{Pe as XZ,Qe as C3,Se as D$,Ue as l3,Ve as oZ,Ze as F$}from"./index-r2s51ac1.js";var P="all",D3=Object.freeze(["primary"]);function q6(Z){return Z.kind==="retired"?Z.retiredAt:Z.checkedAt}function WZ(Z,$){return JSON.stringify([Z,$])}function a(Z){return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)}function R(Z){return typeof Z==="number"&&Number.isFinite(Z)}function _6(Z){return typeof Z==="string"&&Z.length>0}function C(Z,$,z){return Z[$]===void 0||z(Z[$])}function R1(Z){return R(Z)&&Z>0}function U3(Z){return typeof Z==="string"}function T1(Z){if(!a(Z)||!_6(Z.scope)||!_6(Z.label))return!1;switch(Z.kind){case"reading":return R(Z.checkedAt)&&R(Z.usedPercent)&&C(Z,"resetsAt",U3)&&C(Z,"windowMinutes",R1);case"retired":return R(Z.retiredAt);case"absent":return R(Z.checkedAt);default:return!1}}function E1(Z){if(!a(Z)||!R(Z.checkedAt))return!1;if(Z.kind==="cleared")return!0;return Z.kind==="reading"&&typeof Z.reached==="boolean"&&C(Z,"remainingPercent",R)&&C(Z,"usedPercent",R)&&C(Z,"resetsAt",U3)&&C(Z,"limit",R)&&C(Z,"used",R)&&C(Z,"remaining",R)&&C(Z,"unit",U3)}function O6(Z){return a(Z)&&R(Z.value)&&Number.isInteger(Z.value)&&Z.value>=0&&R(Z.checkedAt)}function F3(Z){return a(Z)&&Object.values(Z).every(O6)}function N3(Z){if(!a(Z))return;let $=Object.entries(Z).filter(([,z])=>O6(z));return $.length===0?void 0:Object.fromEntries($)}function o(Z){if(n(Z))return Z;if(!a(Z))return;let{counters:$,...z}=Z;if(!n(z))return;let X=N3($);return{...z,...X===void 0?{}:{counters:X}}}function n(Z){if(!a(Z)||!Array.isArray(Z.limits))return!1;let $=new Set;for(let z of Z.limits){if(!T1(z))return!1;let X=WZ(z.scope,z.label);if($.has(X))return!1;$.add(X)}return C(Z,"budget",E1)&&C(Z,"counters",F3)}var R6=900000,T6="no quota reading yet",E6="no limits reported";function x6(Z){let $=Math.max(1,Math.floor(Z/60000));if($<60)return`${$}m`;if($<1440){let Y=Math.floor($/60),G=$%60;return G===0?`${Y}h`:`${Y}h${G}m`}let z=Math.floor($/1440),X=Math.floor($%1440/60);return X===0?`${z}d`:`${z}d${X}h`}function x1(Z){if(Z%1440===0)return`${Z/1440}d`;if(Z%60===0)return`${Z/60}h`;return`${Z}m`}function C6(Z){if(Z.scope!==P||Z.windowMinutes===void 0)return Z.label;return x1(Z.windowMinutes)}function j3(Z){return Math.min(100,Math.max(0,Z))}function M3(Z){return Math.round(j3(Z))}function P6(Z){return`${M3(Z)}% left`}function L6(Z,$,z){let X=Z===void 0?Number.NaN:Date.parse(Z);return{...Number.isFinite(X)&&X>z?{resetIn:x6(X-z)}:{},resetSinceReading:Number.isFinite(X)&&X>$&&X<=z}}function C1(Z,$){let z=Z.windowMinutes,X=$.windowMinutes;if(z!==void 0&&X!==void 0&&z!==X)return z-X;if(z===void 0!==(X===void 0))return z===void 0?1:-1;if(Z.scope!==$.scope){if(Z.scope===P)return-1;if($.scope===P)return 1;return Z.scope<$.scope?-1:1}return Z.label<$.label?-1:Z.label>$.label?1:0}function A6(Z,$){let{windows:z,age:X}=_3(Z,$),Y=z.map(({part:G})=>G);return X===void 0?{windows:Y}:{windows:Y,age:X}}function _3(Z,$){if(!Z)return{windows:[]};let{now:z}=$,Y=Z.limits.filter((B)=>B.kind==="reading"&&B.remainingPercent!==void 0).sort(C1).map((B)=>{let J=j3(B.remainingPercent??0);return{scope:B.scope,part:{kind:"window",name:C6(B),figure:P6(B.remainingPercent??0),remainingPercent:J,checkedAt:B.checkedAt,...L6(B.resetsAt,B.checkedAt,z)}}}),G=Z.budget;if(G){let B=G.remainingPercent,J=G.reached?"credits spent":B!==void 0?`credits ${P6(B)}`:"credits available";Y.push({scope:P,spent:G.reached,part:{kind:"budget",name:"credits",figure:J,...B===void 0?{}:{remainingPercent:j3(B)},checkedAt:G.checkedAt,...L6(G.resetsAt,G.checkedAt,z)}})}if(Y.length>0){let B=z-Math.min(...Y.map(({part:J})=>J.checkedAt));if(B>($.staleAfterMs??R6))return{windows:Y,age:`checked ${x6(B)} ago`}}return{windows:Y}}function A1(Z,$){return _3(Z,$).age!==void 0}function S6(Z){let $=Z.slice(Z.indexOf(":")+1);return $.charAt(0).toUpperCase()+$.slice(1)}function b1(Z){let $=[...new Set(Z.map(S6))],z=new Map($.map((Y)=>[Y,2])),X=(Y)=>Y.slice(0,z.get(Y));for(;;){let Y=new Map;for(let B of $)Y.set(X(B),[...Y.get(X(B))??[],B]);let G=!1;for(let B of Y.values()){if(B.length<2)continue;for(let J of B){let H=z.get(J)??2;if(H<J.length)z.set(J,H+1),G=!0}}if(!G)break}return new Map(Z.map((Y)=>[Y,X(S6(Y))]))}function I1(Z,$){let{windows:z}=_3(Z,$),X=z.filter(({part:V,scope:U})=>V.kind==="window"&&U===P),Y=z.filter(({part:V,scope:U})=>V.kind==="window"&&U!==P),G=b1(Y.map(({scope:V})=>V)),B=z.find(({part:V})=>V.kind==="budget"),J=B?.spent?0:B?.part.remainingPercent,W=[...Y.map(({scope:V,part:U})=>({label:G.get(V)??V,remaining:U.remainingPercent??0})),...J===void 0?[]:[{label:"cr",remaining:J}]].reduce((V,U)=>V===void 0||U.remaining<V.remaining?U:V,void 0),Q=X.map(({part:V})=>`${V.name} ${M3(V.remainingPercent??0)}%`);if(W)Q.push(`${W.label} ${M3(W.remaining)}%`);if(Q.length===0)return z.map(({part:V})=>V.figure);return Q.map((V,U)=>U===Q.length-1?`${V} left`:V)}function b6(Z,$){if($.form==="narrow")return I1(Z,$);let z=A6(Z,$),X=($.form??"full")==="full",Y=z.windows.map((G)=>{let B=X&&G.resetIn?`, resets ${G.resetIn}`:"";return`${G.kind==="budget"?"":`${G.name} `}${G.figure}${B}`});return z.age===void 0?Y:[...Y,z.age]}function k1(Z,$){let z=b6(Z,$);if(z.length>0)return z.join(" · ");return Z&&Z.limits.length>0?E6:T6}function f1(Z){if(Z.kind==="retired")return{scope:Z.scope,label:Z.label,kind:"retired",checkedAt:Z.retiredAt};if(Z.kind==="absent")return{scope:Z.scope,label:Z.label,kind:"absent",checkedAt:Z.checkedAt};return{scope:Z.scope,label:Z.label,kind:"reading",checkedAt:Z.checkedAt,usedPercent:Z.usedPercent,remainingPercent:100-Z.usedPercent,...Z.windowMinutes===void 0?{}:{windowMinutes:Z.windowMinutes},...Z.resetsAt===void 0?{}:{resetsAt:Z.resetsAt}}}function y1(Z,$){let z=Z.windowMinutes!==void 0,X=$.windowMinutes!==void 0;if(z!==X)return z?-1:1;if(z&&X&&Z.windowMinutes!==$.windowMinutes)return($.windowMinutes??0)-(Z.windowMinutes??0);if(Z.label!==$.label)return Z.label<$.label?-1:1;return 0}function w1(Z){return{checkedAt:Z.checkedAt,reached:Z.reached,...Z.remainingPercent===void 0?{}:{remainingPercent:Z.remainingPercent},...Z.resetsAt===void 0?{}:{resetsAt:Z.resetsAt}}}function b(Z,$=P){let z=new Map;for(let W of Z?.limits??[]){if(W.scope!==$&&W.scope!==P)continue;let Q=z.get(W.label);if(Q===void 0){z.set(W.label,W);continue}let V=W.scope===P?Q:W,U=W.scope===P?W:Q;z.set(W.label,V.kind==="reading"?V:U)}let X=[...z.values()].map(f1).sort(y1),Y=X.filter((W)=>W.kind==="reading"),G=Y.length>0?Y:X,B=G.length>0?Math.min(...G.map((W)=>W.checkedAt)):void 0,J=Z?.budget?.kind==="reading"?w1(Z.budget):void 0,H=N3(Z?.counters);return{scope:$,limits:X,...B===void 0?{}:{checkedAt:B},...J===void 0?{}:{budget:J},...H===void 0?{}:{counters:H}}}function NZ(Z,$){let z=Z?.budget;if(z?.reached!==!0||typeof z.resetsAt!=="string")return;let X=Date.parse(z.resetsAt);if(!Number.isFinite(X)||X<=$)return;return{resetsAt:z.resetsAt,resetAtMs:X}}function q3(Z){return Z.kind==="reading"&&typeof Z.usedPercent==="number"&&Number.isFinite(Z.usedPercent)&&Z.usedPercent>=100}function fZ(Z,$){if(typeof Z.resetsAt!=="string")return;let z=Date.parse(Z.resetsAt);return Number.isFinite(z)&&z>$?z:void 0}class yZ extends TypeError{constructor(Z){super(Z);this.name="QuotaCodecError"}}function hZ(Z){return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)}function wZ(Z){return typeof Z==="number"&&Number.isFinite(Z)}function I6(Z){return Z===void 0||typeof Z==="string"&&Z!==""}function k6(Z){return typeof Z==="string"&&Z!==""}function jZ(Z,$){return Z[$]===void 0||wZ(Z[$])}function O3(Z,$){return Z[$]===void 0||typeof Z[$]==="string"}function h1(Z){return hZ(Z)&&I6(Z.scope)&&k6(Z.label)&&wZ(Z.usedPercent)&&O3(Z,"resetsAt")&&(Z.windowMinutes===void 0||wZ(Z.windowMinutes)&&Z.windowMinutes>0)}function m1(Z){return hZ(Z)&&I6(Z.scope)&&k6(Z.label)}function v1(Z){if(!hZ(Z))return!1;if(Z.kind==="cleared")return!0;return Z.kind==="reading"&&typeof Z.reached==="boolean"&&jZ(Z,"remainingPercent")&&jZ(Z,"usedPercent")&&O3(Z,"resetsAt")&&jZ(Z,"limit")&&jZ(Z,"used")&&jZ(Z,"remaining")&&O3(Z,"unit")}function f6(Z){if(!hZ(Z)||!wZ(Z.checkedAt))return!1;let $=Z.readings??[],z=Z.coverage??[];if(!Array.isArray($)||!Array.isArray(z))return!1;let X=new Set;for(let Y of $){if(!h1(Y))return!1;let G=WZ(Y.scope??P,Y.label);if(X.has(G))return!1;X.add(G)}if(!z.every(m1))return!1;return(Z.budget===void 0||v1(Z.budget))&&(Z.counters===void 0||F3(Z.counters))}function g1(Z,$){if(Z.scope!==$.scope)return Z.scope<$.scope?-1:1;if(Z.label!==$.label)return Z.label<$.label?-1:1;return 0}function p1(Z,$,z){if($===void 0)return Z;if(Z!==void 0&&z<Z.checkedAt)return Z;return{...$,checkedAt:z}}function l1(Z,$){let z=new Map(Object.entries(Z??{}));for(let[X,Y]of Object.entries($??{})){let G=z.get(X);if(G===void 0||Y.checkedAt>=G.checkedAt)z.set(X,Y)}return z.size===0?void 0:Object.fromEntries(z)}function KZ(Z,$){let z=Z===void 0?void 0:o(Z);if(Z!==void 0&&z===void 0)throw new yZ("stored quota map is malformed");if(!f6($))throw new yZ("quota observation is malformed");let X=z??{limits:[]},Y=$.checkedAt,G=new Map;for(let K of X.limits)G.set(WZ(K.scope,K.label),K);let B=(K)=>{let M=G.get(K);return M===void 0||Y>=q6(M)},J=new Set;for(let K of $.readings??[]){let M=K.scope??P,O=WZ(M,K.label);if(J.add(O),!B(O))continue;G.set(O,{scope:M,label:K.label,kind:"reading",checkedAt:Y,usedPercent:K.usedPercent,...K.resetsAt===void 0?{}:{resetsAt:K.resetsAt},...K.windowMinutes===void 0?{}:{windowMinutes:K.windowMinutes}})}for(let K of $.coverage??[]){let M=K.scope??P,O=WZ(M,K.label);if(J.has(O)||!B(O))continue;let L=G.get(O);G.set(O,L===void 0||L.kind==="absent"?{scope:M,label:K.label,kind:"absent",checkedAt:Y}:{scope:M,label:K.label,kind:"retired",retiredAt:Y})}let{limits:H,budget:W,counters:Q,...V}=X,U=p1(X.budget,$.budget,Y),j=l1(X.counters,$.counters);return{...V,limits:[...G.values()].sort(g1),...U===void 0?{}:{budget:U},...j===void 0?{}:{counters:j}}}var d1=Object.freeze({validate:n,decode:o,merge:KZ});function y6(Z,$,z){let X=$.rateLimitMarks?.get(Z);if(X!==void 0&&z<X)return{id:Z,reason:"rate-limited",until:X};let Y=$.refreshBackoff?.get(Z);if(Y!==void 0&&z<Y)return{id:Z,reason:"refresh-backoff",until:Y};return}function c1(Z,$,z,X){if($.limits.length===0)return{id:Z,stage:1,gate:2,reason:"needs-first-reading",pullRequested:!0};for(let G of z)if(!$.limits.some((B)=>B.label===G))return{id:Z,stage:1,gate:3,reason:"unknown-window",window:{scope:$.scope,label:G},pullRequested:!0};let Y=$.limits.filter(q3);for(let G of Y)if(fZ(G,X)===void 0)return{id:Z,stage:1,gate:4,reason:"unknown-reset",window:{scope:G.scope,label:G.label},pullRequested:!0};for(let G of Y){let B=fZ(G,X);if(B!==void 0&&typeof G.resetsAt==="string")return{id:Z,stage:1,gate:5,reason:"exhausted",window:{scope:G.scope,label:G.label},resetsAt:G.resetsAt,resetAtMs:B}}return}function f(Z){let $=Z.scope??P,z=Z.requiredLabels??D3,X=[],Y=[],G=[];for(let U of Z.rows){let j=y6(U.id,Z,Z.now);if(j){X.push(j);continue}if(U.kind==="api-key"){G.push({id:U.id,kind:U.kind});continue}let K=b(U.quota,$),M=c1(U.id,K,z,Z.now);if(M){Y.push(M);continue}G.push({id:U.id,kind:U.kind,projection:K})}let B=new Map(G.flatMap((U)=>{let j=NZ(U.projection,Z.now);return j?[[U.id,j]]:[]})),J=B.size>0&&B.size===G.length,H=[];for(let U of G){let j=B.get(U.id);if(j===void 0)H.push(U);else if(J)H.push({...U,lastPath:!0});else Y.push({id:U.id,stage:2,reason:"budget-spent",...j})}let W=new Map(Z.rows.map((U,j)=>[U.id,j])),Q=(U,j)=>(W.get(U.id)??0)-(W.get(j.id)??0);Y.sort(Q);let V=Y.filter((U)=>("pullRequested"in U)).map((U)=>U.id);for(let U of V)Z.requestPull?.(U);return{admitted:H,refused:Y,excluded:X,pulls:V}}var w6="main";function u1(Z){switch(Z){case"sticky-balanced":return{mode:"sticky-balanced",placement:"roster"};case"main-first":return{mode:"ordered",placement:"main-first"};case"fallback-first":return{mode:"ordered",placement:"fallback-first"};default:return{mode:"ordered",placement:"roster"}}}function mZ(Z,$,z=w6){if($==="roster"||!Z.includes(z))return[...Z];let X=Z.filter((Y)=>Y!==z);return $==="main-first"?[z,...X]:[...X,z]}function P3(Z){let $=f(Z),z=new Set($.admitted.map((Y)=>Y.id));return{order:mZ(Z.rows.map((Y)=>Y.id),Z.placement??"roster",Z.formerMainId).filter((Y)=>z.has(Y)&&Z.killswitch?.get(Y)!==!1),admission:$}}function i1(Z,$,z){let X=$.at(-1);if(X!==void 0){if(X.status===void 0||!z.includes(X.status))return}let Y=new Set($.map((G)=>G.id));return Z.find((G)=>!Y.has(G))}function L3(Z,$,z){if(!$.has(Z.accountId))return!1;return!(typeof Z.wireIdentity==="string"&&typeof z==="string"&&Z.wireIdentity!==z)}function s1(Z,$,z){let X=new Map;for(let[Y,G]of Z){if(Y===z)continue;if(G.quotaCheckedAt!==$.get(G.accountId))continue;X.set(G.accountId,(X.get(G.accountId)??0)+(G.inputBytes??0))}return X}var T3=900000,m6=0.016666666666666666,S3=0.000001;function vZ(Z,$){for(let z of[Z?.checkedAt,$])if(typeof z==="number"&&Number.isFinite(z))return z;return}function v6(Z){if(Z===401||Z===403)return"permanent";if(Z===void 0||Z===0||!Number.isFinite(Z)||Z>=500&&Z<=599||Z===429)return"transient";return"healthy"}function g6(Z){return Z.limits.filter(($)=>$.kind==="reading").sort(($,z)=>{let X=$.windowMinutes!==void 0,Y=z.windowMinutes!==void 0;if(X!==Y)return X?-1:1;if(X&&Y)return(z.windowMinutes??0)-($.windowMinutes??0);return 0})}function E3(Z){let $=(Z.classifyStatus??v6)(Z.status);if($==="permanent")return{action:"migrate",reason:"permanent"};if(!Z.quota)return{action:"retain",reason:"unknown"};let z=vZ(Z.quota,Z.quotaCheckedAt);if(z===void 0||!Number.isFinite(z)||Z.now-z>T3)return{action:"retain",reason:"stale"};if(Z.killswitchPasses===!1)return{action:"migrate",reason:"killswitch"};for(let Y of g6(Z.quota)){let G=Y.remainingPercent;if(typeof G==="number"&&Number.isFinite(G)&&G<=0)return{action:"migrate",reason:"exhausted",window:{scope:Y.scope,label:Y.label},...typeof Y.resetsAt==="string"?{resetsAt:Y.resetsAt}:{}}}let X=NZ(Z.quota,Z.now);if(X)return{action:"migrate",reason:"exhausted",resetsAt:X.resetsAt};return{action:"retain",reason:$}}function R3(Z,$,z){let X=Math.max(0,Z.remainingPercent-$);if(X<=0)return 0;if(!Z.resetsAt)return X;let Y=Date.parse(Z.resetsAt);if(!Number.isFinite(Y)||Y<=z)return X;let G=Math.max((Y-z)/3600000,m6);return X/G}function h6(Z,$){if(Z<$)return-1;if(Z>$)return 1;return 0}function n1(Z,$){if(!Z.quota)return;let z=vZ(Z.quota,Z.quotaCheckedAt);if(z===void 0||$-z>T3)return;let X=g6(Z.quota).map((B)=>R3({remainingPercent:B.remainingPercent??Number.NaN,...B.resetsAt===void 0?{}:{resetsAt:B.resetsAt}},Z.reservePercent[B.label]??0,$)),Y=Z.quota.budget;if(Y&&typeof Y.remainingPercent==="number"&&Number.isFinite(Y.remainingPercent))X.push(R3({remainingPercent:Y.remainingPercent,...Y.resetsAt===void 0?{}:{resetsAt:Y.resetsAt}},0,$));let G=X.length>0?Math.min(...X):0;return G>0?{candidate:Z,quotaCheckedAt:z,weight:G}:void 0}function p6(Z){let $=Z.candidates.filter((Y)=>Y.killswitchPasses!==!1);if(Z.candidates.length===0)throw Error("Cannot select a sticky candidate: input.candidates is empty");if($.length===0)return;let z=$.map((Y)=>n1(Y,Z.now)).filter((Y)=>Y!==void 0);if(z.length>0){z.sort((G,B)=>{let J=((Z.pendingBytes.get(G.candidate.accountId)??0)+Z.requestBytes)/Math.max(G.weight,S3),H=((Z.pendingBytes.get(B.candidate.accountId)??0)+Z.requestBytes)/Math.max(B.weight,S3);return J-H||G.candidate.configuredOrder-B.candidate.configuredOrder||h6(G.candidate.accountId,B.candidate.accountId)});let Y=z[0];if(Y)return{accountId:Y.candidate.accountId,quotaCheckedAt:Y.quotaCheckedAt,source:"weighted"}}Z.onEmptyWeightedSet?.();let X=[...$].sort((Y,G)=>{let B=(Y.resetCreditsApplicable??0)>0?1:0;return((G.resetCreditsApplicable??0)>0?1:0)-B||Y.configuredOrder-G.configuredOrder||h6(Y.accountId,G.accountId)})[0];if(!X)throw Error("Cannot select a sticky candidate: input.candidates is empty");return{accountId:X.accountId,quotaCheckedAt:vZ(X.quota,X.quotaCheckedAt),source:"mode-fallback"}}function x3(Z){let $=f(Z),z=new Map($.admitted.map((K)=>[K.id,K])),X=new Map($.refused.map((K)=>[K.id,K])),Y=new Set($.excluded.map((K)=>K.id)),G=new Set(Z.rows.map((K)=>K.id)),B=Z.pin!==void 0&&L3(Z.pin,G,Z.identities?.get(Z.pin.accountId));if(B&&Z.pin){let K=z.get(Z.pin.accountId);if(K&&Z.killswitch?.get(K.id)!==!1)return{outcome:"dispatch",accountId:K.id,source:"pin",...K.projection?.checkedAt===void 0?{}:{quotaCheckedAt:K.projection.checkedAt},pin:{action:"retain"},refusedSelections:[],admission:$}}let J=Z.pin?X.get(Z.pin.accountId):void 0,H=B&&Z.pin!==void 0&&Z.refusedPinPolicy==="move-on-confirmed-exhaustion"&&(Z.killswitch?.get(Z.pin.accountId)===!1||J?.reason==="exhausted"||J?.reason==="budget-spent"),W=(K)=>{return(typeof Z.rowReservePercent==="function"?Z.rowReservePercent(K):Z.rowReservePercent?.get(K.id))??Z.reservePercent??{}},Q=Z.scope,V=Z.rows.map((K,M)=>({row:K,configuredOrder:M})).filter(({row:K})=>!Y.has(K.id)).map(({row:K,configuredOrder:M})=>{let O=Z.killswitch?.get(K.id),L=Z.resetCreditsApplicable?.get(K.id);return{accountId:K.id,quota:K.kind==="api-key"?void 0:z.get(K.id)?.projection??b(K.quota,Q),reservePercent:W(K),configuredOrder:M,...L===void 0?{}:{resetCreditsApplicable:L},...O===void 0?{}:{killswitchPasses:O}}}),U=[],j=B?{action:"retain"}:Z.pin?{action:"clear"}:{action:"none"};while(V.length>0){let K=p6({candidates:V,pendingBytes:Z.pendingBytes??new Map,requestBytes:Z.requestBytes,now:Z.now,...Z.onEmptyWeightedSet?{onEmptyWeightedSet:Z.onEmptyWeightedSet}:{}});if(!K)break;let M=X.get(K.accountId);if(M){U.push(M),V=V.filter((L)=>L.accountId!==K.accountId);continue}let O=Z.identities?.get(K.accountId);return{outcome:"dispatch",accountId:K.accountId,source:K.source,...K.quotaCheckedAt===void 0?{}:{quotaCheckedAt:K.quotaCheckedAt},pin:B&&!H?{action:"retain"}:{action:"assign",pin:{accountId:K.accountId,inputBytes:Z.requestBytes,...O===void 0?{}:{wireIdentity:O},...K.quotaCheckedAt===void 0?{}:{quotaCheckedAt:K.quotaCheckedAt}}},refusedSelections:U,admission:$}}return{outcome:"no-admissible-account",pin:j,refusedSelections:U,admission:$}}import{createHash as a1}from"node:crypto";var o1=86400000,r1=300000,t1=3600000,e1=60000,Z8=900000,$8=300000;function b3(Z){return Z instanceof Error?Z.message:String(Z)}function z8(Z){let $=Z?.status;if(typeof $==="number")return $===429||$>=500;if(!(Z instanceof Error))return!1;return Z.name==="AbortError"||Z.name==="TimeoutError"||Z.message.includes("fetch failed")||"code"in Z&&(Z.code==="ECONNRESET"||Z.code==="ECONNREFUSED"||Z.code==="ETIMEDOUT"||Z.code==="UND_ERR_CONNECT_TIMEOUT")}function I3(Z){let $=b3(Z),z=Z?.status;if(typeof z==="number")return z===429||z>=500;if(!(Z instanceof Error))return!1;let X=Z.code;return Z.name==="AbortError"||Z.name==="TimeoutError"||$.includes("fetch failed")||X==="ECONNRESET"||X==="ECONNREFUSED"||X==="ETIMEDOUT"||X==="UND_ERR_CONNECT_TIMEOUT"}function l6(Z){return a1("sha256").update(Z).digest("hex")}function d6(Z){let $=l6(Z.refreshToken),X=(Z.previous?.tokenHash===$?Z.previous.retryCount??0:0)+1,Y,G=Z.error?.retryAfter;if(typeof G==="number"&&G>0)Y=G*1000;else if(z8(Z.error))Y=Math.min(t1,r1*2**Math.min(X-1,6));else Y=o1;return{message:b3(Z.error),checkedAt:Z.now,nextRetryAt:Z.now+Y,retryCount:X,tokenHash:$}}function r(Z,$,z){if(!Z?.nextRetryAt||Z.nextRetryAt<=z)return!1;if(!$)return!0;return Z.tokenHash===l6($)}function gZ(Z,$){return`Codex OAuth refresh is backed off for ${Math.max(1,Math.ceil(((Z.nextRetryAt??$)-$)/1000))}s after: ${Z.message}`}function MZ(Z){let z=(Z.previous?.retryCount??0)+1,X,Y=Z.error?.retryAfter;if(typeof Y==="number"&&Y>0)X=Y*1000;else if(I3(Z.error))X=Math.min(Z8,e1*2**Math.min(z-1,6));else X=$8;return{message:b3(Z.error),checkedAt:Z.now,nextRetryAt:Z.now+X,retryCount:z}}function QZ(Z,$){if(!Z?.nextRetryAt||Z.nextRetryAt<=$)return!1;return!0}function k3(Z){if(!Z)return;let $=Number(Z);if(Number.isFinite($)&&$>0)return Math.ceil($);let z=Date.parse(Z);if(Number.isFinite(z)){let X=Math.ceil((z-Date.now())/1000);return X>0?X:void 0}return}import{createServer as c6}from"node:http";import{setTimeout as X8}from"node:timers/promises";var cZ="app_EMoamEEZ73f0CkXaXp7hrann",ZZ="https://auth.openai.com",qZ=1455,Y8=3000,G8="cortexkit-opencode-openai-auth";function n6(Z){return`${G8}/${Z}`}var a6="main",B8=`"${a6}" is a reserved account id; choose a different label.`;function o6(Z){let $=new Uint8Array(Z),z=String.fromCharCode(...$);return btoa(z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function J8(){let $=Array.from(crypto.getRandomValues(new Uint8Array(43))).map((X)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"[X%66]).join(""),z=o6(await crypto.subtle.digest("SHA-256",new TextEncoder().encode($)));return{verifier:$,challenge:z}}function u6(Z){if(Z.length>16384)return;let $=Z.split(".");if($.length!==3)return;let z=$[1];if(!z||z.length>8192)return;try{return JSON.parse(Buffer.from(z,"base64url").toString())}catch{return}}function i6(Z){let $=Z.chatgpt_account_id;if(typeof $==="string"&&$.length>0)return $;let z=Z["https://api.openai.com/auth"];if(z&&typeof z==="object"&&!Array.isArray(z)&&typeof z.chatgpt_account_id==="string"&&z.chatgpt_account_id.length>0)return z.chatgpt_account_id;let X=Z.organizations;if(Array.isArray(X)){let Y=X[0];if(Y&&typeof Y==="object"&&!Array.isArray(Y)&&typeof Y.id==="string"&&Y.id.length>0)return Y.id}return}function lZ(Z){if(Z.id_token){let $=u6(Z.id_token),z=$&&i6($);if(z)return z}if(Z.access_token){let $=u6(Z.access_token);return $?i6($):void 0}return}function H8(Z){return typeof Z==="string"&&Z.toLowerCase()===a6}function f3(Z){if(H8(Z))throw Error(B8);return Z}function W8(Z,$,z){let X=new URLSearchParams({response_type:"code",client_id:cZ,redirect_uri:Z,scope:"openid profile email offline_access",code_challenge:$.challenge,code_challenge_method:"S256",id_token_add_organizations:"true",codex_cli_simplified_flow:"true",state:z,originator:"opencode"});return`${ZZ}/oauth/authorize?${X.toString()}`}async function K8(Z,$,z){let X=await fetch(`${ZZ}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:Z,redirect_uri:$,client_id:cZ,code_verifier:z.verifier}).toString()});if(!X.ok)throw Error(`Token exchange failed: ${X.status}`);return await X.json()}function Q8(Z){return Z.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}var V8=`<!doctype html>
2
- <html>
3
- <head>
4
- <title>CortexKit OpenAI Auth - Authorization Successful</title>
5
- <style>
6
- body {
7
- font-family:
8
- system-ui,
9
- -apple-system,
10
- sans-serif;
11
- display: flex;
12
- justify-content: center;
13
- align-items: center;
14
- height: 100vh;
15
- margin: 0;
16
- background: #131010;
17
- color: #f1ecec;
18
- }
19
- .container {
20
- text-align: center;
21
- padding: 2rem;
22
- }
23
- h1 {
24
- color: #f1ecec;
25
- margin-bottom: 1rem;
26
- }
27
- p {
28
- color: #b7b1b1;
29
- }
30
- </style>
31
- </head>
32
- <body>
33
- <div class="container">
34
- <h1>Authorization Successful</h1>
35
- <p>You can close this window and return to OpenCode.</p>
36
- </div>
37
- <script>
38
- setTimeout(() => window.close(), 2000)
39
- </script>
40
- </body>
41
- </html>`,pZ=(Z)=>`<!doctype html>
42
- <html>
43
- <head>
44
- <title>CortexKit OpenAI Auth - Authorization Failed</title>
45
- <style>
46
- body {
47
- font-family:
48
- system-ui,
49
- -apple-system,
50
- sans-serif;
51
- display: flex;
52
- justify-content: center;
53
- align-items: center;
54
- height: 100vh;
55
- margin: 0;
56
- background: #131010;
57
- color: #f1ecec;
58
- }
59
- .container {
60
- text-align: center;
61
- padding: 2rem;
62
- }
63
- h1 {
64
- color: #fc533a;
65
- margin-bottom: 1rem;
66
- }
67
- p {
68
- color: #b7b1b1;
69
- }
70
- .error {
71
- color: #ff917b;
72
- font-family: monospace;
73
- margin-top: 1rem;
74
- padding: 1rem;
75
- background: #3c140d;
76
- border-radius: 0.5rem;
77
- }
78
- </style>
79
- </head>
80
- <body>
81
- <div class="container">
82
- <h1>Authorization Failed</h1>
83
- <p>An error occurred during authorization.</p>
84
- <div class="error">${Q8(Z)}</div>
85
- </div>
86
- </body>
87
- </html>`,dZ=[],_Z,w=new Map;function s6(Z,$){return new Promise((z,X)=>{let Y=(B)=>{Z.off("listening",G),X(B)},G=()=>{Z.off("error",Y),z()};Z.once("error",Y),Z.once("listening",G),Z.listen(qZ,$)})}function r6(Z){Z.close(()=>{}),Z.closeIdleConnections?.(),setTimeout(()=>{Z.closeAllConnections?.()},25).unref?.()}function t(){return w.size}function $Z(Z){if(w.delete(Z),t()===0)e()}async function U8(){let Z=`http://localhost:${qZ}/auth/callback`;if(dZ.length>0)return{port:qZ,redirectUri:Z};if(_Z)return _Z;_Z=(async()=>{let $=(G,B)=>{let J=new URL(G.url||"/",`http://127.0.0.1:${qZ}`);if(J.pathname==="/auth/callback"){let H=J.searchParams.get("code"),W=J.searchParams.get("state"),Q=J.searchParams.get("error"),V=J.searchParams.get("error_description");if(Q){let j=V||Q;if(W){let K=w.get(W);if(K)K.reject(Error(j)),$Z(W);else if(t()===0)e()}else if(t()===0)e();B.writeHead(200,{"Content-Type":"text/html"}),B.end(pZ(j));return}if(!W){if(t()===0)e();B.writeHead(400,{"Content-Type":"text/html"}),B.end(pZ("Missing state parameter"));return}if(!H){if(t()===0)e();B.writeHead(400,{"Content-Type":"text/html"}),B.end(pZ("Missing authorization code"));return}let U=w.get(W);if(!U){if(t()===0)e();B.writeHead(400,{"Content-Type":"text/html"}),B.end(pZ("Unknown state — authorization may have expired"));return}$Z(W),K8(H,Z,U.pkce).then((j)=>U.resolve(j)).catch((j)=>U.reject(j)),B.writeHead(200,{"Content-Type":"text/html"}),B.end(V8);return}if(J.pathname==="/cancel"){let H=J.searchParams.get("state"),W=H?[H]:[...w.keys()];B.writeHead(200),B.end("Login cancelled");for(let Q of W){let V=w.get(Q);if(!V)continue;V.reject(Error("Login cancelled")),$Z(Q)}if(t()===0)e();return}B.writeHead(404),B.end("Not found")},z=c6($);await s6(z,"127.0.0.1");let X=[z],Y=c6($);try{await s6(Y,"::1"),X.push(Y)}catch(G){let B=G.code;if(B!=="EADDRNOTAVAIL"&&B!=="EAFNOSUPPORT")throw r6(z),G}return dZ=X,{port:qZ,redirectUri:Z}})();try{return await _Z}finally{_Z=void 0}}function e(){let Z=dZ;dZ=[];for(let $ of Z)r6($)}function D8(Z,$,z=300000,X){return new Promise((Y,G)=>{if(X?.aborted){$Z($),G(Error("Login cancelled"));return}let B=setTimeout(()=>{if(w.get($))$Z($),G(Error("OAuth callback timeout — authorization took too long"))},z),J=()=>{if(clearTimeout(B),w.get($))$Z($),G(Error("Login cancelled"))};if(X)X.addEventListener("abort",J);w.set($,{pkce:Z,state:$,resolve:(H)=>{if(clearTimeout(B),X)X.removeEventListener("abort",J);Y(H)},reject:(H)=>{if(clearTimeout(B),X)X.removeEventListener("abort",J);G(H)}})})}async function F8(Z){let $=await fetch(`${ZZ}/api/accounts/deviceauth/usercode`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":n6(Z)},body:JSON.stringify({client_id:cZ})});if(!$.ok)throw Error("Failed to initiate device authorization");let z=await $.json();return{deviceData:z,url:`${ZZ}/codex/device`,instructions:`Enter code: ${z.user_code}`}}async function N8(Z,$,z){let X=Math.max(parseInt(Z.interval,10)||5,1)*1000,Y=typeof Z.expires_in==="number"?Z.expires_in:parseInt(Z.expires_in||"",10),G=!Number.isNaN(Y)&&Y>0?Y*1000:900000,B=Date.now();while(!0){if(z?.aborted)throw Error("Device authorization cancelled");if(Date.now()-B>G)throw Error("Device authorization expired");let J=await fetch(`${ZZ}/api/accounts/deviceauth/token`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":n6($)},body:JSON.stringify({device_auth_id:Z.device_auth_id,user_code:Z.user_code})});if(J.ok){let Q=await J.json(),V=await fetch(`${ZZ}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",code:Q.authorization_code,redirect_uri:`${ZZ}/deviceauth/callback`,client_id:cZ,code_verifier:Q.code_verifier}).toString()});if(!V.ok)throw Error(`Token exchange failed: ${V.status}`);return await V.json()}if(J.status!==403&&J.status!==404)throw Error(`Device authorization failed: ${J.status}`);let H=G-(Date.now()-B);if(H<=0)throw Error("Device authorization expired");let W=Math.min(X+Y8,H);try{await X8(W,void 0,{signal:z})}catch(Q){if(Q instanceof Error&&Q.name==="AbortError")throw Error("Device authorization cancelled");throw Q}}}async function G0(Z){let{label:$,headless:z=!1,signal:X,version:Y}=Z;if(f3($),z){let{deviceData:Q,url:V,instructions:U}=await F8(Y),j=(async()=>{let K=await N8(Q,Y,X),M=Date.now(),O=lZ(K);return{id:f3($||O||crypto.randomUUID()),label:$||void 0,type:"oauth",access:K.access_token,refresh:K.refresh_token,expires:M+(K.expires_in??3600)*1000,enabled:!0,addedAt:M,lastUsed:M,lastRefreshedAt:M,accountId:O}})();return{url:V,instructions:U,completion:j}}let{redirectUri:G}=await U8(),B=await J8(),J=o6(crypto.getRandomValues(new Uint8Array(32)).buffer),H=W8(G,B,J),W=(async()=>{try{if(X?.aborted)throw Error("Login cancelled");let Q=await D8(B,J,void 0,X),V=Date.now(),U=lZ(Q);return{id:f3($||U||crypto.randomUUID()),label:$||void 0,type:"oauth",access:Q.access_token,refresh:Q.refresh_token,expires:V+(Q.expires_in??3600)*1000,enabled:!0,addedAt:V,lastUsed:V,lastRefreshedAt:V,accountId:U}}finally{$Z(J)}})();return{url:H,instructions:"Complete authorization in your browser. This window will close automatically.",completion:W}}function uZ(Z){if(Z==null||Z==="")return;let $=typeof Z==="number"?Z:Number(Z);if(Number.isFinite($)){let X=$<100000000000?$*1000:$,Y=new Date(X);return Number.isNaN(Y.getTime())?void 0:Y.toISOString()}let z=new Date(Z);return Number.isNaN(z.getTime())?void 0:z.toISOString()}function y3(Z){let $=Number(Z);return Number.isFinite($)&&$>0?$:void 0}function t6(Z){return typeof Z==="number"&&Number.isFinite(Z)&&Z>=0?Z:void 0}function e6(Z,$){let z=Z.get($);if(z===null||z.trim()==="")return;let X=Number(z);if(!Number.isFinite(X)||X<0||X>100)return;let Y=$.slice(0,-13),G=y3(Z.get(`${Y}-window-minutes`)),B=uZ(Z.get(`${Y}-reset-at`)??void 0);if(X===0&&Z.get(`${Y}-window-minutes`)==="0"&&!B)return;return{usedPercent:X,remainingPercent:100-X,resetsAt:B,checkedAt:Date.now(),...G!==void 0?{windowMinutes:G}:{}}}var z$=["x-codex-primary-used-percent","x-codex-secondary-used-percent"];function X$(Z,$){let z=Z.get($);if(z===null)return"absent";if(z.trim()==="")return"invalid";let X=Number(z);return Number.isFinite(X)&&X>=0&&X<=100?"valid":"invalid"}function J0(Z){if(z$.some((Y)=>X$(Z,Y)==="invalid"))return{};let $={},z=e6(Z,"x-codex-primary-used-percent");if(z)$.primary=z;let X=e6(Z,"x-codex-secondary-used-percent");if(X)$.secondary=X;return $}function H0(Z){let $=z$.map((z)=>X$(Z,z));return $.includes("valid")&&!$.includes("invalid")}function Z$(Z){if(!Z)return;if(!Number.isFinite(Z.used_percent)||Z.used_percent<0||Z.used_percent>100)return;let $=y3(Z.window_minutes),z=uZ(Z.reset_at);if(Z.used_percent===0&&$===void 0&&!z)return;return{usedPercent:Z.used_percent,remainingPercent:100-Z.used_percent,resetsAt:z,checkedAt:Date.now(),...$!==void 0?{windowMinutes:$}:{}}}function W0(Z){let $={},z=Z$(Z.rate_limits?.primary);if(z)$.primary=z;let X=Z$(Z.rate_limits?.secondary);if(X)$.secondary=X;return $}function VZ(Z){if(Z==null||Z==="")return;let $=Number(Z);return Number.isFinite($)&&$>=0?$:void 0}function $$(Z){if(!Z)return;if(!Number.isFinite(Z.used_percent)||Z.used_percent<0||Z.used_percent>100)return;let $=y3(Z.limit_window_seconds),z=uZ(Z.reset_at);if(Z.used_percent===0&&$===void 0&&!z)return;return{usedPercent:Z.used_percent,remainingPercent:100-Z.used_percent,resetsAt:z,checkedAt:Date.now(),...$!==void 0?{windowMinutes:$/60}:{}}}function Y$(Z){let $={},z=$$(Z.rate_limit?.primary_window);if(z)$.primary=z;let X=$$(Z.rate_limit?.secondary_window);if(X)$.secondary=X;let Y=t6(Z.rate_limit_reset_credits?.available_count);if(Y!==void 0)$.resetCreditsAvailable=Y;let G=t6(Z.rate_limit_reset_credits?.applicable_available_count);if(G!==void 0)$.resetCreditsApplicable=G;let B=Z.spend_control?.individual_limit;if(Z.spend_control===null||B===null)$.spendControlCleared=!0;if(B&&typeof Z.spend_control?.reached==="boolean"){let H=VZ(B.limit),W=VZ(B.used),Q=VZ(B.remaining),V=VZ(B.used_percent),U=VZ(B.remaining_percent);if(H!==void 0&&W!==void 0&&Q!==void 0&&V!==void 0&&U!==void 0)$.spendControl={limit:H,used:W,remaining:Q,usedPercent:V,remainingPercent:U,resetsAt:uZ(B.reset_at),unit:B.unit,source:B.source,reached:Z.spend_control.reached}}let J=Z.credits;if(J&&typeof J.has_credits==="boolean"&&typeof J.unlimited==="boolean"&&typeof J.overage_limit_reached==="boolean"){let H=VZ(J.balance);$.credits={hasCredits:J.has_credits,unlimited:J.unlimited,overageLimitReached:J.overage_limit_reached,...H!==void 0?{balance:H}:{}}}return $}import{ClaustrumClient as Z4}from"@cortexkit/claustrum-client";import{resolve as G$}from"node:path";import{storeIdentity as j8}from"@cortexkit/claustrum-client";import{SubcClient as M8}from"@cortexkit/subc-client";function B$(Z){let $=Z.identity??j8(Z.projectRoot??process.cwd(),Z.storagePath??process.cwd());return{connectionFile:Z.connectionFile,async getUsage(){let z,X=!1,Y,G=new Promise((J,H)=>{Y=setTimeout(()=>H(Error("insula usage timeout")),3000),Y.unref?.()}),B=(async()=>{if(z=Z.connector?await Z.connector({connectionFile:Z.connectionFile,handshakeTimeoutMs:Math.min(Z.handshakeTimeoutMs??3000,3000)}):await M8.connect({connectionFile:Z.connectionFile,handshakeTimeoutMs:Math.min(Z.handshakeTimeoutMs??3000,3000)}),X)throw z.close(),Error("insula usage timeout");let J=await z.routeOpen({kind:"management_surface",module_id:"insula"},$);return await z.request(J,{method:"usage.get",params:{}})})();try{return await Promise.race([B,G])}finally{X=!0,clearTimeout(Y),z?.close()}}}}var m3=60000,_8=4*m3,w3=new Map,iZ=new Map;function h3(Z){return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)}class J${transport;key;#Z=[];#$;constructor(Z,$){this.transport=Z,this.key=$}refresh(Z){if(this.#$)return this.#$;for(let[z,X]of iZ)if(Z-X>=m3)iZ.delete(z);let $=iZ.get(this.key);if($!==void 0&&Z-$<m3)return Promise.resolve();return iZ.set(this.key,Z),this.#$=(async()=>{try{let z=await this.transport.getUsage();if(!h3(z)||!Array.isArray(z.result)||z.error!==void 0)throw Error("unavailable insula usage");this.#Z=z.result.filter((X)=>h3(X)&&typeof X.provider==="string")}catch{this.#Z=[]}})().finally(()=>{this.#$=void 0}),this.#$}current(Z,$,z){for(let X of this.#Z){if(X.provider!==Z||typeof X.account!=="string"||X.account.trim()!==$)continue;if(X.stale!==void 0||X.errorClass!==void 0||!h3(X.usage))continue;let Y=typeof X.fetchedAt==="string"?Date.parse(X.fetchedAt):Number.NaN;if(!Number.isFinite(Y)||z-Y>=_8)continue;return{entry:X,context:{fetchedAt:Y,...typeof X.source==="string"&&{source:X.source}}}}return}}function H$(Z,$){let z=JSON.stringify([G$(Z.connectionFile),G$($)]),X=w3.get(z);if(!X)X={source:new J$(Z,z),refs:0},w3.set(z,X);X.refs++;let Y=!1;return{source:X.source,release(){if(Y)return;if(Y=!0,--X.refs===0)w3.delete(z)}}}import{ClaustrumCredentialError as G2}from"@cortexkit/claustrum-client";function v3(Z){let $=new AbortController,z=[],X=!1,Y=()=>{if(X)return;X=!0;for(let{source:J,listener:H}of z)J.removeEventListener("abort",H);z.length=0},G=(J)=>{if(X||$.signal.aborted)return;$.abort(J),Y()},B=Z.find((J)=>J.aborted);if(B)return $.abort(B.reason),{signal:$.signal,dispose:Y};for(let J of Z){if($.signal.aborted)break;let H=()=>G(J.reason);if(z.push({source:J,listener:H}),J.addEventListener("abort",H,{once:!0}),J.aborted)G(J.reason)}return{signal:$.signal,dispose:Y}}import{ClaustrumCredentialError as v8}from"@cortexkit/claustrum-client";import{createHash as q8,randomBytes as O8,randomUUID as P8}from"node:crypto";import{constants as W$}from"node:fs";import{chmod as L8,mkdir as S8,open as N$,readFile as g3,realpath as R8,rename as T8,stat as j$,unlink as M$}from"node:fs/promises";import{basename as _$,dirname as p,extname as K$,isAbsolute as Q$,join as d3,resolve as E8}from"node:path";import{ClaustrumCredentialError as x8,ClaustrumClient as C8,writeEnrollmentTokenFile as A8}from"@cortexkit/claustrum-client";class F extends Error{kind;constructor(Z,$){super($);this.name="ClaustrumConsumerError",this.kind=Z}}var b8=1,nZ=16384,q$=30000,c3=/^[0-9a-f]{64}$/,O$=new Set(["invalid_params","pending_exists","not_found","already_consumed","superseded","stale_generation"]),P$=new Set(["pending_queue_full"]);function p3(Z){if(!(Z instanceof x8))return;if(O$.has(Z.code))return{code:Z.code,disposition:"terminal"};if(P$.has(Z.code))return{code:Z.code,disposition:"retry"};return{code:Z.code,disposition:Z.action==="retry"?"retry":"terminal"}}function I8(Z,$){if(!/^[a-z0-9][a-z0-9-]*$/.test(Z)||!/^[a-z0-9][a-z0-9-]*$/.test($))throw new F("invalid-state","Claustrum enrollment names use lowercase letters, digits and dashes");return`${Z}-${$}`}function k8(Z){return C8.connect(Z)}function L$(Z){let $=K$(Z)||".json",z=_$(Z,K$(Z));return{statePath:d3(p(Z),`${z}-state${$}`),tokenPath:Z}}function f8(Z){let $=Z.override?.trim();if($&&!Q$($)&&!Z.cwd)throw new F("invalid-state","A relative Claustrum enrollment override needs a base directory");let z=$?Q$($)?$:E8(Z.cwd,$):d3(Z.stateDir,`${Z.host}-enrollment.json`);return L$(z)}function S$(Z){return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)}function sZ(Z){return typeof Z==="number"&&Number.isSafeInteger(Z)&&Z>=0}function R$(Z){return typeof Z==="number"&&Number.isSafeInteger(Z)&&Z>=1}function OZ(){return new F("invalid-state","invalid Claustrum enrollment state")}function rZ(Z){if(!S$(Z)||Z.version!==b8||typeof Z.proposedName!=="string"||Z.proposedName.length===0)throw OZ();if(Z.phase==="pending"){if(!c3.test(String(Z.requestSecret??""))||Z.requestId!==void 0&&(typeof Z.requestId!=="string"||Z.requestId.length===0)||!sZ(Z.createdAt)||!sZ(Z.updatedAt))throw OZ();return{version:1,phase:"pending",proposedName:Z.proposedName,requestSecret:Z.requestSecret,...Z.requestId!==void 0&&{requestId:Z.requestId},createdAt:Z.createdAt,updatedAt:Z.updatedAt}}if(Z.phase==="approved"){if(Z.approvedName!==void 0&&(typeof Z.approvedName!=="string"||Z.approvedName.length===0)||!R$(Z.tokenGeneration)||!sZ(Z.updatedAt))throw OZ();return{version:1,phase:"approved",proposedName:Z.proposedName,...Z.approvedName!==void 0&&{approvedName:Z.approvedName},tokenGeneration:Z.tokenGeneration,updatedAt:Z.updatedAt}}if(Z.phase==="denied"||Z.phase==="blocked"){if(Z.errorCode!==void 0&&typeof Z.errorCode!=="string"||!sZ(Z.updatedAt))throw OZ();return{version:1,phase:Z.phase,proposedName:Z.proposedName,...Z.errorCode!==void 0&&{errorCode:Z.errorCode},updatedAt:Z.updatedAt}}throw OZ()}function u3(Z){if(!S$(Z)||!c3.test(String(Z.token??""))||!R$(Z.token_generation))throw new F("invalid-token","invalid Claustrum enrollment token file");return{token:Z.token,token_generation:Z.token_generation}}function y8(Z){if(!Z.isFile())throw new F("unsafe-file","Claustrum enrollment file must be a regular file");if((Z.mode&63)!==0)throw new F("unsafe-file","Claustrum enrollment file must be owner-only");let $=process.geteuid?.();if($!==void 0&&Z.uid!==$)throw new F("unsafe-file","Claustrum enrollment file must be owned by the current user")}function V$(Z){try{return JSON.parse(Z)}catch{throw new F("invalid-state","Claustrum enrollment file is not valid JSON")}}async function l(Z){if(XZ)try{await l3(p(Z));let z=await oZ(Z,!0);if(Buffer.byteLength(z)>nZ)throw new F("unsafe-file","Claustrum enrollment file is too large");return V$(z)}catch(z){if(z.code==="ENOENT")return;throw z}let $;try{$=await N$(Z,W$.O_RDONLY|W$.O_NOFOLLOW)}catch(z){if(z.code==="ENOENT")return;throw new F("unsafe-file","Claustrum enrollment file could not be opened safely")}try{y8(await $.stat());let z=Buffer.alloc(nZ+1),{bytesRead:X}=await $.read(z,0,z.byteLength,0);if(X>nZ)throw new F("unsafe-file","Claustrum enrollment file is too large");return V$(z.subarray(0,X).toString("utf8"))}finally{await $.close()}}function U$(Z,$){let z=[];for(let X of Z.split(`
88
- `)){if(X.trim()===""||X.startsWith("#"))continue;let Y=X.split(":");if(Y.length!==$||!/^[^\s:,]+$/.test(Y[0]??"")||!/^\d+$/.test(Y[2]??"")||!Number.isSafeInteger(Number(Y[2]))||$===7&&(!/^\d+$/.test(Y[3]??"")||!Number.isSafeInteger(Number(Y[3])))||$===4&&Y[3]!==""&&!/^[^\s:,]+(?:,[^\s:,]+)*$/.test(Y[3]??""))return;z.push(Y)}return z}async function w8(Z,$,z){try{let[X,Y]=await Promise.all([g3(z.passwdPath??"/etc/passwd","utf8"),g3(z.groupPath??"/etc/group","utf8")]),G=U$(X,7),B=U$(Y,4);if(!G||!B)return!1;let J=G.filter((V)=>Number(V[2])===Z),H=B.filter((V)=>Number(V[2])===$);if(J.length!==1||H.length!==1)return!1;let W=J[0]?.[0],Q=H[0]?.[3]??"";return(Q===""||Q.split(",").every((V)=>V===W))&&!G.some((V)=>Number(V[2])!==Z&&Number(V[3])===$)}catch{return!1}}function T$(Z){if(!Z.passwdPath&&!Z.groupPath)return;return{fs:{readFile:($)=>g3($==="/etc/passwd"?Z.passwdPath??$:$==="/etc/group"?Z.groupPath??$:$)}}}async function E$(Z,$={}){if(!XZ){let z=process.geteuid?.();if(z===void 0)return;let X=process.getegid?.(),Y;try{Y=await R8(Z)}catch{return}let G;for(;;){let B=await j$(Y).catch(()=>{return});if(B&&(B.mode&18)!==0&&(B.mode&512)===0){if(G===void 0)G=X!==void 0&&await w8(z,X,$);if((B.mode&2)!==0||B.uid!==z||B.gid!==X||!G)throw new F("unsafe-file",`Claustrum enrollment path has a writable ancestor: ${Y}. Another user could replace it. Run: chmod g-w,o-w ${Y}`)}let J=p(Y);if(J===Y)return;Y=J}}try{await D$(Z,T$($))}catch(z){if(!(z instanceof C3))throw z;throw new F("unsafe-file",`Claustrum enrollment parent refused: ${z.path} (${z.reason??z.code}). Use a folder that other users cannot write or replace.`)}}async function aZ(Z,$={}){if(XZ){await l3(Z,!1,T$($));return}await S8(Z,{recursive:!0,mode:448});let z=await j$(Z),X=process.geteuid?.();if(X!==void 0&&z.uid!==X)throw new F("unsafe-file","Claustrum enrollment directory must be owned by the current user");if((z.mode&63)!==0)await L8(Z,448)}async function zZ(Z,$,z={}){let X=p(Z);await aZ(X,z),await E$(X,z);let Y=`${JSON.stringify($)}
89
- `;if(Buffer.byteLength(Y)>nZ)throw new F("invalid-state","Claustrum enrollment state is too large");if(XZ)return F$(Z,Y);let G=d3(X,`.${_$(Z)}.${process.pid}.${P8()}.tmp`),B,J=!1;try{B=await N$(G,"wx",384),J=!0,await B.writeFile(Y,"utf8"),await B.chmod(384),await B.sync(),await B.close(),B=void 0,await T8(G,Z),J=!1}finally{if(await B?.close().catch(()=>{}),J)await M$(G).catch(()=>{})}}async function i3(Z,$){let z=await l(Z.tokenPath),X=z===void 0?void 0:u3(z),Y=await l(Z.statePath),G=Y===void 0?void 0:rZ(Y);if(X)return{state:"approved",proposedName:G?.proposedName??$,...G?.phase==="approved"&&G.approvedName!==void 0&&{approvedName:G.approvedName},tokenGeneration:X.token_generation};if(!G)return{state:"idle"};if(G.phase==="approved")return{state:"blocked",proposedName:G.proposedName,code:"missing_token"};return g(G)}async function h8(Z,$){let z;try{z=await i3(Z,$)}catch(X){if(!(X instanceof F)||X.kind!=="invalid-state"&&X.kind!=="invalid-token")return"unreadable";try{let Y=await l(Z.statePath);if(Y===void 0)return"unreadable";let G=rZ(Y);return G.phase==="approved"&&G.proposedName===$?"vault":"unreadable"}catch{return"unreadable"}}if("proposedName"in z&&z.proposedName!==$)return"unreadable";if(z.state==="approved"||z.state==="blocked"&&z.code==="missing_token")return"vault";return"local"}async function YZ(Z){let $=await l(Z);if($===void 0)throw new F("not-enrolled","Claustrum enrollment is not configured");return u3($)}function g(Z){if(Z.phase==="pending")return{state:"pending",proposedName:Z.proposedName,...Z.requestId!==void 0&&{requestId:Z.requestId}};if(Z.phase==="approved")return{state:"approved",proposedName:Z.proposedName,...Z.approvedName!==void 0&&{approvedName:Z.approvedName},tokenGeneration:Z.tokenGeneration};if(Z.phase==="denied")return{state:"denied",proposedName:Z.proposedName};return{state:"blocked",proposedName:Z.proposedName,code:Z.errorCode??"unknown"}}function x$(){return new F("wrong-consumer","Claustrum enrollment state belongs to a different consumer")}class C${#Z;#$;#B;#X;#H;#J;#z;constructor(Z){this.#z=Z.ancestorOptions??{},this.#Z=Z.client,this.#$=Z.paths,this.#B=Z.proposedName,this.#X=Z.now??Date.now,this.#H=Z.mintSecret??(()=>O8(32).toString("hex")),this.#J=Z.writeTokenFile??A8}async status(){return i3(this.#$,this.#B)}async resetTerminal(){return A$(this.#$,this.#B)}async#W(Z,$){let z={version:1,phase:"blocked",proposedName:Z.proposedName,errorCode:$,updatedAt:this.#X()};return await zZ(this.#$.statePath,z,this.#z),g(z)}async reconcile(){await aZ(p(this.#$.statePath),this.#z);let Z=await E({name:"ceremony",path:this.#$.statePath,ttlMs:q$,renew:!0});if(!Z)return{state:"busy"};try{let $=await l(this.#$.tokenPath),z=$===void 0?void 0:u3($),X=await l(this.#$.statePath),Y=X===void 0?void 0:rZ(X);if(Y&&Y.proposedName!==this.#B)throw x$();if(z){if(!Y||Y.phase==="pending"){let B={version:1,phase:"approved",proposedName:Y?.proposedName??this.#B,tokenGeneration:z.token_generation,updatedAt:this.#X()};await zZ(this.#$.statePath,B,this.#z),Y=B}return{state:"approved",proposedName:Y.proposedName,...Y.phase==="approved"&&Y.approvedName!==void 0&&{approvedName:Y.approvedName},tokenGeneration:z.token_generation}}if(Y?.phase==="approved"){let B={version:1,phase:"blocked",proposedName:Y.proposedName,errorCode:"missing_token",updatedAt:this.#X()};return await zZ(this.#$.statePath,B,this.#z),g(B)}if(Y&&Y.phase!=="pending")return g(Y);if(!Y){let B=this.#X();if(Y={version:1,phase:"pending",proposedName:this.#B,requestSecret:this.#H(),createdAt:B,updatedAt:B},!c3.test(Y.requestSecret))throw new F("invalid-state","invalid minted Claustrum enrollment secret");await zZ(this.#$.statePath,Y,this.#z)}if(!Y.requestId)try{let B=q8("sha256").update(Buffer.from(Y.requestSecret,"hex")).digest("hex"),J=await this.#Z.enrollPropose({name:Y.proposedName,requestSecretHash:B});Y={...Y,requestId:J.requestId,updatedAt:this.#X()},await zZ(this.#$.statePath,Y,this.#z)}catch(B){let J=p3(B);if(!J)throw B;if(J.disposition==="retry")return{state:"pending",proposedName:Y.proposedName,retryCode:J.code};return this.#W(Y,J.code)}let G=Y.requestId;if(!G)return g(Y);try{let B=await this.#Z.enrollPoll({requestId:G,requestSecret:Y.requestSecret});if(B.status==="pending")return g(Y);if(B.status==="denied"){let H={version:1,phase:"denied",proposedName:Y.proposedName,updatedAt:this.#X()};return await zZ(this.#$.statePath,H,this.#z),g(H)}await aZ(p(this.#$.tokenPath),this.#z),await E$(p(this.#$.tokenPath),this.#z),await this.#J(this.#$.tokenPath,{token:B.token,token_generation:B.tokenGeneration});let J={version:1,phase:"approved",proposedName:Y.proposedName,approvedName:B.name,tokenGeneration:B.tokenGeneration,updatedAt:this.#X()};return await zZ(this.#$.statePath,J,this.#z),g(J)}catch(B){let J=p3(B);if(!J)throw B;if(J.disposition==="retry")return{state:"pending",proposedName:Y.proposedName,requestId:G,retryCode:J.code};return this.#W(Y,J.code)}}finally{await Z.release()}}}async function A$(Z,$){await aZ(p(Z.statePath));let z=await E({name:"ceremony",path:Z.statePath,ttlMs:q$,renew:!0});if(!z)return"busy";try{if(await l(Z.tokenPath)!==void 0)return"refused-approved";let X=await l(Z.statePath);if(X===void 0)return"idle";let Y=rZ(X);if(Y.proposedName!==$)throw x$();if(Y.phase==="pending")return"refused-pending";return await z.assertOwned(),await M$(Z.statePath),"reset"}finally{await z.release()}}var PZ="claustrum-tombstone:v1:";function tZ(Z){return`${PZ}${Z}`}function s3(Z){return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)}function eZ(Z){return typeof Z==="string"&&Z.startsWith(PZ)}function b$(Z,$){if(!s3(Z)||Z.type!=="oauth")return!1;return Z.refresh===tZ($)}function I$(Z,$){if(b$(Z,$))return"placeholder";if(s3(Z)&&Z.type==="oauth"&&typeof Z.refresh==="string"&&Z.refresh.length>0&&!eZ(Z.refresh))return"login";if(s3(Z)&&Z.type==="api"&&typeof Z.key==="string"&&Z.key.length>0)return"login";return"empty"}function m8(Z){let $=I$(Z.auth,Z.provider);if(Z.mode==="custody"&&$==="login")throw new F("host-slot-login",`${Z.provider} has a host login while its accounts are vault-custodied; refusing to serve until one is removed`);if(Z.mode==="local"&&$==="placeholder")throw new F("host-slot-placeholder",`${Z.provider} host slot holds the vault placeholder; sign in to use local accounts`);return $}function k$(Z,$){return $!==void 0&&$.credentialId===Z.credentialId&&$.accountIdentity===Z.accountIdentity&&$.recordVersion!==Z.recordVersion}function g8(Z,$){if($===void 0)return"reauthorize-failed";if($.credentialId!==Z.credentialId)return"credential-changed";if($.accountIdentity!==Z.accountIdentity)return"account-changed";if($.recordVersion===Z.recordVersion)return"version-unchanged";return"rotated"}var f$=I("claustrum");function o3(Z,$,z,X=f$){let Y=k$($,z);return X.debug("scoped 401 re-authorized",{site:Z,credentialId:$.credentialId,servedVersion:$.recordVersion,currentVersion:z?.recordVersion??null,retry:Y,reason:g8($,z)}),Y}var a3=300000;function n3(){return new F("invalid-material","Claustrum returned invalid credential material")}function p8(Z){let $=Z.trim();if($.startsWith("{")){let z;try{z=JSON.parse($)}catch{throw n3()}if(!z||typeof z!=="object")throw n3();let X=z,Y=X.access_token??X.access;$=typeof Y==="string"?Y:""}if(!/^[\x21-\x7e]+$/.test($)||$.startsWith(PZ))throw n3();return $}function l8(Z,$){if(!Z.operations.includes("read"))return;if(!Z.categories.includes($.category))return;if(Z.credentialType==="oauth")return Z.refreshAdapter===$.refreshAdapter?"oauth":void 0;if(Z.credentialType==="api_key"&&$.apiKeys)return Z.refreshAdapter===void 0?"api_key":void 0;return}function d8(Z){let{grants:$,grantTuples:z}=Z;if($===void 0||z===void 0)return;return Object.freeze({grants:$,tuples:Object.freeze(z.map(({selectorKind:X,selector:Y,operation:G})=>Object.freeze({selectorKind:X,selector:Y,operation:G})))})}class Z3{#Z;#$;#B;#X;#H;#J;#z;#W=new WeakMap;#K=new WeakMap;#V=!1;constructor(Z){let $=Z.tokenPath;if(Z.readToken)this.#$=Z.readToken;else if($)this.#$=()=>YZ($);else throw new F("not-enrolled","Claustrum enrollment token path is required");this.#Z=Z.client,this.#X=Z.family,this.#H=Z.parseIdentity,this.#J=Z.requireAssertion??!1,this.#B=Z.now??Date.now,this.#z=Z.logger??f$}#G(Z){if(this.#V)throw new F("closed","Claustrum scoped custody is closed");Z?.throwIfAborted()}async#Y(Z){this.#G(Z);let $=await this.#$();if(this.#G(Z),!/^[0-9a-f]{64}$/.test($.token)||!Number.isSafeInteger($.token_generation)||$.token_generation<1)throw new F("invalid-token","Invalid Claustrum enrollment token");return $.token}async#Q(Z,$){this.#G($);let z,X;try{let Y=Z();z=$?await Promise.race([Y,new Promise((G,B)=>{let J=()=>B($.reason);if($.addEventListener("abort",J,{once:!0}),X=()=>$.removeEventListener("abort",J),$.aborted)J()})]):await Y}catch(Y){if(this.#G($),Y instanceof v8)throw Y;throw new F("unavailable","Claustrum scoped operation unavailable")}finally{X?.()}return this.#G($),z}async discover(Z){let $=await this.#Y(Z),z=await this.#Q(()=>this.#Z.listScoped($),Z),X=[],Y=[],G=new Map;for(let H of z.rows){let W=l8(H,this.#X);if(!W)continue;Y.push({row:H,type:W}),G.set(H.id,(G.get(H.id)??0)+1)}let B=[];for(let{row:H,type:W}of Y){let Q;if(!H.id.trim())Q="empty credential id";else if((G.get(H.id)??0)>1)Q="duplicate credential id";else if(H.accountId!==void 0&&!H.accountId.trim())Q="blank account identity";else if(!H.state.trim())Q="empty state";if(Q){X.push({...H.id.trim()&&{credentialId:H.id},reason:Q});continue}B.push(Object.freeze({credentialId:H.id,credentialType:W,...H.accountId!==void 0&&{accountIdentity:H.accountId},state:H.state,...H.email!==void 0&&{email:H.email},...H.orgName!==void 0&&{orgName:H.orgName}}))}for(let H of X)this.#z.warn("skipped malformed vault record",H);let J=d8(z);return{view:z.view,credentials:Object.freeze(B),skipped:Object.freeze(X),...J&&{grantReach:J}}}async authorize(Z,$){if(!Z.credentialId)throw new F("route-unavailable","Claustrum dispatch requires a credential id");let{credentialId:z,credentialType:X,accountIdentity:Y}=Z;if(this.#J&&Y===void 0)throw new F("identity-unasserted","Claustrum dispatch requires a known account identity");let G=await this.#Y($),B=await this.#Q(()=>this.#Z.getScoped({credentialId:z,enrollmentToken:G,...X==="oauth"&&{minTtlMs:a3}}),$);if(B.credentialId!==void 0&&B.credentialId!==z)throw new F("identity-changed","Claustrum served credential identity changed");let J=B.expiresAtMs;if(!Number.isSafeInteger(B.recordVersion)||B.recordVersion<0||J===null&&X==="oauth"||J!==null&&(!Number.isFinite(J)||J-this.#B()<a3))throw new F("insufficient-validity","Claustrum served credential has insufficient validity");let H=p8(B.material),W=B.accountId?.trim()?B.accountId:void 0;if(this.#J&&(B.credentialId===void 0||W===void 0))throw new F("identity-unasserted","Claustrum served credential did not assert its identity");let Q=W===void 0?this.#H?.(H):void 0,V=W??Q;if(Y!==void 0&&V!==void 0&&V!==Y)throw new F("identity-changed","Claustrum served credential identity changed");let U=V??Y,K=Object.freeze(Object.defineProperty({credentialId:z,credentialType:X,...U!==void 0&&{accountIdentity:U},accountIdentitySource:W!==void 0?"asserted":Q!==void 0?"parsed":Y!==void 0?"expected":"none",...Y!==void 0&&{expectedAccountIdentity:Y},...B.credentialId!==void 0&&{assertedCredentialId:B.credentialId},...W!==void 0&&{assertedAccountIdentity:W},...B.projectId!==void 0&&{projectId:B.projectId},recordVersion:B.recordVersion,expiresAtMs:J},"accessToken",{value:H,enumerable:!1}));return this.#W.set(K,G),K}async reportFailure(Z,$,z){if($!==401)return;this.#G();let X=this.#W.get(Z);if(!X)throw new F("no-receipt","Claustrum failure report requires an original dispatch receipt");let Y=this.#K.get(Z);if(Y)return Y;let G=this.#Q(()=>this.#Z.reportAuthFailureScoped({credentialId:Z.credentialId,enrollmentToken:X,providerStatus:401,recordVersion:Z.recordVersion,reporterSource:z}));this.#K.set(Z,G);try{await G,this.#z.debug("scoped 401 reported",{credentialId:Z.credentialId,recordVersion:Z.recordVersion,reporterSource:z})}catch(B){throw this.#K.delete(Z),B}}close(){if(this.#V)return;this.#V=!0,this.#Z.close()}}import{createHash as c8}from"node:crypto";function y$(Z,$,z){if(Z.accountIdentity!==void 0&&z!==void 0)return Z.accountIdentity===z;return Z.credentialId===$}function r3(Z,$,z){return Z.some((X)=>y$(X,$,z))}function t3(Z,$,z){let X={credentialId:$,...z!==void 0&&{accountIdentity:z}};return[...Z.filter((Y)=>Y.credentialId!==$||Y.accountIdentity!==z),X]}function e3(Z,$,z){return Z.filter((X)=>!$.some((Y)=>y$(X,Y,z)))}var h$="vault:";function u8(Z){return c8("sha256").update(Z).digest("hex")}function i8(Z){let $=Z.credentialId.split(":");return($.length>=3?$.slice(2).join(":").trim():void 0)||Z.email||Z.credentialId}function s8(Z){return Z.identity!==void 0?`identity:${Z.identity}`:`credential:${Z.credential.credentialId}`}function d(Z){return[Z.credentialId,...Z.aliases??[]]}function m$(Z,$,z={}){let X=z.now??Date.now(),Y=z.routePrefix??h$,G=z.reservedRouteIds??new Set,B=Z?.rows??[],J=[...Z?.declined??[]],H=$.skipped.length===0,W=new Set($.credentials.map((D)=>D.credentialId)),Q=new Set($.skipped.flatMap((D)=>D.credentialId===void 0?[]:[D.credentialId])),V=$.skipped.some((D)=>D.credentialId===void 0),U=(D)=>!W.has(D)&&(Q.has(D)||V),j=new Map;for(let D of B){if(D.accountIdentity===void 0)continue;for(let _ of d(D))if(!j.has(_))j.set(_,D.accountIdentity)}let K=new Map;for(let D of $.credentials){let _=D.accountIdentity!==void 0?{credential:D,identity:D.accountIdentity,claimed:!0}:{credential:D,identity:j.get(D.credentialId),claimed:!1},m=s8(_),v=K.get(m)??[];v.push(_),K.set(m,v)}let M=new Set,O=new Set(G),L=[],IZ=(D,_)=>D.credential.credentialId.localeCompare(_.credential.credentialId),FZ=[...K.values()].map((D)=>D.toSorted(IZ)).sort((D,_)=>D[0]&&_[0]?IZ(D[0],_[0]):0);for(let D of FZ){let _=D[0]?.identity,m=D.filter((q)=>q.credential.state==="active"),v=m.length?m:D,W3=v.filter((q)=>q.claimed),kZ=W3.length?W3:v,K3=new Set(D.map((q)=>q.credential.credentialId)),M6=B.find((q)=>!M.has(q)&&d(q).some((HZ)=>K3.has(HZ))&&(q.accountIdentity===void 0||q.accountIdentity===_)),Q3=kZ.find((q)=>q.credential.credentialId===M6?.credentialId)??kZ[0];if(!Q3)continue;let T=Q3.credential,A=M6??(_===void 0?void 0:B.find((q)=>!M.has(q)&&q.accountIdentity===_));if(A)M.add(A);let s=A?.routeId;if(!s||G.has(s)){let q=`${Y}${T.credentialId}${_===void 0?"":`~${u8(_).slice(0,10)}`}`;s=q;for(let HZ=2;O.has(s);HZ++)s=`${q}~${HZ}`}O.add(s);let L1=A?d(A).filter(U):[],V3=[...new Set([...D.map((q)=>q.credential.credentialId),...L1])].filter((q)=>q!==T.credentialId).sort((q,HZ)=>q.localeCompare(HZ)),S1=z.mapAccount?.(T)??{};L.push({previousIndex:A?B.indexOf(A):1/0,row:{routeId:s,credentialId:T.credentialId,credentialType:T.credentialType,..._!==void 0&&{accountIdentity:_},...V3.length&&{aliases:V3},state:T.state,label:S1.label?.trim()||i8(T),...T.email!==void 0&&{email:T.email},...T.orgName!==void 0&&{orgName:T.orgName},enabled:![T.credentialId,...V3].some((q)=>r3(J,q,_)),addedAt:A?.addedAt??X,...A?.quota!==void 0&&{quota:A.quota},...!Q3.claimed&&_!==void 0&&{unclaimed:!0}}})}return B.forEach((D,_)=>{if(M.has(D)||!d(D).some(U))return;if(O.has(D.routeId))return;let[m,...v]=d(D).filter((K3)=>!W.has(K3));if(m===void 0)return;O.add(D.routeId);let{aliases:W3,...kZ}=D;L.push({previousIndex:_,row:{...kZ,credentialId:m,...v.length&&{aliases:v},stale:!0}})}),L.sort((D,_)=>D.previousIndex===_.previousIndex?D.row.credentialId.localeCompare(_.row.credentialId):D.previousIndex-_.previousIndex),{version:1,view:$.view,complete:H,...!H&&{rejected:$.skipped.map((D)=>({...D.credentialId!==void 0&&{credentialId:D.credentialId},reason:D.reason}))},rows:L.map((D)=>D.row),declined:J}}function Z6(Z){return(Z?.rows??[]).filter(($)=>$.enabled&&$.state==="active").map(($)=>({id:$.routeId,kind:$.credentialType==="oauth"?"oauth":"api-key",...$.quota!==void 0&&{quota:$.quota}}))}function LZ(Z){return typeof Z==="object"&&Z!==null&&!Array.isArray(Z)}function UZ(Z){return Z===void 0||typeof Z==="string"}function n8(Z){let $=LZ(Z)?o(Z.quota):void 0;if(!LZ(Z)||typeof Z.routeId!=="string"||typeof Z.credentialId!=="string"||Z.credentialType!=="oauth"&&Z.credentialType!=="api_key"||typeof Z.state!=="string"||typeof Z.label!=="string"||typeof Z.enabled!=="boolean"||typeof Z.addedAt!=="number"||!UZ(Z.accountIdentity)||!UZ(Z.email)||!UZ(Z.orgName)||Z.aliases!==void 0&&(!Array.isArray(Z.aliases)||!Z.aliases.every((z)=>typeof z==="string"))||Z.quota!==void 0&&$===void 0||Z.stale!==void 0&&Z.stale!==!0||Z.unclaimed!==void 0&&Z.unclaimed!==!0)return;return{...Z,...$===void 0?{}:{quota:$}}}var a8=new Set(["empty credential id","duplicate credential id","blank account identity","empty state"]);function w$(Z){if(!Array.isArray(Z))return;let $=[];for(let z of Z){if(!LZ(z)||!UZ(z.credentialId)||typeof z.reason!=="string"||!a8.has(z.reason))return;$.push(z)}return $}function o8(Z){if(!LZ(Z)||Z.version!==1||!UZ(Z.view)||!Array.isArray(Z.rows)||!Array.isArray(Z.declined)||Z.complete!==void 0&&typeof Z.complete!=="boolean"||Z.rejected!==void 0&&!w$(Z.rejected))throw new F("invalid-state","Claustrum roster file is not valid");let $=[];for(let Y of Z.rows){let G=n8(Y);if(!G)throw new F("invalid-state","Claustrum roster file is not valid");$.push(G)}let z=[];for(let Y of Z.declined){if(!LZ(Y)||typeof Y.credentialId!=="string"||!UZ(Y.accountIdentity))throw new F("invalid-state","Claustrum roster file is not valid");z.push(Y)}let X=w$(Z.rejected);return{version:1,...typeof Z.view==="string"&&{view:Z.view},complete:Z.complete!==!1,...X&&{rejected:X},rows:$,declined:z}}async function k(Z){let $;try{$=await oZ(Z,XZ)}catch(X){if(X.code==="ENOENT")return;throw X}let z;try{z=JSON.parse($)}catch{throw new F("invalid-state","Claustrum roster file is not valid")}return o8(z)}var r8={name:"claustrum-roster-write",ttlMs:1e4,timeoutMs:5000},t8={name:"claustrum-roster",ttlMs:30000};async function DZ(Z,$,z={}){return A3(Z,r8,async(X)=>{let Y=await k(Z),{next:G,result:B}=await $(Y,{assertOwned:()=>X.assertOwned()});if(G)await X.assertOwned(),await y(Z,G,{beforeRename:async()=>{await z.beforePublish?.(),await X.assertOwned()}});return B})}function $6(Z,$){return DZ(Z,(z)=>{let X=z?.rows.find((G)=>G.routeId===$);if(!z||!X)throw new F("route-unavailable","Claustrum route is not in the roster");let Y=t3(z.declined,X.credentialId,X.accountIdentity);return{next:{...z,declined:Y,rows:z.rows.map((G)=>G===X?{...G,enabled:!1}:G)},result:void 0}})}function z6(Z,$){return DZ(Z,(z)=>{let X=z?.rows.find((Y)=>Y.routeId===$);if(!z||!X)throw new F("route-unavailable","Claustrum route is not in the roster");return{next:{...z,declined:e3(z.declined,d(X),X.accountIdentity),rows:z.rows.map((Y)=>Y===X?{...Y,enabled:!0}:Y)},result:void 0}})}function e8(Z,$){if(!d(Z).includes($.credentialId))return"refuse";if(Z.unclaimed&&($.accountIdentitySource==="expected"||$.accountIdentitySource==="none"))return"refuse";if(Z.accountIdentity===$.accountIdentity)return"hold";if(Z.accountIdentity===void 0&&$.expectedAccountIdentity===void 0&&$.accountIdentity!==void 0&&($.accountIdentitySource==="asserted"||$.accountIdentitySource==="parsed")&&d(Z).length===1)return"bind";return"refuse"}function X6(Z,$){return DZ(Z,(z)=>{let X=z?.rows.find((J)=>J.routeId===$.routeId),Y=!z||!X?"refuse":e8(X,$);if(!z||!X||Y==="refuse")return{result:!1};let G=KZ(X.quota,$.observation),B=Y==="bind"?{accountIdentity:$.accountIdentity,unclaimed:!0}:{};return{next:{...z,rows:z.rows.map((J)=>J===X?{...J,...B,quota:G}:J)},result:!0}})}function Y6(Z,$){return DZ(Z,(z)=>{let X=z?.rows.find((G)=>G.routeId===$.routeId);if(!z||!X||X.accountIdentity===void 0||X.accountIdentity!==$.accountIdentity)return{result:!1};let Y=KZ(X.quota,$.observation);return{next:{...z,rows:z.rows.map((G)=>G===X?{...G,quota:Y}:G)},result:!0}})}async function G6(Z){Z.signal?.throwIfAborted();let $=async()=>await Z.isActive?.()??!0;if(!await $())return;let z=await E({...t8,path:Z.path,renew:!0});if(!z){let X=await k(Z.path);if(Z.signal?.throwIfAborted(),!X?.view)throw new F("roster-busy","Claustrum account discovery is already in progress");return X}try{let X=await Z.custody.discover(Z.signal);return Z.signal?.throwIfAborted(),await DZ(Z.path,async(Y)=>{if(!await $())return{result:void 0};Z.signal?.throwIfAborted(),await z.assertOwned();let G=typeof Z.projection==="function"?Z.projection():Z.projection,B=m$(Y,X,G);return{...JSON.stringify(Y)!==JSON.stringify(B)&&{next:B},result:B}})}finally{await z.release()}}class v${#Z;#$=new AbortController;#B;#X;#H;#J;#z;#W;#K;#V=!1;#G;constructor(Z){this.#Z=Z,this.#B=Z.logger??I("claustrum")}#Y(Z){this.#$.signal.throwIfAborted(),Z?.throwIfAborted()}async#Q(){return await this.#Z.isCustodyActive?.()??!0}#U(Z,$){let z=v3([this.#$.signal,...$?[$]:[]]);return new Promise((X,Y)=>{let G=()=>{z.signal.removeEventListener("abort",B),z.dispose()},B=()=>{G(),Y(z.signal.reason)};if(z.signal.addEventListener("abort",B,{once:!0}),Z.then((J)=>{if(G(),z.signal.aborted)Y(z.signal.reason);else X(J)},(J)=>{G(),Y(J)}),z.signal.aborted)B()})}async#D(){if(this.#Y(),this.#X)return this.#X;if(!this.#H)this.#H=this.#Z.connect().then((Z)=>{if(this.#$.signal.aborted)Z.close(),this.#Y();if(this.#X=new Z3({client:Z,family:this.#Z.family,tokenPath:this.#Z.tokenPath,parseIdentity:this.#Z.parseIdentity,requireAssertion:this.#Z.requireAssertion,now:this.#Z.now,logger:this.#B}),this.#Z.insula&&Z.insula)this.#G=H$(Z.insula,this.#Z.tokenPath);return this.#X}).finally(()=>{this.#H=void 0});return this.#U(this.#H)}snapshot(){return this.#z}grantReach(){let Z=this.#W;return Z&&this.#z?.view===Z.view?Z.reach:void 0}routingRows(){return Z6(this.#z)}refresh(){if(this.#Y(),this.#J)return this.#J;return this.#J=(async()=>{if(!await this.#Q()){this.#z=void 0,this.#W=void 0,this.#X?.close(),this.#X=void 0,this.#G?.release(),this.#G=void 0;return}let Z=await this.#D(),$,z=await G6({path:this.#Z.rosterPath,custody:{discover:async(Y)=>{return $=await Z.discover(Y),$}},isActive:()=>this.#Q(),signal:this.#$.signal,projection:()=>({reservedRouteIds:new Set(this.#Z.reservedRouteIds?.()??[]),routePrefix:this.#Z.routePrefix,mapAccount:this.#Z.mapAccount,now:(this.#Z.now??Date.now)()})});this.#Y();let X=z?.view!==this.#z?.view;if(this.#z=z,$&&z?.view!==void 0)this.#W=$.grantReach?{view:z.view,reach:$.grantReach}:void 0;if(z&&X)this.#Z.onRoster?.(z);return z})().finally(()=>{this.#J=void 0}),this.#J}start(){if(this.#V)return;this.#Y(),this.#V=!0;let Z=async()=>{try{await this.refresh(),await this.refreshInsulaQuota()}catch(z){if(!this.#$.signal.aborted)this.#Z.onError?.(z)}if(this.#$.signal.aborted)return;let $=this.#Z.pollIntervalMs??5000;if($<=0)return;this.#K=(this.#Z.setTimeoutImpl??setTimeout)(()=>{this.#K=void 0,Z()},$),this.#K.unref?.()};Z()}async refreshInsulaQuota(){if(!this.#Z.insula||this.#$.signal.aborted||!await this.#Q())return;try{await YZ(this.#Z.tokenPath),await this.#D(),await this.#G?.source.refresh((this.#Z.now??Date.now)())}catch{}}async cachedInsulaQuota(Z){if(!this.#Z.insula||this.#$.signal.aborted||!await this.#Q())return;try{return await YZ(this.#Z.tokenPath),this.#F(Z.assertedAccountIdentity)}catch{return}}async cachedInsulaQuotaForRoute(Z){if(!this.#Z.insula||this.#$.signal.aborted||!await this.#Q())return;try{await YZ(this.#Z.tokenPath);let z=(await k(this.#Z.rosterPath))?.rows.find((X)=>X.routeId===Z);return this.#F(z?.accountIdentity)}catch{return}}#F(Z){if(!this.#Z.insula||!Z)return;let $=this.#G?.source.current(this.#Z.insula.provider,Z,(this.#Z.now??Date.now)());return $?this.#Z.insula.normalize($.entry,$.context):void 0}async authorize(Z,$){this.#Y($);let z=this.#z??await this.#U(this.refresh(),$);if(!z||!await this.#Q())throw new F("not-active","Claustrum scoped custody is not active");let X=await k(this.#Z.rosterPath);this.#Y($);let Y=z.rows.find((H)=>H.routeId===Z),G=X?.rows.find((H)=>H.routeId===Z);if(G&&!G.enabled)throw new F("route-declined","Claustrum route is disabled");if(!Y||!G||G.state!=="active"||G.credentialId!==Y.credentialId||G.accountIdentity!==Y.accountIdentity)throw new F("route-unavailable","Claustrum route is disabled, removed or changed");let B=await this.#U(this.#D(),$),J=v3([this.#$.signal,...$?[$]:[]]);try{return await B.authorize({credentialId:G.credentialId,credentialType:G.credentialType,...G.accountIdentity!==void 0&&{accountIdentity:G.accountIdentity}},J.signal)}finally{J.dispose()}}async reportFailure(Z,$,z){if(this.#Y(),!this.#X)throw new F("no-receipt","Claustrum dispatch receipt has no active owner");await this.#X.reportFailure(Z,$,z)}async send(Z,$,z){let X=z.signal,Y=await this.authorize(Z,X),G=await $(Y,X);if(G.status===401&&!X?.aborted){let B;try{B=await this.authorize(Z,X)}catch{}if(o3(z.site,Y,B,this.#B))await G.body?.cancel().catch(()=>{}),Y=B,G=await $(B,X)}if(G.status===401)await this.reportFailure(Y,401,z.reporterSource??"direct").catch((B)=>this.#Z.onError?.(B)),Promise.resolve().then(()=>this.refresh()).catch((B)=>{if(!this.#$.signal.aborted)this.#Z.onError?.(B)});return G}async decline(Z){this.#Y(),await $6(this.#Z.rosterPath,Z),this.#z=await k(this.#Z.rosterPath)}async accept(Z){this.#Y(),await z6(this.#Z.rosterPath,Z),this.#z=await k(this.#Z.rosterPath)}async recordQuota(Z,$,z){this.#Y();let X=await X6(this.#Z.rosterPath,{routeId:Z,observation:$,credentialId:z.credentialId,accountIdentitySource:z.accountIdentitySource,...z.accountIdentity!==void 0&&{accountIdentity:z.accountIdentity},...z.expectedAccountIdentity!==void 0&&{expectedAccountIdentity:z.expectedAccountIdentity}});if(X)this.#z=await k(this.#Z.rosterPath);return X}async recordAccountQuota(Z,$,z){this.#Y();let X=await Y6(this.#Z.rosterPath,{routeId:Z,accountIdentity:$,observation:z});if(X)this.#z=await k(this.#Z.rosterPath);return X}close(){if(this.#$.signal.aborted)return;if(this.#$.abort(new F("closed","Claustrum consumer is closed")),this.#K)(this.#Z.clearTimeoutImpl??clearTimeout)(this.#K);this.#K=void 0,this.#X?.close(),this.#G?.release(),this.#G=void 0,this.#z=void 0,this.#W=void 0}}async function z2(Z){let $=await Z4.connect(Z);return Object.assign($,{insula:B$(Z)})}var g$=tZ("openai");function p$(Z){return eZ(Z)}function GZ(Z){if(!Z||Z.corrupt===!0)return!1;return p$(Z.refresh)}class SZ extends Error{code="tombstone-refresh";constructor(){super("This OpenAI account was moved into the Claustrum vault by an older version of OpenAI auth and holds no local credential. Connect the vault, or sign in to the account again.");this.name="TombstoneRefreshError"}}function $3(Z){if(p$(Z))throw new SZ}var $4=I("quota"),B6="primary",J6="secondary",z4="app_EMoamEEZ73f0CkXaXp7hrann",X4="https://auth.openai.com";async function q2(Z){$3(Z.refreshToken);let $=await Z.fetchImpl(`${X4}/oauth/token`,{method:"POST",signal:AbortSignal.timeout(15000),headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:Z.refreshToken,client_id:z4}).toString()});if(!$.ok){let Y=k3($.headers.get("retry-after"));throw Object.assign(Error(`Token refresh failed: ${$.status}`),{status:$.status,retryAfter:Y,isRefreshError:!0})}let z=await $.json();if(!z||typeof z.access_token!=="string"||!z.access_token||typeof z.expires_in!=="number")throw Object.assign(Error("Token refresh failed: malformed response"),{status:$.status,isRefreshError:!0});if(z.refresh_token!==void 0&&typeof z.refresh_token!=="string")throw Object.assign(Error("Token refresh failed: malformed response"),{status:$.status,isRefreshError:!0});let X=typeof z.refresh_token==="string"&&z.refresh_token?z.refresh_token:Z.refreshToken;return{access:z.access_token,refresh:X,expires:Z.now()+z.expires_in*1000,expiresIn:z.expires_in}}var Y4="https://chatgpt.com/backend-api/wham/usage";async function O2(Z){let $=Z.logger??$4,z=Z.accountKey??"unknown",X=Date.now();$.debug("wham usage fetch started",{pid:process.pid,accountId:z});try{let Y=await Z.fetchImpl(Y4,{signal:AbortSignal.timeout(15000),headers:{authorization:`Bearer ${Z.accessToken}`,"chatgpt-account-id":Z.accountId??"","oai-client-platform":"web","oai-client-version":"0","x-openai-target-path":"/backend-api/wham/usage"}});if(!Y.ok){let B=k3(Y.headers.get("retry-after"));throw Object.assign(Error(`wham usage check failed: ${Y.status}`),{status:Y.status,retryAfter:B})}let G=Y$(await Y.json());return $.debug("wham usage fetch succeeded",{pid:process.pid,accountId:z,status:Y.status,elapsedMs:Date.now()-X}),G}catch(Y){throw $.warn("wham usage fetch failed",{pid:process.pid,accountId:z,status:typeof Y?.status==="number"?Y.status:"error",elapsedMs:Date.now()-X,error:l$(Y)}),Y}}import{createHash as G4}from"node:crypto";var B4=globalThis.setTimeout,J4=5;function RZ(Z){let $=Z?.quota?.checkIntervalMinutes??J4;return Math.max(1,$)*60000}function H4(Z){return Z?.quota?.enabled!==!1}function z3(Z,$){if(!Z?.resetsAt)return!1;let z=Date.parse(Z.resetsAt);return Number.isFinite(z)&&z<=$}function x2(Z,$,z,X,Y){if(Y!==void 0&&Number.isFinite(Y)&&Y>z)return Y;let G=$===B6?Z?.primary:$===J6?Z?.secondary:void 0,B=G?.resetsAt?Date.parse(G.resetsAt):NaN;if(Number.isFinite(B)&&B>z)return B;return z+X}function W4(Z){let $=Z?.quota?.minimumRemaining||{};return{primary:$.primary??$["5h"]??15,secondary:$.secondary??$["1w"]??10}}function d$(Z,$,z){if(!H4($))return z+RZ($);let X=W4($),Y=[];for(let G of["primary","secondary"]){let B=Z?.[G];if(!B)continue;if(B.remainingPercent>=X[G])continue;let J=B.resetsAt?Date.parse(B.resetsAt):Number.NaN;if(!Number.isFinite(J)||J<=z)return z+RZ($);Y.push(J)}if(!Y.length)return z+RZ($);return Math.min(...Y)+60000}function K4(Z){if(!Z?.quota?.mainQuota||!Z.quota.mainQuotaCheckedAt)return null;return{quota:Z.quota.mainQuota,checkedAt:Z.quota.mainQuotaCheckedAt,tokenFingerprint:Z.quota.mainQuotaToken}}function Q4(Z){let $=Z?.quota?.refreshEveryNRequests;return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):0}function x(Z){return G4("sha256").update(Z).digest("hex").slice(0,16)}class c{main=null;mainTokenFp=null;mainQuotaAccountId=null;fallbacks=new Map;fallbackTokenFps=new Map;inflightMain=null;inflightMainFp=null;inflightFallbacks=new Map;mainLastApiError=void 0;fallbackApiErrors=new Map;fallbackErrorTokenFps=new Map;rateLimitedUntilMap=new Map;apiGate=Promise.resolve();lastApiCallAt=0;storage;fetchImpl;now;fetchQuotaFn;onMainQuotaFetched;onApiError;configPath;constructor(Z){this.storage=Z.storage,this.fetchImpl=Z.fetchImpl??fetch,this.configPath=Z.configPath,this.now=Z.now??Date.now,this.fetchQuotaFn=Z.fetchQuotaFn,this.onMainQuotaFetched=Z.onMainQuotaFetched,this.onApiError=Z.onApiError,this.seedMainFromStorage(Z.storage),this.seedMainBackoffFromStorage(Z.storage)}getMain(Z){if(Z&&this.main&&this.mainTokenFp&&this.mainTokenFp!==x(Z))this.main=null,this.mainTokenFp=null;return this.main}getFallback(Z,$){let z=this.fallbacks.get(Z)??null;if(!$||!z)return z;if(this.fallbackTokenFps.get(Z)!==x($))return this.fallbacks.delete(Z),this.fallbackTokenFps.delete(Z),null;return z}getAllFallbacks(){return this.fallbacks}setMain(Z,$,z,X=!1){if(!X&&!c$($.quota))return;if(this.mainTokenFp=x(Z),z&&this.mainQuotaAccountId&&this.mainQuotaAccountId!==z)this.clearRateLimited("main");if(z)this.mainQuotaAccountId=z;if(this.main=$,H6($.quota))this.clearRateLimited("main")}peekMainForPolicy(Z){if(Z&&this.mainQuotaAccountId&&this.mainQuotaAccountId!==Z)return null;return this.main}peekFallbackForPolicy(Z,$){let z=this.fallbacks.get(Z)??null;if($&&z?.accountId&&z.accountId!==$)return null;return z}setFallback(Z,$,z,X=!1,Y){if(!X&&!c$($.quota))return;let G=this.fallbacks.get(Z)?.accountId;if(Y&&G&&Y!==G)this.clearRateLimited(Z);let B=Y??G;if(this.fallbacks.set(Z,{...$,accountId:B}),z)this.fallbackTokenFps.set(Z,x(z));else this.fallbackTokenFps.delete(Z);if(H6($.quota))this.clearRateLimited(Z)}markRateLimited(Z,$){let z=this.rateLimitedUntilMap.get(Z);if(z!==void 0&&z>$)return;this.rateLimitedUntilMap.set(Z,$)}isRateLimited(Z){let $=this.rateLimitedUntilMap.get(Z);return $!==void 0&&this.now()<$}rateLimitedUntil(Z){return this.rateLimitedUntilMap.get(Z)}clearRateLimited(Z){this.rateLimitedUntilMap.delete(Z)}async refreshMain(Z){let $=x(Z);if(this.mainTokenFp&&this.mainTokenFp!==$)this.main=null,this.mainTokenFp=null;if(this.inflightMain&&this.inflightMainFp===$)return this.inflightMain;if(this.isBackedOff()){if(this.main)return this.main.quota;throw Error("Quota API rate-limited — try again later")}return this.inflightMainFp=$,this.inflightMain=this._fetchMain(Z),this.inflightMain}async refreshFallback(Z,$){let z=c.fallbackInflightKey(Z,$),X=this.inflightFallbacks.get(z);if(X)return X;if(this.isFallbackBackedOff(Z,$)){let G=this.getFallback(Z,$);if(G)return G.quota;throw Error("Quota API rate-limited — try again later")}let Y=this._fetchFallback(Z,$);return this.inflightFallbacks.set(z,Y),Y}async refreshAllFallbacks(Z){let $=this.now();for(let z of Z){if(z.enabled===!1)continue;if(GZ(z)||!z.access)continue;let X=this.getFallback(z.id,z.access);if(X&&$<X.refreshAfter)continue;try{await this.refreshFallback(z.id,z.access)}catch{}}}refreshMainInBackground(Z){let $=x(Z);if(this.inflightMain&&this.inflightMainFp===$)return;if(this.isBackedOff())return;this.refreshMain(Z).catch(()=>{})}isMainStale(){if(!this.main)return!0;return this.now()>=this.main.refreshAfter}isFallbackStale(Z,$){let z=this.getFallback(Z,$);if(!z)return!0;return this.now()>=z.refreshAfter}shouldRefreshOnRequestCount(Z){let $=Q4(this.storage);if($<=0)return!1;return Z>0&&Z%$===0}needsRefresh(Z){return this.isMainStale()||this.shouldRefreshOnRequestCount(Z)}updateStorage(Z){this.storage=Z,this.seedMainFromStorage(Z),this.seedMainBackoffFromStorage(Z)}seedMainFromStorage(Z,$){let z=K4(Z);if(!z)return;let X=$?x($):null;if(X&&z.tokenFingerprint&&z.tokenFingerprint!==X)return;let Y={quota:z.quota,refreshAfter:d$(z.quota,Z,z.checkedAt),checkedAt:z.checkedAt};if(this.main&&this.main.checkedAt>=Y.checkedAt&&(!X||!this.mainTokenFp||this.mainTokenFp===X))return;if(this.main=Y,this.mainTokenFp=z.tokenFingerprint??null,Z?.mainAccountId){if(this.mainQuotaAccountId&&this.mainQuotaAccountId!==Z.mainAccountId)this.clearRateLimited("main");this.mainQuotaAccountId=Z.mainAccountId}}seedMainBackoffFromStorage(Z){let $=Z?.quota?.mainLastQuotaApiError;this.mainLastApiError=$&&QZ($,this.now())?$:void 0}seedFallbacksFromAccounts(Z){let $=RZ(this.storage);for(let z of Z){if(z.enabled===!1)continue;if(!z.quota)continue;let X=Math.max(z.quota.primary?.checkedAt??0,z.quota.secondary?.checkedAt??0);if(X<=0)continue;let Y=this.getFallback(z.id,z.access);if(Y&&Y.checkedAt>=X)continue;this.setFallback(z.id,{quota:z.quota,refreshAfter:X+$,checkedAt:X},z.access,!1,z.accountId)}}isBackedOff(){return QZ(this.mainLastApiError,this.now())}isFallbackBackedOff(Z,$){if($){if(this.fallbackErrorTokenFps.get(Z)!==x($))return!1}return QZ(this.fallbackApiErrors.get(Z),this.now())}getLastApiError(){return this.mainLastApiError}static API_CALL_GAP_MS=1000;static fallbackInflightKey(Z,$){return JSON.stringify([Z,x($)])}static quotaLockName(Z){return`opencode-fallback-quota-refresh-${Z.replace(/[^a-zA-Z0-9._-]+/g,"-")||"account"}`}_enqueueApiFetch(Z){let $=async()=>{let X=this.now()-this.lastApiCallAt;if(X<c.API_CALL_GAP_MS)await new Promise((Y)=>{let G=B4(Y,c.API_CALL_GAP_MS-X);if(typeof G==="object"&&"unref"in G)G.unref()});return this.lastApiCallAt=this.now(),Z()},z=this.apiGate.then($,$);return this.apiGate=z.catch(()=>{}),z}async _fetchMain(Z){let $=x(Z);return this._enqueueApiFetch(async()=>{try{if(this.isBackedOff()){if(this.main)return this.main.quota;throw Error("Quota API rate-limited — try again later")}let z=await E({name:"opencode-main-quota-refresh",ttlMs:30000,path:this.configPath});if(!z){let X=this.main;if(X&&this.now()<X.refreshAfter)return X.quota;throw Error("Quota refresh is already in progress")}try{let X=this.now(),Y=await this._fetchQuota(Z),G=this.now();if(this.mainTokenFp=x(Z),this.main={quota:Y,refreshAfter:d$(Y,this.storage,G),checkedAt:G},H6(Y))this.clearRateLimited("main");return this.mainLastApiError=void 0,this.onMainQuotaFetched?.(Y,G,this.mainTokenFp,X),Y}catch(X){throw this._handleMainFetchError(X),X}finally{await z.release()}}finally{if(this.inflightMainFp===$)this.inflightMain=null,this.inflightMainFp=null}})}async _fetchFallback(Z,$){return this._enqueueApiFetch(async()=>{try{if(this.isFallbackBackedOff(Z,$)){let X=this.getFallback(Z,$);if(X)return X.quota;throw Error("Quota API rate-limited — try again later")}let z=await E({name:c.quotaLockName(Z),ttlMs:30000,path:this.configPath});if(!z){let X=this.getFallback(Z,$);if(X&&this.now()<X.refreshAfter)return X.quota;throw Error("Quota refresh is already in progress")}try{let X=await this._fetchQuota($),Y=this.now();return this.setFallback(Z,{quota:X,refreshAfter:Y+RZ(this.storage),checkedAt:Y},$,!0),this.fallbackApiErrors.delete(Z),this.fallbackErrorTokenFps.delete(Z),X}finally{await z.release()}}catch(z){throw this._handleFallbackFetchError(Z,$,z),z}finally{this.inflightFallbacks.delete(c.fallbackInflightKey(Z,$))}})}async _fetchQuota(Z){if(!this.fetchQuotaFn)throw Error("Quota fetch not available — no fetchQuotaFn injected (push-only mode)");return this.fetchQuotaFn({accessToken:Z,fetchImpl:this.fetchImpl,now:this.now})}static isAuthError(Z){return Z?.status===401}_handleMainFetchError(Z){if(c.isAuthError(Z))return;this.mainLastApiError=MZ({error:Z,now:this.now(),previous:this.mainLastApiError}),this.onApiError?.(this.mainLastApiError)}_handleFallbackFetchError(Z,$,z){if(c.isAuthError(z))return;let X=x($),Y=this.fallbackErrorTokenFps.get(Z)===X?this.fallbackApiErrors.get(Z):void 0;this.fallbackApiErrors.set(Z,MZ({error:z,now:this.now(),previous:Y})),this.fallbackErrorTokenFps.set(Z,X)}}function c$(Z){return Boolean(Z.primary||Z.secondary)}function H6(Z){let{primary:$,secondary:z}=Z;if(!$&&!z)return!1;if($&&$.usedPercent>=100)return!1;if(z&&z.usedPercent>=100)return!1;return!0}import{createHash as V4,randomUUID as U4}from"node:crypto";import{setTimeout as D4}from"node:timers/promises";import{readFile as E4}from"node:fs/promises";var BZ=I("refresh"),Y3=I("accounts"),F4=1e4,N4=15000,W6=50;function h(Z){return Z.type==="oauth"&&Z.corrupt!==!0}function j4(Z){let $=Z?.trim();if(!$)return!1;try{let z=new URL($);return(z.protocol==="http:"||z.protocol==="https:")&&!z.username&&!z.password}catch{return!1}}var M4="floors-v1";function d2(Z){return Z.costZeroing?.enabled!==!1}class G3 extends Error{code="ACCOUNT_REMOVED_DURING_REFRESH";constructor(Z){super(`Fallback account ${Z} was removed before refresh`);this.name="AccountRemovedDuringRefreshError"}}var _4=[401,403,429],u$={primary:0,secondary:0},q4=!1,Q6={primary:5,secondary:10};function N(Z){return Z!=null&&typeof Z==="object"&&!Array.isArray(Z)}var O4=new Set(["__proto__","constructor","prototype"]);function P4(Z){return Z.length>0&&!O4.has(Z)}function L4(Z){return Z instanceof G3||N(Z)&&Z.name==="AccountRemovedDuringRefreshError"&&Z.code==="ACCOUNT_REMOVED_DURING_REFRESH"}function X3(Z){return{id:typeof Z.id==="string"&&Z.id.trim()?Z.id.trim():U4(),label:typeof Z.label==="string"?Z.label:void 0,enabled:typeof Z.enabled==="boolean"?Z.enabled:void 0,addedAt:typeof Z.addedAt==="number"?Z.addedAt:void 0,lastUsed:typeof Z.lastUsed==="number"?Z.lastUsed:void 0,accountId:typeof Z.accountId==="string"?Z.accountId:void 0}}function i$(Z){if(!N(Z))return;if(typeof Z.message!=="string")return;let $=Number(Z.checkedAt);if(!Number.isFinite($))return;let z=Number(Z.nextRetryAt),X=Number(Z.retryCount);return{message:Z.message,checkedAt:$,nextRetryAt:Number.isFinite(z)?z:void 0,retryCount:Number.isFinite(X)?X:void 0,tokenHash:typeof Z.tokenHash==="string"?Z.tokenHash:void 0}}function S4(Z){if(!N(Z))return;let $={};for(let Y of["primary","secondary"]){let G=Z[Y];if(!N(G))continue;let B=Number(G.usedPercent),J=Number(G.remainingPercent),H=Number(G.checkedAt);if(!Number.isFinite(B)||!Number.isFinite(J)||!Number.isFinite(H))continue;let W=typeof G.windowMinutes==="number"?G.windowMinutes:Number.NaN;$[Y]={usedPercent:B,remainingPercent:J,checkedAt:H,resetsAt:typeof G.resetsAt==="string"?G.resetsAt:void 0,...Number.isFinite(W)&&W>0?{windowMinutes:W}:{}}}for(let Y of["resetCreditsAvailable","resetCreditsApplicable"]){let G=typeof Z[Y]==="number"?Z[Y]:Number.NaN;if(Number.isFinite(G)&&G>=0)$[Y]=G}let z=Z.spendControl;if(N(z)){let Y=Number(z.limit),G=Number(z.used),B=Number(z.remaining),J=Number(z.usedPercent),H=Number(z.remainingPercent);if(Number.isFinite(Y)&&Number.isFinite(G)&&Number.isFinite(B)&&Number.isFinite(J)&&Number.isFinite(H)&&typeof z.reached==="boolean")$.spendControl={limit:Y,used:G,remaining:B,usedPercent:J,remainingPercent:H,resetsAt:typeof z.resetsAt==="string"?z.resetsAt:void 0,unit:typeof z.unit==="string"?z.unit:void 0,source:typeof z.source==="string"?z.source:void 0,reached:z.reached}}let X=Z.credits;if(N(X)&&typeof X.hasCredits==="boolean"&&typeof X.unlimited==="boolean"&&typeof X.overageLimitReached==="boolean"){let Y=Number(X.balance);$.credits={hasCredits:X.hasCredits,unlimited:X.unlimited,overageLimitReached:X.overageLimitReached,...Number.isFinite(Y)?{balance:Y}:{}}}return Object.keys($).length?$:void 0}function R4(Z){if(!N(Z))return null;if(Z.type==="api"){let $=typeof Z.baseURL==="string"?Z.baseURL.trim():"",z=typeof Z.apiKey==="string"?Z.apiKey.trim():"";if(!j4($))return null;let X=Z.authHeader==="x-api-key"?"x-api-key":"authorization-bearer";return{...X3(Z),type:"api",apiKey:z||void 0,baseURL:$,authHeader:X}}if(Z.type!=="oauth")return null;if(Z.corrupt===!0){if(typeof Z.id!=="string"||!Z.id.trim())return null;return{...X3(Z),type:"oauth",corrupt:!0}}if(typeof Z.refresh!=="string"||!Z.refresh.trim()){if(!Object.hasOwn(Z,"refresh")||typeof Z.id!=="string"||!Z.id.trim())return null;return{...X3(Z),type:"oauth",corrupt:!0}}return{...X3(Z),type:"oauth",access:typeof Z.access==="string"?Z.access:void 0,refresh:Z.refresh,expires:typeof Z.expires==="number"?Z.expires:void 0,lastRefreshedAt:typeof Z.lastRefreshedAt==="number"?Z.lastRefreshedAt:void 0,lastRefreshError:i$(Z.lastRefreshError),lastQuotaRefreshError:i$(Z.lastQuotaRefreshError),quota:S4(Z.quota)}}function T4(Z){if(!N(Z))return;let $=Object.create(null);for(let[z,X]of Object.entries(Z)){if(!P4(z)||!N(X))continue;let Y={};if(N(X.inFlight))Y.inFlight={...X.inFlight};if(N(X.lastOutcome)&&typeof X.lastOutcome.code==="string"&&X.lastOutcome.code.length>0&&typeof X.lastOutcome.at==="number"&&Number.isFinite(X.lastOutcome.at))Y.lastOutcome={code:X.lastOutcome.code,at:X.lastOutcome.at,...N(X.lastOutcome.previousOutcome)&&typeof X.lastOutcome.previousOutcome.code==="string"&&X.lastOutcome.previousOutcome.code.length>0&&typeof X.lastOutcome.previousOutcome.at==="number"&&Number.isFinite(X.lastOutcome.previousOutcome.at)?{previousOutcome:{code:X.lastOutcome.previousOutcome.code,at:X.lastOutcome.previousOutcome.at}}:{}};if(typeof X.cooldownUntil==="number"&&Number.isFinite(X.cooldownUntil))Y.cooldownUntil=X.cooldownUntil;if(Object.keys(Y).length>0)$[z]=Y}return Object.keys($).length>0?$:void 0}var s$=new Set;function Z1(Z){if(Z.length===0)return;let $=JSON.stringify([...Z].sort());if(s$.has($))return;s$.add($),Y3.warn("account load-dropped, preserved on disk",{droppedIds:Z})}function $1(Z){if(!N(Z)||!Array.isArray(Z.accounts))return null;let $=Z.accounts,z=$.map(R4).filter((X)=>X!=null);if(z.length<$.length){let X=new Set;for(let B of $)if(N(B)&&typeof B.id==="string"&&B.id.trim())X.add(B.id.trim());let Y=new Set(z.map((B)=>B.id)),G=[];for(let B of X)if(!Y.has(B))G.push(B);Z1(G)}return{version:1,main:{type:"opencode",provider:"openai"},routing:N(Z.routing)?Z.routing:void 0,fallbackOn:Array.isArray(Z.fallbackOn)?Z.fallbackOn.filter((X)=>Number.isInteger(X)):void 0,refresh:N(Z.refresh)?Z.refresh:void 0,quota:N(Z.quota)?Z.quota:void 0,reset:T4(Z.reset),dump:N(Z.dump)?Z.dump:void 0,costZeroing:N(Z.costZeroing)?Z.costZeroing:void 0,killswitch:N(Z.killswitch)?Z.killswitch:void 0,logging:N(Z.logging)?Z.logging:void 0,cachekeep:N(Z.cachekeep)?Z.cachekeep:void 0,cacheKeep:N(Z.cacheKeep)?Z.cacheKeep:void 0,mainAccountId:typeof Z.mainAccountId==="string"?Z.mainAccountId:void 0,accounts:z}}function z1(Z){if(!("claustrum"in Z))return Z;let{claustrum:$,...z}=Z;return z}async function u(Z){try{return{exists:!0,value:JSON.parse(await E4(Z,"utf8"))}}catch($){if($.code==="ENOENT")return{exists:!1,value:null};throw $}}function i(Z){return Object.fromEntries(Object.entries(Z).filter(([,$])=>$!==void 0))}async function x4(Z){let $;try{$=(await u(Z)).value}catch{return null}return F6($)}function X1(Z,$){if(!N(Z))return Z;let z=N($)?$:{},X=N(z.main)?z.main:void 0,Y=N(z.accounts)?z.accounts:{},G=N(Z.quota)?Z.quota:{},B=N(Z.refresh)?Z.refresh:{},J=X??G,H=X??B,Q=B.mainRefreshLeaseId!==void 0?{id:B.mainRefreshLeaseId,until:B.mainRefreshLeaseUntil,tokenHash:B.mainRefreshLeaseTokenHash}:{id:H.refreshLeaseId,until:H.refreshLeaseUntil,tokenHash:H.refreshLeaseTokenHash},U=Array.isArray(Z.accounts)?Z.accounts.map((j)=>{if(!N(j))return j;let K=typeof j.id==="string"&&N(Y[j.id])?Y[j.id]:{};return{...j,...K}}):void 0;return Y1({...Z,refresh:i({...B,mainLastRefreshError:B.mainLastRefreshError??H.lastRefreshError,mainRefreshLeaseId:Q.id,mainRefreshLeaseUntil:Q.until,mainRefreshLeaseTokenHash:Q.tokenHash}),quota:i({...G,mainQuota:J.quota,mainQuotaCheckedAt:J.quotaCheckedAt,mainQuotaToken:J.quotaToken,mainLastQuotaApiError:J.lastQuotaApiError}),accounts:U})}async function C4(Z){let $=await u(Z.configPath);if(!$.exists)return null;let z=await u(Z.statePath);return $1(X1($.value,z.value))}function Y1(Z){return Object.fromEntries(Object.entries(Z).filter(([,$])=>$!==void 0))}function A4(Z){return i({id:Z.id,label:Z.label,type:Z.type,corrupt:Z.type==="oauth"&&Z.corrupt===!0?!0:void 0,enabled:Z.enabled,addedAt:Z.addedAt,accountId:Z.accountId,baseURL:Z.type==="api"?Z.baseURL:void 0,authHeader:Z.type==="api"?Z.authHeader:void 0})}function G1(Z){if(Z.type==="api")return i({apiKey:Z.apiKey,lastUsed:Z.lastUsed});if(Z.corrupt)return{};return i({access:Z.access,refresh:Z.refresh,expires:Z.expires,lastUsed:Z.lastUsed,lastRefreshedAt:Z.lastRefreshedAt,lastRefreshError:Z.lastRefreshError,lastQuotaRefreshError:Z.lastQuotaRefreshError,quota:Z.quota})}function B3(Z){return Math.max(Z?.primary?.checkedAt??0,Z?.secondary?.checkedAt??0)}function TZ(Z,$,z){if(z in $)Z[z]=$[z];else delete Z[z]}function b4(Z,$){return Z.access===$.access&&Z.refresh===$.refresh&&Z.expires===$.expires&&Z.lastRefreshedAt===$.lastRefreshedAt}function I4(Z,$){if(!b4(Z,$))return $;if(!("lastRefreshError"in $))return Z;if(!("lastRefreshError"in Z))return $;return($.lastRefreshError?.checkedAt??0)>(Z.lastRefreshError?.checkedAt??0)?$:Z}var k4=300000;function n$(Z,$){if(Z===void 0)return 0;return Z>$+k4?0:Z}function f4(Z,$,z){let X=Date.now(),Y=n$($.lastRefreshedAt,X),G=n$(z.lastRefreshedAt,X),B=$.expires??0,J=z.expires??0,H=G>Y?z:Y>G?$:J>B?z:B>J?$:I4($,z);TZ(Z,H,"access"),TZ(Z,H,"refresh"),TZ(Z,H,"expires"),TZ(Z,H,"lastRefreshedAt"),TZ(Z,H,"lastRefreshError")}function y4(Z,$){if(!N(Z))return $;let z=Z,X=B3(z.quota),Y=B3($.quota),G=X>Y,B=G?{...z,...$,quota:z.quota,lastQuotaRefreshError:z.lastQuotaRefreshError}:{...z,...$};if(!G&&!("lastQuotaRefreshError"in $))delete B.lastQuotaRefreshError;if(!("lastRefreshError"in $))delete B.lastRefreshError;if(typeof z.lastUsed==="number"&&(typeof $.lastUsed!=="number"||z.lastUsed>$.lastUsed))B.lastUsed=z.lastUsed;return f4(B,z,$),B}function B1(Z){let $=Z.refresh?i({enabled:Z.refresh.enabled,refreshBeforeExpiryMinutes:Z.refresh.refreshBeforeExpiryMinutes}):void 0,z=Z.quota?i({enabled:Z.quota.enabled,checkIntervalMinutes:Z.quota.checkIntervalMinutes,refreshEveryNRequests:Z.quota.refreshEveryNRequests,minimumRemaining:Z.quota.minimumRemaining,failClosedOnUnknownQuota:Z.quota.failClosedOnUnknownQuota}):void 0;return Y1({version:1,main:Z.main,routing:Z.routing,fallbackOn:Z.fallbackOn,refresh:$,quota:z,reset:Z.reset,dump:Z.dump,costZeroing:Z.costZeroing,killswitch:Z.killswitch,logging:Z.logging,cachekeep:Z.cachekeep,cacheKeep:Z.cacheKeep,mainAccountId:Z.mainAccountId,accounts:Z.accounts.map(A4)})}async function CZ(Z,$=!1){let z=Date.now(),X=z+N4,Y=0;while(Date.now()<=X){Y++;let J=await E({name:"save",ttlMs:F4,path:Z,renew:$});if(J)return J;let H=X-Date.now();if(H<=0)break;await D4(Math.min(W6+Q1(W6),H))}let G=Date.now()-z,B=Math.round(G/Math.max(1,Y));throw Error(`Timed out after ${G}ms waiting for the account store lock on ${Z} (${Y} attempts, ~${B}ms apart; retry interval is ${W6}ms). A gap near the retry interval means lock contention; a much larger one means this process's event loop was saturated and the wait expired without getting scheduled.`)}function J1(Z){let $=Object.fromEntries(Z.accounts.map((z)=>[z.id,G1(z)]));return{version:1,main:i({quota:Z.quota?.mainQuota,quotaCheckedAt:Z.quota?.mainQuotaCheckedAt,quotaToken:Z.quota?.mainQuotaToken,lastQuotaApiError:Z.quota?.mainLastQuotaApiError,lastRefreshError:Z.refresh?.mainLastRefreshError,refreshLeaseId:Z.refresh?.mainRefreshLeaseId,refreshLeaseUntil:Z.refresh?.mainRefreshLeaseUntil,refreshLeaseTokenHash:Z.refresh?.mainRefreshLeaseTokenHash}),accounts:$}}function F6(Z){if(!N(Z)||!Array.isArray(Z.accounts))return null;let $=new Set;for(let z of Z.accounts){if(!N(z))continue;if(typeof z.id!=="string")continue;let X=z.id.trim();if(!X)continue;$.add(X)}return $}function w4(Z,$,z,X){if(!N(Z)||!Array.isArray(Z.accounts))return{preservedRawEntries:[],preservedIds:[]};let Y=[],G=[];for(let B of $){if(z.has(B))continue;if(X.has(B))continue;let J=Z.accounts.find((H)=>N(H)&&typeof H.id==="string"&&H.id.trim()===B);if(!J)continue;Y.push(J),G.push(B)}return{preservedRawEntries:Y,preservedIds:G}}function h4(Z){if(!Array.isArray(Z))return[];let $=[];for(let z of Z){if(!N(z))continue;if(typeof z.id!=="string")continue;$.push(z.id)}return $}function m4(Z,$,z){let X=F6(Z);if(X===null)return[];let{preservedRawEntries:Y,preservedIds:G}=w4(Z,X,$,z);return Z1(G),Y}async function u2(Z,$,z={}){let{configPath:X,statePath:Y}=$,G=await CZ(X);try{let B=await CZ(Y);try{let J=await u(X),H=await u(Y),W=(J.exists?$1(X1(J.value,H.value)):null)??v4(),Q=new Set(W.accounts.map((D)=>D.id)),V=F6(J.value)??new Set,U=Z(W,{rawRosterIds:[...V],loadedRosterIds:[...Q]})??W,j=new Set(z.allowDrop??[]),K=m4(J.value,Q,j),M=B1(U),O=new Set((Array.isArray(M.accounts)?M.accounts:[]).map((D)=>N(D)&&typeof D.id==="string"?D.id.trim():"").filter(Boolean)),L=K.filter((D)=>{if(!N(D))return!1;if(typeof D.id!=="string")return!1;return!O.has(D.id.trim())}),IZ=N(J.value)?J.value:{},FZ={...z1(IZ),...M,accounts:[...Array.isArray(M.accounts)?M.accounts:[],...L]};if(z.canWrite&&!z.canWrite())return W;if(await y(X,FZ),z.canWrite&&!z.canWrite())return W;return await y(Y,J1(U)),Y3.debug("account config written",{accountCount:FZ.accounts.length,accountIds:h4(FZ.accounts)}),U}finally{await B.release()}}finally{await G.release()}}function v4(){return{version:1,main:{type:"opencode",provider:"openai"},accounts:[]}}function g4(Z,$){Z.main=Z.main??{};let z=typeof Z.main.quotaCheckedAt==="number"?Z.main.quotaCheckedAt:B3(Z.main.quota),X=typeof $.quota?.mainQuotaCheckedAt==="number"?$.quota.mainQuotaCheckedAt:B3($.quota?.mainQuota);if(z>X)return;Z.main.quota=$.quota?.mainQuota,Z.main.quotaCheckedAt=$.quota?.mainQuotaCheckedAt,Z.main.quotaToken=$.quota?.mainQuotaToken,Z.main.lastQuotaApiError=$.quota?.mainLastQuotaApiError}function p4(Z,$){Z.main=Z.main??{},Z.main.lastRefreshError=$.refresh?.mainLastRefreshError,Z.main.refreshLeaseId=$.refresh?.mainRefreshLeaseId,Z.main.refreshLeaseUntil=$.refresh?.mainRefreshLeaseUntil,Z.main.refreshLeaseTokenHash=$.refresh?.mainRefreshLeaseTokenHash}function V6(Z){if(Array.isArray(Z))return Z.map(V6);if(!N(Z))return Z;return Object.fromEntries(Object.entries(Z).filter(([,$])=>$!==void 0).map(([$,z])=>[$,V6(z)]))}async function l4(Z,$,z={mainQuota:!0,mainRefresh:!0,accounts:!0},X){let Y=$.statePath,G=await CZ(Y);try{let B=(await u(Y)).value,J=N(B)?{...B,version:1}:{version:1};if(z.mainQuota)g4(J,Z);if(z.mainRefresh)p4(J,Z);if(z.accounts){let H=z.accounts===!0?null:new Set(z.accounts),W=await x4($.configPath);J.accounts={...N(J.accounts)?J.accounts:{}};for(let Q of Z.accounts){if(H&&!H.has(Q.id))continue;if(W&&!W.has(Q.id))continue;J.accounts[Q.id]=y4(J.accounts[Q.id],G1(Q))}if(H){for(let Q of H)if(!Z.accounts.some((V)=>V.id===Q))delete J.accounts[Q]}if(W){for(let Q of Object.keys(J.accounts))if(!W.has(Q))delete J.accounts[Q]}}if(X&&!X())return;await y(Y,V6(J))}finally{await G.release()}}function d4(Z){return Z?.fallbackOn?.length?Z.fallbackOn:_4}function i2(Z,$){return d4($).includes(Z)}function c4(Z){let $=Z?.quota?.minimumRemaining||{};return{primary:$.primary??$["5h"]??u$.primary,secondary:$.secondary??$["1w"]??u$.secondary}}function U6(Z){return Z?.quota?.enabled!==!1}function AZ(Z){return Z?.quota?.failClosedOnUnknownQuota??q4}function H1(Z,$,z=Date.now()){if(!U6($))return!0;if(!Z)return!AZ($);let X=c4($),Y=AZ($);for(let G of["primary","secondary"]){let B=Z[G];if(!B)continue;if(z3(B,z)){if(Y)return!1;continue}if(B.remainingPercent<X[G])return!1}return!0}function J3(Z){return Z?.killswitch?.enabled===!0}function a$(Z){return{primary:Z?.primary??Z?.["5h"]??Q6.primary,secondary:Z?.secondary??Z?.["1w"]??Q6.secondary}}function s2(Z){return Z?.cacheKeep??Z?.cachekeep}function o$(Z){return typeof Z==="number"&&Number.isFinite(Z)?Z:0}function W1(Z,$){if(!Z?.killswitch)return Q6;if(Z.killswitch.schema===M4){let{accounts:z,defaults:X}=Z.killswitch,Y=$??"main",G=N(z)&&Object.hasOwn(z,Y)&&N(z[Y])?z[Y]:N(X)?X:void 0;return{primary:o$(G?.primary),secondary:o$(G?.secondary)}}if($&&Z.killswitch.accounts?.[$])return a$(Z.killswitch.accounts[$]);return a$(Z.killswitch.main)}function K1(Z,$,z,X=Date.now()){if(!J3($))return!0;if(!Z)return!AZ($);let Y=W1($,z),G=AZ($);for(let B of["primary","secondary"]){let J=Z[B];if(!J)continue;if(z3(J,X)){if(G)return!1;continue}if(J.remainingPercent<Y[B])return!1}return!0}function n2(Z,$,z,X){if(!J3(X))return 300;let Y=[],G=[{accountId:void 0,quota:Z},...$];for(let{accountId:J,quota:H}of G){if(!H)continue;let W=W1(X,J),Q=[],V=!1;for(let U of["primary","secondary"]){let j=H[U];if(!j||z3(j,z))continue;if(j.remainingPercent>=W[U])continue;let K=j.resetsAt?Date.parse(j.resetsAt):NaN;if(!Number.isFinite(K)||K<=z){V=!0;break}Q.push(K)}if(V||Q.length===0)continue;Y.push(Math.max(...Q))}if(Y.length===0)return 300;let B=Math.min(...Y);return Math.max(1,Math.ceil((B-z)/1000))}function r$(Z){return typeof Z.version==="number"&&Array.isArray(Z.accounts)}async function a2(Z,$){let{configPath:z,statePath:X}=$;if(!Z)return;try{let G=await u(z);if(G.exists&&N(G.value)&&r$(G.value))return}catch{}let Y=await CZ(z);try{let G=await CZ(X);try{let B=await u(z);if(B.exists&&N(B.value)){if(r$(B.value))return}if(!Z)return;let J={version:1,main:{type:"opencode",provider:"openai"},accounts:[]};if(Z.access){let Q=lZ({id_token:"",access_token:Z.access,refresh_token:Z.refresh});if(Q)J.mainAccountId=Q}let H=B.exists&&N(B.value)?B.value:{},W={...z1(H),...B1(J)};await y(z,W),await y(X,J1(J))}finally{await G.release()}}finally{await Y.release()}}function u4(Z){return Z?.refresh?.enabled!==!1}function i4(Z){return(Z?.refresh?.refreshBeforeExpiryMinutes??240)*60000}function Q1(Z){return Math.floor(Math.random()*(Z+1))}function JZ(Z,$,z){return!Z.access||!Z.expires||Z.expires-z<=i4($)}function s4(Z,$){return Boolean(Z.access&&typeof Z.expires==="number"&&Z.expires>$)}function EZ(Z,$){return Boolean(Z?.mainAccountId&&$.accountId&&$.accountId===Z.mainAccountId)}class V1 extends Error{constructor(Z){super(`Refusing to refresh account ${Z}: it holds the main account's credential while the main slot is live`);this.name="ShieldedMainRowRefreshError"}}var n4="common-auth-placeholder:v1:openai",U1="main";function o2(Z){return N(Z)&&Z.type==="oauth"&&(Z.refresh===n4||Z.refresh===g$)}function r2(Z){return Z?.accounts.find(($)=>$.id===U1&&$.enabled!==!1&&h($))}function t2(Z){if(!Z)return Z;return{...Z,accounts:Z.accounts.filter(($)=>$.id!==U1)}}function S(Z,$){let z=Z.accounts.findIndex((X)=>X.id===$.id);if(z!==-1)Z.accounts[z]=$}function xZ(Z){return Z instanceof Error?Z.message:String(Z)}function D6(Z,$,z){if($ instanceof SZ)return;Z.lastRefreshError=d6({error:$,now:z,refreshToken:Z.refresh,previous:Z.lastRefreshError})}function K6(Z,$,z){if($ instanceof SZ)return;if(Z.lastQuotaRefreshError=MZ({error:$,now:z,previous:Z.lastQuotaRefreshError}),$?.isRefreshError===!0)D6(Z,$,z)}function t$(Z,$){if(!Z)return!1;if(!Z.resetsAt)return!0;let z=Date.parse(Z.resetsAt);return Number.isFinite(z)?z>$:!0}function a4(Z,$){if(!Z)return!1;return t$(Z.primary,$)||t$(Z.secondary,$)}function o4(Z,$,z){if(!Z)return!1;let X=$?.quota?.checkIntervalMinutes??5,Y=Math.max(1,X)*60000,G=Math.max(Z.primary?.checkedAt??0,Z.secondary?.checkedAt??0);return z-G<Y}function e$(Z,$,z){return!o4(Z.quota,$,z)}function r4(Z,$,z,X){return I3(z)&&H1(Z.quota,$,X)&&a4(Z.quota,X)}function t4(Z){let $=Z?.quota?.checkIntervalMinutes??5;return Math.max(1,$)*60000}var e4=60000,Z9=60000,$9=600000;function z9(Z){return`fallback-oauth-refresh-${V4("sha256").update(Z).digest("base64url").slice(0,16)}`}var X9=1e4,Y9=100;class G9{now;fetchImpl;paths;refreshPromises=new Map;refreshTimer=null;quotaTimer=null;quotaManager;onFallbackStorageChanged;options;constructor(Z){this.options=Z,this.now=Z.now??Date.now,this.fetchImpl=Z.fetchImpl??fetch,this.paths=Z.paths,this.quotaManager=Z.quotaManager??null,this.onFallbackStorageChanged=Z.onFallbackStorageChanged}assertNotTombstoned(Z){if(Z)$3(Z.refresh)}seedFallbackQuota(Z,$){if(!this.quotaManager)return;if(!Z.quota)return;let z=Math.max(Z.quota.primary?.checkedAt??0,Z.quota.secondary?.checkedAt??0);if(z<=0)return;let X=this.quotaManager.getFallback(Z.id,Z.access);if(X&&X.checkedAt>=z)return;this.quotaManager.setFallback(Z.id,{quota:Z.quota,refreshAfter:z+t4($),checkedAt:z},Z.access,!1,Z.accountId)}async load(){return C4(this.paths)}selectionBookkeeping=Promise.resolve();selectionBookkeepingSettled(){return this.selectionBookkeeping}async save(Z,$){await l4(Z,this.paths,{accounts:$??!0},this.options.canWrite)}startBackgroundRefresh(){let Z=async()=>{if(await this.options.backgroundRefreshPaused?.())return;if(await this.refreshDueAccounts(),this.options.fetchQuotaFn)await this.refreshQuotaForDueAccounts()};if(Z().catch(()=>{}),!this.refreshTimer){if(this.refreshTimer=setInterval(()=>{Z().catch(()=>{})},e4+Q1(Z9)),"unref"in this.refreshTimer)this.refreshTimer.unref()}}stopBackgroundRefresh(){if(this.refreshTimer)clearInterval(this.refreshTimer);if(this.quotaTimer)clearInterval(this.quotaTimer);this.refreshTimer=null,this.quotaTimer=null}async getUsableFallbackAccounts(Z){let $=Z!==void 0?Z:await this.load();if(!$)return[];let z=[],X=!1;for(let Y of $.accounts){if(Y.enabled===!1||!h(Y))continue;if(EZ($,Y))continue;if(GZ(Y))continue;let G=!1,B=Y;try{if(JZ(B,$,this.now())){let J=B.lastRefreshError;if(J&&r(J,B.refresh,this.now()))throw G=!0,Error(gZ(J,this.now()));try{B=await this.refreshAccount(B,$),X=!0}catch(H){if(L4(H))continue;G=!0;let W=$.accounts.find((Q)=>Q.id===Y.id&&h(Q));if(W&&!r(W.lastRefreshError,W.refresh,this.now()))D6(W,H,this.now()),S($,W),X=!0;throw H}}if(this.seedFallbackQuota(B,$),this.accountPassesQuotaPolicy(this.quotaPolicyAccount(B),$))z.push(B)}catch(J){let H=s4(B,this.now());if(G){if(!H)continue}else if(!H)continue;if(r4(B,$,J,this.now()))BZ.debug("fallback quota using cached quota after refresh error",{pid:process.pid,accountId:B.id,error:xZ(J)}),z.push(B);else if(!AZ($))z.push(B)}}if(X){let Y=structuredClone($);this.selectionBookkeeping=this.selectionBookkeeping.then(()=>this.save(Y)).catch((G)=>{Y3.warn("fallback selection bookkeeping not persisted",{pid:process.pid,error:xZ(G)})})}return z}async markUsed(Z){try{let $=await this.load();if(!$)return;let z=$.accounts.find((X)=>X.id===Z.id);if(!z)return;z.lastUsed=this.now(),await this.save($,[z.id])}catch($){Y3.warn("lastUsed stamp not persisted",{pid:process.pid,accountId:Z.id,error:xZ($)})}}accountPassesQuotaPolicy(Z,$){return H1(Z.quota,$,this.now())}quotaPolicyAccount(Z){if(!this.quotaManager)return Z;let $=this.quotaManager.getFallback(Z.id,Z.access)?.quota;return $?{...Z,quota:$}:Z}async refreshDueAccounts(){let Z=await this.load();if(!Z||!u4(Z))return;let $=!1;for(let z of Z.accounts){if(z.enabled===!1||!h(z))continue;if(EZ(Z,z))continue;if(GZ(z))continue;if(!JZ(z,Z,this.now()))continue;if(r(z.lastRefreshError,z.refresh,this.now()))continue;try{BZ.debug("fallback oauth background due",{pid:process.pid,accountId:z.id,expiresInMs:z.expires?z.expires-this.now():void 0}),await this.refreshAccount(z,Z),$=!0}catch(X){BZ.warn("fallback oauth background failed",{pid:process.pid,accountId:z.id,error:xZ(X)}),D6(z,X,this.now()),S(Z,z),$=!0}}if($)await this.save(Z)}async refreshQuotaForDueAccounts(){let Z=await this.load();if(!Z||!U6(Z))return;if(!this.options.fetchQuotaFn)return;let $=!1;for(let z of Z.accounts){if(z.enabled===!1||!h(z))continue;if(EZ(Z,z))continue;if(GZ(z))continue;let X=z;try{if(JZ(X,Z,this.now())){if(r(X.lastRefreshError,X.refresh,this.now()))continue;X=await this.refreshAccount(X,Z),$=!0}if(QZ(X.lastQuotaRefreshError,this.now()))continue;if(this.seedFallbackQuota(X,Z),!(this.quotaManager?this.quotaManager.isFallbackStale(X.id,X.access):e$(X,Z,this.now())))continue;await this.refreshAccountQuota(X,Z),$=!0}catch(Y){K6(z,Y,this.now()),S(Z,z),$=!0}}if($)await this.save(Z),this.onFallbackStorageChanged?.()}async refreshQuotaForAllAccounts(Z={}){let $=await this.load(),z=[];if(!$||!U6($))return{storage:$,errors:z};if(!this.options.fetchQuotaFn)return{storage:$,errors:z};let X=Z.force??!1,Y=!1;for(let G of $.accounts){if(G.enabled===!1||!h(G))continue;if(EZ($,G))continue;if(GZ(G))continue;let B=G;try{if(JZ(B,$,this.now())){let J=B.lastRefreshError;if(J&&r(J,B.refresh,this.now()))throw Error(gZ(J,this.now()));B=await this.refreshAccount(B,$),Y=!0}if(!X&&!e$(B,$,this.now())){if(B.lastQuotaRefreshError)B.lastQuotaRefreshError=void 0,S($,B),Y=!0;continue}await this.refreshAccountQuota(B,$),Y=!0}catch(J){K6(G,J,this.now()),S($,G),Y=!0,z.push({accountId:G.id,message:xZ(J)})}}if(Y)await this.save($);return{storage:$,errors:z}}async refreshAccount(Z,$,z={}){let X=this.refreshPromises.get(Z.id);if(X){let B=await X;return S($,B),B}let Y=this.refreshAccountNow(Z,$,z).finally(()=>{this.refreshPromises.delete(Z.id)});this.refreshPromises.set(Z.id,Y);let G=await Y;return S($,G),G}async waitForConcurrentFallbackRefresh(Z,$,z,X){let Y=Date.now()+X9;while(Date.now()<Y){await new Promise((W)=>setTimeout(W,Y9));let G=await this.load(),B=G?.accounts.find((W)=>W.id===Z.id&&h(W));if(!B)continue;if(this.assertNotTombstoned(B),(B.access!==z.access||B.refresh!==z.refresh||(B.expires??0)>(z.expires??0)+60000)&&(X.force||!JZ(B,G,this.now())))return S($,B),BZ.debug("fallback oauth joined concurrent refresh",{pid:process.pid,accountId:B.id,expiresInMs:B.expires?B.expires-this.now():void 0}),B;let H=B.lastRefreshError;if(H&&r(H,B.refresh,this.now()))throw S($,B),Error(gZ(H,this.now()))}return null}assertNotShieldedMainRow(Z,$,z){if(z.asPoolMain||!$)return;if(EZ(Z,$))throw new V1($.id)}async refreshAccountNow(Z,$,z){let X=await this.load(),Y=X?.accounts.find((J)=>J.id===Z.id&&h(J));if(this.assertNotTombstoned(Y),this.assertNotShieldedMainRow(X,Y,z),Y&&!z.force&&!JZ(Y,X,this.now()))return S($,Y),Y;let G=Y??Z,B=await E({name:z9(G.id),ttlMs:$9,path:this.paths.configPath,renew:!0});if(!B){BZ.debug("fallback oauth refresh skipped file lock",{pid:process.pid,accountId:G.id});let J=await this.waitForConcurrentFallbackRefresh(Z,$,G,z);if(J)return J;throw Error("Fallback OAuth refresh is already in progress")}try{if(X=await this.load(),Y=X?.accounts.find((Q)=>Q.id===Z.id&&h(Q)),this.assertNotTombstoned(Y),this.assertNotShieldedMainRow(X,Y,z),Y&&!z.force&&!JZ(Y,X,this.now()))return S($,Y),Y;if(!Y)throw new G3(Z.id);G=Y;let J=this.options.refreshFn??(async()=>{throw Error("No refreshFn injected into FallbackAccountManager")});BZ.debug("fallback oauth refresh request start",{pid:process.pid,accountId:G.id,force:z.force===!0,expiresInMs:G.expires?G.expires-this.now():void 0});let H=await J({refreshToken:G.refresh,fetchImpl:this.fetchImpl,now:this.now});if(G.access=H.access,G.refresh=H.refresh,G.expires=H.expires,G.lastRefreshedAt=H.expires-H.expiresIn*1000,G.lastRefreshError=void 0,S($,G),await this.save($),!(await this.load())?.accounts.some((Q)=>Q.id===Z.id))throw new G3(Z.id);return BZ.debug("fallback oauth refresh succeeded",{pid:process.pid,accountId:G.id,expiresInMs:G.expires?G.expires-this.now():void 0}),G}finally{await B.release()}}async refreshAccountQuota(Z,$){let z=Z;if(this.assertNotTombstoned(z),!z.access)throw Error(`Fallback account ${Z.id} has no access token`);if(!this.options.fetchQuotaFn)throw Error("No fetchQuotaFn injected — wham/usage supplement is disabled");let X=this.options.fetchQuotaFn??(async()=>{throw Error("No fetchQuotaFn injected — wham/usage supplement is disabled")}),Y=(G)=>this.quotaManager?this.quotaManager.refreshFallback(z.id,G):X({accessToken:G,fetchImpl:this.fetchImpl,now:this.now});try{if(!z.access)throw Error(`Fallback account ${Z.id} has no access token`);let G=await Y(z.access);z.quota=G,z.lastQuotaRefreshError=void 0,S($,z),await this.save($)}catch(G){throw K6(Z,G,this.now()),S($,Z),G}}}var D1=["primary","secondary"];function N6(Z){return Z!=null&&typeof Z==="object"&&!Array.isArray(Z)}function bZ(Z){return typeof Z==="number"&&Number.isFinite(Z)}function B9(Z,$){if(!N6($))return;let z=$.usedPercent;if(!bZ(z)||z<0||z>100)return;return{label:Z,usedPercent:z,...typeof $.resetsAt==="string"?{resetsAt:$.resetsAt}:{},...bZ($.windowMinutes)&&$.windowMinutes>0?{windowMinutes:$.windowMinutes}:{}}}function J9(Z){let $=Z.spendControl;if(N6($)&&typeof $.reached==="boolean"){let z=(X)=>bZ($[X])?{[X]:$[X]}:{};return{kind:"reading",reached:$.reached,...z("remainingPercent"),...z("usedPercent"),...z("limit"),...z("used"),...z("remaining"),...typeof $.resetsAt==="string"?{resetsAt:$.resetsAt}:{},...typeof $.unit==="string"?{unit:$.unit}:{}}}if(Z.spendControlCleared===!0)return{kind:"cleared"};return}function $7(Z,$,z){if(!N6(Z)||!bZ($))return;let X=[],Y=[];for(let H of D1){let W=B9(H,Z[H]);if(W)X.push(W);else if(z)Y.push({label:H})}let G=J9(Z),B=Z.resetCreditsAvailable,J=typeof B==="number"&&Number.isSafeInteger(B)&&B>=0?{resetCredits:{value:B,checkedAt:$}}:void 0;if(X.length===0&&Y.length===0&&!G&&!J)return;return{checkedAt:$,...X.length>0?{readings:X}:{},...Y.length>0?{coverage:Y}:{},...G?{budget:G}:{},...J?{counters:J}:{}}}function F1(Z){if(!n(Z))return;let $=b(Z),z={};for(let X of D1){let Y=$.limits.find((B)=>B.label===X&&B.kind==="reading");if(!Y||!bZ(Y.usedPercent))continue;let G={usedPercent:Y.usedPercent,remainingPercent:100-Y.usedPercent,checkedAt:Y.checkedAt,...Y.resetsAt!==void 0?{resetsAt:Y.resetsAt}:{},...Y.windowMinutes!==void 0?{windowMinutes:Y.windowMinutes}:{}};z[X]=G}return z.primary||z.secondary?z:void 0}var j1="main";function J7(Z){return Z.find(($)=>$.id.startsWith("vault:")&&$.credentialId==="chatgpt:openai")?.id??null}function H7(Z,$,z){let X=new Map;if(J3($))for(let Y of Z)X.set(Y.id,K1(F1(Y.quota),$,Y.id===j1?void 0:Y.id,z));return X}var W7=5,H9=5000;function K7(Z){if(Z==="ordered")return"roster";return Z==="fallback-first"?"fallback-first":"main-first"}function Q7(Z,$=H9){let z=Z.rows.filter((B)=>B.kind==="oauth"&&Z.killswitch.get(B.id)!==!1&&b(B.quota).limits.length===0);if(z.length===0)return;if(f({rows:Z.rows,now:Z.now,rateLimitMarks:Z.rateLimitMarks,refreshBackoff:Z.refreshBackoff,requestPull:()=>{}}).admitted.some((B)=>Z.killswitch.get(B.id)!==!1))return;let Y=[];if(f({rows:z,now:Z.now,rateLimitMarks:Z.rateLimitMarks,refreshBackoff:Z.refreshBackoff,requestPull:(B)=>{let J=Z.requestPull(B);if(J)Y.push(J.catch(()=>{}))}}),Y.length===0)return;let G;return Promise.race([Promise.all(Y),new Promise((B)=>{G=setTimeout(B,$)})]).then(()=>{}).finally(()=>clearTimeout(G))}function j6(Z){return Z.reason==="exhausted"||Z.reason==="budget-spent"}function M1(Z,$,z){if(Z===void 0)return{reason:"no-credential"};if(z.get(Z)===!1)return{reason:"killswitch"};let X=$.excluded.find((G)=>G.id===Z);if(X?.reason==="rate-limited")return{reason:"mid-stream-rate-limit",resetAtMs:X.until};if(X)return{reason:"no-credential"};let Y=$.refused.find((G)=>G.id===Z);if(Y&&"resetAtMs"in Y)return{reason:"quota-exhausted",resetAtMs:Y.resetAtMs};if(Y)return{reason:"quota-unknown"};return{reason:"no-credential"}}function N1(Z,$,z){if($.refused.find((Y)=>!j6(Y)&&z.get(Y.id)!==!1))return{reason:"quota-unknown"};return M1(Z[0],$,z)}function V7(Z){let $=Z.replayable!==!1,z=Z.mainId===void 0?j1:Z.mainId??"",X=$?Z.placement:"main-first",Y=P3({rows:Z.rows,placement:X,formerMainId:z,killswitch:Z.killswitch,rateLimitMarks:Z.rateLimitMarks,refreshBackoff:Z.refreshBackoff,now:Z.now,requestPull:Z.requestPull}),G=mZ(Z.rows.map((H)=>H.id),X,z),B=new Set(Y.admission.refused.filter((H)=>j6(H)&&Z.killswitch.get(H.id)!==!1).map((H)=>H.id)),J=G.filter((H)=>B.has(H));if(!$){let H=G.includes(z),W=H?z:Y.order[0]??J[0];if(W!==void 0&&Y.order.includes(W))return{kind:"send",order:[W],lastPath:!1};if(W!==void 0&&B.has(W))return{kind:"send",order:[W],lastPath:!0};return{kind:"block",block:H?M1(z,Y.admission,Z.killswitch):N1(G,Y.admission,Z.killswitch)}}if(Y.order.length>0)return{kind:"send",order:Y.order,lastPath:!1};if(J.length>0)return{kind:"send",order:J,lastPath:!0};return{kind:"block",block:N1(G,Y.admission,Z.killswitch)}}function U7(Z){let $=f({rows:Z.rows,rateLimitMarks:Z.rateLimitMarks,refreshBackoff:Z.refreshBackoff,now:Z.now,requestPull:Z.requestPull}),z=new Map;for(let X of Z.rows)z.set(X.id,b(X.quota));for(let X of $.admitted)if(X.projection)z.set(X.id,X.projection);return{projections:z,excluded:new Set($.excluded.map((X)=>X.id))}}function _1(Z,$,z){let X=z.exclude,Y=X?Z.rows.filter((B)=>!X.has(B.id)):Z.rows,G=new Map;for(let B of Y){let J=$.resetCredits(B.id);if(J!==void 0)G.set(B.id,J)}return x3({rows:Y,now:Z.now,rateLimitMarks:Z.rateLimitMarks,refreshBackoff:Z.refreshBackoff,requestPull:Z.requestPull,killswitch:Z.killswitch,requestBytes:$.requestBytes,...z.pendingBytes?{pendingBytes:z.pendingBytes}:{},rowReservePercent:(B)=>$.reservePercent(B.id),refusedPinPolicy:"move-on-confirmed-exhaustion",resetCreditsApplicable:G,...z.pin===void 0?{}:{pin:{accountId:z.pin}},...$.onEmptyWeightedSet?{onEmptyWeightedSet:$.onEmptyWeightedSet}:{}})}function D7(Z,$,z,X){let Y=_1(Z,$,{exclude:z,pendingBytes:X});if(Y.outcome!=="dispatch"||Y.source==="pin")return;return{accountId:Y.accountId,source:Y.source,...Y.quotaCheckedAt===void 0?{}:{quotaCheckedAt:Y.quotaCheckedAt}}}function F7(Z,$,z){let X=Z.killswitch.get(z)===!1,Y=_1(Z,$,{pin:z});if(Y.outcome==="dispatch"){if(Y.pin.action==="assign")return{kind:"move",reason:X?"killswitch":"exhausted"};return Y.accountId===z?{kind:"serve"}:{kind:"detour"}}let G=Y.admission.refused.find((B)=>B.id===z);if(!X&&G&&j6(G))return{kind:"last-path"};return{kind:"none"}}function N7(Z,$,z,X){let Y=Z.killswitch.get(z);return E3({quota:$.projections.get(z),now:Z.now,...X===void 0?{}:{status:X},...Y===void 0?{}:{killswitchPasses:Y}})}import{tmpdir as q1}from"node:os";import{join as O1}from"node:path";var W9=["error","warn","info","debug","trace"];function K9(){return process.env.OPENCODE_OPENAI_AUTH_LOG_FILE??(process.platform==="win32"?O1(q1(),"opencode-openai-auth","opencode-openai-auth.log"):O1(q1(),"opencode-openai-auth.log"))}function Q9(){let Z=process.env.OPENCODE_OPENAI_AUTH_LOG_LEVEL;return Z&&W9.includes(Z)?Z:void 0}P1({file:K9,level:Q9});if(process.once("beforeExit",async()=>{try{await H3()}catch{process.emitWarning("OpenAI auth could not flush its log file at shutdown")}}),process.platform!=="win32")process.on("exit",()=>H3());
90
- export{n as vc,KZ as wc,d1 as xc,C6 as yc,A1 as zc,b6 as Ac,k1 as Bc,b as Cc,w6 as Dc,u1 as Ec,mZ as Fc,i1 as Gc,L3 as Hc,s1 as Ic,o1 as Jc,z8 as Kc,l6 as Lc,d6 as Mc,r as Nc,gZ as Oc,n6 as Pc,o6 as Qc,J8 as Rc,u6 as Sc,i6 as Tc,lZ as Uc,W8 as Vc,$Z as Wc,U8 as Xc,D8 as Yc,F8 as Zc,N8 as _c,G0 as $c,J0 as ad,H0 as bd,W0 as cd,v3 as dd,F as ed,I8 as fd,k8 as gd,f8 as hd,i3 as id,h8 as jd,C$ as kd,m8 as ld,k as md,v$ as nd,z2 as od,GZ as pd,SZ as qd,q2 as rd,O2 as sd,x2 as td,x as ud,c as vd,h as wd,M4 as xd,d2 as yd,Q6 as zd,P4 as Ad,x4 as Bd,C4 as Cd,u2 as Dd,l4 as Ed,d4 as Fd,i2 as Gd,H1 as Hd,J3 as Id,s2 as Jd,W1 as Kd,K1 as Ld,n2 as Md,a2 as Nd,i4 as Od,EZ as Pd,U1 as Qd,o2 as Rd,r2 as Sd,t2 as Td,$9 as Ud,z9 as Vd,G9 as Wd,$7 as Xd,F1 as Yd,j1 as Zd,J7 as _d,H7 as $d,W7 as ae,K7 as be,Q7 as ce,V7 as de,U7 as ee,D7 as fe,F7 as ge,N7 as he};
@@ -1,2 +0,0 @@
1
- import{ef as O}from"./index-xwvze96g.js";import{randomUUID as w}from"node:crypto";import{lstat as N,readFile as B,rename as b,unlink as U}from"node:fs/promises";import{dirname as V,resolve as L}from"node:path";var S=process.platform==="win32",W=new Set;function I(j){if(j?.reason==="io-error"){if(j.win32Code===2||j.win32Code===3)return"ENOENT";if(j.win32Code===80||j.win32Code===183)return"EEXIST"}return j?.code??"ERR_PRIVATE_FILE"}var C;function q(){return C??=import("@cortexkit/private-files"),C}class R extends Error{path;stage;code;win32Code;reason;published=!1;durabilityConfirmed=!1;fileDurable=!1;attempts=0;elapsedMs=0;orphanPath;constructor(j,G,A){let z=A;super(`Private file refused at ${G}: ${j} (${z?.reason??z?.code??"io-error"}). Use a safe parent directory. Repair only a named secret file in safe ancestry whose owner the published policy trusts, without changing its owner or any existing directory. Previously exposed credentials may need rotation. Windows requires the private-files native prebuild and an ACL-persisting local filesystem such as NTFS.`,{cause:A});this.path=j,this.stage=G,this.name="PrivateFileError",this.code=I(z),this.win32Code=z?.win32Code,this.reason=z?.reason}}async function x(j,G,A){try{return await A()}catch(z){if(z instanceof R)throw z;throw new R(j,G,z)}}var E;async function _(j,G){j=L(j),G??=E,await x(j,"safe-parent",async()=>{let A=await(await q()).verifySafeParent(j,G);if(A.ok===!1){if(A.reason==="io-error"||A.reason==="wrong-kind")await N(j);throw new R(A.level??A.path,"safe-parent",{...A,code:"ERR_PRIVATE_FILES_SECURITY"})}})}async function T(j,G,A=!1){if(j=L(j),G==="directory")return _(j);await x(j,"verify",async()=>{let z=await q(),K=await z.verifyOwnerOnly(j),H=!1;if(!K.ok){let{reason:M}=K.refusal;if(M==="io-error")await z.verifyPrivatePath(j,G);if(A&&[z.EXTRA_ACE,z.NOT_PROTECTED,z.NULL_DACL,z.EMPTY_DACL].includes(M))await _(V(j)),await z.securePrivatePath(j,G),H=!0;else throw Object.assign(Error("Owner-only verification refused"),{reason:M,code:"ERR_PRIVATE_FILES_SECURITY"})}if(await z.verifyPrivatePath(j,G),H&&!W.has(j))W.add(j),process.emitWarning(`Private permissions tightened: ${j}. This object may have been readable before; rotate credentials if needed.`,"PrivateFileMigration")})}async function D(j,G=!1,A){j=L(j),await x(j,"directory",async()=>{let z=await q();try{return await N(j),await _(j,A)}catch(H){if(I(H)!=="ENOENT")throw H}let K=V(j);if(K===j)throw Object.assign(Error("Missing root"),{code:"ENOENT"});await D(K,!1,A);try{await z.createOwnerOnly(j,{kind:"dir"})}catch(H){if(I(H)!=="EEXIST")throw H}await _(j,A)})}async function m(j,G=!1){if(!S)return B(j,"utf8");return(await k(j,G)).toString("utf8")}async function k(j,G=!1){if(!S)return B(j);if(j=L(j),G)await _(V(j)),await T(j,"file",!0);return x(j,"read",async()=>(await q()).readOwnerOnly(j))}async function F(j,G){await _(V(L(j))),await x(j,"create",async()=>{await(await q()).createPrivateFile(L(j),G)})}async function c(j){await _(V(L(j))),await x(j,"directory-create",async()=>{await(await q()).createOwnerOnly(L(j),{kind:"dir"})})}async function g(j,G,A={}){j=L(j),G=L(G);let z=A.now??(()=>performance.now()),K=z(),H=Math.min(K+500,A.deadline??1/0),M=[0,10,20,40,80,100],Y,$=0;for(let Q of M){if(z()>=H)break;if(Q)await(A.sleep??((X)=>new Promise((Z)=>setTimeout(Z,X))))(Math.min(Q,Math.max(0,H-z())));if(z()>=H)break;if(await A.beforeRename?.(),z()>=H)break;$++;try{return await(A.rename??b)(j,G),{attempts:$,elapsedMs:z()-K}}catch(X){Y??=X;let Z=X;if(!(Z.win32Code!==void 0?Z.win32Code===32||Z.win32Code===33:["EBUSY","EPERM","EACCES"].includes(Z.code??"")&&!Z.reason))break}}let J=new R(G,"rename",Y??Object.assign(Error("Publication deadline expired"),{code:"ETIMEDOUT"}));throw J.attempts=$,J.elapsedMs=z()-K,J}async function v(j,G,A={}){j=L(j),await D(V(j));try{await T(j,"file",!0)}catch(J){if(J.code!=="ENOENT")throw J}let z=L(A.stagePath??`${j}.${w()}.tmp`);if(V(z)!==V(j))throw new R(j,"stage-directory",{code:"EXDEV"});let K=!1,H=!1,M={attempts:0,elapsedMs:0},Y="stage-create",$=(J)=>{try{A.onOutcome?.({path:j,stage:J?.stage??"published",published:H,fileDurable:H,durabilityConfirmed:!1,attempts:J?.attempts??M.attempts,elapsedMs:J?.elapsedMs??M.elapsedMs,...J&&{code:J.code,win32Code:J.win32Code}})}catch{}};try{if(await F(z,G),K=!0,Y="before-rename",M=await g(z,j,A),K=!1,H=!0,Y="published-callback",A.onRenamed?.(),Y="published-verify",await T(j,"file"),A.durable&&A.durability!=="file-only-on-windows")throw new R(j,"directory-sync-unsupported",{code:"ENOTSUP"});$()}catch(J){let Q=J instanceof R?J:new R(j,Y,J);if(Q.published=H,Q.fileDurable=H,H)Object.assign(Q,M);if(K){try{await U(z)}catch{Q.orphanPath=z}K=!1}throw $(Q),Q}finally{if(K)await U(z).catch(()=>{})}}
2
- export{S as Pe,R as Qe,x as Re,_ as Se,T as Te,D as Ue,m as Ve,F as We,c as Xe,g as Ye,v as Ze};