@pathrule/cli 0.0.4 → 0.0.5

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 (2) hide show
  1. package/dist/index.js +132 -132
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import {randomUUID,randomBytes,createHash}from'crypto';import {homedir,tmpdir}from'os';import ze,{dirname,join,basename,normalize,resolve,relative,isAbsolute,sep,posix,win32}from'path';import {rm as rm$1,mkdir,chmod,appendFile,writeFile,unlink,readFile,stat,rename,access,mkdtemp,readdir,open,realpath,rmdir}from'fs/promises';import {createServer}from'http';import {execFile,spawn,execFileSync}from'child_process';import {createRequire}from'module';import {emitKeypressEvents}from'readline';import {createInterface}from'readline/promises';import {promisify}from'util';import {constants,promises}from'fs';import {fileURLToPath}from'url';var th=Object.create;var Us=Object.defineProperty;var rh=Object.getOwnPropertyDescriptor;var nh=Object.getOwnPropertyNames;var sh=Object.getPrototypeOf,ih=Object.prototype.hasOwnProperty;var E=(t,e)=>()=>(t&&(e=t(t=0)),e);var oh=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ah=(t,e)=>{for(var r in e)Us(t,r,{get:e[r],enumerable:true});},lh=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of nh(e))!ih.call(t,s)&&s!==r&&Us(t,s,{get:()=>e[s],enumerable:!(n=rh(e,s))||n.enumerable});return t};var ch=(t,e,r)=>(r=t!=null?th(sh(t)):{},lh(Us(r,"default",{value:t,enumerable:true}),t));var wa=oh((CC,_a)=>{var{hasOwnProperty:Ms}=Object.prototype,Ws=(t,e={})=>{typeof e=="string"&&(e={section:e}),e.align=e.align===true,e.newline=e.newline===true,e.sort=e.sort===true,e.whitespace=e.whitespace===true||e.align===true,e.platform=e.platform||typeof process<"u"&&process.platform,e.bracketedArray=e.bracketedArray!==false;let r=e.platform==="win32"?`\r
2
+ import {randomUUID,randomBytes,createHash}from'crypto';import {homedir,tmpdir}from'os';import ze,{dirname,join,basename,normalize,resolve,relative,isAbsolute,sep,posix,win32}from'path';import {rm as rm$1,mkdir,chmod,appendFile,writeFile,unlink,readFile,stat,rename,access,mkdtemp,readdir,open,realpath,rmdir}from'fs/promises';import {createServer}from'http';import {execFile,spawn,execFileSync}from'child_process';import {createRequire}from'module';import {emitKeypressEvents}from'readline';import {createInterface}from'readline/promises';import {promisify}from'util';import {constants,promises}from'fs';import {fileURLToPath}from'url';var th=Object.create;var Ms=Object.defineProperty;var rh=Object.getOwnPropertyDescriptor;var nh=Object.getOwnPropertyNames;var sh=Object.getPrototypeOf,ih=Object.prototype.hasOwnProperty;var E=(t,e)=>()=>(t&&(e=t(t=0)),e);var oh=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ah=(t,e)=>{for(var r in e)Ms(t,r,{get:e[r],enumerable:true});},lh=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of nh(e))!ih.call(t,s)&&s!==r&&Ms(t,s,{get:()=>e[s],enumerable:!(n=rh(e,s))||n.enumerable});return t};var ch=(t,e,r)=>(r=t!=null?th(sh(t)):{},lh(Ms(r,"default",{value:t,enumerable:true}),t));var wa=oh((RC,_a)=>{var{hasOwnProperty:Us}=Object.prototype,Ws=(t,e={})=>{typeof e=="string"&&(e={section:e}),e.align=e.align===true,e.newline=e.newline===true,e.sort=e.sort===true,e.whitespace=e.whitespace===true||e.align===true,e.platform=e.platform||typeof process<"u"&&process.platform,e.bracketedArray=e.bracketedArray!==false;let r=e.platform==="win32"?`\r
3
3
  `:`
4
- `,n=e.whitespace?" = ":"=",s=[],i=e.sort?Object.keys(t).sort():Object.keys(t),o=0;e.align&&(o=Te(i.filter(c=>t[c]===null||Array.isArray(t[c])||typeof t[c]!="object").map(c=>Array.isArray(t[c])?`${c}[]`:c).concat([""]).reduce((c,u)=>Te(c).length>=Te(u).length?c:u)).length);let a="",l=e.bracketedArray?"[]":"";for(let c of i){let u=t[c];if(u&&Array.isArray(u))for(let d of u)a+=Te(`${c}${l}`).padEnd(o," ")+n+Te(d)+r;else u&&typeof u=="object"?s.push(c):a+=Te(c).padEnd(o," ")+n+Te(u)+r;}e.section&&a.length&&(a="["+Te(e.section)+"]"+(e.newline?r+r:r)+a);for(let c of s){let u=ga(c,".").join("\\."),d=(e.section?e.section+".":"")+u,p=Ws(t[c],{...e,section:d});a.length&&p.length&&(a+=r),a+=p;}return a};function ga(t,e){var r=0,n=0,s=0,i=[];do if(s=t.indexOf(e,r),s!==-1){if(r=s+e.length,s>0&&t[s-1]==="\\")continue;i.push(t.slice(n,s)),n=s+e.length;}while(s!==-1);return i.push(t.slice(n)),i}var fa=(t,e={})=>{e.bracketedArray=e.bracketedArray!==false;let r=Object.create(null),n=r,s=null,i=/^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i,o=t.split(/[\r\n]+/g),a={};for(let c of o){if(!c||c.match(/^\s*[;#]/)||c.match(/^\s*$/))continue;let u=c.match(i);if(!u)continue;if(u[1]!==void 0){if(s=pn(u[1]),s==="__proto__"){n=Object.create(null);continue}n=r[s]=r[s]||Object.create(null);continue}let d=pn(u[2]),p;e.bracketedArray?p=d.length>2&&d.slice(-2)==="[]":(a[d]=(a?.[d]||0)+1,p=a[d]>1);let h=p&&d.endsWith("[]")?d.slice(0,-2):d;if(h==="__proto__")continue;let f=u[3]?pn(u[4]):true,m=f==="true"||f==="false"||f==="null"?JSON.parse(f):f;p&&(Ms.call(n,h)?Array.isArray(n[h])||(n[h]=[n[h]]):n[h]=[]),Array.isArray(n[h])?n[h].push(m):n[h]=m;}let l=[];for(let c of Object.keys(r)){if(!Ms.call(r,c)||typeof r[c]!="object"||Array.isArray(r[c]))continue;let u=ga(c,".");n=r;let d=u.pop(),p=d.replace(/\\\./g,".");for(let h of u)h!=="__proto__"&&((!Ms.call(n,h)||typeof n[h]!="object")&&(n[h]=Object.create(null)),n=n[h]);n===r&&p===d||(n[p]=r[c],l.push(c));}for(let c of l)delete r[c];return r},ma=t=>t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"),Te=t=>typeof t!="string"||t.match(/[=\r\n]/)||t.match(/^\[/)||t.length>1&&ma(t)||t!==t.trim()?JSON.stringify(t):t.split(";").join("\\;").split("#").join("\\#"),pn=t=>{if(t=(t||"").trim(),ma(t)){t.charAt(0)==="'"&&(t=t.slice(1,-1));try{t=JSON.parse(t);}catch{}}else {let e=false,r="";for(let n=0,s=t.length;n<s;n++){let i=t.charAt(n);if(e)"\\;#".indexOf(i)!==-1?r+=i:r+="\\"+i,e=false;else {if(";#".indexOf(i)!==-1)break;i==="\\"?e=true:r+=i;}}return e&&(r+="\\"),r.trim()}return t};_a.exports={parse:fa,decode:fa,stringify:Ws,encode:Ws,safe:Te,unsafe:pn};});function uf(t){return createHash("sha256").update(t,"utf8").digest("hex").slice(0,32)}function al(t=process.env){return t.PATHRULE_HOME&&t.PATHRULE_HOME.trim()!==""?t.PATHRULE_HOME:join(homedir(),".pathrule")}function A(t=process.env){let e=al(t);return {home:e,activeUserFile:join(e,"active-user"),credentialsFile:join(e,"credentials.json"),desktopFile:join(e,"desktop.json"),daemonFile:join(e,"daemon.json"),bridgePairFile:join(e,"bridge-pair.json"),tokenLockFile:join(e,".token-lock"),logsDir:join(e,"logs"),supportDir:join(e,"support")}}function Qe(t,e=0,r=process.env){let n=al(r),s=uf(t),i=join(n,"config","users",s),o=join(n,"cache","users",s),a=join(o,`epoch-${e}`);return {userHash:s,userConfigDir:i,userConfigFile:join(i,"config.json"),userCacheDir:o,epochCacheDir:a}}var D,O,V=E(()=>{D=448,O=384;});function et(t=process.env){let e=A(t);async function r(){try{let s=await readFile(e.credentialsFile,"utf8"),i=JSON.parse(s);return i&&typeof i=="object"&&!Array.isArray(i)?i:{}}catch(s){if(s.code==="ENOENT")return {};throw s}}async function n(s){let i=dirname(e.credentialsFile);await mkdir(i,{recursive:true,mode:D}),await chmod(i,D).catch(()=>{});let o=`${e.credentialsFile}.tmp`;await writeFile(o,JSON.stringify(s),{encoding:"utf8",mode:O}),await chmod(o,O).catch(()=>{}),await rename(o,e.credentialsFile);}return {paths:e,async set(s,i){let o=await r();o[s]=i,await n(o);},async get(s){return (await r())[s]??null},async delete(s){let i=await r();return s in i?(delete i[s],Object.keys(i).length===0?await rm$1(e.credentialsFile,{force:true}):await n(i),true):false},async findAll(){let s=await r();return Object.entries(s).map(([i,o])=>({account:i,value:o}))}}}var si=E(()=>{V();});function tt(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(r[n[s]]=t[n[s]]);return r}function cl(t,e,r,n){function s(i){return i instanceof r?i:new r(function(o){o(i);})}return new(r||(r=Promise))(function(i,o){function a(u){try{c(n.next(u));}catch(d){o(d);}}function l(u){try{c(n.throw(u));}catch(d){o(d);}}function c(u){u.done?i(u.value):s(u.value).then(a,l);}c((n=n.apply(t,e||[])).next());})}var ur=E(()=>{});var ul,dl=E(()=>{ul=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);});var Nt,dr,jt,Dt,pr,pl=E(()=>{Nt=class extends Error{constructor(e,r="FunctionsError",n){super(e),this.name=r,this.context=n;}toJSON(){return {name:this.name,message:this.message,context:this.context}}},dr=class extends Nt{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e);}},jt=class extends Nt{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e);}},Dt=class extends Nt{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e);}};(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2";})(pr||(pr={}));});var hr,hl=E(()=>{ur();dl();pl();hr=class{constructor(e,{headers:r={},customFetch:n,region:s=pr.Any}={}){this.url=e,this.headers=r,this.region=s,this.fetch=ul(n);}setAuth(e){this.headers.Authorization=`Bearer ${e}`;}invoke(e){return cl(this,arguments,void 0,function*(r,n={}){var s;let i,o;try{let{headers:a,method:l,body:c,signal:u,timeout:d}=n,p={},{region:h}=n;h||(h=this.region);let f=new URL(`${this.url}/${r}`);h&&h!=="any"&&(p["x-region"]=h,f.searchParams.set("forceFunctionRegion",h));let m;c&&(a&&!Object.prototype.hasOwnProperty.call(a,"Content-Type")||!a)?typeof Blob<"u"&&c instanceof Blob||c instanceof ArrayBuffer?(p["Content-Type"]="application/octet-stream",m=c):typeof c=="string"?(p["Content-Type"]="text/plain",m=c):typeof FormData<"u"&&c instanceof FormData?m=c:(p["Content-Type"]="application/json",m=JSON.stringify(c)):c&&typeof c!="string"&&!(typeof Blob<"u"&&c instanceof Blob)&&!(c instanceof ArrayBuffer)&&!(typeof FormData<"u"&&c instanceof FormData)?m=JSON.stringify(c):m=c;let _=u;d&&(o=new AbortController,i=setTimeout(()=>o.abort(),d),u?(_=o.signal,u.addEventListener("abort",()=>o.abort())):_=o.signal);let k=yield this.fetch(f.toString(),{method:l||"POST",headers:Object.assign(Object.assign(Object.assign({},p),this.headers),a),body:m,signal:_}).catch(Y=>{throw new dr(Y)}),b=k.headers.get("x-relay-error");if(b&&b==="true")throw new jt(k);if(!k.ok)throw new Dt(k);let w=((s=k.headers.get("Content-Type"))!==null&&s!==void 0?s:"text/plain").split(";")[0].trim(),I;return w==="application/json"?I=yield k.json():w==="application/octet-stream"||w==="application/pdf"?I=yield k.blob():w==="text/event-stream"?I=k:w==="multipart/form-data"?I=yield k.formData():I=yield k.text(),{data:I,error:null,response:k}}catch(a){return {data:null,error:a,response:a instanceof Dt||a instanceof jt?a.context:void 0}}finally{i&&clearTimeout(i);}})}};});var fl=E(()=>{hl();});function ml(t,e){return new Promise(r=>{if(e?.aborted){r();return}let n=setTimeout(()=>{e?.removeEventListener("abort",s),r();},t);function s(){clearTimeout(n),r();}e?.addEventListener("abort",s);})}function Sf(t,e,r,n){return !(!n||r>=3||!yl.includes(t)||!vf.includes(e))}function fr(t){"@babel/helpers - typeof";return fr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fr(t)}function xf(t,e){if(fr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(fr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function Pf(t){var e=xf(t,"string");return fr(e)=="symbol"?e:e+""}function Tf(t,e,r){return (e=Pf(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function wl(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function Sn(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?wl(Object(r),true).forEach(function(n){Tf(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):wl(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}var gl,vf,yl,kl,Cf,Ef,_l,Lt,Rf,bl,Sl=E(()=>{gl=t=>Math.min(1e3*2**t,3e4),vf=[520,503],yl=["GET","HEAD","OPTIONS"],kl=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code;}toJSON(){return {name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};Cf=class{constructor(t){var e,r,n,s,i;this.shouldThrowOnError=false,this.retryEnabled=true,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:false,this.signal=t.signal,this.isMaybeSingle=(r=t.isMaybeSingle)!==null&&r!==void 0?r:false,this.shouldStripNulls=(n=t.shouldStripNulls)!==null&&n!==void 0?n:false,this.urlLengthLimit=(s=t.urlLengthLimit)!==null&&s!==void 0?s:8e3,this.retryEnabled=(i=t.retry)!==null&&i!==void 0?i:true,t.fetch?this.fetch=t.fetch:this.fetch=fetch;}throwOnError(){return this.shouldThrowOnError=true,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=true,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var r=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){let o=this.headers.get("Accept");o==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!o||o==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped");}let n=this.fetch,i=(async()=>{let o=0;for(;;){let c=new Headers(r.headers);o>0&&c.set("X-Retry-Count",String(o));let u;try{u=await n(r.url.toString(),{method:r.method,headers:c,body:JSON.stringify(r.body,(d,p)=>typeof p=="bigint"?p.toString():p),signal:r.signal});}catch(d){if(d?.name==="AbortError"||d?.code==="ABORT_ERR"||!yl.includes(r.method))throw d;if(r.retryEnabled&&o<3){let p=gl(o);o++,await ml(p,r.signal);continue}throw d}if(Sf(r.method,u.status,o,r.retryEnabled)){var a,l;let d=(a=(l=u.headers)===null||l===void 0?void 0:l.get("Retry-After"))!==null&&a!==void 0?a:null,p=d!==null?Math.max(0,parseInt(d,10)||0)*1e3:gl(o);await u.text(),o++,await ml(p,r.signal);continue}return await r.processResponse(u)}})();return this.shouldThrowOnError||(i=i.catch(o=>{var a;let l="",c="",u="",d=o?.cause;if(d){var p,h,f,m;let b=(p=d?.message)!==null&&p!==void 0?p:"",w=(h=d?.code)!==null&&h!==void 0?h:"";l=`${(f=o?.name)!==null&&f!==void 0?f:"FetchError"}: ${o?.message}`,l+=`
4
+ `,n=e.whitespace?" = ":"=",s=[],i=e.sort?Object.keys(t).sort():Object.keys(t),o=0;e.align&&(o=Te(i.filter(c=>t[c]===null||Array.isArray(t[c])||typeof t[c]!="object").map(c=>Array.isArray(t[c])?`${c}[]`:c).concat([""]).reduce((c,u)=>Te(c).length>=Te(u).length?c:u)).length);let a="",l=e.bracketedArray?"[]":"";for(let c of i){let u=t[c];if(u&&Array.isArray(u))for(let d of u)a+=Te(`${c}${l}`).padEnd(o," ")+n+Te(d)+r;else u&&typeof u=="object"?s.push(c):a+=Te(c).padEnd(o," ")+n+Te(u)+r;}e.section&&a.length&&(a="["+Te(e.section)+"]"+(e.newline?r+r:r)+a);for(let c of s){let u=ga(c,".").join("\\."),d=(e.section?e.section+".":"")+u,p=Ws(t[c],{...e,section:d});a.length&&p.length&&(a+=r),a+=p;}return a};function ga(t,e){var r=0,n=0,s=0,i=[];do if(s=t.indexOf(e,r),s!==-1){if(r=s+e.length,s>0&&t[s-1]==="\\")continue;i.push(t.slice(n,s)),n=s+e.length;}while(s!==-1);return i.push(t.slice(n)),i}var fa=(t,e={})=>{e.bracketedArray=e.bracketedArray!==false;let r=Object.create(null),n=r,s=null,i=/^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i,o=t.split(/[\r\n]+/g),a={};for(let c of o){if(!c||c.match(/^\s*[;#]/)||c.match(/^\s*$/))continue;let u=c.match(i);if(!u)continue;if(u[1]!==void 0){if(s=pn(u[1]),s==="__proto__"){n=Object.create(null);continue}n=r[s]=r[s]||Object.create(null);continue}let d=pn(u[2]),p;e.bracketedArray?p=d.length>2&&d.slice(-2)==="[]":(a[d]=(a?.[d]||0)+1,p=a[d]>1);let h=p&&d.endsWith("[]")?d.slice(0,-2):d;if(h==="__proto__")continue;let f=u[3]?pn(u[4]):true,m=f==="true"||f==="false"||f==="null"?JSON.parse(f):f;p&&(Us.call(n,h)?Array.isArray(n[h])||(n[h]=[n[h]]):n[h]=[]),Array.isArray(n[h])?n[h].push(m):n[h]=m;}let l=[];for(let c of Object.keys(r)){if(!Us.call(r,c)||typeof r[c]!="object"||Array.isArray(r[c]))continue;let u=ga(c,".");n=r;let d=u.pop(),p=d.replace(/\\\./g,".");for(let h of u)h!=="__proto__"&&((!Us.call(n,h)||typeof n[h]!="object")&&(n[h]=Object.create(null)),n=n[h]);n===r&&p===d||(n[p]=r[c],l.push(c));}for(let c of l)delete r[c];return r},ma=t=>t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"),Te=t=>typeof t!="string"||t.match(/[=\r\n]/)||t.match(/^\[/)||t.length>1&&ma(t)||t!==t.trim()?JSON.stringify(t):t.split(";").join("\\;").split("#").join("\\#"),pn=t=>{if(t=(t||"").trim(),ma(t)){t.charAt(0)==="'"&&(t=t.slice(1,-1));try{t=JSON.parse(t);}catch{}}else {let e=false,r="";for(let n=0,s=t.length;n<s;n++){let i=t.charAt(n);if(e)"\\;#".indexOf(i)!==-1?r+=i:r+="\\"+i,e=false;else {if(";#".indexOf(i)!==-1)break;i==="\\"?e=true:r+=i;}}return e&&(r+="\\"),r.trim()}return t};_a.exports={parse:fa,decode:fa,stringify:Ws,encode:Ws,safe:Te,unsafe:pn};});function uf(t){return createHash("sha256").update(t,"utf8").digest("hex").slice(0,32)}function al(t=process.env){return t.PATHRULE_HOME&&t.PATHRULE_HOME.trim()!==""?t.PATHRULE_HOME:join(homedir(),".pathrule")}function A(t=process.env){let e=al(t);return {home:e,activeUserFile:join(e,"active-user"),credentialsFile:join(e,"credentials.json"),desktopFile:join(e,"desktop.json"),daemonFile:join(e,"daemon.json"),bridgePairFile:join(e,"bridge-pair.json"),tokenLockFile:join(e,".token-lock"),logsDir:join(e,"logs"),supportDir:join(e,"support")}}function Qe(t,e=0,r=process.env){let n=al(r),s=uf(t),i=join(n,"config","users",s),o=join(n,"cache","users",s),a=join(o,`epoch-${e}`);return {userHash:s,userConfigDir:i,userConfigFile:join(i,"config.json"),userCacheDir:o,epochCacheDir:a}}var D,O,V=E(()=>{D=448,O=384;});function et(t=process.env){let e=A(t);async function r(){try{let s=await readFile(e.credentialsFile,"utf8"),i=JSON.parse(s);return i&&typeof i=="object"&&!Array.isArray(i)?i:{}}catch(s){if(s.code==="ENOENT")return {};throw s}}async function n(s){let i=dirname(e.credentialsFile);await mkdir(i,{recursive:true,mode:D}),await chmod(i,D).catch(()=>{});let o=`${e.credentialsFile}.tmp`;await writeFile(o,JSON.stringify(s),{encoding:"utf8",mode:O}),await chmod(o,O).catch(()=>{}),await rename(o,e.credentialsFile);}return {paths:e,async set(s,i){let o=await r();o[s]=i,await n(o);},async get(s){return (await r())[s]??null},async delete(s){let i=await r();return s in i?(delete i[s],Object.keys(i).length===0?await rm$1(e.credentialsFile,{force:true}):await n(i),true):false},async findAll(){let s=await r();return Object.entries(s).map(([i,o])=>({account:i,value:o}))}}}var si=E(()=>{V();});function tt(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(r[n[s]]=t[n[s]]);return r}function cl(t,e,r,n){function s(i){return i instanceof r?i:new r(function(o){o(i);})}return new(r||(r=Promise))(function(i,o){function a(u){try{c(n.next(u));}catch(d){o(d);}}function l(u){try{c(n.throw(u));}catch(d){o(d);}}function c(u){u.done?i(u.value):s(u.value).then(a,l);}c((n=n.apply(t,e||[])).next());})}var dr=E(()=>{});var ul,dl=E(()=>{ul=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);});var Nt,pr,jt,Dt,hr,pl=E(()=>{Nt=class extends Error{constructor(e,r="FunctionsError",n){super(e),this.name=r,this.context=n;}toJSON(){return {name:this.name,message:this.message,context:this.context}}},pr=class extends Nt{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e);}},jt=class extends Nt{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e);}},Dt=class extends Nt{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e);}};(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2";})(hr||(hr={}));});var fr,hl=E(()=>{dr();dl();pl();fr=class{constructor(e,{headers:r={},customFetch:n,region:s=hr.Any}={}){this.url=e,this.headers=r,this.region=s,this.fetch=ul(n);}setAuth(e){this.headers.Authorization=`Bearer ${e}`;}invoke(e){return cl(this,arguments,void 0,function*(r,n={}){var s;let i,o;try{let{headers:a,method:l,body:c,signal:u,timeout:d}=n,p={},{region:h}=n;h||(h=this.region);let f=new URL(`${this.url}/${r}`);h&&h!=="any"&&(p["x-region"]=h,f.searchParams.set("forceFunctionRegion",h));let m;c&&(a&&!Object.prototype.hasOwnProperty.call(a,"Content-Type")||!a)?typeof Blob<"u"&&c instanceof Blob||c instanceof ArrayBuffer?(p["Content-Type"]="application/octet-stream",m=c):typeof c=="string"?(p["Content-Type"]="text/plain",m=c):typeof FormData<"u"&&c instanceof FormData?m=c:(p["Content-Type"]="application/json",m=JSON.stringify(c)):c&&typeof c!="string"&&!(typeof Blob<"u"&&c instanceof Blob)&&!(c instanceof ArrayBuffer)&&!(typeof FormData<"u"&&c instanceof FormData)?m=JSON.stringify(c):m=c;let _=u;d&&(o=new AbortController,i=setTimeout(()=>o.abort(),d),u?(_=o.signal,u.addEventListener("abort",()=>o.abort())):_=o.signal);let k=yield this.fetch(f.toString(),{method:l||"POST",headers:Object.assign(Object.assign(Object.assign({},p),this.headers),a),body:m,signal:_}).catch(X=>{throw new pr(X)}),b=k.headers.get("x-relay-error");if(b&&b==="true")throw new jt(k);if(!k.ok)throw new Dt(k);let w=((s=k.headers.get("Content-Type"))!==null&&s!==void 0?s:"text/plain").split(";")[0].trim(),I;return w==="application/json"?I=yield k.json():w==="application/octet-stream"||w==="application/pdf"?I=yield k.blob():w==="text/event-stream"?I=k:w==="multipart/form-data"?I=yield k.formData():I=yield k.text(),{data:I,error:null,response:k}}catch(a){return {data:null,error:a,response:a instanceof Dt||a instanceof jt?a.context:void 0}}finally{i&&clearTimeout(i);}})}};});var fl=E(()=>{hl();});function ml(t,e){return new Promise(r=>{if(e?.aborted){r();return}let n=setTimeout(()=>{e?.removeEventListener("abort",s),r();},t);function s(){clearTimeout(n),r();}e?.addEventListener("abort",s);})}function Sf(t,e,r,n){return !(!n||r>=3||!yl.includes(t)||!vf.includes(e))}function gr(t){"@babel/helpers - typeof";return gr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gr(t)}function xf(t,e){if(gr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(gr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function Pf(t){var e=xf(t,"string");return gr(e)=="symbol"?e:e+""}function Tf(t,e,r){return (e=Pf(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function wl(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function Sn(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?wl(Object(r),true).forEach(function(n){Tf(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):wl(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}var gl,vf,yl,kl,Cf,Ef,_l,Lt,Rf,bl,Sl=E(()=>{gl=t=>Math.min(1e3*2**t,3e4),vf=[520,503],yl=["GET","HEAD","OPTIONS"],kl=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code;}toJSON(){return {name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};Cf=class{constructor(t){var e,r,n,s,i;this.shouldThrowOnError=false,this.retryEnabled=true,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:false,this.signal=t.signal,this.isMaybeSingle=(r=t.isMaybeSingle)!==null&&r!==void 0?r:false,this.shouldStripNulls=(n=t.shouldStripNulls)!==null&&n!==void 0?n:false,this.urlLengthLimit=(s=t.urlLengthLimit)!==null&&s!==void 0?s:8e3,this.retryEnabled=(i=t.retry)!==null&&i!==void 0?i:true,t.fetch?this.fetch=t.fetch:this.fetch=fetch;}throwOnError(){return this.shouldThrowOnError=true,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=true,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var r=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){let o=this.headers.get("Accept");o==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!o||o==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped");}let n=this.fetch,i=(async()=>{let o=0;for(;;){let c=new Headers(r.headers);o>0&&c.set("X-Retry-Count",String(o));let u;try{u=await n(r.url.toString(),{method:r.method,headers:c,body:JSON.stringify(r.body,(d,p)=>typeof p=="bigint"?p.toString():p),signal:r.signal});}catch(d){if(d?.name==="AbortError"||d?.code==="ABORT_ERR"||!yl.includes(r.method))throw d;if(r.retryEnabled&&o<3){let p=gl(o);o++,await ml(p,r.signal);continue}throw d}if(Sf(r.method,u.status,o,r.retryEnabled)){var a,l;let d=(a=(l=u.headers)===null||l===void 0?void 0:l.get("Retry-After"))!==null&&a!==void 0?a:null,p=d!==null?Math.max(0,parseInt(d,10)||0)*1e3:gl(o);await u.text(),o++,await ml(p,r.signal);continue}return await r.processResponse(u)}})();return this.shouldThrowOnError||(i=i.catch(o=>{var a;let l="",c="",u="",d=o?.cause;if(d){var p,h,f,m;let b=(p=d?.message)!==null&&p!==void 0?p:"",w=(h=d?.code)!==null&&h!==void 0?h:"";l=`${(f=o?.name)!==null&&f!==void 0?f:"FetchError"}: ${o?.message}`,l+=`
5
5
 
6
6
  Caused by: ${(m=d?.name)!==null&&m!==void 0?m:"Error"}: ${b}`,w&&(l+=` (${w})`),d?.stack&&(l+=`
7
7
  ${d.stack}`);}else {var _;l=(_=o?.stack)!==null&&_!==void 0?_:"";}let k=this.url.toString().length;return o?.name==="AbortError"||o?.code==="ABORT_ERR"?(u="",c="Request was aborted (timeout or manual cancellation)",k>this.urlLengthLimit&&(c+=`. Note: Your request URL is ${k} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)):(d?.name==="HeadersOverflowError"||d?.code==="UND_ERR_HEADERS_OVERFLOW")&&(u="",c="HTTP headers exceeded server limits (typically 16KB)",k>this.urlLengthLimit&&(c+=`. Your request URL is ${k} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)),{success:false,error:{message:`${(a=o?.name)!==null&&a!==void 0?a:"FetchError"}: ${o?.message}`,details:l,hint:c,code:u},data:null,count:null,status:0,statusText:""}})),i.then(t,e)}async processResponse(t){var e=this;let r=null,n=null,s=null,i=t.status,o=t.statusText;if(t.ok){var a,l;if(e.method!=="HEAD"){var c;let p=await t.text();p===""||(e.headers.get("Accept")==="text/csv"||e.headers.get("Accept")&&(!((c=e.headers.get("Accept"))===null||c===void 0)&&c.includes("application/vnd.pgrst.plan+text"))?n=p:n=JSON.parse(p));}let u=(a=e.headers.get("Prefer"))===null||a===void 0?void 0:a.match(/count=(exact|planned|estimated)/),d=(l=t.headers.get("content-range"))===null||l===void 0?void 0:l.split("/");u&&d&&d.length>1&&(s=parseInt(d[1])),e.isMaybeSingle&&Array.isArray(n)&&(n.length>1?(r={code:"PGRST116",details:`Results contain ${n.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:"JSON object requested, multiple (or no) rows returned"},n=null,s=null,i=406,o="Not Acceptable"):n.length===1?n=n[0]:n=null);}else {let u=await t.text();try{r=JSON.parse(u),Array.isArray(r)&&t.status===404&&(n=[],r=null,i=200,o="OK");}catch{t.status===404&&u===""?(i=204,o="No Content"):r={message:u};}if(r&&e.shouldThrowOnError)throw new kl(r)}return {success:r===null,error:r,data:n,count:s,status:i,statusText:o}}returns(){return this}overrideTypes(){return this}},Ef=class extends Cf{select(t){let e=false,r=(t??"*").split("").map(n=>/\s/.test(n)&&!e?"":(n==='"'&&(e=!e),n)).join("");return this.url.searchParams.set("select",r),this.headers.append("Prefer","return=representation"),this}order(t,{ascending:e=true,nullsFirst:r,foreignTable:n,referencedTable:s=n}={}){let i=s?`${s}.order`:"order",o=this.url.searchParams.get(i);return this.url.searchParams.set(i,`${o?`${o},`:""}${t}.${e?"asc":"desc"}${r===void 0?"":r?".nullsfirst":".nullslast"}`),this}limit(t,{foreignTable:e,referencedTable:r=e}={}){let n=typeof r>"u"?"limit":`${r}.limit`;return this.url.searchParams.set(n,`${t}`),this}range(t,e,{foreignTable:r,referencedTable:n=r}={}){let s=typeof n>"u"?"offset":`${n}.offset`,i=typeof n>"u"?"limit":`${n}.limit`;return this.url.searchParams.set(s,`${t}`),this.url.searchParams.set(i,`${e-t+1}`),this}abortSignal(t){return this.signal=t,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){return this.isMaybeSingle=true,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}explain({analyze:t=false,verbose:e=false,settings:r=false,buffers:n=false,wal:s=false,format:i="text"}={}){var o;let a=[t?"analyze":null,e?"verbose":null,r?"settings":null,n?"buffers":null,s?"wal":null].filter(Boolean).join("|"),l=(o=this.headers.get("Accept"))!==null&&o!==void 0?o:"application/json";return this.headers.set("Accept",`application/vnd.pgrst.plan+${i}; for="${l}"; options=${a};`),i==="json"?this:this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(t){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${t}`),this}},_l=new RegExp("[,()]"),Lt=class extends Ef{eq(t,e){return this.url.searchParams.append(t,`eq.${e}`),this}neq(t,e){return this.url.searchParams.append(t,`neq.${e}`),this}gt(t,e){return this.url.searchParams.append(t,`gt.${e}`),this}gte(t,e){return this.url.searchParams.append(t,`gte.${e}`),this}lt(t,e){return this.url.searchParams.append(t,`lt.${e}`),this}lte(t,e){return this.url.searchParams.append(t,`lte.${e}`),this}like(t,e){return this.url.searchParams.append(t,`like.${e}`),this}likeAllOf(t,e){return this.url.searchParams.append(t,`like(all).{${e.join(",")}}`),this}likeAnyOf(t,e){return this.url.searchParams.append(t,`like(any).{${e.join(",")}}`),this}ilike(t,e){return this.url.searchParams.append(t,`ilike.${e}`),this}ilikeAllOf(t,e){return this.url.searchParams.append(t,`ilike(all).{${e.join(",")}}`),this}ilikeAnyOf(t,e){return this.url.searchParams.append(t,`ilike(any).{${e.join(",")}}`),this}regexMatch(t,e){return this.url.searchParams.append(t,`match.${e}`),this}regexIMatch(t,e){return this.url.searchParams.append(t,`imatch.${e}`),this}is(t,e){return this.url.searchParams.append(t,`is.${e}`),this}isDistinct(t,e){return this.url.searchParams.append(t,`isdistinct.${e}`),this}in(t,e){let r=Array.from(new Set(e)).map(n=>typeof n=="string"&&_l.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`in.(${r})`),this}notIn(t,e){let r=Array.from(new Set(e)).map(n=>typeof n=="string"&&_l.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`not.in.(${r})`),this}contains(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cs.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cs.{${e.join(",")}}`):this.url.searchParams.append(t,`cs.${JSON.stringify(e)}`),this}containedBy(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cd.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cd.{${e.join(",")}}`):this.url.searchParams.append(t,`cd.${JSON.stringify(e)}`),this}rangeGt(t,e){return this.url.searchParams.append(t,`sr.${e}`),this}rangeGte(t,e){return this.url.searchParams.append(t,`nxl.${e}`),this}rangeLt(t,e){return this.url.searchParams.append(t,`sl.${e}`),this}rangeLte(t,e){return this.url.searchParams.append(t,`nxr.${e}`),this}rangeAdjacent(t,e){return this.url.searchParams.append(t,`adj.${e}`),this}overlaps(t,e){return typeof e=="string"?this.url.searchParams.append(t,`ov.${e}`):this.url.searchParams.append(t,`ov.{${e.join(",")}}`),this}textSearch(t,e,{config:r,type:n}={}){let s="";n==="plain"?s="pl":n==="phrase"?s="ph":n==="websearch"&&(s="w");let i=r===void 0?"":`(${r})`;return this.url.searchParams.append(t,`${s}fts${i}.${e}`),this}match(t){return Object.entries(t).filter(([e,r])=>r!==void 0).forEach(([e,r])=>{this.url.searchParams.append(e,`eq.${r}`);}),this}not(t,e,r){return this.url.searchParams.append(t,`not.${e}.${r}`),this}or(t,{foreignTable:e,referencedTable:r=e}={}){let n=r?`${r}.or`:"or";return this.url.searchParams.append(n,`(${t})`),this}filter(t,e,r){return this.url.searchParams.append(t,`${e}.${r}`),this}},Rf=class{constructor(t,{headers:e={},schema:r,fetch:n,urlLengthLimit:s=8e3,retry:i}){this.url=t,this.headers=new Headers(e),this.schema=r,this.fetch=n,this.urlLengthLimit=s,this.retry=i;}cloneRequestState(){return {url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(t,e){let{head:r=false,count:n}=e??{},s=r?"HEAD":"GET",i=false,o=(t??"*").split("").map(c=>/\s/.test(c)&&!i?"":(c==='"'&&(i=!i),c)).join(""),{url:a,headers:l}=this.cloneRequestState();return a.searchParams.set("select",o),n&&l.append("Prefer",`count=${n}`),new Lt({method:s,url:a,headers:l,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(t,{count:e,defaultToNull:r=true}={}){var n;let s="POST",{url:i,headers:o}=this.cloneRequestState();if(e&&o.append("Prefer",`count=${e}`),r||o.append("Prefer","missing=default"),Array.isArray(t)){let a=t.reduce((l,c)=>l.concat(Object.keys(c)),[]);if(a.length>0){let l=[...new Set(a)].map(c=>`"${c}"`);i.searchParams.set("columns",l.join(","));}}return new Lt({method:s,url:i,headers:o,schema:this.schema,body:t,fetch:(n=this.fetch)!==null&&n!==void 0?n:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(t,{onConflict:e,ignoreDuplicates:r=false,count:n,defaultToNull:s=true}={}){var i;let o="POST",{url:a,headers:l}=this.cloneRequestState();if(l.append("Prefer",`resolution=${r?"ignore":"merge"}-duplicates`),e!==void 0&&a.searchParams.set("on_conflict",e),n&&l.append("Prefer",`count=${n}`),s||l.append("Prefer","missing=default"),Array.isArray(t)){let c=t.reduce((u,d)=>u.concat(Object.keys(d)),[]);if(c.length>0){let u=[...new Set(c)].map(d=>`"${d}"`);a.searchParams.set("columns",u.join(","));}}return new Lt({method:o,url:a,headers:l,schema:this.schema,body:t,fetch:(i=this.fetch)!==null&&i!==void 0?i:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(t,{count:e}={}){var r;let n="PATCH",{url:s,headers:i}=this.cloneRequestState();return e&&i.append("Prefer",`count=${e}`),new Lt({method:n,url:s,headers:i,schema:this.schema,body:t,fetch:(r=this.fetch)!==null&&r!==void 0?r:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:t}={}){var e;let r="DELETE",{url:n,headers:s}=this.cloneRequestState();return t&&s.append("Prefer",`count=${t}`),new Lt({method:r,url:n,headers:s,schema:this.schema,fetch:(e=this.fetch)!==null&&e!==void 0?e:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};bl=class vl{constructor(e,{headers:r={},schema:n,fetch:s,timeout:i,urlLengthLimit:o=8e3,retry:a}={}){this.url=e,this.headers=new Headers(r),this.schemaName=n,this.urlLengthLimit=o;let l=s??globalThis.fetch;i!==void 0&&i>0?this.fetch=(c,u)=>{let d=new AbortController,p=setTimeout(()=>d.abort(),i),h=u?.signal;if(h){if(h.aborted)return clearTimeout(p),l(c,u);let f=()=>{clearTimeout(p),d.abort();};return h.addEventListener("abort",f,{once:true}),l(c,Sn(Sn({},u),{},{signal:d.signal})).finally(()=>{clearTimeout(p),h.removeEventListener("abort",f);})}return l(c,Sn(Sn({},u),{},{signal:d.signal})).finally(()=>clearTimeout(p))}:this.fetch=l,this.retry=a;}from(e){if(!e||typeof e!="string"||e.trim()==="")throw new Error("Invalid relation name: relation must be a non-empty string.");return new Rf(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}schema(e){return new vl(this.url,{headers:this.headers,schema:e,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}rpc(e,r={},{head:n=false,get:s=false,count:i}={}){var o;let a,l=new URL(`${this.url}/rpc/${e}`),c,u=h=>h!==null&&typeof h=="object"&&(!Array.isArray(h)||h.some(u)),d=n&&Object.values(r).some(u);d?(a="POST",c=r):n||s?(a=n?"HEAD":"GET",Object.entries(r).filter(([h,f])=>f!==void 0).map(([h,f])=>[h,Array.isArray(f)?`{${f.join(",")}}`:`${f}`]).forEach(([h,f])=>{l.searchParams.append(h,f);})):(a="POST",c=r);let p=new Headers(this.headers);return d?p.set("Prefer",i?`count=${i},return=minimal`:"return=minimal"):i&&p.set("Prefer",`count=${i}`),new Lt({method:a,url:l,headers:p,schema:this.schemaName,body:c,fetch:(o=this.fetch)!==null&&o!==void 0?o:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};});var ii,oi,ai=E(()=>{ii=class{constructor(){}static detectEnvironment(){var e;if(typeof WebSocket<"u")return {type:"native",constructor:WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocket<"u")return {type:"native",constructor:globalThis.WebSocket};if(typeof global<"u"&&typeof global.WebSocket<"u")return {type:"native",constructor:global.WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocketPair<"u"&&typeof globalThis.WebSocket>"u")return {type:"cloudflare",error:"Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.",workaround:"Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime."};if(typeof globalThis<"u"&&globalThis.EdgeRuntime||typeof navigator<"u"&&(!((e=navigator.userAgent)===null||e===void 0)&&e.includes("Vercel-Edge")))return {type:"unsupported",error:"Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.",workaround:"Use serverless functions or a different deployment target for WebSocket functionality."};let r=globalThis.process;if(r){let n=r.versions;if(n&&n.node){let s=n.node,i=parseInt(s.replace(/^v/,"").split(".")[0]);return i>=22?typeof globalThis.WebSocket<"u"?{type:"native",constructor:globalThis.WebSocket}:{type:"unsupported",error:`Node.js ${i} detected but native WebSocket not found.`,workaround:"Provide a WebSocket implementation via the transport option."}:{type:"unsupported",error:`Node.js ${i} detected without native WebSocket support.`,workaround:`For Node.js < 22, install "ws" package and provide it via the transport option:
8
8
  import ws from "ws"
9
9
  new RealtimeClient(url, { transport: ws })`}}}return {type:"unsupported",error:"Unknown JavaScript runtime without WebSocket support.",workaround:"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation."}}static getWebSocketConstructor(){let e=this.detectEnvironment();if(e.constructor)return e.constructor;let r=e.error||"WebSocket not supported in this environment.";throw e.workaround&&(r+=`
10
10
 
11
- Suggested solution: ${e.workaround}`),new Error(r)}static isWebSocketSupported(){try{let e=this.detectEnvironment();return e.type==="native"||e.type==="ws"}catch{return false}}},oi=ii;});var Cl,El=E(()=>{Cl="2.103.2";});var Rl,xl,li,Pl,Tl,Al,me,Cn,gr,mr=E(()=>{El();Rl=`realtime-js/${Cl}`,xl="1.0.0",li="2.0.0",Pl=li,Tl=1e4,Al=100,me={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},Cn={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave",access_token:"access_token"},gr={connecting:"connecting",open:"open",closing:"closing",closed:"closed"};});var _r,Il=E(()=>{_r=class{constructor(e){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT="broadcast",this.allowedMetadataKeys=[],this.allowedMetadataKeys=e??[];}encode(e,r){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event=="string")return r(this._binaryEncodeUserBroadcastPush(e));let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return r(JSON.stringify(n))}_binaryEncodeUserBroadcastPush(e){var r;return this._isArrayBuffer((r=e.payload)===null||r===void 0?void 0:r.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){var r,n;let s=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,s)}_encodeJsonUserBroadcastPush(e){var r,n;let s=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:{},o=new TextEncoder().encode(JSON.stringify(s)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,o)}_encodeUserBroadcastPush(e,r,n){var s,i;let o=e.topic,a=(s=e.ref)!==null&&s!==void 0?s:"",l=(i=e.join_ref)!==null&&i!==void 0?i:"",c=e.payload.event,u=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},d=Object.keys(u).length===0?"":JSON.stringify(u);if(l.length>255)throw new Error(`joinRef length ${l.length} exceeds maximum of 255`);if(a.length>255)throw new Error(`ref length ${a.length} exceeds maximum of 255`);if(o.length>255)throw new Error(`topic length ${o.length} exceeds maximum of 255`);if(c.length>255)throw new Error(`userEvent length ${c.length} exceeds maximum of 255`);if(d.length>255)throw new Error(`metadata length ${d.length} exceeds maximum of 255`);let p=this.USER_BROADCAST_PUSH_META_LENGTH+l.length+a.length+o.length+c.length+d.length,h=new ArrayBuffer(this.HEADER_LENGTH+p),f=new DataView(h),m=0;f.setUint8(m++,this.KINDS.userBroadcastPush),f.setUint8(m++,l.length),f.setUint8(m++,a.length),f.setUint8(m++,o.length),f.setUint8(m++,c.length),f.setUint8(m++,d.length),f.setUint8(m++,r),Array.from(l,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(a,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(o,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(c,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(d,k=>f.setUint8(m++,k.charCodeAt(0)));var _=new Uint8Array(h.byteLength+n.byteLength);return _.set(new Uint8Array(h),0),_.set(new Uint8Array(n),h.byteLength),_.buffer}decode(e,r){if(this._isArrayBuffer(e)){let n=this._binaryDecode(e);return r(n)}if(typeof e=="string"){let n=JSON.parse(e),[s,i,o,a,l]=n;return r({join_ref:s,ref:i,topic:o,event:a,payload:l})}return r({})}_binaryDecode(e){let r=new DataView(e),n=r.getUint8(0),s=new TextDecoder;if(n===this.KINDS.userBroadcast)return this._decodeUserBroadcast(e,r,s)}_decodeUserBroadcast(e,r,n){let s=r.getUint8(1),i=r.getUint8(2),o=r.getUint8(3),a=r.getUint8(4),l=this.HEADER_LENGTH+4,c=n.decode(e.slice(l,l+s));l=l+s;let u=n.decode(e.slice(l,l+i));l=l+i;let d=n.decode(e.slice(l,l+o));l=l+o;let p=e.slice(l,e.byteLength),h=a===this.JSON_ENCODING?JSON.parse(n.decode(p)):p,f={type:this.BROADCAST_EVENT,event:u,payload:h};return o>0&&(f.meta=JSON.parse(d)),{join_ref:null,ref:null,topic:c,event:this.BROADCAST_EVENT,payload:f}}_isArrayBuffer(e){var r;return e instanceof ArrayBuffer||((r=e?.constructor)===null||r===void 0?void 0:r.name)==="ArrayBuffer"}_pick(e,r){return !e||typeof e!="object"?{}:Object.fromEntries(Object.entries(e).filter(([n])=>r.includes(n)))}};});var N,ui,Af,Ol,ci,If,Of,$f,Nf,jf,En,Rn=E(()=>{(function(t){t.abstime="abstime",t.bool="bool",t.date="date",t.daterange="daterange",t.float4="float4",t.float8="float8",t.int2="int2",t.int4="int4",t.int4range="int4range",t.int8="int8",t.int8range="int8range",t.json="json",t.jsonb="jsonb",t.money="money",t.numeric="numeric",t.oid="oid",t.reltime="reltime",t.text="text",t.time="time",t.timestamp="timestamp",t.timestamptz="timestamptz",t.timetz="timetz",t.tsrange="tsrange",t.tstzrange="tstzrange";})(N||(N={}));ui=(t,e,r={})=>{var n;let s=(n=r.skipTypes)!==null&&n!==void 0?n:[];return e?Object.keys(e).reduce((i,o)=>(i[o]=Af(o,t,e,s),i),{}):{}},Af=(t,e,r,n)=>{let s=e.find(a=>a.name===t),i=s?.type,o=r[t];return i&&!n.includes(i)?Ol(i,o):ci(o)},Ol=(t,e)=>{if(t.charAt(0)==="_"){let r=t.slice(1,t.length);return Nf(e,r)}switch(t){case N.bool:return If(e);case N.float4:case N.float8:case N.int2:case N.int4:case N.int8:case N.numeric:case N.oid:return Of(e);case N.json:case N.jsonb:return $f(e);case N.timestamp:return jf(e);case N.abstime:case N.date:case N.daterange:case N.int4range:case N.int8range:case N.money:case N.reltime:case N.text:case N.time:case N.timestamptz:case N.timetz:case N.tsrange:case N.tstzrange:return ci(e);default:return ci(e)}},ci=t=>t,If=t=>{switch(t){case "t":return true;case "f":return false;default:return t}},Of=t=>{if(typeof t=="string"){let e=parseFloat(t);if(!Number.isNaN(e))return e}return t},$f=t=>{if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t},Nf=(t,e)=>{if(typeof t!="string")return t;let r=t.length-1,n=t[r];if(t[0]==="{"&&n==="}"){let i,o=t.slice(1,r);try{i=JSON.parse("["+o+"]");}catch{i=o?o.split(","):[];}return i.map(a=>Ol(e,a))}return t},jf=t=>typeof t=="string"?t.replace(" ","T"):t,En=t=>{let e=new URL(t);return e.protocol=e.protocol.replace(/^ws/i,"http"),e.pathname=e.pathname.replace(/\/+$/,"").replace(/\/socket\/websocket$/i,"").replace(/\/socket$/i,"").replace(/\/websocket$/i,""),e.pathname===""||e.pathname==="/"?e.pathname="/api/broadcast":e.pathname=e.pathname+"/api/broadcast",e.href};});var yr,Lf,Mt,_e,Uf,Mf,Wf,we,X,Ae,di,Bf,pi,xn,$l,Ff,Tn,Hf,Ut,Nl,Pn,jl,hi=E(()=>{yr=t=>typeof t=="function"?t:function(){return t},Lf=typeof self<"u"?self:null,Mt=typeof window<"u"?window:null,_e=Lf||Mt||globalThis,Uf="2.0.0",Mf=1e4,Wf=1e3,we={connecting:0,open:1,closing:2,closed:3},X={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},Ae={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},di={longpoll:"longpoll",websocket:"websocket"},Bf={complete:4},pi="base64url.bearer.phx.",xn=class{constructor(t,e,r,n){this.channel=t,this.event=e,this.payload=r||function(){return {}},this.receivedResp=null,this.timeout=n,this.timeoutTimer=null,this.recHooks=[],this.sent=false,this.ref=void 0;}resend(t){this.timeout=t,this.reset(),this.send();}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=true,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}));}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=false;}destroy(){this.cancelRefEvent(),this.cancelTimeout();}matchReceive({status:t,response:e,_ref:r}){this.recHooks.filter(n=>n.status===t).forEach(n=>n.callback(e));}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent);}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null;}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t);}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{});},this.timeout);}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e});}},$l=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=void 0,this.tries=0;}reset(){this.tries=0,clearTimeout(this.timer);}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback();},this.timerCalc(this.tries+1));}},Ff=class{constructor(t,e,r){this.state=X.closed,this.topic=t,this.params=yr(e||{}),this.socket=r,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=false,this.joinPush=new xn(this,Ae.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new $l(()=>{this.socket.isConnected()&&this.rejoin();},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin();})),this.joinPush.receive("ok",()=>{this.state=X.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(n=>n.send()),this.pushBuffer=[];}),this.joinPush.receive("error",n=>{this.state=X.errored,this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic}`),this.state=X.closed,this.socket.remove(this);}),this.onError(n=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.isJoining()&&this.joinPush.reset(),this.state=X.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic}`,this.joinPush.timeout),new xn(this,Ae.leave,yr({}),this.timeout).send(),this.state=X.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.on(Ae.reply,(n,s)=>{this.trigger(this.replyEventName(s),n);});}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=true,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(t=>t.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=X.closed,this.bindings=[];}onClose(t){this.on(Ae.close,t);}onError(t){return this.on(Ae.error,e=>t(e))}on(t,e){let r=this.bindingRef++;return this.bindings.push({event:t,ref:r,callback:e}),r}off(t,e){this.bindings=this.bindings.filter(r=>!(r.event===t&&(typeof e>"u"||e===r.ref)));}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,r=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let n=new xn(this,t,function(){return e},r);return this.canPush()?n.send():(n.startTimeout(),this.pushBuffer.push(n)),n}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=X.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger(Ae.close,"leave");},r=new xn(this,Ae.leave,yr({}),t);return r.receive("ok",()=>e()).receive("timeout",()=>e()),r.send(),this.canPush()||r.trigger("ok",{}),r}onMessage(t,e,r){return e}filterBindings(t,e,r){return true}isMember(t,e,r,n){return this.topic!==t?false:n&&n!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:r,joinRef:n}),false):true}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=X.joining,this.joinPush.resend(t));}trigger(t,e,r,n){let s=this.onMessage(t,e,r,n);if(e&&!s)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let i=this.bindings.filter(o=>o.event===t&&this.filterBindings(o,e,r));for(let o=0;o<i.length;o++)i[o].callback(s,r,n||this.joinRef());}replyEventName(t){return `chan_reply_${t}`}isClosed(){return this.state===X.closed}isErrored(){return this.state===X.errored}isJoined(){return this.state===X.joined}isJoining(){return this.state===X.joining}isLeaving(){return this.state===X.leaving}},Tn=class{static request(t,e,r,n,s,i,o){if(_e.XDomainRequest){let a=new _e.XDomainRequest;return this.xdomainRequest(a,t,e,n,s,i,o)}else if(_e.XMLHttpRequest){let a=new _e.XMLHttpRequest;return this.xhrRequest(a,t,e,r,n,s,i,o)}else {if(_e.fetch&&_e.AbortController)return this.fetchRequest(t,e,r,n,s,i,o);throw new Error("No suitable XMLHttpRequest implementation found")}}static fetchRequest(t,e,r,n,s,i,o){let a={method:t,headers:r,body:n},l=null;if(s){l=new AbortController;setTimeout(()=>l.abort(),s);a.signal=l.signal;}return _e.fetch(e,a).then(c=>c.text()).then(c=>this.parseJSON(c)).then(c=>o&&o(c)).catch(c=>{c.name==="AbortError"&&i?i():o&&o(null);}),l}static xdomainRequest(t,e,r,n,s,i,o){return t.timeout=s,t.open(e,r),t.onload=()=>{let a=this.parseJSON(t.responseText);o&&o(a);},i&&(t.ontimeout=i),t.onprogress=()=>{},t.send(n),t}static xhrRequest(t,e,r,n,s,i,o,a){t.open(e,r,true),t.timeout=i;for(let[l,c]of Object.entries(n))t.setRequestHeader(l,c);return t.onerror=()=>a&&a(null),t.onreadystatechange=()=>{if(t.readyState===Bf.complete&&a){let l=this.parseJSON(t.responseText);a(l);}},o&&(t.ontimeout=o),t.send(s),t}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch{return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let r=[];for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let s=e?`${e}[${n}]`:n,i=t[n];typeof i=="object"?r.push(this.serialize(i,s)):r.push(encodeURIComponent(s)+"="+encodeURIComponent(i));}return r.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let r=t.match(/\?/)?"&":"?";return `${t}${r}${this.serialize(e)}`}},Hf=t=>{let e="",r=new Uint8Array(t),n=r.byteLength;for(let s=0;s<n;s++)e+=String.fromCharCode(r[s]);return btoa(e)},Ut=class{constructor(t,e){e&&e.length===2&&e[1].startsWith(pi)&&(this.authToken=atob(e[1].slice(pi.length))),this.endPoint=null,this.token=null,this.skipHeartbeat=true,this.reqs=new Set,this.awaitingBatchAck=false,this.currentBatch=null,this.currentBatchTimer=null,this.batchBuffer=[],this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=we.connecting,setTimeout(()=>this.poll(),0);}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+di.websocket),"$1/"+di.longpoll)}endpointURL(){return Tn.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(t,e,r){this.close(t,e,r),this.readyState=we.connecting;}ontimeout(){this.onerror("timeout"),this.closeAndRetry(1005,"timeout",false);}isActive(){return this.readyState===we.open||this.readyState===we.connecting}poll(){let t={Accept:"application/json"};this.authToken&&(t["X-Phoenix-AuthToken"]=this.authToken),this.ajax("GET",t,null,()=>this.ontimeout(),e=>{if(e){var{status:r,token:n,messages:s}=e;if(r===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,"session_gone",false);return}this.token=n;}else r=0;switch(r){case 200:s.forEach(i=>{setTimeout(()=>this.onmessage({data:i}),0);}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=we.open,this.onopen({}),this.poll();break;case 403:this.onerror(403),this.close(1008,"forbidden",false);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,"internal server error",500);break;default:throw new Error(`unhandled poll status ${r}`)}});}send(t){typeof t!="string"&&(t=Hf(t)),this.currentBatch?this.currentBatch.push(t):this.awaitingBatchAck?this.batchBuffer.push(t):(this.currentBatch=[t],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null;},0));}batchSend(t){this.awaitingBatchAck=true,this.ajax("POST",{"Content-Type":"application/x-ndjson"},t.join(`
12
- `),()=>this.onerror("timeout"),e=>{this.awaitingBatchAck=false,!e||e.status!==200?(this.onerror(e&&e.status),this.closeAndRetry(1011,"internal server error",false)):this.batchBuffer.length>0&&(this.batchSend(this.batchBuffer),this.batchBuffer=[]);});}close(t,e,r){for(let s of this.reqs)s.abort();this.readyState=we.closed;let n=Object.assign({code:1e3,reason:void 0,wasClean:true},{code:t,reason:e,wasClean:r});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<"u"?this.onclose(new CloseEvent("close",n)):this.onclose(n);}ajax(t,e,r,n,s){let i,o=()=>{this.reqs.delete(i),n();};i=Tn.request(t,this.endpointURL(),e,r,this.timeout,o,a=>{this.reqs.delete(i),this.isActive()&&s(a);}),this.reqs.add(i);}},Nl=class wr{constructor(e,r={}){let n=r.events||{state:"presence_state",diff:"presence_diff"};this.state={},this.pendingDiffs=[],this.channel=e,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(n.state,s=>{let{onJoin:i,onLeave:o,onSync:a}=this.caller;this.joinRef=this.channel.joinRef(),this.state=wr.syncState(this.state,s,i,o),this.pendingDiffs.forEach(l=>{this.state=wr.syncDiff(this.state,l,i,o);}),this.pendingDiffs=[],a();}),this.channel.on(n.diff,s=>{let{onJoin:i,onLeave:o,onSync:a}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(s):(this.state=wr.syncDiff(this.state,s,i,o),a());});}onJoin(e){this.caller.onJoin=e;}onLeave(e){this.caller.onLeave=e;}onSync(e){this.caller.onSync=e;}list(e){return wr.list(this.state,e)}inPendingSyncState(){return !this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,r,n,s){let i=this.clone(e),o={},a={};return this.map(i,(l,c)=>{r[l]||(a[l]=c);}),this.map(r,(l,c)=>{let u=i[l];if(u){let d=c.metas.map(m=>m.phx_ref),p=u.metas.map(m=>m.phx_ref),h=c.metas.filter(m=>p.indexOf(m.phx_ref)<0),f=u.metas.filter(m=>d.indexOf(m.phx_ref)<0);h.length>0&&(o[l]=c,o[l].metas=h),f.length>0&&(a[l]=this.clone(u),a[l].metas=f);}else o[l]=c;}),this.syncDiff(i,{joins:o,leaves:a},n,s)}static syncDiff(e,r,n,s){let{joins:i,leaves:o}=this.clone(r);return n||(n=function(){}),s||(s=function(){}),this.map(i,(a,l)=>{let c=e[a];if(e[a]=this.clone(l),c){let u=e[a].metas.map(p=>p.phx_ref),d=c.metas.filter(p=>u.indexOf(p.phx_ref)<0);e[a].metas.unshift(...d);}n(a,c,l);}),this.map(o,(a,l)=>{let c=e[a];if(!c)return;let u=l.metas.map(d=>d.phx_ref);c.metas=c.metas.filter(d=>u.indexOf(d.phx_ref)<0),s(a,c,l),c.metas.length===0&&delete e[a];}),e}static list(e,r){return r||(r=function(n,s){return s}),this.map(e,(n,s)=>r(n,s))}static map(e,r){return Object.getOwnPropertyNames(e).map(n=>r(n,e[n]))}static clone(e){return JSON.parse(JSON.stringify(e))}},Pn={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let r=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(r))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[r,n,s,i,o]=JSON.parse(t);return e({join_ref:r,ref:n,topic:s,event:i,payload:o})}},binaryEncode(t){let{join_ref:e,ref:r,event:n,topic:s,payload:i}=t,o=this.META_LENGTH+e.length+r.length+s.length+n.length,a=new ArrayBuffer(this.HEADER_LENGTH+o),l=new DataView(a),c=0;l.setUint8(c++,this.KINDS.push),l.setUint8(c++,e.length),l.setUint8(c++,r.length),l.setUint8(c++,s.length),l.setUint8(c++,n.length),Array.from(e,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(r,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(s,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(n,d=>l.setUint8(c++,d.charCodeAt(0)));var u=new Uint8Array(a.byteLength+i.byteLength);return u.set(new Uint8Array(a),0),u.set(new Uint8Array(i),a.byteLength),u.buffer},binaryDecode(t){let e=new DataView(t),r=e.getUint8(0),n=new TextDecoder;switch(r){case this.KINDS.push:return this.decodePush(t,e,n);case this.KINDS.reply:return this.decodeReply(t,e,n);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,n)}},decodePush(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=e.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,a=r.decode(t.slice(o,o+n));o=o+n;let l=r.decode(t.slice(o,o+s));o=o+s;let c=r.decode(t.slice(o,o+i));o=o+i;let u=t.slice(o,t.byteLength);return {join_ref:a,ref:null,topic:l,event:c,payload:u}},decodeReply(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=e.getUint8(3),o=e.getUint8(4),a=this.HEADER_LENGTH+this.META_LENGTH,l=r.decode(t.slice(a,a+n));a=a+n;let c=r.decode(t.slice(a,a+s));a=a+s;let u=r.decode(t.slice(a,a+i));a=a+i;let d=r.decode(t.slice(a,a+o));a=a+o;let p=t.slice(a,t.byteLength),h={status:d,response:p};return {join_ref:l,ref:c,topic:u,event:Ae.reply,payload:h}},decodeBroadcast(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=this.HEADER_LENGTH+2,o=r.decode(t.slice(i,i+n));i=i+n;let a=r.decode(t.slice(i,i+s));i=i+s;let l=t.slice(i,t.byteLength);return {join_ref:null,ref:null,topic:o,event:a,payload:l}}},jl=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=e.timeout||Mf,this.transport=e.transport||_e.WebSocket||Ut,this.conn=void 0,this.primaryPassedHealthCheck=false,this.longPollFallbackMs=e.longPollFallbackMs,this.fallbackTimer=null,this.sessionStore=e.sessionStorage||_e&&_e.sessionStorage,this.establishedConnections=0,this.defaultEncoder=Pn.encode.bind(Pn),this.defaultDecoder=Pn.decode.bind(Pn),this.closeWasClean=true,this.disconnecting=false,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.pageHidden=false,this.encode=void 0,this.decode=void 0,this.transport!==Ut?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let r=null;Mt&&Mt.addEventListener&&(Mt.addEventListener("pagehide",n=>{this.conn&&(this.disconnect(),r=this.connectClock);}),Mt.addEventListener("pageshow",n=>{r===this.connectClock&&(r=null,this.connect());}),Mt.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?this.pageHidden=true:(this.pageHidden=false,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()));})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=e.autoSendHeartbeat??true,this.heartbeatCallback=e.heartbeatCallback??(()=>{}),this.rejoinAfterMs=n=>e.rejoinAfterMs?e.rejoinAfterMs(n):[1e3,2e3,5e3][n-1]||1e4,this.reconnectAfterMs=n=>e.reconnectAfterMs?e.reconnectAfterMs(n):[10,50,100,150,200,250,500,1e3,2e3][n-1]||5e3,this.logger=e.logger||null,!this.logger&&e.debug&&(this.logger=(n,s,i)=>{console.log(`${n}: ${s}`,i);}),this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=yr(e.params||{}),this.endPoint=`${t}/${di.websocket}`,this.vsn=e.vsn||Uf,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new $l(()=>{if(this.pageHidden){this.log("Not reconnecting as page is hidden!"),this.teardown();return}this.teardown(async()=>{e.beforeReconnect&&await e.beforeReconnect(),this.connect();});},this.reconnectAfterMs),this.authToken=e.authToken;}getLongPollTransport(){return Ut}replaceTransport(t){this.connectClock++,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&(this.conn.close(),this.conn=null),this.transport=t;}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=Tn.appendParams(Tn.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,r){this.connectClock++,this.disconnecting=true,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=false,t&&t();},e,r);}connect(t){t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=yr(t)),!(this.conn&&!this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==Ut?this.connectWithFallback(Ut,this.longPollFallbackMs):this.transportConnect());}log(t,e,r){this.logger&&this.logger(t,e,r);}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onHeartbeat(t){this.heartbeatCallback=t;}ping(t){if(!this.isConnected())return false;let e=this.makeRef(),r=Date.now();this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:e});let n=this.onMessage(s=>{s.ref===e&&(this.off([n]),t(Date.now()-r));});return true}transportName(t){return t===Ut?"LongPoll":t.name}transportConnect(){this.connectClock++,this.closeWasClean=false;let t;this.authToken&&(t=["phoenix",`${pi}${btoa(this.authToken).replace(/=/g,"")}`]),this.conn=new this.transport(this.endPointURL(),t),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e);}getSession(t){return this.sessionStore&&this.sessionStore.getItem(t)}storeSession(t,e){this.sessionStore&&this.sessionStore.setItem(t,e);}connectWithFallback(t,e=2500){clearTimeout(this.fallbackTimer);let r=false,n=true,s,i,o=this.transportName(t),a=l=>{this.log("transport",`falling back to ${o}...`,l),this.off([s,i]),n=false,this.replaceTransport(t),this.transportConnect();};if(this.getSession(`phx:fallback:${o}`))return a("memorized");this.fallbackTimer=setTimeout(a,e),i=this.onError(l=>{this.log("transport","error",l),n&&!r&&(clearTimeout(this.fallbackTimer),a(l));}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(r=true,!n){let l=this.transportName(t);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${l}`,"true"),this.log("transport",`established ${l} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(a,e),this.ping(l=>{this.log("transport","connected to primary after",l),this.primaryPassedHealthCheck=true,clearTimeout(this.fallbackTimer);});}),this.transportConnect();}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer);}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=false,this.disconnecting=false,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.autoSendHeartbeat&&this.resetHeartbeat(),this.triggerStateCallbacks("open");}heartbeatTimeout(){if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection");try{this.heartbeatCallback("timeout");}catch(t){this.log("error","error in heartbeat callback",t);}this.triggerChanError(),this.closeWasClean=false,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),Wf,"heartbeat timeout");}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}teardown(t,e,r){if(!this.conn)return t&&t();let n=this.conn;this.waitForBufferDone(n,()=>{e?n.close(e,r||""):n.close(),this.waitForSocketClosed(n,()=>{this.conn===n&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),t&&t();});});}waitForBufferDone(t,e,r=1){if(r===5||!t.bufferedAmount){e();return}setTimeout(()=>{this.waitForBufferDone(t,e,r+1);},150*r);}waitForSocketClosed(t,e,r=1){if(r===5||t.readyState===we.closed){e();return}setTimeout(()=>{this.waitForSocketClosed(t,e,r+1);},150*r);}onConnClose(t){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks("close",t);}onConnError(t){this.hasLogger()&&this.log("transport",t);let e=this.transport,r=this.establishedConnections;this.triggerStateCallbacks("error",t,e,r),(e===this.transport||r>0)&&this.triggerChanError();}triggerChanError(){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger(Ae.error);});}connectionState(){switch(this.conn&&this.conn.readyState){case we.connecting:return "connecting";case we.open:return "open";case we.closing:return "closing";default:return "closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e!==t);}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([r])=>t.indexOf(r)===-1);}channel(t,e={}){let r=new Ff(t,e,this);return this.channels.push(r),r}push(t){if(this.hasLogger()){let{topic:e,event:r,payload:n,ref:s,join_ref:i}=t;this.log("push",`${e} ${r} (${i}, ${s})`,n);}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)));}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){if(!this.isConnected()){try{this.heartbeatCallback("disconnected");}catch(t){this.log("error","error in heartbeat callback",t);}return}if(this.pendingHeartbeatRef){this.heartbeatTimeout();return}this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback("sent");}catch(t){this.log("error","error in heartbeat callback",t);}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs);}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[]);}onConnMessage(t){this.decode(t.data,e=>{let{topic:r,event:n,payload:s,ref:i,join_ref:o}=e;if(i&&i===this.pendingHeartbeatRef){let a=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(s.status==="ok"?"ok":"error",a);}catch(l){this.log("error","error in heartbeat callback",l);}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}this.hasLogger()&&this.log("receive",`${s.status||""} ${r} ${n} ${i&&"("+i+")"||""}`.trim(),s);for(let a=0;a<this.channels.length;a++){let l=this.channels[a];l.isMember(r,n,s,o)&&l.trigger(n,s,i,o);}this.triggerStateCallbacks("message",e);});}triggerStateCallbacks(t,...e){try{this.stateChangeCallbacks[t].forEach(([r,n])=>{try{n(...e);}catch(s){this.log("error",`error in ${t} callback`,s);}});}catch(r){this.log("error",`error triggering ${t} callbacks`,r);}}leaveOpenTopic(t){let e=this.channels.find(r=>r.topic===t&&(r.isJoined()||r.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave());}};});function An(t){return t.metas.map(e=>(e.presence_ref=e.phx_ref,delete e.phx_ref,delete e.phx_ref_prev,e))}function qf(t){return JSON.parse(JSON.stringify(t))}function zf(t){return t?.events&&{events:t.events}}function Dl(t){return t?.metas?An(t):[]}var kr,Ll=E(()=>{hi();kr=class t{constructor(e,r){let n=zf(r);this.presence=new Nl(e.getChannel(),n),this.presence.onJoin((s,i,o)=>{let a=t.onJoinPayload(s,i,o);e.getChannel().trigger("presence",a);}),this.presence.onLeave((s,i,o)=>{let a=t.onLeavePayload(s,i,o);e.getChannel().trigger("presence",a);}),this.presence.onSync(()=>{e.getChannel().trigger("presence",{event:"sync"});});}get state(){return t.transformState(this.presence.state)}static transformState(e){return e=qf(e),Object.getOwnPropertyNames(e).reduce((r,n)=>{let s=e[n];return r[n]=An(s),r},{})}static onJoinPayload(e,r,n){let s=Dl(r),i=An(n);return {event:"join",key:e,currentPresences:s,newPresences:i}}static onLeavePayload(e,r,n){let s=Dl(r),i=An(n);return {event:"leave",key:e,currentPresences:s,leftPresences:i}}};});var fi,Wt,gi=E(()=>{Ll();(function(t){t.SYNC="sync",t.JOIN="join",t.LEAVE="leave";})(fi||(fi={}));Wt=class{get state(){return this.presenceAdapter.state}constructor(e,r){this.channel=e,this.presenceAdapter=new kr(this.channel.channelAdapter,r);}};});function Jf(t){return {config:Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},t.config)}}var br,Ul=E(()=>{mr();br=class{constructor(e,r,n){let s=Jf(n);this.channel=e.getSocket().channel(r,s),this.socket=e;}get state(){return this.channel.state}set state(e){this.channel.state=e;}get joinedOnce(){return this.channel.joinedOnce}get joinPush(){return this.channel.joinPush}get rejoinTimer(){return this.channel.rejoinTimer}on(e,r){return this.channel.on(e,r)}off(e,r){this.channel.off(e,r);}subscribe(e){return this.channel.join(e)}unsubscribe(e){return this.channel.leave(e)}teardown(){this.channel.teardown();}onClose(e){this.channel.onClose(e);}onError(e){return this.channel.onError(e)}push(e,r,n){let s;try{s=this.channel.push(e,r,n);}catch{throw `tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`}if(this.channel.pushBuffer.length>Al){let i=this.channel.pushBuffer.shift();i.cancelTimeout(),this.socket.log("channel",`discarded push due to buffer overflow: ${i.event}`,i.payload());}return s}updateJoinPayload(e){let r=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},r),e);}canPush(){return this.socket.isConnected()&&this.state===me.joined}isJoined(){return this.state===me.joined}isJoining(){return this.state===me.joining}isClosed(){return this.state===me.closed}isLeaving(){return this.state===me.leaving}updateFilterBindings(e){this.channel.filterBindings=e;}updatePayloadTransform(e){this.channel.onMessage=e;}getChannel(){return this.channel}};});var mi,rt,ye,Bt,_i=E(()=>{mr();gi();Rn();Rn();Ul();(function(t){t.ALL="*",t.INSERT="INSERT",t.UPDATE="UPDATE",t.DELETE="DELETE";})(mi||(mi={}));(function(t){t.BROADCAST="broadcast",t.PRESENCE="presence",t.POSTGRES_CHANGES="postgres_changes",t.SYSTEM="system";})(rt||(rt={}));(function(t){t.SUBSCRIBED="SUBSCRIBED",t.TIMED_OUT="TIMED_OUT",t.CLOSED="CLOSED",t.CHANNEL_ERROR="CHANNEL_ERROR";})(ye||(ye={}));Bt=class t{get state(){return this.channelAdapter.state}set state(e){this.channelAdapter.state=e;}get joinedOnce(){return this.channelAdapter.joinedOnce}get timeout(){return this.socket.timeout}get joinPush(){return this.channelAdapter.joinPush}get rejoinTimer(){return this.channelAdapter.rejoinTimer}constructor(e,r={config:{}},n){var s,i;if(this.topic=e,this.params=r,this.socket=n,this.bindings={},this.subTopic=e.replace(/^realtime:/i,""),this.params.config=Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},r.config),this.channelAdapter=new br(this.socket.socketAdapter,e,this.params),this.presence=new Wt(this),this._onClose(()=>{this.socket._remove(this);}),this._updateFilterTransform(),this.broadcastEndpointURL=En(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||false,!this.private&&(!((i=(s=this.params.config)===null||s===void 0?void 0:s.broadcast)===null||i===void 0)&&i.replay))throw `tried to use replay on public channel '${this.topic}'. It must be a private channel.`}subscribe(e,r=this.timeout){var n,s,i;if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){let{config:{broadcast:o,presence:a,private:l}}=this.params,c=(s=(n=this.bindings.postgres_changes)===null||n===void 0?void 0:n.map(h=>h.filter))!==null&&s!==void 0?s:[],u=!!this.bindings[rt.PRESENCE]&&this.bindings[rt.PRESENCE].length>0||((i=this.params.config.presence)===null||i===void 0?void 0:i.enabled)===true,d={},p={broadcast:o,presence:Object.assign(Object.assign({},a),{enabled:u}),postgres_changes:c,private:l};this.socket.accessTokenValue&&(d.access_token=this.socket.accessTokenValue),this._onError(h=>{e?.(ye.CHANNEL_ERROR,h);}),this._onClose(()=>e?.(ye.CLOSED)),this.updateJoinPayload(Object.assign({config:p},d)),this._updateFilterMessage(),this.channelAdapter.subscribe(r).receive("ok",async({postgres_changes:h})=>{if(this.socket._isManualToken()||this.socket.setAuth(),h===void 0){e?.(ye.SUBSCRIBED);return}this._updatePostgresBindings(h,e);}).receive("error",h=>{this.state=me.errored,e?.(ye.CHANNEL_ERROR,new Error(JSON.stringify(Object.values(h).join(", ")||"error")));}).receive("timeout",()=>{e?.(ye.TIMED_OUT);});}return this}_updatePostgresBindings(e,r){var n;let s=this.bindings.postgres_changes,i=(n=s?.length)!==null&&n!==void 0?n:0,o=[];for(let a=0;a<i;a++){let l=s[a],{filter:{event:c,schema:u,table:d,filter:p}}=l,h=e&&e[a];if(h&&h.event===c&&t.isFilterValueEqual(h.schema,u)&&t.isFilterValueEqual(h.table,d)&&t.isFilterValueEqual(h.filter,p))o.push(Object.assign(Object.assign({},l),{id:h.id}));else {this.unsubscribe(),this.state=me.errored,r?.(ye.CHANNEL_ERROR,new Error("mismatch between server and client bindings for postgres changes"));return}}this.bindings.postgres_changes=o,this.state!=me.errored&&r&&r(ye.SUBSCRIBED);}presenceState(){return this.presence.state}async track(e,r={}){return await this.send({type:"presence",event:"track",payload:e},r.timeout||this.timeout)}async untrack(e={}){return await this.send({type:"presence",event:"untrack"},e)}on(e,r,n){let s=this.channelAdapter.isJoined()||this.channelAdapter.isJoining(),i=e===rt.PRESENCE||e===rt.POSTGRES_CHANGES;if(s&&i)throw this.socket.log("channel",`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`),new Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`);return this._on(e,r,n)}async httpSend(e,r,n={}){var s;if(r==null)return Promise.reject("Payload is required for httpSend()");let i={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(i.Authorization=`Bearer ${this.socket.accessTokenValue}`);let o={method:"POST",headers:i,body:JSON.stringify({messages:[{topic:this.subTopic,event:e,payload:r,private:this.private}]})},a=await this._fetchWithTimeout(this.broadcastEndpointURL,o,(s=n.timeout)!==null&&s!==void 0?s:this.timeout);if(a.status===202)return {success:true};let l=a.statusText;try{let c=await a.json();l=c.error||c.message||l;}catch{}return Promise.reject(new Error(l))}async send(e,r={}){var n,s;if(!this.channelAdapter.canPush()&&e.type==="broadcast"){console.warn("Realtime send() is automatically falling back to REST API. This behavior will be deprecated in the future. Please use httpSend() explicitly for REST delivery.");let{event:i,payload:o}=e,a={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(a.Authorization=`Bearer ${this.socket.accessTokenValue}`);let l={method:"POST",headers:a,body:JSON.stringify({messages:[{topic:this.subTopic,event:i,payload:o,private:this.private}]})};try{let c=await this._fetchWithTimeout(this.broadcastEndpointURL,l,(n=r.timeout)!==null&&n!==void 0?n:this.timeout);return await((s=c.body)===null||s===void 0?void 0:s.cancel()),c.ok?"ok":"error"}catch(c){return c.name==="AbortError"?"timed out":"error"}}else return new Promise(i=>{var o,a,l;let c=this.channelAdapter.push(e.type,e,r.timeout||this.timeout);e.type==="broadcast"&&!(!((l=(a=(o=this.params)===null||o===void 0?void 0:o.config)===null||a===void 0?void 0:a.broadcast)===null||l===void 0)&&l.ack)&&i("ok"),c.receive("ok",()=>i("ok")),c.receive("error",()=>i("error")),c.receive("timeout",()=>i("timed out"));})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e);}async unsubscribe(e=this.timeout){return new Promise(r=>{this.channelAdapter.unsubscribe(e).receive("ok",()=>r("ok")).receive("timeout",()=>r("timed out")).receive("error",()=>r("error"));})}teardown(){this.channelAdapter.teardown();}async _fetchWithTimeout(e,r,n){let s=new AbortController,i=setTimeout(()=>s.abort(),n),o=await this.socket.fetch(e,Object.assign(Object.assign({},r),{signal:s.signal}));return clearTimeout(i),o}_on(e,r,n){let s=e.toLocaleLowerCase(),i=this.channelAdapter.on(e,n),o={type:s,filter:r,callback:n,ref:i};return this.bindings[s]?this.bindings[s].push(o):this.bindings[s]=[o],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e);}_onError(e){this.channelAdapter.onError(e);}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,r,n)=>{var s,i,o,a,l,c,u;let d=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(d,n))return false;let p=(s=this.bindings[d])===null||s===void 0?void 0:s.find(h=>h.ref===e.ref);if(!p)return true;if(["broadcast","presence","postgres_changes"].includes(d))if("id"in p){let h=p.id,f=(i=p.filter)===null||i===void 0?void 0:i.event;return h&&((o=r.ids)===null||o===void 0?void 0:o.includes(h))&&(f==="*"||f?.toLocaleLowerCase()===((a=r.data)===null||a===void 0?void 0:a.type.toLocaleLowerCase()))}else {let h=(c=(l=p?.filter)===null||l===void 0?void 0:l.event)===null||c===void 0?void 0:c.toLocaleLowerCase();return h==="*"||h===((u=r?.event)===null||u===void 0?void 0:u.toLocaleLowerCase())}else return p.type.toLocaleLowerCase()===d});}_notThisChannelEvent(e,r){let{close:n,error:s,leave:i,join:o}=Cn;return r&&[n,s,i,o].includes(e)&&r!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,r,n)=>{if(typeof r=="object"&&"ids"in r){let s=r.data,{schema:i,table:o,commit_timestamp:a,type:l,errors:c}=s;return Object.assign(Object.assign({},{schema:i,table:o,commit_timestamp:a,eventType:l,new:{},old:{},errors:c}),this._getPayloadRecords(s))}return r});}copyBindings(e){if(this.joinedOnce)throw new Error("cannot copy bindings into joined channel");for(let r in e.bindings)for(let n of e.bindings[r])this._on(n.type,n.filter,n.callback);}static isFilterValueEqual(e,r){return (e??void 0)===(r??void 0)}_getPayloadRecords(e){let r={new:{},old:{}};return (e.type==="INSERT"||e.type==="UPDATE")&&(r.new=ui(e.columns,e.record)),(e.type==="UPDATE"||e.type==="DELETE")&&(r.old=ui(e.columns,e.old_record)),r}};});var vr,Ml=E(()=>{hi();mr();vr=class{constructor(e,r){this.socket=new jl(e,r);}get timeout(){return this.socket.timeout}get endPoint(){return this.socket.endPoint}get transport(){return this.socket.transport}get heartbeatIntervalMs(){return this.socket.heartbeatIntervalMs}get heartbeatCallback(){return this.socket.heartbeatCallback}set heartbeatCallback(e){this.socket.heartbeatCallback=e;}get heartbeatTimer(){return this.socket.heartbeatTimer}get pendingHeartbeatRef(){return this.socket.pendingHeartbeatRef}get reconnectTimer(){return this.socket.reconnectTimer}get vsn(){return this.socket.vsn}get encode(){return this.socket.encode}get decode(){return this.socket.decode}get reconnectAfterMs(){return this.socket.reconnectAfterMs}get sendBuffer(){return this.socket.sendBuffer}get stateChangeCallbacks(){return this.socket.stateChangeCallbacks}connect(){this.socket.connect();}disconnect(e,r,n,s=1e4){return new Promise(i=>{setTimeout(()=>i("timeout"),s),this.socket.disconnect(()=>{e(),i("ok");},r,n);})}push(e){this.socket.push(e);}log(e,r,n){this.socket.log(e,r,n);}makeRef(){return this.socket.makeRef()}onOpen(e){this.socket.onOpen(e);}onClose(e){this.socket.onClose(e);}onError(e){this.socket.onError(e);}onMessage(e){this.socket.onMessage(e);}isConnected(){return this.socket.isConnected()}isConnecting(){return this.socket.connectionState()==gr.connecting}isDisconnecting(){return this.socket.connectionState()==gr.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat();}getSocket(){return this.socket}};});var Kf,Vf,Gf,Yf,Ft,Wl=E(()=>{ai();mr();Il();Rn();_i();Ml();Kf={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},Vf=[1e3,2e3,5e3,1e4],Gf=1e4,Yf=`
11
+ Suggested solution: ${e.workaround}`),new Error(r)}static isWebSocketSupported(){try{let e=this.detectEnvironment();return e.type==="native"||e.type==="ws"}catch{return false}}},oi=ii;});var Cl,El=E(()=>{Cl="2.103.2";});var Rl,xl,li,Pl,Tl,Al,_e,Cn,mr,_r=E(()=>{El();Rl=`realtime-js/${Cl}`,xl="1.0.0",li="2.0.0",Pl=li,Tl=1e4,Al=100,_e={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},Cn={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave",access_token:"access_token"},mr={connecting:"connecting",open:"open",closing:"closing",closed:"closed"};});var wr,Il=E(()=>{wr=class{constructor(e){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT="broadcast",this.allowedMetadataKeys=[],this.allowedMetadataKeys=e??[];}encode(e,r){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event=="string")return r(this._binaryEncodeUserBroadcastPush(e));let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return r(JSON.stringify(n))}_binaryEncodeUserBroadcastPush(e){var r;return this._isArrayBuffer((r=e.payload)===null||r===void 0?void 0:r.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){var r,n;let s=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,s)}_encodeJsonUserBroadcastPush(e){var r,n;let s=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:{},o=new TextEncoder().encode(JSON.stringify(s)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,o)}_encodeUserBroadcastPush(e,r,n){var s,i;let o=e.topic,a=(s=e.ref)!==null&&s!==void 0?s:"",l=(i=e.join_ref)!==null&&i!==void 0?i:"",c=e.payload.event,u=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},d=Object.keys(u).length===0?"":JSON.stringify(u);if(l.length>255)throw new Error(`joinRef length ${l.length} exceeds maximum of 255`);if(a.length>255)throw new Error(`ref length ${a.length} exceeds maximum of 255`);if(o.length>255)throw new Error(`topic length ${o.length} exceeds maximum of 255`);if(c.length>255)throw new Error(`userEvent length ${c.length} exceeds maximum of 255`);if(d.length>255)throw new Error(`metadata length ${d.length} exceeds maximum of 255`);let p=this.USER_BROADCAST_PUSH_META_LENGTH+l.length+a.length+o.length+c.length+d.length,h=new ArrayBuffer(this.HEADER_LENGTH+p),f=new DataView(h),m=0;f.setUint8(m++,this.KINDS.userBroadcastPush),f.setUint8(m++,l.length),f.setUint8(m++,a.length),f.setUint8(m++,o.length),f.setUint8(m++,c.length),f.setUint8(m++,d.length),f.setUint8(m++,r),Array.from(l,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(a,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(o,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(c,k=>f.setUint8(m++,k.charCodeAt(0))),Array.from(d,k=>f.setUint8(m++,k.charCodeAt(0)));var _=new Uint8Array(h.byteLength+n.byteLength);return _.set(new Uint8Array(h),0),_.set(new Uint8Array(n),h.byteLength),_.buffer}decode(e,r){if(this._isArrayBuffer(e)){let n=this._binaryDecode(e);return r(n)}if(typeof e=="string"){let n=JSON.parse(e),[s,i,o,a,l]=n;return r({join_ref:s,ref:i,topic:o,event:a,payload:l})}return r({})}_binaryDecode(e){let r=new DataView(e),n=r.getUint8(0),s=new TextDecoder;if(n===this.KINDS.userBroadcast)return this._decodeUserBroadcast(e,r,s)}_decodeUserBroadcast(e,r,n){let s=r.getUint8(1),i=r.getUint8(2),o=r.getUint8(3),a=r.getUint8(4),l=this.HEADER_LENGTH+4,c=n.decode(e.slice(l,l+s));l=l+s;let u=n.decode(e.slice(l,l+i));l=l+i;let d=n.decode(e.slice(l,l+o));l=l+o;let p=e.slice(l,e.byteLength),h=a===this.JSON_ENCODING?JSON.parse(n.decode(p)):p,f={type:this.BROADCAST_EVENT,event:u,payload:h};return o>0&&(f.meta=JSON.parse(d)),{join_ref:null,ref:null,topic:c,event:this.BROADCAST_EVENT,payload:f}}_isArrayBuffer(e){var r;return e instanceof ArrayBuffer||((r=e?.constructor)===null||r===void 0?void 0:r.name)==="ArrayBuffer"}_pick(e,r){return !e||typeof e!="object"?{}:Object.fromEntries(Object.entries(e).filter(([n])=>r.includes(n)))}};});var N,ui,Af,Ol,ci,If,Of,$f,Nf,jf,En,Rn=E(()=>{(function(t){t.abstime="abstime",t.bool="bool",t.date="date",t.daterange="daterange",t.float4="float4",t.float8="float8",t.int2="int2",t.int4="int4",t.int4range="int4range",t.int8="int8",t.int8range="int8range",t.json="json",t.jsonb="jsonb",t.money="money",t.numeric="numeric",t.oid="oid",t.reltime="reltime",t.text="text",t.time="time",t.timestamp="timestamp",t.timestamptz="timestamptz",t.timetz="timetz",t.tsrange="tsrange",t.tstzrange="tstzrange";})(N||(N={}));ui=(t,e,r={})=>{var n;let s=(n=r.skipTypes)!==null&&n!==void 0?n:[];return e?Object.keys(e).reduce((i,o)=>(i[o]=Af(o,t,e,s),i),{}):{}},Af=(t,e,r,n)=>{let s=e.find(a=>a.name===t),i=s?.type,o=r[t];return i&&!n.includes(i)?Ol(i,o):ci(o)},Ol=(t,e)=>{if(t.charAt(0)==="_"){let r=t.slice(1,t.length);return Nf(e,r)}switch(t){case N.bool:return If(e);case N.float4:case N.float8:case N.int2:case N.int4:case N.int8:case N.numeric:case N.oid:return Of(e);case N.json:case N.jsonb:return $f(e);case N.timestamp:return jf(e);case N.abstime:case N.date:case N.daterange:case N.int4range:case N.int8range:case N.money:case N.reltime:case N.text:case N.time:case N.timestamptz:case N.timetz:case N.tsrange:case N.tstzrange:return ci(e);default:return ci(e)}},ci=t=>t,If=t=>{switch(t){case "t":return true;case "f":return false;default:return t}},Of=t=>{if(typeof t=="string"){let e=parseFloat(t);if(!Number.isNaN(e))return e}return t},$f=t=>{if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t},Nf=(t,e)=>{if(typeof t!="string")return t;let r=t.length-1,n=t[r];if(t[0]==="{"&&n==="}"){let i,o=t.slice(1,r);try{i=JSON.parse("["+o+"]");}catch{i=o?o.split(","):[];}return i.map(a=>Ol(e,a))}return t},jf=t=>typeof t=="string"?t.replace(" ","T"):t,En=t=>{let e=new URL(t);return e.protocol=e.protocol.replace(/^ws/i,"http"),e.pathname=e.pathname.replace(/\/+$/,"").replace(/\/socket\/websocket$/i,"").replace(/\/socket$/i,"").replace(/\/websocket$/i,""),e.pathname===""||e.pathname==="/"?e.pathname="/api/broadcast":e.pathname=e.pathname+"/api/broadcast",e.href};});var kr,Lf,Ut,we,Mf,Uf,Wf,ye,Z,Ae,di,Bf,pi,xn,$l,Ff,Tn,Hf,Mt,Nl,Pn,jl,hi=E(()=>{kr=t=>typeof t=="function"?t:function(){return t},Lf=typeof self<"u"?self:null,Ut=typeof window<"u"?window:null,we=Lf||Ut||globalThis,Mf="2.0.0",Uf=1e4,Wf=1e3,ye={connecting:0,open:1,closing:2,closed:3},Z={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},Ae={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},di={longpoll:"longpoll",websocket:"websocket"},Bf={complete:4},pi="base64url.bearer.phx.",xn=class{constructor(t,e,r,n){this.channel=t,this.event=e,this.payload=r||function(){return {}},this.receivedResp=null,this.timeout=n,this.timeoutTimer=null,this.recHooks=[],this.sent=false,this.ref=void 0;}resend(t){this.timeout=t,this.reset(),this.send();}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=true,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}));}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=false;}destroy(){this.cancelRefEvent(),this.cancelTimeout();}matchReceive({status:t,response:e,_ref:r}){this.recHooks.filter(n=>n.status===t).forEach(n=>n.callback(e));}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent);}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null;}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t);}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{});},this.timeout);}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e});}},$l=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=void 0,this.tries=0;}reset(){this.tries=0,clearTimeout(this.timer);}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback();},this.timerCalc(this.tries+1));}},Ff=class{constructor(t,e,r){this.state=Z.closed,this.topic=t,this.params=kr(e||{}),this.socket=r,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=false,this.joinPush=new xn(this,Ae.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new $l(()=>{this.socket.isConnected()&&this.rejoin();},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin();})),this.joinPush.receive("ok",()=>{this.state=Z.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(n=>n.send()),this.pushBuffer=[];}),this.joinPush.receive("error",n=>{this.state=Z.errored,this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic}`),this.state=Z.closed,this.socket.remove(this);}),this.onError(n=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.isJoining()&&this.joinPush.reset(),this.state=Z.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic}`,this.joinPush.timeout),new xn(this,Ae.leave,kr({}),this.timeout).send(),this.state=Z.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.on(Ae.reply,(n,s)=>{this.trigger(this.replyEventName(s),n);});}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=true,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(t=>t.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=Z.closed,this.bindings=[];}onClose(t){this.on(Ae.close,t);}onError(t){return this.on(Ae.error,e=>t(e))}on(t,e){let r=this.bindingRef++;return this.bindings.push({event:t,ref:r,callback:e}),r}off(t,e){this.bindings=this.bindings.filter(r=>!(r.event===t&&(typeof e>"u"||e===r.ref)));}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,r=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let n=new xn(this,t,function(){return e},r);return this.canPush()?n.send():(n.startTimeout(),this.pushBuffer.push(n)),n}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=Z.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger(Ae.close,"leave");},r=new xn(this,Ae.leave,kr({}),t);return r.receive("ok",()=>e()).receive("timeout",()=>e()),r.send(),this.canPush()||r.trigger("ok",{}),r}onMessage(t,e,r){return e}filterBindings(t,e,r){return true}isMember(t,e,r,n){return this.topic!==t?false:n&&n!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:r,joinRef:n}),false):true}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=Z.joining,this.joinPush.resend(t));}trigger(t,e,r,n){let s=this.onMessage(t,e,r,n);if(e&&!s)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let i=this.bindings.filter(o=>o.event===t&&this.filterBindings(o,e,r));for(let o=0;o<i.length;o++)i[o].callback(s,r,n||this.joinRef());}replyEventName(t){return `chan_reply_${t}`}isClosed(){return this.state===Z.closed}isErrored(){return this.state===Z.errored}isJoined(){return this.state===Z.joined}isJoining(){return this.state===Z.joining}isLeaving(){return this.state===Z.leaving}},Tn=class{static request(t,e,r,n,s,i,o){if(we.XDomainRequest){let a=new we.XDomainRequest;return this.xdomainRequest(a,t,e,n,s,i,o)}else if(we.XMLHttpRequest){let a=new we.XMLHttpRequest;return this.xhrRequest(a,t,e,r,n,s,i,o)}else {if(we.fetch&&we.AbortController)return this.fetchRequest(t,e,r,n,s,i,o);throw new Error("No suitable XMLHttpRequest implementation found")}}static fetchRequest(t,e,r,n,s,i,o){let a={method:t,headers:r,body:n},l=null;if(s){l=new AbortController;setTimeout(()=>l.abort(),s);a.signal=l.signal;}return we.fetch(e,a).then(c=>c.text()).then(c=>this.parseJSON(c)).then(c=>o&&o(c)).catch(c=>{c.name==="AbortError"&&i?i():o&&o(null);}),l}static xdomainRequest(t,e,r,n,s,i,o){return t.timeout=s,t.open(e,r),t.onload=()=>{let a=this.parseJSON(t.responseText);o&&o(a);},i&&(t.ontimeout=i),t.onprogress=()=>{},t.send(n),t}static xhrRequest(t,e,r,n,s,i,o,a){t.open(e,r,true),t.timeout=i;for(let[l,c]of Object.entries(n))t.setRequestHeader(l,c);return t.onerror=()=>a&&a(null),t.onreadystatechange=()=>{if(t.readyState===Bf.complete&&a){let l=this.parseJSON(t.responseText);a(l);}},o&&(t.ontimeout=o),t.send(s),t}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch{return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let r=[];for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let s=e?`${e}[${n}]`:n,i=t[n];typeof i=="object"?r.push(this.serialize(i,s)):r.push(encodeURIComponent(s)+"="+encodeURIComponent(i));}return r.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let r=t.match(/\?/)?"&":"?";return `${t}${r}${this.serialize(e)}`}},Hf=t=>{let e="",r=new Uint8Array(t),n=r.byteLength;for(let s=0;s<n;s++)e+=String.fromCharCode(r[s]);return btoa(e)},Mt=class{constructor(t,e){e&&e.length===2&&e[1].startsWith(pi)&&(this.authToken=atob(e[1].slice(pi.length))),this.endPoint=null,this.token=null,this.skipHeartbeat=true,this.reqs=new Set,this.awaitingBatchAck=false,this.currentBatch=null,this.currentBatchTimer=null,this.batchBuffer=[],this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=ye.connecting,setTimeout(()=>this.poll(),0);}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+di.websocket),"$1/"+di.longpoll)}endpointURL(){return Tn.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(t,e,r){this.close(t,e,r),this.readyState=ye.connecting;}ontimeout(){this.onerror("timeout"),this.closeAndRetry(1005,"timeout",false);}isActive(){return this.readyState===ye.open||this.readyState===ye.connecting}poll(){let t={Accept:"application/json"};this.authToken&&(t["X-Phoenix-AuthToken"]=this.authToken),this.ajax("GET",t,null,()=>this.ontimeout(),e=>{if(e){var{status:r,token:n,messages:s}=e;if(r===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,"session_gone",false);return}this.token=n;}else r=0;switch(r){case 200:s.forEach(i=>{setTimeout(()=>this.onmessage({data:i}),0);}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=ye.open,this.onopen({}),this.poll();break;case 403:this.onerror(403),this.close(1008,"forbidden",false);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,"internal server error",500);break;default:throw new Error(`unhandled poll status ${r}`)}});}send(t){typeof t!="string"&&(t=Hf(t)),this.currentBatch?this.currentBatch.push(t):this.awaitingBatchAck?this.batchBuffer.push(t):(this.currentBatch=[t],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null;},0));}batchSend(t){this.awaitingBatchAck=true,this.ajax("POST",{"Content-Type":"application/x-ndjson"},t.join(`
12
+ `),()=>this.onerror("timeout"),e=>{this.awaitingBatchAck=false,!e||e.status!==200?(this.onerror(e&&e.status),this.closeAndRetry(1011,"internal server error",false)):this.batchBuffer.length>0&&(this.batchSend(this.batchBuffer),this.batchBuffer=[]);});}close(t,e,r){for(let s of this.reqs)s.abort();this.readyState=ye.closed;let n=Object.assign({code:1e3,reason:void 0,wasClean:true},{code:t,reason:e,wasClean:r});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<"u"?this.onclose(new CloseEvent("close",n)):this.onclose(n);}ajax(t,e,r,n,s){let i,o=()=>{this.reqs.delete(i),n();};i=Tn.request(t,this.endpointURL(),e,r,this.timeout,o,a=>{this.reqs.delete(i),this.isActive()&&s(a);}),this.reqs.add(i);}},Nl=class yr{constructor(e,r={}){let n=r.events||{state:"presence_state",diff:"presence_diff"};this.state={},this.pendingDiffs=[],this.channel=e,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(n.state,s=>{let{onJoin:i,onLeave:o,onSync:a}=this.caller;this.joinRef=this.channel.joinRef(),this.state=yr.syncState(this.state,s,i,o),this.pendingDiffs.forEach(l=>{this.state=yr.syncDiff(this.state,l,i,o);}),this.pendingDiffs=[],a();}),this.channel.on(n.diff,s=>{let{onJoin:i,onLeave:o,onSync:a}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(s):(this.state=yr.syncDiff(this.state,s,i,o),a());});}onJoin(e){this.caller.onJoin=e;}onLeave(e){this.caller.onLeave=e;}onSync(e){this.caller.onSync=e;}list(e){return yr.list(this.state,e)}inPendingSyncState(){return !this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,r,n,s){let i=this.clone(e),o={},a={};return this.map(i,(l,c)=>{r[l]||(a[l]=c);}),this.map(r,(l,c)=>{let u=i[l];if(u){let d=c.metas.map(m=>m.phx_ref),p=u.metas.map(m=>m.phx_ref),h=c.metas.filter(m=>p.indexOf(m.phx_ref)<0),f=u.metas.filter(m=>d.indexOf(m.phx_ref)<0);h.length>0&&(o[l]=c,o[l].metas=h),f.length>0&&(a[l]=this.clone(u),a[l].metas=f);}else o[l]=c;}),this.syncDiff(i,{joins:o,leaves:a},n,s)}static syncDiff(e,r,n,s){let{joins:i,leaves:o}=this.clone(r);return n||(n=function(){}),s||(s=function(){}),this.map(i,(a,l)=>{let c=e[a];if(e[a]=this.clone(l),c){let u=e[a].metas.map(p=>p.phx_ref),d=c.metas.filter(p=>u.indexOf(p.phx_ref)<0);e[a].metas.unshift(...d);}n(a,c,l);}),this.map(o,(a,l)=>{let c=e[a];if(!c)return;let u=l.metas.map(d=>d.phx_ref);c.metas=c.metas.filter(d=>u.indexOf(d.phx_ref)<0),s(a,c,l),c.metas.length===0&&delete e[a];}),e}static list(e,r){return r||(r=function(n,s){return s}),this.map(e,(n,s)=>r(n,s))}static map(e,r){return Object.getOwnPropertyNames(e).map(n=>r(n,e[n]))}static clone(e){return JSON.parse(JSON.stringify(e))}},Pn={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let r=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(r))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[r,n,s,i,o]=JSON.parse(t);return e({join_ref:r,ref:n,topic:s,event:i,payload:o})}},binaryEncode(t){let{join_ref:e,ref:r,event:n,topic:s,payload:i}=t,o=this.META_LENGTH+e.length+r.length+s.length+n.length,a=new ArrayBuffer(this.HEADER_LENGTH+o),l=new DataView(a),c=0;l.setUint8(c++,this.KINDS.push),l.setUint8(c++,e.length),l.setUint8(c++,r.length),l.setUint8(c++,s.length),l.setUint8(c++,n.length),Array.from(e,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(r,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(s,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(n,d=>l.setUint8(c++,d.charCodeAt(0)));var u=new Uint8Array(a.byteLength+i.byteLength);return u.set(new Uint8Array(a),0),u.set(new Uint8Array(i),a.byteLength),u.buffer},binaryDecode(t){let e=new DataView(t),r=e.getUint8(0),n=new TextDecoder;switch(r){case this.KINDS.push:return this.decodePush(t,e,n);case this.KINDS.reply:return this.decodeReply(t,e,n);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,n)}},decodePush(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=e.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,a=r.decode(t.slice(o,o+n));o=o+n;let l=r.decode(t.slice(o,o+s));o=o+s;let c=r.decode(t.slice(o,o+i));o=o+i;let u=t.slice(o,t.byteLength);return {join_ref:a,ref:null,topic:l,event:c,payload:u}},decodeReply(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=e.getUint8(3),o=e.getUint8(4),a=this.HEADER_LENGTH+this.META_LENGTH,l=r.decode(t.slice(a,a+n));a=a+n;let c=r.decode(t.slice(a,a+s));a=a+s;let u=r.decode(t.slice(a,a+i));a=a+i;let d=r.decode(t.slice(a,a+o));a=a+o;let p=t.slice(a,t.byteLength),h={status:d,response:p};return {join_ref:l,ref:c,topic:u,event:Ae.reply,payload:h}},decodeBroadcast(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=this.HEADER_LENGTH+2,o=r.decode(t.slice(i,i+n));i=i+n;let a=r.decode(t.slice(i,i+s));i=i+s;let l=t.slice(i,t.byteLength);return {join_ref:null,ref:null,topic:o,event:a,payload:l}}},jl=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=e.timeout||Uf,this.transport=e.transport||we.WebSocket||Mt,this.conn=void 0,this.primaryPassedHealthCheck=false,this.longPollFallbackMs=e.longPollFallbackMs,this.fallbackTimer=null,this.sessionStore=e.sessionStorage||we&&we.sessionStorage,this.establishedConnections=0,this.defaultEncoder=Pn.encode.bind(Pn),this.defaultDecoder=Pn.decode.bind(Pn),this.closeWasClean=true,this.disconnecting=false,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.pageHidden=false,this.encode=void 0,this.decode=void 0,this.transport!==Mt?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let r=null;Ut&&Ut.addEventListener&&(Ut.addEventListener("pagehide",n=>{this.conn&&(this.disconnect(),r=this.connectClock);}),Ut.addEventListener("pageshow",n=>{r===this.connectClock&&(r=null,this.connect());}),Ut.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?this.pageHidden=true:(this.pageHidden=false,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()));})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=e.autoSendHeartbeat??true,this.heartbeatCallback=e.heartbeatCallback??(()=>{}),this.rejoinAfterMs=n=>e.rejoinAfterMs?e.rejoinAfterMs(n):[1e3,2e3,5e3][n-1]||1e4,this.reconnectAfterMs=n=>e.reconnectAfterMs?e.reconnectAfterMs(n):[10,50,100,150,200,250,500,1e3,2e3][n-1]||5e3,this.logger=e.logger||null,!this.logger&&e.debug&&(this.logger=(n,s,i)=>{console.log(`${n}: ${s}`,i);}),this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=kr(e.params||{}),this.endPoint=`${t}/${di.websocket}`,this.vsn=e.vsn||Mf,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new $l(()=>{if(this.pageHidden){this.log("Not reconnecting as page is hidden!"),this.teardown();return}this.teardown(async()=>{e.beforeReconnect&&await e.beforeReconnect(),this.connect();});},this.reconnectAfterMs),this.authToken=e.authToken;}getLongPollTransport(){return Mt}replaceTransport(t){this.connectClock++,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&(this.conn.close(),this.conn=null),this.transport=t;}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=Tn.appendParams(Tn.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,r){this.connectClock++,this.disconnecting=true,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=false,t&&t();},e,r);}connect(t){t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=kr(t)),!(this.conn&&!this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==Mt?this.connectWithFallback(Mt,this.longPollFallbackMs):this.transportConnect());}log(t,e,r){this.logger&&this.logger(t,e,r);}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onHeartbeat(t){this.heartbeatCallback=t;}ping(t){if(!this.isConnected())return false;let e=this.makeRef(),r=Date.now();this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:e});let n=this.onMessage(s=>{s.ref===e&&(this.off([n]),t(Date.now()-r));});return true}transportName(t){return t===Mt?"LongPoll":t.name}transportConnect(){this.connectClock++,this.closeWasClean=false;let t;this.authToken&&(t=["phoenix",`${pi}${btoa(this.authToken).replace(/=/g,"")}`]),this.conn=new this.transport(this.endPointURL(),t),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e);}getSession(t){return this.sessionStore&&this.sessionStore.getItem(t)}storeSession(t,e){this.sessionStore&&this.sessionStore.setItem(t,e);}connectWithFallback(t,e=2500){clearTimeout(this.fallbackTimer);let r=false,n=true,s,i,o=this.transportName(t),a=l=>{this.log("transport",`falling back to ${o}...`,l),this.off([s,i]),n=false,this.replaceTransport(t),this.transportConnect();};if(this.getSession(`phx:fallback:${o}`))return a("memorized");this.fallbackTimer=setTimeout(a,e),i=this.onError(l=>{this.log("transport","error",l),n&&!r&&(clearTimeout(this.fallbackTimer),a(l));}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(r=true,!n){let l=this.transportName(t);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${l}`,"true"),this.log("transport",`established ${l} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(a,e),this.ping(l=>{this.log("transport","connected to primary after",l),this.primaryPassedHealthCheck=true,clearTimeout(this.fallbackTimer);});}),this.transportConnect();}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer);}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=false,this.disconnecting=false,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.autoSendHeartbeat&&this.resetHeartbeat(),this.triggerStateCallbacks("open");}heartbeatTimeout(){if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection");try{this.heartbeatCallback("timeout");}catch(t){this.log("error","error in heartbeat callback",t);}this.triggerChanError(),this.closeWasClean=false,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),Wf,"heartbeat timeout");}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}teardown(t,e,r){if(!this.conn)return t&&t();let n=this.conn;this.waitForBufferDone(n,()=>{e?n.close(e,r||""):n.close(),this.waitForSocketClosed(n,()=>{this.conn===n&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),t&&t();});});}waitForBufferDone(t,e,r=1){if(r===5||!t.bufferedAmount){e();return}setTimeout(()=>{this.waitForBufferDone(t,e,r+1);},150*r);}waitForSocketClosed(t,e,r=1){if(r===5||t.readyState===ye.closed){e();return}setTimeout(()=>{this.waitForSocketClosed(t,e,r+1);},150*r);}onConnClose(t){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks("close",t);}onConnError(t){this.hasLogger()&&this.log("transport",t);let e=this.transport,r=this.establishedConnections;this.triggerStateCallbacks("error",t,e,r),(e===this.transport||r>0)&&this.triggerChanError();}triggerChanError(){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger(Ae.error);});}connectionState(){switch(this.conn&&this.conn.readyState){case ye.connecting:return "connecting";case ye.open:return "open";case ye.closing:return "closing";default:return "closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e!==t);}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([r])=>t.indexOf(r)===-1);}channel(t,e={}){let r=new Ff(t,e,this);return this.channels.push(r),r}push(t){if(this.hasLogger()){let{topic:e,event:r,payload:n,ref:s,join_ref:i}=t;this.log("push",`${e} ${r} (${i}, ${s})`,n);}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)));}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){if(!this.isConnected()){try{this.heartbeatCallback("disconnected");}catch(t){this.log("error","error in heartbeat callback",t);}return}if(this.pendingHeartbeatRef){this.heartbeatTimeout();return}this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback("sent");}catch(t){this.log("error","error in heartbeat callback",t);}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs);}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[]);}onConnMessage(t){this.decode(t.data,e=>{let{topic:r,event:n,payload:s,ref:i,join_ref:o}=e;if(i&&i===this.pendingHeartbeatRef){let a=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(s.status==="ok"?"ok":"error",a);}catch(l){this.log("error","error in heartbeat callback",l);}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}this.hasLogger()&&this.log("receive",`${s.status||""} ${r} ${n} ${i&&"("+i+")"||""}`.trim(),s);for(let a=0;a<this.channels.length;a++){let l=this.channels[a];l.isMember(r,n,s,o)&&l.trigger(n,s,i,o);}this.triggerStateCallbacks("message",e);});}triggerStateCallbacks(t,...e){try{this.stateChangeCallbacks[t].forEach(([r,n])=>{try{n(...e);}catch(s){this.log("error",`error in ${t} callback`,s);}});}catch(r){this.log("error",`error triggering ${t} callbacks`,r);}}leaveOpenTopic(t){let e=this.channels.find(r=>r.topic===t&&(r.isJoined()||r.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave());}};});function An(t){return t.metas.map(e=>(e.presence_ref=e.phx_ref,delete e.phx_ref,delete e.phx_ref_prev,e))}function qf(t){return JSON.parse(JSON.stringify(t))}function zf(t){return t?.events&&{events:t.events}}function Dl(t){return t?.metas?An(t):[]}var br,Ll=E(()=>{hi();br=class t{constructor(e,r){let n=zf(r);this.presence=new Nl(e.getChannel(),n),this.presence.onJoin((s,i,o)=>{let a=t.onJoinPayload(s,i,o);e.getChannel().trigger("presence",a);}),this.presence.onLeave((s,i,o)=>{let a=t.onLeavePayload(s,i,o);e.getChannel().trigger("presence",a);}),this.presence.onSync(()=>{e.getChannel().trigger("presence",{event:"sync"});});}get state(){return t.transformState(this.presence.state)}static transformState(e){return e=qf(e),Object.getOwnPropertyNames(e).reduce((r,n)=>{let s=e[n];return r[n]=An(s),r},{})}static onJoinPayload(e,r,n){let s=Dl(r),i=An(n);return {event:"join",key:e,currentPresences:s,newPresences:i}}static onLeavePayload(e,r,n){let s=Dl(r),i=An(n);return {event:"leave",key:e,currentPresences:s,leftPresences:i}}};});var fi,Wt,gi=E(()=>{Ll();(function(t){t.SYNC="sync",t.JOIN="join",t.LEAVE="leave";})(fi||(fi={}));Wt=class{get state(){return this.presenceAdapter.state}constructor(e,r){this.channel=e,this.presenceAdapter=new br(this.channel.channelAdapter,r);}};});function Jf(t){return {config:Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},t.config)}}var vr,Ml=E(()=>{_r();vr=class{constructor(e,r,n){let s=Jf(n);this.channel=e.getSocket().channel(r,s),this.socket=e;}get state(){return this.channel.state}set state(e){this.channel.state=e;}get joinedOnce(){return this.channel.joinedOnce}get joinPush(){return this.channel.joinPush}get rejoinTimer(){return this.channel.rejoinTimer}on(e,r){return this.channel.on(e,r)}off(e,r){this.channel.off(e,r);}subscribe(e){return this.channel.join(e)}unsubscribe(e){return this.channel.leave(e)}teardown(){this.channel.teardown();}onClose(e){this.channel.onClose(e);}onError(e){return this.channel.onError(e)}push(e,r,n){let s;try{s=this.channel.push(e,r,n);}catch{throw `tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`}if(this.channel.pushBuffer.length>Al){let i=this.channel.pushBuffer.shift();i.cancelTimeout(),this.socket.log("channel",`discarded push due to buffer overflow: ${i.event}`,i.payload());}return s}updateJoinPayload(e){let r=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},r),e);}canPush(){return this.socket.isConnected()&&this.state===_e.joined}isJoined(){return this.state===_e.joined}isJoining(){return this.state===_e.joining}isClosed(){return this.state===_e.closed}isLeaving(){return this.state===_e.leaving}updateFilterBindings(e){this.channel.filterBindings=e;}updatePayloadTransform(e){this.channel.onMessage=e;}getChannel(){return this.channel}};});var mi,rt,ke,Bt,_i=E(()=>{_r();gi();Rn();Rn();Ml();(function(t){t.ALL="*",t.INSERT="INSERT",t.UPDATE="UPDATE",t.DELETE="DELETE";})(mi||(mi={}));(function(t){t.BROADCAST="broadcast",t.PRESENCE="presence",t.POSTGRES_CHANGES="postgres_changes",t.SYSTEM="system";})(rt||(rt={}));(function(t){t.SUBSCRIBED="SUBSCRIBED",t.TIMED_OUT="TIMED_OUT",t.CLOSED="CLOSED",t.CHANNEL_ERROR="CHANNEL_ERROR";})(ke||(ke={}));Bt=class t{get state(){return this.channelAdapter.state}set state(e){this.channelAdapter.state=e;}get joinedOnce(){return this.channelAdapter.joinedOnce}get timeout(){return this.socket.timeout}get joinPush(){return this.channelAdapter.joinPush}get rejoinTimer(){return this.channelAdapter.rejoinTimer}constructor(e,r={config:{}},n){var s,i;if(this.topic=e,this.params=r,this.socket=n,this.bindings={},this.subTopic=e.replace(/^realtime:/i,""),this.params.config=Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},r.config),this.channelAdapter=new vr(this.socket.socketAdapter,e,this.params),this.presence=new Wt(this),this._onClose(()=>{this.socket._remove(this);}),this._updateFilterTransform(),this.broadcastEndpointURL=En(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||false,!this.private&&(!((i=(s=this.params.config)===null||s===void 0?void 0:s.broadcast)===null||i===void 0)&&i.replay))throw `tried to use replay on public channel '${this.topic}'. It must be a private channel.`}subscribe(e,r=this.timeout){var n,s,i;if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){let{config:{broadcast:o,presence:a,private:l}}=this.params,c=(s=(n=this.bindings.postgres_changes)===null||n===void 0?void 0:n.map(h=>h.filter))!==null&&s!==void 0?s:[],u=!!this.bindings[rt.PRESENCE]&&this.bindings[rt.PRESENCE].length>0||((i=this.params.config.presence)===null||i===void 0?void 0:i.enabled)===true,d={},p={broadcast:o,presence:Object.assign(Object.assign({},a),{enabled:u}),postgres_changes:c,private:l};this.socket.accessTokenValue&&(d.access_token=this.socket.accessTokenValue),this._onError(h=>{e?.(ke.CHANNEL_ERROR,h);}),this._onClose(()=>e?.(ke.CLOSED)),this.updateJoinPayload(Object.assign({config:p},d)),this._updateFilterMessage(),this.channelAdapter.subscribe(r).receive("ok",async({postgres_changes:h})=>{if(this.socket._isManualToken()||this.socket.setAuth(),h===void 0){e?.(ke.SUBSCRIBED);return}this._updatePostgresBindings(h,e);}).receive("error",h=>{this.state=_e.errored,e?.(ke.CHANNEL_ERROR,new Error(JSON.stringify(Object.values(h).join(", ")||"error")));}).receive("timeout",()=>{e?.(ke.TIMED_OUT);});}return this}_updatePostgresBindings(e,r){var n;let s=this.bindings.postgres_changes,i=(n=s?.length)!==null&&n!==void 0?n:0,o=[];for(let a=0;a<i;a++){let l=s[a],{filter:{event:c,schema:u,table:d,filter:p}}=l,h=e&&e[a];if(h&&h.event===c&&t.isFilterValueEqual(h.schema,u)&&t.isFilterValueEqual(h.table,d)&&t.isFilterValueEqual(h.filter,p))o.push(Object.assign(Object.assign({},l),{id:h.id}));else {this.unsubscribe(),this.state=_e.errored,r?.(ke.CHANNEL_ERROR,new Error("mismatch between server and client bindings for postgres changes"));return}}this.bindings.postgres_changes=o,this.state!=_e.errored&&r&&r(ke.SUBSCRIBED);}presenceState(){return this.presence.state}async track(e,r={}){return await this.send({type:"presence",event:"track",payload:e},r.timeout||this.timeout)}async untrack(e={}){return await this.send({type:"presence",event:"untrack"},e)}on(e,r,n){let s=this.channelAdapter.isJoined()||this.channelAdapter.isJoining(),i=e===rt.PRESENCE||e===rt.POSTGRES_CHANGES;if(s&&i)throw this.socket.log("channel",`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`),new Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`);return this._on(e,r,n)}async httpSend(e,r,n={}){var s;if(r==null)return Promise.reject("Payload is required for httpSend()");let i={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(i.Authorization=`Bearer ${this.socket.accessTokenValue}`);let o={method:"POST",headers:i,body:JSON.stringify({messages:[{topic:this.subTopic,event:e,payload:r,private:this.private}]})},a=await this._fetchWithTimeout(this.broadcastEndpointURL,o,(s=n.timeout)!==null&&s!==void 0?s:this.timeout);if(a.status===202)return {success:true};let l=a.statusText;try{let c=await a.json();l=c.error||c.message||l;}catch{}return Promise.reject(new Error(l))}async send(e,r={}){var n,s;if(!this.channelAdapter.canPush()&&e.type==="broadcast"){console.warn("Realtime send() is automatically falling back to REST API. This behavior will be deprecated in the future. Please use httpSend() explicitly for REST delivery.");let{event:i,payload:o}=e,a={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(a.Authorization=`Bearer ${this.socket.accessTokenValue}`);let l={method:"POST",headers:a,body:JSON.stringify({messages:[{topic:this.subTopic,event:i,payload:o,private:this.private}]})};try{let c=await this._fetchWithTimeout(this.broadcastEndpointURL,l,(n=r.timeout)!==null&&n!==void 0?n:this.timeout);return await((s=c.body)===null||s===void 0?void 0:s.cancel()),c.ok?"ok":"error"}catch(c){return c.name==="AbortError"?"timed out":"error"}}else return new Promise(i=>{var o,a,l;let c=this.channelAdapter.push(e.type,e,r.timeout||this.timeout);e.type==="broadcast"&&!(!((l=(a=(o=this.params)===null||o===void 0?void 0:o.config)===null||a===void 0?void 0:a.broadcast)===null||l===void 0)&&l.ack)&&i("ok"),c.receive("ok",()=>i("ok")),c.receive("error",()=>i("error")),c.receive("timeout",()=>i("timed out"));})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e);}async unsubscribe(e=this.timeout){return new Promise(r=>{this.channelAdapter.unsubscribe(e).receive("ok",()=>r("ok")).receive("timeout",()=>r("timed out")).receive("error",()=>r("error"));})}teardown(){this.channelAdapter.teardown();}async _fetchWithTimeout(e,r,n){let s=new AbortController,i=setTimeout(()=>s.abort(),n),o=await this.socket.fetch(e,Object.assign(Object.assign({},r),{signal:s.signal}));return clearTimeout(i),o}_on(e,r,n){let s=e.toLocaleLowerCase(),i=this.channelAdapter.on(e,n),o={type:s,filter:r,callback:n,ref:i};return this.bindings[s]?this.bindings[s].push(o):this.bindings[s]=[o],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e);}_onError(e){this.channelAdapter.onError(e);}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,r,n)=>{var s,i,o,a,l,c,u;let d=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(d,n))return false;let p=(s=this.bindings[d])===null||s===void 0?void 0:s.find(h=>h.ref===e.ref);if(!p)return true;if(["broadcast","presence","postgres_changes"].includes(d))if("id"in p){let h=p.id,f=(i=p.filter)===null||i===void 0?void 0:i.event;return h&&((o=r.ids)===null||o===void 0?void 0:o.includes(h))&&(f==="*"||f?.toLocaleLowerCase()===((a=r.data)===null||a===void 0?void 0:a.type.toLocaleLowerCase()))}else {let h=(c=(l=p?.filter)===null||l===void 0?void 0:l.event)===null||c===void 0?void 0:c.toLocaleLowerCase();return h==="*"||h===((u=r?.event)===null||u===void 0?void 0:u.toLocaleLowerCase())}else return p.type.toLocaleLowerCase()===d});}_notThisChannelEvent(e,r){let{close:n,error:s,leave:i,join:o}=Cn;return r&&[n,s,i,o].includes(e)&&r!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,r,n)=>{if(typeof r=="object"&&"ids"in r){let s=r.data,{schema:i,table:o,commit_timestamp:a,type:l,errors:c}=s;return Object.assign(Object.assign({},{schema:i,table:o,commit_timestamp:a,eventType:l,new:{},old:{},errors:c}),this._getPayloadRecords(s))}return r});}copyBindings(e){if(this.joinedOnce)throw new Error("cannot copy bindings into joined channel");for(let r in e.bindings)for(let n of e.bindings[r])this._on(n.type,n.filter,n.callback);}static isFilterValueEqual(e,r){return (e??void 0)===(r??void 0)}_getPayloadRecords(e){let r={new:{},old:{}};return (e.type==="INSERT"||e.type==="UPDATE")&&(r.new=ui(e.columns,e.record)),(e.type==="UPDATE"||e.type==="DELETE")&&(r.old=ui(e.columns,e.old_record)),r}};});var Sr,Ul=E(()=>{hi();_r();Sr=class{constructor(e,r){this.socket=new jl(e,r);}get timeout(){return this.socket.timeout}get endPoint(){return this.socket.endPoint}get transport(){return this.socket.transport}get heartbeatIntervalMs(){return this.socket.heartbeatIntervalMs}get heartbeatCallback(){return this.socket.heartbeatCallback}set heartbeatCallback(e){this.socket.heartbeatCallback=e;}get heartbeatTimer(){return this.socket.heartbeatTimer}get pendingHeartbeatRef(){return this.socket.pendingHeartbeatRef}get reconnectTimer(){return this.socket.reconnectTimer}get vsn(){return this.socket.vsn}get encode(){return this.socket.encode}get decode(){return this.socket.decode}get reconnectAfterMs(){return this.socket.reconnectAfterMs}get sendBuffer(){return this.socket.sendBuffer}get stateChangeCallbacks(){return this.socket.stateChangeCallbacks}connect(){this.socket.connect();}disconnect(e,r,n,s=1e4){return new Promise(i=>{setTimeout(()=>i("timeout"),s),this.socket.disconnect(()=>{e(),i("ok");},r,n);})}push(e){this.socket.push(e);}log(e,r,n){this.socket.log(e,r,n);}makeRef(){return this.socket.makeRef()}onOpen(e){this.socket.onOpen(e);}onClose(e){this.socket.onClose(e);}onError(e){this.socket.onError(e);}onMessage(e){this.socket.onMessage(e);}isConnected(){return this.socket.isConnected()}isConnecting(){return this.socket.connectionState()==mr.connecting}isDisconnecting(){return this.socket.connectionState()==mr.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat();}getSocket(){return this.socket}};});var Kf,Vf,Gf,Yf,Ft,Wl=E(()=>{ai();_r();Il();Rn();_i();Ul();Kf={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},Vf=[1e3,2e3,5e3,1e4],Gf=1e4,Yf=`
13
13
  addEventListener("message", (e) => {
14
14
  if (e.data.event === "start") {
15
15
  setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval);
16
16
  }
17
- });`,Ft=class{get endPoint(){return this.socketAdapter.endPoint}get timeout(){return this.socketAdapter.timeout}get transport(){return this.socketAdapter.transport}get heartbeatCallback(){return this.socketAdapter.heartbeatCallback}get heartbeatIntervalMs(){return this.socketAdapter.heartbeatIntervalMs}get heartbeatTimer(){return this.worker?this._workerHeartbeatTimer:this.socketAdapter.heartbeatTimer}get pendingHeartbeatRef(){return this.worker?this._pendingWorkerHeartbeatRef:this.socketAdapter.pendingHeartbeatRef}get reconnectTimer(){return this.socketAdapter.reconnectTimer}get vsn(){return this.socketAdapter.vsn}get encode(){return this.socketAdapter.encode}get decode(){return this.socketAdapter.decode}get reconnectAfterMs(){return this.socketAdapter.reconnectAfterMs}get sendBuffer(){return this.socketAdapter.sendBuffer}get stateChangeCallbacks(){return this.socketAdapter.stateChangeCallbacks}constructor(e,r){var n;if(this.channels=new Array,this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint="",this.headers={},this.params={},this.ref=0,this.serializer=new _r,this._manuallySetToken=false,this._authPromise=null,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._resolveFetch=i=>i?(...o)=>i(...o):(...o)=>fetch(...o),!(!((n=r?.params)===null||n===void 0)&&n.apikey))throw new Error("API key is required to connect to Realtime");this.apiKey=r.params.apikey;let s=this._initializeOptions(r);this.socketAdapter=new vr(e,s),this.httpEndpoint=En(e),this.fetch=this._resolveFetch(r?.fetch);}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely("connect"),this._setupConnectionHandlers();try{this.socketAdapter.connect();}catch(e){let r=e.message;throw r.includes("Node.js")?new Error(`${r}
17
+ });`,Ft=class{get endPoint(){return this.socketAdapter.endPoint}get timeout(){return this.socketAdapter.timeout}get transport(){return this.socketAdapter.transport}get heartbeatCallback(){return this.socketAdapter.heartbeatCallback}get heartbeatIntervalMs(){return this.socketAdapter.heartbeatIntervalMs}get heartbeatTimer(){return this.worker?this._workerHeartbeatTimer:this.socketAdapter.heartbeatTimer}get pendingHeartbeatRef(){return this.worker?this._pendingWorkerHeartbeatRef:this.socketAdapter.pendingHeartbeatRef}get reconnectTimer(){return this.socketAdapter.reconnectTimer}get vsn(){return this.socketAdapter.vsn}get encode(){return this.socketAdapter.encode}get decode(){return this.socketAdapter.decode}get reconnectAfterMs(){return this.socketAdapter.reconnectAfterMs}get sendBuffer(){return this.socketAdapter.sendBuffer}get stateChangeCallbacks(){return this.socketAdapter.stateChangeCallbacks}constructor(e,r){var n;if(this.channels=new Array,this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint="",this.headers={},this.params={},this.ref=0,this.serializer=new wr,this._manuallySetToken=false,this._authPromise=null,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._resolveFetch=i=>i?(...o)=>i(...o):(...o)=>fetch(...o),!(!((n=r?.params)===null||n===void 0)&&n.apikey))throw new Error("API key is required to connect to Realtime");this.apiKey=r.params.apikey;let s=this._initializeOptions(r);this.socketAdapter=new Sr(e,s),this.httpEndpoint=En(e),this.fetch=this._resolveFetch(r?.fetch);}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely("connect"),this._setupConnectionHandlers();try{this.socketAdapter.connect();}catch(e){let r=e.message;throw r.includes("Node.js")?new Error(`${r}
18
18
 
19
19
  To use Realtime in Node.js, you need to provide a WebSocket implementation:
20
20
 
@@ -27,8 +27,8 @@ Option 2: Install and provide the "ws" package:
27
27
  const client = new RealtimeClient(url, {
28
28
  ...options,
29
29
  transport: ws
30
- })`):new Error(`WebSocket not available: ${r}`)}this._handleNodeJsRaceCondition();}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,r){return this.isDisconnecting()?"ok":await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker();},e,r)}getChannels(){return this.channels}async removeChannel(e){let r=await e.unsubscribe();return r==="ok"&&e.teardown(),this.channels.length===0&&this.disconnect(),r}async removeAllChannels(){let e=this.channels.map(async n=>{let s=await n.unsubscribe();return n.teardown(),s}),r=await Promise.all(e);return this.disconnect(),r}log(e,r,n){this.socketAdapter.log(e,r,n);}connectionState(){return this.socketAdapter.connectionState()||gr.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,r={config:{}}){let n=`realtime:${e}`,s=this.getChannels().find(i=>i.topic===n);if(s)return s;{let i=new Bt(`realtime:${e}`,r,this);return this.channels.push(i),i}}push(e){this.socketAdapter.push(e);}async setAuth(e=null){this._authPromise=this._performAuth(e);try{await this._authPromise;}finally{this._authPromise=null;}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){this.socketAdapter.sendHeartbeat();}onHeartbeat(e){this.socketAdapter.heartbeatCallback=this._wrapHeartbeatCallback(e);}_makeRef(){return this.socketAdapter.makeRef()}_remove(e){this.channels=this.channels.filter(r=>r.topic!==e.topic);}async _performAuth(e=null){let r,n=false;if(e)r=e,n=true;else if(this.accessToken)try{r=await this.accessToken();}catch(s){this.log("error","Error fetching access token from callback",s),r=this.accessTokenValue;}else r=this.accessTokenValue;n?this._manuallySetToken=true:this.accessToken&&(this._manuallySetToken=false),this.accessTokenValue!=r&&(this.accessTokenValue=r,this.channels.forEach(s=>{let i={access_token:r,version:Rl};r&&s.updateJoinPayload(i),s.joinedOnce&&s.channelAdapter.isJoined()&&s.channelAdapter.push(Cn.access_token,{access_token:r});}));}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise;}_setAuthSafely(e="general"){this._isManualToken()||this.setAuth().catch(r=>{this.log("error",`Error setting auth in ${e}`,r);});}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(r=>{this.log("error","error waiting for auth on connect",r);}),this.worker&&!this.workerRef&&this._startWorkerHeartbeat();}),this.socketAdapter.onClose(()=>{this.worker&&this.workerRef&&this._terminateWorker();}),this.socketAdapter.onMessage(e=>{e.ref&&e.ref===this._pendingWorkerHeartbeatRef&&(this._pendingWorkerHeartbeatRef=null);});}_handleNodeJsRaceCondition(){this.socketAdapter.isConnected()&&this.socketAdapter.getSocket().onConnOpen();}_wrapHeartbeatCallback(e){return (r,n)=>{r=="sent"&&this._setAuthSafely(),e&&e(r,n);}}_startWorkerHeartbeat(){this.workerUrl?this.log("worker",`starting worker for from ${this.workerUrl}`):this.log("worker","starting default worker");let e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=r=>{this.log("worker","worker error",r.message),this._terminateWorker(),this.disconnect();},this.workerRef.onmessage=r=>{r.data.event==="keepAlive"&&this.sendHeartbeat();},this.workerRef.postMessage({event:"start",interval:this.heartbeatIntervalMs});}_terminateWorker(){this.workerRef&&(this.log("worker","terminating worker"),this.workerRef.terminate(),this.workerRef=void 0);}_workerObjectUrl(e){let r;if(e)r=e;else {let n=new Blob([Yf],{type:"application/javascript"});r=URL.createObjectURL(n);}return r}_initializeOptions(e){var r,n,s,i,o,a,l,c,u;this.worker=(r=e?.worker)!==null&&r!==void 0?r:false,this.accessToken=(n=e?.accessToken)!==null&&n!==void 0?n:null;let d={};d.timeout=(s=e?.timeout)!==null&&s!==void 0?s:Tl,d.heartbeatIntervalMs=(i=e?.heartbeatIntervalMs)!==null&&i!==void 0?i:Kf.HEARTBEAT_INTERVAL,d.transport=(o=e?.transport)!==null&&o!==void 0?o:oi.getWebSocketConstructor(),d.params=e?.params,d.logger=e?.logger,d.heartbeatCallback=this._wrapHeartbeatCallback(e?.heartbeatCallback),d.reconnectAfterMs=(a=e?.reconnectAfterMs)!==null&&a!==void 0?a:(m=>Vf[m-1]||Gf);let p,h,f=(l=e?.vsn)!==null&&l!==void 0?l:Pl;switch(f){case xl:p=(m,_)=>_(JSON.stringify(m)),h=(m,_)=>_(JSON.parse(m));break;case li:p=this.serializer.encode.bind(this.serializer),h=this.serializer.decode.bind(this.serializer);break;default:throw new Error(`Unsupported serializer version: ${d.vsn}`)}if(d.vsn=f,d.encode=(c=e?.encode)!==null&&c!==void 0?c:p,d.decode=(u=e?.decode)!==null&&u!==void 0?u:h,d.beforeReconnect=this._reconnectAuth.bind(this),(e?.logLevel||e?.log_level)&&(this.logLevel=e.logLevel||e.log_level,d.params=Object.assign(Object.assign({},d.params),{log_level:this.logLevel})),this.worker){if(typeof window<"u"&&!window.Worker)throw new Error("Web Worker is not supported");this.workerUrl=e?.workerUrl,d.autoSendHeartbeat=!this.worker;}return d}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect();}};});var wi=E(()=>{Wl();_i();gi();ai();});function Xf(t,e,r){let n=new URL(e,t);if(r)for(let[s,i]of Object.entries(r))i!==void 0&&n.searchParams.set(s,i);return n.toString()}async function Zf(t){return !t||t.type==="none"?{}:t.type==="bearer"?{Authorization:`Bearer ${t.token}`}:t.type==="header"?{[t.name]:t.value}:t.type==="custom"?await t.getHeaders():{}}function Qf(t){let e=t.fetchImpl??globalThis.fetch;return {async request({method:r,path:n,query:s,body:i,headers:o}){let a=Xf(t.baseUrl,n,s),l=await Zf(t.auth),c=await e(a,{method:r,headers:{...i?{"Content-Type":"application/json"}:{},...l,...o},body:i?JSON.stringify(i):void 0}),u=await c.text(),d=(c.headers.get("content-type")||"").includes("application/json"),p=d&&u?JSON.parse(u):u;if(!c.ok){let h=d?p:void 0,f=h?.error;throw new Sr(f?.message??`Request failed with status ${c.status}`,{status:c.status,icebergType:f?.type,icebergCode:f?.code,details:h})}return {status:c.status,headers:c.headers,data:p}}}}function In(t){return t.join("")}function Ht(t){return t.join("")}var Sr,eg,tg,Bl,Fl=E(()=>{Sr=class extends Error{constructor(t,e){super(t),this.name="IcebergError",this.status=e.status,this.icebergType=e.icebergType,this.icebergCode=e.icebergCode,this.details=e.details,this.isCommitStateUnknown=e.icebergType==="CommitStateUnknownException"||[500,502,504].includes(e.status)&&e.icebergType?.includes("CommitState")===true;}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};eg=class{constructor(t,e=""){this.client=t,this.prefix=e;}async listNamespaces(t){let e=t?{parent:In(t.namespace)}:void 0;return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:e})).data.namespaces.map(n=>({namespace:n}))}async createNamespace(t,e){let r={namespace:t.namespace,properties:e?.properties};return (await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:r})).data}async dropNamespace(t){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${In(t.namespace)}`});}async loadNamespaceMetadata(t){return {properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${In(t.namespace)}`})).data.properties}}async namespaceExists(t){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${In(t.namespace)}`}),!0}catch(e){if(e instanceof Sr&&e.status===404)return false;throw e}}async createNamespaceIfNotExists(t,e){try{return await this.createNamespace(t,e)}catch(r){if(r instanceof Sr&&r.status===409)return;throw r}}};tg=class{constructor(t,e="",r){this.client=t,this.prefix=e,this.accessDelegation=r;}async listTables(t){return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables`})).data.identifiers}async createTable(t,e){let r={};return this.accessDelegation&&(r["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables`,body:e,headers:r})).data.metadata}async updateTable(t,e){let r=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,body:e});return {"metadata-location":r.data["metadata-location"],metadata:r.data.metadata}}async dropTable(t,e){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,query:{purgeRequested:String(e?.purge??false)}});}async loadTable(t){let e={};return this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,headers:e})).data.metadata}async tableExists(t){let e={};this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation);try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,headers:e}),!0}catch(r){if(r instanceof Sr&&r.status===404)return false;throw r}}async createTableIfNotExists(t,e){try{return await this.createTable(t,e)}catch(r){if(r instanceof Sr&&r.status===409)return await this.loadTable({namespace:t.namespace,name:e.name});throw r}}},Bl=class{constructor(t){let e="v1";t.catalogName&&(e+=`/${t.catalogName}`);let r=t.baseUrl.endsWith("/")?t.baseUrl:`${t.baseUrl}/`;this.client=Qf({baseUrl:r,auth:t.auth,fetchImpl:t.fetch}),this.accessDelegation=t.accessDelegation?.join(","),this.namespaceOps=new eg(this.client,e),this.tableOps=new tg(this.client,e,this.accessDelegation);}async listNamespaces(t){return this.namespaceOps.listNamespaces(t)}async createNamespace(t,e){return this.namespaceOps.createNamespace(t,e)}async dropNamespace(t){await this.namespaceOps.dropNamespace(t);}async loadNamespaceMetadata(t){return this.namespaceOps.loadNamespaceMetadata(t)}async listTables(t){return this.tableOps.listTables(t)}async createTable(t,e){return this.tableOps.createTable(t,e)}async updateTable(t,e){return this.tableOps.updateTable(t,e)}async dropTable(t,e){await this.tableOps.dropTable(t,e);}async loadTable(t){return this.tableOps.loadTable(t)}async namespaceExists(t){return this.namespaceOps.namespaceExists(t)}async tableExists(t){return this.tableOps.tableExists(t)}async createNamespaceIfNotExists(t,e){return this.namespaceOps.createNamespaceIfNotExists(t,e)}async createTableIfNotExists(t,e){return this.tableOps.createTableIfNotExists(t,e)}};});function Er(t){"@babel/helpers - typeof";return Er=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Er(t)}function rg(t,e){if(Er(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Er(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function ng(t){var e=rg(t,"string");return Er(e)=="symbol"?e:e+""}function sg(t,e,r){return (e=ng(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function Hl(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function C(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Hl(Object(r),true).forEach(function(n){sg(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Hl(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function Nn(t){return typeof t=="object"&&t!==null&&"__isStorageError"in t}function ug(t,e,r){let n=C({},t);for(let s of Object.keys(n))s.toLowerCase()===e.toLowerCase()&&delete n[s];return n[e]=r,n}async function Cr(t,e,r,n,s,i,o){return new Promise((a,l)=>{t(r,cg(e,n,s,i)).then(c=>{if(!c.ok)throw c;if(n?.noResolveJson)return c;if(o==="vectors"){let u=c.headers.get("content-type");if(c.headers.get("content-length")==="0"||c.status===204)return {};if(!u||!u.includes("application/json"))return {}}return c.json()}).then(c=>a(c)).catch(c=>lg(c,l,n,o));})}function Kl(t="storage"){return {get:async(e,r,n,s)=>Cr(e,"GET",r,n,s,void 0,t),post:async(e,r,n,s,i)=>Cr(e,"POST",r,s,i,n,t),put:async(e,r,n,s,i)=>Cr(e,"PUT",r,s,i,n,t),head:async(e,r,n,s)=>Cr(e,"HEAD",r,C(C({},n),{},{noResolveJson:true}),s,void 0,t),remove:async(e,r,n,s,i)=>Cr(e,"DELETE",r,s,i,n,t)}}var $n,On,Jl,ig,og,yi,ag,ql,lg,cg,dg,Rr,ce,ki,pg,bi,te,qt,hg,Vl,fg,gg,zl,mg,_g,xr,wg,yg,kg,bg,vg,Sg,Cg,Eg,Gl,Yl=E(()=>{Fl();$n=class extends Error{constructor(t,e="storage",r,n){super(t),this.__isStorageError=true,this.namespace=e,this.name=e==="vectors"?"StorageVectorsError":"StorageError",this.status=r,this.statusCode=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}};On=class extends $n{constructor(t,e,r,n="storage"){super(t,n,e,r),this.name=n==="vectors"?"StorageVectorsApiError":"StorageApiError",this.status=e,this.statusCode=r;}toJSON(){return C({},super.toJSON())}},Jl=class extends $n{constructor(t,e,r="storage"){super(t,r),this.name=r==="vectors"?"StorageVectorsUnknownError":"StorageUnknownError",this.originalError=e;}},ig=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),og=t=>{if(typeof t!="object"||t===null)return false;let e=Object.getPrototypeOf(t);return (e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},yi=t=>{if(Array.isArray(t))return t.map(r=>yi(r));if(typeof t=="function"||t!==Object(t))return t;let e={};return Object.entries(t).forEach(([r,n])=>{let s=r.replace(/([-_][a-z])/gi,i=>i.toUpperCase().replace(/[-_]/g,""));e[s]=yi(n);}),e},ag=t=>!t||typeof t!="string"||t.length===0||t.length>100||t.trim()!==t||t.includes("/")||t.includes("\\")?false:/^[\w!.\*'() &$@=;:+,?-]+$/.test(t),ql=t=>{var e;return t.msg||t.message||t.error_description||(typeof t.error=="string"?t.error:(e=t.error)===null||e===void 0?void 0:e.message)||JSON.stringify(t)},lg=async(t,e,r,n)=>{if(t!==null&&typeof t=="object"&&typeof t.json=="function"){let s=t,i=parseInt(s.status,10);Number.isFinite(i)||(i=500),s.json().then(o=>{let a=o?.statusCode||o?.code||i+"";e(new On(ql(o),i,a,n));}).catch(()=>{let o=i+"";e(new On(s.statusText||`HTTP ${i} error`,i,o,n));});}else e(new Jl(ql(t),t,n));},cg=(t,e,r,n)=>{let s={method:t,headers:e?.headers||{}};if(t==="GET"||t==="HEAD"||!n)return C(C({},s),r);if(og(n)){var i;let o=e?.headers||{},a;for(let[l,c]of Object.entries(o))l.toLowerCase()==="content-type"&&(a=c);s.headers=ug(o,"Content-Type",(i=a)!==null&&i!==void 0?i:"application/json"),s.body=JSON.stringify(n);}else s.body=n;return e?.duplex&&(s.duplex=e.duplex),C(C({},s),r)};dg=Kl("storage"),{get:Rr,post:ce,put:ki,head:pg,remove:bi}=dg,te=Kl("vectors"),qt=class{constructor(t,e={},r,n="storage"){this.shouldThrowOnError=false,this.url=t,this.headers=Object.fromEntries(Object.entries(e).map(([s,i])=>[s.toLowerCase(),i])),this.fetch=ig(r),this.namespace=n;}throwOnError(){return this.shouldThrowOnError=true,this}setHeader(t,e){return this.headers=C(C({},this.headers),{},{[t.toLowerCase()]:e}),this}async handleOperation(t){var e=this;try{return {data:await t(),error:null}}catch(r){if(e.shouldThrowOnError)throw r;if(Nn(r))return {data:null,error:r};throw r}}},hg=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e;}then(t,e){return this.execute().then(t,e)}async execute(){var t=this;try{return {data:(await t.downloadFn()).body,error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Nn(e))return {data:null,error:e};throw e}}};Vl=Symbol.toStringTag;fg=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e,this[Vl]="BlobDownloadBuilder",this.promise=null;}asStream(){return new hg(this.downloadFn,this.shouldThrowOnError)}then(t,e){return this.getPromise().then(t,e)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}async execute(){var t=this;try{return {data:await(await t.downloadFn()).blob(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Nn(e))return {data:null,error:e};throw e}}},gg={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},zl={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:false},mg=class extends qt{constructor(t,e={},r,n){super(t,e,n,"storage"),this.bucketId=r;}async uploadOrUpdate(t,e,r,n){var s=this;return s.handleOperation(async()=>{let i,o=C(C({},zl),n),a=C(C({},s.headers),t==="POST"&&{"x-upsert":String(o.upsert)}),l=o.metadata;typeof Blob<"u"&&r instanceof Blob?(i=new FormData,i.append("cacheControl",o.cacheControl),l&&i.append("metadata",s.encodeMetadata(l)),i.append("",r)):typeof FormData<"u"&&r instanceof FormData?(i=r,i.has("cacheControl")||i.append("cacheControl",o.cacheControl),l&&!i.has("metadata")&&i.append("metadata",s.encodeMetadata(l))):(i=r,a["cache-control"]=`max-age=${o.cacheControl}`,a["content-type"]=o.contentType,l&&(a["x-metadata"]=s.toBase64(s.encodeMetadata(l))),(typeof ReadableStream<"u"&&i instanceof ReadableStream||i&&typeof i=="object"&&"pipe"in i&&typeof i.pipe=="function")&&!o.duplex&&(o.duplex="half")),n?.headers&&(a=C(C({},a),n.headers));let c=s._removeEmptyFolders(e),u=s._getFinalPath(c),d=await(t=="PUT"?ki:ce)(s.fetch,`${s.url}/object/${u}`,i,C({headers:a},o?.duplex?{duplex:o.duplex}:{}));return {path:c,id:d.Id,fullPath:d.Key}})}async upload(t,e,r){return this.uploadOrUpdate("POST",t,e,r)}async uploadToSignedUrl(t,e,r,n){var s=this;let i=s._removeEmptyFolders(t),o=s._getFinalPath(i),a=new URL(s.url+`/object/upload/sign/${o}`);return a.searchParams.set("token",e),s.handleOperation(async()=>{let l,c=C(C({},zl),n),u=C(C({},s.headers),{"x-upsert":String(c.upsert)});return typeof Blob<"u"&&r instanceof Blob?(l=new FormData,l.append("cacheControl",c.cacheControl),l.append("",r)):typeof FormData<"u"&&r instanceof FormData?(l=r,l.append("cacheControl",c.cacheControl)):(l=r,u["cache-control"]=`max-age=${c.cacheControl}`,u["content-type"]=c.contentType),{path:i,fullPath:(await ki(s.fetch,a.toString(),l,{headers:u})).Key}})}async createSignedUploadUrl(t,e){var r=this;return r.handleOperation(async()=>{let n=r._getFinalPath(t),s=C({},r.headers);e?.upsert&&(s["x-upsert"]="true");let i=await ce(r.fetch,`${r.url}/object/upload/sign/${n}`,{},{headers:s}),o=new URL(r.url+i.url),a=o.searchParams.get("token");if(!a)throw new $n("No token returned by API");return {signedUrl:o.toString(),path:t,token:a}})}async update(t,e,r){return this.uploadOrUpdate("PUT",t,e,r)}async move(t,e,r){var n=this;return n.handleOperation(async()=>await ce(n.fetch,`${n.url}/object/move`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers}))}async copy(t,e,r){var n=this;return n.handleOperation(async()=>({path:(await ce(n.fetch,`${n.url}/object/copy`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers})).Key}))}async createSignedUrl(t,e,r){var n=this;return n.handleOperation(async()=>{let s=n._getFinalPath(t),i=typeof r?.transform=="object"&&r.transform!==null&&Object.keys(r.transform).length>0,o=await ce(n.fetch,`${n.url}/object/sign/${s}`,C({expiresIn:e},i?{transform:r.transform}:{}),{headers:n.headers}),a=new URLSearchParams;r?.download&&a.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&a.set("cacheNonce",String(r.cacheNonce));let l=a.toString();return {signedUrl:encodeURI(`${n.url}${o.signedURL}${l?`&${l}`:""}`)}})}async createSignedUrls(t,e,r){var n=this;return n.handleOperation(async()=>{let s=await ce(n.fetch,`${n.url}/object/sign/${n.bucketId}`,{expiresIn:e,paths:t},{headers:n.headers}),i=new URLSearchParams;r?.download&&i.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&i.set("cacheNonce",String(r.cacheNonce));let o=i.toString();return s.map(a=>C(C({},a),{},{signedUrl:a.signedURL?encodeURI(`${n.url}${a.signedURL}${o?`&${o}`:""}`):null}))})}download(t,e,r){let n=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image/authenticated":"object",s=new URLSearchParams;e?.transform&&this.applyTransformOptsToQuery(s,e.transform),e?.cacheNonce!=null&&s.set("cacheNonce",String(e.cacheNonce));let i=s.toString(),o=this._getFinalPath(t),a=()=>Rr(this.fetch,`${this.url}/${n}/${o}${i?`?${i}`:""}`,{headers:this.headers,noResolveJson:true},r);return new fg(a,this.shouldThrowOnError)}async info(t){var e=this;let r=e._getFinalPath(t);return e.handleOperation(async()=>yi(await Rr(e.fetch,`${e.url}/object/info/${r}`,{headers:e.headers})))}async exists(t){var e=this;let r=e._getFinalPath(t);try{return await pg(e.fetch,`${e.url}/object/${r}`,{headers:e.headers}),{data:!0,error:null}}catch(s){if(e.shouldThrowOnError)throw s;if(Nn(s)){var n;let i=s instanceof On?s.status:s instanceof Jl?(n=s.originalError)===null||n===void 0?void 0:n.status:void 0;if(i!==void 0&&[400,404].includes(i))return {data:false,error:s}}throw s}}getPublicUrl(t,e){let r=this._getFinalPath(t),n=new URLSearchParams;e?.download&&n.set("download",e.download===true?"":e.download),e?.transform&&this.applyTransformOptsToQuery(n,e.transform),e?.cacheNonce!=null&&n.set("cacheNonce",String(e.cacheNonce));let s=n.toString(),i=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image":"object";return {data:{publicUrl:encodeURI(`${this.url}/${i}/public/${r}`)+(s?`?${s}`:"")}}}async remove(t){var e=this;return e.handleOperation(async()=>await bi(e.fetch,`${e.url}/object/${e.bucketId}`,{prefixes:t},{headers:e.headers}))}async list(t,e,r){var n=this;return n.handleOperation(async()=>{let s=C(C(C({},gg),e),{},{prefix:t||""});return await ce(n.fetch,`${n.url}/object/list/${n.bucketId}`,s,{headers:n.headers},r)})}async listV2(t,e){var r=this;return r.handleOperation(async()=>{let n=C({},t);return await ce(r.fetch,`${r.url}/object/list-v2/${r.bucketId}`,n,{headers:r.headers},e)})}encodeMetadata(t){return JSON.stringify(t)}toBase64(t){return typeof Buffer<"u"?Buffer.from(t).toString("base64"):btoa(t)}_getFinalPath(t){return `${this.bucketId}/${t.replace(/^\/+/,"")}`}_removeEmptyFolders(t){return t.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}applyTransformOptsToQuery(t,e){return e.width&&t.set("width",e.width.toString()),e.height&&t.set("height",e.height.toString()),e.resize&&t.set("resize",e.resize),e.format&&t.set("format",e.format),e.quality&&t.set("quality",e.quality.toString()),t}},_g="2.103.2",xr={"X-Client-Info":`storage-js/${_g}`},wg=class extends qt{constructor(t,e={},r,n){let s=new URL(t);n?.useNewHostname&&/supabase\.(co|in|red)$/.test(s.hostname)&&!s.hostname.includes("storage.supabase.")&&(s.hostname=s.hostname.replace("supabase.","storage.supabase."));let i=s.href.replace(/\/$/,""),o=C(C({},xr),e);super(i,o,r,"storage");}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=e.listBucketOptionsToQueryString(t);return await Rr(e.fetch,`${e.url}/bucket${r}`,{headers:e.headers})})}async getBucket(t){var e=this;return e.handleOperation(async()=>await Rr(e.fetch,`${e.url}/bucket/${t}`,{headers:e.headers}))}async createBucket(t,e={public:false}){var r=this;return r.handleOperation(async()=>await ce(r.fetch,`${r.url}/bucket`,{id:t,name:t,type:e.type,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async updateBucket(t,e){var r=this;return r.handleOperation(async()=>await ki(r.fetch,`${r.url}/bucket/${t}`,{id:t,name:t,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async emptyBucket(t){var e=this;return e.handleOperation(async()=>await ce(e.fetch,`${e.url}/bucket/${t}/empty`,{},{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await bi(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}listBucketOptionsToQueryString(t){let e={};return t&&("limit"in t&&(e.limit=String(t.limit)),"offset"in t&&(e.offset=String(t.offset)),t.search&&(e.search=t.search),t.sortColumn&&(e.sortColumn=t.sortColumn),t.sortOrder&&(e.sortOrder=t.sortOrder)),Object.keys(e).length>0?"?"+new URLSearchParams(e).toString():""}},yg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},xr),e);super(n,s,r,"storage");}async createBucket(t){var e=this;return e.handleOperation(async()=>await ce(e.fetch,`${e.url}/bucket`,{name:t},{headers:e.headers}))}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=new URLSearchParams;t?.limit!==void 0&&r.set("limit",t.limit.toString()),t?.offset!==void 0&&r.set("offset",t.offset.toString()),t?.sortColumn&&r.set("sortColumn",t.sortColumn),t?.sortOrder&&r.set("sortOrder",t.sortOrder),t?.search&&r.set("search",t.search);let n=r.toString(),s=n?`${e.url}/bucket?${n}`:`${e.url}/bucket`;return await Rr(e.fetch,s,{headers:e.headers})})}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await bi(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}from(t){var e=this;if(!ag(t))throw new $n("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");let r=new Bl({baseUrl:this.url,catalogName:t,auth:{type:"custom",getHeaders:async()=>e.headers},fetch:this.fetch}),n=this.shouldThrowOnError;return new Proxy(r,{get(s,i){let o=s[i];return typeof o!="function"?o:async(...a)=>{try{return {data:await o.apply(s,a),error:null}}catch(l){if(n)throw l;return {data:null,error:l}}}}})}},kg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},xr),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async createIndex(t){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/CreateIndex`,t,{headers:e.headers})||{})}async getIndex(t,e){var r=this;return r.handleOperation(async()=>await te.post(r.fetch,`${r.url}/GetIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers}))}async listIndexes(t){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/ListIndexes`,t,{headers:e.headers}))}async deleteIndex(t,e){var r=this;return r.handleOperation(async()=>await te.post(r.fetch,`${r.url}/DeleteIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers})||{})}},bg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},xr),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async putVectors(t){var e=this;if(t.vectors.length<1||t.vectors.length>500)throw new Error("Vector batch size must be between 1 and 500 items");return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/PutVectors`,t,{headers:e.headers})||{})}async getVectors(t){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/GetVectors`,t,{headers:e.headers}))}async listVectors(t){var e=this;if(t.segmentCount!==void 0){if(t.segmentCount<1||t.segmentCount>16)throw new Error("segmentCount must be between 1 and 16");if(t.segmentIndex!==void 0&&(t.segmentIndex<0||t.segmentIndex>=t.segmentCount))throw new Error(`segmentIndex must be between 0 and ${t.segmentCount-1}`)}return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/ListVectors`,t,{headers:e.headers}))}async queryVectors(t){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/QueryVectors`,t,{headers:e.headers}))}async deleteVectors(t){var e=this;if(t.keys.length<1||t.keys.length>500)throw new Error("Keys batch size must be between 1 and 500 items");return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/DeleteVectors`,t,{headers:e.headers})||{})}},vg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},xr),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async createBucket(t){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/CreateVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}async getBucket(t){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/GetVectorBucket`,{vectorBucketName:t},{headers:e.headers}))}async listBuckets(t={}){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/ListVectorBuckets`,t,{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await te.post(e.fetch,`${e.url}/DeleteVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}},Sg=class extends vg{constructor(t,e={}){super(t,e.headers||{},e.fetch);}from(t){return new Cg(this.url,this.headers,t,this.fetch)}async createBucket(t){var e=()=>super.createBucket,r=this;return e().call(r,t)}async getBucket(t){var e=()=>super.getBucket,r=this;return e().call(r,t)}async listBuckets(t={}){var e=()=>super.listBuckets,r=this;return e().call(r,t)}async deleteBucket(t){var e=()=>super.deleteBucket,r=this;return e().call(r,t)}},Cg=class extends kg{constructor(t,e,r,n){super(t,e,n),this.vectorBucketName=r;}async createIndex(t){var e=()=>super.createIndex,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName}))}async listIndexes(t={}){var e=()=>super.listIndexes,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName}))}async getIndex(t){var e=()=>super.getIndex,r=this;return e().call(r,r.vectorBucketName,t)}async deleteIndex(t){var e=()=>super.deleteIndex,r=this;return e().call(r,r.vectorBucketName,t)}index(t){return new Eg(this.url,this.headers,this.vectorBucketName,t,this.fetch)}},Eg=class extends bg{constructor(t,e,r,n,s){super(t,e,s),this.vectorBucketName=r,this.indexName=n;}async putVectors(t){var e=()=>super.putVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async getVectors(t){var e=()=>super.getVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async listVectors(t={}){var e=()=>super.listVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async queryVectors(t){var e=()=>super.queryVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async deleteVectors(t){var e=()=>super.deleteVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}},Gl=class extends wg{constructor(t,e={},r,n){super(t,e,r,n);}from(t){return new mg(this.url,this.headers,t,this.fetch)}get vectors(){return new Sg(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new yg(this.url+"/iceberg",this.headers,this.fetch)}};});var jn,vi=E(()=>{jn="2.103.2";});var nt,Dn,Ln,Xl,Zl,Ql,Pr,Si,ec,tc,Un=E(()=>{vi();nt=30*1e3,Dn=3,Ln=Dn*nt,Xl="http://localhost:9999",Zl="supabase.auth.token",Ql={"X-Client-Info":`gotrue-js/${jn}`},Pr="X-Supabase-Api-Version",Si={"2024-01-01":{timestamp:Date.parse("2024-01-01T00:00:00.0Z"),name:"2024-01-01"}},ec=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,tc=600*1e3;});function v(t){return typeof t=="object"&&t!==null&&"__isAuthError"in t}function rc(t){return v(t)&&t.name==="AuthApiError"}function Ir(t){return v(t)&&t.name==="AuthSessionMissingError"}function nc(t){return v(t)&&t.name==="AuthImplicitGrantRedirectError"}function Bn(t){return v(t)&&t.name==="AuthRetryableFetchError"}var Be,Mn,oe,ue,J,Ie,st,it,Tr,Wn,zt,Ar,ot,at=E(()=>{Be=class extends Error{constructor(e,r,n){super(e),this.__isAuthError=true,this.name="AuthError",this.status=r,this.code=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,code:this.code}}};Mn=class extends Be{constructor(e,r,n){super(e,r,n),this.name="AuthApiError",this.status=r,this.code=n;}};oe=class extends Be{constructor(e,r){super(e),this.name="AuthUnknownError",this.originalError=r;}},ue=class extends Be{constructor(e,r,n,s){super(e,n,s),this.name=r,this.status=n;}},J=class extends ue{constructor(){super("Auth session missing!","AuthSessionMissingError",400,void 0);}};Ie=class extends ue{constructor(){super("Auth session or user missing","AuthInvalidTokenResponseError",500,void 0);}},st=class extends ue{constructor(e){super(e,"AuthInvalidCredentialsError",400,void 0);}},it=class extends ue{constructor(e,r=null){super(e,"AuthImplicitGrantRedirectError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}};Tr=class extends ue{constructor(e,r=null){super(e,"AuthPKCEGrantCodeExchangeError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}},Wn=class extends ue{constructor(){super("PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.","AuthPKCECodeVerifierMissingError",400,"pkce_code_verifier_not_found");}},zt=class extends ue{constructor(e,r){super(e,"AuthRetryableFetchError",r,void 0);}};Ar=class extends ue{constructor(e,r,n){super(e,"AuthWeakPasswordError",r,"weak_password"),this.reasons=n;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{reasons:this.reasons})}},ot=class extends ue{constructor(e){super(e,"AuthInvalidJwtError",400,"invalid_jwt");}};});function ic(t,e,r){if(t!==null)for(e.queue=e.queue<<8|t,e.queuedBits+=8;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(Fn[n]),e.queuedBits-=6;}else if(e.queuedBits>0)for(e.queue=e.queue<<6-e.queuedBits,e.queuedBits=6;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(Fn[n]),e.queuedBits-=6;}}function oc(t,e,r){let n=Rg[t];if(n>-1)for(e.queue=e.queue<<6|n,e.queuedBits+=6;e.queuedBits>=8;)r(e.queue>>e.queuedBits-8&255),e.queuedBits-=8;else {if(n===-2)return;throw new Error(`Invalid Base64-URL character "${String.fromCharCode(t)}"`)}}function Ci(t){let e=[],r=o=>{e.push(String.fromCodePoint(o));},n={utf8seq:0,codepoint:0},s={queue:0,queuedBits:0},i=o=>{Tg(o,n,r);};for(let o=0;o<t.length;o+=1)oc(t.charCodeAt(o),s,i);return e.join("")}function xg(t,e){if(t<=127){e(t);return}else if(t<=2047){e(192|t>>6),e(128|t&63);return}else if(t<=65535){e(224|t>>12),e(128|t>>6&63),e(128|t&63);return}else if(t<=1114111){e(240|t>>18),e(128|t>>12&63),e(128|t>>6&63),e(128|t&63);return}throw new Error(`Unrecognized Unicode codepoint: ${t.toString(16)}`)}function Pg(t,e){for(let r=0;r<t.length;r+=1){let n=t.charCodeAt(r);if(n>55295&&n<=56319){let s=(n-55296)*1024&65535;n=(t.charCodeAt(r+1)-56320&65535|s)+65536,r+=1;}xg(n,e);}}function Tg(t,e,r){if(e.utf8seq===0){if(t<=127){r(t);return}for(let n=1;n<6;n+=1)if((t>>7-n&1)===0){e.utf8seq=n;break}if(e.utf8seq===2)e.codepoint=t&31;else if(e.utf8seq===3)e.codepoint=t&15;else if(e.utf8seq===4)e.codepoint=t&7;else throw new Error("Invalid UTF-8 sequence");e.utf8seq-=1;}else if(e.utf8seq>0){if(t<=127)throw new Error("Invalid UTF-8 sequence");e.codepoint=e.codepoint<<6|t&63,e.utf8seq-=1,e.utf8seq===0&&r(e.codepoint);}}function Fe(t){let e=[],r={queue:0,queuedBits:0},n=s=>{e.push(s);};for(let s=0;s<t.length;s+=1)oc(t.charCodeAt(s),r,n);return new Uint8Array(e)}function ac(t){let e=[];return Pg(t,r=>e.push(r)),new Uint8Array(e)}function Oe(t){let e=[],r={queue:0,queuedBits:0},n=s=>{e.push(s);};return t.forEach(s=>ic(s,r,n)),ic(null,r,n),e.join("")}var Fn,sc,Rg,Hn=E(()=>{Fn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),sc=`
31
- \r=`.split(""),Rg=(()=>{let t=new Array(128);for(let e=0;e<t.length;e+=1)t[e]=-1;for(let e=0;e<sc.length;e+=1)t[sc[e].charCodeAt(0)]=-2;for(let e=0;e<Fn.length;e+=1)t[Fn[e].charCodeAt(0)]=e;return t})();});function lc(t){return Math.round(Date.now()/1e3)+t}function cc(){return Symbol("auth-callback")}function uc(t){let e={},r=new URL(t);if(r.hash&&r.hash[0]==="#")try{new URLSearchParams(r.hash.substring(1)).forEach((s,i)=>{e[i]=s;});}catch{}return r.searchParams.forEach((n,s)=>{e[s]=n;}),e}function $r(t){let e=t.split(".");if(e.length!==3)throw new ot("Invalid JWT structure");for(let n=0;n<e.length;n++)if(!ec.test(e[n]))throw new ot("JWT not in base64url format");return {header:JSON.parse(Ci(e[0])),payload:JSON.parse(Ci(e[1])),signature:Fe(e[2]),raw:{header:e[0],payload:e[1]}}}async function pc(t){return await new Promise(e=>{setTimeout(()=>e(null),t);})}function hc(t,e){return new Promise((n,s)=>{(async()=>{for(let i=0;i<1/0;i++)try{let o=await t(i);if(!e(i,null,o)){n(o);return}}catch(o){if(!e(i,o)){s(o);return}}})();})}function Ag(t){return ("0"+t.toString(16)).substr(-2)}function Ig(){let e=new Uint32Array(56);if(typeof crypto>"u"){let r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",n=r.length,s="";for(let i=0;i<56;i++)s+=r.charAt(Math.floor(Math.random()*n));return s}return crypto.getRandomValues(e),Array.from(e,Ag).join("")}async function Og(t){let r=new TextEncoder().encode(t),n=await crypto.subtle.digest("SHA-256",r),s=new Uint8Array(n);return Array.from(s).map(i=>String.fromCharCode(i)).join("")}async function $g(t){if(!(typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof TextEncoder<"u"))return console.warn("WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256."),t;let r=await Og(t);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function ut(t,e,r=false){let n=Ig(),s=n;r&&(s+="/PASSWORD_RECOVERY"),await ct(t,`${e}-code-verifier`,s);let i=await $g(n);return [i,n===i?"plain":"s256"]}function fc(t){let e=t.headers.get(Pr);if(!e||!e.match(Ng))return null;try{return new Date(`${e}T00:00:00.0Z`)}catch{return null}}function gc(t){if(!t)throw new Error("Missing exp claim");let e=Math.floor(Date.now()/1e3);if(t<=e)throw new Error("JWT has expired")}function mc(t){switch(t){case "RS256":return {name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case "ES256":return {name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}};default:throw new Error("Invalid alg claim")}}function dt(t){if(!jg.test(t))throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not")}function Jn(){let t={};return new Proxy(t,{get:(e,r)=>{if(r==="__isUserNotAvailableProxy")return true;if(typeof r=="symbol"){let n=r.toString();if(n==="Symbol(Symbol.toPrimitive)"||n==="Symbol(Symbol.toStringTag)"||n==="Symbol(util.inspect.custom)")return}throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${r}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function _c(t,e){return new Proxy(t,{get:(r,n,s)=>{if(n==="__isInsecureUserWarningProxy")return true;if(typeof n=="symbol"){let i=n.toString();if(i==="Symbol(Symbol.toPrimitive)"||i==="Symbol(Symbol.toStringTag)"||i==="Symbol(util.inspect.custom)"||i==="Symbol(nodejs.util.inspect.custom)")return Reflect.get(r,n,s)}return !e.value&&typeof n=="string"&&(console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."),e.value=true),Reflect.get(r,n,s)}})}function Ei(t){return JSON.parse(JSON.stringify(t))}var H,lt,qn,zn,dc,ct,He,z,Or,Ng,jg,Jt=E(()=>{Un();at();Hn();H=()=>typeof window<"u"&&typeof document<"u",lt={tested:false,writable:false},qn=()=>{if(!H())return false;try{if(typeof globalThis.localStorage!="object")return !1}catch{return false}if(lt.tested)return lt.writable;let t=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(t,t),globalThis.localStorage.removeItem(t),lt.tested=!0,lt.writable=!0;}catch{lt.tested=true,lt.writable=false;}return lt.writable};zn=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),dc=t=>typeof t=="object"&&t!==null&&"status"in t&&"ok"in t&&"json"in t&&typeof t.json=="function",ct=async(t,e,r)=>{await t.setItem(e,JSON.stringify(r));},He=async(t,e)=>{let r=await t.getItem(e);if(!r)return null;try{return JSON.parse(r)}catch{return r}},z=async(t,e)=>{await t.removeItem(e);},Or=class t{constructor(){this.promise=new t.promiseConstructor((e,r)=>{this.resolve=e,this.reject=r;});}};Or.promiseConstructor=Promise;Ng=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;jg=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;});async function wc(t){var e;if(!dc(t))throw new zt(pt(t),0);if(Dg.includes(t.status))throw new zt(pt(t),t.status);let r;try{r=await t.json();}catch(i){throw new oe(pt(i),i)}let n,s=fc(t);if(s&&s.getTime()>=Si["2024-01-01"].timestamp&&typeof r=="object"&&r&&typeof r.code=="string"?n=r.code:typeof r=="object"&&r&&typeof r.error_code=="string"&&(n=r.error_code),n){if(n==="weak_password")throw new Ar(pt(r),t.status,((e=r.weak_password)===null||e===void 0?void 0:e.reasons)||[]);if(n==="session_not_found")throw new J}else if(typeof r=="object"&&r&&typeof r.weak_password=="object"&&r.weak_password&&Array.isArray(r.weak_password.reasons)&&r.weak_password.reasons.length&&r.weak_password.reasons.reduce((i,o)=>i&&typeof o=="string",true))throw new Ar(pt(r),t.status,r.weak_password.reasons);throw new Mn(pt(r),t.status||500,n)}async function S(t,e,r,n){var s;let i=Object.assign({},n?.headers);i[Pr]||(i[Pr]=Si["2024-01-01"].name),n?.jwt&&(i.Authorization=`Bearer ${n.jwt}`);let o=(s=n?.query)!==null&&s!==void 0?s:{};n?.redirectTo&&(o.redirect_to=n.redirectTo);let a=Object.keys(o).length?"?"+new URLSearchParams(o).toString():"",l=await Ug(t,e,r+a,{headers:i,noResolveJson:n?.noResolveJson},{},n?.body);return n?.xform?n?.xform(l):{data:Object.assign({},l),error:null}}async function Ug(t,e,r,n,s,i){let o=Lg(e,n,s,i),a;try{a=await t(r,Object.assign({},o));}catch(l){throw console.error(l),new zt(pt(l),0)}if(a.ok||await wc(a),n?.noResolveJson)return a;try{return await a.json()}catch(l){await wc(l);}}function ae(t){var e;let r=null;Mg(t)&&(r=Object.assign({},t),t.expires_at||(r.expires_at=lc(t.expires_in)));let n=(e=t.user)!==null&&e!==void 0?e:t;return {data:{session:r,user:n},error:null}}function Ri(t){let e=ae(t);return !e.error&&t.weak_password&&typeof t.weak_password=="object"&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.message&&typeof t.weak_password.message=="string"&&t.weak_password.reasons.reduce((r,n)=>r&&typeof n=="string",true)&&(e.data.weak_password=t.weak_password),e}function ke(t){var e;return {data:{user:(e=t.user)!==null&&e!==void 0?e:t},error:null}}function yc(t){return {data:t,error:null}}function kc(t){let{action_link:e,email_otp:r,hashed_token:n,redirect_to:s,verification_type:i}=t,o=tt(t,["action_link","email_otp","hashed_token","redirect_to","verification_type"]),a={action_link:e,email_otp:r,hashed_token:n,redirect_to:s,verification_type:i},l=Object.assign({},o);return {data:{properties:a,user:l},error:null}}function xi(t){return t}function Mg(t){return t.access_token&&t.refresh_token&&t.expires_in}var pt,Dg,Lg,Pi=E(()=>{ur();Un();Jt();at();pt=t=>t.msg||t.message||t.error_description||t.error||JSON.stringify(t),Dg=[502,503,504,520,521,522,523,524,530];Lg=(t,e,r,n)=>{let s={method:t,headers:e?.headers||{}};return t==="GET"?s:(s.headers=Object.assign({"Content-Type":"application/json;charset=UTF-8"},e?.headers),s.body=JSON.stringify(n),Object.assign(Object.assign({},s),r))};});var Kn,Ti=E(()=>{Kn=["global","local","others"];});var ht,Vn=E(()=>{ur();Pi();Jt();Ti();at();ht=class{constructor({url:e="",headers:r={},fetch:n}){this.url=e,this.headers=r,this.fetch=zn(n),this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)},this.customProviders={listProviders:this._listCustomProviders.bind(this),createProvider:this._createCustomProvider.bind(this),getProvider:this._getCustomProvider.bind(this),updateProvider:this._updateCustomProvider.bind(this),deleteProvider:this._deleteCustomProvider.bind(this)};}async signOut(e,r=Kn[0]){if(Kn.indexOf(r)<0)throw new Error(`@supabase/auth-js: Parameter scope must be one of ${Kn.join(", ")}`);try{return await S(this.fetch,"POST",`${this.url}/logout?scope=${r}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(n){if(v(n))return {data:null,error:n};throw n}}async inviteUserByEmail(e,r={}){try{return await S(this.fetch,"POST",`${this.url}/invite`,{body:{email:e,data:r.data},headers:this.headers,redirectTo:r.redirectTo,xform:ke})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async generateLink(e){try{let{options:r}=e,n=tt(e,["options"]),s=Object.assign(Object.assign({},n),r);return "newEmail"in n&&(s.new_email=n?.newEmail,delete s.newEmail),await S(this.fetch,"POST",`${this.url}/admin/generate_link`,{body:s,headers:this.headers,xform:kc,redirectTo:r?.redirectTo})}catch(r){if(v(r))return {data:{properties:null,user:null},error:r};throw r}}async createUser(e){try{return await S(this.fetch,"POST",`${this.url}/admin/users`,{body:e,headers:this.headers,xform:ke})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async listUsers(e){var r,n,s,i,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await S(this.fetch,"GET",`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(i=(s=e?.perPage)===null||s===void 0?void 0:s.toString())!==null&&i!==void 0?i:""},xform:xi});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,h=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return h.length>0&&(h.forEach(f=>{let m=parseInt(f.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(f.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{users:[]},error:c};throw c}}async getUserById(e){dt(e);try{return await S(this.fetch,"GET",`${this.url}/admin/users/${e}`,{headers:this.headers,xform:ke})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async updateUserById(e,r){dt(e);try{return await S(this.fetch,"PUT",`${this.url}/admin/users/${e}`,{body:r,headers:this.headers,xform:ke})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async deleteUser(e,r=false){dt(e);try{return await S(this.fetch,"DELETE",`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:r},xform:ke})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async _listFactors(e){dt(e.userId);try{let{data:r,error:n}=await S(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:s=>({data:{factors:s},error:null})});return {data:r,error:n}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _deleteFactor(e){dt(e.userId),dt(e.id);try{return {data:await S(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listOAuthClients(e){var r,n,s,i,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await S(this.fetch,"GET",`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(i=(s=e?.perPage)===null||s===void 0?void 0:s.toString())!==null&&i!==void 0?i:""},xform:xi});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,h=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return h.length>0&&(h.forEach(f=>{let m=parseInt(f.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(f.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{clients:[]},error:c};throw c}}async _createOAuthClient(e){try{return await S(this.fetch,"POST",`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getOAuthClient(e){try{return await S(this.fetch,"GET",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateOAuthClient(e,r){try{return await S(this.fetch,"PUT",`${this.url}/admin/oauth/clients/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteOAuthClient(e){try{return await S(this.fetch,"DELETE",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _regenerateOAuthClientSecret(e){try{return await S(this.fetch,"POST",`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listCustomProviders(e){try{let r={};return e?.type&&(r.type=e.type),await S(this.fetch,"GET",`${this.url}/admin/custom-providers`,{headers:this.headers,query:r,xform:n=>{var s;return {data:{providers:(s=n?.providers)!==null&&s!==void 0?s:[]},error:null}}})}catch(r){if(v(r))return {data:{providers:[]},error:r};throw r}}async _createCustomProvider(e){try{return await S(this.fetch,"POST",`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getCustomProvider(e){try{return await S(this.fetch,"GET",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateCustomProvider(e,r){try{return await S(this.fetch,"PUT",`${this.url}/admin/custom-providers/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteCustomProvider(e){try{return await S(this.fetch,"DELETE",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}};});function Ai(t={}){return {getItem:e=>t[e]||null,setItem:(e,r)=>{t[e]=r;},removeItem:e=>{delete t[e];}}}var bc=E(()=>{});async function Ii(t,e,r){de.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire lock",t,e);let n=new globalThis.AbortController,s;e>0&&(s=setTimeout(()=>{n.abort(),de.debug&&console.log("@supabase/gotrue-js: navigatorLock acquire timed out",t);},e)),await Promise.resolve();try{return await globalThis.navigator.locks.request(t,e===0?{mode:"exclusive",ifAvailable:!0}:{mode:"exclusive",signal:n.signal},async i=>{if(i){clearTimeout(s),de.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquired",t,i.name);try{return await r()}finally{de.debug&&console.log("@supabase/gotrue-js: navigatorLock: released",t,i.name);}}else {if(e===0)throw de.debug&&console.log("@supabase/gotrue-js: navigatorLock: not immediately available",t),new jr(`Acquiring an exclusive Navigator LockManager lock "${t}" immediately failed`);if(de.debug)try{let o=await globalThis.navigator.locks.query();console.log("@supabase/gotrue-js: Navigator LockManager state",JSON.stringify(o,null," "));}catch(o){console.warn("@supabase/gotrue-js: Error when querying Navigator LockManager state",o);}return console.warn("@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request"),clearTimeout(s),await r()}})}catch(i){if(e>0&&clearTimeout(s),i?.name==="AbortError"&&e>0){if(n.signal.aborted)return de.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock",t),console.warn(`@supabase/gotrue-js: Lock "${t}" was not released within ${e}ms. This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). Forcefully acquiring the lock to recover.`),await Promise.resolve().then(()=>globalThis.navigator.locks.request(t,{mode:"exclusive",steal:true},async o=>{if(o){de.debug&&console.log("@supabase/gotrue-js: navigatorLock: recovered (stolen)",t,o.name);try{return await r()}finally{de.debug&&console.log("@supabase/gotrue-js: navigatorLock: released (stolen)",t,o.name);}}else return console.warn("@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true"),await r()}));throw de.debug&&console.log("@supabase/gotrue-js: navigatorLock: lock was stolen by another request",t),new jr(`Lock "${t}" was released because another request stole it`)}throw i}}var de,Nr,jr,Oi=E(()=>{Jt();de={debug:!!(globalThis&&qn()&&globalThis.localStorage&&globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug")==="true")},Nr=class extends Error{constructor(e){super(e),this.isAcquireTimeout=true;}},jr=class extends Nr{};});function vc(){if(typeof globalThis!="object")try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__;}catch{typeof self<"u"&&(self.globalThis=self);}}var Sc=E(()=>{});function $i(t){if(!/^0x[a-fA-F0-9]{40}$/.test(t))throw new Error(`@supabase/auth-js: Address "${t}" is invalid.`);return t.toLowerCase()}function Cc(t){return parseInt(t,16)}function Ec(t){let e=new TextEncoder().encode(t);return "0x"+Array.from(e,n=>n.toString(16).padStart(2,"0")).join("")}function Rc(t){var e;let{chainId:r,domain:n,expirationTime:s,issuedAt:i=new Date,nonce:o,notBefore:a,requestId:l,resources:c,scheme:u,uri:d,version:p}=t;{if(!Number.isInteger(r))throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${r}`);if(!n)throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.');if(o&&o.length<8)throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${o}`);if(!d)throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.');if(p!=="1")throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${p}`);if(!((e=t.statement)===null||e===void 0)&&e.includes(`
30
+ })`):new Error(`WebSocket not available: ${r}`)}this._handleNodeJsRaceCondition();}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,r){return this.isDisconnecting()?"ok":await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker();},e,r)}getChannels(){return this.channels}async removeChannel(e){let r=await e.unsubscribe();return r==="ok"&&e.teardown(),this.channels.length===0&&this.disconnect(),r}async removeAllChannels(){let e=this.channels.map(async n=>{let s=await n.unsubscribe();return n.teardown(),s}),r=await Promise.all(e);return this.disconnect(),r}log(e,r,n){this.socketAdapter.log(e,r,n);}connectionState(){return this.socketAdapter.connectionState()||mr.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,r={config:{}}){let n=`realtime:${e}`,s=this.getChannels().find(i=>i.topic===n);if(s)return s;{let i=new Bt(`realtime:${e}`,r,this);return this.channels.push(i),i}}push(e){this.socketAdapter.push(e);}async setAuth(e=null){this._authPromise=this._performAuth(e);try{await this._authPromise;}finally{this._authPromise=null;}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){this.socketAdapter.sendHeartbeat();}onHeartbeat(e){this.socketAdapter.heartbeatCallback=this._wrapHeartbeatCallback(e);}_makeRef(){return this.socketAdapter.makeRef()}_remove(e){this.channels=this.channels.filter(r=>r.topic!==e.topic);}async _performAuth(e=null){let r,n=false;if(e)r=e,n=true;else if(this.accessToken)try{r=await this.accessToken();}catch(s){this.log("error","Error fetching access token from callback",s),r=this.accessTokenValue;}else r=this.accessTokenValue;n?this._manuallySetToken=true:this.accessToken&&(this._manuallySetToken=false),this.accessTokenValue!=r&&(this.accessTokenValue=r,this.channels.forEach(s=>{let i={access_token:r,version:Rl};r&&s.updateJoinPayload(i),s.joinedOnce&&s.channelAdapter.isJoined()&&s.channelAdapter.push(Cn.access_token,{access_token:r});}));}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise;}_setAuthSafely(e="general"){this._isManualToken()||this.setAuth().catch(r=>{this.log("error",`Error setting auth in ${e}`,r);});}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(r=>{this.log("error","error waiting for auth on connect",r);}),this.worker&&!this.workerRef&&this._startWorkerHeartbeat();}),this.socketAdapter.onClose(()=>{this.worker&&this.workerRef&&this._terminateWorker();}),this.socketAdapter.onMessage(e=>{e.ref&&e.ref===this._pendingWorkerHeartbeatRef&&(this._pendingWorkerHeartbeatRef=null);});}_handleNodeJsRaceCondition(){this.socketAdapter.isConnected()&&this.socketAdapter.getSocket().onConnOpen();}_wrapHeartbeatCallback(e){return (r,n)=>{r=="sent"&&this._setAuthSafely(),e&&e(r,n);}}_startWorkerHeartbeat(){this.workerUrl?this.log("worker",`starting worker for from ${this.workerUrl}`):this.log("worker","starting default worker");let e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=r=>{this.log("worker","worker error",r.message),this._terminateWorker(),this.disconnect();},this.workerRef.onmessage=r=>{r.data.event==="keepAlive"&&this.sendHeartbeat();},this.workerRef.postMessage({event:"start",interval:this.heartbeatIntervalMs});}_terminateWorker(){this.workerRef&&(this.log("worker","terminating worker"),this.workerRef.terminate(),this.workerRef=void 0);}_workerObjectUrl(e){let r;if(e)r=e;else {let n=new Blob([Yf],{type:"application/javascript"});r=URL.createObjectURL(n);}return r}_initializeOptions(e){var r,n,s,i,o,a,l,c,u;this.worker=(r=e?.worker)!==null&&r!==void 0?r:false,this.accessToken=(n=e?.accessToken)!==null&&n!==void 0?n:null;let d={};d.timeout=(s=e?.timeout)!==null&&s!==void 0?s:Tl,d.heartbeatIntervalMs=(i=e?.heartbeatIntervalMs)!==null&&i!==void 0?i:Kf.HEARTBEAT_INTERVAL,d.transport=(o=e?.transport)!==null&&o!==void 0?o:oi.getWebSocketConstructor(),d.params=e?.params,d.logger=e?.logger,d.heartbeatCallback=this._wrapHeartbeatCallback(e?.heartbeatCallback),d.reconnectAfterMs=(a=e?.reconnectAfterMs)!==null&&a!==void 0?a:(m=>Vf[m-1]||Gf);let p,h,f=(l=e?.vsn)!==null&&l!==void 0?l:Pl;switch(f){case xl:p=(m,_)=>_(JSON.stringify(m)),h=(m,_)=>_(JSON.parse(m));break;case li:p=this.serializer.encode.bind(this.serializer),h=this.serializer.decode.bind(this.serializer);break;default:throw new Error(`Unsupported serializer version: ${d.vsn}`)}if(d.vsn=f,d.encode=(c=e?.encode)!==null&&c!==void 0?c:p,d.decode=(u=e?.decode)!==null&&u!==void 0?u:h,d.beforeReconnect=this._reconnectAuth.bind(this),(e?.logLevel||e?.log_level)&&(this.logLevel=e.logLevel||e.log_level,d.params=Object.assign(Object.assign({},d.params),{log_level:this.logLevel})),this.worker){if(typeof window<"u"&&!window.Worker)throw new Error("Web Worker is not supported");this.workerUrl=e?.workerUrl,d.autoSendHeartbeat=!this.worker;}return d}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect();}};});var wi=E(()=>{Wl();_i();gi();ai();});function Xf(t,e,r){let n=new URL(e,t);if(r)for(let[s,i]of Object.entries(r))i!==void 0&&n.searchParams.set(s,i);return n.toString()}async function Zf(t){return !t||t.type==="none"?{}:t.type==="bearer"?{Authorization:`Bearer ${t.token}`}:t.type==="header"?{[t.name]:t.value}:t.type==="custom"?await t.getHeaders():{}}function Qf(t){let e=t.fetchImpl??globalThis.fetch;return {async request({method:r,path:n,query:s,body:i,headers:o}){let a=Xf(t.baseUrl,n,s),l=await Zf(t.auth),c=await e(a,{method:r,headers:{...i?{"Content-Type":"application/json"}:{},...l,...o},body:i?JSON.stringify(i):void 0}),u=await c.text(),d=(c.headers.get("content-type")||"").includes("application/json"),p=d&&u?JSON.parse(u):u;if(!c.ok){let h=d?p:void 0,f=h?.error;throw new Cr(f?.message??`Request failed with status ${c.status}`,{status:c.status,icebergType:f?.type,icebergCode:f?.code,details:h})}return {status:c.status,headers:c.headers,data:p}}}}function In(t){return t.join("")}function Ht(t){return t.join("")}var Cr,eg,tg,Bl,Fl=E(()=>{Cr=class extends Error{constructor(t,e){super(t),this.name="IcebergError",this.status=e.status,this.icebergType=e.icebergType,this.icebergCode=e.icebergCode,this.details=e.details,this.isCommitStateUnknown=e.icebergType==="CommitStateUnknownException"||[500,502,504].includes(e.status)&&e.icebergType?.includes("CommitState")===true;}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};eg=class{constructor(t,e=""){this.client=t,this.prefix=e;}async listNamespaces(t){let e=t?{parent:In(t.namespace)}:void 0;return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:e})).data.namespaces.map(n=>({namespace:n}))}async createNamespace(t,e){let r={namespace:t.namespace,properties:e?.properties};return (await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:r})).data}async dropNamespace(t){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${In(t.namespace)}`});}async loadNamespaceMetadata(t){return {properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${In(t.namespace)}`})).data.properties}}async namespaceExists(t){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${In(t.namespace)}`}),!0}catch(e){if(e instanceof Cr&&e.status===404)return false;throw e}}async createNamespaceIfNotExists(t,e){try{return await this.createNamespace(t,e)}catch(r){if(r instanceof Cr&&r.status===409)return;throw r}}};tg=class{constructor(t,e="",r){this.client=t,this.prefix=e,this.accessDelegation=r;}async listTables(t){return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables`})).data.identifiers}async createTable(t,e){let r={};return this.accessDelegation&&(r["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables`,body:e,headers:r})).data.metadata}async updateTable(t,e){let r=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,body:e});return {"metadata-location":r.data["metadata-location"],metadata:r.data.metadata}}async dropTable(t,e){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,query:{purgeRequested:String(e?.purge??false)}});}async loadTable(t){let e={};return this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,headers:e})).data.metadata}async tableExists(t){let e={};this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation);try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Ht(t.namespace)}/tables/${t.name}`,headers:e}),!0}catch(r){if(r instanceof Cr&&r.status===404)return false;throw r}}async createTableIfNotExists(t,e){try{return await this.createTable(t,e)}catch(r){if(r instanceof Cr&&r.status===409)return await this.loadTable({namespace:t.namespace,name:e.name});throw r}}},Bl=class{constructor(t){let e="v1";t.catalogName&&(e+=`/${t.catalogName}`);let r=t.baseUrl.endsWith("/")?t.baseUrl:`${t.baseUrl}/`;this.client=Qf({baseUrl:r,auth:t.auth,fetchImpl:t.fetch}),this.accessDelegation=t.accessDelegation?.join(","),this.namespaceOps=new eg(this.client,e),this.tableOps=new tg(this.client,e,this.accessDelegation);}async listNamespaces(t){return this.namespaceOps.listNamespaces(t)}async createNamespace(t,e){return this.namespaceOps.createNamespace(t,e)}async dropNamespace(t){await this.namespaceOps.dropNamespace(t);}async loadNamespaceMetadata(t){return this.namespaceOps.loadNamespaceMetadata(t)}async listTables(t){return this.tableOps.listTables(t)}async createTable(t,e){return this.tableOps.createTable(t,e)}async updateTable(t,e){return this.tableOps.updateTable(t,e)}async dropTable(t,e){await this.tableOps.dropTable(t,e);}async loadTable(t){return this.tableOps.loadTable(t)}async namespaceExists(t){return this.namespaceOps.namespaceExists(t)}async tableExists(t){return this.tableOps.tableExists(t)}async createNamespaceIfNotExists(t,e){return this.namespaceOps.createNamespaceIfNotExists(t,e)}async createTableIfNotExists(t,e){return this.tableOps.createTableIfNotExists(t,e)}};});function Rr(t){"@babel/helpers - typeof";return Rr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rr(t)}function rg(t,e){if(Rr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Rr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function ng(t){var e=rg(t,"string");return Rr(e)=="symbol"?e:e+""}function sg(t,e,r){return (e=ng(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function Hl(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function C(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Hl(Object(r),true).forEach(function(n){sg(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Hl(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function Nn(t){return typeof t=="object"&&t!==null&&"__isStorageError"in t}function ug(t,e,r){let n=C({},t);for(let s of Object.keys(n))s.toLowerCase()===e.toLowerCase()&&delete n[s];return n[e]=r,n}async function Er(t,e,r,n,s,i,o){return new Promise((a,l)=>{t(r,cg(e,n,s,i)).then(c=>{if(!c.ok)throw c;if(n?.noResolveJson)return c;if(o==="vectors"){let u=c.headers.get("content-type");if(c.headers.get("content-length")==="0"||c.status===204)return {};if(!u||!u.includes("application/json"))return {}}return c.json()}).then(c=>a(c)).catch(c=>lg(c,l,n,o));})}function Kl(t="storage"){return {get:async(e,r,n,s)=>Er(e,"GET",r,n,s,void 0,t),post:async(e,r,n,s,i)=>Er(e,"POST",r,s,i,n,t),put:async(e,r,n,s,i)=>Er(e,"PUT",r,s,i,n,t),head:async(e,r,n,s)=>Er(e,"HEAD",r,C(C({},n),{},{noResolveJson:true}),s,void 0,t),remove:async(e,r,n,s,i)=>Er(e,"DELETE",r,s,i,n,t)}}var $n,On,Jl,ig,og,yi,ag,ql,lg,cg,dg,xr,ue,ki,pg,bi,re,qt,hg,Vl,fg,gg,zl,mg,_g,Pr,wg,yg,kg,bg,vg,Sg,Cg,Eg,Gl,Yl=E(()=>{Fl();$n=class extends Error{constructor(t,e="storage",r,n){super(t),this.__isStorageError=true,this.namespace=e,this.name=e==="vectors"?"StorageVectorsError":"StorageError",this.status=r,this.statusCode=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}};On=class extends $n{constructor(t,e,r,n="storage"){super(t,n,e,r),this.name=n==="vectors"?"StorageVectorsApiError":"StorageApiError",this.status=e,this.statusCode=r;}toJSON(){return C({},super.toJSON())}},Jl=class extends $n{constructor(t,e,r="storage"){super(t,r),this.name=r==="vectors"?"StorageVectorsUnknownError":"StorageUnknownError",this.originalError=e;}},ig=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),og=t=>{if(typeof t!="object"||t===null)return false;let e=Object.getPrototypeOf(t);return (e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},yi=t=>{if(Array.isArray(t))return t.map(r=>yi(r));if(typeof t=="function"||t!==Object(t))return t;let e={};return Object.entries(t).forEach(([r,n])=>{let s=r.replace(/([-_][a-z])/gi,i=>i.toUpperCase().replace(/[-_]/g,""));e[s]=yi(n);}),e},ag=t=>!t||typeof t!="string"||t.length===0||t.length>100||t.trim()!==t||t.includes("/")||t.includes("\\")?false:/^[\w!.\*'() &$@=;:+,?-]+$/.test(t),ql=t=>{var e;return t.msg||t.message||t.error_description||(typeof t.error=="string"?t.error:(e=t.error)===null||e===void 0?void 0:e.message)||JSON.stringify(t)},lg=async(t,e,r,n)=>{if(t!==null&&typeof t=="object"&&typeof t.json=="function"){let s=t,i=parseInt(s.status,10);Number.isFinite(i)||(i=500),s.json().then(o=>{let a=o?.statusCode||o?.code||i+"";e(new On(ql(o),i,a,n));}).catch(()=>{let o=i+"";e(new On(s.statusText||`HTTP ${i} error`,i,o,n));});}else e(new Jl(ql(t),t,n));},cg=(t,e,r,n)=>{let s={method:t,headers:e?.headers||{}};if(t==="GET"||t==="HEAD"||!n)return C(C({},s),r);if(og(n)){var i;let o=e?.headers||{},a;for(let[l,c]of Object.entries(o))l.toLowerCase()==="content-type"&&(a=c);s.headers=ug(o,"Content-Type",(i=a)!==null&&i!==void 0?i:"application/json"),s.body=JSON.stringify(n);}else s.body=n;return e?.duplex&&(s.duplex=e.duplex),C(C({},s),r)};dg=Kl("storage"),{get:xr,post:ue,put:ki,head:pg,remove:bi}=dg,re=Kl("vectors"),qt=class{constructor(t,e={},r,n="storage"){this.shouldThrowOnError=false,this.url=t,this.headers=Object.fromEntries(Object.entries(e).map(([s,i])=>[s.toLowerCase(),i])),this.fetch=ig(r),this.namespace=n;}throwOnError(){return this.shouldThrowOnError=true,this}setHeader(t,e){return this.headers=C(C({},this.headers),{},{[t.toLowerCase()]:e}),this}async handleOperation(t){var e=this;try{return {data:await t(),error:null}}catch(r){if(e.shouldThrowOnError)throw r;if(Nn(r))return {data:null,error:r};throw r}}},hg=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e;}then(t,e){return this.execute().then(t,e)}async execute(){var t=this;try{return {data:(await t.downloadFn()).body,error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Nn(e))return {data:null,error:e};throw e}}};Vl=Symbol.toStringTag;fg=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e,this[Vl]="BlobDownloadBuilder",this.promise=null;}asStream(){return new hg(this.downloadFn,this.shouldThrowOnError)}then(t,e){return this.getPromise().then(t,e)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}async execute(){var t=this;try{return {data:await(await t.downloadFn()).blob(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Nn(e))return {data:null,error:e};throw e}}},gg={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},zl={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:false},mg=class extends qt{constructor(t,e={},r,n){super(t,e,n,"storage"),this.bucketId=r;}async uploadOrUpdate(t,e,r,n){var s=this;return s.handleOperation(async()=>{let i,o=C(C({},zl),n),a=C(C({},s.headers),t==="POST"&&{"x-upsert":String(o.upsert)}),l=o.metadata;typeof Blob<"u"&&r instanceof Blob?(i=new FormData,i.append("cacheControl",o.cacheControl),l&&i.append("metadata",s.encodeMetadata(l)),i.append("",r)):typeof FormData<"u"&&r instanceof FormData?(i=r,i.has("cacheControl")||i.append("cacheControl",o.cacheControl),l&&!i.has("metadata")&&i.append("metadata",s.encodeMetadata(l))):(i=r,a["cache-control"]=`max-age=${o.cacheControl}`,a["content-type"]=o.contentType,l&&(a["x-metadata"]=s.toBase64(s.encodeMetadata(l))),(typeof ReadableStream<"u"&&i instanceof ReadableStream||i&&typeof i=="object"&&"pipe"in i&&typeof i.pipe=="function")&&!o.duplex&&(o.duplex="half")),n?.headers&&(a=C(C({},a),n.headers));let c=s._removeEmptyFolders(e),u=s._getFinalPath(c),d=await(t=="PUT"?ki:ue)(s.fetch,`${s.url}/object/${u}`,i,C({headers:a},o?.duplex?{duplex:o.duplex}:{}));return {path:c,id:d.Id,fullPath:d.Key}})}async upload(t,e,r){return this.uploadOrUpdate("POST",t,e,r)}async uploadToSignedUrl(t,e,r,n){var s=this;let i=s._removeEmptyFolders(t),o=s._getFinalPath(i),a=new URL(s.url+`/object/upload/sign/${o}`);return a.searchParams.set("token",e),s.handleOperation(async()=>{let l,c=C(C({},zl),n),u=C(C({},s.headers),{"x-upsert":String(c.upsert)});return typeof Blob<"u"&&r instanceof Blob?(l=new FormData,l.append("cacheControl",c.cacheControl),l.append("",r)):typeof FormData<"u"&&r instanceof FormData?(l=r,l.append("cacheControl",c.cacheControl)):(l=r,u["cache-control"]=`max-age=${c.cacheControl}`,u["content-type"]=c.contentType),{path:i,fullPath:(await ki(s.fetch,a.toString(),l,{headers:u})).Key}})}async createSignedUploadUrl(t,e){var r=this;return r.handleOperation(async()=>{let n=r._getFinalPath(t),s=C({},r.headers);e?.upsert&&(s["x-upsert"]="true");let i=await ue(r.fetch,`${r.url}/object/upload/sign/${n}`,{},{headers:s}),o=new URL(r.url+i.url),a=o.searchParams.get("token");if(!a)throw new $n("No token returned by API");return {signedUrl:o.toString(),path:t,token:a}})}async update(t,e,r){return this.uploadOrUpdate("PUT",t,e,r)}async move(t,e,r){var n=this;return n.handleOperation(async()=>await ue(n.fetch,`${n.url}/object/move`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers}))}async copy(t,e,r){var n=this;return n.handleOperation(async()=>({path:(await ue(n.fetch,`${n.url}/object/copy`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers})).Key}))}async createSignedUrl(t,e,r){var n=this;return n.handleOperation(async()=>{let s=n._getFinalPath(t),i=typeof r?.transform=="object"&&r.transform!==null&&Object.keys(r.transform).length>0,o=await ue(n.fetch,`${n.url}/object/sign/${s}`,C({expiresIn:e},i?{transform:r.transform}:{}),{headers:n.headers}),a=new URLSearchParams;r?.download&&a.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&a.set("cacheNonce",String(r.cacheNonce));let l=a.toString();return {signedUrl:encodeURI(`${n.url}${o.signedURL}${l?`&${l}`:""}`)}})}async createSignedUrls(t,e,r){var n=this;return n.handleOperation(async()=>{let s=await ue(n.fetch,`${n.url}/object/sign/${n.bucketId}`,{expiresIn:e,paths:t},{headers:n.headers}),i=new URLSearchParams;r?.download&&i.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&i.set("cacheNonce",String(r.cacheNonce));let o=i.toString();return s.map(a=>C(C({},a),{},{signedUrl:a.signedURL?encodeURI(`${n.url}${a.signedURL}${o?`&${o}`:""}`):null}))})}download(t,e,r){let n=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image/authenticated":"object",s=new URLSearchParams;e?.transform&&this.applyTransformOptsToQuery(s,e.transform),e?.cacheNonce!=null&&s.set("cacheNonce",String(e.cacheNonce));let i=s.toString(),o=this._getFinalPath(t),a=()=>xr(this.fetch,`${this.url}/${n}/${o}${i?`?${i}`:""}`,{headers:this.headers,noResolveJson:true},r);return new fg(a,this.shouldThrowOnError)}async info(t){var e=this;let r=e._getFinalPath(t);return e.handleOperation(async()=>yi(await xr(e.fetch,`${e.url}/object/info/${r}`,{headers:e.headers})))}async exists(t){var e=this;let r=e._getFinalPath(t);try{return await pg(e.fetch,`${e.url}/object/${r}`,{headers:e.headers}),{data:!0,error:null}}catch(s){if(e.shouldThrowOnError)throw s;if(Nn(s)){var n;let i=s instanceof On?s.status:s instanceof Jl?(n=s.originalError)===null||n===void 0?void 0:n.status:void 0;if(i!==void 0&&[400,404].includes(i))return {data:false,error:s}}throw s}}getPublicUrl(t,e){let r=this._getFinalPath(t),n=new URLSearchParams;e?.download&&n.set("download",e.download===true?"":e.download),e?.transform&&this.applyTransformOptsToQuery(n,e.transform),e?.cacheNonce!=null&&n.set("cacheNonce",String(e.cacheNonce));let s=n.toString(),i=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image":"object";return {data:{publicUrl:encodeURI(`${this.url}/${i}/public/${r}`)+(s?`?${s}`:"")}}}async remove(t){var e=this;return e.handleOperation(async()=>await bi(e.fetch,`${e.url}/object/${e.bucketId}`,{prefixes:t},{headers:e.headers}))}async list(t,e,r){var n=this;return n.handleOperation(async()=>{let s=C(C(C({},gg),e),{},{prefix:t||""});return await ue(n.fetch,`${n.url}/object/list/${n.bucketId}`,s,{headers:n.headers},r)})}async listV2(t,e){var r=this;return r.handleOperation(async()=>{let n=C({},t);return await ue(r.fetch,`${r.url}/object/list-v2/${r.bucketId}`,n,{headers:r.headers},e)})}encodeMetadata(t){return JSON.stringify(t)}toBase64(t){return typeof Buffer<"u"?Buffer.from(t).toString("base64"):btoa(t)}_getFinalPath(t){return `${this.bucketId}/${t.replace(/^\/+/,"")}`}_removeEmptyFolders(t){return t.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}applyTransformOptsToQuery(t,e){return e.width&&t.set("width",e.width.toString()),e.height&&t.set("height",e.height.toString()),e.resize&&t.set("resize",e.resize),e.format&&t.set("format",e.format),e.quality&&t.set("quality",e.quality.toString()),t}},_g="2.103.2",Pr={"X-Client-Info":`storage-js/${_g}`},wg=class extends qt{constructor(t,e={},r,n){let s=new URL(t);n?.useNewHostname&&/supabase\.(co|in|red)$/.test(s.hostname)&&!s.hostname.includes("storage.supabase.")&&(s.hostname=s.hostname.replace("supabase.","storage.supabase."));let i=s.href.replace(/\/$/,""),o=C(C({},Pr),e);super(i,o,r,"storage");}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=e.listBucketOptionsToQueryString(t);return await xr(e.fetch,`${e.url}/bucket${r}`,{headers:e.headers})})}async getBucket(t){var e=this;return e.handleOperation(async()=>await xr(e.fetch,`${e.url}/bucket/${t}`,{headers:e.headers}))}async createBucket(t,e={public:false}){var r=this;return r.handleOperation(async()=>await ue(r.fetch,`${r.url}/bucket`,{id:t,name:t,type:e.type,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async updateBucket(t,e){var r=this;return r.handleOperation(async()=>await ki(r.fetch,`${r.url}/bucket/${t}`,{id:t,name:t,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async emptyBucket(t){var e=this;return e.handleOperation(async()=>await ue(e.fetch,`${e.url}/bucket/${t}/empty`,{},{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await bi(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}listBucketOptionsToQueryString(t){let e={};return t&&("limit"in t&&(e.limit=String(t.limit)),"offset"in t&&(e.offset=String(t.offset)),t.search&&(e.search=t.search),t.sortColumn&&(e.sortColumn=t.sortColumn),t.sortOrder&&(e.sortOrder=t.sortOrder)),Object.keys(e).length>0?"?"+new URLSearchParams(e).toString():""}},yg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},Pr),e);super(n,s,r,"storage");}async createBucket(t){var e=this;return e.handleOperation(async()=>await ue(e.fetch,`${e.url}/bucket`,{name:t},{headers:e.headers}))}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=new URLSearchParams;t?.limit!==void 0&&r.set("limit",t.limit.toString()),t?.offset!==void 0&&r.set("offset",t.offset.toString()),t?.sortColumn&&r.set("sortColumn",t.sortColumn),t?.sortOrder&&r.set("sortOrder",t.sortOrder),t?.search&&r.set("search",t.search);let n=r.toString(),s=n?`${e.url}/bucket?${n}`:`${e.url}/bucket`;return await xr(e.fetch,s,{headers:e.headers})})}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await bi(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}from(t){var e=this;if(!ag(t))throw new $n("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");let r=new Bl({baseUrl:this.url,catalogName:t,auth:{type:"custom",getHeaders:async()=>e.headers},fetch:this.fetch}),n=this.shouldThrowOnError;return new Proxy(r,{get(s,i){let o=s[i];return typeof o!="function"?o:async(...a)=>{try{return {data:await o.apply(s,a),error:null}}catch(l){if(n)throw l;return {data:null,error:l}}}}})}},kg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},Pr),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async createIndex(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/CreateIndex`,t,{headers:e.headers})||{})}async getIndex(t,e){var r=this;return r.handleOperation(async()=>await re.post(r.fetch,`${r.url}/GetIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers}))}async listIndexes(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListIndexes`,t,{headers:e.headers}))}async deleteIndex(t,e){var r=this;return r.handleOperation(async()=>await re.post(r.fetch,`${r.url}/DeleteIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers})||{})}},bg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},Pr),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async putVectors(t){var e=this;if(t.vectors.length<1||t.vectors.length>500)throw new Error("Vector batch size must be between 1 and 500 items");return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/PutVectors`,t,{headers:e.headers})||{})}async getVectors(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/GetVectors`,t,{headers:e.headers}))}async listVectors(t){var e=this;if(t.segmentCount!==void 0){if(t.segmentCount<1||t.segmentCount>16)throw new Error("segmentCount must be between 1 and 16");if(t.segmentIndex!==void 0&&(t.segmentIndex<0||t.segmentIndex>=t.segmentCount))throw new Error(`segmentIndex must be between 0 and ${t.segmentCount-1}`)}return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListVectors`,t,{headers:e.headers}))}async queryVectors(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/QueryVectors`,t,{headers:e.headers}))}async deleteVectors(t){var e=this;if(t.keys.length<1||t.keys.length>500)throw new Error("Keys batch size must be between 1 and 500 items");return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/DeleteVectors`,t,{headers:e.headers})||{})}},vg=class extends qt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=C(C({},Pr),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async createBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/CreateVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}async getBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/GetVectorBucket`,{vectorBucketName:t},{headers:e.headers}))}async listBuckets(t={}){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListVectorBuckets`,t,{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/DeleteVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}},Sg=class extends vg{constructor(t,e={}){super(t,e.headers||{},e.fetch);}from(t){return new Cg(this.url,this.headers,t,this.fetch)}async createBucket(t){var e=()=>super.createBucket,r=this;return e().call(r,t)}async getBucket(t){var e=()=>super.getBucket,r=this;return e().call(r,t)}async listBuckets(t={}){var e=()=>super.listBuckets,r=this;return e().call(r,t)}async deleteBucket(t){var e=()=>super.deleteBucket,r=this;return e().call(r,t)}},Cg=class extends kg{constructor(t,e,r,n){super(t,e,n),this.vectorBucketName=r;}async createIndex(t){var e=()=>super.createIndex,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName}))}async listIndexes(t={}){var e=()=>super.listIndexes,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName}))}async getIndex(t){var e=()=>super.getIndex,r=this;return e().call(r,r.vectorBucketName,t)}async deleteIndex(t){var e=()=>super.deleteIndex,r=this;return e().call(r,r.vectorBucketName,t)}index(t){return new Eg(this.url,this.headers,this.vectorBucketName,t,this.fetch)}},Eg=class extends bg{constructor(t,e,r,n,s){super(t,e,s),this.vectorBucketName=r,this.indexName=n;}async putVectors(t){var e=()=>super.putVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async getVectors(t){var e=()=>super.getVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async listVectors(t={}){var e=()=>super.listVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async queryVectors(t){var e=()=>super.queryVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async deleteVectors(t){var e=()=>super.deleteVectors,r=this;return e().call(r,C(C({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}},Gl=class extends wg{constructor(t,e={},r,n){super(t,e,r,n);}from(t){return new mg(this.url,this.headers,t,this.fetch)}get vectors(){return new Sg(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new yg(this.url+"/iceberg",this.headers,this.fetch)}};});var jn,vi=E(()=>{jn="2.103.2";});var nt,Dn,Ln,Xl,Zl,Ql,Tr,Si,ec,tc,Mn=E(()=>{vi();nt=30*1e3,Dn=3,Ln=Dn*nt,Xl="http://localhost:9999",Zl="supabase.auth.token",Ql={"X-Client-Info":`gotrue-js/${jn}`},Tr="X-Supabase-Api-Version",Si={"2024-01-01":{timestamp:Date.parse("2024-01-01T00:00:00.0Z"),name:"2024-01-01"}},ec=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,tc=600*1e3;});function v(t){return typeof t=="object"&&t!==null&&"__isAuthError"in t}function rc(t){return v(t)&&t.name==="AuthApiError"}function Or(t){return v(t)&&t.name==="AuthSessionMissingError"}function nc(t){return v(t)&&t.name==="AuthImplicitGrantRedirectError"}function Bn(t){return v(t)&&t.name==="AuthRetryableFetchError"}var Be,Un,ae,de,J,Ie,st,it,Ar,Wn,zt,Ir,ot,at=E(()=>{Be=class extends Error{constructor(e,r,n){super(e),this.__isAuthError=true,this.name="AuthError",this.status=r,this.code=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,code:this.code}}};Un=class extends Be{constructor(e,r,n){super(e,r,n),this.name="AuthApiError",this.status=r,this.code=n;}};ae=class extends Be{constructor(e,r){super(e),this.name="AuthUnknownError",this.originalError=r;}},de=class extends Be{constructor(e,r,n,s){super(e,n,s),this.name=r,this.status=n;}},J=class extends de{constructor(){super("Auth session missing!","AuthSessionMissingError",400,void 0);}};Ie=class extends de{constructor(){super("Auth session or user missing","AuthInvalidTokenResponseError",500,void 0);}},st=class extends de{constructor(e){super(e,"AuthInvalidCredentialsError",400,void 0);}},it=class extends de{constructor(e,r=null){super(e,"AuthImplicitGrantRedirectError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}};Ar=class extends de{constructor(e,r=null){super(e,"AuthPKCEGrantCodeExchangeError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}},Wn=class extends de{constructor(){super("PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.","AuthPKCECodeVerifierMissingError",400,"pkce_code_verifier_not_found");}},zt=class extends de{constructor(e,r){super(e,"AuthRetryableFetchError",r,void 0);}};Ir=class extends de{constructor(e,r,n){super(e,"AuthWeakPasswordError",r,"weak_password"),this.reasons=n;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{reasons:this.reasons})}},ot=class extends de{constructor(e){super(e,"AuthInvalidJwtError",400,"invalid_jwt");}};});function ic(t,e,r){if(t!==null)for(e.queue=e.queue<<8|t,e.queuedBits+=8;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(Fn[n]),e.queuedBits-=6;}else if(e.queuedBits>0)for(e.queue=e.queue<<6-e.queuedBits,e.queuedBits=6;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(Fn[n]),e.queuedBits-=6;}}function oc(t,e,r){let n=Rg[t];if(n>-1)for(e.queue=e.queue<<6|n,e.queuedBits+=6;e.queuedBits>=8;)r(e.queue>>e.queuedBits-8&255),e.queuedBits-=8;else {if(n===-2)return;throw new Error(`Invalid Base64-URL character "${String.fromCharCode(t)}"`)}}function Ci(t){let e=[],r=o=>{e.push(String.fromCodePoint(o));},n={utf8seq:0,codepoint:0},s={queue:0,queuedBits:0},i=o=>{Tg(o,n,r);};for(let o=0;o<t.length;o+=1)oc(t.charCodeAt(o),s,i);return e.join("")}function xg(t,e){if(t<=127){e(t);return}else if(t<=2047){e(192|t>>6),e(128|t&63);return}else if(t<=65535){e(224|t>>12),e(128|t>>6&63),e(128|t&63);return}else if(t<=1114111){e(240|t>>18),e(128|t>>12&63),e(128|t>>6&63),e(128|t&63);return}throw new Error(`Unrecognized Unicode codepoint: ${t.toString(16)}`)}function Pg(t,e){for(let r=0;r<t.length;r+=1){let n=t.charCodeAt(r);if(n>55295&&n<=56319){let s=(n-55296)*1024&65535;n=(t.charCodeAt(r+1)-56320&65535|s)+65536,r+=1;}xg(n,e);}}function Tg(t,e,r){if(e.utf8seq===0){if(t<=127){r(t);return}for(let n=1;n<6;n+=1)if((t>>7-n&1)===0){e.utf8seq=n;break}if(e.utf8seq===2)e.codepoint=t&31;else if(e.utf8seq===3)e.codepoint=t&15;else if(e.utf8seq===4)e.codepoint=t&7;else throw new Error("Invalid UTF-8 sequence");e.utf8seq-=1;}else if(e.utf8seq>0){if(t<=127)throw new Error("Invalid UTF-8 sequence");e.codepoint=e.codepoint<<6|t&63,e.utf8seq-=1,e.utf8seq===0&&r(e.codepoint);}}function Fe(t){let e=[],r={queue:0,queuedBits:0},n=s=>{e.push(s);};for(let s=0;s<t.length;s+=1)oc(t.charCodeAt(s),r,n);return new Uint8Array(e)}function ac(t){let e=[];return Pg(t,r=>e.push(r)),new Uint8Array(e)}function Oe(t){let e=[],r={queue:0,queuedBits:0},n=s=>{e.push(s);};return t.forEach(s=>ic(s,r,n)),ic(null,r,n),e.join("")}var Fn,sc,Rg,Hn=E(()=>{Fn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),sc=`
31
+ \r=`.split(""),Rg=(()=>{let t=new Array(128);for(let e=0;e<t.length;e+=1)t[e]=-1;for(let e=0;e<sc.length;e+=1)t[sc[e].charCodeAt(0)]=-2;for(let e=0;e<Fn.length;e+=1)t[Fn[e].charCodeAt(0)]=e;return t})();});function lc(t){return Math.round(Date.now()/1e3)+t}function cc(){return Symbol("auth-callback")}function uc(t){let e={},r=new URL(t);if(r.hash&&r.hash[0]==="#")try{new URLSearchParams(r.hash.substring(1)).forEach((s,i)=>{e[i]=s;});}catch{}return r.searchParams.forEach((n,s)=>{e[s]=n;}),e}function Nr(t){let e=t.split(".");if(e.length!==3)throw new ot("Invalid JWT structure");for(let n=0;n<e.length;n++)if(!ec.test(e[n]))throw new ot("JWT not in base64url format");return {header:JSON.parse(Ci(e[0])),payload:JSON.parse(Ci(e[1])),signature:Fe(e[2]),raw:{header:e[0],payload:e[1]}}}async function pc(t){return await new Promise(e=>{setTimeout(()=>e(null),t);})}function hc(t,e){return new Promise((n,s)=>{(async()=>{for(let i=0;i<1/0;i++)try{let o=await t(i);if(!e(i,null,o)){n(o);return}}catch(o){if(!e(i,o)){s(o);return}}})();})}function Ag(t){return ("0"+t.toString(16)).substr(-2)}function Ig(){let e=new Uint32Array(56);if(typeof crypto>"u"){let r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",n=r.length,s="";for(let i=0;i<56;i++)s+=r.charAt(Math.floor(Math.random()*n));return s}return crypto.getRandomValues(e),Array.from(e,Ag).join("")}async function Og(t){let r=new TextEncoder().encode(t),n=await crypto.subtle.digest("SHA-256",r),s=new Uint8Array(n);return Array.from(s).map(i=>String.fromCharCode(i)).join("")}async function $g(t){if(!(typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof TextEncoder<"u"))return console.warn("WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256."),t;let r=await Og(t);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function ut(t,e,r=false){let n=Ig(),s=n;r&&(s+="/PASSWORD_RECOVERY"),await ct(t,`${e}-code-verifier`,s);let i=await $g(n);return [i,n===i?"plain":"s256"]}function fc(t){let e=t.headers.get(Tr);if(!e||!e.match(Ng))return null;try{return new Date(`${e}T00:00:00.0Z`)}catch{return null}}function gc(t){if(!t)throw new Error("Missing exp claim");let e=Math.floor(Date.now()/1e3);if(t<=e)throw new Error("JWT has expired")}function mc(t){switch(t){case "RS256":return {name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case "ES256":return {name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}};default:throw new Error("Invalid alg claim")}}function dt(t){if(!jg.test(t))throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not")}function Jn(){let t={};return new Proxy(t,{get:(e,r)=>{if(r==="__isUserNotAvailableProxy")return true;if(typeof r=="symbol"){let n=r.toString();if(n==="Symbol(Symbol.toPrimitive)"||n==="Symbol(Symbol.toStringTag)"||n==="Symbol(util.inspect.custom)")return}throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${r}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function _c(t,e){return new Proxy(t,{get:(r,n,s)=>{if(n==="__isInsecureUserWarningProxy")return true;if(typeof n=="symbol"){let i=n.toString();if(i==="Symbol(Symbol.toPrimitive)"||i==="Symbol(Symbol.toStringTag)"||i==="Symbol(util.inspect.custom)"||i==="Symbol(nodejs.util.inspect.custom)")return Reflect.get(r,n,s)}return !e.value&&typeof n=="string"&&(console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."),e.value=true),Reflect.get(r,n,s)}})}function Ei(t){return JSON.parse(JSON.stringify(t))}var H,lt,qn,zn,dc,ct,He,z,$r,Ng,jg,Jt=E(()=>{Mn();at();Hn();H=()=>typeof window<"u"&&typeof document<"u",lt={tested:false,writable:false},qn=()=>{if(!H())return false;try{if(typeof globalThis.localStorage!="object")return !1}catch{return false}if(lt.tested)return lt.writable;let t=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(t,t),globalThis.localStorage.removeItem(t),lt.tested=!0,lt.writable=!0;}catch{lt.tested=true,lt.writable=false;}return lt.writable};zn=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),dc=t=>typeof t=="object"&&t!==null&&"status"in t&&"ok"in t&&"json"in t&&typeof t.json=="function",ct=async(t,e,r)=>{await t.setItem(e,JSON.stringify(r));},He=async(t,e)=>{let r=await t.getItem(e);if(!r)return null;try{return JSON.parse(r)}catch{return r}},z=async(t,e)=>{await t.removeItem(e);},$r=class t{constructor(){this.promise=new t.promiseConstructor((e,r)=>{this.resolve=e,this.reject=r;});}};$r.promiseConstructor=Promise;Ng=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;jg=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;});async function wc(t){var e;if(!dc(t))throw new zt(pt(t),0);if(Dg.includes(t.status))throw new zt(pt(t),t.status);let r;try{r=await t.json();}catch(i){throw new ae(pt(i),i)}let n,s=fc(t);if(s&&s.getTime()>=Si["2024-01-01"].timestamp&&typeof r=="object"&&r&&typeof r.code=="string"?n=r.code:typeof r=="object"&&r&&typeof r.error_code=="string"&&(n=r.error_code),n){if(n==="weak_password")throw new Ir(pt(r),t.status,((e=r.weak_password)===null||e===void 0?void 0:e.reasons)||[]);if(n==="session_not_found")throw new J}else if(typeof r=="object"&&r&&typeof r.weak_password=="object"&&r.weak_password&&Array.isArray(r.weak_password.reasons)&&r.weak_password.reasons.length&&r.weak_password.reasons.reduce((i,o)=>i&&typeof o=="string",true))throw new Ir(pt(r),t.status,r.weak_password.reasons);throw new Un(pt(r),t.status||500,n)}async function S(t,e,r,n){var s;let i=Object.assign({},n?.headers);i[Tr]||(i[Tr]=Si["2024-01-01"].name),n?.jwt&&(i.Authorization=`Bearer ${n.jwt}`);let o=(s=n?.query)!==null&&s!==void 0?s:{};n?.redirectTo&&(o.redirect_to=n.redirectTo);let a=Object.keys(o).length?"?"+new URLSearchParams(o).toString():"",l=await Mg(t,e,r+a,{headers:i,noResolveJson:n?.noResolveJson},{},n?.body);return n?.xform?n?.xform(l):{data:Object.assign({},l),error:null}}async function Mg(t,e,r,n,s,i){let o=Lg(e,n,s,i),a;try{a=await t(r,Object.assign({},o));}catch(l){throw console.error(l),new zt(pt(l),0)}if(a.ok||await wc(a),n?.noResolveJson)return a;try{return await a.json()}catch(l){await wc(l);}}function le(t){var e;let r=null;Ug(t)&&(r=Object.assign({},t),t.expires_at||(r.expires_at=lc(t.expires_in)));let n=(e=t.user)!==null&&e!==void 0?e:t;return {data:{session:r,user:n},error:null}}function Ri(t){let e=le(t);return !e.error&&t.weak_password&&typeof t.weak_password=="object"&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.message&&typeof t.weak_password.message=="string"&&t.weak_password.reasons.reduce((r,n)=>r&&typeof n=="string",true)&&(e.data.weak_password=t.weak_password),e}function be(t){var e;return {data:{user:(e=t.user)!==null&&e!==void 0?e:t},error:null}}function yc(t){return {data:t,error:null}}function kc(t){let{action_link:e,email_otp:r,hashed_token:n,redirect_to:s,verification_type:i}=t,o=tt(t,["action_link","email_otp","hashed_token","redirect_to","verification_type"]),a={action_link:e,email_otp:r,hashed_token:n,redirect_to:s,verification_type:i},l=Object.assign({},o);return {data:{properties:a,user:l},error:null}}function xi(t){return t}function Ug(t){return t.access_token&&t.refresh_token&&t.expires_in}var pt,Dg,Lg,Pi=E(()=>{dr();Mn();Jt();at();pt=t=>t.msg||t.message||t.error_description||t.error||JSON.stringify(t),Dg=[502,503,504,520,521,522,523,524,530];Lg=(t,e,r,n)=>{let s={method:t,headers:e?.headers||{}};return t==="GET"?s:(s.headers=Object.assign({"Content-Type":"application/json;charset=UTF-8"},e?.headers),s.body=JSON.stringify(n),Object.assign(Object.assign({},s),r))};});var Kn,Ti=E(()=>{Kn=["global","local","others"];});var ht,Vn=E(()=>{dr();Pi();Jt();Ti();at();ht=class{constructor({url:e="",headers:r={},fetch:n}){this.url=e,this.headers=r,this.fetch=zn(n),this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)},this.customProviders={listProviders:this._listCustomProviders.bind(this),createProvider:this._createCustomProvider.bind(this),getProvider:this._getCustomProvider.bind(this),updateProvider:this._updateCustomProvider.bind(this),deleteProvider:this._deleteCustomProvider.bind(this)};}async signOut(e,r=Kn[0]){if(Kn.indexOf(r)<0)throw new Error(`@supabase/auth-js: Parameter scope must be one of ${Kn.join(", ")}`);try{return await S(this.fetch,"POST",`${this.url}/logout?scope=${r}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(n){if(v(n))return {data:null,error:n};throw n}}async inviteUserByEmail(e,r={}){try{return await S(this.fetch,"POST",`${this.url}/invite`,{body:{email:e,data:r.data},headers:this.headers,redirectTo:r.redirectTo,xform:be})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async generateLink(e){try{let{options:r}=e,n=tt(e,["options"]),s=Object.assign(Object.assign({},n),r);return "newEmail"in n&&(s.new_email=n?.newEmail,delete s.newEmail),await S(this.fetch,"POST",`${this.url}/admin/generate_link`,{body:s,headers:this.headers,xform:kc,redirectTo:r?.redirectTo})}catch(r){if(v(r))return {data:{properties:null,user:null},error:r};throw r}}async createUser(e){try{return await S(this.fetch,"POST",`${this.url}/admin/users`,{body:e,headers:this.headers,xform:be})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async listUsers(e){var r,n,s,i,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await S(this.fetch,"GET",`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(i=(s=e?.perPage)===null||s===void 0?void 0:s.toString())!==null&&i!==void 0?i:""},xform:xi});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,h=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return h.length>0&&(h.forEach(f=>{let m=parseInt(f.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(f.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{users:[]},error:c};throw c}}async getUserById(e){dt(e);try{return await S(this.fetch,"GET",`${this.url}/admin/users/${e}`,{headers:this.headers,xform:be})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async updateUserById(e,r){dt(e);try{return await S(this.fetch,"PUT",`${this.url}/admin/users/${e}`,{body:r,headers:this.headers,xform:be})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async deleteUser(e,r=false){dt(e);try{return await S(this.fetch,"DELETE",`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:r},xform:be})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async _listFactors(e){dt(e.userId);try{let{data:r,error:n}=await S(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:s=>({data:{factors:s},error:null})});return {data:r,error:n}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _deleteFactor(e){dt(e.userId),dt(e.id);try{return {data:await S(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listOAuthClients(e){var r,n,s,i,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await S(this.fetch,"GET",`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(i=(s=e?.perPage)===null||s===void 0?void 0:s.toString())!==null&&i!==void 0?i:""},xform:xi});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,h=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return h.length>0&&(h.forEach(f=>{let m=parseInt(f.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(f.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{clients:[]},error:c};throw c}}async _createOAuthClient(e){try{return await S(this.fetch,"POST",`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getOAuthClient(e){try{return await S(this.fetch,"GET",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateOAuthClient(e,r){try{return await S(this.fetch,"PUT",`${this.url}/admin/oauth/clients/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteOAuthClient(e){try{return await S(this.fetch,"DELETE",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _regenerateOAuthClientSecret(e){try{return await S(this.fetch,"POST",`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listCustomProviders(e){try{let r={};return e?.type&&(r.type=e.type),await S(this.fetch,"GET",`${this.url}/admin/custom-providers`,{headers:this.headers,query:r,xform:n=>{var s;return {data:{providers:(s=n?.providers)!==null&&s!==void 0?s:[]},error:null}}})}catch(r){if(v(r))return {data:{providers:[]},error:r};throw r}}async _createCustomProvider(e){try{return await S(this.fetch,"POST",`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getCustomProvider(e){try{return await S(this.fetch,"GET",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateCustomProvider(e,r){try{return await S(this.fetch,"PUT",`${this.url}/admin/custom-providers/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteCustomProvider(e){try{return await S(this.fetch,"DELETE",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}};});function Ai(t={}){return {getItem:e=>t[e]||null,setItem:(e,r)=>{t[e]=r;},removeItem:e=>{delete t[e];}}}var bc=E(()=>{});async function Ii(t,e,r){pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire lock",t,e);let n=new globalThis.AbortController,s;e>0&&(s=setTimeout(()=>{n.abort(),pe.debug&&console.log("@supabase/gotrue-js: navigatorLock acquire timed out",t);},e)),await Promise.resolve();try{return await globalThis.navigator.locks.request(t,e===0?{mode:"exclusive",ifAvailable:!0}:{mode:"exclusive",signal:n.signal},async i=>{if(i){clearTimeout(s),pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquired",t,i.name);try{return await r()}finally{pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: released",t,i.name);}}else {if(e===0)throw pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: not immediately available",t),new Dr(`Acquiring an exclusive Navigator LockManager lock "${t}" immediately failed`);if(pe.debug)try{let o=await globalThis.navigator.locks.query();console.log("@supabase/gotrue-js: Navigator LockManager state",JSON.stringify(o,null," "));}catch(o){console.warn("@supabase/gotrue-js: Error when querying Navigator LockManager state",o);}return console.warn("@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request"),clearTimeout(s),await r()}})}catch(i){if(e>0&&clearTimeout(s),i?.name==="AbortError"&&e>0){if(n.signal.aborted)return pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock",t),console.warn(`@supabase/gotrue-js: Lock "${t}" was not released within ${e}ms. This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). Forcefully acquiring the lock to recover.`),await Promise.resolve().then(()=>globalThis.navigator.locks.request(t,{mode:"exclusive",steal:true},async o=>{if(o){pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: recovered (stolen)",t,o.name);try{return await r()}finally{pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: released (stolen)",t,o.name);}}else return console.warn("@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true"),await r()}));throw pe.debug&&console.log("@supabase/gotrue-js: navigatorLock: lock was stolen by another request",t),new Dr(`Lock "${t}" was released because another request stole it`)}throw i}}var pe,jr,Dr,Oi=E(()=>{Jt();pe={debug:!!(globalThis&&qn()&&globalThis.localStorage&&globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug")==="true")},jr=class extends Error{constructor(e){super(e),this.isAcquireTimeout=true;}},Dr=class extends jr{};});function vc(){if(typeof globalThis!="object")try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__;}catch{typeof self<"u"&&(self.globalThis=self);}}var Sc=E(()=>{});function $i(t){if(!/^0x[a-fA-F0-9]{40}$/.test(t))throw new Error(`@supabase/auth-js: Address "${t}" is invalid.`);return t.toLowerCase()}function Cc(t){return parseInt(t,16)}function Ec(t){let e=new TextEncoder().encode(t);return "0x"+Array.from(e,n=>n.toString(16).padStart(2,"0")).join("")}function Rc(t){var e;let{chainId:r,domain:n,expirationTime:s,issuedAt:i=new Date,nonce:o,notBefore:a,requestId:l,resources:c,scheme:u,uri:d,version:p}=t;{if(!Number.isInteger(r))throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${r}`);if(!n)throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.');if(o&&o.length<8)throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${o}`);if(!d)throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.');if(p!=="1")throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${p}`);if(!((e=t.statement)===null||e===void 0)&&e.includes(`
32
32
  `))throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${t.statement}`)}let h=$i(t.address),f=u?`${u}://${n}`:n,m=t.statement?`${t.statement}
33
33
  `:"",_=`${f} wants you to sign in with your Ethereum account:
34
34
  ${h}
@@ -43,9 +43,9 @@ Not Before: ${a.toISOString()}`),l&&(k+=`
43
43
  Request ID: ${l}`),c){let b=`
44
44
  Resources:`;for(let w of c){if(!w||typeof w!="string")throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${w}`);b+=`
45
45
  - ${w}`;}k+=b;}return `${_}
46
- ${k}`}var xc=E(()=>{});function Pc({error:t,options:e}){var r,n,s;let{publicKey:i}=e;if(!i)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else if(t.name==="ConstraintError"){if(((r=i.authenticatorSelection)===null||r===void 0?void 0:r.requireResidentKey)===true)return new L({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:t});if(e.mediation==="conditional"&&((n=i.authenticatorSelection)===null||n===void 0?void 0:n.userVerification)==="required")return new L({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:t});if(((s=i.authenticatorSelection)===null||s===void 0?void 0:s.userVerification)==="required")return new L({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:t})}else {if(t.name==="InvalidStateError")return new L({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:t});if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="NotSupportedError")return i.pubKeyCredParams.filter(a=>a.type==="public-key").length===0?new L({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:t}):new L({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:t});if(t.name==="SecurityError"){let o=window.location.hostname;if(Ni(o)){if(i.rp.id!==o)return new L({message:`The RP ID "${i.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="TypeError"){if(i.user.id.byteLength<1||i.user.id.byteLength>64)return new L({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}function Tc({error:t,options:e}){let{publicKey:r}=e;if(!r)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else {if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="SecurityError"){let n=window.location.hostname;if(Ni(n)){if(r.rpId!==n)return new L({message:`The RP ID "${r.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}var L,ft,Ac=E(()=>{ji();L=class extends Error{constructor({message:e,code:r,cause:n,name:s}){var i;super(e,{cause:n}),this.__isWebAuthnError=true,this.name=(i=s??(n instanceof Error?n.name:void 0))!==null&&i!==void 0?i:"Unknown Error",this.code=r;}},ft=class extends L{constructor(e,r){super({code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:r,message:e}),this.name="WebAuthnUnknownError",this.originalError=r;}};});function Oc(t){if(!t)throw new Error("Credential creation options are required");if(typeof PublicKeyCredential<"u"&&"parseCreationOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON=="function")return PublicKeyCredential.parseCreationOptionsFromJSON(t);let{challenge:e,user:r,excludeCredentials:n}=t,s=tt(t,["challenge","user","excludeCredentials"]),i=Fe(e).buffer,o=Object.assign(Object.assign({},r),{id:Fe(r.id).buffer}),a=Object.assign(Object.assign({},s),{challenge:i,user:o});if(n&&n.length>0){a.excludeCredentials=new Array(n.length);for(let l=0;l<n.length;l++){let c=n[l];a.excludeCredentials[l]=Object.assign(Object.assign({},c),{id:Fe(c.id).buffer,type:c.type||"public-key",transports:c.transports});}}return a}function $c(t){if(!t)throw new Error("Credential request options are required");if(typeof PublicKeyCredential<"u"&&"parseRequestOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON=="function")return PublicKeyCredential.parseRequestOptionsFromJSON(t);let{challenge:e,allowCredentials:r}=t,n=tt(t,["challenge","allowCredentials"]),s=Fe(e).buffer,i=Object.assign(Object.assign({},n),{challenge:s});if(r&&r.length>0){i.allowCredentials=new Array(r.length);for(let o=0;o<r.length;o++){let a=r[o];i.allowCredentials[o]=Object.assign(Object.assign({},a),{id:Fe(a.id).buffer,type:a.type||"public-key",transports:a.transports});}}return i}function Nc(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t;return {id:t.id,rawId:t.id,response:{attestationObject:Oe(new Uint8Array(t.response.attestationObject)),clientDataJSON:Oe(new Uint8Array(t.response.clientDataJSON))},type:"public-key",clientExtensionResults:t.getClientExtensionResults(),authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function jc(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t,n=t.getClientExtensionResults(),s=t.response;return {id:t.id,rawId:t.id,response:{authenticatorData:Oe(new Uint8Array(s.authenticatorData)),clientDataJSON:Oe(new Uint8Array(s.clientDataJSON)),signature:Oe(new Uint8Array(s.signature)),userHandle:s.userHandle?Oe(new Uint8Array(s.userHandle)):void 0},type:"public-key",clientExtensionResults:n,authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function Ni(t){return t==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(t)}function Ic(){var t,e;return !!(H()&&"PublicKeyCredential"in window&&window.PublicKeyCredential&&"credentials"in navigator&&typeof((t=navigator?.credentials)===null||t===void 0?void 0:t.create)=="function"&&typeof((e=navigator?.credentials)===null||e===void 0?void 0:e.get)=="function")}async function Bg(t){try{let e=await navigator.credentials.create(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new ft("Browser returned unexpected credential type",e)}:{data:null,error:new ft("Empty credential response",e)}}catch(e){return {data:null,error:Pc({error:e,options:t})}}}async function Fg(t){try{let e=await navigator.credentials.get(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new ft("Browser returned unexpected credential type",e)}:{data:null,error:new ft("Empty credential response",e)}}catch(e){return {data:null,error:Tc({error:e,options:t})}}}function Gn(...t){let e=s=>s!==null&&typeof s=="object"&&!Array.isArray(s),r=s=>s instanceof ArrayBuffer||ArrayBuffer.isView(s),n={};for(let s of t)if(s)for(let i in s){let o=s[i];if(o!==void 0)if(Array.isArray(o))n[i]=o;else if(r(o))n[i]=o;else if(e(o)){let a=n[i];e(a)?n[i]=Gn(a,o):n[i]=Gn(o);}else n[i]=o;}return n}function zg(t,e){return Gn(Hg,t,e||{})}function Jg(t,e){return Gn(qg,t,e||{})}var Di,Wg,Hg,qg,Yn,ji=E(()=>{ur();Hn();at();Jt();Ac();Di=class{createNewAbortSignal(){if(this.controller){let r=new Error("Cancelling existing WebAuthn API call for new one");r.name="AbortError",this.controller.abort(r);}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=new Error("Manually cancelling existing WebAuthn API call");e.name="AbortError",this.controller.abort(e),this.controller=void 0;}}},Wg=new Di;Hg={hints:["security-key"],authenticatorSelection:{authenticatorAttachment:"cross-platform",requireResidentKey:false,userVerification:"preferred",residentKey:"discouraged"},attestation:"direct"},qg={userVerification:"preferred",hints:["security-key"],attestation:"direct"};Yn=class{constructor(e){this.client=e,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this);}async _enroll(e){return this.client.mfa.enroll(Object.assign(Object.assign({},e),{factorType:"webauthn"}))}async _challenge({factorId:e,webauthn:r,friendlyName:n,signal:s},i){var o;try{let{data:a,error:l}=await this.client.mfa.challenge({factorId:e,webauthn:r});if(!a)return {data:null,error:l};let c=s??Wg.createNewAbortSignal();if(a.webauthn.type==="create"){let{user:u}=a.webauthn.credential_options.publicKey;if(!u.name){let d=n;if(d)u.name=`${u.id}:${d}`;else {let h=(await this.client.getUser()).data.user,f=((o=h?.user_metadata)===null||o===void 0?void 0:o.name)||h?.email||h?.id||"User";u.name=`${u.id}:${f}`;}}u.displayName||(u.displayName=u.name);}switch(a.webauthn.type){case "create":{let u=zg(a.webauthn.credential_options.publicKey,i?.create),{data:d,error:p}=await Bg({publicKey:u,signal:c});return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}case "request":{let u=Jg(a.webauthn.credential_options.publicKey,i?.request),{data:d,error:p}=await Fg(Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:u,signal:c}));return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}}}catch(a){return v(a)?{data:null,error:a}:{data:null,error:new oe("Unexpected error in challenge",a)}}}async _verify({challengeId:e,factorId:r,webauthn:n}){return this.client.mfa.verify({factorId:r,challengeId:e,webauthn:n})}async _authenticate({factorId:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:s}={}},i){if(!r)return {data:null,error:new Be("rpId is required for WebAuthn authentication")};try{if(!Ic())return {data:null,error:new oe("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this.challenge({factorId:e,webauthn:{rpId:r,rpOrigins:n},signal:s},{request:i});if(!o)return {data:null,error:a};let{webauthn:l}=o;return this._verify({factorId:e,challengeId:o.challengeId,webauthn:{type:l.type,rpId:r,rpOrigins:n,credential_response:l.credential_response}})}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new oe("Unexpected error in authenticate",o)}}}async _register({friendlyName:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:s}={}},i){if(!r)return {data:null,error:new Be("rpId is required for WebAuthn registration")};try{if(!Ic())return {data:null,error:new oe("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this._enroll({friendlyName:e});if(!o)return await this.client.mfa.listFactors().then(u=>{var d;return (d=u.data)===null||d===void 0?void 0:d.all.find(p=>p.factor_type==="webauthn"&&p.friendly_name===e&&p.status!=="unverified")}).then(u=>u?this.client.mfa.unenroll({factorId:u?.id}):void 0),{data:null,error:a};let{data:l,error:c}=await this._challenge({factorId:o.id,friendlyName:o.friendly_name,webauthn:{rpId:r,rpOrigins:n},signal:s},{create:i});return l?this._verify({factorId:o.id,challengeId:l.challengeId,webauthn:{rpId:r,rpOrigins:n,type:l.webauthn.type,credential_response:l.webauthn.credential_response}}):{data:null,error:c}}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new oe("Unexpected error in register",o)}}}};});async function Dc(t,e,r){return await r()}var Kg,Kt,Xn,Li,Ui=E(()=>{Vn();Un();at();Pi();Jt();bc();Oi();Sc();vi();Hn();xc();ji();vc();Kg={url:Xl,storageKey:Zl,autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,headers:Ql,flowType:"implicit",debug:false,hasCustomAuthorizationHeader:false,throwOnError:false,lockAcquireTimeout:5e3,skipAutoInitialize:false};Kt={},Xn=class t{get jwks(){var e,r;return (r=(e=Kt[this.storageKey])===null||e===void 0?void 0:e.jwks)!==null&&r!==void 0?r:{keys:[]}}set jwks(e){Kt[this.storageKey]=Object.assign(Object.assign({},Kt[this.storageKey]),{jwks:e});}get jwks_cached_at(){var e,r;return (r=(e=Kt[this.storageKey])===null||e===void 0?void 0:e.cachedAt)!==null&&r!==void 0?r:Number.MIN_SAFE_INTEGER}set jwks_cached_at(e){Kt[this.storageKey]=Object.assign(Object.assign({},Kt[this.storageKey]),{cachedAt:e});}constructor(e){var r,n,s;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.initializePromise=null,this.detectSessionInUrl=true,this.hasCustomAuthorizationHeader=false,this.suppressGetSessionWarning=false,this.lockAcquired=false,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;let i=Object.assign(Object.assign({},Kg),e);if(this.storageKey=i.storageKey,this.instanceID=(r=t.nextInstanceID[this.storageKey])!==null&&r!==void 0?r:0,t.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!i.debug,typeof i.debug=="function"&&(this.logger=i.debug),this.instanceID>0&&H()){let o=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(o),this.logDebugMessages&&console.trace(o);}if(this.persistSession=i.persistSession,this.autoRefreshToken=i.autoRefreshToken,this.admin=new ht({url:i.url,headers:i.headers,fetch:i.fetch}),this.url=i.url,this.headers=i.headers,this.fetch=zn(i.fetch),this.lock=i.lock||Dc,this.detectSessionInUrl=i.detectSessionInUrl,this.flowType=i.flowType,this.hasCustomAuthorizationHeader=i.hasCustomAuthorizationHeader,this.throwOnError=i.throwOnError,this.lockAcquireTimeout=i.lockAcquireTimeout,i.lock?this.lock=i.lock:this.persistSession&&H()&&(!((n=globalThis?.navigator)===null||n===void 0)&&n.locks)?this.lock=Ii:this.lock=Dc,this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=Number.MIN_SAFE_INTEGER),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new Yn(this)},this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.persistSession?(i.storage?this.storage=i.storage:qn()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=Ai(this.memoryStorage)),i.userStorage&&(this.userStorage=i.userStorage)):(this.memoryStorage={},this.storage=Ai(this.memoryStorage)),H()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey);}catch(o){console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available",o);}(s=this.broadcastChannel)===null||s===void 0||s.addEventListener("message",async o=>{this._debug("received broadcast notification from other tab or client",o);try{await this._notifyAllSubscribers(o.data.event,o.data.session,!1);}catch(a){this._debug("#broadcastChannel","error",a);}});}i.skipAutoInitialize||this.initialize().catch(o=>{this._debug("#initialize()","error",o);});}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return `GoTrueClient@${this.storageKey}:${this.instanceID} (${jn}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){return this.initializePromise?await this.initializePromise:(this.initializePromise=(async()=>await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()))(),await this.initializePromise)}async _initialize(){var e;try{let r={},n="none";if(H()&&(r=uc(window.location.href),this._isImplicitGrantCallback(r)?n="implicit":await this._isPKCECallback(r)&&(n="pkce")),H()&&this.detectSessionInUrl&&n!=="none"){let{data:s,error:i}=await this._getSessionFromURL(r,n);if(i){if(this._debug("#_initialize()","error detecting session from URL",i),nc(i)){let l=(e=i.details)===null||e===void 0?void 0:e.code;if(l==="identity_already_exists"||l==="identity_not_found"||l==="single_identity_not_deletable")return {error:i}}return {error:i}}let{session:o,redirectType:a}=s;return this._debug("#_initialize()","detected session in URL",o,"redirect type",a),await this._saveSession(o),setTimeout(async()=>{a==="recovery"?await this._notifyAllSubscribers("PASSWORD_RECOVERY",o):await this._notifyAllSubscribers("SIGNED_IN",o);},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(r){return v(r)?this._returnResult({error:r}):this._returnResult({error:new oe("Unexpected error during initialization",r)})}finally{await this._handleVisibilityChange(),this._debug("#_initialize()","end");}}async signInAnonymously(e){var r,n,s;try{let i=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{data:(n=(r=e?.options)===null||r===void 0?void 0:r.data)!==null&&n!==void 0?n:{},gotrue_meta_security:{captcha_token:(s=e?.options)===null||s===void 0?void 0:s.captchaToken}},xform:ae}),{data:o,error:a}=i;if(a||!o)return this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(i){if(v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async signUp(e){var r,n,s;try{let i;if("email"in e){let{email:u,password:d,options:p}=e,h=null,f=null;this.flowType==="pkce"&&([h,f]=await ut(this.storage,this.storageKey)),i=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,redirectTo:p?.emailRedirectTo,body:{email:u,password:d,data:(r=p?.data)!==null&&r!==void 0?r:{},gotrue_meta_security:{captcha_token:p?.captchaToken},code_challenge:h,code_challenge_method:f},xform:ae});}else if("phone"in e){let{phone:u,password:d,options:p}=e;i=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{phone:u,password:d,data:(n=p?.data)!==null&&n!==void 0?n:{},channel:(s=p?.channel)!==null&&s!==void 0?s:"sms",gotrue_meta_security:{captcha_token:p?.captchaToken}},xform:ae});}else throw new st("You must provide either an email or phone number and a password");let{data:o,error:a}=i;if(a||!o)return await z(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async signInWithPassword(e){try{let r;if("email"in e){let{email:i,password:o,options:a}=e;r=await S(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:i,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Ri});}else if("phone"in e){let{phone:i,password:o,options:a}=e;r=await S(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:i,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Ri});}else throw new st("You must provide either an email or phone number and a password");let{data:n,error:s}=r;if(s)return this._returnResult({data:{user:null,session:null},error:s});if(!n||!n.session||!n.user){let i=new Ie;return this._returnResult({data:{user:null,session:null},error:i})}return n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers("SIGNED_IN",n.session)),this._returnResult({data:Object.assign({user:n.user,session:n.session},n.weak_password?{weakPassword:n.weak_password}:null),error:s})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOAuth(e){var r,n,s,i;return await this._handleProviderSignIn(e.provider,{redirectTo:(r=e.options)===null||r===void 0?void 0:r.redirectTo,scopes:(n=e.options)===null||n===void 0?void 0:n.scopes,queryParams:(s=e.options)===null||s===void 0?void 0:s.queryParams,skipBrowserRedirect:(i=e.options)===null||i===void 0?void 0:i.skipBrowserRedirect})}async exchangeCodeForSession(e){return await this.initializePromise,this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e))}async signInWithWeb3(e){let{chain:r}=e;switch(r){case "ethereum":return await this.signInWithEthereum(e);case "solana":return await this.signInWithSolana(e);default:throw new Error(`@supabase/auth-js: Unsupported chain "${r}"`)}}async signInWithEthereum(e){var r,n,s,i,o,a,l,c,u,d,p;let h,f;if("message"in e)h=e.message,f=e.signature;else {let{chain:m,wallet:_,statement:k,options:b}=e,w;if(H())if(typeof _=="object")w=_;else {let ie=window;if("ethereum"in ie&&typeof ie.ethereum=="object"&&"request"in ie.ethereum&&typeof ie.ethereum.request=="function")w=ie.ethereum;else throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.")}else {if(typeof _!="object"||!b?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");w=_;}let I=new URL((r=b?.url)!==null&&r!==void 0?r:window.location.href),Y=await w.request({method:"eth_requestAccounts"}).then(ie=>ie).catch(()=>{throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid")});if(!Y||Y.length===0)throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected.");let P=$i(Y[0]),$=(n=b?.signInWithEthereum)===null||n===void 0?void 0:n.chainId;if(!$){let ie=await w.request({method:"eth_chainId"});$=Cc(ie);}let Pe={domain:I.host,address:P,statement:k,uri:I.href,version:"1",chainId:$,nonce:(s=b?.signInWithEthereum)===null||s===void 0?void 0:s.nonce,issuedAt:(o=(i=b?.signInWithEthereum)===null||i===void 0?void 0:i.issuedAt)!==null&&o!==void 0?o:new Date,expirationTime:(a=b?.signInWithEthereum)===null||a===void 0?void 0:a.expirationTime,notBefore:(l=b?.signInWithEthereum)===null||l===void 0?void 0:l.notBefore,requestId:(c=b?.signInWithEthereum)===null||c===void 0?void 0:c.requestId,resources:(u=b?.signInWithEthereum)===null||u===void 0?void 0:u.resources};h=Rc(Pe),f=await w.request({method:"personal_sign",params:[Ec(h),P]});}try{let{data:m,error:_}=await S(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"ethereum",message:h,signature:f},!((d=e.options)===null||d===void 0)&&d.captchaToken?{gotrue_meta_security:{captcha_token:(p=e.options)===null||p===void 0?void 0:p.captchaToken}}:null),xform:ae});if(_)throw _;if(!m||!m.session||!m.user){let k=new Ie;return this._returnResult({data:{user:null,session:null},error:k})}return m.session&&(await this._saveSession(m.session),await this._notifyAllSubscribers("SIGNED_IN",m.session)),this._returnResult({data:Object.assign({},m),error:_})}catch(m){if(v(m))return this._returnResult({data:{user:null,session:null},error:m});throw m}}async signInWithSolana(e){var r,n,s,i,o,a,l,c,u,d,p,h;let f,m;if("message"in e)f=e.message,m=e.signature;else {let{chain:_,wallet:k,statement:b,options:w}=e,I;if(H())if(typeof k=="object")I=k;else {let P=window;if("solana"in P&&typeof P.solana=="object"&&("signIn"in P.solana&&typeof P.solana.signIn=="function"||"signMessage"in P.solana&&typeof P.solana.signMessage=="function"))I=P.solana;else throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.")}else {if(typeof k!="object"||!w?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");I=k;}let Y=new URL((r=w?.url)!==null&&r!==void 0?r:window.location.href);if("signIn"in I&&I.signIn){let P=await I.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},w?.signInWithSolana),{version:"1",domain:Y.host,uri:Y.href}),b?{statement:b}:null)),$;if(Array.isArray(P)&&P[0]&&typeof P[0]=="object")$=P[0];else if(P&&typeof P=="object"&&"signedMessage"in P&&"signature"in P)$=P;else throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value");if("signedMessage"in $&&"signature"in $&&(typeof $.signedMessage=="string"||$.signedMessage instanceof Uint8Array)&&$.signature instanceof Uint8Array)f=typeof $.signedMessage=="string"?$.signedMessage:new TextDecoder().decode($.signedMessage),m=$.signature;else throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields")}else {if(!("signMessage"in I)||typeof I.signMessage!="function"||!("publicKey"in I)||typeof I!="object"||!I.publicKey||!("toBase58"in I.publicKey)||typeof I.publicKey.toBase58!="function")throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API");f=[`${Y.host} wants you to sign in with your Solana account:`,I.publicKey.toBase58(),...b?["",b,""]:[""],"Version: 1",`URI: ${Y.href}`,`Issued At: ${(s=(n=w?.signInWithSolana)===null||n===void 0?void 0:n.issuedAt)!==null&&s!==void 0?s:new Date().toISOString()}`,...!((i=w?.signInWithSolana)===null||i===void 0)&&i.notBefore?[`Not Before: ${w.signInWithSolana.notBefore}`]:[],...!((o=w?.signInWithSolana)===null||o===void 0)&&o.expirationTime?[`Expiration Time: ${w.signInWithSolana.expirationTime}`]:[],...!((a=w?.signInWithSolana)===null||a===void 0)&&a.chainId?[`Chain ID: ${w.signInWithSolana.chainId}`]:[],...!((l=w?.signInWithSolana)===null||l===void 0)&&l.nonce?[`Nonce: ${w.signInWithSolana.nonce}`]:[],...!((c=w?.signInWithSolana)===null||c===void 0)&&c.requestId?[`Request ID: ${w.signInWithSolana.requestId}`]:[],...!((d=(u=w?.signInWithSolana)===null||u===void 0?void 0:u.resources)===null||d===void 0)&&d.length?["Resources",...w.signInWithSolana.resources.map($=>`- ${$}`)]:[]].join(`
47
- `);let P=await I.signMessage(new TextEncoder().encode(f),"utf8");if(!P||!(P instanceof Uint8Array))throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value");m=P;}}try{let{data:_,error:k}=await S(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"solana",message:f,signature:Oe(m)},!((p=e.options)===null||p===void 0)&&p.captchaToken?{gotrue_meta_security:{captcha_token:(h=e.options)===null||h===void 0?void 0:h.captchaToken}}:null),xform:ae});if(k)throw k;if(!_||!_.session||!_.user){let b=new Ie;return this._returnResult({data:{user:null,session:null},error:b})}return _.session&&(await this._saveSession(_.session),await this._notifyAllSubscribers("SIGNED_IN",_.session)),this._returnResult({data:Object.assign({},_),error:k})}catch(_){if(v(_))return this._returnResult({data:{user:null,session:null},error:_});throw _}}async _exchangeCodeForSession(e){let r=await He(this.storage,`${this.storageKey}-code-verifier`),[n,s]=(r??"").split("/");try{if(!n&&this.flowType==="pkce")throw new Wn;let{data:i,error:o}=await S(this.fetch,"POST",`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:n},xform:ae});if(await z(this.storage,`${this.storageKey}-code-verifier`),o)throw o;if(!i||!i.session||!i.user){let a=new Ie;return this._returnResult({data:{user:null,session:null,redirectType:null},error:a})}return i.session&&(await this._saveSession(i.session),await this._notifyAllSubscribers("SIGNED_IN",i.session)),this._returnResult({data:Object.assign(Object.assign({},i),{redirectType:s??null}),error:o})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:{user:null,session:null,redirectType:null},error:i});throw i}}async signInWithIdToken(e){try{let{options:r,provider:n,token:s,access_token:i,nonce:o}=e,a=await S(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:n,id_token:s,access_token:i,nonce:o,gotrue_meta_security:{captcha_token:r?.captchaToken}},xform:ae}),{data:l,error:c}=a;if(c)return this._returnResult({data:{user:null,session:null},error:c});if(!l||!l.session||!l.user){let u=new Ie;return this._returnResult({data:{user:null,session:null},error:u})}return l.session&&(await this._saveSession(l.session),await this._notifyAllSubscribers("SIGNED_IN",l.session)),this._returnResult({data:l,error:c})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOtp(e){var r,n,s,i,o;try{if("email"in e){let{email:a,options:l}=e,c=null,u=null;this.flowType==="pkce"&&([c,u]=await ut(this.storage,this.storageKey));let{error:d}=await S(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{email:a,data:(r=l?.data)!==null&&r!==void 0?r:{},create_user:(n=l?.shouldCreateUser)!==null&&n!==void 0?n:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},code_challenge:c,code_challenge_method:u},redirectTo:l?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:d})}if("phone"in e){let{phone:a,options:l}=e,{data:c,error:u}=await S(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{phone:a,data:(s=l?.data)!==null&&s!==void 0?s:{},create_user:(i=l?.shouldCreateUser)!==null&&i!==void 0?i:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},channel:(o=l?.channel)!==null&&o!==void 0?o:"sms"}});return this._returnResult({data:{user:null,session:null,messageId:c?.message_id},error:u})}throw new st("You must provide either an email or phone number.")}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async verifyOtp(e){var r,n;try{let s,i;"options"in e&&(s=(r=e.options)===null||r===void 0?void 0:r.redirectTo,i=(n=e.options)===null||n===void 0?void 0:n.captchaToken);let{data:o,error:a}=await S(this.fetch,"POST",`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:i}}),redirectTo:s,xform:ae});if(a)throw a;if(!o)throw new Error("An error occurred on token verification.");let l=o.session,c=o.user;return l?.access_token&&(await this._saveSession(l),await this._notifyAllSubscribers(e.type=="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(s){if(v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}}async signInWithSSO(e){var r,n,s,i,o;try{let a=null,l=null;this.flowType==="pkce"&&([a,l]=await ut(this.storage,this.storageKey));let c=await S(this.fetch,"POST",`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},"providerId"in e?{provider_id:e.providerId}:null),"domain"in e?{domain:e.domain}:null),{redirect_to:(n=(r=e.options)===null||r===void 0?void 0:r.redirectTo)!==null&&n!==void 0?n:void 0}),!((s=e?.options)===null||s===void 0)&&s.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:a,code_challenge_method:l}),headers:this.headers,xform:yc});return !((i=c.data)===null||i===void 0)&&i.url&&H()&&!(!((o=e.options)===null||o===void 0)&&o.skipBrowserRedirect)&&window.location.assign(c.data.url),this._returnResult(c)}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:null,error:a});throw a}}async reauthenticate(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;if(n)throw n;if(!r)throw new J;let{error:s}=await S(this.fetch,"GET",`${this.url}/reauthenticate`,{headers:this.headers,jwt:r.access_token});return this._returnResult({data:{user:null,session:null},error:s})})}catch(e){if(v(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){try{let r=`${this.url}/resend`;if("email"in e){let{email:n,type:s,options:i}=e,{error:o}=await S(this.fetch,"POST",r,{headers:this.headers,body:{email:n,type:s,gotrue_meta_security:{captcha_token:i?.captchaToken}},redirectTo:i?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:o})}else if("phone"in e){let{phone:n,type:s,options:i}=e,{data:o,error:a}=await S(this.fetch,"POST",r,{headers:this.headers,body:{phone:n,type:s,gotrue_meta_security:{captcha_token:i?.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:o?.message_id},error:a})}throw new st("You must provide either an email or phone number and a type")}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async getSession(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async r=>r))}async _acquireLock(e,r){this._debug("#_acquireLock","begin",e);try{if(this.lockAcquired){let n=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),s=(async()=>(await n,await r()))();return this.pendingInLock.push((async()=>{try{await s;}catch{}})()),s}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug("#_acquireLock","lock acquired for storage key",this.storageKey);try{this.lockAcquired=!0;let n=r();for(this.pendingInLock.push((async()=>{try{await n;}catch{}})()),await n;this.pendingInLock.length;){let s=[...this.pendingInLock];await Promise.all(s),this.pendingInLock.splice(0,s.length);}return await n}finally{this._debug("#_acquireLock","lock released for storage key",this.storageKey),this.lockAcquired=!1;}})}finally{this._debug("#_acquireLock","end");}}async _useSession(e){this._debug("#_useSession","begin");try{let r=await this.__loadSession();return await e(r)}finally{this._debug("#_useSession","end");}}async __loadSession(){this._debug("#__loadSession()","begin"),this.lockAcquired||this._debug("#__loadSession()","used outside of an acquired lock!",new Error().stack);try{let e=null,r=await He(this.storage,this.storageKey);if(this._debug("#getSession()","session from storage",r),r!==null&&(this._isValidSession(r)?e=r:(this._debug("#getSession()","session from storage is not valid"),await this._removeSession())),!e)return {data:{session:null},error:null};let n=e.expires_at?e.expires_at*1e3-Date.now()<Ln:!1;if(this._debug("#__loadSession()",`session has${n?"":" not"} expired`,"expires_at",e.expires_at),!n){if(this.userStorage){let o=await He(this.userStorage,this.storageKey+"-user");o?.user?e.user=o.user:e.user=Jn();}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){let o={value:this.suppressGetSessionWarning};e.user=_c(e.user,o),o.value&&(this.suppressGetSessionWarning=!0);}return {data:{session:e},error:null}}let{data:s,error:i}=await this._callRefreshToken(e.refresh_token);return i?this._returnResult({data:{session:null},error:i}):this._returnResult({data:{session:s},error:null})}finally{this._debug("#__loadSession()","end");}}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;let r=await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser());return r.data.user&&(this.suppressGetSessionWarning=true),r}async _getUser(e){try{return e?await S(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:e,xform:ke}):await this._useSession(async r=>{var n,s,i;let{data:o,error:a}=r;if(a)throw a;return !(!((n=o.session)===null||n===void 0)&&n.access_token)&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new J}:await S(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:(i=(s=o.session)===null||s===void 0?void 0:s.access_token)!==null&&i!==void 0?i:void 0,xform:ke})})}catch(r){if(v(r))return Ir(r)&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({data:{user:null},error:r});throw r}}async updateUser(e,r={}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,r))}async _updateUser(e,r={}){try{return await this._useSession(async n=>{let{data:s,error:i}=n;if(i)throw i;if(!s.session)throw new J;let o=s.session,a=null,l=null;this.flowType==="pkce"&&e.email!=null&&([a,l]=await ut(this.storage,this.storageKey));let{data:c,error:u}=await S(this.fetch,"PUT",`${this.url}/user`,{headers:this.headers,redirectTo:r?.emailRedirectTo,body:Object.assign(Object.assign({},e),{code_challenge:a,code_challenge_method:l}),jwt:o.access_token,xform:ke});if(u)throw u;return o.user=c.user,await this._saveSession(o),await this._notifyAllSubscribers("USER_UPDATED",o),this._returnResult({data:{user:o.user},error:null})})}catch(n){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(n))return this._returnResult({data:{user:null},error:n});throw n}}async setSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e))}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new J;let r=Date.now()/1e3,n=r,s=!0,i=null,{payload:o}=$r(e.access_token);if(o.exp&&(n=o.exp,s=n<=r),s){let{data:a,error:l}=await this._callRefreshToken(e.refresh_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});if(!a)return {data:{user:null,session:null},error:null};i=a;}else {let{data:a,error:l}=await this._getUser(e.access_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});i={access_token:e.access_token,refresh_token:e.refresh_token,user:a.user,token_type:"bearer",expires_in:n-r,expires_at:n},await this._saveSession(i),await this._notifyAllSubscribers("SIGNED_IN",i);}return this._returnResult({data:{user:i.user,session:i},error:null})}catch(r){if(v(r))return this._returnResult({data:{session:null,user:null},error:r});throw r}}async refreshSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e))}async _refreshSession(e){try{return await this._useSession(async r=>{var n;if(!e){let{data:o,error:a}=r;if(a)throw a;e=(n=o.session)!==null&&n!==void 0?n:void 0;}if(!e?.refresh_token)throw new J;let{data:s,error:i}=await this._callRefreshToken(e.refresh_token);return i?this._returnResult({data:{user:null,session:null},error:i}):s?this._returnResult({data:{user:s.user,session:s},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async _getSessionFromURL(e,r){try{if(!H())throw new it("No browser detected.");if(e.error||e.error_description||e.error_code)throw new it(e.error_description||"Error in URL with unspecified error_description",{error:e.error||"unspecified_error",code:e.error_code||"unspecified_code"});switch(r){case "implicit":if(this.flowType==="pkce")throw new Tr("Not a valid PKCE flow url.");break;case "pkce":if(this.flowType==="implicit")throw new it("Not a valid implicit grant flow url.");break;default:}if(r==="pkce"){if(this._debug("#_initialize()","begin","is PKCE flow",!0),!e.code)throw new Tr("No code detected.");let{data:b,error:w}=await this._exchangeCodeForSession(e.code);if(w)throw w;let I=new URL(window.location.href);return I.searchParams.delete("code"),window.history.replaceState(window.history.state,"",I.toString()),{data:{session:b.session,redirectType:null},error:null}}let{provider_token:n,provider_refresh_token:s,access_token:i,refresh_token:o,expires_in:a,expires_at:l,token_type:c}=e;if(!i||!a||!o||!c)throw new it("No session defined in URL");let u=Math.round(Date.now()/1e3),d=parseInt(a),p=u+d;l&&(p=parseInt(l));let h=p-u;h*1e3<=nt&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${h}s, should have been closer to ${d}s`);let f=p-d;u-f>=120?console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale",f,p,u):u-f<0&&console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew",f,p,u);let{data:m,error:_}=await this._getUser(i);if(_)throw _;let k={provider_token:n,provider_refresh_token:s,access_token:i,expires_in:d,expires_at:p,refresh_token:o,token_type:c,user:m.user};return window.location.hash="",this._debug("#_getSessionFromURL()","clearing window.location.hash"),this._returnResult({data:{session:k,redirectType:e.type},error:null})}catch(n){if(v(n))return this._returnResult({data:{session:null,redirectType:null},error:n});throw n}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl=="function"?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error_description)}async _isPKCECallback(e){let r=await He(this.storage,`${this.storageKey}-code-verifier`);return !!(e.code&&r)}async signOut(e={scope:"global"}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e))}async _signOut({scope:e}={scope:"global"}){return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i&&!Ir(i))return this._returnResult({error:i});let o=(n=s.session)===null||n===void 0?void 0:n.access_token;if(o){let{error:a}=await this.admin.signOut(o,e);if(a&&!(rc(a)&&(a.status===404||a.status===401||a.status===403)||Ir(a)))return this._returnResult({error:a})}return e!=="others"&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({error:null})})}onAuthStateChange(e){let r=cc(),n={id:r,callback:e,unsubscribe:()=>{this._debug("#unsubscribe()","state change callback with id removed",r),this.stateChangeEmitters.delete(r);}};return this._debug("#onAuthStateChange()","registered callback with id",r),this.stateChangeEmitters.set(r,n),(async()=>(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(r);})))(),{data:{subscription:n}}}async _emitInitialSession(e){return await this._useSession(async r=>{var n,s;try{let{data:{session:i},error:o}=r;if(o)throw o;await((n=this.stateChangeEmitters.get(e))===null||n===void 0?void 0:n.callback("INITIAL_SESSION",i)),this._debug("INITIAL_SESSION","callback id",e,"session",i);}catch(i){await((s=this.stateChangeEmitters.get(e))===null||s===void 0?void 0:s.callback("INITIAL_SESSION",null)),this._debug("INITIAL_SESSION","callback id",e,"error",i),Ir(i)?console.warn(i):console.error(i);}})}async resetPasswordForEmail(e,r={}){let n=null,s=null;this.flowType==="pkce"&&([n,s]=await ut(this.storage,this.storageKey,true));try{return await S(this.fetch,"POST",`${this.url}/recover`,{body:{email:e,code_challenge:n,code_challenge_method:s,gotrue_meta_security:{captcha_token:r.captchaToken}},headers:this.headers,redirectTo:r.redirectTo})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:null,error:i});throw i}}async getUserIdentities(){var e;try{let{data:r,error:n}=await this.getUser();if(n)throw n;return this._returnResult({data:{identities:(e=r.user.identities)!==null&&e!==void 0?e:[]},error:null})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async linkIdentity(e){return "token"in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){var r;try{let{data:n,error:s}=await this._useSession(async i=>{var o,a,l,c,u;let{data:d,error:p}=i;if(p)throw p;let h=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:(o=e.options)===null||o===void 0?void 0:o.redirectTo,scopes:(a=e.options)===null||a===void 0?void 0:a.scopes,queryParams:(l=e.options)===null||l===void 0?void 0:l.queryParams,skipBrowserRedirect:!0});return await S(this.fetch,"GET",h,{headers:this.headers,jwt:(u=(c=d.session)===null||c===void 0?void 0:c.access_token)!==null&&u!==void 0?u:void 0})});if(s)throw s;return H()&&!(!((r=e.options)===null||r===void 0)&&r.skipBrowserRedirect)&&window.location.assign(n?.url),this._returnResult({data:{provider:e.provider,url:n?.url},error:null})}catch(n){if(v(n))return this._returnResult({data:{provider:e.provider,url:null},error:n});throw n}}async linkIdentityIdToken(e){return await this._useSession(async r=>{var n;try{let{error:s,data:{session:i}}=r;if(s)throw s;let{options:o,provider:a,token:l,access_token:c,nonce:u}=e,d=await S(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:(n=i?.access_token)!==null&&n!==void 0?n:void 0,body:{provider:a,id_token:l,access_token:c,nonce:u,link_identity:!0,gotrue_meta_security:{captcha_token:o?.captchaToken}},xform:ae}),{data:p,error:h}=d;return h?this._returnResult({data:{user:null,session:null},error:h}):!p||!p.session||!p.user?this._returnResult({data:{user:null,session:null},error:new Ie}):(p.session&&(await this._saveSession(p.session),await this._notifyAllSubscribers("USER_UPDATED",p.session)),this._returnResult({data:p,error:h}))}catch(s){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}})}async unlinkIdentity(e){try{return await this._useSession(async r=>{var n,s;let{data:i,error:o}=r;if(o)throw o;return await S(this.fetch,"DELETE",`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:(s=(n=i.session)===null||n===void 0?void 0:n.access_token)!==null&&s!==void 0?s:void 0})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _refreshAccessToken(e){let r=`#_refreshAccessToken(${e.substring(0,5)}...)`;this._debug(r,"begin");try{let n=Date.now();return await hc(async s=>(s>0&&await pc(200*Math.pow(2,s-1)),this._debug(r,"refreshing attempt",s),await S(this.fetch,"POST",`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:ae})),(s,i)=>{let o=200*Math.pow(2,s);return i&&Bn(i)&&Date.now()+o-n<nt})}catch(n){if(this._debug(r,"error",n),v(n))return this._returnResult({data:{session:null,user:null},error:n});throw n}finally{this._debug(r,"end");}}_isValidSession(e){return typeof e=="object"&&e!==null&&"access_token"in e&&"refresh_token"in e&&"expires_at"in e}async _handleProviderSignIn(e,r){let n=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:r.redirectTo,scopes:r.scopes,queryParams:r.queryParams});return this._debug("#_handleProviderSignIn()","provider",e,"options",r,"url",n),H()&&!r.skipBrowserRedirect&&window.location.assign(n),{data:{provider:e,url:n},error:null}}async _recoverAndRefresh(){var e,r;let n="#_recoverAndRefresh()";this._debug(n,"begin");try{let s=await He(this.storage,this.storageKey);if(s&&this.userStorage){let o=await He(this.userStorage,this.storageKey+"-user");!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!o&&(o={user:s.user},await ct(this.userStorage,this.storageKey+"-user",o)),s.user=(e=o?.user)!==null&&e!==void 0?e:Jn();}else if(s&&!s.user&&!s.user){let o=await He(this.storage,this.storageKey+"-user");o&&o?.user?(s.user=o.user,await z(this.storage,this.storageKey+"-user"),await ct(this.storage,this.storageKey,s)):s.user=Jn();}if(this._debug(n,"session from storage",s),!this._isValidSession(s)){this._debug(n,"session is not valid"),s!==null&&await this._removeSession();return}let i=((r=s.expires_at)!==null&&r!==void 0?r:1/0)*1e3-Date.now()<Ln;if(this._debug(n,`session has${i?"":" not"} expired with margin of ${Ln}s`),i){if(this.autoRefreshToken&&s.refresh_token){let{error:o}=await this._callRefreshToken(s.refresh_token);o&&(console.error(o),Bn(o)||(this._debug(n,"refresh failed with a non-retryable error, removing the session",o),await this._removeSession()));}}else if(s.user&&s.user.__isUserNotAvailableProxy===!0)try{let{data:o,error:a}=await this._getUser(s.access_token);!a&&o?.user?(s.user=o.user,await this._saveSession(s),await this._notifyAllSubscribers("SIGNED_IN",s)):this._debug(n,"could not get user data, skipping SIGNED_IN notification");}catch(o){console.error("Error getting user data:",o),this._debug(n,"error getting user data, skipping SIGNED_IN notification",o);}else await this._notifyAllSubscribers("SIGNED_IN",s);}catch(s){this._debug(n,"error",s),console.error(s);return}finally{this._debug(n,"end");}}async _callRefreshToken(e){var r,n;if(!e)throw new J;if(this.refreshingDeferred)return this.refreshingDeferred.promise;let s=`#_callRefreshToken(${e.substring(0,5)}...)`;this._debug(s,"begin");try{this.refreshingDeferred=new Or;let{data:i,error:o}=await this._refreshAccessToken(e);if(o)throw o;if(!i.session)throw new J;await this._saveSession(i.session),await this._notifyAllSubscribers("TOKEN_REFRESHED",i.session);let a={data:i.session,error:null};return this.refreshingDeferred.resolve(a),a}catch(i){if(this._debug(s,"error",i),v(i)){let o={data:null,error:i};return Bn(i)||await this._removeSession(),(r=this.refreshingDeferred)===null||r===void 0||r.resolve(o),o}throw (n=this.refreshingDeferred)===null||n===void 0||n.reject(i),i}finally{this.refreshingDeferred=null,this._debug(s,"end");}}async _notifyAllSubscribers(e,r,n=true){let s=`#_notifyAllSubscribers(${e})`;this._debug(s,"begin",r,`broadcast = ${n}`);try{this.broadcastChannel&&n&&this.broadcastChannel.postMessage({event:e,session:r});let i=[],o=Array.from(this.stateChangeEmitters.values()).map(async a=>{try{await a.callback(e,r);}catch(l){i.push(l);}});if(await Promise.all(o),i.length>0){for(let a=0;a<i.length;a+=1)console.error(i[a]);throw i[0]}}finally{this._debug(s,"end");}}async _saveSession(e){this._debug("#_saveSession()",e),this.suppressGetSessionWarning=true,await z(this.storage,`${this.storageKey}-code-verifier`);let r=Object.assign({},e),n=r.user&&r.user.__isUserNotAvailableProxy===true;if(this.userStorage){!n&&r.user&&await ct(this.userStorage,this.storageKey+"-user",{user:r.user});let s=Object.assign({},r);delete s.user;let i=Ei(s);await ct(this.storage,this.storageKey,i);}else {let s=Ei(r);await ct(this.storage,this.storageKey,s);}}async _removeSession(){this._debug("#_removeSession()"),this.suppressGetSessionWarning=false,await z(this.storage,this.storageKey),await z(this.storage,this.storageKey+"-code-verifier"),await z(this.storage,this.storageKey+"-user"),this.userStorage&&await z(this.userStorage,this.storageKey+"-user"),await this._notifyAllSubscribers("SIGNED_OUT",null);}_removeVisibilityChangedCallback(){this._debug("#_removeVisibilityChangedCallback()");let e=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{e&&H()&&window?.removeEventListener&&window.removeEventListener("visibilitychange",e);}catch(r){console.error("removing visibilitychange callback failed",r);}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug("#_startAutoRefresh()");let e=setInterval(()=>this._autoRefreshTokenTick(),nt);this.autoRefreshTicker=e,e&&typeof e=="object"&&typeof e.unref=="function"?e.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(e);let r=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick();},0);this.autoRefreshTickTimeout=r,r&&typeof r=="object"&&typeof r.unref=="function"?r.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(r);}async _stopAutoRefresh(){this._debug("#_stopAutoRefresh()");let e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);let r=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,r&&clearTimeout(r);}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh();}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh();}async _autoRefreshTokenTick(){this._debug("#_autoRefreshTokenTick()","begin");try{await this._acquireLock(0,async()=>{try{let e=Date.now();try{return await this._useSession(async r=>{let{data:{session:n}}=r;if(!n||!n.refresh_token||!n.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}let s=Math.floor((n.expires_at*1e3-e)/nt);this._debug("#_autoRefreshTokenTick()",`access token expires in ${s} ticks, a tick lasts ${nt}ms, refresh threshold is ${Dn} ticks`),s<=Dn&&await this._callRefreshToken(n.refresh_token);})}catch(r){console.error("Auto refresh tick failed with error. This is likely a transient error.",r);}}finally{this._debug("#_autoRefreshTokenTick()","end");}});}catch(e){if(e.isAcquireTimeout||e instanceof Nr)this._debug("auto refresh token tick lock not available");else throw e}}async _handleVisibilityChange(){if(this._debug("#_handleVisibilityChange()"),!H()||!window?.addEventListener)return this.autoRefreshToken&&this.startAutoRefresh(),false;try{this.visibilityChangedCallback=async()=>{try{await this._onVisibilityChanged(!1);}catch(e){this._debug("#visibilityChangedCallback","error",e);}},window?.addEventListener("visibilitychange",this.visibilityChangedCallback),await this._onVisibilityChanged(!0);}catch(e){console.error("_handleVisibilityChange",e);}}async _onVisibilityChanged(e){let r=`#_onVisibilityChanged(${e})`;this._debug(r,"visibilityState",document.visibilityState),document.visibilityState==="visible"?(this.autoRefreshToken&&this._startAutoRefresh(),e||(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{if(document.visibilityState!=="visible"){this._debug(r,"acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting");return}await this._recoverAndRefresh();}))):document.visibilityState==="hidden"&&this.autoRefreshToken&&this._stopAutoRefresh();}async _getUrlForProvider(e,r,n){let s=[`provider=${encodeURIComponent(r)}`];if(n?.redirectTo&&s.push(`redirect_to=${encodeURIComponent(n.redirectTo)}`),n?.scopes&&s.push(`scopes=${encodeURIComponent(n.scopes)}`),this.flowType==="pkce"){let[i,o]=await ut(this.storage,this.storageKey),a=new URLSearchParams({code_challenge:`${encodeURIComponent(i)}`,code_challenge_method:`${encodeURIComponent(o)}`});s.push(a.toString());}if(n?.queryParams){let i=new URLSearchParams(n.queryParams);s.push(i.toString());}return n?.skipBrowserRedirect&&s.push(`skip_http_redirect=${n.skipBrowserRedirect}`),`${e}?${s.join("&")}`}async _unenroll(e){try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;return i?this._returnResult({data:null,error:i}):await S(this.fetch,"DELETE",`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _enroll(e){try{return await this._useSession(async r=>{var n,s;let{data:i,error:o}=r;if(o)return this._returnResult({data:null,error:o});let a=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType==="phone"?{phone:e.phone}:e.factorType==="totp"?{issuer:e.issuer}:{}),{data:l,error:c}=await S(this.fetch,"POST",`${this.url}/factors`,{body:a,headers:this.headers,jwt:(n=i?.session)===null||n===void 0?void 0:n.access_token});return c?this._returnResult({data:null,error:c}):(e.factorType==="totp"&&l.type==="totp"&&(!((s=l?.totp)===null||s===void 0)&&s.qr_code)&&(l.totp.qr_code=`data:image/svg+xml;utf-8,${l.totp.qr_code}`),this._returnResult({data:l,error:null}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _verify(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i)return this._returnResult({data:null,error:i});let o=Object.assign({challenge_id:e.challengeId},"webauthn"in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type==="create"?Nc(e.webauthn.credential_response):jc(e.webauthn.credential_response)})}:{code:e.code}),{data:a,error:l}=await S(this.fetch,"POST",`${this.url}/factors/${e.factorId}/verify`,{body:o,headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token});return l?this._returnResult({data:null,error:l}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+a.expires_in},a)),await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED",a),this._returnResult({data:a,error:l}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challenge(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i)return this._returnResult({data:null,error:i});let o=await S(this.fetch,"POST",`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token});if(o.error)return o;let{data:a}=o;if(a.type!=="webauthn")return {data:a,error:null};switch(a.webauthn.type){case "create":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:Oc(a.webauthn.credential_options.publicKey)})})}),error:null};case "request":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:$c(a.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challengeAndVerify(e){let{data:r,error:n}=await this._challenge({factorId:e.factorId});return n?this._returnResult({data:null,error:n}):await this._verify({factorId:e.factorId,challengeId:r.id,code:e.code})}async _listFactors(){var e;let{data:{user:r},error:n}=await this.getUser();if(n)return {data:null,error:n};let s={all:[],phone:[],totp:[],webauthn:[]};for(let i of (e=r?.factors)!==null&&e!==void 0?e:[])s.all.push(i),i.status==="verified"&&s[i.factor_type].push(i);return {data:s,error:null}}async _getAuthenticatorAssuranceLevel(e){var r,n,s,i;if(e)try{let{payload:h}=$r(e),f=null;h.aal&&(f=h.aal);let m=f,{data:{user:_},error:k}=await this.getUser(e);if(k)return this._returnResult({data:null,error:k});((n=(r=_?.factors)===null||r===void 0?void 0:r.filter(I=>I.status==="verified"))!==null&&n!==void 0?n:[]).length>0&&(m="aal2");let w=h.amr||[];return {data:{currentLevel:f,nextLevel:m,currentAuthenticationMethods:w},error:null}}catch(h){if(v(h))return this._returnResult({data:null,error:h});throw h}let{data:{session:o},error:a}=await this.getSession();if(a)return this._returnResult({data:null,error:a});if(!o)return {data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};let{payload:l}=$r(o.access_token),c=null;l.aal&&(c=l.aal);let u=c;((i=(s=o.user.factors)===null||s===void 0?void 0:s.filter(h=>h.status==="verified"))!==null&&i!==void 0?i:[]).length>0&&(u="aal2");let p=l.amr||[];return {data:{currentLevel:c,nextLevel:u,currentAuthenticationMethods:p},error:null}}async _getAuthorizationDetails(e){try{return await this._useSession(async r=>{let{data:{session:n},error:s}=r;return s?this._returnResult({data:null,error:s}):n?await S(this.fetch,"GET",`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:n.access_token,xform:i=>({data:i,error:null})}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _approveAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:s},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!s)return this._returnResult({data:null,error:new J});let o=await S(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:s.access_token,body:{action:"approve"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&H()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _denyAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:s},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!s)return this._returnResult({data:null,error:new J});let o=await S(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:s.access_token,body:{action:"deny"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&H()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _listOAuthGrants(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;return n?this._returnResult({data:null,error:n}):r?await S(this.fetch,"GET",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:r.access_token,xform:s=>({data:s,error:null})}):this._returnResult({data:null,error:new J})})}catch(e){if(v(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async r=>{let{data:{session:n},error:s}=r;return s?this._returnResult({data:null,error:s}):n?(await S(this.fetch,"DELETE",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async fetchJwk(e,r={keys:[]}){let n=r.keys.find(a=>a.kid===e);if(n)return n;let s=Date.now();if(n=this.jwks.keys.find(a=>a.kid===e),n&&this.jwks_cached_at+tc>s)return n;let{data:i,error:o}=await S(this.fetch,"GET",`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(o)throw o;return !i.keys||i.keys.length===0||(this.jwks=i,this.jwks_cached_at=s,n=i.keys.find(a=>a.kid===e),!n)?null:n}async getClaims(e,r={}){try{let n=e;if(!n){let{data:h,error:f}=await this.getSession();if(f||!h.session)return this._returnResult({data:null,error:f});n=h.session.access_token;}let{header:s,payload:i,signature:o,raw:{header:a,payload:l}}=$r(n);r?.allowExpired||gc(i.exp);let c=!s.alg||s.alg.startsWith("HS")||!s.kid||!("crypto"in globalThis&&"subtle"in globalThis.crypto)?null:await this.fetchJwk(s.kid,r?.keys?{keys:r.keys}:r?.jwks);if(!c){let{error:h}=await this.getUser(n);if(h)throw h;return {data:{claims:i,header:s,signature:o},error:null}}let u=mc(s.alg),d=await crypto.subtle.importKey("jwk",c,u,!0,["verify"]);if(!await crypto.subtle.verify(u,d,o,ac(`${a}.${l}`)))throw new ot("Invalid JWT signature");return {data:{claims:i,header:s,signature:o},error:null}}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}};Xn.nextInstanceID={};Li=Xn;});var Lc=E(()=>{Vn();});var Vg,Mi,Uc=E(()=>{Ui();Vg=Li,Mi=Vg;});var Wi=E(()=>{Vn();Ui();Lc();Uc();Ti();at();Oi();});function Lr(t){"@babel/helpers - typeof";return Lr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Lr(t)}function tm(t,e){if(Lr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Lr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function rm(t){var e=tm(t,"string");return Lr(e)=="symbol"?e:e+""}function nm(t,e,r){return (e=rm(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function Mc(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function W(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Mc(Object(r),true).forEach(function(n){nm(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Mc(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function am(t){return t.endsWith("/")?t:t+"/"}function lm(t,e){var r,n;let{db:s,auth:i,realtime:o,global:a}=t,{db:l,auth:c,realtime:u,global:d}=e,p={db:W(W({},l),s),auth:W(W({},c),i),realtime:W(W({},u),o),storage:{},global:W(W(W({},d),a),{},{headers:W(W({},(r=d?.headers)!==null&&r!==void 0?r:{}),(n=a?.headers)!==null&&n!==void 0?n:{})}),accessToken:async()=>""};return t.accessToken?p.accessToken=t.accessToken:delete p.accessToken,p}function cm(t){let e=t?.trim();if(!e)throw new Error("supabaseUrl is required.");if(!e.match(/^https?:\/\//i))throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(am(e))}catch{throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}function pm(){if(typeof window<"u")return false;let t=globalThis.process;if(!t)return false;let e=t.version;if(e==null)return false;let r=e.match(/^v(\d+)\./);return r?parseInt(r[1],10)<=18:false}var Gg,Dr,Yg,Xg,Zg,Qg,em,sm,im,om,um,dm,Vt,Zn=E(()=>{fl();Sl();wi();Yl();Wi();wi();Wi();Gg="2.103.2",Dr="";typeof Deno<"u"?Dr="deno":typeof document<"u"?Dr="web":typeof navigator<"u"&&navigator.product==="ReactNative"?Dr="react-native":Dr="node";Yg={"X-Client-Info":`supabase-js-${Dr}/${Gg}`},Xg={headers:Yg},Zg={schema:"public"},Qg={autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,flowType:"implicit"},em={};sm=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),im=()=>Headers,om=(t,e,r)=>{let n=sm(r),s=im();return async(i,o)=>{var a;let l=(a=await e())!==null&&a!==void 0?a:t,c=new s(o?.headers);return c.has("apikey")||c.set("apikey",t),c.has("Authorization")||c.set("Authorization",`Bearer ${l}`),n(i,W(W({},o),{},{headers:c}))}};um=class extends Mi{constructor(t){super(t);}},dm=class{constructor(t,e,r){var n,s;this.supabaseUrl=t,this.supabaseKey=e;let i=cm(t);if(!e)throw new Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",i),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",i),this.storageUrl=new URL("storage/v1",i),this.functionsUrl=new URL("functions/v1",i);let o=`sb-${i.hostname.split(".")[0]}-auth-token`,a={db:Zg,realtime:em,auth:W(W({},Qg),{},{storageKey:o}),global:Xg},l=lm(r??{},a);if(this.storageKey=(n=l.auth.storageKey)!==null&&n!==void 0?n:"",this.headers=(s=l.global.headers)!==null&&s!==void 0?s:{},l.accessToken)this.accessToken=l.accessToken,this.auth=new Proxy({},{get:(u,d)=>{throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(d)} is not possible`)}});else {var c;this.auth=this._initSupabaseAuthClient((c=l.auth)!==null&&c!==void 0?c:{},this.headers,l.global.fetch);}this.fetch=om(e,this._getAccessToken.bind(this),l.global.fetch),this.realtime=this._initRealtimeClient(W({headers:this.headers,accessToken:this._getAccessToken.bind(this)},l.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(u=>this.realtime.setAuth(u)).catch(u=>console.warn("Failed to set initial Realtime auth token:",u)),this.rest=new bl(new URL("rest/v1",i).href,{headers:this.headers,schema:l.db.schema,fetch:this.fetch,timeout:l.db.timeout,urlLengthLimit:l.db.urlLengthLimit}),this.storage=new Gl(this.storageUrl.href,this.headers,this.fetch,r?.storage),l.accessToken||this._listenForAuthEvents();}get functions(){return new hr(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(t){return this.rest.from(t)}schema(t){return this.rest.schema(t)}rpc(t,e={},r={head:false,get:false,count:void 0}){return this.rest.rpc(t,e,r)}channel(t,e={config:{}}){return this.realtime.channel(t,e)}getChannels(){return this.realtime.getChannels()}removeChannel(t){return this.realtime.removeChannel(t)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var t=this,e,r;if(t.accessToken)return await t.accessToken();let{data:n}=await t.auth.getSession();return (e=(r=n.session)===null||r===void 0?void 0:r.access_token)!==null&&e!==void 0?e:t.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:s,storageKey:i,flowType:o,lock:a,debug:l,throwOnError:c},u,d){let p={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new um({url:this.authUrl.href,headers:W(W({},p),u),storageKey:i,autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:s,flowType:o,lock:a,debug:l,throwOnError:c,fetch:d,hasCustomAuthorizationHeader:Object.keys(this.headers).some(h=>h.toLowerCase()==="authorization")})}_initRealtimeClient(t){return new Ft(this.realtimeUrl.href,W(W({},t),{},{params:W(W({},{apikey:this.supabaseKey}),t?.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((t,e)=>{this._handleTokenChanged(t,"CLIENT",e?.access_token);})}_handleTokenChanged(t,e,r){(t==="TOKEN_REFRESHED"||t==="SIGNED_IN")&&this.changedAccessToken!==r?(this.changedAccessToken=r,this.realtime.setAuth(r)):t==="SIGNED_OUT"&&(this.realtime.setAuth(),e=="STORAGE"&&this.auth.signOut(),this.changedAccessToken=void 0);}},Vt=(t,e,r)=>new dm(t,e,r);pm()&&console.warn("\u26A0\uFE0F Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217");});async function Fc(t){let e=Gt(t.env),r=fm(),n=Vt(e.supabaseUrl,e.supabaseAnonKey,{auth:{persistSession:true,detectSessionInUrl:false,flowType:"pkce",storage:r}}),s=await gm({timeoutMs:t.timeoutMs??300*1e3}),i=s.redirectUri;try{let{data:o,error:a}=await n.auth.signInWithOAuth({provider:"github",options:{redirectTo:i,skipBrowserRedirect:!0}});if(a||!o.url)throw new ve("oauth_start_failed",a?.message??"Supabase did not return an OAuth URL.");t.onOpen?.({url:o.url,redirectUri:i}),await t.openUrl(o.url);let l=await s.waitForCode(),{data:c,error:u}=await n.auth.exchangeCodeForSession(l);if(u||!c.session?.access_token||!c.session.refresh_token)throw new ve("oauth_exchange_failed",u?.message??"Supabase did not return a complete session.");let d={access_token:c.session.access_token,refresh_token:c.session.refresh_token,expires_at:c.session.expires_at??Math.floor(Date.now()/1e3)+(c.session.expires_in??3600),expires_in:c.session.expires_in??void 0,token_type:c.session.token_type,user:{id:c.session.user.id,email:c.session.user.email??void 0}},p=Hc(e.supabaseUrl);return await et(t.env).set(p,JSON.stringify(d)),{session:d,account:p}}finally{await s.close();}}async function Bi(t){let e=Gt(t.env),r=await Wc(t.fetch,e,"auth-device-start",{});t.onPending?.({userCode:r.user_code,verificationUri:r.verification_uri,interval:r.interval});let n=Date.now()+r.expires_in*1e3,s=r.interval;for(;Date.now()<=n;){await t.sleep(s*1e3);let i=await Wc(t.fetch,e,"auth-device-token",{device_code:r.device_code},{acceptError:true});if("access_token"in i){let o=Hc(e.supabaseUrl);return await et(t.env).set(o,JSON.stringify(i)),{session:i,account:o}}switch(i.error){case "authorization_pending":s=i.interval??s;break;case "slow_down":s=i.interval??Math.min(s+5,30);break;case "expired_token":throw new be("expired_token","The device login code expired.");case "access_denied":throw new be("access_denied","The device login request was denied.");default:throw new be(i.error,`Device login failed: ${i.error}`)}}throw new be("expired_token","The device login code expired.")}function Gt(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL??"",r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY??"";if(!e||!r)throw new be("missing_supabase_config","Missing SUPABASE_URL/SUPABASE_ANON_KEY for CLI login.");return {supabaseUrl:e,supabaseAnonKey:r}}function Hc(t){let e=new URL(t).hostname;return `sb-${e.endsWith(".supabase.co")?e.slice(0,-12):e}-auth-token`}async function Wc(t,e,r,n,s={}){let i=await t(`${e.supabaseUrl}/functions/v1/${r}`,{method:"POST",headers:{"content-type":"application/json",apikey:e.supabaseAnonKey},body:JSON.stringify(n)}),o=await i.json().catch(()=>({}));if(!i.ok&&!s.acceptError)throw new be(o.error??"request_failed");return o}function fm(){let t=new Map;return {getItem:e=>t.get(e)??null,setItem:(e,r)=>{t.set(e,r);},removeItem:e=>{t.delete(e);}}}async function gm(t){let e=null,r=null,n=false,s=new Promise((l,c)=>{e=l,r=c;}),i=createServer((l,c)=>{mm(l,c,(u,d)=>{n||(n=true,u?r?.(u):e?.(d));});});await new Promise((l,c)=>{i.once("error",c),i.listen(0,"127.0.0.1",()=>{i.off("error",c),l();});});let o=i.address();if(!o||typeof o=="string")throw await Bc(i),new ve("callback_server_failed");let a=setTimeout(()=>{n||(n=true,r?.(new ve("oauth_timeout","Browser login timed out.")));},t.timeoutMs);return {redirectUri:`http://127.0.0.1:${o.port}/auth/callback`,waitForCode:()=>s,close:async()=>{clearTimeout(a),await Bc(i);}}}function mm(t,e,r){let n=t.headers.host??"127.0.0.1",s=new URL(t.url??"/",`http://${n}`);if(s.pathname!=="/auth/callback"){e.writeHead(404,{"content-type":"text/plain"}),e.end("Not found");return}let i=s.searchParams.get("error")??s.searchParams.get("error_description"),o=s.searchParams.get("code");if(i){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login failed. You can close this window."),r(new ve("oauth_denied",i),"");return}if(!o){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login could not verify this browser response."),r(new ve("oauth_invalid_callback"),"");return}e.writeHead(200,{"content-type":"text/html; charset=utf-8"}),e.end("<!doctype html><title>Pathrule CLI</title><p>Pathrule CLI is signed in. You can close this window.</p>"),r(null,o);}async function Bc(t){t.listening&&await new Promise(e=>t.close(()=>e()));}var be,ve,Qn=E(()=>{si();Zn();be=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="DeviceLoginError";}code},ve=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BrowserLoginError";}code};});async function Sm(t){await new Promise(e=>setTimeout(e,t));}async function Cm(t){try{await mkdir(dirname(t),{recursive:!0,mode:448}),await chmod(dirname(t),448).catch(()=>{});let e=await open(t,"wx",384);await e.writeFile(`${process.pid}:${Date.now()}
48
- `,"utf8"),await e.close();let r=!1;return async()=>{r||(r=!0,await rm$1(t,{force:!0}).catch(()=>{}));}}catch(e){if(e.code==="EEXIST")return null;throw e}}async function Em(t,e){try{let{stat:r}=await import('fs/promises'),n=await r(t);Date.now()-n.mtimeMs>e&&await rm$1(t,{force:!0});}catch{}}async function Jc(t,e={}){let r=e.timeoutMs??km,n=e.staleMs??bm,s=e.lockFile??A(e.env).tokenLockFile,i=Date.now()+r;for(;Date.now()<=i;){let o=await Cm(s);if(o)try{return await t()}finally{await o();}await Em(s,n),await Sm(vm);}throw new Fi}var km,bm,vm,Fi,Kc=E(()=>{V();km=15e3,bm=45e3,vm=100,Fi=class extends Error{constructor(){super("token_refresh_lock_timeout"),this.name="TokenRefreshLockTimeoutError";}};});async function pe(t,e=process.env){let r=Qe(t,0,e);try{let n=await readFile(r.userConfigFile,"utf8"),s=JSON.parse(n);if(s&&typeof s=="object"&&s.schema_version===1)return s}catch(n){if(n.code!=="ENOENT")throw n}return {schema_version:1}}async function es(t,e,r=process.env){let n=Qe(t,0,r);await Xc(n.userConfigFile,{...e,schema_version:1});}async function he(t,e,r=process.env){let s={...await pe(t,r),...e,schema_version:1};return await es(t,s,r),s}async function Gc(t,e=process.env){let r=A(e),n={user_id:t,updated_at:new Date().toISOString()};await Xc(r.activeUserFile,n);}async function Yc(t=process.env){await rm$1(A(t).activeUserFile,{force:true});}async function Xc(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:D}),await chmod(r,D).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}var gt=E(()=>{V();});function Zc(t){return t.startsWith($m)&&t.endsWith(Nm)}async function Se(t=process.env){let e=await Qc(t);return !e||!eu(e.session)?e:Dm(e,t)}async function Qc(t=process.env){let r=await et(t).findAll();for(let n of r)if(Zc(n.account))try{let s=JSON.parse(n.value);if(!s.access_token||!s.refresh_token||!s.user?.id)continue;return {account:n.account,session:s}}catch{}return null}function eu(t){return t.expires_at<=Math.floor(Date.now()/1e3)+jm}async function Dm(t,e){return Jc(async()=>{let r=await Qc(e);if(r&&!eu(r.session))return r;let n=Lm(e),s=Vt(n.supabaseUrl,n.supabaseAnonKey,{auth:{persistSession:!1}}),{data:i,error:o}=await s.auth.refreshSession({refresh_token:t.session.refresh_token});if(o)throw new Ur("refresh_failed",o.message);if(!i.session?.access_token||!i.session.refresh_token||!i.session.user?.id)throw new Ur("refresh_failed","Supabase did not return a complete session.");let a={access_token:i.session.access_token,refresh_token:i.session.refresh_token,expires_at:i.session.expires_at??Math.floor(Date.now()/1e3)+(i.session.expires_in??3600),user:{id:i.session.user.id,email:i.session.user.email??void 0}};return await et(e).set(t.account,JSON.stringify(a)),{account:t.account,session:a}},{env:e})}function Lm(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL??"",r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY??"";if(!e||!r)throw new Ur("missing_supabase_config","Missing SUPABASE_URL/SUPABASE_ANON_KEY for CLI session refresh.");return {supabaseUrl:e,supabaseAnonKey:r}}async function Hi(t=process.env){let e=et(t),r=await e.findAll(),n=new Set,s=0;for(let o of r)if(Zc(o.account)){try{let a=JSON.parse(o.value);a.user?.id&&n.add(a.user.id);}catch{}await e.delete(o.account)&&(s+=1);}let i=0;for(let o of n)await rm$1(Qe(o,0,t).userCacheDir,{recursive:true,force:true}),i+=1;return await Yc(t),{removed_sessions:s,purged_user_caches:i}}var $m,Nm,jm,Ur,Mr=E(()=>{Kc();gt();si();V();Zn();$m="sb-",Nm="-auth-token",jm=60,Ur=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliSessionError";}code};});async function R(t=process.env){let e=await Se(t);if(!e)throw new Yt("not_authenticated","Pathrule CLI is not signed in.");let r=Gt(t);return {session:e.session,supabase:Vt(r.supabaseUrl,r.supabaseAnonKey,{auth:{persistSession:false},global:{headers:{Authorization:`Bearer ${e.session.access_token}`}}})}}var Yt,q=E(()=>{Zn();Qn();Mr();Yt=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliAuthError";}code};});var gu={};ah(gu,{cliOrgWebUrl:()=>Z,currentCliOrg:()=>j,listCliOrgs:()=>fe,useCliOrg:()=>ns});async function fe(t){let{session:e,supabase:r}=await R(t),{data:n,error:s}=await r.from("organization_members").select("role, organization:organizations ( id, name, slug, plan, subscription_status, trial_status, trial_ends_at, seat_count, paid_extra_seats, trial_seat_cap, beta_referral_credit_cents, beta_referral_activated_count, beta_referral_founder )").eq("user_id",e.user.id);if(s)throw s;let i=await pe(e.user.id,t),o=[],a=new Set;for(let l of n??[]){let c=l.organization,u=Array.isArray(c)?c[0]:c;if(!u||a.has(u.id))continue;a.add(u.id);let d=u.subscription_status?String(u.subscription_status):null,p=u.trial_status?String(u.trial_status):null,h=u.trial_ends_at?String(u.trial_ends_at):null,f=e_(d,p,h);o.push({id:u.id,name:u.name,slug:u.slug,plan:u.plan,subscription_status:d,trial_status:p,trial_ends_at:h,seat_count:qe(u.seat_count),paid_extra_seats:qe(u.paid_extra_seats),trial_seat_cap:qe(u.trial_seat_cap),beta_referral_credit_cents:qe(u.beta_referral_credit_cents)??0,beta_referral_activated_count:qe(u.beta_referral_activated_count)??0,beta_referral_founder:u.beta_referral_founder===true,role:l.role,current:i.current_org_id===u.id,billing:{status:d,freeze_kind:f.kind,freeze_reason:f.reason,seats:{active:qe(u.seat_count),trial_cap:qe(u.trial_seat_cap),paid_extra:qe(u.paid_extra_seats)}}});}if(!i.current_org_id&&o.length===1){let l=o[0];l&&(o[0]={...l,current:true});}return o}async function j(t){let e=await fe(t);return e.find(r=>r.current)??e[0]??null}async function ns(t,e){let{session:r}=await R(e),s=(await fe(e)).find(i=>i.id===t||i.slug===t);if(!s)throw new Error("org_not_found");return await he(r.user.id,{current_org_id:s.id},e),await Gc(r.user.id,e),{...s,current:true}}function Z(t,e,r="home"){let s=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/org/${encodeURIComponent(t.slug)}`;return r==="home"?s:r==="billing"?`${s}/billing`:`${s}/settings${r==="members"?"/members":""}`}function qe(t){return typeof t=="number"&&Number.isFinite(t)?t:null}function e_(t,e,r){return t==="unpaid"||t==="past_due"?{kind:"subscription",reason:"unpaid"}:t==="canceled"?e==="expired"||r&&new Date(r).getTime()<Date.now()?{kind:"subscription",reason:"trial_expired"}:{kind:"subscription",reason:"canceled"}:{kind:"none",reason:null}}var Ce=E(()=>{gt();q();});ch(wa());function ya(t,e,r){return `${e}/.claude.json`}var lr="pathrule";function Bs(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Claude config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("Claude config `mcpServers` must be an object");return e}function ka(t,e){let r=Bs(t),n={...r.mcpServers??{}},s=!(lr in n);return n[lr]=e,{config:{...r,mcpServers:n},wasNew:s}}function ba(t){let e=Bs(t);if(!e.mcpServers||!(lr in e.mcpServers))return {config:e,wasPresent:false};let{[lr]:r,...n}=e.mcpServers;return {config:{...e,mcpServers:n},wasPresent:true}}function va(t){try{return Bs(t).mcpServers?.[lr]??null}catch{return null}}function B(t){return t.code==="PGRST116"?{code:"not_found",message:t.message}:t.code==="42501"?{code:"permission_denied",message:t.message}:{code:"upstream_error",message:t.message}}async function At(t,e){let{data:r,error:n}=await t.rpc("pathrule_check_content_dedup",{p_workspace_id:e.workspaceId,p_kind:e.kind,p_node_id:e.kind==="memory"?e.nodeId??null:null,p_candidate:e.candidate,p_threshold:e.threshold??.65,p_max_similar:e.maxSimilar??5,p_exclude_id:e.excludeId??null});if(n)return {ok:false,error:n.message};let s=r??{duplicate:null,similar:[]};return {ok:true,data:{duplicate:s.duplicate,similar:(s.similar??[]).map(i=>({id:i.id,title:i.title,similarity:typeof i.similarity=="string"?Number(i.similarity):i.similarity}))}}}function Sa(t){return t.code!=="23505"?false:!!t.message?.includes("skills_workspace_slug_unique")}async function Fs(t,e,r){let{data:n,error:s}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(s)return {error:s.message};if(n)return n;let{data:i,error:o}=await t.from("nodes").insert({workspace_id:e,parent_id:null,name:r,type:"folder",relative_path:"/",order_index:0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(o||!i){if(o?.code==="23505"){let{data:a}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(a)return a}return {error:o?.message??"Root node insert failed"}}return i}function Ca(t){let e=t.trim();if(e===""||e==="/")return "/";let n=(e.startsWith("/")?e:"/"+e).replace(/\/+/g,"/");return n==="/"?"/":n.replace(/\/$/,"")}function dh(t,e){return (t==="/"?"":t)+"/"+e.trim()}function ph(t){let e=t.split("/").filter(n=>n.length>0),r=e[e.length-1]??"";return /\.[A-Za-z0-9]{1,8}$/.test(r)?"file":"folder"}async function It(t,e,r){let{data:n,error:s}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path",r).maybeSingle();return s?{error:s.message}:n??null}async function hh(t,e,r,n){let s=Ca(r);if(s==="/"){let d=await It(t,e,"/");return d&&!("error"in d)?d:{error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."}}let i=await It(t,e,s);if(i&&!("error"in i)||i&&"error"in i)return i;let o=await It(t,e,"/");if(!o)return {error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."};if("error"in o)return o;let a=s.split("/").filter(d=>d.length>0),l=ph(s),c=o,u="";for(let d=0;d<a.length;d+=1){let p=a[d];u+="/"+p;let f=d===a.length-1?l:"folder",m=await It(t,e,u);if(m&&"error"in m)return m;if(m){c=m;continue}let{count:_}=await t.from("nodes").select("*",{count:"exact",head:true}).eq("workspace_id",e).eq("parent_id",c.id),{data:k,error:b}=await t.from("nodes").insert({workspace_id:e,parent_id:c.id,name:p,type:f,relative_path:dh(c.relative_path,p),order_index:_??0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(b||!k){if(b?.code==="23505"){let w=await It(t,e,u);if(w&&!("error"in w)){c=w;continue}}return {error:b?.message??`Insert failed at ${u}`}}c=k;}return c}async function Ot(t,e,r,n){let s=Ca(r),i=await It(t,e,"/");if(i&&"error"in i)return i;if(!i){let{data:o,error:a}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(a)return {error:a.message};let l=o?.name??"Workspace",c=await Fs(t,e,l);if("error"in c)return c}return hh(t,e,s)}function Ea(t){return {id:t.id,workspaceId:t.workspace_id,nodeId:t.node_id,title:t.title,content:t.content,source:t.source,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}function fh(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} memory/rule(s) with a similar title.`,detail:{similar:t}}}async function Ra(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ot(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.title.trim(),s=await At(t.supabase,{workspaceId:r.workspace_id,kind:"memory",nodeId:r.id,candidate:n});if(s.ok&&s.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A memory titled "${s.data.duplicate.title}" already exists at ${e.node_path}. Use update_memory, pick a different title, or pass allow_duplicate: true to insert anyway.`,detail:{existing_id:s.data.duplicate.id,existing_title:s.data.duplicate.title,similar:s.ok?s.data.similar:[]}}};let{data:i,error:o}=await t.supabase.from("memories").insert({workspace_id:r.workspace_id,node_id:r.id,title:n,content:e.content,source:e.source??"claude",created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!i)return {ok:false,error:B(o??{message:"insert failed"})};let a=s.ok?fh(s.data.similar):null;return a?{ok:true,data:Ea(i),warnings:[a]}:{ok:true,data:Ea(i)}}function gh(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} rule(s) with a similar name.`,detail:{similar:t}}}function mh(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,content:t.content,scopeType:t.scope_type,priority:t.priority,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}async function xa(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ot(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),s=await At(t.supabase,{workspaceId:r.workspace_id,kind:"rule",candidate:n});if(s.ok&&s.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A rule named "${s.data.duplicate.title}" already exists in this workspace. Use update_rule, pick a different name, or pass allow_duplicate: true.`,detail:{existing_id:s.data.duplicate.id,existing_name:s.data.duplicate.title,similar:s.ok?s.data.similar:[]}}};let{data:i,error:o}=await t.supabase.from("rules").insert({workspace_id:r.workspace_id,name:n,content:e.content,scope_type:e.scope_type,priority:e.priority,created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!i)return {ok:false,error:B(o??{message:"insert failed"})};let a=mh(i),{error:l}=await t.supabase.from("node_rules").insert({node_id:r.id,rule_id:a.id});if(l)return await t.supabase.from("rules").delete().eq("id",a.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${l.message}`}};let c=s.ok?gh(s.data.similar):null;return c?{ok:true,data:a,warnings:[c]}:{ok:true,data:a}}function _h(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,description:t.description,content:t.content,source:t.source,githubUrl:t.github_url,version:t.version,tags:t.tags,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at,contentFetchedAt:t.content_fetched_at}}async function Pa(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ot(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),s=await At(t.supabase,{workspaceId:r.workspace_id,kind:"skill",candidate:n,maxSimilar:0});if(s.ok&&s.data.duplicate)return {ok:false,error:{code:"duplicate",message:`A skill with this name already exists in this workspace: "${s.data.duplicate.title}". Use update_skill or pick a different name.`,detail:{existing_id:s.data.duplicate.id,existing_name:s.data.duplicate.title}}};let i=e.source??"manual",{data:o,error:a}=await t.supabase.from("skills").insert({workspace_id:r.workspace_id,name:n,description:e.description,content:e.content,source:i,github_url:e.github_url??null,tags:e.tags??[],created_by:t.userId,last_edited_by:t.userId,content_fetched_at:i==="github_ref"?new Date().toISOString():null}).select("*").single();if(a||!o)return Sa(a??{})?{ok:false,error:{code:"duplicate",message:"A skill with this name already exists in this workspace. Use update_skill or pick a different name."}}:{ok:false,error:B(a??{message:"insert failed"})};let l=_h(o),{error:c}=await t.supabase.from("node_skills").insert({node_id:r.id,skill_id:l.id,is_active:true});return c?(await t.supabase.from("skills").delete().eq("id",l.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${c.message}`}}):{ok:true,data:l}}var wh=/^[A-Za-z0-9_-]+/,yh=/[\s([{'"`]/;function qs(t){return t.trim().toLowerCase()}function Ta(t){let e=bh(t),r=[];for(let n=0;n<e.length-2;n+=1){if(e[n]!==":"||e[n+1]!==":")continue;let s=n===0?"":e[n-1]??"";if(s&&!yh.test(s))continue;let i=e.slice(n+2).match(wh);if(!i?.[0])continue;let o=i[0];r.push({raw:o,name:qs(o),start:n,end:n+2+o.length}),n+=1+o.length;}return kh(r)}function kh(t){let e=new Set,r=[];for(let n of t)e.has(n.name)||(e.add(n.name),r.push(n));return r}function bh(t){let e="",r=0,n=false,s=false;for(;r<t.length;){if(t.startsWith("```",r)){n=!n,e+=" ",r+=3;continue}let i=t[r]??"";if(!n&&i==="`"){s=!s,e+=" ",r+=1;continue}e+=n||s?i===`
46
+ ${k}`}var xc=E(()=>{});function Pc({error:t,options:e}){var r,n,s;let{publicKey:i}=e;if(!i)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else if(t.name==="ConstraintError"){if(((r=i.authenticatorSelection)===null||r===void 0?void 0:r.requireResidentKey)===true)return new L({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:t});if(e.mediation==="conditional"&&((n=i.authenticatorSelection)===null||n===void 0?void 0:n.userVerification)==="required")return new L({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:t});if(((s=i.authenticatorSelection)===null||s===void 0?void 0:s.userVerification)==="required")return new L({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:t})}else {if(t.name==="InvalidStateError")return new L({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:t});if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="NotSupportedError")return i.pubKeyCredParams.filter(a=>a.type==="public-key").length===0?new L({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:t}):new L({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:t});if(t.name==="SecurityError"){let o=window.location.hostname;if(Ni(o)){if(i.rp.id!==o)return new L({message:`The RP ID "${i.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="TypeError"){if(i.user.id.byteLength<1||i.user.id.byteLength>64)return new L({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}function Tc({error:t,options:e}){let{publicKey:r}=e;if(!r)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else {if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="SecurityError"){let n=window.location.hostname;if(Ni(n)){if(r.rpId!==n)return new L({message:`The RP ID "${r.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}var L,ft,Ac=E(()=>{ji();L=class extends Error{constructor({message:e,code:r,cause:n,name:s}){var i;super(e,{cause:n}),this.__isWebAuthnError=true,this.name=(i=s??(n instanceof Error?n.name:void 0))!==null&&i!==void 0?i:"Unknown Error",this.code=r;}},ft=class extends L{constructor(e,r){super({code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:r,message:e}),this.name="WebAuthnUnknownError",this.originalError=r;}};});function Oc(t){if(!t)throw new Error("Credential creation options are required");if(typeof PublicKeyCredential<"u"&&"parseCreationOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON=="function")return PublicKeyCredential.parseCreationOptionsFromJSON(t);let{challenge:e,user:r,excludeCredentials:n}=t,s=tt(t,["challenge","user","excludeCredentials"]),i=Fe(e).buffer,o=Object.assign(Object.assign({},r),{id:Fe(r.id).buffer}),a=Object.assign(Object.assign({},s),{challenge:i,user:o});if(n&&n.length>0){a.excludeCredentials=new Array(n.length);for(let l=0;l<n.length;l++){let c=n[l];a.excludeCredentials[l]=Object.assign(Object.assign({},c),{id:Fe(c.id).buffer,type:c.type||"public-key",transports:c.transports});}}return a}function $c(t){if(!t)throw new Error("Credential request options are required");if(typeof PublicKeyCredential<"u"&&"parseRequestOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON=="function")return PublicKeyCredential.parseRequestOptionsFromJSON(t);let{challenge:e,allowCredentials:r}=t,n=tt(t,["challenge","allowCredentials"]),s=Fe(e).buffer,i=Object.assign(Object.assign({},n),{challenge:s});if(r&&r.length>0){i.allowCredentials=new Array(r.length);for(let o=0;o<r.length;o++){let a=r[o];i.allowCredentials[o]=Object.assign(Object.assign({},a),{id:Fe(a.id).buffer,type:a.type||"public-key",transports:a.transports});}}return i}function Nc(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t;return {id:t.id,rawId:t.id,response:{attestationObject:Oe(new Uint8Array(t.response.attestationObject)),clientDataJSON:Oe(new Uint8Array(t.response.clientDataJSON))},type:"public-key",clientExtensionResults:t.getClientExtensionResults(),authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function jc(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t,n=t.getClientExtensionResults(),s=t.response;return {id:t.id,rawId:t.id,response:{authenticatorData:Oe(new Uint8Array(s.authenticatorData)),clientDataJSON:Oe(new Uint8Array(s.clientDataJSON)),signature:Oe(new Uint8Array(s.signature)),userHandle:s.userHandle?Oe(new Uint8Array(s.userHandle)):void 0},type:"public-key",clientExtensionResults:n,authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function Ni(t){return t==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(t)}function Ic(){var t,e;return !!(H()&&"PublicKeyCredential"in window&&window.PublicKeyCredential&&"credentials"in navigator&&typeof((t=navigator?.credentials)===null||t===void 0?void 0:t.create)=="function"&&typeof((e=navigator?.credentials)===null||e===void 0?void 0:e.get)=="function")}async function Bg(t){try{let e=await navigator.credentials.create(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new ft("Browser returned unexpected credential type",e)}:{data:null,error:new ft("Empty credential response",e)}}catch(e){return {data:null,error:Pc({error:e,options:t})}}}async function Fg(t){try{let e=await navigator.credentials.get(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new ft("Browser returned unexpected credential type",e)}:{data:null,error:new ft("Empty credential response",e)}}catch(e){return {data:null,error:Tc({error:e,options:t})}}}function Gn(...t){let e=s=>s!==null&&typeof s=="object"&&!Array.isArray(s),r=s=>s instanceof ArrayBuffer||ArrayBuffer.isView(s),n={};for(let s of t)if(s)for(let i in s){let o=s[i];if(o!==void 0)if(Array.isArray(o))n[i]=o;else if(r(o))n[i]=o;else if(e(o)){let a=n[i];e(a)?n[i]=Gn(a,o):n[i]=Gn(o);}else n[i]=o;}return n}function zg(t,e){return Gn(Hg,t,e||{})}function Jg(t,e){return Gn(qg,t,e||{})}var Di,Wg,Hg,qg,Yn,ji=E(()=>{dr();Hn();at();Jt();Ac();Di=class{createNewAbortSignal(){if(this.controller){let r=new Error("Cancelling existing WebAuthn API call for new one");r.name="AbortError",this.controller.abort(r);}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=new Error("Manually cancelling existing WebAuthn API call");e.name="AbortError",this.controller.abort(e),this.controller=void 0;}}},Wg=new Di;Hg={hints:["security-key"],authenticatorSelection:{authenticatorAttachment:"cross-platform",requireResidentKey:false,userVerification:"preferred",residentKey:"discouraged"},attestation:"direct"},qg={userVerification:"preferred",hints:["security-key"],attestation:"direct"};Yn=class{constructor(e){this.client=e,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this);}async _enroll(e){return this.client.mfa.enroll(Object.assign(Object.assign({},e),{factorType:"webauthn"}))}async _challenge({factorId:e,webauthn:r,friendlyName:n,signal:s},i){var o;try{let{data:a,error:l}=await this.client.mfa.challenge({factorId:e,webauthn:r});if(!a)return {data:null,error:l};let c=s??Wg.createNewAbortSignal();if(a.webauthn.type==="create"){let{user:u}=a.webauthn.credential_options.publicKey;if(!u.name){let d=n;if(d)u.name=`${u.id}:${d}`;else {let h=(await this.client.getUser()).data.user,f=((o=h?.user_metadata)===null||o===void 0?void 0:o.name)||h?.email||h?.id||"User";u.name=`${u.id}:${f}`;}}u.displayName||(u.displayName=u.name);}switch(a.webauthn.type){case "create":{let u=zg(a.webauthn.credential_options.publicKey,i?.create),{data:d,error:p}=await Bg({publicKey:u,signal:c});return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}case "request":{let u=Jg(a.webauthn.credential_options.publicKey,i?.request),{data:d,error:p}=await Fg(Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:u,signal:c}));return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}}}catch(a){return v(a)?{data:null,error:a}:{data:null,error:new ae("Unexpected error in challenge",a)}}}async _verify({challengeId:e,factorId:r,webauthn:n}){return this.client.mfa.verify({factorId:r,challengeId:e,webauthn:n})}async _authenticate({factorId:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:s}={}},i){if(!r)return {data:null,error:new Be("rpId is required for WebAuthn authentication")};try{if(!Ic())return {data:null,error:new ae("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this.challenge({factorId:e,webauthn:{rpId:r,rpOrigins:n},signal:s},{request:i});if(!o)return {data:null,error:a};let{webauthn:l}=o;return this._verify({factorId:e,challengeId:o.challengeId,webauthn:{type:l.type,rpId:r,rpOrigins:n,credential_response:l.credential_response}})}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new ae("Unexpected error in authenticate",o)}}}async _register({friendlyName:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:s}={}},i){if(!r)return {data:null,error:new Be("rpId is required for WebAuthn registration")};try{if(!Ic())return {data:null,error:new ae("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this._enroll({friendlyName:e});if(!o)return await this.client.mfa.listFactors().then(u=>{var d;return (d=u.data)===null||d===void 0?void 0:d.all.find(p=>p.factor_type==="webauthn"&&p.friendly_name===e&&p.status!=="unverified")}).then(u=>u?this.client.mfa.unenroll({factorId:u?.id}):void 0),{data:null,error:a};let{data:l,error:c}=await this._challenge({factorId:o.id,friendlyName:o.friendly_name,webauthn:{rpId:r,rpOrigins:n},signal:s},{create:i});return l?this._verify({factorId:o.id,challengeId:l.challengeId,webauthn:{rpId:r,rpOrigins:n,type:l.webauthn.type,credential_response:l.webauthn.credential_response}}):{data:null,error:c}}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new ae("Unexpected error in register",o)}}}};});async function Dc(t,e,r){return await r()}var Kg,Kt,Xn,Li,Mi=E(()=>{Vn();Mn();at();Pi();Jt();bc();Oi();Sc();vi();Hn();xc();ji();vc();Kg={url:Xl,storageKey:Zl,autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,headers:Ql,flowType:"implicit",debug:false,hasCustomAuthorizationHeader:false,throwOnError:false,lockAcquireTimeout:5e3,skipAutoInitialize:false};Kt={},Xn=class t{get jwks(){var e,r;return (r=(e=Kt[this.storageKey])===null||e===void 0?void 0:e.jwks)!==null&&r!==void 0?r:{keys:[]}}set jwks(e){Kt[this.storageKey]=Object.assign(Object.assign({},Kt[this.storageKey]),{jwks:e});}get jwks_cached_at(){var e,r;return (r=(e=Kt[this.storageKey])===null||e===void 0?void 0:e.cachedAt)!==null&&r!==void 0?r:Number.MIN_SAFE_INTEGER}set jwks_cached_at(e){Kt[this.storageKey]=Object.assign(Object.assign({},Kt[this.storageKey]),{cachedAt:e});}constructor(e){var r,n,s;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.initializePromise=null,this.detectSessionInUrl=true,this.hasCustomAuthorizationHeader=false,this.suppressGetSessionWarning=false,this.lockAcquired=false,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;let i=Object.assign(Object.assign({},Kg),e);if(this.storageKey=i.storageKey,this.instanceID=(r=t.nextInstanceID[this.storageKey])!==null&&r!==void 0?r:0,t.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!i.debug,typeof i.debug=="function"&&(this.logger=i.debug),this.instanceID>0&&H()){let o=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(o),this.logDebugMessages&&console.trace(o);}if(this.persistSession=i.persistSession,this.autoRefreshToken=i.autoRefreshToken,this.admin=new ht({url:i.url,headers:i.headers,fetch:i.fetch}),this.url=i.url,this.headers=i.headers,this.fetch=zn(i.fetch),this.lock=i.lock||Dc,this.detectSessionInUrl=i.detectSessionInUrl,this.flowType=i.flowType,this.hasCustomAuthorizationHeader=i.hasCustomAuthorizationHeader,this.throwOnError=i.throwOnError,this.lockAcquireTimeout=i.lockAcquireTimeout,i.lock?this.lock=i.lock:this.persistSession&&H()&&(!((n=globalThis?.navigator)===null||n===void 0)&&n.locks)?this.lock=Ii:this.lock=Dc,this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=Number.MIN_SAFE_INTEGER),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new Yn(this)},this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.persistSession?(i.storage?this.storage=i.storage:qn()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=Ai(this.memoryStorage)),i.userStorage&&(this.userStorage=i.userStorage)):(this.memoryStorage={},this.storage=Ai(this.memoryStorage)),H()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey);}catch(o){console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available",o);}(s=this.broadcastChannel)===null||s===void 0||s.addEventListener("message",async o=>{this._debug("received broadcast notification from other tab or client",o);try{await this._notifyAllSubscribers(o.data.event,o.data.session,!1);}catch(a){this._debug("#broadcastChannel","error",a);}});}i.skipAutoInitialize||this.initialize().catch(o=>{this._debug("#initialize()","error",o);});}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return `GoTrueClient@${this.storageKey}:${this.instanceID} (${jn}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){return this.initializePromise?await this.initializePromise:(this.initializePromise=(async()=>await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()))(),await this.initializePromise)}async _initialize(){var e;try{let r={},n="none";if(H()&&(r=uc(window.location.href),this._isImplicitGrantCallback(r)?n="implicit":await this._isPKCECallback(r)&&(n="pkce")),H()&&this.detectSessionInUrl&&n!=="none"){let{data:s,error:i}=await this._getSessionFromURL(r,n);if(i){if(this._debug("#_initialize()","error detecting session from URL",i),nc(i)){let l=(e=i.details)===null||e===void 0?void 0:e.code;if(l==="identity_already_exists"||l==="identity_not_found"||l==="single_identity_not_deletable")return {error:i}}return {error:i}}let{session:o,redirectType:a}=s;return this._debug("#_initialize()","detected session in URL",o,"redirect type",a),await this._saveSession(o),setTimeout(async()=>{a==="recovery"?await this._notifyAllSubscribers("PASSWORD_RECOVERY",o):await this._notifyAllSubscribers("SIGNED_IN",o);},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(r){return v(r)?this._returnResult({error:r}):this._returnResult({error:new ae("Unexpected error during initialization",r)})}finally{await this._handleVisibilityChange(),this._debug("#_initialize()","end");}}async signInAnonymously(e){var r,n,s;try{let i=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{data:(n=(r=e?.options)===null||r===void 0?void 0:r.data)!==null&&n!==void 0?n:{},gotrue_meta_security:{captcha_token:(s=e?.options)===null||s===void 0?void 0:s.captchaToken}},xform:le}),{data:o,error:a}=i;if(a||!o)return this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(i){if(v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async signUp(e){var r,n,s;try{let i;if("email"in e){let{email:u,password:d,options:p}=e,h=null,f=null;this.flowType==="pkce"&&([h,f]=await ut(this.storage,this.storageKey)),i=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,redirectTo:p?.emailRedirectTo,body:{email:u,password:d,data:(r=p?.data)!==null&&r!==void 0?r:{},gotrue_meta_security:{captcha_token:p?.captchaToken},code_challenge:h,code_challenge_method:f},xform:le});}else if("phone"in e){let{phone:u,password:d,options:p}=e;i=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{phone:u,password:d,data:(n=p?.data)!==null&&n!==void 0?n:{},channel:(s=p?.channel)!==null&&s!==void 0?s:"sms",gotrue_meta_security:{captcha_token:p?.captchaToken}},xform:le});}else throw new st("You must provide either an email or phone number and a password");let{data:o,error:a}=i;if(a||!o)return await z(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async signInWithPassword(e){try{let r;if("email"in e){let{email:i,password:o,options:a}=e;r=await S(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:i,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Ri});}else if("phone"in e){let{phone:i,password:o,options:a}=e;r=await S(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:i,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Ri});}else throw new st("You must provide either an email or phone number and a password");let{data:n,error:s}=r;if(s)return this._returnResult({data:{user:null,session:null},error:s});if(!n||!n.session||!n.user){let i=new Ie;return this._returnResult({data:{user:null,session:null},error:i})}return n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers("SIGNED_IN",n.session)),this._returnResult({data:Object.assign({user:n.user,session:n.session},n.weak_password?{weakPassword:n.weak_password}:null),error:s})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOAuth(e){var r,n,s,i;return await this._handleProviderSignIn(e.provider,{redirectTo:(r=e.options)===null||r===void 0?void 0:r.redirectTo,scopes:(n=e.options)===null||n===void 0?void 0:n.scopes,queryParams:(s=e.options)===null||s===void 0?void 0:s.queryParams,skipBrowserRedirect:(i=e.options)===null||i===void 0?void 0:i.skipBrowserRedirect})}async exchangeCodeForSession(e){return await this.initializePromise,this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e))}async signInWithWeb3(e){let{chain:r}=e;switch(r){case "ethereum":return await this.signInWithEthereum(e);case "solana":return await this.signInWithSolana(e);default:throw new Error(`@supabase/auth-js: Unsupported chain "${r}"`)}}async signInWithEthereum(e){var r,n,s,i,o,a,l,c,u,d,p;let h,f;if("message"in e)h=e.message,f=e.signature;else {let{chain:m,wallet:_,statement:k,options:b}=e,w;if(H())if(typeof _=="object")w=_;else {let oe=window;if("ethereum"in oe&&typeof oe.ethereum=="object"&&"request"in oe.ethereum&&typeof oe.ethereum.request=="function")w=oe.ethereum;else throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.")}else {if(typeof _!="object"||!b?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");w=_;}let I=new URL((r=b?.url)!==null&&r!==void 0?r:window.location.href),X=await w.request({method:"eth_requestAccounts"}).then(oe=>oe).catch(()=>{throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid")});if(!X||X.length===0)throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected.");let P=$i(X[0]),$=(n=b?.signInWithEthereum)===null||n===void 0?void 0:n.chainId;if(!$){let oe=await w.request({method:"eth_chainId"});$=Cc(oe);}let Pe={domain:I.host,address:P,statement:k,uri:I.href,version:"1",chainId:$,nonce:(s=b?.signInWithEthereum)===null||s===void 0?void 0:s.nonce,issuedAt:(o=(i=b?.signInWithEthereum)===null||i===void 0?void 0:i.issuedAt)!==null&&o!==void 0?o:new Date,expirationTime:(a=b?.signInWithEthereum)===null||a===void 0?void 0:a.expirationTime,notBefore:(l=b?.signInWithEthereum)===null||l===void 0?void 0:l.notBefore,requestId:(c=b?.signInWithEthereum)===null||c===void 0?void 0:c.requestId,resources:(u=b?.signInWithEthereum)===null||u===void 0?void 0:u.resources};h=Rc(Pe),f=await w.request({method:"personal_sign",params:[Ec(h),P]});}try{let{data:m,error:_}=await S(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"ethereum",message:h,signature:f},!((d=e.options)===null||d===void 0)&&d.captchaToken?{gotrue_meta_security:{captcha_token:(p=e.options)===null||p===void 0?void 0:p.captchaToken}}:null),xform:le});if(_)throw _;if(!m||!m.session||!m.user){let k=new Ie;return this._returnResult({data:{user:null,session:null},error:k})}return m.session&&(await this._saveSession(m.session),await this._notifyAllSubscribers("SIGNED_IN",m.session)),this._returnResult({data:Object.assign({},m),error:_})}catch(m){if(v(m))return this._returnResult({data:{user:null,session:null},error:m});throw m}}async signInWithSolana(e){var r,n,s,i,o,a,l,c,u,d,p,h;let f,m;if("message"in e)f=e.message,m=e.signature;else {let{chain:_,wallet:k,statement:b,options:w}=e,I;if(H())if(typeof k=="object")I=k;else {let P=window;if("solana"in P&&typeof P.solana=="object"&&("signIn"in P.solana&&typeof P.solana.signIn=="function"||"signMessage"in P.solana&&typeof P.solana.signMessage=="function"))I=P.solana;else throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.")}else {if(typeof k!="object"||!w?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");I=k;}let X=new URL((r=w?.url)!==null&&r!==void 0?r:window.location.href);if("signIn"in I&&I.signIn){let P=await I.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},w?.signInWithSolana),{version:"1",domain:X.host,uri:X.href}),b?{statement:b}:null)),$;if(Array.isArray(P)&&P[0]&&typeof P[0]=="object")$=P[0];else if(P&&typeof P=="object"&&"signedMessage"in P&&"signature"in P)$=P;else throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value");if("signedMessage"in $&&"signature"in $&&(typeof $.signedMessage=="string"||$.signedMessage instanceof Uint8Array)&&$.signature instanceof Uint8Array)f=typeof $.signedMessage=="string"?$.signedMessage:new TextDecoder().decode($.signedMessage),m=$.signature;else throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields")}else {if(!("signMessage"in I)||typeof I.signMessage!="function"||!("publicKey"in I)||typeof I!="object"||!I.publicKey||!("toBase58"in I.publicKey)||typeof I.publicKey.toBase58!="function")throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API");f=[`${X.host} wants you to sign in with your Solana account:`,I.publicKey.toBase58(),...b?["",b,""]:[""],"Version: 1",`URI: ${X.href}`,`Issued At: ${(s=(n=w?.signInWithSolana)===null||n===void 0?void 0:n.issuedAt)!==null&&s!==void 0?s:new Date().toISOString()}`,...!((i=w?.signInWithSolana)===null||i===void 0)&&i.notBefore?[`Not Before: ${w.signInWithSolana.notBefore}`]:[],...!((o=w?.signInWithSolana)===null||o===void 0)&&o.expirationTime?[`Expiration Time: ${w.signInWithSolana.expirationTime}`]:[],...!((a=w?.signInWithSolana)===null||a===void 0)&&a.chainId?[`Chain ID: ${w.signInWithSolana.chainId}`]:[],...!((l=w?.signInWithSolana)===null||l===void 0)&&l.nonce?[`Nonce: ${w.signInWithSolana.nonce}`]:[],...!((c=w?.signInWithSolana)===null||c===void 0)&&c.requestId?[`Request ID: ${w.signInWithSolana.requestId}`]:[],...!((d=(u=w?.signInWithSolana)===null||u===void 0?void 0:u.resources)===null||d===void 0)&&d.length?["Resources",...w.signInWithSolana.resources.map($=>`- ${$}`)]:[]].join(`
47
+ `);let P=await I.signMessage(new TextEncoder().encode(f),"utf8");if(!P||!(P instanceof Uint8Array))throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value");m=P;}}try{let{data:_,error:k}=await S(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"solana",message:f,signature:Oe(m)},!((p=e.options)===null||p===void 0)&&p.captchaToken?{gotrue_meta_security:{captcha_token:(h=e.options)===null||h===void 0?void 0:h.captchaToken}}:null),xform:le});if(k)throw k;if(!_||!_.session||!_.user){let b=new Ie;return this._returnResult({data:{user:null,session:null},error:b})}return _.session&&(await this._saveSession(_.session),await this._notifyAllSubscribers("SIGNED_IN",_.session)),this._returnResult({data:Object.assign({},_),error:k})}catch(_){if(v(_))return this._returnResult({data:{user:null,session:null},error:_});throw _}}async _exchangeCodeForSession(e){let r=await He(this.storage,`${this.storageKey}-code-verifier`),[n,s]=(r??"").split("/");try{if(!n&&this.flowType==="pkce")throw new Wn;let{data:i,error:o}=await S(this.fetch,"POST",`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:n},xform:le});if(await z(this.storage,`${this.storageKey}-code-verifier`),o)throw o;if(!i||!i.session||!i.user){let a=new Ie;return this._returnResult({data:{user:null,session:null,redirectType:null},error:a})}return i.session&&(await this._saveSession(i.session),await this._notifyAllSubscribers("SIGNED_IN",i.session)),this._returnResult({data:Object.assign(Object.assign({},i),{redirectType:s??null}),error:o})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:{user:null,session:null,redirectType:null},error:i});throw i}}async signInWithIdToken(e){try{let{options:r,provider:n,token:s,access_token:i,nonce:o}=e,a=await S(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:n,id_token:s,access_token:i,nonce:o,gotrue_meta_security:{captcha_token:r?.captchaToken}},xform:le}),{data:l,error:c}=a;if(c)return this._returnResult({data:{user:null,session:null},error:c});if(!l||!l.session||!l.user){let u=new Ie;return this._returnResult({data:{user:null,session:null},error:u})}return l.session&&(await this._saveSession(l.session),await this._notifyAllSubscribers("SIGNED_IN",l.session)),this._returnResult({data:l,error:c})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOtp(e){var r,n,s,i,o;try{if("email"in e){let{email:a,options:l}=e,c=null,u=null;this.flowType==="pkce"&&([c,u]=await ut(this.storage,this.storageKey));let{error:d}=await S(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{email:a,data:(r=l?.data)!==null&&r!==void 0?r:{},create_user:(n=l?.shouldCreateUser)!==null&&n!==void 0?n:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},code_challenge:c,code_challenge_method:u},redirectTo:l?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:d})}if("phone"in e){let{phone:a,options:l}=e,{data:c,error:u}=await S(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{phone:a,data:(s=l?.data)!==null&&s!==void 0?s:{},create_user:(i=l?.shouldCreateUser)!==null&&i!==void 0?i:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},channel:(o=l?.channel)!==null&&o!==void 0?o:"sms"}});return this._returnResult({data:{user:null,session:null,messageId:c?.message_id},error:u})}throw new st("You must provide either an email or phone number.")}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async verifyOtp(e){var r,n;try{let s,i;"options"in e&&(s=(r=e.options)===null||r===void 0?void 0:r.redirectTo,i=(n=e.options)===null||n===void 0?void 0:n.captchaToken);let{data:o,error:a}=await S(this.fetch,"POST",`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:i}}),redirectTo:s,xform:le});if(a)throw a;if(!o)throw new Error("An error occurred on token verification.");let l=o.session,c=o.user;return l?.access_token&&(await this._saveSession(l),await this._notifyAllSubscribers(e.type=="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(s){if(v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}}async signInWithSSO(e){var r,n,s,i,o;try{let a=null,l=null;this.flowType==="pkce"&&([a,l]=await ut(this.storage,this.storageKey));let c=await S(this.fetch,"POST",`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},"providerId"in e?{provider_id:e.providerId}:null),"domain"in e?{domain:e.domain}:null),{redirect_to:(n=(r=e.options)===null||r===void 0?void 0:r.redirectTo)!==null&&n!==void 0?n:void 0}),!((s=e?.options)===null||s===void 0)&&s.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:a,code_challenge_method:l}),headers:this.headers,xform:yc});return !((i=c.data)===null||i===void 0)&&i.url&&H()&&!(!((o=e.options)===null||o===void 0)&&o.skipBrowserRedirect)&&window.location.assign(c.data.url),this._returnResult(c)}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:null,error:a});throw a}}async reauthenticate(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;if(n)throw n;if(!r)throw new J;let{error:s}=await S(this.fetch,"GET",`${this.url}/reauthenticate`,{headers:this.headers,jwt:r.access_token});return this._returnResult({data:{user:null,session:null},error:s})})}catch(e){if(v(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){try{let r=`${this.url}/resend`;if("email"in e){let{email:n,type:s,options:i}=e,{error:o}=await S(this.fetch,"POST",r,{headers:this.headers,body:{email:n,type:s,gotrue_meta_security:{captcha_token:i?.captchaToken}},redirectTo:i?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:o})}else if("phone"in e){let{phone:n,type:s,options:i}=e,{data:o,error:a}=await S(this.fetch,"POST",r,{headers:this.headers,body:{phone:n,type:s,gotrue_meta_security:{captcha_token:i?.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:o?.message_id},error:a})}throw new st("You must provide either an email or phone number and a type")}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async getSession(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async r=>r))}async _acquireLock(e,r){this._debug("#_acquireLock","begin",e);try{if(this.lockAcquired){let n=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),s=(async()=>(await n,await r()))();return this.pendingInLock.push((async()=>{try{await s;}catch{}})()),s}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug("#_acquireLock","lock acquired for storage key",this.storageKey);try{this.lockAcquired=!0;let n=r();for(this.pendingInLock.push((async()=>{try{await n;}catch{}})()),await n;this.pendingInLock.length;){let s=[...this.pendingInLock];await Promise.all(s),this.pendingInLock.splice(0,s.length);}return await n}finally{this._debug("#_acquireLock","lock released for storage key",this.storageKey),this.lockAcquired=!1;}})}finally{this._debug("#_acquireLock","end");}}async _useSession(e){this._debug("#_useSession","begin");try{let r=await this.__loadSession();return await e(r)}finally{this._debug("#_useSession","end");}}async __loadSession(){this._debug("#__loadSession()","begin"),this.lockAcquired||this._debug("#__loadSession()","used outside of an acquired lock!",new Error().stack);try{let e=null,r=await He(this.storage,this.storageKey);if(this._debug("#getSession()","session from storage",r),r!==null&&(this._isValidSession(r)?e=r:(this._debug("#getSession()","session from storage is not valid"),await this._removeSession())),!e)return {data:{session:null},error:null};let n=e.expires_at?e.expires_at*1e3-Date.now()<Ln:!1;if(this._debug("#__loadSession()",`session has${n?"":" not"} expired`,"expires_at",e.expires_at),!n){if(this.userStorage){let o=await He(this.userStorage,this.storageKey+"-user");o?.user?e.user=o.user:e.user=Jn();}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){let o={value:this.suppressGetSessionWarning};e.user=_c(e.user,o),o.value&&(this.suppressGetSessionWarning=!0);}return {data:{session:e},error:null}}let{data:s,error:i}=await this._callRefreshToken(e.refresh_token);return i?this._returnResult({data:{session:null},error:i}):this._returnResult({data:{session:s},error:null})}finally{this._debug("#__loadSession()","end");}}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;let r=await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser());return r.data.user&&(this.suppressGetSessionWarning=true),r}async _getUser(e){try{return e?await S(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:e,xform:be}):await this._useSession(async r=>{var n,s,i;let{data:o,error:a}=r;if(a)throw a;return !(!((n=o.session)===null||n===void 0)&&n.access_token)&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new J}:await S(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:(i=(s=o.session)===null||s===void 0?void 0:s.access_token)!==null&&i!==void 0?i:void 0,xform:be})})}catch(r){if(v(r))return Or(r)&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({data:{user:null},error:r});throw r}}async updateUser(e,r={}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,r))}async _updateUser(e,r={}){try{return await this._useSession(async n=>{let{data:s,error:i}=n;if(i)throw i;if(!s.session)throw new J;let o=s.session,a=null,l=null;this.flowType==="pkce"&&e.email!=null&&([a,l]=await ut(this.storage,this.storageKey));let{data:c,error:u}=await S(this.fetch,"PUT",`${this.url}/user`,{headers:this.headers,redirectTo:r?.emailRedirectTo,body:Object.assign(Object.assign({},e),{code_challenge:a,code_challenge_method:l}),jwt:o.access_token,xform:be});if(u)throw u;return o.user=c.user,await this._saveSession(o),await this._notifyAllSubscribers("USER_UPDATED",o),this._returnResult({data:{user:o.user},error:null})})}catch(n){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(n))return this._returnResult({data:{user:null},error:n});throw n}}async setSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e))}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new J;let r=Date.now()/1e3,n=r,s=!0,i=null,{payload:o}=Nr(e.access_token);if(o.exp&&(n=o.exp,s=n<=r),s){let{data:a,error:l}=await this._callRefreshToken(e.refresh_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});if(!a)return {data:{user:null,session:null},error:null};i=a;}else {let{data:a,error:l}=await this._getUser(e.access_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});i={access_token:e.access_token,refresh_token:e.refresh_token,user:a.user,token_type:"bearer",expires_in:n-r,expires_at:n},await this._saveSession(i),await this._notifyAllSubscribers("SIGNED_IN",i);}return this._returnResult({data:{user:i.user,session:i},error:null})}catch(r){if(v(r))return this._returnResult({data:{session:null,user:null},error:r});throw r}}async refreshSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e))}async _refreshSession(e){try{return await this._useSession(async r=>{var n;if(!e){let{data:o,error:a}=r;if(a)throw a;e=(n=o.session)!==null&&n!==void 0?n:void 0;}if(!e?.refresh_token)throw new J;let{data:s,error:i}=await this._callRefreshToken(e.refresh_token);return i?this._returnResult({data:{user:null,session:null},error:i}):s?this._returnResult({data:{user:s.user,session:s},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async _getSessionFromURL(e,r){try{if(!H())throw new it("No browser detected.");if(e.error||e.error_description||e.error_code)throw new it(e.error_description||"Error in URL with unspecified error_description",{error:e.error||"unspecified_error",code:e.error_code||"unspecified_code"});switch(r){case "implicit":if(this.flowType==="pkce")throw new Ar("Not a valid PKCE flow url.");break;case "pkce":if(this.flowType==="implicit")throw new it("Not a valid implicit grant flow url.");break;default:}if(r==="pkce"){if(this._debug("#_initialize()","begin","is PKCE flow",!0),!e.code)throw new Ar("No code detected.");let{data:b,error:w}=await this._exchangeCodeForSession(e.code);if(w)throw w;let I=new URL(window.location.href);return I.searchParams.delete("code"),window.history.replaceState(window.history.state,"",I.toString()),{data:{session:b.session,redirectType:null},error:null}}let{provider_token:n,provider_refresh_token:s,access_token:i,refresh_token:o,expires_in:a,expires_at:l,token_type:c}=e;if(!i||!a||!o||!c)throw new it("No session defined in URL");let u=Math.round(Date.now()/1e3),d=parseInt(a),p=u+d;l&&(p=parseInt(l));let h=p-u;h*1e3<=nt&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${h}s, should have been closer to ${d}s`);let f=p-d;u-f>=120?console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale",f,p,u):u-f<0&&console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew",f,p,u);let{data:m,error:_}=await this._getUser(i);if(_)throw _;let k={provider_token:n,provider_refresh_token:s,access_token:i,expires_in:d,expires_at:p,refresh_token:o,token_type:c,user:m.user};return window.location.hash="",this._debug("#_getSessionFromURL()","clearing window.location.hash"),this._returnResult({data:{session:k,redirectType:e.type},error:null})}catch(n){if(v(n))return this._returnResult({data:{session:null,redirectType:null},error:n});throw n}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl=="function"?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error_description)}async _isPKCECallback(e){let r=await He(this.storage,`${this.storageKey}-code-verifier`);return !!(e.code&&r)}async signOut(e={scope:"global"}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e))}async _signOut({scope:e}={scope:"global"}){return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i&&!Or(i))return this._returnResult({error:i});let o=(n=s.session)===null||n===void 0?void 0:n.access_token;if(o){let{error:a}=await this.admin.signOut(o,e);if(a&&!(rc(a)&&(a.status===404||a.status===401||a.status===403)||Or(a)))return this._returnResult({error:a})}return e!=="others"&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({error:null})})}onAuthStateChange(e){let r=cc(),n={id:r,callback:e,unsubscribe:()=>{this._debug("#unsubscribe()","state change callback with id removed",r),this.stateChangeEmitters.delete(r);}};return this._debug("#onAuthStateChange()","registered callback with id",r),this.stateChangeEmitters.set(r,n),(async()=>(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(r);})))(),{data:{subscription:n}}}async _emitInitialSession(e){return await this._useSession(async r=>{var n,s;try{let{data:{session:i},error:o}=r;if(o)throw o;await((n=this.stateChangeEmitters.get(e))===null||n===void 0?void 0:n.callback("INITIAL_SESSION",i)),this._debug("INITIAL_SESSION","callback id",e,"session",i);}catch(i){await((s=this.stateChangeEmitters.get(e))===null||s===void 0?void 0:s.callback("INITIAL_SESSION",null)),this._debug("INITIAL_SESSION","callback id",e,"error",i),Or(i)?console.warn(i):console.error(i);}})}async resetPasswordForEmail(e,r={}){let n=null,s=null;this.flowType==="pkce"&&([n,s]=await ut(this.storage,this.storageKey,true));try{return await S(this.fetch,"POST",`${this.url}/recover`,{body:{email:e,code_challenge:n,code_challenge_method:s,gotrue_meta_security:{captcha_token:r.captchaToken}},headers:this.headers,redirectTo:r.redirectTo})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:null,error:i});throw i}}async getUserIdentities(){var e;try{let{data:r,error:n}=await this.getUser();if(n)throw n;return this._returnResult({data:{identities:(e=r.user.identities)!==null&&e!==void 0?e:[]},error:null})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async linkIdentity(e){return "token"in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){var r;try{let{data:n,error:s}=await this._useSession(async i=>{var o,a,l,c,u;let{data:d,error:p}=i;if(p)throw p;let h=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:(o=e.options)===null||o===void 0?void 0:o.redirectTo,scopes:(a=e.options)===null||a===void 0?void 0:a.scopes,queryParams:(l=e.options)===null||l===void 0?void 0:l.queryParams,skipBrowserRedirect:!0});return await S(this.fetch,"GET",h,{headers:this.headers,jwt:(u=(c=d.session)===null||c===void 0?void 0:c.access_token)!==null&&u!==void 0?u:void 0})});if(s)throw s;return H()&&!(!((r=e.options)===null||r===void 0)&&r.skipBrowserRedirect)&&window.location.assign(n?.url),this._returnResult({data:{provider:e.provider,url:n?.url},error:null})}catch(n){if(v(n))return this._returnResult({data:{provider:e.provider,url:null},error:n});throw n}}async linkIdentityIdToken(e){return await this._useSession(async r=>{var n;try{let{error:s,data:{session:i}}=r;if(s)throw s;let{options:o,provider:a,token:l,access_token:c,nonce:u}=e,d=await S(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:(n=i?.access_token)!==null&&n!==void 0?n:void 0,body:{provider:a,id_token:l,access_token:c,nonce:u,link_identity:!0,gotrue_meta_security:{captcha_token:o?.captchaToken}},xform:le}),{data:p,error:h}=d;return h?this._returnResult({data:{user:null,session:null},error:h}):!p||!p.session||!p.user?this._returnResult({data:{user:null,session:null},error:new Ie}):(p.session&&(await this._saveSession(p.session),await this._notifyAllSubscribers("USER_UPDATED",p.session)),this._returnResult({data:p,error:h}))}catch(s){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}})}async unlinkIdentity(e){try{return await this._useSession(async r=>{var n,s;let{data:i,error:o}=r;if(o)throw o;return await S(this.fetch,"DELETE",`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:(s=(n=i.session)===null||n===void 0?void 0:n.access_token)!==null&&s!==void 0?s:void 0})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _refreshAccessToken(e){let r=`#_refreshAccessToken(${e.substring(0,5)}...)`;this._debug(r,"begin");try{let n=Date.now();return await hc(async s=>(s>0&&await pc(200*Math.pow(2,s-1)),this._debug(r,"refreshing attempt",s),await S(this.fetch,"POST",`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:le})),(s,i)=>{let o=200*Math.pow(2,s);return i&&Bn(i)&&Date.now()+o-n<nt})}catch(n){if(this._debug(r,"error",n),v(n))return this._returnResult({data:{session:null,user:null},error:n});throw n}finally{this._debug(r,"end");}}_isValidSession(e){return typeof e=="object"&&e!==null&&"access_token"in e&&"refresh_token"in e&&"expires_at"in e}async _handleProviderSignIn(e,r){let n=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:r.redirectTo,scopes:r.scopes,queryParams:r.queryParams});return this._debug("#_handleProviderSignIn()","provider",e,"options",r,"url",n),H()&&!r.skipBrowserRedirect&&window.location.assign(n),{data:{provider:e,url:n},error:null}}async _recoverAndRefresh(){var e,r;let n="#_recoverAndRefresh()";this._debug(n,"begin");try{let s=await He(this.storage,this.storageKey);if(s&&this.userStorage){let o=await He(this.userStorage,this.storageKey+"-user");!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!o&&(o={user:s.user},await ct(this.userStorage,this.storageKey+"-user",o)),s.user=(e=o?.user)!==null&&e!==void 0?e:Jn();}else if(s&&!s.user&&!s.user){let o=await He(this.storage,this.storageKey+"-user");o&&o?.user?(s.user=o.user,await z(this.storage,this.storageKey+"-user"),await ct(this.storage,this.storageKey,s)):s.user=Jn();}if(this._debug(n,"session from storage",s),!this._isValidSession(s)){this._debug(n,"session is not valid"),s!==null&&await this._removeSession();return}let i=((r=s.expires_at)!==null&&r!==void 0?r:1/0)*1e3-Date.now()<Ln;if(this._debug(n,`session has${i?"":" not"} expired with margin of ${Ln}s`),i){if(this.autoRefreshToken&&s.refresh_token){let{error:o}=await this._callRefreshToken(s.refresh_token);o&&(console.error(o),Bn(o)||(this._debug(n,"refresh failed with a non-retryable error, removing the session",o),await this._removeSession()));}}else if(s.user&&s.user.__isUserNotAvailableProxy===!0)try{let{data:o,error:a}=await this._getUser(s.access_token);!a&&o?.user?(s.user=o.user,await this._saveSession(s),await this._notifyAllSubscribers("SIGNED_IN",s)):this._debug(n,"could not get user data, skipping SIGNED_IN notification");}catch(o){console.error("Error getting user data:",o),this._debug(n,"error getting user data, skipping SIGNED_IN notification",o);}else await this._notifyAllSubscribers("SIGNED_IN",s);}catch(s){this._debug(n,"error",s),console.error(s);return}finally{this._debug(n,"end");}}async _callRefreshToken(e){var r,n;if(!e)throw new J;if(this.refreshingDeferred)return this.refreshingDeferred.promise;let s=`#_callRefreshToken(${e.substring(0,5)}...)`;this._debug(s,"begin");try{this.refreshingDeferred=new $r;let{data:i,error:o}=await this._refreshAccessToken(e);if(o)throw o;if(!i.session)throw new J;await this._saveSession(i.session),await this._notifyAllSubscribers("TOKEN_REFRESHED",i.session);let a={data:i.session,error:null};return this.refreshingDeferred.resolve(a),a}catch(i){if(this._debug(s,"error",i),v(i)){let o={data:null,error:i};return Bn(i)||await this._removeSession(),(r=this.refreshingDeferred)===null||r===void 0||r.resolve(o),o}throw (n=this.refreshingDeferred)===null||n===void 0||n.reject(i),i}finally{this.refreshingDeferred=null,this._debug(s,"end");}}async _notifyAllSubscribers(e,r,n=true){let s=`#_notifyAllSubscribers(${e})`;this._debug(s,"begin",r,`broadcast = ${n}`);try{this.broadcastChannel&&n&&this.broadcastChannel.postMessage({event:e,session:r});let i=[],o=Array.from(this.stateChangeEmitters.values()).map(async a=>{try{await a.callback(e,r);}catch(l){i.push(l);}});if(await Promise.all(o),i.length>0){for(let a=0;a<i.length;a+=1)console.error(i[a]);throw i[0]}}finally{this._debug(s,"end");}}async _saveSession(e){this._debug("#_saveSession()",e),this.suppressGetSessionWarning=true,await z(this.storage,`${this.storageKey}-code-verifier`);let r=Object.assign({},e),n=r.user&&r.user.__isUserNotAvailableProxy===true;if(this.userStorage){!n&&r.user&&await ct(this.userStorage,this.storageKey+"-user",{user:r.user});let s=Object.assign({},r);delete s.user;let i=Ei(s);await ct(this.storage,this.storageKey,i);}else {let s=Ei(r);await ct(this.storage,this.storageKey,s);}}async _removeSession(){this._debug("#_removeSession()"),this.suppressGetSessionWarning=false,await z(this.storage,this.storageKey),await z(this.storage,this.storageKey+"-code-verifier"),await z(this.storage,this.storageKey+"-user"),this.userStorage&&await z(this.userStorage,this.storageKey+"-user"),await this._notifyAllSubscribers("SIGNED_OUT",null);}_removeVisibilityChangedCallback(){this._debug("#_removeVisibilityChangedCallback()");let e=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{e&&H()&&window?.removeEventListener&&window.removeEventListener("visibilitychange",e);}catch(r){console.error("removing visibilitychange callback failed",r);}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug("#_startAutoRefresh()");let e=setInterval(()=>this._autoRefreshTokenTick(),nt);this.autoRefreshTicker=e,e&&typeof e=="object"&&typeof e.unref=="function"?e.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(e);let r=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick();},0);this.autoRefreshTickTimeout=r,r&&typeof r=="object"&&typeof r.unref=="function"?r.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(r);}async _stopAutoRefresh(){this._debug("#_stopAutoRefresh()");let e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);let r=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,r&&clearTimeout(r);}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh();}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh();}async _autoRefreshTokenTick(){this._debug("#_autoRefreshTokenTick()","begin");try{await this._acquireLock(0,async()=>{try{let e=Date.now();try{return await this._useSession(async r=>{let{data:{session:n}}=r;if(!n||!n.refresh_token||!n.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}let s=Math.floor((n.expires_at*1e3-e)/nt);this._debug("#_autoRefreshTokenTick()",`access token expires in ${s} ticks, a tick lasts ${nt}ms, refresh threshold is ${Dn} ticks`),s<=Dn&&await this._callRefreshToken(n.refresh_token);})}catch(r){console.error("Auto refresh tick failed with error. This is likely a transient error.",r);}}finally{this._debug("#_autoRefreshTokenTick()","end");}});}catch(e){if(e.isAcquireTimeout||e instanceof jr)this._debug("auto refresh token tick lock not available");else throw e}}async _handleVisibilityChange(){if(this._debug("#_handleVisibilityChange()"),!H()||!window?.addEventListener)return this.autoRefreshToken&&this.startAutoRefresh(),false;try{this.visibilityChangedCallback=async()=>{try{await this._onVisibilityChanged(!1);}catch(e){this._debug("#visibilityChangedCallback","error",e);}},window?.addEventListener("visibilitychange",this.visibilityChangedCallback),await this._onVisibilityChanged(!0);}catch(e){console.error("_handleVisibilityChange",e);}}async _onVisibilityChanged(e){let r=`#_onVisibilityChanged(${e})`;this._debug(r,"visibilityState",document.visibilityState),document.visibilityState==="visible"?(this.autoRefreshToken&&this._startAutoRefresh(),e||(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{if(document.visibilityState!=="visible"){this._debug(r,"acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting");return}await this._recoverAndRefresh();}))):document.visibilityState==="hidden"&&this.autoRefreshToken&&this._stopAutoRefresh();}async _getUrlForProvider(e,r,n){let s=[`provider=${encodeURIComponent(r)}`];if(n?.redirectTo&&s.push(`redirect_to=${encodeURIComponent(n.redirectTo)}`),n?.scopes&&s.push(`scopes=${encodeURIComponent(n.scopes)}`),this.flowType==="pkce"){let[i,o]=await ut(this.storage,this.storageKey),a=new URLSearchParams({code_challenge:`${encodeURIComponent(i)}`,code_challenge_method:`${encodeURIComponent(o)}`});s.push(a.toString());}if(n?.queryParams){let i=new URLSearchParams(n.queryParams);s.push(i.toString());}return n?.skipBrowserRedirect&&s.push(`skip_http_redirect=${n.skipBrowserRedirect}`),`${e}?${s.join("&")}`}async _unenroll(e){try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;return i?this._returnResult({data:null,error:i}):await S(this.fetch,"DELETE",`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _enroll(e){try{return await this._useSession(async r=>{var n,s;let{data:i,error:o}=r;if(o)return this._returnResult({data:null,error:o});let a=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType==="phone"?{phone:e.phone}:e.factorType==="totp"?{issuer:e.issuer}:{}),{data:l,error:c}=await S(this.fetch,"POST",`${this.url}/factors`,{body:a,headers:this.headers,jwt:(n=i?.session)===null||n===void 0?void 0:n.access_token});return c?this._returnResult({data:null,error:c}):(e.factorType==="totp"&&l.type==="totp"&&(!((s=l?.totp)===null||s===void 0)&&s.qr_code)&&(l.totp.qr_code=`data:image/svg+xml;utf-8,${l.totp.qr_code}`),this._returnResult({data:l,error:null}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _verify(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i)return this._returnResult({data:null,error:i});let o=Object.assign({challenge_id:e.challengeId},"webauthn"in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type==="create"?Nc(e.webauthn.credential_response):jc(e.webauthn.credential_response)})}:{code:e.code}),{data:a,error:l}=await S(this.fetch,"POST",`${this.url}/factors/${e.factorId}/verify`,{body:o,headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token});return l?this._returnResult({data:null,error:l}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+a.expires_in},a)),await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED",a),this._returnResult({data:a,error:l}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challenge(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i)return this._returnResult({data:null,error:i});let o=await S(this.fetch,"POST",`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token});if(o.error)return o;let{data:a}=o;if(a.type!=="webauthn")return {data:a,error:null};switch(a.webauthn.type){case "create":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:Oc(a.webauthn.credential_options.publicKey)})})}),error:null};case "request":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:$c(a.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challengeAndVerify(e){let{data:r,error:n}=await this._challenge({factorId:e.factorId});return n?this._returnResult({data:null,error:n}):await this._verify({factorId:e.factorId,challengeId:r.id,code:e.code})}async _listFactors(){var e;let{data:{user:r},error:n}=await this.getUser();if(n)return {data:null,error:n};let s={all:[],phone:[],totp:[],webauthn:[]};for(let i of (e=r?.factors)!==null&&e!==void 0?e:[])s.all.push(i),i.status==="verified"&&s[i.factor_type].push(i);return {data:s,error:null}}async _getAuthenticatorAssuranceLevel(e){var r,n,s,i;if(e)try{let{payload:h}=Nr(e),f=null;h.aal&&(f=h.aal);let m=f,{data:{user:_},error:k}=await this.getUser(e);if(k)return this._returnResult({data:null,error:k});((n=(r=_?.factors)===null||r===void 0?void 0:r.filter(I=>I.status==="verified"))!==null&&n!==void 0?n:[]).length>0&&(m="aal2");let w=h.amr||[];return {data:{currentLevel:f,nextLevel:m,currentAuthenticationMethods:w},error:null}}catch(h){if(v(h))return this._returnResult({data:null,error:h});throw h}let{data:{session:o},error:a}=await this.getSession();if(a)return this._returnResult({data:null,error:a});if(!o)return {data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};let{payload:l}=Nr(o.access_token),c=null;l.aal&&(c=l.aal);let u=c;((i=(s=o.user.factors)===null||s===void 0?void 0:s.filter(h=>h.status==="verified"))!==null&&i!==void 0?i:[]).length>0&&(u="aal2");let p=l.amr||[];return {data:{currentLevel:c,nextLevel:u,currentAuthenticationMethods:p},error:null}}async _getAuthorizationDetails(e){try{return await this._useSession(async r=>{let{data:{session:n},error:s}=r;return s?this._returnResult({data:null,error:s}):n?await S(this.fetch,"GET",`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:n.access_token,xform:i=>({data:i,error:null})}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _approveAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:s},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!s)return this._returnResult({data:null,error:new J});let o=await S(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:s.access_token,body:{action:"approve"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&H()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _denyAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:s},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!s)return this._returnResult({data:null,error:new J});let o=await S(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:s.access_token,body:{action:"deny"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&H()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _listOAuthGrants(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;return n?this._returnResult({data:null,error:n}):r?await S(this.fetch,"GET",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:r.access_token,xform:s=>({data:s,error:null})}):this._returnResult({data:null,error:new J})})}catch(e){if(v(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async r=>{let{data:{session:n},error:s}=r;return s?this._returnResult({data:null,error:s}):n?(await S(this.fetch,"DELETE",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async fetchJwk(e,r={keys:[]}){let n=r.keys.find(a=>a.kid===e);if(n)return n;let s=Date.now();if(n=this.jwks.keys.find(a=>a.kid===e),n&&this.jwks_cached_at+tc>s)return n;let{data:i,error:o}=await S(this.fetch,"GET",`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(o)throw o;return !i.keys||i.keys.length===0||(this.jwks=i,this.jwks_cached_at=s,n=i.keys.find(a=>a.kid===e),!n)?null:n}async getClaims(e,r={}){try{let n=e;if(!n){let{data:h,error:f}=await this.getSession();if(f||!h.session)return this._returnResult({data:null,error:f});n=h.session.access_token;}let{header:s,payload:i,signature:o,raw:{header:a,payload:l}}=Nr(n);r?.allowExpired||gc(i.exp);let c=!s.alg||s.alg.startsWith("HS")||!s.kid||!("crypto"in globalThis&&"subtle"in globalThis.crypto)?null:await this.fetchJwk(s.kid,r?.keys?{keys:r.keys}:r?.jwks);if(!c){let{error:h}=await this.getUser(n);if(h)throw h;return {data:{claims:i,header:s,signature:o},error:null}}let u=mc(s.alg),d=await crypto.subtle.importKey("jwk",c,u,!0,["verify"]);if(!await crypto.subtle.verify(u,d,o,ac(`${a}.${l}`)))throw new ot("Invalid JWT signature");return {data:{claims:i,header:s,signature:o},error:null}}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}};Xn.nextInstanceID={};Li=Xn;});var Lc=E(()=>{Vn();});var Vg,Ui,Mc=E(()=>{Mi();Vg=Li,Ui=Vg;});var Wi=E(()=>{Vn();Mi();Lc();Mc();Ti();at();Oi();});function Mr(t){"@babel/helpers - typeof";return Mr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mr(t)}function tm(t,e){if(Mr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Mr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function rm(t){var e=tm(t,"string");return Mr(e)=="symbol"?e:e+""}function nm(t,e,r){return (e=rm(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function Uc(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function W(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Uc(Object(r),true).forEach(function(n){nm(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Uc(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function am(t){return t.endsWith("/")?t:t+"/"}function lm(t,e){var r,n;let{db:s,auth:i,realtime:o,global:a}=t,{db:l,auth:c,realtime:u,global:d}=e,p={db:W(W({},l),s),auth:W(W({},c),i),realtime:W(W({},u),o),storage:{},global:W(W(W({},d),a),{},{headers:W(W({},(r=d?.headers)!==null&&r!==void 0?r:{}),(n=a?.headers)!==null&&n!==void 0?n:{})}),accessToken:async()=>""};return t.accessToken?p.accessToken=t.accessToken:delete p.accessToken,p}function cm(t){let e=t?.trim();if(!e)throw new Error("supabaseUrl is required.");if(!e.match(/^https?:\/\//i))throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(am(e))}catch{throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}function pm(){if(typeof window<"u")return false;let t=globalThis.process;if(!t)return false;let e=t.version;if(e==null)return false;let r=e.match(/^v(\d+)\./);return r?parseInt(r[1],10)<=18:false}var Gg,Lr,Yg,Xg,Zg,Qg,em,sm,im,om,um,dm,Vt,Zn=E(()=>{fl();Sl();wi();Yl();Wi();wi();Wi();Gg="2.103.2",Lr="";typeof Deno<"u"?Lr="deno":typeof document<"u"?Lr="web":typeof navigator<"u"&&navigator.product==="ReactNative"?Lr="react-native":Lr="node";Yg={"X-Client-Info":`supabase-js-${Lr}/${Gg}`},Xg={headers:Yg},Zg={schema:"public"},Qg={autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,flowType:"implicit"},em={};sm=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),im=()=>Headers,om=(t,e,r)=>{let n=sm(r),s=im();return async(i,o)=>{var a;let l=(a=await e())!==null&&a!==void 0?a:t,c=new s(o?.headers);return c.has("apikey")||c.set("apikey",t),c.has("Authorization")||c.set("Authorization",`Bearer ${l}`),n(i,W(W({},o),{},{headers:c}))}};um=class extends Ui{constructor(t){super(t);}},dm=class{constructor(t,e,r){var n,s;this.supabaseUrl=t,this.supabaseKey=e;let i=cm(t);if(!e)throw new Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",i),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",i),this.storageUrl=new URL("storage/v1",i),this.functionsUrl=new URL("functions/v1",i);let o=`sb-${i.hostname.split(".")[0]}-auth-token`,a={db:Zg,realtime:em,auth:W(W({},Qg),{},{storageKey:o}),global:Xg},l=lm(r??{},a);if(this.storageKey=(n=l.auth.storageKey)!==null&&n!==void 0?n:"",this.headers=(s=l.global.headers)!==null&&s!==void 0?s:{},l.accessToken)this.accessToken=l.accessToken,this.auth=new Proxy({},{get:(u,d)=>{throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(d)} is not possible`)}});else {var c;this.auth=this._initSupabaseAuthClient((c=l.auth)!==null&&c!==void 0?c:{},this.headers,l.global.fetch);}this.fetch=om(e,this._getAccessToken.bind(this),l.global.fetch),this.realtime=this._initRealtimeClient(W({headers:this.headers,accessToken:this._getAccessToken.bind(this)},l.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(u=>this.realtime.setAuth(u)).catch(u=>console.warn("Failed to set initial Realtime auth token:",u)),this.rest=new bl(new URL("rest/v1",i).href,{headers:this.headers,schema:l.db.schema,fetch:this.fetch,timeout:l.db.timeout,urlLengthLimit:l.db.urlLengthLimit}),this.storage=new Gl(this.storageUrl.href,this.headers,this.fetch,r?.storage),l.accessToken||this._listenForAuthEvents();}get functions(){return new fr(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(t){return this.rest.from(t)}schema(t){return this.rest.schema(t)}rpc(t,e={},r={head:false,get:false,count:void 0}){return this.rest.rpc(t,e,r)}channel(t,e={config:{}}){return this.realtime.channel(t,e)}getChannels(){return this.realtime.getChannels()}removeChannel(t){return this.realtime.removeChannel(t)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var t=this,e,r;if(t.accessToken)return await t.accessToken();let{data:n}=await t.auth.getSession();return (e=(r=n.session)===null||r===void 0?void 0:r.access_token)!==null&&e!==void 0?e:t.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:s,storageKey:i,flowType:o,lock:a,debug:l,throwOnError:c},u,d){let p={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new um({url:this.authUrl.href,headers:W(W({},p),u),storageKey:i,autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:s,flowType:o,lock:a,debug:l,throwOnError:c,fetch:d,hasCustomAuthorizationHeader:Object.keys(this.headers).some(h=>h.toLowerCase()==="authorization")})}_initRealtimeClient(t){return new Ft(this.realtimeUrl.href,W(W({},t),{},{params:W(W({},{apikey:this.supabaseKey}),t?.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((t,e)=>{this._handleTokenChanged(t,"CLIENT",e?.access_token);})}_handleTokenChanged(t,e,r){(t==="TOKEN_REFRESHED"||t==="SIGNED_IN")&&this.changedAccessToken!==r?(this.changedAccessToken=r,this.realtime.setAuth(r)):t==="SIGNED_OUT"&&(this.realtime.setAuth(),e=="STORAGE"&&this.auth.signOut(),this.changedAccessToken=void 0);}},Vt=(t,e,r)=>new dm(t,e,r);pm()&&console.warn("\u26A0\uFE0F Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217");});async function Fc(t){let e=Gt(t.env),r=mm(),n=Vt(e.supabaseUrl,e.supabaseAnonKey,{auth:{persistSession:true,detectSessionInUrl:false,flowType:"pkce",storage:r}}),s=await _m({timeoutMs:t.timeoutMs??300*1e3}),i=s.redirectUri;try{let{data:o,error:a}=await n.auth.signInWithOAuth({provider:"github",options:{redirectTo:i,skipBrowserRedirect:!0}});if(a||!o.url)throw new G("oauth_start_failed",a?.message??"Supabase did not return an OAuth URL.");t.onOpen?.({url:o.url,redirectUri:i}),await t.openUrl(o.url);let l=await s.waitForCode(),{data:c,error:u}=await n.auth.exchangeCodeForSession(l);if(u||!c.session?.access_token||!c.session.refresh_token)throw new G("oauth_exchange_failed",u?.message??"Supabase did not return a complete session.");let d=await fm(n,c.session,t.promptMfaCode),p=Hc(e.supabaseUrl);return await et(t.env).set(p,JSON.stringify(d)),{session:d,account:p}}finally{await s.close();}}async function fm(t,e,r){let{data:n,error:s}=await t.auth.mfa.getAuthenticatorAssuranceLevel();if(s)throw new G("mfa_check_failed",s.message);if(n.currentLevel===n.nextLevel||n.nextLevel!=="aal2")return gm(e);let{data:i,error:o}=await t.auth.mfa.listFactors();if(o)throw new G("mfa_factor_lookup_failed",o.message);let a=i.totp.find(d=>d.status==="verified");if(!a)throw new G("mfa_factor_missing","Two-factor authentication is enabled, but no verified TOTP factor was returned.");if(!r)throw new G("mfa_required","Two-factor authentication is required for this account.");let l=(await r("Authenticator code: ")).trim(),{data:c,error:u}=await t.auth.mfa.challengeAndVerify({factorId:a.id,code:l});if(u||!c)throw new G("mfa_verify_failed",u?.message??"Two-factor authentication failed.");return {access_token:c.access_token,refresh_token:c.refresh_token,expires_at:Math.floor(Date.now()/1e3)+c.expires_in,expires_in:c.expires_in,token_type:c.token_type,user:{id:c.user.id,email:c.user.email??void 0}}}function gm(t){return {access_token:t.access_token,refresh_token:t.refresh_token,expires_at:t.expires_at??Math.floor(Date.now()/1e3)+(t.expires_in??3600),expires_in:t.expires_in??void 0,token_type:t.token_type,user:{id:t.user.id,email:t.user.email??void 0}}}async function Bi(t){let e=Gt(t.env),r=await Wc(t.fetch,e,"auth-device-start",{});t.onPending?.({userCode:r.user_code,verificationUri:r.verification_uri,interval:r.interval});let n=Date.now()+r.expires_in*1e3,s=r.interval;for(;Date.now()<=n;){await t.sleep(s*1e3);let i=await Wc(t.fetch,e,"auth-device-token",{device_code:r.device_code},{acceptError:true});if("access_token"in i){let o=Hc(e.supabaseUrl);return await et(t.env).set(o,JSON.stringify(i)),{session:i,account:o}}switch(i.error){case "authorization_pending":s=i.interval??s;break;case "slow_down":s=i.interval??Math.min(s+5,30);break;case "expired_token":throw new ve("expired_token","The device login code expired.");case "access_denied":throw new ve("access_denied","The device login request was denied.");default:throw new ve(i.error,`Device login failed: ${i.error}`)}}throw new ve("expired_token","The device login code expired.")}function Gt(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL??"",r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY??"";if(!e||!r)throw new ve("missing_supabase_config","Missing SUPABASE_URL/SUPABASE_ANON_KEY for CLI login.");return {supabaseUrl:e,supabaseAnonKey:r}}function Hc(t){let e=new URL(t).hostname;return `sb-${e.endsWith(".supabase.co")?e.slice(0,-12):e}-auth-token`}async function Wc(t,e,r,n,s={}){let i=await t(`${e.supabaseUrl}/functions/v1/${r}`,{method:"POST",headers:{"content-type":"application/json",apikey:e.supabaseAnonKey},body:JSON.stringify(n)}),o=await i.json().catch(()=>({}));if(!i.ok&&!s.acceptError)throw new ve(o.error??"request_failed");return o}function mm(){let t=new Map;return {getItem:e=>t.get(e)??null,setItem:(e,r)=>{t.set(e,r);},removeItem:e=>{t.delete(e);}}}async function _m(t){let e=null,r=null,n=false,s=new Promise((l,c)=>{e=l,r=c;}),i=createServer((l,c)=>{wm(l,c,(u,d)=>{n||(n=true,u?r?.(u):e?.(d));});});await new Promise((l,c)=>{i.once("error",c),i.listen(0,"127.0.0.1",()=>{i.off("error",c),l();});});let o=i.address();if(!o||typeof o=="string")throw await Bc(i),new G("callback_server_failed");let a=setTimeout(()=>{n||(n=true,r?.(new G("oauth_timeout","Browser login timed out.")));},t.timeoutMs);return {redirectUri:`http://127.0.0.1:${o.port}/auth/callback`,waitForCode:()=>s,close:async()=>{clearTimeout(a),await Bc(i);}}}function wm(t,e,r){let n=t.headers.host??"127.0.0.1",s=new URL(t.url??"/",`http://${n}`);if(s.pathname!=="/auth/callback"){e.writeHead(404,{"content-type":"text/plain"}),e.end("Not found");return}let i=s.searchParams.get("error")??s.searchParams.get("error_description"),o=s.searchParams.get("code");if(i){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login failed. You can close this window."),r(new G("oauth_denied",i),"");return}if(!o){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login could not verify this browser response."),r(new G("oauth_invalid_callback"),"");return}e.writeHead(200,{"content-type":"text/html; charset=utf-8"}),e.end("<!doctype html><title>Pathrule CLI</title><p>Pathrule CLI is signed in. You can close this window.</p>"),r(null,o);}async function Bc(t){t.listening&&await new Promise(e=>t.close(()=>e()));}var ve,G,Qn=E(()=>{si();Zn();ve=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="DeviceLoginError";}code},G=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BrowserLoginError";}code};});async function Em(t){await new Promise(e=>setTimeout(e,t));}async function Rm(t){try{await mkdir(dirname(t),{recursive:!0,mode:448}),await chmod(dirname(t),448).catch(()=>{});let e=await open(t,"wx",384);await e.writeFile(`${process.pid}:${Date.now()}
48
+ `,"utf8"),await e.close();let r=!1;return async()=>{r||(r=!0,await rm$1(t,{force:!0}).catch(()=>{}));}}catch(e){if(e.code==="EEXIST")return null;throw e}}async function xm(t,e){try{let{stat:r}=await import('fs/promises'),n=await r(t);Date.now()-n.mtimeMs>e&&await rm$1(t,{force:!0});}catch{}}async function Jc(t,e={}){let r=e.timeoutMs??vm,n=e.staleMs??Sm,s=e.lockFile??A(e.env).tokenLockFile,i=Date.now()+r;for(;Date.now()<=i;){let o=await Rm(s);if(o)try{return await t()}finally{await o();}await xm(s,n),await Em(Cm);}throw new Fi}var vm,Sm,Cm,Fi,Kc=E(()=>{V();vm=15e3,Sm=45e3,Cm=100,Fi=class extends Error{constructor(){super("token_refresh_lock_timeout"),this.name="TokenRefreshLockTimeoutError";}};});async function he(t,e=process.env){let r=Qe(t,0,e);try{let n=await readFile(r.userConfigFile,"utf8"),s=JSON.parse(n);if(s&&typeof s=="object"&&s.schema_version===1)return s}catch(n){if(n.code!=="ENOENT")throw n}return {schema_version:1}}async function es(t,e,r=process.env){let n=Qe(t,0,r);await Xc(n.userConfigFile,{...e,schema_version:1});}async function fe(t,e,r=process.env){let s={...await he(t,r),...e,schema_version:1};return await es(t,s,r),s}async function Gc(t,e=process.env){let r=A(e),n={user_id:t,updated_at:new Date().toISOString()};await Xc(r.activeUserFile,n);}async function Yc(t=process.env){await rm$1(A(t).activeUserFile,{force:true});}async function Xc(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:D}),await chmod(r,D).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}var gt=E(()=>{V();});function Zc(t){return t.startsWith(jm)&&t.endsWith(Dm)}async function Se(t=process.env){let e=await Qc(t);return !e||!eu(e.session)?e:Mm(e,t)}async function Qc(t=process.env){let r=await et(t).findAll();for(let n of r)if(Zc(n.account))try{let s=JSON.parse(n.value);if(!s.access_token||!s.refresh_token||!s.user?.id)continue;return {account:n.account,session:s}}catch{}return null}function eu(t){return t.expires_at<=Math.floor(Date.now()/1e3)+Lm}async function Mm(t,e){return Jc(async()=>{let r=await Qc(e);if(r&&!eu(r.session))return r;let n=Um(e),s=Vt(n.supabaseUrl,n.supabaseAnonKey,{auth:{persistSession:!1}}),{data:i,error:o}=await s.auth.refreshSession({refresh_token:t.session.refresh_token});if(o)throw new Ur("refresh_failed",o.message);if(!i.session?.access_token||!i.session.refresh_token||!i.session.user?.id)throw new Ur("refresh_failed","Supabase did not return a complete session.");let a={access_token:i.session.access_token,refresh_token:i.session.refresh_token,expires_at:i.session.expires_at??Math.floor(Date.now()/1e3)+(i.session.expires_in??3600),user:{id:i.session.user.id,email:i.session.user.email??void 0}};return await et(e).set(t.account,JSON.stringify(a)),{account:t.account,session:a}},{env:e})}function Um(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL??"",r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY??"";if(!e||!r)throw new Ur("missing_supabase_config","Missing SUPABASE_URL/SUPABASE_ANON_KEY for CLI session refresh.");return {supabaseUrl:e,supabaseAnonKey:r}}async function Hi(t=process.env){let e=et(t),r=await e.findAll(),n=new Set,s=0;for(let o of r)if(Zc(o.account)){try{let a=JSON.parse(o.value);a.user?.id&&n.add(a.user.id);}catch{}await e.delete(o.account)&&(s+=1);}let i=0;for(let o of n)await rm$1(Qe(o,0,t).userCacheDir,{recursive:true,force:true}),i+=1;return await Yc(t),{removed_sessions:s,purged_user_caches:i}}var jm,Dm,Lm,Ur,Wr=E(()=>{Kc();gt();si();V();Zn();jm="sb-",Dm="-auth-token",Lm=60,Ur=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliSessionError";}code};});async function R(t=process.env){let e=await Se(t);if(!e)throw new Yt("not_authenticated","Pathrule CLI is not signed in.");let r=Gt(t);return {session:e.session,supabase:Vt(r.supabaseUrl,r.supabaseAnonKey,{auth:{persistSession:false},global:{headers:{Authorization:`Bearer ${e.session.access_token}`}}})}}var Yt,q=E(()=>{Zn();Qn();Wr();Yt=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliAuthError";}code};});var gu={};ah(gu,{cliOrgWebUrl:()=>Q,currentCliOrg:()=>j,listCliOrgs:()=>ge,useCliOrg:()=>ns});async function ge(t){let{session:e,supabase:r}=await R(t),{data:n,error:s}=await r.from("organization_members").select("role, organization:organizations ( id, name, slug, plan, subscription_status, trial_status, trial_ends_at, seat_count, paid_extra_seats, trial_seat_cap, beta_referral_credit_cents, beta_referral_activated_count, beta_referral_founder )").eq("user_id",e.user.id);if(s)throw s;let i=await he(e.user.id,t),o=[],a=new Set;for(let l of n??[]){let c=l.organization,u=Array.isArray(c)?c[0]:c;if(!u||a.has(u.id))continue;a.add(u.id);let d=u.subscription_status?String(u.subscription_status):null,p=u.trial_status?String(u.trial_status):null,h=u.trial_ends_at?String(u.trial_ends_at):null,f=r_(d,p,h);o.push({id:u.id,name:u.name,slug:u.slug,plan:u.plan,subscription_status:d,trial_status:p,trial_ends_at:h,seat_count:qe(u.seat_count),paid_extra_seats:qe(u.paid_extra_seats),trial_seat_cap:qe(u.trial_seat_cap),beta_referral_credit_cents:qe(u.beta_referral_credit_cents)??0,beta_referral_activated_count:qe(u.beta_referral_activated_count)??0,beta_referral_founder:u.beta_referral_founder===true,role:l.role,current:i.current_org_id===u.id,billing:{status:d,freeze_kind:f.kind,freeze_reason:f.reason,seats:{active:qe(u.seat_count),trial_cap:qe(u.trial_seat_cap),paid_extra:qe(u.paid_extra_seats)}}});}if(!i.current_org_id&&o.length===1){let l=o[0];l&&(o[0]={...l,current:true});}return o}async function j(t){let e=await ge(t);return e.find(r=>r.current)??e[0]??null}async function ns(t,e){let{session:r}=await R(e),s=(await ge(e)).find(i=>i.id===t||i.slug===t);if(!s)throw new Error("org_not_found");return await fe(r.user.id,{current_org_id:s.id},e),await Gc(r.user.id,e),{...s,current:true}}function Q(t,e,r="home"){let s=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/org/${encodeURIComponent(t.slug)}`;return r==="home"?s:r==="billing"?`${s}/billing`:`${s}/settings${r==="members"?"/members":""}`}function qe(t){return typeof t=="number"&&Number.isFinite(t)?t:null}function r_(t,e,r){return t==="unpaid"||t==="past_due"?{kind:"subscription",reason:"unpaid"}:t==="canceled"?e==="expired"||r&&new Date(r).getTime()<Date.now()?{kind:"subscription",reason:"trial_expired"}:{kind:"subscription",reason:"canceled"}:{kind:"none",reason:null}}var Ce=E(()=>{gt();q();});ch(wa());function ya(t,e,r){return `${e}/.claude.json`}var cr="pathrule";function Bs(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Claude config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("Claude config `mcpServers` must be an object");return e}function ka(t,e){let r=Bs(t),n={...r.mcpServers??{}},s=!(cr in n);return n[cr]=e,{config:{...r,mcpServers:n},wasNew:s}}function ba(t){let e=Bs(t);if(!e.mcpServers||!(cr in e.mcpServers))return {config:e,wasPresent:false};let{[cr]:r,...n}=e.mcpServers;return {config:{...e,mcpServers:n},wasPresent:true}}function va(t){try{return Bs(t).mcpServers?.[cr]??null}catch{return null}}function B(t){return t.code==="PGRST116"?{code:"not_found",message:t.message}:t.code==="42501"?{code:"permission_denied",message:t.message}:{code:"upstream_error",message:t.message}}async function At(t,e){let{data:r,error:n}=await t.rpc("pathrule_check_content_dedup",{p_workspace_id:e.workspaceId,p_kind:e.kind,p_node_id:e.kind==="memory"?e.nodeId??null:null,p_candidate:e.candidate,p_threshold:e.threshold??.65,p_max_similar:e.maxSimilar??5,p_exclude_id:e.excludeId??null});if(n)return {ok:false,error:n.message};let s=r??{duplicate:null,similar:[]};return {ok:true,data:{duplicate:s.duplicate,similar:(s.similar??[]).map(i=>({id:i.id,title:i.title,similarity:typeof i.similarity=="string"?Number(i.similarity):i.similarity}))}}}function Sa(t){return t.code!=="23505"?false:!!t.message?.includes("skills_workspace_slug_unique")}async function Fs(t,e,r){let{data:n,error:s}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(s)return {error:s.message};if(n)return n;let{data:i,error:o}=await t.from("nodes").insert({workspace_id:e,parent_id:null,name:r,type:"folder",relative_path:"/",order_index:0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(o||!i){if(o?.code==="23505"){let{data:a}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(a)return a}return {error:o?.message??"Root node insert failed"}}return i}function Ca(t){let e=t.trim();if(e===""||e==="/")return "/";let n=(e.startsWith("/")?e:"/"+e).replace(/\/+/g,"/");return n==="/"?"/":n.replace(/\/$/,"")}function dh(t,e){return (t==="/"?"":t)+"/"+e.trim()}function ph(t){let e=t.split("/").filter(n=>n.length>0),r=e[e.length-1]??"";return /\.[A-Za-z0-9]{1,8}$/.test(r)?"file":"folder"}async function It(t,e,r){let{data:n,error:s}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path",r).maybeSingle();return s?{error:s.message}:n??null}async function hh(t,e,r,n){let s=Ca(r);if(s==="/"){let d=await It(t,e,"/");return d&&!("error"in d)?d:{error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."}}let i=await It(t,e,s);if(i&&!("error"in i)||i&&"error"in i)return i;let o=await It(t,e,"/");if(!o)return {error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."};if("error"in o)return o;let a=s.split("/").filter(d=>d.length>0),l=ph(s),c=o,u="";for(let d=0;d<a.length;d+=1){let p=a[d];u+="/"+p;let f=d===a.length-1?l:"folder",m=await It(t,e,u);if(m&&"error"in m)return m;if(m){c=m;continue}let{count:_}=await t.from("nodes").select("*",{count:"exact",head:true}).eq("workspace_id",e).eq("parent_id",c.id),{data:k,error:b}=await t.from("nodes").insert({workspace_id:e,parent_id:c.id,name:p,type:f,relative_path:dh(c.relative_path,p),order_index:_??0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(b||!k){if(b?.code==="23505"){let w=await It(t,e,u);if(w&&!("error"in w)){c=w;continue}}return {error:b?.message??`Insert failed at ${u}`}}c=k;}return c}async function Ot(t,e,r,n){let s=Ca(r),i=await It(t,e,"/");if(i&&"error"in i)return i;if(!i){let{data:o,error:a}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(a)return {error:a.message};let l=o?.name??"Workspace",c=await Fs(t,e,l);if("error"in c)return c}return hh(t,e,s)}function Ea(t){return {id:t.id,workspaceId:t.workspace_id,nodeId:t.node_id,title:t.title,content:t.content,source:t.source,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}function fh(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} memory/rule(s) with a similar title.`,detail:{similar:t}}}async function Ra(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ot(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.title.trim(),s=await At(t.supabase,{workspaceId:r.workspace_id,kind:"memory",nodeId:r.id,candidate:n});if(s.ok&&s.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A memory titled "${s.data.duplicate.title}" already exists at ${e.node_path}. Use update_memory, pick a different title, or pass allow_duplicate: true to insert anyway.`,detail:{existing_id:s.data.duplicate.id,existing_title:s.data.duplicate.title,similar:s.ok?s.data.similar:[]}}};let{data:i,error:o}=await t.supabase.from("memories").insert({workspace_id:r.workspace_id,node_id:r.id,title:n,content:e.content,source:e.source??"claude",created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!i)return {ok:false,error:B(o??{message:"insert failed"})};let a=s.ok?fh(s.data.similar):null;return a?{ok:true,data:Ea(i),warnings:[a]}:{ok:true,data:Ea(i)}}function gh(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} rule(s) with a similar name.`,detail:{similar:t}}}function mh(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,content:t.content,scopeType:t.scope_type,priority:t.priority,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}async function xa(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ot(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),s=await At(t.supabase,{workspaceId:r.workspace_id,kind:"rule",candidate:n});if(s.ok&&s.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A rule named "${s.data.duplicate.title}" already exists in this workspace. Use update_rule, pick a different name, or pass allow_duplicate: true.`,detail:{existing_id:s.data.duplicate.id,existing_name:s.data.duplicate.title,similar:s.ok?s.data.similar:[]}}};let{data:i,error:o}=await t.supabase.from("rules").insert({workspace_id:r.workspace_id,name:n,content:e.content,scope_type:e.scope_type,priority:e.priority,created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!i)return {ok:false,error:B(o??{message:"insert failed"})};let a=mh(i),{error:l}=await t.supabase.from("node_rules").insert({node_id:r.id,rule_id:a.id});if(l)return await t.supabase.from("rules").delete().eq("id",a.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${l.message}`}};let c=s.ok?gh(s.data.similar):null;return c?{ok:true,data:a,warnings:[c]}:{ok:true,data:a}}function _h(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,description:t.description,content:t.content,source:t.source,githubUrl:t.github_url,version:t.version,tags:t.tags,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at,contentFetchedAt:t.content_fetched_at}}async function Pa(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ot(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),s=await At(t.supabase,{workspaceId:r.workspace_id,kind:"skill",candidate:n,maxSimilar:0});if(s.ok&&s.data.duplicate)return {ok:false,error:{code:"duplicate",message:`A skill with this name already exists in this workspace: "${s.data.duplicate.title}". Use update_skill or pick a different name.`,detail:{existing_id:s.data.duplicate.id,existing_name:s.data.duplicate.title}}};let i=e.source??"manual",{data:o,error:a}=await t.supabase.from("skills").insert({workspace_id:r.workspace_id,name:n,description:e.description,content:e.content,source:i,github_url:e.github_url??null,tags:e.tags??[],created_by:t.userId,last_edited_by:t.userId,content_fetched_at:i==="github_ref"?new Date().toISOString():null}).select("*").single();if(a||!o)return Sa(a??{})?{ok:false,error:{code:"duplicate",message:"A skill with this name already exists in this workspace. Use update_skill or pick a different name."}}:{ok:false,error:B(a??{message:"insert failed"})};let l=_h(o),{error:c}=await t.supabase.from("node_skills").insert({node_id:r.id,skill_id:l.id,is_active:true});return c?(await t.supabase.from("skills").delete().eq("id",l.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${c.message}`}}):{ok:true,data:l}}var wh=/^[A-Za-z0-9_-]+/,yh=/[\s([{'"`]/;function qs(t){return t.trim().toLowerCase()}function Ta(t){let e=bh(t),r=[];for(let n=0;n<e.length-2;n+=1){if(e[n]!==":"||e[n+1]!==":")continue;let s=n===0?"":e[n-1]??"";if(s&&!yh.test(s))continue;let i=e.slice(n+2).match(wh);if(!i?.[0])continue;let o=i[0];r.push({raw:o,name:qs(o),start:n,end:n+2+o.length}),n+=1+o.length;}return kh(r)}function kh(t){let e=new Set,r=[];for(let n of t)e.has(n.name)||(e.add(n.name),r.push(n));return r}function bh(t){let e="",r=0,n=false,s=false;for(;r<t.length;){if(t.startsWith("```",r)){n=!n,e+=" ",r+=3;continue}let i=t[r]??"";if(!n&&i==="`"){s=!s,e+=" ",r+=1;continue}e+=n||s?i===`
49
49
  `?`
50
50
  `:" ":i,r+=1;}return e}var Ia=[{tag:"frontend",patterns:[/\/packages\/app\b/i,/\b(frontend|front-end|renderer|react|tsx|jsx|component|components|screen|page|view)\b/i]},{tag:"backend",patterns:[/\/packages\/mcp-server\b/i,/\b(backend|server|service|api|ipc|worker|queue)\b/i]},{tag:"database",patterns:[/\b(database|postgres|postgrest|db|sql|rpc|rls|schema)\b/i,/\/supabase\b/i]},{tag:"infra",patterns:[/\b(infra|deploy|deployment|cloudflare|r2|notarize|notarized|updater)\b/i]},{tag:"test",patterns:[/\b(test|tests|vitest|playwright|typecheck|lint|eslint|smoke)\b/i]},{tag:"docs",patterns:[/\b(docs|readme|claude\.md|agents\.md|llms\.txt|documentation)\b/i]},{tag:"config",patterns:[/\b(config|env|toml|yaml|yml|json|settings|preferences)\b/i]},{tag:"ui",patterns:[/\b(ui|ux|modal|popover|dialog|button|badge|tab|tree|layout|design|onboarding)\b/i,/\b(tasarim|tasarım|ekran|sayfa|gorunum|görünüm|yerlesim|yerleşim|rozet)\b/i]},{tag:"design-system",patterns:[/\b(design system|design-system|tokens?|theme|tailwind|shadcn|visual language)\b/i]},{tag:"i18n",patterns:[/\b(i18n|translation|translations|locale|localization|hardcoded)\b/i]},{tag:"electron",patterns:[/\b(electron|main process|renderer|tray|native menu)\b/i]},{tag:"mcp",patterns:[/\b(mcp|model context protocol|get_context|read_memory|tool surface)\b/i]},{tag:"hook",patterns:[/\b(hook|hooks|pretooluse|posttooluse|userpromptsubmit|sessionstart)\b/i]},{tag:"router",patterns:[/\b(router|routing|route|deterministic_route|ai-route)\b/i]},{tag:"performance",patterns:[/\b(performance|latency|timeout|telemetry|cache|optimize|hiz|hız)\b/i]},{tag:"supabase",patterns:[/\b(supabase|edge function|edge-function)\b/i,/\/supabase\b/i]},{tag:"edge-function",patterns:[/\b(edge function|edge-function|functions\/[a-z0-9_-]+)\b/i]},{tag:"rls",patterns:[/\b(rls|row level security|policy|policies)\b/i]},{tag:"auth",patterns:[/\b(auth|jwt|session|login|keychain|oauth)\b/i]},{tag:"billing",patterns:[/\b(billing|subscription|checkout|invoice|payment|usage limit)\b/i]},{tag:"stripe",patterns:[/\b(stripe|webhook|checkout session|paymentintent)\b/i]},{tag:"migration",patterns:[/\b(migration|migrations|schema change|alter table)\b/i]},{tag:"security",patterns:[/\b(security|secret|service role|rls|jwt|permission|access check)\b/i]},{tag:"release",patterns:[/\b(release|ship|publish|version bump|notarized|signed)\b/i]},{tag:"tree",patterns:[/\b(tree|collapse|expand|node tree|treetoolbar)\b/i]},{tag:"suggestions",patterns:[/\b(suggestion|suggestions|suggestionstab|refresh suggestion)\b/i]},{tag:"modal",patterns:[/\b(modal|dialog|popover|sheet)\b/i]},{tag:"skill-package",patterns:[/\b(skill package|skill-package|skillpackagetree|skillpackageviewer)\b/i]},{tag:"workspace",patterns:[/\b(workspace|project root|repo root|node path|root path)\b/i]},{tag:"activity",patterns:[/\b(activity|activities|recent activity|log_activity|activity log)\b/i]},{tag:"cache",patterns:[/\b(cache|cached|etag|warm|cold|ttl)\b/i]}],vh=new Set(Ia.map(t=>t.tag));function Sh(t){let e=t.trim().toLowerCase().replace(/[_\s]+/g,"-").replace(/[^a-z0-9-]/g,"");return vh.has(e)?e:null}function Aa(t){let e=`${t.path??""} ${t.text??""}`,r=new Set;for(let n of t.existingTags??[]){let s=Sh(n);s&&r.add(s);}for(let n of Ia)n.patterns.some(s=>s.test(e))&&r.add(n.tag);return Array.from(r).slice(0,t.limit??8)}function Xe(t,e){let r=Aa({existingTags:t?Array.from(t):[],limit:e.limit});return r.length>0?r:Aa(e)}function Ch(t){let e=Array.isArray(t.skill_files)?t.skill_files:t.skill_files?[t.skill_files]:[];return (e.find(n=>n.path==="SKILL.md")??e.find(n=>n.role==="primary"))?.content??t.content??""}async function $t(t,e){let[r,n,s,i]=await Promise.all([t.supabase.from("nodes").select("id, relative_path").eq("workspace_id",e.workspace_id).eq("status","active"),t.supabase.from("memories").select("id, title, node_id, semantic_tags").eq("workspace_id",e.workspace_id).eq("status","active").order("created_at",{ascending:true}),t.supabase.from("node_rules").select("node_id, rules(id, name, content, scope_type, priority, semantic_tags)"),t.supabase.from("node_skills").select("node_id, is_active, skills(id, name, description, source, tags, semantic_tags)").eq("is_active",true)]);if(r.error)return {ok:false,error:B(r.error)};if(n.error)return {ok:false,error:B(n.error)};if(s.error)return {ok:false,error:B(s.error)};if(i.error)return {ok:false,error:B(i.error)};let o=new Map;for(let u of r.data??[])o.set(u.id,u.relative_path);let a=new Map;function l(u){let d=a.get(u);return d||(d={memories:[],rules:[],skills:[]},a.set(u,d)),d}for(let u of n.data??[])l(u.node_id).memories.push({id:u.id,title:u.title,semantic_tags:Xe(u.semantic_tags,{text:u.title,path:o.get(u.node_id)})});for(let u of s.data??[]){let d=u.rules,p=Array.isArray(d)?d[0]:d;if(!p)continue;let h=p,f=u.node_id;l(f).rules.push({id:h.id,name:h.name,scope_type:h.scope_type,priority:h.priority,semantic_tags:Xe(h.semantic_tags,{text:`${h.name} ${h.content??""}`,path:o.get(f)})});}for(let u of i.data??[]){let d=u.skills,p=Array.isArray(d)?d[0]:d;if(!p)continue;let h=p,f=u.node_id;l(f).skills.push({id:h.id,name:h.name,source:h.source,semantic_tags:Xe(h.semantic_tags,{text:`${h.name} ${h.description??""}`,path:o.get(f),existingTags:h.tags})});}let c=[];for(let[u,d]of a.entries()){if(e.exclude_node_id&&u===e.exclude_node_id)continue;let p=o.get(u);p&&(d.memories.length===0&&d.rules.length===0&&d.skills.length===0||c.push({node_id:u,relative_path:p,memories:d.memories,rules:d.rules,skills:d.skills}));}return c.sort((u,d)=>u.relative_path.localeCompare(d.relative_path)),{ok:true,data:c}}function Eh(t,e=160){let r=t.replace(/`[^`]*`/g,"").replace(/#+\s*/g,"").replace(/[*_~]+/g,"").trim(),n=r.indexOf("."),s=n>0&&n<e?r.slice(0,n+1):r.slice(0,e);return s.length<r.length?`${s}\u2026`:s}async function Rh(t,e,r){let n=Ta(r??"");if(n.length===0)return {invokedSkills:[],missingInvokedSkills:[]};let{data:s,error:i}=await t.from("skills").select("id, name, description, content, source, github_url, skill_files(path, content, role)").eq("workspace_id",e).is("deleted_at",null);if(i)throw new Error(`skill invocation lookup failed: ${i.message}`);let o=new Map;for(let c of s??[]){let u=c;if(!u.name)continue;let d=qs(u.name);o.set(d,[...o.get(d)??[],c]);}let a=[],l=[];for(let c of n){let u=o.get(c.name)??[];if(u.length===0){l.push({name:c.name,reason:"not_found"});continue}if(u.length>1){l.push({name:c.name,reason:"duplicate"});continue}let d=u[0];a.push({id:d.id,name:d.name,description:d.description,content:Ch(d),source:d.source,githubUrl:d.github_url,nodeRelativePath:null});}return {invokedSkills:a,missingInvokedSkills:l}}async function hn(t,e){let r=await Rh(t.supabase,e.workspace_id,e.user_intent),{data:n,error:s}=await t.supabase.from("nodes").select("id, name, relative_path").eq("workspace_id",e.workspace_id).eq("relative_path",e.relative_path).maybeSingle();if(s)return {ok:false,error:B(s)};if(!n){let h=await $t(t,{workspace_id:e.workspace_id});return {ok:true,data:{resolved_workspace_path:e.relative_path||"/",node:null,memories:[],rules:[],skills:[],workspace_overview:h.ok?h.data:[],invoked_skills:r.invokedSkills.length>0?r.invokedSkills:void 0,missing_invoked_skills:r.missingInvokedSkills.length>0?r.missingInvokedSkills:void 0}}}let i=n.id,[o,a,l,c]=await Promise.all([t.supabase.from("memories").select("id, title, content, semantic_tags").eq("node_id",i).eq("status","active").order("created_at",{ascending:true}),t.supabase.from("node_rules").select("rules(id, name, content, scope_type, priority, semantic_tags)").eq("node_id",i),t.supabase.from("node_skills").select("skills(id, name, description, source, tags, semantic_tags)").eq("node_id",i).eq("is_active",true),$t(t,{workspace_id:e.workspace_id,exclude_node_id:i})]);if(o.error)return {ok:false,error:B(o.error)};if(a.error)return {ok:false,error:B(a.error)};if(l.error)return {ok:false,error:B(l.error)};let u=(o.data??[]).map(h=>({id:h.id,title:h.title,preview:Eh(h.content??""),semantic_tags:Xe(h.semantic_tags,{text:`${h.title} ${(h.content??"").slice(0,1e3)}`,path:n.relative_path})})),d=[];for(let h of a.data??[]){let f=h.rules,m=Array.isArray(f)?f[0]:f;if(!m)continue;let _=m;d.push({id:_.id,name:_.name,scope_type:_.scope_type,priority:_.priority,semantic_tags:Xe(_.semantic_tags,{text:`${_.name} ${_.content??""}`,path:n.relative_path})});}let p=[];for(let h of l.data??[]){let f=h.skills,m=Array.isArray(f)?f[0]:f;if(!m)continue;let _=m;p.push({id:_.id,name:_.name,description:_.description,source:_.source,semantic_tags:Xe(_.semantic_tags,{text:`${_.name} ${_.description??""}`,path:n.relative_path,existingTags:_.tags})});}return {ok:true,data:{resolved_workspace_path:e.relative_path||n.relative_path,node:{id:i,name:n.name,relative_path:n.relative_path},memories:u,rules:d,skills:p,workspace_overview:c.ok?c.data:[],invoked_skills:r.invokedSkills.length>0?r.invokedSkills:void 0,missing_invoked_skills:r.missingInvokedSkills.length>0?r.missingInvokedSkills:void 0}}}async function Oa(t){if(t.recipientUserIds.length===0)return {ok:true,skipped:"empty_recipients"};let{error:e}=await t.supabase.rpc("emit_notification",{p_event_type:t.eventType,p_workspace_id:t.workspaceId,p_actor_user_id:t.actorUserId,p_payload:t.payload,p_recipient_user_ids:t.recipientUserIds});return e?(console.warn(`[notifications:emit] ${t.eventType} failed:`,e.message),{ok:false,error:e.message}):{ok:true}}async function $a(t,e,r=null){let{data:n}=await t.from("workspaces").select("organization_id").eq("id",e).maybeSingle();if(!n)return [];let{data:s,error:i}=await t.from("organization_members").select("user_id, role").eq("organization_id",n.organization_id).in("role",["owner","admin"]);if(i||!s)return [];let o=new Set;for(let a of s)r!=null&&a.user_id===r||o.add(a.user_id);return Array.from(o)}async function xh(t,e,r){let n=e==="memory"?"memories":"rules",s=e==="memory"?"title":"name",{data:i}=await t.from(n).select(`created_by, ${s}`).eq("id",r).maybeSingle();return i?{creatorId:i.created_by??null,title:i[s]??""}:{creatorId:null,title:""}}function zs(t){return {id:t.id,workspaceId:t.workspace_id,suggestionId:t.suggestion_id,subjectType:t.subject_type,subjectId:t.subject_id,formulaId:t.formula_id,status:t.status,requestedByUserId:t.requested_by_user_id,claimedByAi:t.claimed_by_ai,claimedAt:t.claimed_at,resolvedAt:t.resolved_at,resolvedNote:t.resolved_note,createdAt:t.created_at,updatedAt:t.updated_at,brief:t.brief??{}}}async function Na(t,e){let r=e.include_in_progress?["pending","in_progress"]:["pending"],{data:n,error:s}=await t.supabase.from("suggestion_refreshes").select("id, subject_type, subject_id, formula_id, status, created_at, brief").eq("workspace_id",e.workspace_id).in("status",r).order("created_at",{ascending:true});return s?{ok:false,error:B(s)}:{ok:true,data:(n??[]).map(a=>{let l=a.brief??{};return {id:a.id,subjectType:a.subject_type,subjectId:a.subject_id,subjectTitle:l.subject?.title??"(unknown)",nodePath:l.subject?.nodePath??"/",formulaId:a.formula_id,humanReason:l.signal?.humanReason??a.formula_id,status:a.status,createdAt:a.created_at,hasProposedPatch:!!l.proposedPatch?.newBody}})}}async function ja(t,e){let{data:r,error:n}=await t.supabase.from("suggestion_refreshes").select("*").eq("id",e.refresh_id).maybeSingle();if(n)return {ok:false,error:B(n)};if(!r)return {ok:false,error:{code:"not_found",message:`Refresh ${e.refresh_id} not found`}};let s=zs(r);if(s.status==="pending"){let i=new Date().toISOString(),{data:o,error:a}=await t.supabase.from("suggestion_refreshes").update({status:"in_progress",claimed_at:i,claimed_by_ai:e.claimed_by??null}).eq("id",e.refresh_id).eq("status","pending").select("*").maybeSingle();if(a)return {ok:false,error:B(a)};if(o)return {ok:true,data:zs(o)}}return {ok:true,data:s}}async function Da(t,e){let r=new Date().toISOString(),{data:n,error:s}=await t.supabase.from("suggestion_refreshes").update({status:e.status,resolved_at:r,resolved_note:e.note??null,...e.claimed_by?{claimed_by_ai:e.claimed_by}:{}}).eq("id",e.refresh_id).select("*").maybeSingle();if(s)return {ok:false,error:B(s)};if(!n)return {ok:false,error:{code:"not_found",message:`Refresh ${e.refresh_id} not found`}};let i=n;i.suggestion_id&&await t.supabase.from("suggestions").update({resolved_at:r}).eq("id",i.suggestion_id).is("resolved_at",null);let o=e.status==="applied"?30:365,{data:a}=await t.supabase.auth.getUser(),l=a?.user?.id;if(l&&await t.supabase.from("suggestion_dismissals").insert({workspace_id:i.workspace_id,subject_type:i.subject_type,subject_id:i.subject_id,formula_id:i.formula_id,action:"keep",dismiss_count:1,next_recheck_at:new Date(Date.now()+o*864e5).toISOString(),user_id:l}),e.status==="applied"||e.status==="rejected")try{let c=e.status==="applied"?"suggestion.applied":"suggestion.rejected",u=i.subject_type,d=i.subject_id,p=i.workspace_id,{creatorId:h,title:f}=await xh(t.supabase,u,d),m=await $a(t.supabase,p,t.userId),_=new Set;h&&h!==t.userId&&_.add(h);for(let w of m)_.add(w);let k={subject_type:u,subject_title:f};e.status==="rejected"&&e.note&&(k.reason=e.note);let b=await Oa({supabase:t.supabase,eventType:c,workspaceId:p,actorUserId:t.userId,payload:k,recipientUserIds:Array.from(_)});b.ok||console.warn(`[notifications:emit] suggestion resolution failed: ${b.error}`);}catch(c){console.warn("[notifications:emit] suggestion resolution threw:",c);}return {ok:true,data:zs(i)}}var Ph="<!-- managed by Pathrule \u2014 do not edit this file manually. Cloud state is authoritative. Local edits are overwritten. -->",Th=["# Pathrule Workspace","","Pathrule is this workspace's shared memory, rule, and skill layer for AI agents.","Use it as a smart reminder system, not a full-context dump.","","## Context Policy","","- Pathrule is the first knowledge layer for this workspace. Use hook context first: metadata, relevant rule titles, path reminders, and filename/skill matches.","- `::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.",'- Do not reflexively call `pathrule_get_context` before every small known-path code task. For discovery, inventory, architecture, recent activity, or "list/show/find/where/which" prompts (Turkish: listele, g\xF6ster, bul, nerede, hangi, neler), call it before any grep/read/fallback when hook context is missing, ambiguous, or stale.',"- Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call `pathrule_get_context` first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant.","- When calling `pathrule_get_context`, pass `cwd`, `user_intent`, and `omit_protocol: true`; this file already contains the protocol.","- Read full bodies with `pathrule_read_memory`, `pathrule_read_rule`, or `pathrule_read_skill` when a surfaced title/id is relevant.","- Treat existing local edits as protected user/team work: inspect overlaps, never revert unrelated changes, and keep edits scoped.","- Obey every surfaced rule. If a user request conflicts with a Pathrule rule, warn before taking action.","","## Writes","","- Pathrule cloud is the source of truth. Do not create local memory files such as `MEMORY.md` or `~/.claude/memory/`.","- Use path-first writes for lasting project knowledge: `pathrule_write_memory`, `pathrule_write_rule`, and `pathrule_write_skill` take the most specific workspace-relative `node_path`.","- Do not edit materialized local Pathrule files as the source of truth. This includes `.codex/skills/**/SKILL.md`, `.claude/skills/**`, rendered companion files, and synced skill/memory/rule files. Read only for orientation; create/update cloud records with the Pathrule MCP write/update tools.","- After any file-modifying response, call `pathrule_log_activity` once with domain, action, scope, subjects, files_touched, and a concise task_summary.",""].join(`
51
51
  `);function La(t){let e=[Ph,"",Th].join(`
@@ -53,14 +53,14 @@ ${k}`}var xc=E(()=>{});function Pc({error:t,options:e}){var r,n,s;let{publicKey:
53
53
 
54
54
  `);return e.endsWith(`
55
55
  `)?e:`${e}
56
- `}async function Ah(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function Ua(t){await Ah(t.supabase,t.workspaceId);let r={supabase:t.supabase},[n,s]=await Promise.all([hn(r,{workspace_id:t.workspaceId,relative_path:"/"}),$t(r,{workspace_id:t.workspaceId})]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!s.ok)throw new Error(`getWorkspaceOverview failed: ${s.error.message}`);let i=[];try{let l=new Date(Date.now()-12096e5).toISOString(),{data:c}=await t.supabase.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",t.workspaceId).eq("status","active").gte("created_at",l).order("created_at",{ascending:!1}).limit(8);c&&(i=c);}catch{}let o=La({rootContext:{memories:n.data.memories.map(l=>({id:l.id,title:l.title,preview:l.preview})),rules:n.data.rules,skills:n.data.skills.map(l=>({id:l.id,name:l.name,description:l.description,source:l.source}))},overview:s.data,recentActivities:i.length>0?i:void 0}),a=true;try{let{data:l,error:c}=await t.supabase.from("claude_md_snapshots").select("body").eq("workspace_id",t.workspaceId).maybeSingle();if(c)console.warn("[claude-md] snapshot read skipped:",c.message);else if(a=!l||l.body!==o,a){let{error:u}=await t.supabase.from("claude_md_snapshots").upsert({workspace_id:t.workspaceId,body:o,rendered_by:t.userId,rendered_at:new Date().toISOString()});u&&console.warn("[claude-md] snapshot upsert skipped:",u.message);}}catch{}return {body:o,snapshotChanged:a}}function Ma(t){let e=Js(t),r=2166136261;for(let n=0;n<e.length;n++)r^=e.charCodeAt(n),r=Math.imul(r,16777619);return (r>>>0).toString(16).padStart(8,"0")}function Js(t){return t===null?"null":Array.isArray(t)?"["+t.map(Js).join(",")+"]":typeof t=="object"?"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+Js(t[n])).join(",")+"}":JSON.stringify(t)}var Wa={PreToolUse:"preToolUse",PostToolUse:"postToolUse",UserPromptSubmit:"beforeSubmitPrompt",SessionStart:"sessionStart",SessionEnd:"sessionEnd",Stop:"stop",SubagentStop:"subagentStop",Notification:null,PreCompact:null,PostCompact:null};var Ba={Edit:"Write",Bash:"Shell"},Fa={PreToolUse:"PreToolUse",PostToolUse:"PostToolUse",UserPromptSubmit:"UserPromptSubmit",SessionStart:"SessionStart",SessionEnd:null,Stop:"Stop",SubagentStop:null,Notification:null,PreCompact:null,PostCompact:null},Ha={Edit:"apply_patch",Write:"apply_patch"};var Ks=null;function Ih(t){return !!(t.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(t)||t.startsWith("\\\\"))}function Vs(t){if(typeof t!="string"||t.length===0)throw new Error("setHookCommand requires a non-empty string");if(t.startsWith("~"))throw new Error(`setHookCommand requires an absolute path; got ${t}. Tilde paths are not expanded by Codex's hook spawn (no shell), so they ENOENT silently. Resolve homedir() in the caller.`);if(!Ih(t))throw new Error(`setHookCommand requires an absolute path; got ${t}. Relative paths (e.g. bin/pathrule-hook.js) resolve against the AI client's working directory at hook spawn time, which is not stable.`);Ks=t;}function Gs(){if(Ks===null)throw new Error("Pathrule hook command not configured. Each Node entry point (electron main, mcp-server, build scripts) must call setHookCommand(absolutePath) at startup before invoking any merger (ensureClaudeSettingsHook, ensureCodexHooks, etc.).");return Ks}var Oh=new Set(["Read","Write","Grep","Delete","Task","Shell"]),$h=new Set(["SessionStart","PreToolUse","PostToolUse","Stop","SubagentStop","SessionEnd"]);function Ys(t){return t.map(e=>({matcher:e.matcher,hooks:e.hooks.map(r=>({...r}))}))}function Nh(t){if(!t.matcher)return t;let e=new Set,r=[];for(let n of t.matcher.split("|")){let s=Ba[n]??n;Oh.has(s)&&(e.has(s)||(e.add(s),r.push(s)));}return r.length===0?null:{...t,matcher:r.join("|")}}function Ue(t){let e=Gs();return {hooks:{SessionStart:[{hooks:[{type:"command",command:e}]}],PreToolUse:[{matcher:"Read|Edit|Write|Grep|Glob|Bash",hooks:[{type:"command",command:e}]}],PostToolUse:[{matcher:"Read|Edit|Write|Bash",hooks:[{type:"command",command:e}]}],UserPromptSubmit:[{hooks:[{type:"command",command:e}]}],Stop:[{hooks:[{type:"command",command:e}]}],SubagentStop:[{hooks:[{type:"command",command:e}]}],SessionEnd:[{hooks:[{type:"command",command:e}]}]}}}function Xs(t){let e={};for(let[r,n]of Object.entries(t.hooks)){let s=r;if(!$h.has(s))continue;let i=Wa[s];if(!i||!n||n.length===0)continue;let o=Ys(n).map(Nh).filter(a=>a!==null);o.length!==0&&(e[i]=o);}return e}function qa(t){return `${JSON.stringify({version:1,hooks:Xs(t)},null,2)}
56
+ `}async function Ah(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function Ma(t){await Ah(t.supabase,t.workspaceId);let r={supabase:t.supabase},[n,s]=await Promise.all([hn(r,{workspace_id:t.workspaceId,relative_path:"/"}),$t(r,{workspace_id:t.workspaceId})]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!s.ok)throw new Error(`getWorkspaceOverview failed: ${s.error.message}`);let i=[];try{let l=new Date(Date.now()-12096e5).toISOString(),{data:c}=await t.supabase.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",t.workspaceId).eq("status","active").gte("created_at",l).order("created_at",{ascending:!1}).limit(8);c&&(i=c);}catch{}let o=La({rootContext:{memories:n.data.memories.map(l=>({id:l.id,title:l.title,preview:l.preview})),rules:n.data.rules,skills:n.data.skills.map(l=>({id:l.id,name:l.name,description:l.description,source:l.source}))},overview:s.data,recentActivities:i.length>0?i:void 0}),a=true;try{let{data:l,error:c}=await t.supabase.from("claude_md_snapshots").select("body").eq("workspace_id",t.workspaceId).maybeSingle();if(c)console.warn("[claude-md] snapshot read skipped:",c.message);else if(a=!l||l.body!==o,a){let{error:u}=await t.supabase.from("claude_md_snapshots").upsert({workspace_id:t.workspaceId,body:o,rendered_by:t.userId,rendered_at:new Date().toISOString()});u&&console.warn("[claude-md] snapshot upsert skipped:",u.message);}}catch{}return {body:o,snapshotChanged:a}}function Ua(t){let e=Js(t),r=2166136261;for(let n=0;n<e.length;n++)r^=e.charCodeAt(n),r=Math.imul(r,16777619);return (r>>>0).toString(16).padStart(8,"0")}function Js(t){return t===null?"null":Array.isArray(t)?"["+t.map(Js).join(",")+"]":typeof t=="object"?"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+Js(t[n])).join(",")+"}":JSON.stringify(t)}var Wa={PreToolUse:"preToolUse",PostToolUse:"postToolUse",UserPromptSubmit:"beforeSubmitPrompt",SessionStart:"sessionStart",SessionEnd:"sessionEnd",Stop:"stop",SubagentStop:"subagentStop",Notification:null,PreCompact:null,PostCompact:null};var Ba={Edit:"Write",Bash:"Shell"},Fa={PreToolUse:"PreToolUse",PostToolUse:"PostToolUse",UserPromptSubmit:"UserPromptSubmit",SessionStart:"SessionStart",SessionEnd:null,Stop:"Stop",SubagentStop:null,Notification:null,PreCompact:null,PostCompact:null},Ha={Edit:"apply_patch",Write:"apply_patch"};var Ks=null;function Ih(t){return !!(t.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(t)||t.startsWith("\\\\"))}function Vs(t){if(typeof t!="string"||t.length===0)throw new Error("setHookCommand requires a non-empty string");if(t.startsWith("~"))throw new Error(`setHookCommand requires an absolute path; got ${t}. Tilde paths are not expanded by Codex's hook spawn (no shell), so they ENOENT silently. Resolve homedir() in the caller.`);if(!Ih(t))throw new Error(`setHookCommand requires an absolute path; got ${t}. Relative paths (e.g. bin/pathrule-hook.js) resolve against the AI client's working directory at hook spawn time, which is not stable.`);Ks=t;}function Gs(){if(Ks===null)throw new Error("Pathrule hook command not configured. Each Node entry point (electron main, mcp-server, build scripts) must call setHookCommand(absolutePath) at startup before invoking any merger (ensureClaudeSettingsHook, ensureCodexHooks, etc.).");return Ks}var Oh=new Set(["Read","Write","Grep","Delete","Task","Shell"]),$h=new Set(["SessionStart","PreToolUse","PostToolUse","Stop","SubagentStop","SessionEnd"]);function Ys(t){return t.map(e=>({matcher:e.matcher,hooks:e.hooks.map(r=>({...r}))}))}function Nh(t){if(!t.matcher)return t;let e=new Set,r=[];for(let n of t.matcher.split("|")){let s=Ba[n]??n;Oh.has(s)&&(e.has(s)||(e.add(s),r.push(s)));}return r.length===0?null:{...t,matcher:r.join("|")}}function Me(t){let e=Gs();return {hooks:{SessionStart:[{hooks:[{type:"command",command:e}]}],PreToolUse:[{matcher:"Read|Edit|Write|Grep|Glob|Bash",hooks:[{type:"command",command:e}]}],PostToolUse:[{matcher:"Read|Edit|Write|Bash",hooks:[{type:"command",command:e}]}],UserPromptSubmit:[{hooks:[{type:"command",command:e}]}],Stop:[{hooks:[{type:"command",command:e}]}],SubagentStop:[{hooks:[{type:"command",command:e}]}],SessionEnd:[{hooks:[{type:"command",command:e}]}]}}}function Xs(t){let e={};for(let[r,n]of Object.entries(t.hooks)){let s=r;if(!$h.has(s))continue;let i=Wa[s];if(!i||!n||n.length===0)continue;let o=Ys(n).map(Nh).filter(a=>a!==null);o.length!==0&&(e[i]=o);}return e}function qa(t){return `${JSON.stringify({version:1,hooks:Xs(t)},null,2)}
57
57
  `}var jh=new Set(["Bash","apply_patch"]),Dh=new Set(["SessionStart","PreToolUse","PostToolUse","UserPromptSubmit","Stop"]);function Lh(t){if(!t.matcher)return t;let e=new Set,r=[];for(let n of t.matcher.split("|")){let s=Ha[n]??n;jh.has(s)&&(e.has(s)||(e.add(s),r.push(s)));}return r.length===0?null:{...t,matcher:r.join("|")}}function Zs(t){let e={};for(let[r,n]of Object.entries(t.hooks)){let s=r;if(!Dh.has(s))continue;let i=Fa[s];if(!i||!n||n.length===0)continue;let o=Ys(n).map(Lh).filter(a=>a!==null);if(o.length===0&&n.some(a=>!a.matcher)){e[i]=Ys(n).filter(a=>!a.matcher);continue}o.length!==0&&(e[i]=o);}return e}function za(t){return `${JSON.stringify({hooks:Zs(t)},null,2)}
58
- `}var fn={before:["Pathrule is the first knowledge layer for this workspace. Hooks auto-inject path-scoped memory/rule titles + session digest on every tool call and user prompt (M12). Trust that context before falling back to files, git, or general knowledge.","`::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.","Do NOT reflexively call pathrule_get_context before every small known-path code task. DO call pathrule_get_context(cwd, user_intent, omit_protocol: true) before any grep/read/fallback when hook context is missing, ambiguous, stale, or the user asks for discovery, inventory, architecture, recent activity, or list/show/find/where/which style questions (including Turkish: listele, g\xF6ster, bul, nerede, hangi, neler).","Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call pathrule_get_context first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant. It's a single unified tool (M13): the router classifies intent and returns a depth-appropriate response - minimal for ui_tweak/new_feature on a known path, focused for bug_fix/refactor, deep for debug/discovery.","For discovery/inventory questions, treat `subtree_memory_index`, `discovery_signal`, and `semantic_candidates` as Pathrule evidence before filesystem fallback. Semantic candidates are not answers or rules: call pathrule_read_memory(id) and inspect the body before citing or following one.","The response tells you `next_required_action.primary_files` when the router is confident \u2014 edit those directly. For full memory/rule bodies: pathrule_read_memory(id) / pathrule_read_rule(id).","Obey every rule the hooks surface (advisory + strict). Apply every memory whose title looks relevant \u2014 fetch the body only when you want to cite or follow it.","Treat existing local edits as protected user/team work: inspect before touching overlapping files, never revert unrelated changes, and keep edits scoped to the user's request."],during:["Path-first writes: write_memory / write_rule / write_skill take a node_path string (e.g. '/apps/mobile'). Target the most specific path; missing nodes auto-create.","Never use local file-based memory (~/.claude/memory/, MEMORY.md). Pathrule is the single source of truth for all persistent knowledge.","After every write, summarise what you did in natural language \u2014 don't paste raw tool JSON."],after:["Log EVERY file-modifying response with pathrule_log_activity. Trigger: did you modify files? \u2192 log it. Required fields: domain, action, scope, subjects (\u22645 keywords), files_touched, task_summary."]},Ka=Ma(fn);function Va(){let t=["# Pathrule Protocol","","This workspace uses Pathrule MCP. Follow this protocol on EVERY task.","","## BEFORE \u2014 mandatory first steps",""],e=1;for(let r of fn.before)t.push(`${e}. ${r}`),e++;t.push("","## DURING \u2014 constraints while coding","");for(let r of fn.during)t.push(`${e}. ${r}`),e++;t.push("","## AFTER \u2014 mandatory after every file modification","");for(let r of fn.after)t.push(`${e}. ${r}`),e++;return t.push(""),t.join(`
59
- `)}var Uh=["pathrule-hook.js","pathrule_log_activity"];function Mh(){return Ue().hooks}function Wh(){return Xs(Ue())}function Bh(){return Zs(Ue())}function gn(t){return t?Uh.some(e=>t.includes(e)):false}function cr(t){let e=[];for(let r of t){let n=(r.hooks??[]).filter(s=>!gn(s.command));n.length!==0&&e.push({...r,hooks:n});}return e}function mn(t){let e={};if(t&&t.trim().length>0)try{e=JSON.parse(t);}catch{e={_backup:t};}e.hooks||(e.hooks={});let r=false;for(let[n,s]of Object.entries(Mh())){let i=e.hooks[n],o=Array.isArray(i)?i:[],a=o.filter(u=>(u.hooks??[]).some(d=>gn(d.command))),l=cr(o);a.length===s.length&&a.every((u,d)=>{let p=s[d];if(!p)return false;let h=u.hooks,f=p.hooks;return (u.matcher??"")===(p.matcher??"")&&h.length===f.length&&h.every((m,_)=>m.command===f[_]?.command)})||(e.hooks[n]=[...l,...s],r=true);}return {body:JSON.stringify(e,null,2)+`
60
- `,changed:r}}function Ga(t,e){let r={version:1};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={version:1,_backup:t};}typeof r.version!="number"&&(r.version=1),(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,s=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=cr(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,s=true);}let i=Object.keys(r).filter(a=>a!=="version"&&a!=="hooks"),o=Object.keys(r.hooks);return i.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
61
- `,changed:s}}for(let[i,o]of Object.entries(Wh())){let a=r.hooks[i],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(h=>gn(h.command))),u=cr(l);c.length===o.length&&c.every((p,h)=>{let f=o[h];return f?(p.matcher??"")===(f.matcher??"")&&p.hooks.length===f.hooks.length&&p.hooks.every((m,_)=>m.command===f.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[i]=[...u,...o],s=true);}return {body:JSON.stringify(r,null,2)+`
62
- `,changed:s}}function Ya(t,e){let r={};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={_backup:t};}(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,s=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=cr(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,s=true);}let i=Object.keys(r).filter(a=>a!=="hooks"),o=Object.keys(r.hooks);return i.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
63
- `,changed:s}}for(let[i,o]of Object.entries(Bh())){let a=r.hooks[i],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(h=>gn(h.command))),u=cr(l);c.length===o.length&&c.every((p,h)=>{let f=o[h];return f?(p.matcher??"")===(f.matcher??"")&&p.hooks.length===f.hooks.length&&p.hooks.every((m,_)=>m.command===f.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[i]=[...u,...o],s=true);}return {body:JSON.stringify(r,null,2)+`
58
+ `}var fn={before:["Pathrule is the first knowledge layer for this workspace. Hooks auto-inject path-scoped memory/rule titles + session digest on every tool call and user prompt (M12). Trust that context before falling back to files, git, or general knowledge.","`::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.","Do NOT reflexively call pathrule_get_context before every small known-path code task. DO call pathrule_get_context(cwd, user_intent, omit_protocol: true) before any grep/read/fallback when hook context is missing, ambiguous, stale, or the user asks for discovery, inventory, architecture, recent activity, or list/show/find/where/which style questions (including Turkish: listele, g\xF6ster, bul, nerede, hangi, neler).","Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call pathrule_get_context first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant. It's a single unified tool (M13): the router classifies intent and returns a depth-appropriate response - minimal for ui_tweak/new_feature on a known path, focused for bug_fix/refactor, deep for debug/discovery.","For discovery/inventory questions, treat `subtree_memory_index`, `discovery_signal`, and `semantic_candidates` as Pathrule evidence before filesystem fallback. Semantic candidates are not answers or rules: call pathrule_read_memory(id) and inspect the body before citing or following one.","The response tells you `next_required_action.primary_files` when the router is confident \u2014 edit those directly. For full memory/rule bodies: pathrule_read_memory(id) / pathrule_read_rule(id).","Obey every rule the hooks surface (advisory + strict). Apply every memory whose title looks relevant \u2014 fetch the body only when you want to cite or follow it.","Treat existing local edits as protected user/team work: inspect before touching overlapping files, never revert unrelated changes, and keep edits scoped to the user's request."],during:["Path-first writes: write_memory / write_rule / write_skill take a node_path string (e.g. '/apps/mobile'). Target the most specific path; missing nodes auto-create.","Never use local file-based memory (~/.claude/memory/, MEMORY.md). Pathrule is the single source of truth for all persistent knowledge.","After every write, summarise what you did in natural language \u2014 don't paste raw tool JSON."],after:["Log EVERY file-modifying response with pathrule_log_activity. Trigger: did you modify files? \u2192 log it. Required fields: domain, action, scope, subjects (\u22645 keywords), files_touched, task_summary."]},Ka=Ua(fn);function Va(){let t=["# Pathrule Protocol","","This workspace uses Pathrule MCP. Follow this protocol on EVERY task.","","## BEFORE \u2014 mandatory first steps",""],e=1;for(let r of fn.before)t.push(`${e}. ${r}`),e++;t.push("","## DURING \u2014 constraints while coding","");for(let r of fn.during)t.push(`${e}. ${r}`),e++;t.push("","## AFTER \u2014 mandatory after every file modification","");for(let r of fn.after)t.push(`${e}. ${r}`),e++;return t.push(""),t.join(`
59
+ `)}var Mh=["pathrule-hook.js","pathrule_log_activity"];function Uh(){return Me().hooks}function Wh(){return Xs(Me())}function Bh(){return Zs(Me())}function gn(t){return t?Mh.some(e=>t.includes(e)):false}function ur(t){let e=[];for(let r of t){let n=(r.hooks??[]).filter(s=>!gn(s.command));n.length!==0&&e.push({...r,hooks:n});}return e}function mn(t){let e={};if(t&&t.trim().length>0)try{e=JSON.parse(t);}catch{e={_backup:t};}e.hooks||(e.hooks={});let r=false;for(let[n,s]of Object.entries(Uh())){let i=e.hooks[n],o=Array.isArray(i)?i:[],a=o.filter(u=>(u.hooks??[]).some(d=>gn(d.command))),l=ur(o);a.length===s.length&&a.every((u,d)=>{let p=s[d];if(!p)return false;let h=u.hooks,f=p.hooks;return (u.matcher??"")===(p.matcher??"")&&h.length===f.length&&h.every((m,_)=>m.command===f[_]?.command)})||(e.hooks[n]=[...l,...s],r=true);}return {body:JSON.stringify(e,null,2)+`
60
+ `,changed:r}}function Ga(t,e){let r={version:1};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={version:1,_backup:t};}typeof r.version!="number"&&(r.version=1),(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,s=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=ur(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,s=true);}let i=Object.keys(r).filter(a=>a!=="version"&&a!=="hooks"),o=Object.keys(r.hooks);return i.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
61
+ `,changed:s}}for(let[i,o]of Object.entries(Wh())){let a=r.hooks[i],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(h=>gn(h.command))),u=ur(l);c.length===o.length&&c.every((p,h)=>{let f=o[h];return f?(p.matcher??"")===(f.matcher??"")&&p.hooks.length===f.hooks.length&&p.hooks.every((m,_)=>m.command===f.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[i]=[...u,...o],s=true);}return {body:JSON.stringify(r,null,2)+`
62
+ `,changed:s}}function Ya(t,e){let r={};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={_backup:t};}(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,s=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=ur(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,s=true);}let i=Object.keys(r).filter(a=>a!=="hooks"),o=Object.keys(r.hooks);return i.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
63
+ `,changed:s}}for(let[i,o]of Object.entries(Bh())){let a=r.hooks[i],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(h=>gn(h.command))),u=ur(l);c.length===o.length&&c.every((p,h)=>{let f=o[h];return f?(p.matcher??"")===(f.matcher??"")&&p.hooks.length===f.hooks.length&&p.hooks.every((m,_)=>m.command===f.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[i]=[...u,...o],s=true);}return {body:JSON.stringify(r,null,2)+`
64
64
  `,changed:s}}var Xa="# >>> Pathrule managed (codex hook activation) >>>",Qs="# <<< Pathrule managed <<<",Ja=[Xa,"[features]","codex_hooks = true",Qs,""].join(`
65
65
  `);function _n(t,e){let r=(t??"").replace(/\r\n/g,`
66
66
  `),n=r.indexOf(Xa),s=r.indexOf(Qs),i=r;if(n>=0&&s>n){let a=r.slice(s+Qs.length).replace(/^\n+/,"");i=(r.slice(0,n).trimEnd()+(a?`
@@ -69,56 +69,56 @@ ${a}`:"")).trimEnd();}else i=r.trimEnd();if(e?.uninstall===true){let a=i.length>
69
69
  `:"";return {body:a,changed:a!==r}}let o=i.length>0?`${i}
70
70
 
71
71
  ${Ja}`:Ja;return r===o?{body:r,changed:false}:{body:o,changed:true}}var Fh={profile:80,organization:100,workspace:120},Hh=new Set(["pathrule","pathrule admin","pathrule support","pathrule security"]),qh=new Set(["admin","administrator","security","support","system"]),Za=/[\u0000-\u001f\u007f-\u009f]/,zh=/[\u0000-\u001f\u007f-\u009f]/g,Jh=/<\/?[a-z][^>]*>/i,Kh=/(^|\s)(https?:\/\/|javascript:|data:|mailto:)/i,Vh=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i;function Gh(t){return t.replace(/\s+/g," ").trim()}function ei(t,e){if(Za.test(t))return {ok:false,reason:"control_chars"};let r=Gh(t);if(r.length===0)return {ok:false,reason:"empty"};if(Array.from(r).length>Fh[e])return {ok:false,reason:"too_long"};if(Jh.test(r))return {ok:false,reason:"html_like"};if(Kh.test(r))return {ok:false,reason:"url_like"};if(e==="profile"&&Vh.test(r))return {ok:false,reason:"url_like"};let n=r.toLocaleLowerCase("en-US");return Hh.has(n)?{ok:false,reason:"reserved"}:e==="profile"&&qh.has(n)?{ok:false,reason:"reserved"}:{ok:true,value:r}}function Qa(t,e){if(typeof t!="string")return null;let r=ei(t,e);return r.ok?r.value??null:null}function el(t,e=2048){if(typeof t!="string")return null;let r=t.trim();if(!r||r.length>e||Za.test(r))return null;try{let n=new URL(r);return n.protocol!=="http:"&&n.protocol!=="https:"?null:n.toString()}catch{return null}}function wn(t){return t.replace(zh,e=>e===`
72
- `?"\\n":e==="\r"?"\\r":e===" "?"\\t":`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`)}var F={web:"Pathrule Web",desktop:"Pathrule Desktop",cli:"Pathrule CLI"},Ze={web:"Pathrule in your browser. Manage cloud content from anywhere.",desktop:"The complete Pathrule app for macOS, Windows, and Linux.",cli:"Pathrule from your terminal. Headless, scriptable, fast."};var Yh=["event_name","schema_version","occurred_at","surface","host_kind","app_version","os_family","country_iso","pseudonymous_install_id","session_local_id","duration_ms","result","blocking_reason","feature_tag"];function tl(t){let e=new Set(Yh);for(let r of Object.keys(t))if(!e.has(r))throw new Error(`telemetry_field_not_allowed:${r}`)}var M={"claude-code":{id:"claude-code",label:"Claude Code",skillsDir:".claude/skills",detectFile:".claude",supported:true},cursor:{id:"cursor",label:"Cursor",skillsDir:".cursor/skills",detectFile:".cursor",supported:true},windsurf:{id:"windsurf",label:"Windsurf",skillsDir:".windsurf/skills",detectFile:".windsurf",supported:true},codex:{id:"codex",label:"Codex",skillsDir:".codex/skills",detectFile:".codex",supported:true}},yn=["claude-code"];function ti(t){return M[t]??null}function rl(t){let e=[];for(let r of t){let n=ti(r);n&&n.supported&&e.push(n);}return e}var Xh="skill";function kn(t){let e=(t||"").toLowerCase().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e?e.slice(0,80):Xh}function nl(t,e){let r=kn(t),n=e.replace(/-/g,"").slice(0,8);return `${r}-${n}`}var sl="[redacted]",Zh="[redacted-email]",ri="[redacted-path]",Qh=/(authorization|password|secret|token|api[_-]?key|access[_-]?token|refresh[_-]?token|pair[_-]?token|session|cookie|env|environment|cache|content|body|file[_-]?content)/i,ef=/(^|[_-])(path|paths|cwd|directory|root|repo|local_root|workspace_root)([_-]|$)/i,tf=/\b(?:Bearer\s+)?[A-Za-z0-9._~+/=-]{24,}\b/g,rf=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,nf=/(?:~|\/Users\/[^/\s]+|\/home\/[^/\s]+|\/var\/folders\/[^\s"']+|\/tmp\/[^\s"']+)/g,sf=/[A-Za-z]:\\(?:[^\\\s"']+\\?)+/g;function ni(t,e=""){return t&&(af(e)?ri:of(e)?sl:t.replace(rf,Zh).replace(nf,ri).replace(sf,ri).replace(tf,sl))}function il(t){let e=JSON.stringify(t),r=[/Bearer\s+[A-Za-z0-9._~+/=-]+/i,/access[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/refresh[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/pair[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/\/Users\/[^/"']+/,/\/home\/[^/"']+/,/[A-Za-z]:\\[^"']+/];for(let n of r)if(n.test(e))throw new Error(`support bundle contains sensitive material matching ${n}`)}function of(t){return Qh.test(t)}function af(t){return ef.test(t)}var Me={free:{workspaces:1,memories:50,rules:50,seatsExtra:0,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0},starter:{workspaces:3,memories:2500,rules:2500,seatsExtra:-1,basePriceMonthly:12,basePriceYearly:10,perSeatMonthly:6},pro:{workspaces:-1,memories:1e4,rules:1e4,seatsExtra:-1,basePriceMonthly:24,basePriceYearly:20,perSeatMonthly:6},business:{workspaces:-1,memories:5e4,rules:5e4,seatsExtra:-1,basePriceMonthly:48,basePriceYearly:40,perSeatMonthly:6},enterprise:{workspaces:-1,memories:-1,rules:-1,seatsExtra:-1,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0}};function ol(t,e){if(!t)return {failure:{error:"organization_not_found"},billingImpact:bn(),billingRequirement:null};if(t.plan==="free")return {failure:{error:"free_plan_invites_disabled"},billingImpact:bn(),billingRequirement:null};if(["past_due","unpaid","canceled"].includes(t.subscription_status??""))return {failure:{error:"subscription_not_invitable"},billingImpact:bn(),billingRequirement:null};if(t.trial_status==="active"&&t.trial_seat_cap){let r=e+1,n=t.paid_extra_seats??0,s=t.trial_seat_cap+n,i=r>t.trial_seat_cap,o=Math.max(0,r-t.trial_seat_cap),a={seat_effect:i?r>s?"paid_extra_required":"paid_extra_available":"included",may_use_paid_extra_seat:i,active_seats_before:e,target_active_seats:r,included_seat_cap:t.trial_seat_cap,current_paid_extra_seats:n,required_paid_extra_seats:o};return r>s?{failure:null,billingImpact:a,billingRequirement:{targetSeats:r,requiredPaidExtraSeats:o,giftSeatCap:t.trial_seat_cap,currentPaidExtraSeats:n}}:{failure:null,billingImpact:a,billingRequirement:null}}return {failure:null,billingImpact:bn(),billingRequirement:null}}function bn(){return {seat_effect:"not_applicable",may_use_paid_extra_seat:false}}V();var ff={"claude-code":["CLAUDE.md",".claude/rules/pathrule-protocol.md",".claude/settings.json"],cursor:[".cursorrules",".cursor/rules/pathrule-protocol.mdc",".cursor/hooks.json"],codex:["codex.md","AGENTS.md",".codex/hooks.json",".codex/config.toml"],windsurf:[".windsurfrules",".windsurf/rules/pathrule-protocol.md"]};async function gf(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function We(t){let e=Object.keys(M);return (await Promise.all(e.map(async n=>{for(let s of ff[n])if(await gf(join(t,s)))return n;return null}))).filter(n=>n!==null)}function vn(t){let e=new Set(Object.keys(M)),r=(t.selected??[]).filter(n=>typeof n=="string"&&e.has(n));return r.length>0?r:t.detected.length>0?[...t.detected]:[...t.fallback]}Qn();Mr();q();var Um=new Map([["-h","--help"],["-v","--version"]]);function tu(t,e=process.env){let r=[],n={json:false,yes:false,noOpen:false,deviceCode:false,browserCallback:false,help:false,version:false,color:e.NO_COLOR!=="1"&&e.NO_COLOR!=="true",interactive:e.CI!=="true"};for(let o of t)switch(Um.get(o)??o){case "--json":n.json=true,n.color=false,n.interactive=false;break;case "--yes":n.yes=true;break;case "--no-open":n.noOpen=true;break;case "--device-code":n.deviceCode=true;break;case "--browser-callback":n.browserCallback=true;break;case "--help":n.help=true;break;case "--version":n.version=true;break;case "--no-color":n.color=false;break;default:r.push(o);break}let s=Mm(r);return {command:s[0]??"help",positional:s,flags:n}}function Mm(t){let e=t[0],r=t[1];return !e?.startsWith("/")||!r||!["memory","rule","skill","search"].includes(r)?t:[r,...t.slice(2),e]}gt();q();V();var Fm=randomUUID(),Hm=20,qm=1500;function ou(t){return t==="telemetry.enabled"||t==="telemetry.id"}async function au(t,e){if(t==="telemetry.enabled")return Ji(e,await Ki(e));let r=await rs(e);return {key:t,value:r.pseudonymous_install_id,source:"config",configurable:true}}async function lu(t,e){let r=Ym(t);if(r===null)throw new Error("invalid_telemetry_enabled");let n=await rs(e);return await Vi({...n,telemetry_enabled:r},e),Ji(e,{...n,telemetry_enabled:r})}async function cu(t){let r={...await rs(t),pseudonymous_install_id:randomUUID()};return await Vi(r,t),{key:"telemetry.id",value:r.pseudonymous_install_id,source:"config",configurable:true}}async function Br(t,e){let r=Ji(t,await Ki(t));if(!r.value)return {recorded:false,reason:r.source};let n=await rs(t),s={event_name:e.eventName,schema_version:1,occurred_at:new Date().toISOString(),surface:"cli",host_kind:"cli-bridge",app_version:e.appVersion,os_family:process.platform,pseudonymous_install_id:n.pseudonymous_install_id,session_local_id:Fm,result:e.result,...typeof e.durationMs=="number"?{duration_ms:e.durationMs}:{},...e.blockingReason?{blocking_reason:e.blockingReason}:{},...e.featureTag?{feature_tag:e.featureTag}:{}};tl(s),Xm(s);let i=du(t);return await mkdir(dirname(i),{recursive:true,mode:D}),await chmod(dirname(i),D).catch(()=>{}),await appendFile(i,`${JSON.stringify(s)}
73
- `,{encoding:"utf8",mode:O}),await chmod(i,O).catch(()=>{}),await Vm(t).catch(()=>{}),{recorded:true}}async function zi(t,e){try{let r=zm(e.command,e.exitCode),n=e.exitCode===0?"ok":e.exitCode===64?"blocked":"failed";r&&await Br(t,{eventName:r,result:n,appVersion:e.appVersion,durationMs:e.durationMs,featureTag:Jm(e.command),blockingReason:e.exitCode===64?"usage_or_preflight_blocked":void 0});let s=Km(e.command,e.exitCode);s&&await Br(t,{eventName:"dead_end_seen",result:"blocked",appVersion:e.appVersion,durationMs:e.durationMs,featureTag:s.featureTag,blockingReason:s.blockingReason});}catch{}}function zm(t,e){switch(t){case "help":case "version":case "status":return "surface_viewed";case "setup":return e===0?"cli_setup_completed":"cli_setup_started";case "doctor":return e===0?null:"cli_doctor_failed";case "bridge":return e===0?"cli_bridge_pair_succeeded":"cli_bridge_pair_started";case "sync":return e===0?"agent_sync_succeeded":null;case "billing":case "team":case "upgrade":case "reactivate":case "open":return "web_admin_route_opened_from_cli";case "preflight":return e===0?null:"cli_preflight_blocked";default:return null}}function Jm(t){return t==="bridge"?"cli_bridge":t==="setup"?"cli_setup":t==="doctor"?"cli_doctor":t==="sync"?"agent_sync":["billing","team","upgrade","reactivate","open"].includes(t)?"web_route":t==="preflight"?"preflight":"surface"}function Km(t,e){return e===0?null:t==="doctor"?{featureTag:"cli_doctor",blockingReason:"doctor_cannot_repair"}:t==="preflight"?{featureTag:"preflight",blockingReason:"preflight_blocked"}:t==="setup"?{featureTag:"cli_setup",blockingReason:"cli_setup_incomplete"}:t==="bridge"?{featureTag:"cli_bridge",blockingReason:"bridge_pair_failed"}:["billing","team","upgrade","reactivate","open"].includes(t)?{featureTag:"web_route",blockingReason:"web_route_not_opened"}:null}function Ji(t,e){return t.CI==="true"?{key:"telemetry.enabled",value:false,source:"ci",configurable:false}:t.NO_TELEMETRY==="1"?{key:"telemetry.enabled",value:false,source:"env",configurable:false}:typeof e?.telemetry_enabled=="boolean"?{key:"telemetry.enabled",value:e.telemetry_enabled,source:"config",configurable:true}:{key:"telemetry.enabled",value:true,source:"default",configurable:true}}async function rs(t){let e=await Ki(t);if(e)return e;let r={schema_version:1,pseudonymous_install_id:randomUUID()};return await Vi(r,t),r}async function Ki(t){try{let e=JSON.parse(await readFile(uu(t),"utf8"));if(e&&typeof e=="object"&&e.schema_version===1&&typeof e.pseudonymous_install_id=="string")return e}catch(e){if(e.code!=="ENOENT")throw e}return null}async function Vi(t,e){let r=uu(e);await mkdir(dirname(r),{recursive:true,mode:D}),await chmod(dirname(r),D).catch(()=>{});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(t,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,r);}function uu(t){return join(A(t).home,"telemetry.json")}function du(t){return join(A(t).logsDir,"telemetry-events.jsonl")}async function Vm(t){let e=Gm(t);if(!e)return;let r=du(t),n;try{n=(await readFile(r,"utf8")).split(`
74
- `).filter(Boolean);}catch(a){if(a.code==="ENOENT")return;throw a}if(n.length===0)return;let s=n.slice(0,Hm).map(a=>JSON.parse(a)),i=new AbortController,o=setTimeout(()=>i.abort(),qm);try{let a=await fetch(e.url,{method:"POST",headers:{"Content-Type":"application/json",apikey:e.anonKey,Authorization:`Bearer ${e.anonKey}`},body:JSON.stringify({events:s}),signal:i.signal});if(!a.ok)return;let l=await a.json().catch(()=>null),c=typeof l?.accepted=="number"?l.accepted:s.length,u=Math.max(0,Math.min(c,s.length)),d=n.slice(u).join(`
72
+ `?"\\n":e==="\r"?"\\r":e===" "?"\\t":`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`)}var F={web:"Pathrule Web",desktop:"Pathrule Desktop",cli:"Pathrule CLI"},Ze={web:"Pathrule in your browser. Manage cloud content from anywhere.",desktop:"The complete Pathrule app for macOS, Windows, and Linux.",cli:"Pathrule from your terminal. Headless, scriptable, fast."};var Yh=["event_name","schema_version","occurred_at","surface","host_kind","app_version","os_family","country_iso","pseudonymous_install_id","session_local_id","duration_ms","result","blocking_reason","feature_tag"];function tl(t){let e=new Set(Yh);for(let r of Object.keys(t))if(!e.has(r))throw new Error(`telemetry_field_not_allowed:${r}`)}var U={"claude-code":{id:"claude-code",label:"Claude Code",skillsDir:".claude/skills",detectFile:".claude",supported:true},cursor:{id:"cursor",label:"Cursor",skillsDir:".cursor/skills",detectFile:".cursor",supported:true},windsurf:{id:"windsurf",label:"Windsurf",skillsDir:".windsurf/skills",detectFile:".windsurf",supported:true},codex:{id:"codex",label:"Codex",skillsDir:".codex/skills",detectFile:".codex",supported:true}},yn=["claude-code"];function ti(t){return U[t]??null}function rl(t){let e=[];for(let r of t){let n=ti(r);n&&n.supported&&e.push(n);}return e}var Xh="skill";function kn(t){let e=(t||"").toLowerCase().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e?e.slice(0,80):Xh}function nl(t,e){let r=kn(t),n=e.replace(/-/g,"").slice(0,8);return `${r}-${n}`}var sl="[redacted]",Zh="[redacted-email]",ri="[redacted-path]",Qh=/(authorization|password|secret|token|api[_-]?key|access[_-]?token|refresh[_-]?token|pair[_-]?token|session|cookie|env|environment|cache|content|body|file[_-]?content)/i,ef=/(^|[_-])(path|paths|cwd|directory|root|repo|local_root|workspace_root)([_-]|$)/i,tf=/\b(?:Bearer\s+)?[A-Za-z0-9._~+/=-]{24,}\b/g,rf=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,nf=/(?:~|\/Users\/[^/\s]+|\/home\/[^/\s]+|\/var\/folders\/[^\s"']+|\/tmp\/[^\s"']+)/g,sf=/[A-Za-z]:\\(?:[^\\\s"']+\\?)+/g;function ni(t,e=""){return t&&(af(e)?ri:of(e)?sl:t.replace(rf,Zh).replace(nf,ri).replace(sf,ri).replace(tf,sl))}function il(t){let e=JSON.stringify(t),r=[/Bearer\s+[A-Za-z0-9._~+/=-]+/i,/access[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/refresh[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/pair[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/\/Users\/[^/"']+/,/\/home\/[^/"']+/,/[A-Za-z]:\\[^"']+/];for(let n of r)if(n.test(e))throw new Error(`support bundle contains sensitive material matching ${n}`)}function of(t){return Qh.test(t)}function af(t){return ef.test(t)}var Ue={free:{workspaces:1,memories:50,rules:50,seatsExtra:0,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0},starter:{workspaces:3,memories:2500,rules:2500,seatsExtra:-1,basePriceMonthly:12,basePriceYearly:10,perSeatMonthly:6},pro:{workspaces:-1,memories:1e4,rules:1e4,seatsExtra:-1,basePriceMonthly:24,basePriceYearly:20,perSeatMonthly:6},business:{workspaces:-1,memories:5e4,rules:5e4,seatsExtra:-1,basePriceMonthly:48,basePriceYearly:40,perSeatMonthly:6},enterprise:{workspaces:-1,memories:-1,rules:-1,seatsExtra:-1,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0}};function ol(t,e){if(!t)return {failure:{error:"organization_not_found"},billingImpact:bn(),billingRequirement:null};if(t.plan==="free")return {failure:{error:"free_plan_invites_disabled"},billingImpact:bn(),billingRequirement:null};if(["past_due","unpaid","canceled"].includes(t.subscription_status??""))return {failure:{error:"subscription_not_invitable"},billingImpact:bn(),billingRequirement:null};if(t.trial_status==="active"&&t.trial_seat_cap){let r=e+1,n=t.paid_extra_seats??0,s=t.trial_seat_cap+n,i=r>t.trial_seat_cap,o=Math.max(0,r-t.trial_seat_cap),a={seat_effect:i?r>s?"paid_extra_required":"paid_extra_available":"included",may_use_paid_extra_seat:i,active_seats_before:e,target_active_seats:r,included_seat_cap:t.trial_seat_cap,current_paid_extra_seats:n,required_paid_extra_seats:o};return r>s?{failure:null,billingImpact:a,billingRequirement:{targetSeats:r,requiredPaidExtraSeats:o,giftSeatCap:t.trial_seat_cap,currentPaidExtraSeats:n}}:{failure:null,billingImpact:a,billingRequirement:null}}return {failure:null,billingImpact:bn(),billingRequirement:null}}function bn(){return {seat_effect:"not_applicable",may_use_paid_extra_seat:false}}V();var ff={"claude-code":["CLAUDE.md",".claude/rules/pathrule-protocol.md",".claude/settings.json"],cursor:[".cursorrules",".cursor/rules/pathrule-protocol.mdc",".cursor/hooks.json"],codex:["codex.md","AGENTS.md",".codex/hooks.json",".codex/config.toml"],windsurf:[".windsurfrules",".windsurf/rules/pathrule-protocol.md"]};async function gf(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function We(t){let e=Object.keys(U);return (await Promise.all(e.map(async n=>{for(let s of ff[n])if(await gf(join(t,s)))return n;return null}))).filter(n=>n!==null)}function vn(t){let e=new Set(Object.keys(U)),r=(t.selected??[]).filter(n=>typeof n=="string"&&e.has(n));return r.length>0?r:t.detected.length>0?[...t.detected]:[...t.fallback]}Qn();Wr();q();var Wm=new Map([["-h","--help"],["-v","--version"]]);function tu(t,e=process.env){let r=[],n={json:false,yes:false,noOpen:false,deviceCode:false,browserCallback:false,help:false,version:false,color:e.NO_COLOR!=="1"&&e.NO_COLOR!=="true",interactive:e.CI!=="true"};for(let o of t)switch(Wm.get(o)??o){case "--json":n.json=true,n.color=false,n.interactive=false;break;case "--yes":n.yes=true;break;case "--no-open":n.noOpen=true;break;case "--device-code":n.deviceCode=true;break;case "--browser-callback":n.browserCallback=true;break;case "--help":n.help=true;break;case "--version":n.version=true;break;case "--no-color":n.color=false;break;default:r.push(o);break}let s=Bm(r);return {command:s[0]??"help",positional:s,flags:n}}function Bm(t){let e=t[0],r=t[1];return !e?.startsWith("/")||!r||!["memory","rule","skill","search"].includes(r)?t:[r,...t.slice(2),e]}gt();q();V();var qm=randomUUID(),zm=20,Jm=1500;function ou(t){return t==="telemetry.enabled"||t==="telemetry.id"}async function au(t,e){if(t==="telemetry.enabled")return Ji(e,await Ki(e));let r=await rs(e);return {key:t,value:r.pseudonymous_install_id,source:"config",configurable:true}}async function lu(t,e){let r=Zm(t);if(r===null)throw new Error("invalid_telemetry_enabled");let n=await rs(e);return await Vi({...n,telemetry_enabled:r},e),Ji(e,{...n,telemetry_enabled:r})}async function cu(t){let r={...await rs(t),pseudonymous_install_id:randomUUID()};return await Vi(r,t),{key:"telemetry.id",value:r.pseudonymous_install_id,source:"config",configurable:true}}async function Fr(t,e){let r=Ji(t,await Ki(t));if(!r.value)return {recorded:false,reason:r.source};let n=await rs(t),s={event_name:e.eventName,schema_version:1,occurred_at:new Date().toISOString(),surface:"cli",host_kind:"cli-bridge",app_version:e.appVersion,os_family:process.platform,pseudonymous_install_id:n.pseudonymous_install_id,session_local_id:qm,result:e.result,...typeof e.durationMs=="number"?{duration_ms:e.durationMs}:{},...e.blockingReason?{blocking_reason:e.blockingReason}:{},...e.featureTag?{feature_tag:e.featureTag}:{}};tl(s),Qm(s);let i=du(t);return await mkdir(dirname(i),{recursive:true,mode:D}),await chmod(dirname(i),D).catch(()=>{}),await appendFile(i,`${JSON.stringify(s)}
73
+ `,{encoding:"utf8",mode:O}),await chmod(i,O).catch(()=>{}),await Ym(t).catch(()=>{}),{recorded:true}}async function zi(t,e){try{let r=Km(e.command,e.exitCode),n=e.exitCode===0?"ok":e.exitCode===64?"blocked":"failed";r&&await Fr(t,{eventName:r,result:n,appVersion:e.appVersion,durationMs:e.durationMs,featureTag:Vm(e.command),blockingReason:e.exitCode===64?"usage_or_preflight_blocked":void 0});let s=Gm(e.command,e.exitCode);s&&await Fr(t,{eventName:"dead_end_seen",result:"blocked",appVersion:e.appVersion,durationMs:e.durationMs,featureTag:s.featureTag,blockingReason:s.blockingReason});}catch{}}function Km(t,e){switch(t){case "help":case "version":case "status":return "surface_viewed";case "setup":return e===0?"cli_setup_completed":"cli_setup_started";case "doctor":return e===0?null:"cli_doctor_failed";case "bridge":return e===0?"cli_bridge_pair_succeeded":"cli_bridge_pair_started";case "sync":return e===0?"agent_sync_succeeded":null;case "billing":case "team":case "upgrade":case "reactivate":case "open":return "web_admin_route_opened_from_cli";case "preflight":return e===0?null:"cli_preflight_blocked";default:return null}}function Vm(t){return t==="bridge"?"cli_bridge":t==="setup"?"cli_setup":t==="doctor"?"cli_doctor":t==="sync"?"agent_sync":["billing","team","upgrade","reactivate","open"].includes(t)?"web_route":t==="preflight"?"preflight":"surface"}function Gm(t,e){return e===0?null:t==="doctor"?{featureTag:"cli_doctor",blockingReason:"doctor_cannot_repair"}:t==="preflight"?{featureTag:"preflight",blockingReason:"preflight_blocked"}:t==="setup"?{featureTag:"cli_setup",blockingReason:"cli_setup_incomplete"}:t==="bridge"?{featureTag:"cli_bridge",blockingReason:"bridge_pair_failed"}:["billing","team","upgrade","reactivate","open"].includes(t)?{featureTag:"web_route",blockingReason:"web_route_not_opened"}:null}function Ji(t,e){return t.CI==="true"?{key:"telemetry.enabled",value:false,source:"ci",configurable:false}:t.NO_TELEMETRY==="1"?{key:"telemetry.enabled",value:false,source:"env",configurable:false}:typeof e?.telemetry_enabled=="boolean"?{key:"telemetry.enabled",value:e.telemetry_enabled,source:"config",configurable:true}:{key:"telemetry.enabled",value:true,source:"default",configurable:true}}async function rs(t){let e=await Ki(t);if(e)return e;let r={schema_version:1,pseudonymous_install_id:randomUUID()};return await Vi(r,t),r}async function Ki(t){try{let e=JSON.parse(await readFile(uu(t),"utf8"));if(e&&typeof e=="object"&&e.schema_version===1&&typeof e.pseudonymous_install_id=="string")return e}catch(e){if(e.code!=="ENOENT")throw e}return null}async function Vi(t,e){let r=uu(e);await mkdir(dirname(r),{recursive:true,mode:D}),await chmod(dirname(r),D).catch(()=>{});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(t,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,r);}function uu(t){return join(A(t).home,"telemetry.json")}function du(t){return join(A(t).logsDir,"telemetry-events.jsonl")}async function Ym(t){let e=Xm(t);if(!e)return;let r=du(t),n;try{n=(await readFile(r,"utf8")).split(`
74
+ `).filter(Boolean);}catch(a){if(a.code==="ENOENT")return;throw a}if(n.length===0)return;let s=n.slice(0,zm).map(a=>JSON.parse(a)),i=new AbortController,o=setTimeout(()=>i.abort(),Jm);try{let a=await fetch(e.url,{method:"POST",headers:{"Content-Type":"application/json",apikey:e.anonKey,Authorization:`Bearer ${e.anonKey}`},body:JSON.stringify({events:s}),signal:i.signal});if(!a.ok)return;let l=await a.json().catch(()=>null),c=typeof l?.accepted=="number"?l.accepted:s.length,u=Math.max(0,Math.min(c,s.length)),d=n.slice(u).join(`
75
75
  `);await writeFile(r,d?`${d}
76
- `:"",{encoding:"utf8",mode:O}),await chmod(r,O).catch(()=>{});}finally{clearTimeout(o);}}function Gm(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL,r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY;return !e||!r?null:{url:`${e.replace(/\/$/,"")}/functions/v1/telemetry-ingest`,anonKey:r}}function Ym(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function Xm(t){let e=JSON.stringify(t),r=[/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i,/(?:^|["\s])\/Users\/[^"\s]+/,/(?:^|["\s])\/home\/[^"\s]+/,/[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/,/ghp_[A-Za-z0-9_]{20,}/];for(let n of r)if(n.test(e))throw new Error(`telemetry_payload_contains_sensitive_material:${n}`)}var Zm=new Set(["manual","notify","auto"]);function hu(t,e){if(t.CI==="true"||t.NO_UPDATE_CHECK==="1")return {key:"update.policy",value:"manual",source:"ci",configurable:false};let r=Gi(t.PATHRULE_UPDATE_POLICY);if(r)return {key:"update.policy",value:r,source:"env",configurable:false};let n=Gi(e);return n?{key:"update.policy",value:n,source:"config",configurable:true}:{key:"update.policy",value:"notify",source:"default",configurable:true}}function fu(t){return typeof t=="boolean"?{key:"suggestions.desktop",value:t,source:"config",configurable:true}:{key:"suggestions.desktop",value:true,source:"default",configurable:true}}async function mt(t,e){if(ou(t))return au(t,e);if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");try{let{session:r}=await R(e),n=await pe(r.user.id,e);return pu(t,e,n)}catch{return pu(t,e)}}async function Yi(t,e,r){if(t==="telemetry.enabled")return lu(e,r);if(t==="telemetry.id")throw new Error("use_config_reset_telemetry_id");if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");let{session:n}=await R(r);if(t==="update.policy"){let i=Gi(e);if(!i)throw new Error("invalid_update_policy");return await he(n.user.id,{update_policy:i},r),hu(r,i)}let s=Qm(e);if(s===null)throw new Error("invalid_desktop_suggestions");return await he(n.user.id,{desktop_suggestions:s},r),fu(s)}async function Xi(t,e){if(t==="telemetry-id"||t==="telemetry.id")return cu(e);throw new Error("unsupported_config_reset_key")}function Gi(t){if(!t)return null;let e=t.toLowerCase().trim();return Zm.has(e)?e:null}function Qm(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function pu(t,e,r){return t==="update.policy"?hu(e,r?.update_policy):fu(r?.desktop_suggestions)}gt();q();Ce();async function Ee(t){let{session:e,supabase:r}=await R(t),n=await j(t);if(!n)return [];let{data:s,error:i}=await r.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",n.id).is("archived_at",null);if(i)throw i;let o=await pe(e.user.id,t),a=[];for(let l of s??[]){let u=(l.user_workspace_paths??[]).find(d=>d.user_id===e.user.id)??null;a.push({id:l.id,organization_id:l.organization_id,name:l.name,access_mode:l.access_mode,git_remote_url:l.git_remote_url,git_owner:l.git_owner,git_repo:l.git_repo,local_root_path:u?.local_root_path??null,current:o.current_workspace_id===l.id});}if(a.sort((l,c)=>l.name.localeCompare(c.name)),!o.current_workspace_id&&a.length===1){let l=a[0];l&&(a[0]={...l,current:true});}return a}async function U(t){let e=await Ee(t),r=e.find(n=>n.current);return r||(e.length===1?e[0]??null:null)}async function Fr(t,e){let{session:r}=await R(e),s=(await Ee(e)).find(i=>i.id===t||i.name===t);if(!s)throw new Error("workspace_not_found");return await he(r.user.id,{current_workspace_id:s.id},e),{...s,current:true}}async function _t(t,e,r){let{session:n,supabase:s}=await R(r),i=await j(r);if(!i)throw new Error("org_required");let o=ei(t,"workspace");if(!o.ok||!o.value)throw new Error(`unsafe_workspace_name:${o.reason??"invalid"}`);let{data:a,error:l}=await s.from("workspaces").insert({organization_id:i.id,name:o.value,access_mode:"organization",git_remote_url:null,git_provider:null,git_owner:null,git_repo:null,detected_at:null}).select("id, organization_id, name, access_mode").single();if(l||!a)throw new Error(l?.message??"workspace_create_failed");let{error:c}=await s.from("user_workspace_paths").insert({user_id:n.user.id,workspace_id:a.id,local_root_path:e,watcher_enabled:true});if(c)throw new Error(c.message);let u=await Fs(s,a.id,o.value);return await he(n.user.id,{current_org_id:i.id,current_workspace_id:a.id},r),{workspace:{id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,local_root_path:e,current:true},local_root_path:e,root_node_created:!("error"in u)}}async function Re(t,e,r){let{session:n,supabase:s}=await R(r),i=t?await mu(t,r):await U(r);if(!i)throw new Error("workspace_required");let{error:o}=await s.from("user_workspace_paths").upsert({user_id:n.user.id,workspace_id:i.id,local_root_path:e,watcher_enabled:true},{onConflict:"user_id,workspace_id"});if(o)throw o;return await he(n.user.id,{current_org_id:i.organization_id,current_workspace_id:i.id},r),{workspace:{...i,local_root_path:e,current:true},local_root_path:e,previous_local_root_path:i.local_root_path}}async function Hr(t,e){let{session:r,supabase:n}=await R(e),s=t?await mu(t,e):await U(e);if(!s)throw new Error("workspace_required");let{error:i}=await n.from("user_workspace_paths").delete().eq("user_id",r.user.id).eq("workspace_id",s.id);if(i)throw i;return {...s,local_root_path:null}}async function mu(t,e){let n=(await Ee(e)).find(s=>s.id===t||s.name===t);if(!n)throw new Error("workspace_not_found");return n}q();function _u(t,e=false){return e?true:t.length<=1200&&t.split(/\r?\n/).length<=24}function wu(t,e={}){if(e.forceWeb)return {...t.open_targets.find(r=>r.kind==="web"),reason:"forced"};if(e.preferDesktopApp){let r=t.open_targets.find(n=>n.kind==="desktop-app");return r||{...t.open_targets.find(n=>n.kind==="web"),reason:"fallback"}}return t.open_targets[0]??{kind:"web",url:t.url,label:`Open ${t.kind} in Pathrule Web`,reason:"preferred"}}async function qr(t,e,r={}){let n=await r_(e),{supabase:s}=await R(e),i=eo(r.limit),o=a_(r.path);if(t==="memory"){let{data:c,error:u}=await s.from("memories").select("id, title, content, updated_at, nodes(id, relative_path)").eq("workspace_id",n.id).eq("status","active").order("updated_at",{ascending:false}).limit(i*3);if(u)throw u;return (c??[]).map(d=>Zi("memory",n.id,d,e)).filter(d=>Qi(d.path,o)).slice(0,i)}if(t==="rule"){let{data:c,error:u}=await s.from("rules").select("id, name, content, updated_at, node_rules(nodes(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(i*3);if(u)throw u;return (c??[]).map(d=>Zi("rule",n.id,d,e)).filter(d=>Qi(d.path,o)).slice(0,i)}let{data:a,error:l}=await s.from("skills").select("id, name, description, content, updated_at, node_skills(nodes!node_skills_node_id_fkey(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(i*3);if(l)throw l;return (a??[]).map(c=>Zi("skill",n.id,c,e)).filter(c=>Qi(c.path,o)).slice(0,i)}async function to(t,e,r={}){let n=t.trim().toLowerCase();if(!n)throw new Error("search_query_required");let s=r.types?.length?r.types:["memory","rule","skill"];return (await Promise.all(s.map(o=>qr(o,e,{path:r.path,limit:Math.max(eo(r.limit),50)})))).flat().map(o=>({item:o,score:l_(o,n)})).filter(o=>o.score>0).sort((o,a)=>a.score-o.score||(a.item.updated_at??"").localeCompare(o.item.updated_at??"")).slice(0,eo(r.limit)).map(o=>o.item)}async function ro(t,e,r){let n=await qr(t,r,{limit:100}),s=e.toLowerCase(),i=n.find(d=>d.id===e||d.title.toLowerCase()===s);if(!i)throw new Error(`${t}_not_found`);let{supabase:o}=await R(r),a=t==="memory"?"memories":t==="rule"?"rules":"skills",{data:l,error:c}=await o.from(a).select("content").eq("id",i.id).maybeSingle();if(c)throw c;let u=typeof l?.content=="string"?l.content:"";return {...i,content:u}}function wt(t,e,r,n,s){let i=(n.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");return s?`${i}/workspace/${encodeURIComponent(t)}/node/${encodeURIComponent(s)}/${e}/${encodeURIComponent(r)}`:`${i}/workspace/${encodeURIComponent(t)}/${e}/${encodeURIComponent(r)}`}function t_(t,e,r,n){let s=n?`/node/${encodeURIComponent(n)}`:"";return `pathrule://workspace/${encodeURIComponent(t)}${s}/${e}/${encodeURIComponent(r)}`}async function r_(t){let e=await U(t);if(!e)throw new Error("workspace_required");return e}function Zi(t,e,r,n){let s=typeof r.title=="string"?r.title:typeof r.name=="string"?r.name:String(r.id),i=typeof r.content=="string"?r.content:typeof r.description=="string"?r.description:"",o=i_(t,r),a=o_(t,r),l=wt(e,t,String(r.id),n,a);return {id:String(r.id),kind:t,title:s,path:o,node_id:a,preview:c_(i),updated_at:typeof r.updated_at=="string"?r.updated_at:null,url:l,open_targets:[n_(e,t,String(r.id),n,a),s_(e,t,String(r.id),a)]}}function n_(t,e,r,n,s){return {kind:"web",url:wt(t,e,r,n,s),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}function s_(t,e,r,n){return {kind:"desktop-app",url:t_(t,e,r,n),label:`Open ${e} in Pathrule Desktop`,reason:"fallback"}}function i_(t,e){if(t==="memory"){let i=e.nodes;return typeof i?.relative_path=="string"?i.relative_path:null}let s=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.relative_path;return typeof s=="string"?s:null}function o_(t,e){if(t==="memory"){let i=e.nodes;return typeof i?.id=="string"?i.id:null}let s=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.id;return typeof s=="string"?s:null}function a_(t){if(!t)return null;let e=t.trim();return e?e.startsWith("/")?e:`/${e}`:null}function Qi(t,e){return e?t?t===e||t.startsWith(`${e}/`):false:true}function l_(t,e){let r=t.title.toLowerCase(),n=t.preview.toLowerCase(),s=t.path?.toLowerCase()??"",i=0;return r===e&&(i+=100),r.includes(e)&&(i+=30),s.includes(e)&&(i+=15),n.includes(e)&&(i+=10),i}function c_(t){return t.replace(/\s+/g," ").trim().slice(0,160)}function eo(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}q();async function oo(t,e,r){let{session:n,supabase:s}=await R(r),i=await U(r);if(!i)throw new Error("workspace_required");let o={supabase:s,userId:n.user.id,workspaceId:i.id};if(t==="memory"){let c=e,u=await Ra(o,{node_path:Xt(c.path),title:no(c.title,"memory_title_required"),content:so(c.body),source:"manual",allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.title,path:Xt(c.path),url:wt(i.id,t,u.data.id,r),open_targets:[io(i.id,t,u.data.id,r)],content_length:u.data.content.length,source:u.data.source},warnings:u.warnings??[]}}if(t==="rule"){let c=e,u=await xa(o,{node_path:Xt(c.path),name:no(c.name,"rule_name_required"),content:so(c.body),priority:c.priority,scope_type:c.scopeType,allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.name,path:Xt(c.path),url:wt(i.id,t,u.data.id,r),open_targets:[io(i.id,t,u.data.id,r)],content_length:u.data.content.length,priority:u.data.priority,scope_type:u.data.scopeType},warnings:u.warnings??[]}}let a=e,l=await Pa(o,{node_path:Xt(a.path),name:no(a.name,"skill_name_required"),description:ku(a.description),content:so(a.body),source:"manual"});if(!l.ok)throw new Error(l.error.message);return {item:{id:l.data.id,kind:t,title:l.data.name,path:Xt(a.path),url:wt(i.id,t,l.data.id,r),open_targets:[io(i.id,t,l.data.id,r)],content_length:l.data.content.length,description:l.data.description,source:l.data.source},warnings:l.warnings??[]}}function yu(t,e){if(t!=="skill")return "";let r=e,n=ku(r.description)??"Describe when to use this skill.";return ["---",`name: ${r.name.trim()}`,`description: ${n}`,"---","","# Overview","","Explain when this skill should be used.","","## Instructions","","- Add the steps, constraints, and guardrails this skill should enforce.",""].join(`
76
+ `:"",{encoding:"utf8",mode:O}),await chmod(r,O).catch(()=>{});}finally{clearTimeout(o);}}function Xm(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL,r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY;return !e||!r?null:{url:`${e.replace(/\/$/,"")}/functions/v1/telemetry-ingest`,anonKey:r}}function Zm(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function Qm(t){let e=JSON.stringify(t),r=[/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i,/(?:^|["\s])\/Users\/[^"\s]+/,/(?:^|["\s])\/home\/[^"\s]+/,/[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/,/ghp_[A-Za-z0-9_]{20,}/];for(let n of r)if(n.test(e))throw new Error(`telemetry_payload_contains_sensitive_material:${n}`)}var e_=new Set(["manual","notify","auto"]);function hu(t,e){if(t.CI==="true"||t.NO_UPDATE_CHECK==="1")return {key:"update.policy",value:"manual",source:"ci",configurable:false};let r=Gi(t.PATHRULE_UPDATE_POLICY);if(r)return {key:"update.policy",value:r,source:"env",configurable:false};let n=Gi(e);return n?{key:"update.policy",value:n,source:"config",configurable:true}:{key:"update.policy",value:"notify",source:"default",configurable:true}}function fu(t){return typeof t=="boolean"?{key:"suggestions.desktop",value:t,source:"config",configurable:true}:{key:"suggestions.desktop",value:true,source:"default",configurable:true}}async function mt(t,e){if(ou(t))return au(t,e);if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");try{let{session:r}=await R(e),n=await he(r.user.id,e);return pu(t,e,n)}catch{return pu(t,e)}}async function Yi(t,e,r){if(t==="telemetry.enabled")return lu(e,r);if(t==="telemetry.id")throw new Error("use_config_reset_telemetry_id");if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");let{session:n}=await R(r);if(t==="update.policy"){let i=Gi(e);if(!i)throw new Error("invalid_update_policy");return await fe(n.user.id,{update_policy:i},r),hu(r,i)}let s=t_(e);if(s===null)throw new Error("invalid_desktop_suggestions");return await fe(n.user.id,{desktop_suggestions:s},r),fu(s)}async function Xi(t,e){if(t==="telemetry-id"||t==="telemetry.id")return cu(e);throw new Error("unsupported_config_reset_key")}function Gi(t){if(!t)return null;let e=t.toLowerCase().trim();return e_.has(e)?e:null}function t_(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function pu(t,e,r){return t==="update.policy"?hu(e,r?.update_policy):fu(r?.desktop_suggestions)}gt();q();Ce();async function Ee(t){let{session:e,supabase:r}=await R(t),n=await j(t);if(!n)return [];let{data:s,error:i}=await r.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",n.id).is("archived_at",null);if(i)throw i;let o=await he(e.user.id,t),a=[];for(let l of s??[]){let u=(l.user_workspace_paths??[]).find(d=>d.user_id===e.user.id)??null;a.push({id:l.id,organization_id:l.organization_id,name:l.name,access_mode:l.access_mode,git_remote_url:l.git_remote_url,git_owner:l.git_owner,git_repo:l.git_repo,local_root_path:u?.local_root_path??null,current:o.current_workspace_id===l.id});}if(a.sort((l,c)=>l.name.localeCompare(c.name)),!o.current_workspace_id&&a.length===1){let l=a[0];l&&(a[0]={...l,current:true});}return a}async function M(t){let e=await Ee(t),r=e.find(n=>n.current);return r||(e.length===1?e[0]??null:null)}async function Hr(t,e){let{session:r}=await R(e),s=(await Ee(e)).find(i=>i.id===t||i.name===t);if(!s)throw new Error("workspace_not_found");return await fe(r.user.id,{current_workspace_id:s.id},e),{...s,current:true}}async function _t(t,e,r){let{session:n,supabase:s}=await R(r),i=await j(r);if(!i)throw new Error("org_required");let o=ei(t,"workspace");if(!o.ok||!o.value)throw new Error(`unsafe_workspace_name:${o.reason??"invalid"}`);let{data:a,error:l}=await s.from("workspaces").insert({organization_id:i.id,name:o.value,access_mode:"organization",git_remote_url:null,git_provider:null,git_owner:null,git_repo:null,detected_at:null}).select("id, organization_id, name, access_mode").single();if(l||!a)throw new Error(l?.message??"workspace_create_failed");let{error:c}=await s.from("user_workspace_paths").insert({user_id:n.user.id,workspace_id:a.id,local_root_path:e,watcher_enabled:true});if(c)throw new Error(c.message);let u=await Fs(s,a.id,o.value);return await fe(n.user.id,{current_org_id:i.id,current_workspace_id:a.id},r),{workspace:{id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,local_root_path:e,current:true},local_root_path:e,root_node_created:!("error"in u)}}async function Re(t,e,r){let{session:n,supabase:s}=await R(r),i=t?await mu(t,r):await M(r);if(!i)throw new Error("workspace_required");let{error:o}=await s.from("user_workspace_paths").upsert({user_id:n.user.id,workspace_id:i.id,local_root_path:e,watcher_enabled:true},{onConflict:"user_id,workspace_id"});if(o)throw o;return await fe(n.user.id,{current_org_id:i.organization_id,current_workspace_id:i.id},r),{workspace:{...i,local_root_path:e,current:true},local_root_path:e,previous_local_root_path:i.local_root_path}}async function qr(t,e){let{session:r,supabase:n}=await R(e),s=t?await mu(t,e):await M(e);if(!s)throw new Error("workspace_required");let{error:i}=await n.from("user_workspace_paths").delete().eq("user_id",r.user.id).eq("workspace_id",s.id);if(i)throw i;return {...s,local_root_path:null}}async function mu(t,e){let n=(await Ee(e)).find(s=>s.id===t||s.name===t);if(!n)throw new Error("workspace_not_found");return n}q();function _u(t,e=false){return e?true:t.length<=1200&&t.split(/\r?\n/).length<=24}function wu(t,e={}){if(e.forceWeb)return {...t.open_targets.find(r=>r.kind==="web"),reason:"forced"};if(e.preferDesktopApp){let r=t.open_targets.find(n=>n.kind==="desktop-app");return r||{...t.open_targets.find(n=>n.kind==="web"),reason:"fallback"}}return t.open_targets[0]??{kind:"web",url:t.url,label:`Open ${t.kind} in Pathrule Web`,reason:"preferred"}}async function zr(t,e,r={}){let n=await s_(e),{supabase:s}=await R(e),i=eo(r.limit),o=c_(r.path);if(t==="memory"){let{data:c,error:u}=await s.from("memories").select("id, title, content, updated_at, nodes(id, relative_path)").eq("workspace_id",n.id).eq("status","active").order("updated_at",{ascending:false}).limit(i*3);if(u)throw u;return (c??[]).map(d=>Zi("memory",n.id,d,e)).filter(d=>Qi(d.path,o)).slice(0,i)}if(t==="rule"){let{data:c,error:u}=await s.from("rules").select("id, name, content, updated_at, node_rules(nodes(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(i*3);if(u)throw u;return (c??[]).map(d=>Zi("rule",n.id,d,e)).filter(d=>Qi(d.path,o)).slice(0,i)}let{data:a,error:l}=await s.from("skills").select("id, name, description, content, updated_at, node_skills(nodes!node_skills_node_id_fkey(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(i*3);if(l)throw l;return (a??[]).map(c=>Zi("skill",n.id,c,e)).filter(c=>Qi(c.path,o)).slice(0,i)}async function to(t,e,r={}){let n=t.trim().toLowerCase();if(!n)throw new Error("search_query_required");let s=r.types?.length?r.types:["memory","rule","skill"];return (await Promise.all(s.map(o=>zr(o,e,{path:r.path,limit:Math.max(eo(r.limit),50)})))).flat().map(o=>({item:o,score:u_(o,n)})).filter(o=>o.score>0).sort((o,a)=>a.score-o.score||(a.item.updated_at??"").localeCompare(o.item.updated_at??"")).slice(0,eo(r.limit)).map(o=>o.item)}async function ro(t,e,r){let n=await zr(t,r,{limit:100}),s=e.toLowerCase(),i=n.find(d=>d.id===e||d.title.toLowerCase()===s);if(!i)throw new Error(`${t}_not_found`);let{supabase:o}=await R(r),a=t==="memory"?"memories":t==="rule"?"rules":"skills",{data:l,error:c}=await o.from(a).select("content").eq("id",i.id).maybeSingle();if(c)throw c;let u=typeof l?.content=="string"?l.content:"";return {...i,content:u}}function wt(t,e,r,n,s){let i=(n.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");return s?`${i}/workspace/${encodeURIComponent(t)}/node/${encodeURIComponent(s)}/${e}/${encodeURIComponent(r)}`:`${i}/workspace/${encodeURIComponent(t)}/${e}/${encodeURIComponent(r)}`}function n_(t,e,r,n){let s=n?`/node/${encodeURIComponent(n)}`:"";return `pathrule://workspace/${encodeURIComponent(t)}${s}/${e}/${encodeURIComponent(r)}`}async function s_(t){let e=await M(t);if(!e)throw new Error("workspace_required");return e}function Zi(t,e,r,n){let s=typeof r.title=="string"?r.title:typeof r.name=="string"?r.name:String(r.id),i=typeof r.content=="string"?r.content:typeof r.description=="string"?r.description:"",o=a_(t,r),a=l_(t,r),l=wt(e,t,String(r.id),n,a);return {id:String(r.id),kind:t,title:s,path:o,node_id:a,preview:d_(i),updated_at:typeof r.updated_at=="string"?r.updated_at:null,url:l,open_targets:[i_(e,t,String(r.id),n,a),o_(e,t,String(r.id),a)]}}function i_(t,e,r,n,s){return {kind:"web",url:wt(t,e,r,n,s),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}function o_(t,e,r,n){return {kind:"desktop-app",url:n_(t,e,r,n),label:`Open ${e} in Pathrule Desktop`,reason:"fallback"}}function a_(t,e){if(t==="memory"){let i=e.nodes;return typeof i?.relative_path=="string"?i.relative_path:null}let s=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.relative_path;return typeof s=="string"?s:null}function l_(t,e){if(t==="memory"){let i=e.nodes;return typeof i?.id=="string"?i.id:null}let s=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.id;return typeof s=="string"?s:null}function c_(t){if(!t)return null;let e=t.trim();return e?e.startsWith("/")?e:`/${e}`:null}function Qi(t,e){return e?t?t===e||t.startsWith(`${e}/`):false:true}function u_(t,e){let r=t.title.toLowerCase(),n=t.preview.toLowerCase(),s=t.path?.toLowerCase()??"",i=0;return r===e&&(i+=100),r.includes(e)&&(i+=30),s.includes(e)&&(i+=15),n.includes(e)&&(i+=10),i}function d_(t){return t.replace(/\s+/g," ").trim().slice(0,160)}function eo(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}q();async function oo(t,e,r){let{session:n,supabase:s}=await R(r),i=await M(r);if(!i)throw new Error("workspace_required");let o={supabase:s,userId:n.user.id,workspaceId:i.id};if(t==="memory"){let c=e,u=await Ra(o,{node_path:Xt(c.path),title:no(c.title,"memory_title_required"),content:so(c.body),source:"manual",allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.title,path:Xt(c.path),url:wt(i.id,t,u.data.id,r),open_targets:[io(i.id,t,u.data.id,r)],content_length:u.data.content.length,source:u.data.source},warnings:u.warnings??[]}}if(t==="rule"){let c=e,u=await xa(o,{node_path:Xt(c.path),name:no(c.name,"rule_name_required"),content:so(c.body),priority:c.priority,scope_type:c.scopeType,allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.name,path:Xt(c.path),url:wt(i.id,t,u.data.id,r),open_targets:[io(i.id,t,u.data.id,r)],content_length:u.data.content.length,priority:u.data.priority,scope_type:u.data.scopeType},warnings:u.warnings??[]}}let a=e,l=await Pa(o,{node_path:Xt(a.path),name:no(a.name,"skill_name_required"),description:ku(a.description),content:so(a.body),source:"manual"});if(!l.ok)throw new Error(l.error.message);return {item:{id:l.data.id,kind:t,title:l.data.name,path:Xt(a.path),url:wt(i.id,t,l.data.id,r),open_targets:[io(i.id,t,l.data.id,r)],content_length:l.data.content.length,description:l.data.description,source:l.data.source},warnings:l.warnings??[]}}function yu(t,e){if(t!=="skill")return "";let r=e,n=ku(r.description)??"Describe when to use this skill.";return ["---",`name: ${r.name.trim()}`,`description: ${n}`,"---","","# Overview","","Explain when this skill should be used.","","## Instructions","","- Add the steps, constraints, and guardrails this skill should enforce.",""].join(`
77
77
  `)}function Xt(t){let e=t.trim();if(!e)throw new Error("content_path_required");return e.startsWith("/")?e:`/${e}`}function no(t,e){let r=t.trim();if(!r)throw new Error(e);return r}function so(t){let e=t.replace(/\r\n/g,`
78
- `);if(!e.trim())throw new Error("content_body_required");return e}function ku(t){let e=t?.trim();return e||null}function io(t,e,r,n){return {kind:"web",url:wt(t,e,r,n),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}var bu="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",p_=16;function vu(t=p_){if(t<12)throw new Error("bridge_pair_code_too_short");let e=randomBytes(t),r="";for(let n of e)r+=bu[n%bu.length];return r.match(/.{1,4}/g)?.join("-")??r}function Su(t){let e=h_(t);return createHash("sha256").update("pathrule-bridge-pair-v1","utf8").update("\0","utf8").update(ao(t.pairCode),"utf8").update("\0","utf8").update(t.pairVerifier,"utf8").update("\0","utf8").update(e,"utf8").digest("base64url")}function h_(t){return JSON.stringify({daemon_session_id:zr(t.daemonSessionId,"daemon_session_id"),browser_profile_id:zr(t.browserProfileId,"browser_profile_id"),origin:f_(t.origin),user_id:zr(t.userId,"user_id")})}function ao(t){return zr(t,"pair_secret").replace(/[\s-]+/g,"").toUpperCase()}function f_(t){let e=zr(t,"origin"),r=new URL(e);if(r.protocol!=="https:"&&r.hostname!=="localhost")throw new Error("bridge_pair_origin_not_allowed");return r.pathname="",r.search="",r.hash="",r.toString().replace(/\/$/,"")}function zr(t,e){if(typeof t!="string"||t.trim()==="")throw new Error(`bridge_pair_${e}_required`);return t.trim()}V();q();var v_=300*1e3,Q=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BridgePairError";}code};async function co(t){let e=t.user??await ss(t.env,t.verifyReauth!==false),r=vu(),n=new Date(Date.now()+v_).toISOString(),s={schema_version:1,pair_code_hash:Eu(r),user_id:e.user_id,user_email:e.user_email,daemon_session_id:t.daemonSessionId,created_at:new Date().toISOString(),expires_at:n};return await S_(t.env,s),{pair_code:r,expires_at:n,url:`${E_(t.env)}/connect`,daemon_session_id:t.daemonSessionId}}async function Cu(t){let e=await C_(t.env);if(!e)throw new Q("pair_code_missing");if(e.daemon_session_id!==t.daemonSessionId)throw await lo(t.env),new Q("pair_code_stale");if(Date.parse(e.expires_at)<=Date.now())throw await lo(t.env),new Q("pair_code_expired");if(e.pair_code_hash!==Eu(t.pairCode))throw new Q("pair_code_invalid");let r=Su({daemonSessionId:t.daemonSessionId,browserProfileId:t.browserProfileId,origin:t.origin,userId:e.user_id,pairCode:t.pairCode,pairVerifier:t.pairVerifier});return await lo(t.env),{pair_token:r,daemon_session_id:t.daemonSessionId,user_id:e.user_id}}async function ss(t,e=true){let{session:r,supabase:n}=await R(t);if(e){let{data:s,error:i}=await n.rpc("verify_sensitive_action_grant",{p_action:"bridge_pair"});if(i)throw new Q("bridge_pair_reauth_check_failed",i.message);if(s!==true)throw new Q("bridge_pair_reauth_required","Run sensitive-action reauth for bridge_pair before pairing this browser.")}return {user_id:r.user.id,user_email:r.user.email}}async function S_(t,e){let r=A(t).bridgePairFile;await mkdir(dirname(r),{recursive:true,mode:D});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function C_(t){try{return JSON.parse(await readFile(A(t).bridgePairFile,"utf8"))}catch{return null}}async function lo(t){await unlink(A(t).bridgePairFile).catch(()=>{});}function Eu(t){return createHash("sha256").update("pathrule-bridge-pair-code-v1","utf8").update("\0","utf8").update(ao(t),"utf8").digest("base64url")}function E_(t){return (t.PATHRULE_WEB_URL||t.VITE_PATHRULE_WEB_URL||"https://app.pathrule.io").replace(/\/+$/,"")}var is="x-pathrule-pair-token",Ru="x-pathrule-browser-profile-id";function yt(t){let e=R_(t.headers,t.allowedOrigins);if(e)return e;let r=uo(t.headers,"content-type");return !r||!/^application\/json(?:\s*;|$)/i.test(r)?{statusCode:415,reason:"json_content_type_required"}:t.requirePairToken!==false&&!uo(t.headers,is)?{statusCode:401,reason:"pair_token_required"}:null}function po(t,e){return !t||!os(t,e)?null:{"Access-Control-Allow-Origin":t,"Access-Control-Allow-Headers":"Authorization, X-Pathrule-Pair-Token, X-Pathrule-Browser-Profile-Id, Content-Type","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Credentials":"false"}}function R_(t,e){let r=uo(t,"origin");return r?os(r,e)?null:{statusCode:400,reason:"origin_not_allowed"}:{statusCode:400,reason:"origin_required"}}function os(t,e){return e.some(r=>r===t)}function xu(t){return {daemon_present:true,protocol_version:t}}function Pu(t){let e=t.windowMs??6e4,r=Math.floor((t.nowMs??Date.now())/e);return `${t.origin}\0${t.ip}\0${r}`}function uo(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}V();q();V();var N_=".pathrule/managed-files.json";function Au(t){return join(t,N_)}function fo(t){let e=normalize(t).replace(/\\/g,"/").replace(/^\/+/,"");if(e==="."||e.length===0||e.startsWith("../")||e.includes("/../"))throw new Error(`Invalid managed file path: ${t}`);return e}async function as(t){try{let e=await readFile(Au(t),"utf8"),r=JSON.parse(e);if(r.schema_version!==1||!Array.isArray(r.files))return ho();let n=r.files.flatMap(s=>{if(!s||typeof s!="object")return [];let i=s;if(typeof i.path!="string"||!L_(i.owner)||typeof i.owner_version!="string"||typeof i.updated_at!="string")return [];try{return [{path:fo(i.path),owner:i.owner,owner_version:i.owner_version,updated_at:i.updated_at}]}catch{return []}});return {schema_version:1,files:Nu(U_(n))}}catch(e){if(e.code==="ENOENT"||e instanceof SyntaxError)return ho();throw e}}async function ls(t){if(t.paths.length===0)return;let e=await as(t.workspaceRoot),r=(t.now??new Date).toISOString(),n=new Map(e.files.map(s=>[s.path,s]));for(let s of t.paths){let i=fo(s);n.set(i,{path:i,owner:t.owner,owner_version:t.ownerVersion,updated_at:r});}await $u(t.workspaceRoot,{schema_version:1,files:Nu(Array.from(n.values()))});}async function Iu(t){if(t.paths.length===0)return;let e=await as(t.workspaceRoot),r=new Set(t.paths.map(fo));await $u(t.workspaceRoot,{schema_version:1,files:e.files.filter(n=>!r.has(n.path))});}function Ou(t,e,r){return t.files.map(n=>({...n,status:D_(n,e,r)}))}function j_(t,e){let r=Tu(t),n=Tu(e),s=Math.max(r.length,n.length);for(let i=0;i<s;i+=1){let o=(r[i]??0)-(n[i]??0);if(o!==0)return o>0?1:-1}return 0}function D_(t,e,r){if(t.owner!==e)return "other_owner";let n=j_(t.owner_version,r);return n>0?"newer_version":n<0?"older_version":"current"}async function $u(t,e){let r=Au(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,`${JSON.stringify(e,null,2)}
79
- `,"utf8"),await rename(n,r);}function ho(){return {schema_version:1,files:[]}}function L_(t){return t==="desktop"||t==="cli"||t==="mcp"}function Tu(t){let e=t.match(/\d+(?:\.\d+)*/);return e?e[0].split(".").map(r=>Number.parseInt(r,10)):[0]}function U_(t){return Array.from(new Map(t.map(e=>[e.path,e])).values())}function Nu(t){return t.sort((e,r)=>e.path.localeCompare(r.path))}function go(t){if(!(!t||t.trim().length===0))try{return JSON.parse(t)}catch(e){throw new Error(`Claude config is not valid JSON: ${e.message}`)}}function ju(t){return JSON.stringify(t,null,2)+`
80
- `}var Du={id:"claude-code",homeConfigPath(t,e){return ya(e,t)},inject(t,e){let r=go(t),{config:n,wasNew:s}=ka(r??{},e);return {body:ju(n),wasNew:s}},remove(t){if(t===null)return {body:null,wasPresent:false};let e=go(t),{config:r,wasPresent:n}=ba(e);return n?{body:ju(r),wasPresent:true}:{body:t,wasPresent:false}},read(t){try{let e=go(t);return va(e)}catch{return null}}};function M_(t,e){let r=t.slice(0,e).split(/\r\n|\n|\r/g);return [r.length,r.pop().length+1]}function W_(t,e,r){let n=t.split(/\r\n|\n|\r/g),s="",i=(Math.log10(e+1)|0)+1;for(let o=e-1;o<=e+1;o++){let a=n[o-1];a&&(s+=o.toString().padEnd(i," "),s+=": ",s+=a,s+=`
78
+ `);if(!e.trim())throw new Error("content_body_required");return e}function ku(t){let e=t?.trim();return e||null}function io(t,e,r,n){return {kind:"web",url:wt(t,e,r,n),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}var bu="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",f_=16;function vu(t=f_){if(t<12)throw new Error("bridge_pair_code_too_short");let e=randomBytes(t),r="";for(let n of e)r+=bu[n%bu.length];return r.match(/.{1,4}/g)?.join("-")??r}function Su(t){let e=g_(t);return createHash("sha256").update("pathrule-bridge-pair-v1","utf8").update("\0","utf8").update(ao(t.pairCode),"utf8").update("\0","utf8").update(t.pairVerifier,"utf8").update("\0","utf8").update(e,"utf8").digest("base64url")}function g_(t){return JSON.stringify({daemon_session_id:Jr(t.daemonSessionId,"daemon_session_id"),browser_profile_id:Jr(t.browserProfileId,"browser_profile_id"),origin:m_(t.origin),user_id:Jr(t.userId,"user_id")})}function ao(t){return Jr(t,"pair_secret").replace(/[\s-]+/g,"").toUpperCase()}function m_(t){let e=Jr(t,"origin"),r=new URL(e);if(r.protocol!=="https:"&&r.hostname!=="localhost")throw new Error("bridge_pair_origin_not_allowed");return r.pathname="",r.search="",r.hash="",r.toString().replace(/\/$/,"")}function Jr(t,e){if(typeof t!="string"||t.trim()==="")throw new Error(`bridge_pair_${e}_required`);return t.trim()}V();q();var C_=300*1e3,ee=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BridgePairError";}code};async function co(t){let e=t.user??await ss(t.env,t.verifyReauth!==false),r=vu(),n=new Date(Date.now()+C_).toISOString(),s={schema_version:1,pair_code_hash:Eu(r),user_id:e.user_id,user_email:e.user_email,daemon_session_id:t.daemonSessionId,created_at:new Date().toISOString(),expires_at:n};return await E_(t.env,s),{pair_code:r,expires_at:n,url:`${x_(t.env)}/connect`,daemon_session_id:t.daemonSessionId}}async function Cu(t){let e=await R_(t.env);if(!e)throw new ee("pair_code_missing");if(e.daemon_session_id!==t.daemonSessionId)throw await lo(t.env),new ee("pair_code_stale");if(Date.parse(e.expires_at)<=Date.now())throw await lo(t.env),new ee("pair_code_expired");if(e.pair_code_hash!==Eu(t.pairCode))throw new ee("pair_code_invalid");let r=Su({daemonSessionId:t.daemonSessionId,browserProfileId:t.browserProfileId,origin:t.origin,userId:e.user_id,pairCode:t.pairCode,pairVerifier:t.pairVerifier});return await lo(t.env),{pair_token:r,daemon_session_id:t.daemonSessionId,user_id:e.user_id}}async function ss(t,e=true){let{session:r,supabase:n}=await R(t);if(e){let{data:s,error:i}=await n.rpc("verify_sensitive_action_grant",{p_action:"bridge_pair"});if(i)throw new ee("bridge_pair_reauth_check_failed",i.message);if(s!==true)throw new ee("bridge_pair_reauth_required","Run sensitive-action reauth for bridge_pair before pairing this browser.")}return {user_id:r.user.id,user_email:r.user.email}}async function E_(t,e){let r=A(t).bridgePairFile;await mkdir(dirname(r),{recursive:true,mode:D});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function R_(t){try{return JSON.parse(await readFile(A(t).bridgePairFile,"utf8"))}catch{return null}}async function lo(t){await unlink(A(t).bridgePairFile).catch(()=>{});}function Eu(t){return createHash("sha256").update("pathrule-bridge-pair-code-v1","utf8").update("\0","utf8").update(ao(t),"utf8").digest("base64url")}function x_(t){return (t.PATHRULE_WEB_URL||t.VITE_PATHRULE_WEB_URL||"https://app.pathrule.io").replace(/\/+$/,"")}var is="x-pathrule-pair-token",Ru="x-pathrule-browser-profile-id";function yt(t){let e=P_(t.headers,t.allowedOrigins);if(e)return e;let r=uo(t.headers,"content-type");return !r||!/^application\/json(?:\s*;|$)/i.test(r)?{statusCode:415,reason:"json_content_type_required"}:t.requirePairToken!==false&&!uo(t.headers,is)?{statusCode:401,reason:"pair_token_required"}:null}function po(t,e){return !t||!os(t,e)?null:{"Access-Control-Allow-Origin":t,"Access-Control-Allow-Headers":"Authorization, X-Pathrule-Pair-Token, X-Pathrule-Browser-Profile-Id, Content-Type","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Credentials":"false"}}function P_(t,e){let r=uo(t,"origin");return r?os(r,e)?null:{statusCode:400,reason:"origin_not_allowed"}:{statusCode:400,reason:"origin_required"}}function os(t,e){return e.some(r=>r===t)}function xu(t){return {daemon_present:true,protocol_version:t}}function Pu(t){let e=t.windowMs??6e4,r=Math.floor((t.nowMs??Date.now())/e);return `${t.origin}\0${t.ip}\0${r}`}function uo(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}V();q();V();var D_=".pathrule/managed-files.json";function Au(t){return join(t,D_)}function fo(t){let e=normalize(t).replace(/\\/g,"/").replace(/^\/+/,"");if(e==="."||e.length===0||e.startsWith("../")||e.includes("/../"))throw new Error(`Invalid managed file path: ${t}`);return e}async function as(t){try{let e=await readFile(Au(t),"utf8"),r=JSON.parse(e);if(r.schema_version!==1||!Array.isArray(r.files))return ho();let n=r.files.flatMap(s=>{if(!s||typeof s!="object")return [];let i=s;if(typeof i.path!="string"||!U_(i.owner)||typeof i.owner_version!="string"||typeof i.updated_at!="string")return [];try{return [{path:fo(i.path),owner:i.owner,owner_version:i.owner_version,updated_at:i.updated_at}]}catch{return []}});return {schema_version:1,files:Nu(W_(n))}}catch(e){if(e.code==="ENOENT"||e instanceof SyntaxError)return ho();throw e}}async function ls(t){if(t.paths.length===0)return;let e=await as(t.workspaceRoot),r=(t.now??new Date).toISOString(),n=new Map(e.files.map(s=>[s.path,s]));for(let s of t.paths){let i=fo(s);n.set(i,{path:i,owner:t.owner,owner_version:t.ownerVersion,updated_at:r});}await $u(t.workspaceRoot,{schema_version:1,files:Nu(Array.from(n.values()))});}async function Iu(t){if(t.paths.length===0)return;let e=await as(t.workspaceRoot),r=new Set(t.paths.map(fo));await $u(t.workspaceRoot,{schema_version:1,files:e.files.filter(n=>!r.has(n.path))});}function Ou(t,e,r){return t.files.map(n=>({...n,status:M_(n,e,r)}))}function L_(t,e){let r=Tu(t),n=Tu(e),s=Math.max(r.length,n.length);for(let i=0;i<s;i+=1){let o=(r[i]??0)-(n[i]??0);if(o!==0)return o>0?1:-1}return 0}function M_(t,e,r){if(t.owner!==e)return "other_owner";let n=L_(t.owner_version,r);return n>0?"newer_version":n<0?"older_version":"current"}async function $u(t,e){let r=Au(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,`${JSON.stringify(e,null,2)}
79
+ `,"utf8"),await rename(n,r);}function ho(){return {schema_version:1,files:[]}}function U_(t){return t==="desktop"||t==="cli"||t==="mcp"}function Tu(t){let e=t.match(/\d+(?:\.\d+)*/);return e?e[0].split(".").map(r=>Number.parseInt(r,10)):[0]}function W_(t){return Array.from(new Map(t.map(e=>[e.path,e])).values())}function Nu(t){return t.sort((e,r)=>e.path.localeCompare(r.path))}function go(t){if(!(!t||t.trim().length===0))try{return JSON.parse(t)}catch(e){throw new Error(`Claude config is not valid JSON: ${e.message}`)}}function ju(t){return JSON.stringify(t,null,2)+`
80
+ `}var Du={id:"claude-code",homeConfigPath(t,e){return ya(e,t)},inject(t,e){let r=go(t),{config:n,wasNew:s}=ka(r??{},e);return {body:ju(n),wasNew:s}},remove(t){if(t===null)return {body:null,wasPresent:false};let e=go(t),{config:r,wasPresent:n}=ba(e);return n?{body:ju(r),wasPresent:true}:{body:t,wasPresent:false}},read(t){try{let e=go(t);return va(e)}catch{return null}}};function B_(t,e){let r=t.slice(0,e).split(/\r\n|\n|\r/g);return [r.length,r.pop().length+1]}function F_(t,e,r){let n=t.split(/\r\n|\n|\r/g),s="",i=(Math.log10(e+1)|0)+1;for(let o=e-1;o<=e+1;o++){let a=n[o-1];a&&(s+=o.toString().padEnd(i," "),s+=": ",s+=a,s+=`
81
81
  `,o===e&&(s+=" ".repeat(i+r+2),s+=`^
82
- `));}return s}var x=class extends Error{line;column;codeblock;constructor(e,r){let[n,s]=M_(r.toml,r.ptr),i=W_(r.toml,n,s);super(`Invalid TOML document: ${e}
82
+ `));}return s}var x=class extends Error{line;column;codeblock;constructor(e,r){let[n,s]=B_(r.toml,r.ptr),i=F_(r.toml,n,s);super(`Invalid TOML document: ${e}
83
83
 
84
- ${i}`,r),this.line=n,this.column=s,this.codeblock=i;}};function B_(t,e){let r=0;for(;t[e-++r]==="\\";);return --r&&r%2}function cs(t,e=0,r=t.length){let n=t.indexOf(`
84
+ ${i}`,r),this.line=n,this.column=s,this.codeblock=i;}};function H_(t,e){let r=0;for(;t[e-++r]==="\\";);return --r&&r%2}function cs(t,e=0,r=t.length){let n=t.indexOf(`
85
85
  `,e);return t[n-1]==="\r"&&n--,n<=r?n:-1}function Zt(t,e){for(let r=e;r<t.length;r++){let n=t[r];if(n===`
86
86
  `)return r;if(n==="\r"&&t[r+1]===`
87
- `)return r+1;if(n<" "&&n!==" "||n==="\x7F")throw new x("control characters are not allowed in comments",{toml:t,ptr:e})}return t.length}function re(t,e,r,n){let s;for(;;){for(;(s=t[e])===" "||s===" "||!r&&(s===`
87
+ `)return r+1;if(n<" "&&n!==" "||n==="\x7F")throw new x("control characters are not allowed in comments",{toml:t,ptr:e})}return t.length}function ne(t,e,r,n){let s;for(;;){for(;(s=t[e])===" "||s===" "||!r&&(s===`
88
88
  `||s==="\r"&&t[e+1]===`
89
89
  `);)e++;if(n||s!=="#")break;e=Zt(t,e);}return e}function Lu(t,e,r,n,s=false){if(!n)return e=cs(t,e),e<0?t.length:e;for(let i=e;i<t.length;i++){let o=t[i];if(o==="#")i=cs(t,i);else {if(o===r)return i+1;if(o===n||s&&(o===`
90
90
  `||o==="\r"&&t[i+1]===`
91
- `))return i}}throw new x("cannot find end of structure",{toml:t,ptr:e})}function us(t,e){let r=t[e],n=r===t[e+1]&&t[e+1]===t[e+2]?t.slice(e,e+3):r;e+=n.length-1;do e=t.indexOf(n,++e);while(e>-1&&r!=="'"&&B_(t,e));return e>-1&&(e+=n.length,n.length>1&&(t[e]===r&&e++,t[e]===r&&e++)),e}var F_=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,Jr=class t extends Date{#t=false;#r=false;#e=null;constructor(e){let r=true,n=true,s="Z";if(typeof e=="string"){let i=e.match(F_);i?(i[1]||(r=false,e=`0000-01-01T${e}`),n=!!i[2],n&&e[10]===" "&&(e=e.replace(" ","T")),i[2]&&+i[2]>23?e="":(s=i[3]||null,e=e.toUpperCase(),!s&&n&&(e+="Z"))):e="";}super(e),isNaN(this.getTime())||(this.#t=r,this.#r=n,this.#e=s);}isDateTime(){return this.#t&&this.#r}isLocal(){return !this.#t||!this.#r||!this.#e}isDate(){return this.#t&&!this.#r}isTime(){return this.#r&&!this.#t}isValid(){return this.#t||this.#r}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z")return e;let r=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return r=this.#e[0]==="-"?r:-r,new Date(this.getTime()-r*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,r="Z"){let n=new t(e);return n.#e=r,n}static wrapAsLocalDateTime(e){let r=new t(e);return r.#e=null,r}static wrapAsLocalDate(e){let r=new t(e);return r.#r=false,r.#e=null,r}static wrapAsLocalTime(e){let r=new t(e);return r.#t=false,r.#e=null,r}};var H_=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,q_=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,z_=/^[+-]?0[0-9_]/,J_=/^[0-9a-f]{2,8}$/i,Uu={b:"\b",t:" ",n:`
91
+ `))return i}}throw new x("cannot find end of structure",{toml:t,ptr:e})}function us(t,e){let r=t[e],n=r===t[e+1]&&t[e+1]===t[e+2]?t.slice(e,e+3):r;e+=n.length-1;do e=t.indexOf(n,++e);while(e>-1&&r!=="'"&&H_(t,e));return e>-1&&(e+=n.length,n.length>1&&(t[e]===r&&e++,t[e]===r&&e++)),e}var q_=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,Kr=class t extends Date{#t=false;#r=false;#e=null;constructor(e){let r=true,n=true,s="Z";if(typeof e=="string"){let i=e.match(q_);i?(i[1]||(r=false,e=`0000-01-01T${e}`),n=!!i[2],n&&e[10]===" "&&(e=e.replace(" ","T")),i[2]&&+i[2]>23?e="":(s=i[3]||null,e=e.toUpperCase(),!s&&n&&(e+="Z"))):e="";}super(e),isNaN(this.getTime())||(this.#t=r,this.#r=n,this.#e=s);}isDateTime(){return this.#t&&this.#r}isLocal(){return !this.#t||!this.#r||!this.#e}isDate(){return this.#t&&!this.#r}isTime(){return this.#r&&!this.#t}isValid(){return this.#t||this.#r}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z")return e;let r=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return r=this.#e[0]==="-"?r:-r,new Date(this.getTime()-r*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,r="Z"){let n=new t(e);return n.#e=r,n}static wrapAsLocalDateTime(e){let r=new t(e);return r.#e=null,r}static wrapAsLocalDate(e){let r=new t(e);return r.#r=false,r.#e=null,r}static wrapAsLocalTime(e){let r=new t(e);return r.#t=false,r.#e=null,r}};var z_=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,J_=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,K_=/^[+-]?0[0-9_]/,V_=/^[0-9a-f]{2,8}$/i,Mu={b:"\b",t:" ",n:`
92
92
  `,f:"\f",r:"\r",e:"\x1B",'"':'"',"\\":"\\"};function ds(t,e=0,r=t.length){let n=t[e]==="'",s=t[e++]===t[e]&&t[e]===t[e+1];s&&(r-=2,t[e+=2]==="\r"&&e++,t[e]===`
93
93
  `&&e++);let i=0,o,a="",l=e;for(;e<r-1;){let c=t[e++];if(c===`
94
94
  `||c==="\r"&&t[e]===`
95
- `){if(!s)throw new x("newlines are not allowed in strings",{toml:t,ptr:e-1})}else if(c<" "&&c!==" "||c==="\x7F")throw new x("control characters are not allowed in strings",{toml:t,ptr:e-1});if(o){if(o=false,c==="x"||c==="u"||c==="U"){let u=t.slice(e,e+=c==="x"?2:c==="u"?4:8);if(!J_.test(u))throw new x("invalid unicode escape",{toml:t,ptr:i});try{a+=String.fromCodePoint(parseInt(u,16));}catch{throw new x("invalid unicode escape",{toml:t,ptr:i})}}else if(s&&(c===`
96
- `||c===" "||c===" "||c==="\r")){if(e=re(t,e-1,true),t[e]!==`
97
- `&&t[e]!=="\r")throw new x("invalid escape: only line-ending whitespace may be escaped",{toml:t,ptr:i});e=re(t,e);}else if(c in Uu)a+=Uu[c];else throw new x("unrecognized escape sequence",{toml:t,ptr:i});l=e;}else !n&&c==="\\"&&(i=e-1,o=true,a+=t.slice(l,i));}return a+t.slice(l,r-1)}function Mu(t,e,r,n){if(t==="true")return true;if(t==="false")return false;if(t==="-inf")return -1/0;if(t==="inf"||t==="+inf")return 1/0;if(t==="nan"||t==="+nan"||t==="-nan")return NaN;if(t==="-0")return n?0n:0;let s=H_.test(t);if(s||q_.test(t)){if(z_.test(t))throw new x("leading zeroes are not allowed",{toml:e,ptr:r});t=t.replace(/_/g,"");let o=+t;if(isNaN(o))throw new x("invalid number",{toml:e,ptr:r});if(s){if((s=!Number.isSafeInteger(o))&&!n)throw new x("integer value cannot be represented losslessly",{toml:e,ptr:r});(s||n===true)&&(o=BigInt(t));}return o}let i=new Jr(t);if(!i.isValid())throw new x("invalid value",{toml:e,ptr:r});return i}function K_(t,e,r){let n=t.slice(e,r),s=n.indexOf("#");return s>-1&&(Zt(t,s),n=n.slice(0,s)),[n.trimEnd(),s]}function Kr(t,e,r,n,s){if(n===0)throw new x("document contains excessively nested structures. aborting.",{toml:t,ptr:e});let i=t[e];if(i==="["||i==="{"){let[l,c]=i==="["?Bu(t,e,n,s):Wu(t,e,n,s);if(r){if(c=re(t,c),t[c]===",")c++;else if(t[c]!==r)throw new x("expected comma or end of structure",{toml:t,ptr:c})}return [l,c]}let o;if(i==='"'||i==="'"){o=us(t,e);let l=ds(t,e,o);if(r){if(o=re(t,o),t[o]&&t[o]!==","&&t[o]!==r&&t[o]!==`
98
- `&&t[o]!=="\r")throw new x("unexpected character encountered",{toml:t,ptr:o});o+=+(t[o]===",");}return [l,o]}o=Lu(t,e,",",r);let a=K_(t,e,o-+(t[o-1]===","));if(!a[0])throw new x("incomplete key-value declaration: no value specified",{toml:t,ptr:e});return r&&a[1]>-1&&(o=re(t,e+a[1]),o+=+(t[o]===",")),[Mu(a[0],t,e,s),o]}var V_=/^[a-zA-Z0-9-_]+[ \t]*$/;function ps(t,e,r="="){let n=e-1,s=[],i=t.indexOf(r,e);if(i<0)throw new x("incomplete key-value: cannot find end of key",{toml:t,ptr:e});do{let o=t[e=++n];if(o!==" "&&o!==" ")if(o==='"'||o==="'"){if(o===t[e+1]&&o===t[e+2])throw new x("multiline strings are not allowed in keys",{toml:t,ptr:e});let a=us(t,e);if(a<0)throw new x("unfinished string encountered",{toml:t,ptr:e});n=t.indexOf(".",a);let l=t.slice(a,n<0||n>i?i:n),c=cs(l);if(c>-1)throw new x("newlines are not allowed in keys",{toml:t,ptr:e+n+c});if(l.trimStart())throw new x("found extra tokens after the string part",{toml:t,ptr:a});if(i<a&&(i=t.indexOf(r,a),i<0))throw new x("incomplete key-value: cannot find end of key",{toml:t,ptr:e});s.push(ds(t,e,a));}else {n=t.indexOf(".",e);let a=t.slice(e,n<0||n>i?i:n);if(!V_.test(a))throw new x("only letter, numbers, dashes and underscores are allowed in keys",{toml:t,ptr:e});s.push(a.trimEnd());}}while(n+1&&n<i);return [s,re(t,i+1,true,true)]}function Wu(t,e,r,n){let s={},i=new Set,o;for(e++;(o=t[e++])!=="}"&&o;){if(o===",")throw new x("expected value, found comma",{toml:t,ptr:e-1});if(o==="#")e=Zt(t,e);else if(o!==" "&&o!==" "&&o!==`
99
- `&&o!=="\r"){let a,l=s,c=false,[u,d]=ps(t,e-1);for(let f=0;f<u.length;f++){if(f&&(l=c?l[a]:l[a]={}),a=u[f],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||i.has(l[a])))throw new x("trying to redefine an already defined value",{toml:t,ptr:e});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:true,configurable:true,writable:true});}if(c)throw new x("trying to redefine an already defined value",{toml:t,ptr:e});let[p,h]=Kr(t,d,"}",r-1,n);i.add(p),l[a]=p,e=h;}}if(!o)throw new x("unfinished table encountered",{toml:t,ptr:e});return [s,e]}function Bu(t,e,r,n){let s=[],i;for(e++;(i=t[e++])!=="]"&&i;){if(i===",")throw new x("expected value, found comma",{toml:t,ptr:e-1});if(i==="#")e=Zt(t,e);else if(i!==" "&&i!==" "&&i!==`
100
- `&&i!=="\r"){let o=Kr(t,e-1,"]",r-1,n);s.push(o[0]),e=o[1];}}if(!i)throw new x("unfinished array encountered",{toml:t,ptr:e});return [s,e]}function Fu(t,e,r,n){let s=e,i=r,o,a=false,l;for(let c=0;c<t.length;c++){if(c){if(s=a?s[o]:s[o]={},i=(l=i[o]).c,n===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=s.length-1;s=s[u],i=i[u].c;}}if(o=t[c],(a=Object.hasOwn(s,o))&&i[o]?.t===0&&i[o]?.d)return null;a||(o==="__proto__"&&(Object.defineProperty(s,o,{enumerable:true,configurable:true,writable:true}),Object.defineProperty(i,o,{enumerable:true,configurable:true,writable:true})),i[o]={t:c<t.length-1&&n===2?3:n,d:false,i:0,c:{}});}if(l=i[o],l.t!==n&&!(n===1&&l.t===3)||(n===2&&(l.d||(l.d=true,s[o]=[]),s[o].push(s={}),l.c[l.i++]=l={t:1,d:false,i:0,c:{}}),l.d))return null;if(l.d=true,n===1)s=a?s[o]:s[o]={};else if(n===0&&a)return null;return [o,s,l.c]}function mo(t,{maxDepth:e=1e3,integersAsBigInt:r}={}){let n={},s={},i=n,o=s;for(let a=re(t,0);a<t.length;){if(t[a]==="["){let l=t[++a]==="[",c=ps(t,a+=+l,"]");if(l){if(t[c[1]-1]!=="]")throw new x("expected end of table declaration",{toml:t,ptr:c[1]-1});c[1]++;}let u=Fu(c[0],n,s,l?2:1);if(!u)throw new x("trying to redefine an already defined table or value",{toml:t,ptr:a});o=u[2],i=u[1],a=c[1];}else {let l=ps(t,a),c=Fu(l[0],i,o,0);if(!c)throw new x("trying to redefine an already defined table or value",{toml:t,ptr:a});let u=Kr(t,l[1],void 0,e,r);c[1][c[0]]=u[0],a=u[1];}if(a=re(t,a,true),t[a]&&t[a]!==`
101
- `&&t[a]!=="\r")throw new x("each key-value declaration must be followed by an end-of-line",{toml:t,ptr:a});a=re(t,a);}return n}var Hu=/^[a-z0-9-_]+$/i;function Vr(t){let e=typeof t;if(e==="object"){if(Array.isArray(t))return "array";if(t instanceof Date)return "date"}return e}function G_(t){for(let e=0;e<t.length;e++)if(Vr(t[e])!=="object")return false;return t.length!=0}function _o(t){return JSON.stringify(t).replace(/\x7f/g,"\\u007f")}function wo(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");if(e==="number")return isNaN(t)?"nan":t===1/0?"inf":t===-1/0?"-inf":n&&Number.isInteger(t)?t.toFixed(1):t.toString();if(e==="bigint"||e==="boolean")return t.toString();if(e==="string")return _o(t);if(e==="date"){if(isNaN(t.getTime()))throw new TypeError("cannot serialize invalid date");return t.toISOString()}if(e==="object")return Y_(t,r,n);if(e==="array")return X_(t,r,n)}function Y_(t,e,r){let n=Object.keys(t);if(n.length===0)return "{}";let s="{ ";for(let i=0;i<n.length;i++){let o=n[i];i&&(s+=", "),s+=Hu.test(o)?o:_o(o),s+=" = ",s+=wo(t[o],Vr(t[o]),e-1,r);}return s+" }"}function X_(t,e,r){if(t.length===0)return "[]";let n="[ ";for(let s=0;s<t.length;s++){if(s&&(n+=", "),t[s]===null||t[s]===void 0)throw new TypeError("arrays cannot contain null or undefined values");n+=wo(t[s],Vr(t[s]),e-1,r);}return n+" ]"}function Z_(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let s="";for(let i=0;i<t.length;i++)s+=`${s&&`
95
+ `){if(!s)throw new x("newlines are not allowed in strings",{toml:t,ptr:e-1})}else if(c<" "&&c!==" "||c==="\x7F")throw new x("control characters are not allowed in strings",{toml:t,ptr:e-1});if(o){if(o=false,c==="x"||c==="u"||c==="U"){let u=t.slice(e,e+=c==="x"?2:c==="u"?4:8);if(!V_.test(u))throw new x("invalid unicode escape",{toml:t,ptr:i});try{a+=String.fromCodePoint(parseInt(u,16));}catch{throw new x("invalid unicode escape",{toml:t,ptr:i})}}else if(s&&(c===`
96
+ `||c===" "||c===" "||c==="\r")){if(e=ne(t,e-1,true),t[e]!==`
97
+ `&&t[e]!=="\r")throw new x("invalid escape: only line-ending whitespace may be escaped",{toml:t,ptr:i});e=ne(t,e);}else if(c in Mu)a+=Mu[c];else throw new x("unrecognized escape sequence",{toml:t,ptr:i});l=e;}else !n&&c==="\\"&&(i=e-1,o=true,a+=t.slice(l,i));}return a+t.slice(l,r-1)}function Uu(t,e,r,n){if(t==="true")return true;if(t==="false")return false;if(t==="-inf")return -1/0;if(t==="inf"||t==="+inf")return 1/0;if(t==="nan"||t==="+nan"||t==="-nan")return NaN;if(t==="-0")return n?0n:0;let s=z_.test(t);if(s||J_.test(t)){if(K_.test(t))throw new x("leading zeroes are not allowed",{toml:e,ptr:r});t=t.replace(/_/g,"");let o=+t;if(isNaN(o))throw new x("invalid number",{toml:e,ptr:r});if(s){if((s=!Number.isSafeInteger(o))&&!n)throw new x("integer value cannot be represented losslessly",{toml:e,ptr:r});(s||n===true)&&(o=BigInt(t));}return o}let i=new Kr(t);if(!i.isValid())throw new x("invalid value",{toml:e,ptr:r});return i}function G_(t,e,r){let n=t.slice(e,r),s=n.indexOf("#");return s>-1&&(Zt(t,s),n=n.slice(0,s)),[n.trimEnd(),s]}function Vr(t,e,r,n,s){if(n===0)throw new x("document contains excessively nested structures. aborting.",{toml:t,ptr:e});let i=t[e];if(i==="["||i==="{"){let[l,c]=i==="["?Bu(t,e,n,s):Wu(t,e,n,s);if(r){if(c=ne(t,c),t[c]===",")c++;else if(t[c]!==r)throw new x("expected comma or end of structure",{toml:t,ptr:c})}return [l,c]}let o;if(i==='"'||i==="'"){o=us(t,e);let l=ds(t,e,o);if(r){if(o=ne(t,o),t[o]&&t[o]!==","&&t[o]!==r&&t[o]!==`
98
+ `&&t[o]!=="\r")throw new x("unexpected character encountered",{toml:t,ptr:o});o+=+(t[o]===",");}return [l,o]}o=Lu(t,e,",",r);let a=G_(t,e,o-+(t[o-1]===","));if(!a[0])throw new x("incomplete key-value declaration: no value specified",{toml:t,ptr:e});return r&&a[1]>-1&&(o=ne(t,e+a[1]),o+=+(t[o]===",")),[Uu(a[0],t,e,s),o]}var Y_=/^[a-zA-Z0-9-_]+[ \t]*$/;function ps(t,e,r="="){let n=e-1,s=[],i=t.indexOf(r,e);if(i<0)throw new x("incomplete key-value: cannot find end of key",{toml:t,ptr:e});do{let o=t[e=++n];if(o!==" "&&o!==" ")if(o==='"'||o==="'"){if(o===t[e+1]&&o===t[e+2])throw new x("multiline strings are not allowed in keys",{toml:t,ptr:e});let a=us(t,e);if(a<0)throw new x("unfinished string encountered",{toml:t,ptr:e});n=t.indexOf(".",a);let l=t.slice(a,n<0||n>i?i:n),c=cs(l);if(c>-1)throw new x("newlines are not allowed in keys",{toml:t,ptr:e+n+c});if(l.trimStart())throw new x("found extra tokens after the string part",{toml:t,ptr:a});if(i<a&&(i=t.indexOf(r,a),i<0))throw new x("incomplete key-value: cannot find end of key",{toml:t,ptr:e});s.push(ds(t,e,a));}else {n=t.indexOf(".",e);let a=t.slice(e,n<0||n>i?i:n);if(!Y_.test(a))throw new x("only letter, numbers, dashes and underscores are allowed in keys",{toml:t,ptr:e});s.push(a.trimEnd());}}while(n+1&&n<i);return [s,ne(t,i+1,true,true)]}function Wu(t,e,r,n){let s={},i=new Set,o;for(e++;(o=t[e++])!=="}"&&o;){if(o===",")throw new x("expected value, found comma",{toml:t,ptr:e-1});if(o==="#")e=Zt(t,e);else if(o!==" "&&o!==" "&&o!==`
99
+ `&&o!=="\r"){let a,l=s,c=false,[u,d]=ps(t,e-1);for(let f=0;f<u.length;f++){if(f&&(l=c?l[a]:l[a]={}),a=u[f],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||i.has(l[a])))throw new x("trying to redefine an already defined value",{toml:t,ptr:e});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:true,configurable:true,writable:true});}if(c)throw new x("trying to redefine an already defined value",{toml:t,ptr:e});let[p,h]=Vr(t,d,"}",r-1,n);i.add(p),l[a]=p,e=h;}}if(!o)throw new x("unfinished table encountered",{toml:t,ptr:e});return [s,e]}function Bu(t,e,r,n){let s=[],i;for(e++;(i=t[e++])!=="]"&&i;){if(i===",")throw new x("expected value, found comma",{toml:t,ptr:e-1});if(i==="#")e=Zt(t,e);else if(i!==" "&&i!==" "&&i!==`
100
+ `&&i!=="\r"){let o=Vr(t,e-1,"]",r-1,n);s.push(o[0]),e=o[1];}}if(!i)throw new x("unfinished array encountered",{toml:t,ptr:e});return [s,e]}function Fu(t,e,r,n){let s=e,i=r,o,a=false,l;for(let c=0;c<t.length;c++){if(c){if(s=a?s[o]:s[o]={},i=(l=i[o]).c,n===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=s.length-1;s=s[u],i=i[u].c;}}if(o=t[c],(a=Object.hasOwn(s,o))&&i[o]?.t===0&&i[o]?.d)return null;a||(o==="__proto__"&&(Object.defineProperty(s,o,{enumerable:true,configurable:true,writable:true}),Object.defineProperty(i,o,{enumerable:true,configurable:true,writable:true})),i[o]={t:c<t.length-1&&n===2?3:n,d:false,i:0,c:{}});}if(l=i[o],l.t!==n&&!(n===1&&l.t===3)||(n===2&&(l.d||(l.d=true,s[o]=[]),s[o].push(s={}),l.c[l.i++]=l={t:1,d:false,i:0,c:{}}),l.d))return null;if(l.d=true,n===1)s=a?s[o]:s[o]={};else if(n===0&&a)return null;return [o,s,l.c]}function mo(t,{maxDepth:e=1e3,integersAsBigInt:r}={}){let n={},s={},i=n,o=s;for(let a=ne(t,0);a<t.length;){if(t[a]==="["){let l=t[++a]==="[",c=ps(t,a+=+l,"]");if(l){if(t[c[1]-1]!=="]")throw new x("expected end of table declaration",{toml:t,ptr:c[1]-1});c[1]++;}let u=Fu(c[0],n,s,l?2:1);if(!u)throw new x("trying to redefine an already defined table or value",{toml:t,ptr:a});o=u[2],i=u[1],a=c[1];}else {let l=ps(t,a),c=Fu(l[0],i,o,0);if(!c)throw new x("trying to redefine an already defined table or value",{toml:t,ptr:a});let u=Vr(t,l[1],void 0,e,r);c[1][c[0]]=u[0],a=u[1];}if(a=ne(t,a,true),t[a]&&t[a]!==`
101
+ `&&t[a]!=="\r")throw new x("each key-value declaration must be followed by an end-of-line",{toml:t,ptr:a});a=ne(t,a);}return n}var Hu=/^[a-z0-9-_]+$/i;function Gr(t){let e=typeof t;if(e==="object"){if(Array.isArray(t))return "array";if(t instanceof Date)return "date"}return e}function X_(t){for(let e=0;e<t.length;e++)if(Gr(t[e])!=="object")return false;return t.length!=0}function _o(t){return JSON.stringify(t).replace(/\x7f/g,"\\u007f")}function wo(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");if(e==="number")return isNaN(t)?"nan":t===1/0?"inf":t===-1/0?"-inf":n&&Number.isInteger(t)?t.toFixed(1):t.toString();if(e==="bigint"||e==="boolean")return t.toString();if(e==="string")return _o(t);if(e==="date"){if(isNaN(t.getTime()))throw new TypeError("cannot serialize invalid date");return t.toISOString()}if(e==="object")return Z_(t,r,n);if(e==="array")return Q_(t,r,n)}function Z_(t,e,r){let n=Object.keys(t);if(n.length===0)return "{}";let s="{ ";for(let i=0;i<n.length;i++){let o=n[i];i&&(s+=", "),s+=Hu.test(o)?o:_o(o),s+=" = ",s+=wo(t[o],Gr(t[o]),e-1,r);}return s+" }"}function Q_(t,e,r){if(t.length===0)return "[]";let n="[ ";for(let s=0;s<t.length;s++){if(s&&(n+=", "),t[s]===null||t[s]===void 0)throw new TypeError("arrays cannot contain null or undefined values");n+=wo(t[s],Gr(t[s]),e-1,r);}return n+" ]"}function ew(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let s="";for(let i=0;i<t.length;i++)s+=`${s&&`
102
102
  `}[[${e}]]
103
- `,s+=yo(0,t[i],e,r,n);return s}function yo(t,e,r,n,s){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let i="",o="",a=Object.keys(e);for(let l=0;l<a.length;l++){let c=a[l];if(e[c]!==null&&e[c]!==void 0){let u=Vr(e[c]);if(u==="symbol"||u==="function")throw new TypeError(`cannot serialize values of type '${u}'`);let d=Hu.test(c)?c:_o(c);if(u==="array"&&G_(e[c]))o+=(o&&`
104
- `)+Z_(e[c],r?`${r}.${d}`:d,n-1,s);else if(u==="object"){let p=r?`${r}.${d}`:d;o+=(o&&`
103
+ `,s+=yo(0,t[i],e,r,n);return s}function yo(t,e,r,n,s){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let i="",o="",a=Object.keys(e);for(let l=0;l<a.length;l++){let c=a[l];if(e[c]!==null&&e[c]!==void 0){let u=Gr(e[c]);if(u==="symbol"||u==="function")throw new TypeError(`cannot serialize values of type '${u}'`);let d=Hu.test(c)?c:_o(c);if(u==="array"&&X_(e[c]))o+=(o&&`
104
+ `)+ew(e[c],r?`${r}.${d}`:d,n-1,s);else if(u==="object"){let p=r?`${r}.${d}`:d;o+=(o&&`
105
105
  `)+yo(p,e[c],p,n-1,s);}else i+=d,i+=" = ",i+=wo(e[c],u,n,s),i+=`
106
106
  `;}}return t&&(i||!o)&&(i=i?`[${t}]
107
107
  ${i}`:`[${t}]`),i&&o?`${i}
108
- ${o}`:i||o}function hs(t,{maxDepth:e=1e3,numbersAsFloat:r=false}={}){if(Vr(t)!=="object")throw new TypeError("stringify can only be called with an object");let n=yo(0,t,"",e,r);return n[n.length-1]!==`
108
+ ${o}`:i||o}function hs(t,{maxDepth:e=1e3,numbersAsFloat:r=false}={}){if(Gr(t)!=="object")throw new TypeError("stringify can only be called with an object");let n=yo(0,t,"",e,r);return n[n.length-1]!==`
109
109
  `?n+`
110
- `:n}var ne="pathrule";function ko(t){if(!t||t.trim().length===0)return {};let e;try{e=mo(t);}catch(r){throw new Error(`config.toml is not valid TOML: ${r.message}`)}if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("config.toml root must be a TOML table");return e}function Q_(t){let e={command:t.command,args:t.args,enabled:true};return t.env&&Object.keys(t.env).length>0&&(e.env=t.env),e}function ew(t){return !t||typeof t.command!="string"?null:{type:"stdio",command:t.command,args:Array.isArray(t.args)?t.args.map(String):[],env:t.env&&typeof t.env=="object"&&!Array.isArray(t.env)?t.env:void 0}}var qu={id:"codex",homeConfigPath(t,e){return `${t}/.codex/config.toml`},inject(t,e){let r=ko(t),n={...r.mcp_servers??{}},s=!(ne in n);n[ne]=Q_(e);let i={...r,mcp_servers:n};return {body:hs(i)+`
111
- `,wasNew:s}},remove(t){let e=ko(t),r=e.mcp_servers??{};if(!(ne in r))return {body:t,wasPresent:false};let{[ne]:n,...s}=r,i={...e};return Object.keys(s).length===0?delete i.mcp_servers:i.mcp_servers=s,Object.keys(i).length===0?{body:null,wasPresent:true}:{body:hs(i)+`
112
- `,wasPresent:true}},read(t){try{let e=ko(t);return ew(e.mcp_servers?.[ne])}catch{return null}}};function tw(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("`mcpServers` must be an object");return e}function bo(t){if(!t||t.trim().length===0)return {};let e;try{e=JSON.parse(t);}catch(r){throw new Error(`Config is not valid JSON: ${r.message}`)}return tw(e)}function zu(t){return JSON.stringify(t,null,2)+`
113
- `}function fs(t){function e(r){if(t.includeTypeField)return r;let{type:n,...s}=r;return s}return {inject(r,n){let s=bo(r),i={...s.mcpServers??{}},o=!(ne in i);i[ne]=e(n);let a={...s,mcpServers:i};return {body:zu(a),wasNew:o}},remove(r){let n=bo(r),s=n.mcpServers??{};if(!(ne in s))return {body:r,wasPresent:false};let{[ne]:i,...o}=s,a={...n,mcpServers:o};return Object.keys(o).length===0&&Object.keys(a).length===1&&"mcpServers"in a?{body:null,wasPresent:true}:{body:zu(a),wasPresent:true}},read(r){try{return bo(r).mcpServers?.[ne]??null}catch{return null}}}}var vo=fs({includeTypeField:true}),Ju={id:"cursor",homeConfigPath(t,e){return `${t}/.cursor/mcp.json`},inject:vo.inject,remove:vo.remove,read:vo.read};var So=fs({includeTypeField:false}),Ku={id:"windsurf",homeConfigPath(t,e){return `${t}/.codeium/windsurf/mcp_config.json`},inject:So.inject,remove:So.remove,read:So.read};var rw={"claude-code":Du,cursor:Ju,codex:qu,windsurf:Ku};function kt(t){return rw[t]}Mr();q();Ce();var cw=createRequire(import.meta.url),uw=cw("../package.json"),dw=uw.version,pw=["claude-code","cursor","codex","windsurf"];async function $e(t,e){let r=[],n=await Se(t);r.push({name:"auth",status:n?"pass":"fail",detail:n?n.session.user.email??n.session.user.id:"not_authenticated"});let s=null;if(n){try{let u=await j(t);r.push({name:"organization",status:u?"pass":"warn",detail:u?.slug??"no organization selected"});}catch(u){r.push({name:"organization",status:"fail",detail:u instanceof Error?u.message:String(u)});}try{let u=await U(t);s=u?.local_root_path??null,r.push({name:"workspace",status:u?"pass":"warn",detail:u?.name??"no workspace selected"});}catch(u){r.push({name:"workspace",status:"fail",detail:u instanceof Error?u.message:String(u)});}}r.push({name:"cwd_attach",status:s===e?"pass":"warn",detail:s===e?"current folder is attached":s??"workspace not attached"});let i=await Promise.all(pw.map(ww)),o=Ou(await as(e),"cli",dw),a=o.filter(u=>u.status==="other_owner").length,l=o.filter(u=>u.status==="newer_version").length;return a>0||l>0?r.push({name:"managed_files",status:"warn",detail:fw(a,l)}):o.length>0?r.push({name:"managed_files",status:"pass",detail:`${o.length} Pathrule-managed file${o.length===1?"":"s"} tracked`}):r.push({name:"managed_files",status:"pass",detail:"no Pathrule-managed files tracked yet"}),{ok:!r.some(u=>u.status==="fail"),checks:r,mcp:i,managed_files:o}}async function Eo(t,e){await mw(t);let r=await $e(t,e),n=A(t);await mkdir(n.supportDir,{recursive:true,mode:D}),await chmod(n.supportDir,D).catch(()=>{});let s=join(n.supportDir,`${new Date().toISOString().replace(/[:.]/g,"-")}-doctor.json`),i={schema_version:1,produced_at:new Date().toISOString(),cwd_hash:_w(e),platform:process.platform,node_version:process.version,env_keys:Object.keys(t).filter(o=>o.startsWith("PATHRULE_")||o==="CI"||o==="NO_COLOR").sort(),report:hw(r)};return il(i),await writeFile(s,JSON.stringify(i,null,2),{encoding:"utf8",mode:O}),await chmod(s,O).catch(()=>{}),{ok:r.ok,path:s,report:r}}function hw(t){return {ok:t.ok,checks:t.checks.map(e=>({...e,detail:Co(e.detail)})),mcp:t.mcp.map(e=>({...e,config_path:gw(e.config_path),error:Co(e.error)})),managed_files:t.managed_files.map(e=>({...e,path:Co(e.path)??e.path}))}}function fw(t,e){let r=[];return t>0&&r.push(`${t} file${t===1?"":"s"} last written by another surface`),e>0&&r.push(`${e} file${e===1?"":"s"} last written by a newer CLI`),r.join("; ")}function Co(t){return t&&ni(t)}function gw(t){return ni(t,"path")}async function mw(t){let{supabase:e}=await R(t),{data:r,error:n}=await e.rpc("consume_sensitive_action_grant",{p_action:"token_export"});if(n)throw new Error(`token_export_reauth_check_failed: ${n.message}`);if(r!==true)throw new Error("token_export_reauth_required")}function _w(t){let e=2166136261;for(let r=0;r<t.length;r+=1)e^=t.charCodeAt(r),e=Math.imul(e,16777619);return (e>>>0).toString(16).padStart(8,"0")}async function ww(t){let e=kt(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {client:t,config_path:r,readable:!0,installed:e.read(n)!==null}}catch(n){return n.code==="ENOENT"?{client:t,config_path:r,readable:false,installed:false}:{client:t,config_path:r,readable:false,installed:false,error:n instanceof Error?n.message:String(n)}}}var bt=class extends Error{constructor(e){super(e),this.name="WorkspacePathSafetyError";}};async function Yu(t,e){let r=await realpath(t),n=kw(e),s=ze.resolve(r,n||"."),i=await realpath(s);if(!Zu(r,i))throw new bt(`Refused: ${e||"/"} escapes the workspace root`);return {rootRealPath:r,absolutePath:i,relativePath:n===""?"/":`/${bw(n)}`}}async function Xu(t,e){try{let r=await realpath(e);return Zu(t,r)?(await stat(r)).isDirectory():!1}catch{return false}}function kw(t){if(typeof t!="string")throw new bt("Refused: workspace path must be a string");if(t.includes("\0"))throw new bt("Refused: workspace path contains a null byte");let e=t.trim();if(e===""||e==="/"||e===".")return "";if(/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\"))throw new bt("Refused: absolute workspace path is not allowed");let r=e.replace(/^[/\\]+/,""),s=ze.normalize(r).split(/[\\/]+/).filter(Boolean);if(s.includes(".."))throw new bt(`Refused: ${t} escapes the workspace root`);return s.join(ze.sep)}function Zu(t,e){let r=Gu(ze.resolve(t)),n=Gu(ze.resolve(e)),s=r.endsWith(ze.sep)?r:r+ze.sep;return n===r||n.startsWith(s)}function Gu(t){return process.platform==="win32"||process.platform==="darwin"?t.toLowerCase():t}function bw(t){return t.split(ze.sep).join("/")}var Cw=new Set([".git","node_modules",".next","dist","build",".turbo",".cache","coverage","target","__pycache__",".venv","venv",".DS_Store",".idea",".vscode"]);async function xo(t,e){let r=await Yu(t,e),n=await promises.readdir(r.absolutePath,{withFileTypes:true,encoding:"utf8"}),s=[];for(let i of n){if(Cw.has(i.name))continue;let o=ze.join(r.absolutePath,i.name),a=i.isDirectory()||i.isSymbolicLink()&&await Xu(r.rootRealPath,o);s.push({absPath:o,relativePath:Ew(e,i.name),name:i.name,isDir:a});}return s.sort((i,o)=>i.isDir!==o.isDir?i.isDir?-1:1:i.name.localeCompare(o.name)),s}function Ew(t,e){return t==="/"||t===""?"/"+e:t+"/"+e}V();async function gs(t){let e=ed(t.env,t.workspaceId),r=false;if(t.refreshEpisodes!==false){let{error:o}=await t.supabase.rpc("pathrule_refresh_work_episodes",{p_workspace_id:t.workspaceId});r=!o;}let{data:n,error:s}=await t.supabase.rpc("pathrule_build_hook_index_payload",{p_workspace_id:t.workspaceId});if(s)return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:s.message};if(!n||typeof n!="object")return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:"empty_hook_index_payload"};let i={...n,workspace_root:t.workspaceRoot};return await Aw(t.env,i),{ok:true,path:e,refreshed_episodes:r,schema_version:i.schema_version}}function ed(t,e){return join(A(t).home,"cache",e,"hook-index.json")}async function Aw(t,e){let r=ed(t,e.workspace_id);await mkdir(join(A(t).home,"cache",e.workspace_id),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await chmod(n,384),await rename(n,r);}V();q();gt();function vt(t,e){let r=[];r.push("<!-- Pathrule managed \u2014 do not edit; cloud state is authoritative. -->",""),r.push("# Pathrule integration",""),r.push("Pathrule is this workspace's shared memory, rule, and skill layer for AI agents.",`${e.toolLabel} should use it as a smart reminder system, not a full-context dump.`,""),r.push("## Context Policy",""),r.push("- Pathrule is the first knowledge layer for this workspace. Use hook context first: metadata, relevant rule titles, path reminders, and filename/skill matches.","- `::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.",'- Do not reflexively call `pathrule_get_context` before every small known-path code task. For discovery, inventory, architecture, recent activity, or "list/show/find/where/which" prompts (Turkish: listele, g\xF6ster, bul, nerede, hangi, neler), call it before any grep/read/fallback when hook context is missing, ambiguous, or stale.',"- Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call `pathrule_get_context` first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant.","- When calling `pathrule_get_context`, pass `cwd`, `user_intent`, and `omit_protocol: true`; the companion file already contains the protocol.","- Read full bodies with `pathrule_read_memory`, `pathrule_read_rule`, or `pathrule_read_skill` when a surfaced title/id is relevant.","- Treat existing local edits as protected user/team work: inspect overlaps, never revert unrelated changes, and keep edits scoped.","- Obey every surfaced rule. If a user request conflicts with a Pathrule rule, warn before taking action.",""),r.push("## Writes",""),r.push("- Pathrule cloud is the source of truth. Do not create local memory files such as `MEMORY.md` or `~/.claude/memory/`.","- Use path-first writes for lasting project knowledge: `pathrule_write_memory`, `pathrule_write_rule`, and `pathrule_write_skill` take the most specific workspace-relative `node_path`.","- Do not edit materialized local Pathrule files as the source of truth. This includes `.codex/skills/**/SKILL.md`, `.claude/skills/**`, rendered companion files, and synced skill/memory/rule files. Read only for orientation; create/update cloud records with the Pathrule MCP write/update tools.","- After any file-modifying response, call `pathrule_log_activity` once with domain, action, scope, subjects, files_touched, and a concise task_summary.","");let n=r.join(`
110
+ `:n}var se="pathrule";function ko(t){if(!t||t.trim().length===0)return {};let e;try{e=mo(t);}catch(r){throw new Error(`config.toml is not valid TOML: ${r.message}`)}if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("config.toml root must be a TOML table");return e}function tw(t){let e={command:t.command,args:t.args,enabled:true};return t.env&&Object.keys(t.env).length>0&&(e.env=t.env),e}function rw(t){return !t||typeof t.command!="string"?null:{type:"stdio",command:t.command,args:Array.isArray(t.args)?t.args.map(String):[],env:t.env&&typeof t.env=="object"&&!Array.isArray(t.env)?t.env:void 0}}var qu={id:"codex",homeConfigPath(t,e){return `${t}/.codex/config.toml`},inject(t,e){let r=ko(t),n={...r.mcp_servers??{}},s=!(se in n);n[se]=tw(e);let i={...r,mcp_servers:n};return {body:hs(i)+`
111
+ `,wasNew:s}},remove(t){let e=ko(t),r=e.mcp_servers??{};if(!(se in r))return {body:t,wasPresent:false};let{[se]:n,...s}=r,i={...e};return Object.keys(s).length===0?delete i.mcp_servers:i.mcp_servers=s,Object.keys(i).length===0?{body:null,wasPresent:true}:{body:hs(i)+`
112
+ `,wasPresent:true}},read(t){try{let e=ko(t);return rw(e.mcp_servers?.[se])}catch{return null}}};function nw(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("`mcpServers` must be an object");return e}function bo(t){if(!t||t.trim().length===0)return {};let e;try{e=JSON.parse(t);}catch(r){throw new Error(`Config is not valid JSON: ${r.message}`)}return nw(e)}function zu(t){return JSON.stringify(t,null,2)+`
113
+ `}function fs(t){function e(r){if(t.includeTypeField)return r;let{type:n,...s}=r;return s}return {inject(r,n){let s=bo(r),i={...s.mcpServers??{}},o=!(se in i);i[se]=e(n);let a={...s,mcpServers:i};return {body:zu(a),wasNew:o}},remove(r){let n=bo(r),s=n.mcpServers??{};if(!(se in s))return {body:r,wasPresent:false};let{[se]:i,...o}=s,a={...n,mcpServers:o};return Object.keys(o).length===0&&Object.keys(a).length===1&&"mcpServers"in a?{body:null,wasPresent:true}:{body:zu(a),wasPresent:true}},read(r){try{return bo(r).mcpServers?.[se]??null}catch{return null}}}}var vo=fs({includeTypeField:true}),Ju={id:"cursor",homeConfigPath(t,e){return `${t}/.cursor/mcp.json`},inject:vo.inject,remove:vo.remove,read:vo.read};var So=fs({includeTypeField:false}),Ku={id:"windsurf",homeConfigPath(t,e){return `${t}/.codeium/windsurf/mcp_config.json`},inject:So.inject,remove:So.remove,read:So.read};var sw={"claude-code":Du,cursor:Ju,codex:qu,windsurf:Ku};function kt(t){return sw[t]}Wr();q();Ce();var dw=createRequire(import.meta.url),pw=dw("../package.json"),hw=pw.version,fw=["claude-code","cursor","codex","windsurf"];async function $e(t,e){let r=[],n=await Se(t);r.push({name:"auth",status:n?"pass":"fail",detail:n?n.session.user.email??n.session.user.id:"not_authenticated"});let s=null;if(n){try{let u=await j(t);r.push({name:"organization",status:u?"pass":"warn",detail:u?.slug??"no organization selected"});}catch(u){r.push({name:"organization",status:"fail",detail:u instanceof Error?u.message:String(u)});}try{let u=await M(t);s=u?.local_root_path??null,r.push({name:"workspace",status:u?"pass":"warn",detail:u?.name??"no workspace selected"});}catch(u){r.push({name:"workspace",status:"fail",detail:u instanceof Error?u.message:String(u)});}}r.push({name:"cwd_attach",status:s===e?"pass":"warn",detail:s===e?"current folder is attached":s??"workspace not attached"});let i=await Promise.all(fw.map(kw)),o=Ou(await as(e),"cli",hw),a=o.filter(u=>u.status==="other_owner").length,l=o.filter(u=>u.status==="newer_version").length;return a>0||l>0?r.push({name:"managed_files",status:"warn",detail:mw(a,l)}):o.length>0?r.push({name:"managed_files",status:"pass",detail:`${o.length} Pathrule-managed file${o.length===1?"":"s"} tracked`}):r.push({name:"managed_files",status:"pass",detail:"no Pathrule-managed files tracked yet"}),{ok:!r.some(u=>u.status==="fail"),checks:r,mcp:i,managed_files:o}}async function Eo(t,e){await ww(t);let r=await $e(t,e),n=A(t);await mkdir(n.supportDir,{recursive:true,mode:D}),await chmod(n.supportDir,D).catch(()=>{});let s=join(n.supportDir,`${new Date().toISOString().replace(/[:.]/g,"-")}-doctor.json`),i={schema_version:1,produced_at:new Date().toISOString(),cwd_hash:yw(e),platform:process.platform,node_version:process.version,env_keys:Object.keys(t).filter(o=>o.startsWith("PATHRULE_")||o==="CI"||o==="NO_COLOR").sort(),report:gw(r)};return il(i),await writeFile(s,JSON.stringify(i,null,2),{encoding:"utf8",mode:O}),await chmod(s,O).catch(()=>{}),{ok:r.ok,path:s,report:r}}function gw(t){return {ok:t.ok,checks:t.checks.map(e=>({...e,detail:Co(e.detail)})),mcp:t.mcp.map(e=>({...e,config_path:_w(e.config_path),error:Co(e.error)})),managed_files:t.managed_files.map(e=>({...e,path:Co(e.path)??e.path}))}}function mw(t,e){let r=[];return t>0&&r.push(`${t} file${t===1?"":"s"} last written by another surface`),e>0&&r.push(`${e} file${e===1?"":"s"} last written by a newer CLI`),r.join("; ")}function Co(t){return t&&ni(t)}function _w(t){return ni(t,"path")}async function ww(t){let{supabase:e}=await R(t),{data:r,error:n}=await e.rpc("consume_sensitive_action_grant",{p_action:"token_export"});if(n)throw new Error(`token_export_reauth_check_failed: ${n.message}`);if(r!==true)throw new Error("token_export_reauth_required")}function yw(t){let e=2166136261;for(let r=0;r<t.length;r+=1)e^=t.charCodeAt(r),e=Math.imul(e,16777619);return (e>>>0).toString(16).padStart(8,"0")}async function kw(t){let e=kt(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {client:t,config_path:r,readable:!0,installed:e.read(n)!==null}}catch(n){return n.code==="ENOENT"?{client:t,config_path:r,readable:false,installed:false}:{client:t,config_path:r,readable:false,installed:false,error:n instanceof Error?n.message:String(n)}}}var bt=class extends Error{constructor(e){super(e),this.name="WorkspacePathSafetyError";}};async function Yu(t,e){let r=await realpath(t),n=vw(e),s=ze.resolve(r,n||"."),i=await realpath(s);if(!Zu(r,i))throw new bt(`Refused: ${e||"/"} escapes the workspace root`);return {rootRealPath:r,absolutePath:i,relativePath:n===""?"/":`/${Sw(n)}`}}async function Xu(t,e){try{let r=await realpath(e);return Zu(t,r)?(await stat(r)).isDirectory():!1}catch{return false}}function vw(t){if(typeof t!="string")throw new bt("Refused: workspace path must be a string");if(t.includes("\0"))throw new bt("Refused: workspace path contains a null byte");let e=t.trim();if(e===""||e==="/"||e===".")return "";if(/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\"))throw new bt("Refused: absolute workspace path is not allowed");let r=e.replace(/^[/\\]+/,""),s=ze.normalize(r).split(/[\\/]+/).filter(Boolean);if(s.includes(".."))throw new bt(`Refused: ${t} escapes the workspace root`);return s.join(ze.sep)}function Zu(t,e){let r=Gu(ze.resolve(t)),n=Gu(ze.resolve(e)),s=r.endsWith(ze.sep)?r:r+ze.sep;return n===r||n.startsWith(s)}function Gu(t){return process.platform==="win32"||process.platform==="darwin"?t.toLowerCase():t}function Sw(t){return t.split(ze.sep).join("/")}var Rw=new Set([".git","node_modules",".next","dist","build",".turbo",".cache","coverage","target","__pycache__",".venv","venv",".DS_Store",".idea",".vscode"]);async function xo(t,e){let r=await Yu(t,e),n=await promises.readdir(r.absolutePath,{withFileTypes:true,encoding:"utf8"}),s=[];for(let i of n){if(Rw.has(i.name))continue;let o=ze.join(r.absolutePath,i.name),a=i.isDirectory()||i.isSymbolicLink()&&await Xu(r.rootRealPath,o);s.push({absPath:o,relativePath:xw(e,i.name),name:i.name,isDir:a});}return s.sort((i,o)=>i.isDir!==o.isDir?i.isDir?-1:1:i.name.localeCompare(o.name)),s}function xw(t,e){return t==="/"||t===""?"/"+e:t+"/"+e}V();async function gs(t){let e=ed(t.env,t.workspaceId),r=false;if(t.refreshEpisodes!==false){let{error:o}=await t.supabase.rpc("pathrule_refresh_work_episodes",{p_workspace_id:t.workspaceId});r=!o;}let{data:n,error:s}=await t.supabase.rpc("pathrule_build_hook_index_payload",{p_workspace_id:t.workspaceId});if(s)return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:s.message};if(!n||typeof n!="object")return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:"empty_hook_index_payload"};let i={...n,workspace_root:t.workspaceRoot};return await Ow(t.env,i),{ok:true,path:e,refreshed_episodes:r,schema_version:i.schema_version}}function ed(t,e){return join(A(t).home,"cache",e,"hook-index.json")}async function Ow(t,e){let r=ed(t,e.workspace_id);await mkdir(join(A(t).home,"cache",e.workspace_id),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await chmod(n,384),await rename(n,r);}V();q();gt();function vt(t,e){let r=[];r.push("<!-- Pathrule managed \u2014 do not edit; cloud state is authoritative. -->",""),r.push("# Pathrule integration",""),r.push("Pathrule is this workspace's shared memory, rule, and skill layer for AI agents.",`${e.toolLabel} should use it as a smart reminder system, not a full-context dump.`,""),r.push("## Context Policy",""),r.push("- Pathrule is the first knowledge layer for this workspace. Use hook context first: metadata, relevant rule titles, path reminders, and filename/skill matches.","- `::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.",'- Do not reflexively call `pathrule_get_context` before every small known-path code task. For discovery, inventory, architecture, recent activity, or "list/show/find/where/which" prompts (Turkish: listele, g\xF6ster, bul, nerede, hangi, neler), call it before any grep/read/fallback when hook context is missing, ambiguous, or stale.',"- Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call `pathrule_get_context` first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant.","- When calling `pathrule_get_context`, pass `cwd`, `user_intent`, and `omit_protocol: true`; the companion file already contains the protocol.","- Read full bodies with `pathrule_read_memory`, `pathrule_read_rule`, or `pathrule_read_skill` when a surfaced title/id is relevant.","- Treat existing local edits as protected user/team work: inspect overlaps, never revert unrelated changes, and keep edits scoped.","- Obey every surfaced rule. If a user request conflicts with a Pathrule rule, warn before taking action.",""),r.push("## Writes",""),r.push("- Pathrule cloud is the source of truth. Do not create local memory files such as `MEMORY.md` or `~/.claude/memory/`.","- Use path-first writes for lasting project knowledge: `pathrule_write_memory`, `pathrule_write_rule`, and `pathrule_write_skill` take the most specific workspace-relative `node_path`.","- Do not edit materialized local Pathrule files as the source of truth. This includes `.codex/skills/**/SKILL.md`, `.claude/skills/**`, rendered companion files, and synced skill/memory/rule files. Read only for orientation; create/update cloud records with the Pathrule MCP write/update tools.","- After any file-modifying response, call `pathrule_log_activity` once with domain, action, scope, subjects, files_touched, and a concise task_summary.","");let n=r.join(`
114
114
  `).replace(/\n{3,}/g,`
115
115
 
116
116
  `);return n.endsWith(`
117
117
  `)?n:`${n}
118
- `}var td="AGENTS.md",rd=".codex/hooks.json",nd=".codex/config.toml";function Iw(t){let e=vt(t,{toolLabel:"Codex"}),r=za(Ue()),n=_n(null).body;return [{path:td,body:e},{path:rd,body:r},{path:nd,body:n}]}function Ow(t){return [td,"codex.md",rd,nd]}var sd={id:"codex",render:Iw,ownedPaths:Ow};var id=".cursor/rules/pathrule-protocol.mdc",od=".cursorrules",ad=".cursor/hooks.json";function $w(){return ["## Cursor-specific guardrail","","- If you call `pathrule_get_context`, include BOTH `cwd` and `user_intent`.","- `cwd` MUST be the absolute path of the active workspace root.","- Never call `pathrule_get_context` with empty args. If `cwd` is unknown, resolve it first.","","Example:","","```json",`{ "cwd": "/absolute/path/to/workspace", "user_intent": "<user's last message>", "omit_protocol": true }`,"```",""].join(`
119
- `)}function Nw(){return ["---",'description: "Pathrule integration \u2014 workspace-shared memories, rules, and skills"',"alwaysApply: true","---",""].join(`
120
- `)}function jw(t){let e=vt(t,{toolLabel:"Cursor"})+`
121
- `+$w(),r=qa(Ue());return [{path:id,body:Nw()+e},{path:od,body:e},{path:ad,body:r}]}function Dw(t){return [id,od,ad]}var ld={id:"cursor",render:jw,ownedPaths:Dw};var cd=".windsurf/rules/pathrule-protocol.md",ud=".windsurfrules";function Lw(t){let e=vt(t,{toolLabel:"Windsurf"});return [{path:cd,body:e},{path:ud,body:e}]}function Uw(t){return [cd,ud]}var dd={id:"windsurf",render:Lw,ownedPaths:Uw};var Mw={cursor:ld,codex:sd,windsurf:dd};function pd(t){return Mw[t]??null}async function Ww(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function Bw(t,e){try{let r=new Date(Date.now()-12096e5).toISOString(),{data:n}=await t.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",e).eq("status","active").gte("created_at",r).order("created_at",{ascending:!1}).limit(8);return n??[]}catch{return []}}async function hd(t){let e={supabase:t.supabase},[r,n,s,i]=await Promise.all([Ww(t.supabase,t.workspaceId),hn(e,{workspace_id:t.workspaceId,relative_path:"/"}),$t(e,{workspace_id:t.workspaceId}),Bw(t.supabase,t.workspaceId)]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!s.ok)throw new Error(`getWorkspaceOverview failed: ${s.error.message}`);return {workspaceName:r,rootContext:{memories:n.data.memories.map(o=>({id:o.id,title:o.title,preview:o.preview})),rules:n.data.rules,skills:n.data.skills.map(o=>({id:o.id,name:o.name,description:o.description,source:o.source}))},overview:s.data,recentActivities:i.length>0?i:void 0}}function fd(t,e){let r=[];for(let n of e){let s=pd(n);s&&r.push({client:n,files:s.render(t),ownedPaths:s.ownedPaths(t)});}return r}var Po="<!-- Pathrule managed",Kw="<!-- managed by Pathrule";var Vw={".cursor/rules/pathrule-protocol.mdc":{kind:"overwrite"},".cursorrules":{kind:"backup-on-first-write",markerSubstring:Po},".cursor/hooks.json":{kind:"merge",merger:Ga},".claude/rules/pathrule-protocol.md":{kind:"overwrite"},".claude/settings.json":{kind:"merge",merger:mn},"CLAUDE.md":{kind:"backup-on-first-write",markerSubstring:Kw},"AGENTS.md":{kind:"backup-on-first-write",markerSubstring:Po},".codex/hooks.json":{kind:"merge",merger:Ya},".codex/config.toml":{kind:"merge",merger:_n},".windsurf/rules/pathrule-protocol.md":{kind:"overwrite"},".windsurfrules":{kind:"backup-on-first-write",markerSubstring:Po}};async function md(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function Gw(t){if(!await md(t))return t;for(let e=1;e<1e3;e+=1){let r=`${t}.${e}`;if(!await md(r))return r}throw new Error(`Could not find a free backup name near ${t}`)}async function ms(t){let e=Vw[t.relativePath]??{kind:"overwrite"},r=join(t.workspaceRoot,t.relativePath);switch(e.kind){case "overwrite":return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:null};case "backup-on-first-write":{let n=t.existingBody!==null&&!t.existingBody.includes(e.markerSubstring)&&t.existingBody!==t.renderedBody,s=null;if(n){let i=await Gw(join(dirname(r),`backup.${basename(r)}`));await rename(r,i),s=i;}return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:s}}case "merge":{let{body:n,changed:s}=e.merger(t.existingBody);return !s&&t.existingBody===n?{finalBody:null,backupPath:null}:{finalBody:n,backupPath:null}}}}async function sy(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function iy(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function oy(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function ay(t){try{return await unlink(t),!0}catch(e){return e.code==="ENOENT",false}}async function wd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]},r=new Set,n=new Set;for(let s of t.results){let i=new Set(s.files.map(o=>o.path));for(let o of s.files){let a=join(t.workspaceRoot,o.path);try{let l=await oy(a),c=await ms({workspaceRoot:t.workspaceRoot,relativePath:o.path,renderedBody:o.body,existingBody:l});if(c.backupPath&&e.backedUp.push(c.backupPath),c.finalBody===null){e.skipped+=1,r.add(o.path);continue}await iy(a,c.finalBody),e.written+=1,r.add(o.path);}catch(l){e.errors.push({path:o.path,message:l instanceof Error?l.message:String(l)});}}for(let o of s.ownedPaths){if(i.has(o))continue;let a=join(t.workspaceRoot,o);if(!await sy(a))continue;await ay(a)&&(e.removed+=1,n.add(o));}}if(t.runtimeOwner&&t.runtimeVersion)try{await ls({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:t.runtimeOwner,ownerVersion:t.runtimeVersion}),await Iu({workspaceRoot:t.workspaceRoot,paths:Array.from(n)});}catch(s){e.errors.push({path:".pathrule/managed-files.json",message:s instanceof Error?s.message:String(s)});}return e}var ly=["cursor","codex","windsurf"];async function cy(t,e,r){let{data:n}=await t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle();return n?.selected_ai_clients??null}async function yd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]};try{let[r,n]=await Promise.all([cy(t.supabase,t.userId,t.workspaceId),We(t.workspaceRoot)]),s=vn({selected:r,detected:n,fallback:yn}),i=s.filter(c=>ly.includes(c));if(i.length===0)return {ok:!0,enabled:s,results:[],disk:e};let o=await hd({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId}),a=fd(o,i),l=await wd({workspaceRoot:t.workspaceRoot,results:a,sweepFor:i,runtimeOwner:t.runtimeOwner,runtimeVersion:t.runtimeVersion});return {ok:!0,enabled:s,results:a,disk:l}}catch(r){return {ok:false,enabled:[],results:[],disk:e,error:r instanceof Error?r.message:String(r)}}}V();var _y=".pathrule-skills-manifest.json",Qt=2;function Gr(){return {version:Qt,skills:{}}}function Yr(t){return createHash("sha256").update(t,"utf8").digest("hex")}function kd(t){return join(t,".claude",_y)}function wy(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.slug=="string"&&typeof e.hash=="string"&&typeof e.source=="string"&&(e.fetchedAt===null||typeof e.fetchedAt=="string")&&Array.isArray(e.targets)&&e.targets.every(r=>typeof r=="string")}function yy(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.path=="string"&&typeof e.hash=="string"}function ky(t,e){if(!t||typeof t!="object"||Array.isArray(t))return null;let r={};for(let[n,s]of Object.entries(t)){if(!wy(s)||e===Qt&&s.files!==void 0&&!Array.isArray(s.files)||e===Qt&&s.files?.some(i=>!yy(i)))return null;r[n]={slug:s.slug,hash:s.hash,source:s.source,fetchedAt:s.fetchedAt,targets:s.targets,...e===Qt&&s.files?{files:s.files}:{}};}return r}async function bd(t){try{let e=await readFile(kd(t),"utf8"),r=JSON.parse(e);if(!r||typeof r!="object"||r.version!==Qt&&r.version!==1)return Gr();let n=ky(r.skills??{},r.version);return n?{version:Qt,skills:n}:Gr()}catch{return Gr()}}async function vd(t,e){let r=kd(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await rename(n,r);}async function er(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function Oy(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}function $y(t){let e=t.content??"";if(e.trim().startsWith("---"))return e.endsWith(`
118
+ `}var td="AGENTS.md",rd=".codex/hooks.json",nd=".codex/config.toml";function $w(t){let e=vt(t,{toolLabel:"Codex"}),r=za(Me()),n=_n(null).body;return [{path:td,body:e},{path:rd,body:r},{path:nd,body:n}]}function Nw(t){return [td,"codex.md",rd,nd]}var sd={id:"codex",render:$w,ownedPaths:Nw};var id=".cursor/rules/pathrule-protocol.mdc",od=".cursorrules",ad=".cursor/hooks.json";function jw(){return ["## Cursor-specific guardrail","","- If you call `pathrule_get_context`, include BOTH `cwd` and `user_intent`.","- `cwd` MUST be the absolute path of the active workspace root.","- Never call `pathrule_get_context` with empty args. If `cwd` is unknown, resolve it first.","","Example:","","```json",`{ "cwd": "/absolute/path/to/workspace", "user_intent": "<user's last message>", "omit_protocol": true }`,"```",""].join(`
119
+ `)}function Dw(){return ["---",'description: "Pathrule integration \u2014 workspace-shared memories, rules, and skills"',"alwaysApply: true","---",""].join(`
120
+ `)}function Lw(t){let e=vt(t,{toolLabel:"Cursor"})+`
121
+ `+jw(),r=qa(Me());return [{path:id,body:Dw()+e},{path:od,body:e},{path:ad,body:r}]}function Mw(t){return [id,od,ad]}var ld={id:"cursor",render:Lw,ownedPaths:Mw};var cd=".windsurf/rules/pathrule-protocol.md",ud=".windsurfrules";function Uw(t){let e=vt(t,{toolLabel:"Windsurf"});return [{path:cd,body:e},{path:ud,body:e}]}function Ww(t){return [cd,ud]}var dd={id:"windsurf",render:Uw,ownedPaths:Ww};var Bw={cursor:ld,codex:sd,windsurf:dd};function pd(t){return Bw[t]??null}async function Fw(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function Hw(t,e){try{let r=new Date(Date.now()-12096e5).toISOString(),{data:n}=await t.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",e).eq("status","active").gte("created_at",r).order("created_at",{ascending:!1}).limit(8);return n??[]}catch{return []}}async function hd(t){let e={supabase:t.supabase},[r,n,s,i]=await Promise.all([Fw(t.supabase,t.workspaceId),hn(e,{workspace_id:t.workspaceId,relative_path:"/"}),$t(e,{workspace_id:t.workspaceId}),Hw(t.supabase,t.workspaceId)]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!s.ok)throw new Error(`getWorkspaceOverview failed: ${s.error.message}`);return {workspaceName:r,rootContext:{memories:n.data.memories.map(o=>({id:o.id,title:o.title,preview:o.preview})),rules:n.data.rules,skills:n.data.skills.map(o=>({id:o.id,name:o.name,description:o.description,source:o.source}))},overview:s.data,recentActivities:i.length>0?i:void 0}}function fd(t,e){let r=[];for(let n of e){let s=pd(n);s&&r.push({client:n,files:s.render(t),ownedPaths:s.ownedPaths(t)});}return r}var Po="<!-- Pathrule managed",Gw="<!-- managed by Pathrule";var Yw={".cursor/rules/pathrule-protocol.mdc":{kind:"overwrite"},".cursorrules":{kind:"backup-on-first-write",markerSubstring:Po},".cursor/hooks.json":{kind:"merge",merger:Ga},".claude/rules/pathrule-protocol.md":{kind:"overwrite"},".claude/settings.json":{kind:"merge",merger:mn},"CLAUDE.md":{kind:"backup-on-first-write",markerSubstring:Gw},"AGENTS.md":{kind:"backup-on-first-write",markerSubstring:Po},".codex/hooks.json":{kind:"merge",merger:Ya},".codex/config.toml":{kind:"merge",merger:_n},".windsurf/rules/pathrule-protocol.md":{kind:"overwrite"},".windsurfrules":{kind:"backup-on-first-write",markerSubstring:Po}};async function md(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function Xw(t){if(!await md(t))return t;for(let e=1;e<1e3;e+=1){let r=`${t}.${e}`;if(!await md(r))return r}throw new Error(`Could not find a free backup name near ${t}`)}async function ms(t){let e=Yw[t.relativePath]??{kind:"overwrite"},r=join(t.workspaceRoot,t.relativePath);switch(e.kind){case "overwrite":return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:null};case "backup-on-first-write":{let n=t.existingBody!==null&&!t.existingBody.includes(e.markerSubstring)&&t.existingBody!==t.renderedBody,s=null;if(n){let i=await Xw(join(dirname(r),`backup.${basename(r)}`));await rename(r,i),s=i;}return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:s}}case "merge":{let{body:n,changed:s}=e.merger(t.existingBody);return !s&&t.existingBody===n?{finalBody:null,backupPath:null}:{finalBody:n,backupPath:null}}}}async function oy(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function ay(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function ly(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function cy(t){try{return await unlink(t),!0}catch(e){return e.code==="ENOENT",false}}async function wd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]},r=new Set,n=new Set;for(let s of t.results){let i=new Set(s.files.map(o=>o.path));for(let o of s.files){let a=join(t.workspaceRoot,o.path);try{let l=await ly(a),c=await ms({workspaceRoot:t.workspaceRoot,relativePath:o.path,renderedBody:o.body,existingBody:l});if(c.backupPath&&e.backedUp.push(c.backupPath),c.finalBody===null){e.skipped+=1,r.add(o.path);continue}await ay(a,c.finalBody),e.written+=1,r.add(o.path);}catch(l){e.errors.push({path:o.path,message:l instanceof Error?l.message:String(l)});}}for(let o of s.ownedPaths){if(i.has(o))continue;let a=join(t.workspaceRoot,o);if(!await oy(a))continue;await cy(a)&&(e.removed+=1,n.add(o));}}if(t.runtimeOwner&&t.runtimeVersion)try{await ls({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:t.runtimeOwner,ownerVersion:t.runtimeVersion}),await Iu({workspaceRoot:t.workspaceRoot,paths:Array.from(n)});}catch(s){e.errors.push({path:".pathrule/managed-files.json",message:s instanceof Error?s.message:String(s)});}return e}var uy=["cursor","codex","windsurf"];async function dy(t,e,r){let{data:n}=await t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle();return n?.selected_ai_clients??null}async function yd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]};try{let[r,n]=await Promise.all([dy(t.supabase,t.userId,t.workspaceId),We(t.workspaceRoot)]),s=vn({selected:r,detected:n,fallback:yn}),i=s.filter(c=>uy.includes(c));if(i.length===0)return {ok:!0,enabled:s,results:[],disk:e};let o=await hd({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId}),a=fd(o,i),l=await wd({workspaceRoot:t.workspaceRoot,results:a,sweepFor:i,runtimeOwner:t.runtimeOwner,runtimeVersion:t.runtimeVersion});return {ok:!0,enabled:s,results:a,disk:l}}catch(r){return {ok:false,enabled:[],results:[],disk:e,error:r instanceof Error?r.message:String(r)}}}V();var yy=".pathrule-skills-manifest.json",Qt=2;function Yr(){return {version:Qt,skills:{}}}function Xr(t){return createHash("sha256").update(t,"utf8").digest("hex")}function kd(t){return join(t,".claude",yy)}function ky(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.slug=="string"&&typeof e.hash=="string"&&typeof e.source=="string"&&(e.fetchedAt===null||typeof e.fetchedAt=="string")&&Array.isArray(e.targets)&&e.targets.every(r=>typeof r=="string")}function by(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.path=="string"&&typeof e.hash=="string"}function vy(t,e){if(!t||typeof t!="object"||Array.isArray(t))return null;let r={};for(let[n,s]of Object.entries(t)){if(!ky(s)||e===Qt&&s.files!==void 0&&!Array.isArray(s.files)||e===Qt&&s.files?.some(i=>!by(i)))return null;r[n]={slug:s.slug,hash:s.hash,source:s.source,fetchedAt:s.fetchedAt,targets:s.targets,...e===Qt&&s.files?{files:s.files}:{}};}return r}async function bd(t){try{let e=await readFile(kd(t),"utf8"),r=JSON.parse(e);if(!r||typeof r!="object"||r.version!==Qt&&r.version!==1)return Yr();let n=vy(r.skills??{},r.version);return n?{version:Qt,skills:n}:Yr()}catch{return Yr()}}async function vd(t,e){let r=kd(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await rename(n,r);}async function er(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function Ny(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}function jy(t){let e=t.content??"";if(e.trim().startsWith("---"))return e.endsWith(`
122
122
  `)?e:`${e}
123
123
  `;let r=t.name.replace(/"/g,"'"),n=(t.description??"").replace(/"/g,"'").replace(/\r?\n/g," ").trim();return `${`---
124
124
  name: "${r}"
@@ -127,8 +127,8 @@ name: "${r}"
127
127
 
128
128
  `}${e}${e.endsWith(`
129
129
  `)?"":`
130
- `}`}function Ny(t,e,r){let n=e.skills[t.id]?.slug;if(n&&!r.has(n))return n;let s=kn(t.name);return s&&!r.has(s)?s:nl(t.name,t.id)}async function _s(t,e,r){let n=join(t,e.skillsDir,r);await er(n)&&await rm$1(n,{recursive:true,force:true});}function Ao(t){let e=t.trim();if(!e)throw new Error("Package file path is empty");if(e.includes("\\"))throw new Error(`Unsafe package file path: ${t}`);if(e.includes("//"))throw new Error(`Unsafe package file path: ${t}`);if(posix.isAbsolute(e)||win32.isAbsolute(e))throw new Error(`Unsafe package file path: ${t}`);if(e.split("/").some(s=>!s||s===".."))throw new Error(`Unsafe package file path: ${t}`);let r=posix.normalize(e);if(!r||r==="."||r.startsWith("../"))throw new Error(`Unsafe package file path: ${t}`);if(r.split("/").some(s=>!s||s===".."))throw new Error(`Unsafe package file path: ${t}`);return r}function jy(t){if(!t.files?.length){let n=$y(t);return [{path:"SKILL.md",content:n,hash:Yr(n)}]}let e=new Set,r=t.files.map(n=>{let s=Ao(n.path);if(e.has(s))throw new Error(`Duplicate package file path: ${s}`);return e.add(s),{path:s,content:n.content,hash:n.sha256||Yr(n.content)}}).sort((n,s)=>n.path.localeCompare(s.path));for(let n=1;n<r.length;n+=1){let s=r[n-1],i=r[n];if(Sd(s.path,i.path))throw new Error(`Conflicting package file paths: ${s.path}, ${i.path}`)}return r}function Dy(t){return Yr(t.map(e=>`${e.path}\0${e.hash}`).join(`
131
- `))}function Io(t){return t.files?.length?t.files:[{path:"SKILL.md",hash:t.hash}]}function Sd(t,e){return t!==e&&(t.startsWith(`${e}/`)||e.startsWith(`${t}/`))}async function Ly(t,e,r,n){let s=posix.dirname(n);for(;s&&s!==".";){try{await rmdir(join(t,e.skillsDir,r,s));}catch{return}s=posix.dirname(s);}}async function Uy(t,e,r,n,s){if(!n)return 0;let i=0;for(let o of Io(n)){let a;try{a=Ao(o.path);}catch{continue}if(!Array.from(s).some(u=>Sd(a,u)))continue;let c=join(t,e.skillsDir,r,a);await er(c)&&(await rm$1(c,{force:true}),i+=1,await Ly(t,e,r,a));}return i}async function My(t,e,r,n,s){if(!n)return 0;let i=0;for(let o of Io(n)){let a;try{a=Ao(o.path);}catch{continue}if(s.has(a))continue;let l=join(t,e.skillsDir,r,a);await er(l)&&(await rm$1(l,{force:true}),i+=1);}return i}async function Wy(t,e){let r=join(t,e.skillsDir);if(!await er(r))return [];try{return (await readdir(r,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>s.name)}catch{return []}}function By(t){let e=new Map;for(let r of t){let n=kn(r.name),s=e.get(n);if(!s){e.set(n,r);continue}let i=s.updatedAt?Date.parse(s.updatedAt):0;(r.updatedAt?Date.parse(r.updatedAt):0)>i&&e.set(n,r);}return Array.from(e.values())}async function Cd(t){let{workspaceRoot:e,activeTargets:r}=t,n=By(t.skills),s={written:0,skipped:0,removed:0,errors:[]},i=rl(r),o=await bd(e),a=new Set,l={};for(let p of n)try{let h=Ny(p,o,a);a.add(h);let f=jy(p),m=f.map(P=>({path:P.path,hash:P.hash})),_=!!p.files?.length,k=_?Dy(m):m[0]?.hash??Yr(""),b=o.skills[p.id],w=new Map((b?Io(b):[]).map(P=>[P.path,P.hash])),I=new Set(f.map(P=>P.path)),Y=[];for(let P of i){let $=b&&b.slug!==h;$&&b&&await _s(e,P,b.slug),s.removed+=await Uy(e,P,h,$?void 0:b,I);for(let Pe of f){let ie=join(e,P.skillsDir,h,Pe.path),Qp=w.get(Pe.path)!==Pe.hash,eh=!await er(ie);Qp||eh||$?(await Oy(ie,Pe.content),s.written+=1):s.skipped+=1;}s.removed+=await My(e,P,h,$?void 0:b,I),Y.push(P.id);}if(b){let P=b.targets.filter($=>!Y.includes($));for(let $ of P){let Pe=M[$];Pe&&(await _s(e,Pe,b.slug),s.removed+=1);}}l[p.id]={slug:h,hash:k,source:p.source,fetchedAt:p.source==="github_ref"?p.contentFetchedAt:null,targets:Y,..._?{files:m}:{}};}catch(h){let f=o.skills[p.id];f&&(l[p.id]=f),s.errors.push({skillId:p.id,message:h instanceof Error?h.message:String(h)});}let c=new Set(n.map(p=>p.id));for(let[p,h]of Object.entries(o.skills))if(!c.has(p))for(let f of h.targets){let m=M[f];m&&(await _s(e,m,h.slug),s.removed+=1);}let u=new Set;for(let p of Object.values(l))u.add(p.slug);for(let p of Object.values(o.skills))u.add(p.slug);for(let p of i){let h=await Wy(e,p);for(let f of h)Object.values(l).some(_=>_.slug===f)||u.has(f)&&(await _s(e,p,f),s.removed+=1);}let d={version:o.version,skills:l};return await vd(e,d),Object.keys(l).length>0&&await Hy(e).catch(()=>{}),s}var Ed="# Pathrule-managed skills (M18) \u2014",Fy=`
130
+ `}`}function Dy(t,e,r){let n=e.skills[t.id]?.slug;if(n&&!r.has(n))return n;let s=kn(t.name);return s&&!r.has(s)?s:nl(t.name,t.id)}async function _s(t,e,r){let n=join(t,e.skillsDir,r);await er(n)&&await rm$1(n,{recursive:true,force:true});}function Ao(t){let e=t.trim();if(!e)throw new Error("Package file path is empty");if(e.includes("\\"))throw new Error(`Unsafe package file path: ${t}`);if(e.includes("//"))throw new Error(`Unsafe package file path: ${t}`);if(posix.isAbsolute(e)||win32.isAbsolute(e))throw new Error(`Unsafe package file path: ${t}`);if(e.split("/").some(s=>!s||s===".."))throw new Error(`Unsafe package file path: ${t}`);let r=posix.normalize(e);if(!r||r==="."||r.startsWith("../"))throw new Error(`Unsafe package file path: ${t}`);if(r.split("/").some(s=>!s||s===".."))throw new Error(`Unsafe package file path: ${t}`);return r}function Ly(t){if(!t.files?.length){let n=jy(t);return [{path:"SKILL.md",content:n,hash:Xr(n)}]}let e=new Set,r=t.files.map(n=>{let s=Ao(n.path);if(e.has(s))throw new Error(`Duplicate package file path: ${s}`);return e.add(s),{path:s,content:n.content,hash:n.sha256||Xr(n.content)}}).sort((n,s)=>n.path.localeCompare(s.path));for(let n=1;n<r.length;n+=1){let s=r[n-1],i=r[n];if(Sd(s.path,i.path))throw new Error(`Conflicting package file paths: ${s.path}, ${i.path}`)}return r}function My(t){return Xr(t.map(e=>`${e.path}\0${e.hash}`).join(`
131
+ `))}function Io(t){return t.files?.length?t.files:[{path:"SKILL.md",hash:t.hash}]}function Sd(t,e){return t!==e&&(t.startsWith(`${e}/`)||e.startsWith(`${t}/`))}async function Uy(t,e,r,n){let s=posix.dirname(n);for(;s&&s!==".";){try{await rmdir(join(t,e.skillsDir,r,s));}catch{return}s=posix.dirname(s);}}async function Wy(t,e,r,n,s){if(!n)return 0;let i=0;for(let o of Io(n)){let a;try{a=Ao(o.path);}catch{continue}if(!Array.from(s).some(u=>Sd(a,u)))continue;let c=join(t,e.skillsDir,r,a);await er(c)&&(await rm$1(c,{force:true}),i+=1,await Uy(t,e,r,a));}return i}async function By(t,e,r,n,s){if(!n)return 0;let i=0;for(let o of Io(n)){let a;try{a=Ao(o.path);}catch{continue}if(s.has(a))continue;let l=join(t,e.skillsDir,r,a);await er(l)&&(await rm$1(l,{force:true}),i+=1);}return i}async function Fy(t,e){let r=join(t,e.skillsDir);if(!await er(r))return [];try{return (await readdir(r,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>s.name)}catch{return []}}function Hy(t){let e=new Map;for(let r of t){let n=kn(r.name),s=e.get(n);if(!s){e.set(n,r);continue}let i=s.updatedAt?Date.parse(s.updatedAt):0;(r.updatedAt?Date.parse(r.updatedAt):0)>i&&e.set(n,r);}return Array.from(e.values())}async function Cd(t){let{workspaceRoot:e,activeTargets:r}=t,n=Hy(t.skills),s={written:0,skipped:0,removed:0,errors:[]},i=rl(r),o=await bd(e),a=new Set,l={};for(let p of n)try{let h=Dy(p,o,a);a.add(h);let f=Ly(p),m=f.map(P=>({path:P.path,hash:P.hash})),_=!!p.files?.length,k=_?My(m):m[0]?.hash??Xr(""),b=o.skills[p.id],w=new Map((b?Io(b):[]).map(P=>[P.path,P.hash])),I=new Set(f.map(P=>P.path)),X=[];for(let P of i){let $=b&&b.slug!==h;$&&b&&await _s(e,P,b.slug),s.removed+=await Wy(e,P,h,$?void 0:b,I);for(let Pe of f){let oe=join(e,P.skillsDir,h,Pe.path),Qp=w.get(Pe.path)!==Pe.hash,eh=!await er(oe);Qp||eh||$?(await Ny(oe,Pe.content),s.written+=1):s.skipped+=1;}s.removed+=await By(e,P,h,$?void 0:b,I),X.push(P.id);}if(b){let P=b.targets.filter($=>!X.includes($));for(let $ of P){let Pe=U[$];Pe&&(await _s(e,Pe,b.slug),s.removed+=1);}}l[p.id]={slug:h,hash:k,source:p.source,fetchedAt:p.source==="github_ref"?p.contentFetchedAt:null,targets:X,..._?{files:m}:{}};}catch(h){let f=o.skills[p.id];f&&(l[p.id]=f),s.errors.push({skillId:p.id,message:h instanceof Error?h.message:String(h)});}let c=new Set(n.map(p=>p.id));for(let[p,h]of Object.entries(o.skills))if(!c.has(p))for(let f of h.targets){let m=U[f];m&&(await _s(e,m,h.slug),s.removed+=1);}let u=new Set;for(let p of Object.values(l))u.add(p.slug);for(let p of Object.values(o.skills))u.add(p.slug);for(let p of i){let h=await Fy(e,p);for(let f of h)Object.values(l).some(_=>_.slug===f)||u.has(f)&&(await _s(e,p,f),s.removed+=1);}let d={version:o.version,skills:l};return await vd(e,d),Object.keys(l).length>0&&await zy(e).catch(()=>{}),s}var Ed="# Pathrule-managed skills (M18) \u2014",qy=`
132
132
  ${Ed} cloud is the source of truth.
133
133
  # Delete the lines below to opt in to committing your materialized skills.
134
134
  .claude/skills/
@@ -136,14 +136,14 @@ ${Ed} cloud is the source of truth.
136
136
  .windsurf/skills/
137
137
  .codex/skills/
138
138
  .claude/.pathrule-skills-manifest.json
139
- `;async function Hy(t){let e=join(t,".gitignore");if(!await er(e))return;let r=await readFile(e,"utf8");if(r.includes(Ed))return;let n=r.length>0&&!r.endsWith(`
139
+ `;async function zy(t){let e=join(t,".gitignore");if(!await er(e))return;let r=await readFile(e,"utf8");if(r.includes(Ed))return;let n=r.length>0&&!r.endsWith(`
140
140
  `);await appendFile(e,(n?`
141
- `:"")+Fy,"utf8");}q();q();Ce();var qy=new Set(["write_memory","write_rule","write_skill","sync_agents","materialize_skills"]);async function se(t,e){let{supabase:r}=await R(e),n=await j(e),s=(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");if(!n)return tr(t,"org_required",{web_url:`${s}/settings`,suggested_command_after_resolution:"pathrule org use <slug-or-id>"});let{data:i,error:o}=await r.from("organizations").select("id, slug, plan, seat_count, subscription_status").eq("id",n.id).single();if(o)throw o;let a=String(i.plan??n.plan),l=n.role,c=`${s}/org/${n.slug}/billing`;if(t==="create_workspace"){if(!Vy(l))return tr(t,"permission_denied",{role:l,plan:a,organization_id:n.id,web_url:`${s}/org/${n.slug}/settings/members`});let p=await Oo(r,"workspaces","organization_id",n.id,{archived_at:null}),h=$o(a,"workspaces");return Rd(p,h)?tr(t,"capacity_full",{role:l,plan:a,organization_id:n.id,usage:{dimension:"workspaces",used:p,limit:h},web_url:c,suggested_command_after_resolution:"pathrule init"}):xd(t,{role:l,plan:a,organization_id:n.id})}let u=await U(e);if(!u)return tr(t,"workspace_required",{role:l,plan:a,organization_id:n.id,web_url:`${s}/org/${n.slug}`,suggested_command_after_resolution:"pathrule workspace use <name-or-id>"});if(qy.has(t)&&!Gy(l))return tr(t,"permission_denied",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,web_url:`${s}/org/${n.slug}/settings/members`});let d=await Ky(t,a,u.id,r);return d&&Rd(d.used,d.limit)?tr(t,"capacity_full",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d,web_url:c,suggested_command_after_resolution:"pathrule status"}):xd(t,{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d})}function No(t){return ["create_workspace","write_memory","write_rule","write_skill","sync_agents","materialize_skills"].includes(t)}function rr(t){return t.allowed?{summary:`${t.action} is allowed.`,details:[],url:null,suggested_command_after_resolution:null}:t.blocking_reason==="capacity_full"&&t.usage?{summary:`${zy(t.usage.dimension)} limit reached on the ${t.plan??"current"} plan (${t.usage.used} / ${Jy(t.usage.limit)}).`,details:["Open Pathrule Web to upgrade or clean up usage."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="permission_denied"?{summary:`Your current role (${t.role??"unknown"}) cannot run ${t.action}.`,details:["Ask an organization admin to update your role or run the action from an admin account."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="workspace_required"?{summary:"No current workspace is selected for this folder.",details:["Run setup or choose a workspace before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule setup --json"}:t.blocking_reason==="org_required"?{summary:"No organization is selected.",details:["Choose an organization before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule org use <slug-or-id>"}:{summary:`${t.action} blocked: ${t.blocking_reason??"preflight_blocked"}.`,details:[],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}}function zy(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function Jy(t){return t===-1?"unlimited":String(t)}async function Ky(t,e,r,n){return t==="write_memory"?{dimension:"memories",used:await Oo(n,"memories","workspace_id",r),limit:$o(e,"memories")}:t==="write_rule"?{dimension:"rules",used:await Oo(n,"rules","workspace_id",r),limit:$o(e,"rules")}:null}async function Oo(t,e,r,n,s={}){let i=t.from(e).select("id",{count:"exact",head:true}).eq(r,n);for(let l of Object.keys(s))i=i.is(l,null);let{count:o,error:a}=await i;if(a)throw a;return o??0}function Vy(t){return t==="owner"||t==="admin"||t==="member"}function Gy(t){return t==="owner"||t==="admin"||t==="member"}function $o(t,e){return Me[t]?.[e]??Me.free[e]}function Rd(t,e){return e!==-1&&t>=e}function xd(t,e={}){return {action:t,allowed:true,blocking_reason:null,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...e}}function tr(t,e,r={}){return {action:t,allowed:false,blocking_reason:e,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...r}}var rk=createRequire(import.meta.url),nk=rk("../package.json"),Td="cli",Ad=nk.version;async function Ne(t,e,r={}){let{session:n,supabase:s}=await R(t),i=await U(t);if(!i)throw new Error("workspace_required");if(!i.local_root_path)throw new Error("workspace_not_attached");if(i.local_root_path!==e)throw new Error("workspace_cwd_mismatch");Vs(join(A(t).home,"bin","pathrule-hook.js"));let o=await se(r.skillsOnly?"materialize_skills":"sync_agents",t);if(!o.allowed)return {ok:false,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,error:o.blocking_reason??"preflight_blocked"};if(r.skillsOnly){let u=await ik({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path});return {ok:u.errors.length===0,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,skills:{ok:u.errors.length===0,enabled:u.enabled,written:u.written,skipped:u.skipped,removed:u.removed,errors:u.errors},error:u.errors.length===0?void 0:"skill_sync_failed"}}let a=await yd({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path,runtimeOwner:Td,runtimeVersion:Ad}),l=await sk({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path}),c=await gs({supabase:s,workspaceId:i.id,workspaceRoot:i.local_root_path,env:t});return {ok:a.ok&&l.errors.length===0&&c.ok,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,companion:{ok:a.ok,enabled:a.enabled,written:a.disk.written,skipped:a.disk.skipped,removed:a.disk.removed,errors:a.disk.errors,error:a.error},claude:{ok:l.errors.length===0,written:l.written,skipped:l.skipped,backed_up:l.backedUp,errors:l.errors,snapshot_changed:l.snapshotChanged},hook_index:c,error:a.error??(l.errors.length>0?"claude_sync_failed":c.ok?void 0:"hook_index_sync_failed")}}async function Xr(t,e,r,n={}){let{session:s}=await R(t),i=await pe(s.user.id,t);await es(s.user.id,{...i,current_workspace_id:e,schema_version:1},t);try{return await Ne(t,r,n)}finally{await es(s.user.id,i,t);}}async function sk(t){let e={written:0,skipped:0,backedUp:[],errors:[],snapshotChanged:false},r=new Set,{body:n,snapshotChanged:s}=await Ua({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId});e.snapshotChanged=s,await Pd(e,t.workspaceRoot,"CLAUDE.md",n)&&r.add("CLAUDE.md"),await Pd(e,t.workspaceRoot,".claude/rules/pathrule-protocol.md",Va())&&r.add(".claude/rules/pathrule-protocol.md");let i=".claude/settings.json";try{let o=join(t.workspaceRoot,i),a=await Od(o),{body:l,changed:c}=mn(a);c?(await Id(o,l),e.written+=1):e.skipped+=1,r.add(i);}catch(o){e.errors.push({path:i,message:o instanceof Error?o.message:String(o)});}try{await ls({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:Td,ownerVersion:Ad});}catch(o){e.errors.push({path:".pathrule/managed-files.json",message:o instanceof Error?o.message:String(o)});}return e}async function Pd(t,e,r,n){let s=join(e,r);try{let i=await Od(s),o=await ms({workspaceRoot:e,relativePath:r,renderedBody:n,existingBody:i});return o.backupPath&&t.backedUp.push(o.backupPath),o.finalBody===null?(t.skipped+=1,!0):(await Id(s,o.finalBody),t.written+=1,!0)}catch(i){return t.errors.push({path:r,message:i instanceof Error?i.message:String(i)}),false}}async function Id(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function Od(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function ik(t){let[e,r]=await Promise.all([ok(t.supabase,t.userId,t.workspaceId,t.workspaceRoot),ak(t.supabase,t.workspaceId)]),n=await Cd({workspaceRoot:t.workspaceRoot,activeTargets:e,skills:r});return {enabled:e,written:n.written,skipped:n.skipped,removed:n.removed,errors:n.errors}}async function ok(t,e,r,n){let[{data:s},i]=await Promise.all([t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle(),We(n)]),o=s?.selected_ai_clients??null;return vn({selected:o,detected:i,fallback:yn})}async function ak(t,e){let{data:r,error:n}=await t.from("skills").select("id, name, description, content, source, github_url, content_fetched_at, updated_at, skill_files(path, content, sha256)").eq("workspace_id",e);if(n)throw new Error(`skill_catalogue_read_failed: ${n.message}`);return (r??[]).map(s=>({id:s.id,name:s.name,description:s.description,content:s.content,source:s.source,githubUrl:s.github_url,contentFetchedAt:s.content_fetched_at,updatedAt:s.updated_at,files:(s.skill_files??[]).map(i=>({path:i.path,content:i.content,sha256:i.sha256}))}))}async function Zr(t,e){let r=await $e(t,e);try{let n=await Ne(t,e),s=await $e(t,e);return {ok:n.ok&&s.ok,doctor_before:r,sync:n,doctor_after:s,error:n.ok&&s.ok?void 0:n.error??"repair_incomplete"}}catch(n){return {ok:false,doctor_before:r,error:n instanceof Error?n.message:String(n)}}}function Nd(t){let e=$d(t.doctor_before.checks),r=t.doctor_after??t.doctor_before,n=$d(r.checks),s=t.sync?.preflight,i=r.mcp.filter(p=>!p.installed),o=hk(e,n),a=fk(e,n),l=gk(r.mcp),c=mk(t),u=_k(t),d=wk(s);return {ok:t.ok,headline:t.ok?"Local runtime repaired":"Repair incomplete",next_command:yk(t,n,i.length),sections:[o,a,l,c,u,d]}}async function Do(t,e={}){let{session:r,supabase:n}=await R(t),{data:s,error:i}=await n.from("user_security_state").select("security_epoch").eq("user_id",r.user.id).maybeSingle();if(i)throw i;let o=typeof s?.security_epoch=="number"?s.security_epoch:0,a=Qe(r.user.id,o,t),l=[];for(let c=0;c<o;c+=1){let u=join(a.userCacheDir,`epoch-${c}`),d=await pk(u);if(d===0)continue;let p=e.dryRun!==false?false:await dk(u);l.push({path:u,epoch:c,removed:p,bytes:d});}return {ok:true,dry_run:e.dryRun!==false,current_epoch:o,candidates:l,reclaimed_bytes:l.filter(c=>c.removed).reduce((c,u)=>c+u.bytes,0)}}async function dk(t){return await rm$1(t,{recursive:true,force:true}),true}async function pk(t){try{let e=await stat(t);return e.isFile()?e.size:e.isDirectory()?1:0}catch{return 0}}function $d(t){return new Map(t.map(e=>[e.name,e]))}function hk(t,e){let r=t.get("auth"),n=e.get("auth"),s=t.get("organization"),i=e.get("organization"),o=[ys(r,n,{pass:(a,l)=>l?`Signed in again as ${a??"the current account"}.`:`Signed in as ${a??"the current account"}.`,warn:a=>`Authentication still needs attention${a?`: ${a}`:""}.`,fail:a=>`Authentication is still blocked${a?`: ${a}`:""}.`}),ys(s,i,{pass:(a,l)=>l?`Organization context restored: ${a??"selected"}.`:`Organization context: ${a??"selected"}.`,warn:a=>`Organization selection is still missing${a&&a!=="no organization selected"?`: ${a}`:""}.`,fail:a=>`Organization lookup failed${a?`: ${a}`:""}.`})];return {title:"Account",status:jd(n?.status,i?.status),lines:o}}function fk(t,e){let r=t.get("workspace"),n=e.get("workspace"),s=t.get("cwd_attach"),i=e.get("cwd_attach"),o=[ys(r,n,{pass:(a,l)=>l?`Workspace selection recovered: ${a??"current workspace"}.`:`Workspace selection: ${a??"current workspace"}.`,warn:a=>`Workspace selection is still incomplete${a&&a!=="no workspace selected"?`: ${a}`:""}.`,fail:a=>`Workspace lookup failed${a?`: ${a}`:""}.`}),ys(s,i,{pass:(a,l)=>l?"Current folder is attached again.":"Current folder is attached.",warn:a=>a==="workspace not attached"?"Current folder is still not attached.":`Current folder still points to ${a??"another workspace root"}.`,fail:a=>`Current folder attachment check failed${a?`: ${a}`:""}.`})];return {title:"Workspace",status:jd(n?.status,i?.status),lines:o}}function gk(t){let e=t.filter(i=>i.installed).length,r=t.filter(i=>!i.installed).map(i=>i.client),n=t.filter(i=>i.error).map(i=>`${i.client}: ${i.error}`),s=[`MCP configs ready for ${e}/${t.length} supported clients.`,r.length>0?`Still missing: ${r.join(", ")}.`:"All supported MCP client configs are present."];return n.length>0&&s.push(`Agent config read errors: ${n.join("; ")}.`),{title:"Agents",status:n.length>0?"fail":r.length>0?"warn":"pass",lines:s}}function mk(t){let e=t.sync?.hook_index;return t.sync?e?{title:"Hooks",status:e.ok?"pass":"fail",lines:[e.ok?`Hook index refreshed${e.schema_version?` (schema ${e.schema_version})`:""}.`:`Hook index refresh failed: ${e.error??"unknown error"}.`,e.refreshed_episodes?"Hook work episodes were refreshed before rebuilding the index.":"Hook work episodes were left unchanged."]}:{title:"Hooks",status:"warn",lines:["Repair did not produce a hook index update."]}:{title:"Hooks",status:"warn",lines:["Repair stopped before hook files could be refreshed."]}}function _k(t){if(!t.sync)return {title:"Files",status:"warn",lines:["Repair stopped before local files could be rewritten."]};let e=[],r="pass";return t.sync.companion&&(e.push(`Companion files: ${t.sync.companion.written} written, ${t.sync.companion.skipped} unchanged, ${t.sync.companion.removed} removed.`),(t.sync.companion.errors.length>0||!t.sync.companion.ok)&&(r="fail",e.push(`Companion errors: ${t.sync.companion.errors.map(n=>n.message).join("; ")||t.sync.companion.error||"unknown error"}.`))),t.sync.claude&&(e.push(`Claude files: ${t.sync.claude.written} written, ${t.sync.claude.skipped} unchanged, ${t.sync.claude.backed_up.length} backed up.`),t.sync.claude.errors.length>0&&(r="fail",e.push(`Claude sync errors: ${t.sync.claude.errors.map(n=>n.message).join("; ")}.`))),t.sync.skills&&(e.push(`Skills: ${t.sync.skills.written} written, ${t.sync.skills.skipped} unchanged, ${t.sync.skills.removed} removed.`),t.sync.skills.errors.length>0&&(r="fail",e.push(`Skill materialization errors: ${t.sync.skills.errors.map(n=>n.message).join("; ")}.`))),e.length===0&&e.push("No local file rewrites were needed."),{title:"Files",status:r,lines:e}}function wk(t){return t?t.allowed?{title:"Capacity",status:"pass",lines:["No plan limit blocked this repair."]}:t.blocking_reason==="capacity_full"&&t.usage?{title:"Capacity",status:"fail",lines:[`${kk(t.usage.dimension)} limit reached (${t.usage.used} / ${bk(t.usage.limit)}).`,"Open billing or clean up usage before retrying the repair."]}:{title:"Capacity",status:"warn",lines:["Capacity is not the blocking issue for this repair."]}:{title:"Capacity",status:"warn",lines:["Capacity checks did not run because repair stopped early."]}}function ys(t,e,r){let n=e??t;if(!n)return "No status available.";let s=t!=null&&t.status!=="pass"&&n.status==="pass";return n.status==="pass"?r.pass(n.detail,s):n.status==="warn"?r.warn(n.detail,s):r.fail(n.detail,s)}function jd(...t){return t.includes("fail")?"fail":t.includes("warn")?"warn":"pass"}function yk(t,e,r){if(e.get("auth")?.status!=="pass")return "pathrule login";if(e.get("organization")?.status!=="pass")return "pathrule org use <slug-or-id>";if(e.get("workspace")?.status!=="pass")return "pathrule workspace use <name-or-id>";if(e.get("cwd_attach")?.status!=="pass")return "pathrule attach <workspace>";let a=t.sync?.preflight;if(a&&!a.allowed&&a.suggested_command_after_resolution)return a.suggested_command_after_resolution;if(r>0)return "pathrule install";let l=!t.sync?.companion?.ok||!!t.sync?.companion?.errors.length||!!t.sync?.claude?.errors.length||!!t.sync?.skills?.errors.length||t.sync?.hook_index?.ok===false;return !t.ok||l?"pathrule sync":"pathrule doctor"}function kk(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function bk(t){return t===-1?"unlimited":String(t)}q();var Ak={all:"all",claude:"claude-code","claude-code":"claude-code",cursor:"cursor",codex:"codex",windsurf:"windsurf"},Ik=["claude-code","cursor","codex","windsurf"];function Ld(t){let e=Ak[(t??"all").toLowerCase()];if(!e)throw new Error("invalid_install_target");return e==="all"?Ik:[e]}async function Je(t,e){let r=Ld(t),n=Ok(e);return Promise.all(r.map(async s=>{let i=kt(s),o=i.homeConfigPath(homedir(),process.platform);try{let a=await Ud(o),l=i.inject(a,n);return await Md(o,l.body),{client:s,ok:!0,status:"installed",config_path:o,was_new:l.wasNew}}catch(a){return {client:s,ok:false,status:"error",config_path:o,error:a instanceof Error?a.message:String(a)}}}))}async function Lo(t){return Promise.all(Ld(t).map(async e=>{let r=kt(e),n=r.homeConfigPath(homedir(),process.platform);try{let s=await Ud(n),i=r.remove(s);return i.wasPresent?(i.body===null?await rm$1(n,{force:!0}):await Md(n,i.body),{client:e,ok:!0,status:"removed",config_path:n}):{client:e,ok:!0,status:"not_present",config_path:n}}catch(s){return {client:e,ok:false,status:"error",config_path:n,error:s instanceof Error?s.message:String(s)}}}))}function Ok(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL,r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY;if(!e||!r)throw new Error("missing_supabase_config");return {type:"stdio",command:$k(),args:[fileURLToPath(new URL("../../mcp-server/dist/index.js",import.meta.url))],env:{SUPABASE_URL:e,SUPABASE_ANON_KEY:r}}}function $k(){try{return execFileSync("which",["node"],{encoding:"utf8"}).trim()||process.execPath}catch{return process.execPath}}async function Ud(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function Md(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function Ct(t,e,r,n){let{session:s,supabase:i}=await R(t);if(s.user.id!==e)throw new Error("session_user_mismatch");let[{data:o},a]=await Promise.all([i.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).maybeSingle(),n?We(n):Promise.resolve([])]),l=new Set(o?.selected_ai_clients??[]),c=new Set(a),u=Object.keys(M);return Promise.all(u.map(async d=>{let p=await Wk(d);return {client:d,active:l.has(d)||c.has(d),selected:l.has(d),markers:c.has(d)?["workspace_marker_detected"]:[],machineInstalled:p.installed,machineConfigPath:p.configPath,machineConfigExists:p.configExists}}))}async function Hd(t,e,r,n,s,i,o="restore-backup"){let a=Bk(s),{session:l,supabase:c}=await R(t);if(l.user.id!==e)throw new Error("session_user_mismatch");let{data:u,error:d}=await c.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n).maybeSingle();if(d)throw new Error(`workspace_client_selection_read_failed: ${d.message}`);if(!u)throw new Error("workspace_root_not_attached");let p=[],h=new Set((u.selected_ai_clients??[]).filter(qd)),f=Array.from(h);i?h.add(a):h.delete(a);let m=Array.from(h);if(!Fk(f,m)){let{error:b}=await c.from("user_workspace_paths").update({selected_ai_clients:m}).eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n);if(b)throw new Error(`workspace_client_selection_update_failed: ${b.message}`)}if(i){let b=await Je(a,t);for(let w of b)w.ok||p.push(`${w.client}: ${w.error??w.status}`);}else await Bd(n,a);let _=await Xr(t,r,n);return _.ok||p.push(_.error??"workspace_sync_failed"),i||await Bd(n,a),{ok:true,statuses:await Ct(t,e,r,n),warnings:p}}async function Wk(t){let e=kt(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {configPath:r,configExists:!0,installed:e.read(n)!==null}}catch(n){return n.code!=="ENOENT"?{configPath:r,configExists:false,installed:false}:{configPath:r,configExists:false,installed:false}}}function Bk(t){if(qd(t))return t;throw new Error("invalid_agent_target")}function qd(t){return ti(t)!==null}function Fk(t,e){if(t.length!==e.length)return false;let r=new Set(t);return e.every(n=>r.has(n))}async function Bd(t,e,r){let n=M[e]?.skillsDir;if(!n)return;let s=join(t,n);await rm$1(s,{recursive:true,force:true}),await Hk(dirname(s),t);}async function Hk(t,e){let r=resolve(e),n=resolve(t);for(;n!==r&&n.startsWith(`${r}${sep}`);){try{await rmdir(n);}catch{return}n=dirname(n);}}var Uo="1.0",Es=37913,en="127.0.0.1",tb=60,rb=createRequire(import.meta.url),nb=rb("../package.json"),le=promisify(execFile),rn="io.pathrule.cli-daemon",bs="pathrule-daemon.service";async function nn(t){let e=await je(t);if(e.running)return e;let r=process.argv[1];if(!r)throw new Error("daemon_entrypoint_missing");spawn(process.execPath,[r,"daemon","run"],{detached:true,stdio:"ignore",env:{...process.env,...t}}).unref();let s=Date.now()+3e3;for(;Date.now()<s;){let i=await je(t);if(i.running)return i;await Cb(100);}throw new Error("daemon_start_timeout")}async function sn(t){let e=await je(t);if(e.state?.pid&&e.state.pid!==process.pid)try{process.kill(e.state.pid,"SIGTERM");}catch{}return await unlink(A(t).daemonFile).catch(()=>{}),je(t)}async function Rs(t=process.env){let e=Zd(t);if(!e.supported)return e;if(e.method==="task-scheduler"){let r=await cb();return {...e,enabled:r}}return {...e,enabled:e.path?await Ho(e.path):false}}async function Ve(t,e){let r=Zd(t);if(!r.supported)return r;if(e){let n=sb(t);if(r.method==="launchd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await ib(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&await ab(r.path),{...r,enabled:true}}if(r.method==="systemd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await ob(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await le("systemctl",["--user","daemon-reload"]),await le("systemctl",["--user","enable","--now",bs])),{...r,enabled:true}}return await ub(n,t),{...r,enabled:true}}return r.method==="launchd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&r.path&&await lb(r.path),r.path&&await unlink(r.path).catch(()=>{}),{...r,enabled:false}):r.method==="systemd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await le("systemctl",["--user","disable","--now",bs]).catch(()=>{}),await le("systemctl",["--user","daemon-reload"]).catch(()=>{})),r.path&&await unlink(r.path).catch(()=>{}),{...r,enabled:false}):(await db(),{...r,enabled:false})}async function je(t){let e=A(t).daemonFile,r;try{r=JSON.parse(await readFile(e,"utf8"));}catch(s){return {running:false,state:null,state_path:e,reason:s.code==="ENOENT"?"missing":"unreadable"}}let n=Sb(r.pid);return {running:n,state:r,state_path:e,reason:n?void 0:"stale"}}function Zd(t){let e=t.PATHRULE_TEST_PLATFORM??process.platform,r=t.PATHRULE_AUTOSTART_DIR;return e==="darwin"?{supported:true,enabled:false,method:"launchd",path:r?join(r,`${rn}.plist`):join(homedir(),"Library","LaunchAgents",`${rn}.plist`)}:e==="linux"?{supported:true,enabled:false,method:"systemd",path:r?join(r,bs):join(homedir(),".config","systemd","user",bs)}:e==="win32"?{supported:false,enabled:false,method:"task-scheduler",path:null,reason:"Windows daemon autostart requires installer support."}:{supported:false,enabled:false,method:"unsupported",path:null,reason:`Unsupported platform: ${e}`}}function sb(t){let e=t.PATHRULE_CLI_ENTRYPOINT?.trim()||process.argv[1];if(!e)throw new Error("daemon_entrypoint_missing");return {command:process.execPath,args:[e,"daemon","run"]}}function Fo(t){let e={PATHRULE_DAEMON_PORT:t.PATHRULE_DAEMON_PORT?.trim()||String(Es)};for(let r of ["PATH","PATHRULE_HOME","PATHRULE_WEB_URL"]){let n=t[r];n&&n.trim()!==""&&(e[r]=n);}return e}async function ib(t,e,r){let n=`<?xml version="1.0" encoding="UTF-8"?>
141
+ `:"")+qy,"utf8");}q();q();Ce();var Jy=new Set(["write_memory","write_rule","write_skill","sync_agents","materialize_skills"]);async function ie(t,e){let{supabase:r}=await R(e),n=await j(e),s=(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");if(!n)return tr(t,"org_required",{web_url:`${s}/settings`,suggested_command_after_resolution:"pathrule org use <slug-or-id>"});let{data:i,error:o}=await r.from("organizations").select("id, slug, plan, seat_count, subscription_status").eq("id",n.id).single();if(o)throw o;let a=String(i.plan??n.plan),l=n.role,c=`${s}/org/${n.slug}/billing`;if(t==="create_workspace"){if(!Yy(l))return tr(t,"permission_denied",{role:l,plan:a,organization_id:n.id,web_url:`${s}/org/${n.slug}/settings/members`});let p=await Oo(r,"workspaces","organization_id",n.id,{archived_at:null}),h=$o(a,"workspaces");return Rd(p,h)?tr(t,"capacity_full",{role:l,plan:a,organization_id:n.id,usage:{dimension:"workspaces",used:p,limit:h},web_url:c,suggested_command_after_resolution:"pathrule init"}):xd(t,{role:l,plan:a,organization_id:n.id})}let u=await M(e);if(!u)return tr(t,"workspace_required",{role:l,plan:a,organization_id:n.id,web_url:`${s}/org/${n.slug}`,suggested_command_after_resolution:"pathrule workspace use <name-or-id>"});if(Jy.has(t)&&!Xy(l))return tr(t,"permission_denied",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,web_url:`${s}/org/${n.slug}/settings/members`});let d=await Gy(t,a,u.id,r);return d&&Rd(d.used,d.limit)?tr(t,"capacity_full",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d,web_url:c,suggested_command_after_resolution:"pathrule status"}):xd(t,{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d})}function No(t){return ["create_workspace","write_memory","write_rule","write_skill","sync_agents","materialize_skills"].includes(t)}function rr(t){return t.allowed?{summary:`${t.action} is allowed.`,details:[],url:null,suggested_command_after_resolution:null}:t.blocking_reason==="capacity_full"&&t.usage?{summary:`${Ky(t.usage.dimension)} limit reached on the ${t.plan??"current"} plan (${t.usage.used} / ${Vy(t.usage.limit)}).`,details:["Open Pathrule Web to upgrade or clean up usage."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="permission_denied"?{summary:`Your current role (${t.role??"unknown"}) cannot run ${t.action}.`,details:["Ask an organization admin to update your role or run the action from an admin account."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="workspace_required"?{summary:"No current workspace is selected for this folder.",details:["Run setup or choose a workspace before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule setup --json"}:t.blocking_reason==="org_required"?{summary:"No organization is selected.",details:["Choose an organization before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule org use <slug-or-id>"}:{summary:`${t.action} blocked: ${t.blocking_reason??"preflight_blocked"}.`,details:[],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}}function Ky(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function Vy(t){return t===-1?"unlimited":String(t)}async function Gy(t,e,r,n){return t==="write_memory"?{dimension:"memories",used:await Oo(n,"memories","workspace_id",r),limit:$o(e,"memories")}:t==="write_rule"?{dimension:"rules",used:await Oo(n,"rules","workspace_id",r),limit:$o(e,"rules")}:null}async function Oo(t,e,r,n,s={}){let i=t.from(e).select("id",{count:"exact",head:true}).eq(r,n);for(let l of Object.keys(s))i=i.is(l,null);let{count:o,error:a}=await i;if(a)throw a;return o??0}function Yy(t){return t==="owner"||t==="admin"||t==="member"}function Xy(t){return t==="owner"||t==="admin"||t==="member"}function $o(t,e){return Ue[t]?.[e]??Ue.free[e]}function Rd(t,e){return e!==-1&&t>=e}function xd(t,e={}){return {action:t,allowed:true,blocking_reason:null,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...e}}function tr(t,e,r={}){return {action:t,allowed:false,blocking_reason:e,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...r}}var sk=createRequire(import.meta.url),ik=sk("../package.json"),Td="cli",Ad=ik.version;async function Ne(t,e,r={}){let{session:n,supabase:s}=await R(t),i=await M(t);if(!i)throw new Error("workspace_required");if(!i.local_root_path)throw new Error("workspace_not_attached");if(i.local_root_path!==e)throw new Error("workspace_cwd_mismatch");Vs(join(A(t).home,"bin","pathrule-hook.js"));let o=await ie(r.skillsOnly?"materialize_skills":"sync_agents",t);if(!o.allowed)return {ok:false,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,error:o.blocking_reason??"preflight_blocked"};if(r.skillsOnly){let u=await ak({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path});return {ok:u.errors.length===0,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,skills:{ok:u.errors.length===0,enabled:u.enabled,written:u.written,skipped:u.skipped,removed:u.removed,errors:u.errors},error:u.errors.length===0?void 0:"skill_sync_failed"}}let a=await yd({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path,runtimeOwner:Td,runtimeVersion:Ad}),l=await ok({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path}),c=await gs({supabase:s,workspaceId:i.id,workspaceRoot:i.local_root_path,env:t});return {ok:a.ok&&l.errors.length===0&&c.ok,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,companion:{ok:a.ok,enabled:a.enabled,written:a.disk.written,skipped:a.disk.skipped,removed:a.disk.removed,errors:a.disk.errors,error:a.error},claude:{ok:l.errors.length===0,written:l.written,skipped:l.skipped,backed_up:l.backedUp,errors:l.errors,snapshot_changed:l.snapshotChanged},hook_index:c,error:a.error??(l.errors.length>0?"claude_sync_failed":c.ok?void 0:"hook_index_sync_failed")}}async function Zr(t,e,r,n={}){let{session:s}=await R(t),i=await he(s.user.id,t);await es(s.user.id,{...i,current_workspace_id:e,schema_version:1},t);try{return await Ne(t,r,n)}finally{await es(s.user.id,i,t);}}async function ok(t){let e={written:0,skipped:0,backedUp:[],errors:[],snapshotChanged:false},r=new Set,{body:n,snapshotChanged:s}=await Ma({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId});e.snapshotChanged=s,await Pd(e,t.workspaceRoot,"CLAUDE.md",n)&&r.add("CLAUDE.md"),await Pd(e,t.workspaceRoot,".claude/rules/pathrule-protocol.md",Va())&&r.add(".claude/rules/pathrule-protocol.md");let i=".claude/settings.json";try{let o=join(t.workspaceRoot,i),a=await Od(o),{body:l,changed:c}=mn(a);c?(await Id(o,l),e.written+=1):e.skipped+=1,r.add(i);}catch(o){e.errors.push({path:i,message:o instanceof Error?o.message:String(o)});}try{await ls({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:Td,ownerVersion:Ad});}catch(o){e.errors.push({path:".pathrule/managed-files.json",message:o instanceof Error?o.message:String(o)});}return e}async function Pd(t,e,r,n){let s=join(e,r);try{let i=await Od(s),o=await ms({workspaceRoot:e,relativePath:r,renderedBody:n,existingBody:i});return o.backupPath&&t.backedUp.push(o.backupPath),o.finalBody===null?(t.skipped+=1,!0):(await Id(s,o.finalBody),t.written+=1,!0)}catch(i){return t.errors.push({path:r,message:i instanceof Error?i.message:String(i)}),false}}async function Id(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function Od(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function ak(t){let[e,r]=await Promise.all([lk(t.supabase,t.userId,t.workspaceId,t.workspaceRoot),ck(t.supabase,t.workspaceId)]),n=await Cd({workspaceRoot:t.workspaceRoot,activeTargets:e,skills:r});return {enabled:e,written:n.written,skipped:n.skipped,removed:n.removed,errors:n.errors}}async function lk(t,e,r,n){let[{data:s},i]=await Promise.all([t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle(),We(n)]),o=s?.selected_ai_clients??null;return vn({selected:o,detected:i,fallback:yn})}async function ck(t,e){let{data:r,error:n}=await t.from("skills").select("id, name, description, content, source, github_url, content_fetched_at, updated_at, skill_files(path, content, sha256)").eq("workspace_id",e);if(n)throw new Error(`skill_catalogue_read_failed: ${n.message}`);return (r??[]).map(s=>({id:s.id,name:s.name,description:s.description,content:s.content,source:s.source,githubUrl:s.github_url,contentFetchedAt:s.content_fetched_at,updatedAt:s.updated_at,files:(s.skill_files??[]).map(i=>({path:i.path,content:i.content,sha256:i.sha256}))}))}async function Qr(t,e){let r=await $e(t,e);try{let n=await Ne(t,e),s=await $e(t,e);return {ok:n.ok&&s.ok,doctor_before:r,sync:n,doctor_after:s,error:n.ok&&s.ok?void 0:n.error??"repair_incomplete"}}catch(n){return {ok:false,doctor_before:r,error:n instanceof Error?n.message:String(n)}}}function Nd(t){let e=$d(t.doctor_before.checks),r=t.doctor_after??t.doctor_before,n=$d(r.checks),s=t.sync?.preflight,i=r.mcp.filter(p=>!p.installed),o=gk(e,n),a=mk(e,n),l=_k(r.mcp),c=wk(t),u=yk(t),d=kk(s);return {ok:t.ok,headline:t.ok?"Local runtime repaired":"Repair incomplete",next_command:bk(t,n,i.length),sections:[o,a,l,c,u,d]}}async function Do(t,e={}){let{session:r,supabase:n}=await R(t),{data:s,error:i}=await n.from("user_security_state").select("security_epoch").eq("user_id",r.user.id).maybeSingle();if(i)throw i;let o=typeof s?.security_epoch=="number"?s.security_epoch:0,a=Qe(r.user.id,o,t),l=[];for(let c=0;c<o;c+=1){let u=join(a.userCacheDir,`epoch-${c}`),d=await fk(u);if(d===0)continue;let p=e.dryRun!==false?false:await hk(u);l.push({path:u,epoch:c,removed:p,bytes:d});}return {ok:true,dry_run:e.dryRun!==false,current_epoch:o,candidates:l,reclaimed_bytes:l.filter(c=>c.removed).reduce((c,u)=>c+u.bytes,0)}}async function hk(t){return await rm$1(t,{recursive:true,force:true}),true}async function fk(t){try{let e=await stat(t);return e.isFile()?e.size:e.isDirectory()?1:0}catch{return 0}}function $d(t){return new Map(t.map(e=>[e.name,e]))}function gk(t,e){let r=t.get("auth"),n=e.get("auth"),s=t.get("organization"),i=e.get("organization"),o=[ys(r,n,{pass:(a,l)=>l?`Signed in again as ${a??"the current account"}.`:`Signed in as ${a??"the current account"}.`,warn:a=>`Authentication still needs attention${a?`: ${a}`:""}.`,fail:a=>`Authentication is still blocked${a?`: ${a}`:""}.`}),ys(s,i,{pass:(a,l)=>l?`Organization context restored: ${a??"selected"}.`:`Organization context: ${a??"selected"}.`,warn:a=>`Organization selection is still missing${a&&a!=="no organization selected"?`: ${a}`:""}.`,fail:a=>`Organization lookup failed${a?`: ${a}`:""}.`})];return {title:"Account",status:jd(n?.status,i?.status),lines:o}}function mk(t,e){let r=t.get("workspace"),n=e.get("workspace"),s=t.get("cwd_attach"),i=e.get("cwd_attach"),o=[ys(r,n,{pass:(a,l)=>l?`Workspace selection recovered: ${a??"current workspace"}.`:`Workspace selection: ${a??"current workspace"}.`,warn:a=>`Workspace selection is still incomplete${a&&a!=="no workspace selected"?`: ${a}`:""}.`,fail:a=>`Workspace lookup failed${a?`: ${a}`:""}.`}),ys(s,i,{pass:(a,l)=>l?"Current folder is attached again.":"Current folder is attached.",warn:a=>a==="workspace not attached"?"Current folder is still not attached.":`Current folder still points to ${a??"another workspace root"}.`,fail:a=>`Current folder attachment check failed${a?`: ${a}`:""}.`})];return {title:"Workspace",status:jd(n?.status,i?.status),lines:o}}function _k(t){let e=t.filter(i=>i.installed).length,r=t.filter(i=>!i.installed).map(i=>i.client),n=t.filter(i=>i.error).map(i=>`${i.client}: ${i.error}`),s=[`MCP configs ready for ${e}/${t.length} supported clients.`,r.length>0?`Still missing: ${r.join(", ")}.`:"All supported MCP client configs are present."];return n.length>0&&s.push(`Agent config read errors: ${n.join("; ")}.`),{title:"Agents",status:n.length>0?"fail":r.length>0?"warn":"pass",lines:s}}function wk(t){let e=t.sync?.hook_index;return t.sync?e?{title:"Hooks",status:e.ok?"pass":"fail",lines:[e.ok?`Hook index refreshed${e.schema_version?` (schema ${e.schema_version})`:""}.`:`Hook index refresh failed: ${e.error??"unknown error"}.`,e.refreshed_episodes?"Hook work episodes were refreshed before rebuilding the index.":"Hook work episodes were left unchanged."]}:{title:"Hooks",status:"warn",lines:["Repair did not produce a hook index update."]}:{title:"Hooks",status:"warn",lines:["Repair stopped before hook files could be refreshed."]}}function yk(t){if(!t.sync)return {title:"Files",status:"warn",lines:["Repair stopped before local files could be rewritten."]};let e=[],r="pass";return t.sync.companion&&(e.push(`Companion files: ${t.sync.companion.written} written, ${t.sync.companion.skipped} unchanged, ${t.sync.companion.removed} removed.`),(t.sync.companion.errors.length>0||!t.sync.companion.ok)&&(r="fail",e.push(`Companion errors: ${t.sync.companion.errors.map(n=>n.message).join("; ")||t.sync.companion.error||"unknown error"}.`))),t.sync.claude&&(e.push(`Claude files: ${t.sync.claude.written} written, ${t.sync.claude.skipped} unchanged, ${t.sync.claude.backed_up.length} backed up.`),t.sync.claude.errors.length>0&&(r="fail",e.push(`Claude sync errors: ${t.sync.claude.errors.map(n=>n.message).join("; ")}.`))),t.sync.skills&&(e.push(`Skills: ${t.sync.skills.written} written, ${t.sync.skills.skipped} unchanged, ${t.sync.skills.removed} removed.`),t.sync.skills.errors.length>0&&(r="fail",e.push(`Skill materialization errors: ${t.sync.skills.errors.map(n=>n.message).join("; ")}.`))),e.length===0&&e.push("No local file rewrites were needed."),{title:"Files",status:r,lines:e}}function kk(t){return t?t.allowed?{title:"Capacity",status:"pass",lines:["No plan limit blocked this repair."]}:t.blocking_reason==="capacity_full"&&t.usage?{title:"Capacity",status:"fail",lines:[`${vk(t.usage.dimension)} limit reached (${t.usage.used} / ${Sk(t.usage.limit)}).`,"Open billing or clean up usage before retrying the repair."]}:{title:"Capacity",status:"warn",lines:["Capacity is not the blocking issue for this repair."]}:{title:"Capacity",status:"warn",lines:["Capacity checks did not run because repair stopped early."]}}function ys(t,e,r){let n=e??t;if(!n)return "No status available.";let s=t!=null&&t.status!=="pass"&&n.status==="pass";return n.status==="pass"?r.pass(n.detail,s):n.status==="warn"?r.warn(n.detail,s):r.fail(n.detail,s)}function jd(...t){return t.includes("fail")?"fail":t.includes("warn")?"warn":"pass"}function bk(t,e,r){if(e.get("auth")?.status!=="pass")return "pathrule login";if(e.get("organization")?.status!=="pass")return "pathrule org use <slug-or-id>";if(e.get("workspace")?.status!=="pass")return "pathrule workspace use <name-or-id>";if(e.get("cwd_attach")?.status!=="pass")return "pathrule attach <workspace>";let a=t.sync?.preflight;if(a&&!a.allowed&&a.suggested_command_after_resolution)return a.suggested_command_after_resolution;if(r>0)return "pathrule install";let l=!t.sync?.companion?.ok||!!t.sync?.companion?.errors.length||!!t.sync?.claude?.errors.length||!!t.sync?.skills?.errors.length||t.sync?.hook_index?.ok===false;return !t.ok||l?"pathrule sync":"pathrule doctor"}function vk(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function Sk(t){return t===-1?"unlimited":String(t)}q();var Ok={all:"all",claude:"claude-code","claude-code":"claude-code",cursor:"cursor",codex:"codex",windsurf:"windsurf"},$k=["claude-code","cursor","codex","windsurf"];function Ld(t){let e=Ok[(t??"all").toLowerCase()];if(!e)throw new Error("invalid_install_target");return e==="all"?$k:[e]}async function Je(t,e){let r=Ld(t),n=Nk(e);return Promise.all(r.map(async s=>{let i=kt(s),o=i.homeConfigPath(homedir(),process.platform);try{let a=await Md(o),l=i.inject(a,n);return await Ud(o,l.body),{client:s,ok:!0,status:"installed",config_path:o,was_new:l.wasNew}}catch(a){return {client:s,ok:false,status:"error",config_path:o,error:a instanceof Error?a.message:String(a)}}}))}async function Lo(t){return Promise.all(Ld(t).map(async e=>{let r=kt(e),n=r.homeConfigPath(homedir(),process.platform);try{let s=await Md(n),i=r.remove(s);return i.wasPresent?(i.body===null?await rm$1(n,{force:!0}):await Ud(n,i.body),{client:e,ok:!0,status:"removed",config_path:n}):{client:e,ok:!0,status:"not_present",config_path:n}}catch(s){return {client:e,ok:false,status:"error",config_path:n,error:s instanceof Error?s.message:String(s)}}}))}function Nk(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL,r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY;if(!e||!r)throw new Error("missing_supabase_config");return {type:"stdio",command:jk(),args:[fileURLToPath(new URL("../../mcp-server/dist/index.js",import.meta.url))],env:{SUPABASE_URL:e,SUPABASE_ANON_KEY:r}}}function jk(){try{return execFileSync("which",["node"],{encoding:"utf8"}).trim()||process.execPath}catch{return process.execPath}}async function Md(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function Ud(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function Ct(t,e,r,n){let{session:s,supabase:i}=await R(t);if(s.user.id!==e)throw new Error("session_user_mismatch");let[{data:o},a]=await Promise.all([i.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).maybeSingle(),n?We(n):Promise.resolve([])]),l=new Set(o?.selected_ai_clients??[]),c=new Set(a),u=Object.keys(U);return Promise.all(u.map(async d=>{let p=await Fk(d);return {client:d,active:l.has(d)||c.has(d),selected:l.has(d),markers:c.has(d)?["workspace_marker_detected"]:[],machineInstalled:p.installed,machineConfigPath:p.configPath,machineConfigExists:p.configExists}}))}async function Hd(t,e,r,n,s,i,o="restore-backup"){let a=Hk(s),{session:l,supabase:c}=await R(t);if(l.user.id!==e)throw new Error("session_user_mismatch");let{data:u,error:d}=await c.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n).maybeSingle();if(d)throw new Error(`workspace_client_selection_read_failed: ${d.message}`);if(!u)throw new Error("workspace_root_not_attached");let p=[],h=new Set((u.selected_ai_clients??[]).filter(qd)),f=Array.from(h);i?h.add(a):h.delete(a);let m=Array.from(h);if(!qk(f,m)){let{error:b}=await c.from("user_workspace_paths").update({selected_ai_clients:m}).eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n);if(b)throw new Error(`workspace_client_selection_update_failed: ${b.message}`)}if(i){let b=await Je(a,t);for(let w of b)w.ok||p.push(`${w.client}: ${w.error??w.status}`);}else await Bd(n,a);let _=await Zr(t,r,n);return _.ok||p.push(_.error??"workspace_sync_failed"),i||await Bd(n,a),{ok:true,statuses:await Ct(t,e,r,n),warnings:p}}async function Fk(t){let e=kt(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {configPath:r,configExists:!0,installed:e.read(n)!==null}}catch(n){return n.code!=="ENOENT"?{configPath:r,configExists:false,installed:false}:{configPath:r,configExists:false,installed:false}}}function Hk(t){if(qd(t))return t;throw new Error("invalid_agent_target")}function qd(t){return ti(t)!==null}function qk(t,e){if(t.length!==e.length)return false;let r=new Set(t);return e.every(n=>r.has(n))}async function Bd(t,e,r){let n=U[e]?.skillsDir;if(!n)return;let s=join(t,n);await rm$1(s,{recursive:true,force:true}),await zk(dirname(s),t);}async function zk(t,e){let r=resolve(e),n=resolve(t);for(;n!==r&&n.startsWith(`${r}${sep}`);){try{await rmdir(n);}catch{return}n=dirname(n);}}var Mo="1.0",Es=37913,tn="127.0.0.1",nb=60,sb=createRequire(import.meta.url),ib=sb("../package.json"),ce=promisify(execFile),nn="io.pathrule.cli-daemon",bs="pathrule-daemon.service";async function sn(t){let e=await je(t);if(e.running)return e;let r=process.argv[1];if(!r)throw new Error("daemon_entrypoint_missing");spawn(process.execPath,[r,"daemon","run"],{detached:true,stdio:"ignore",env:{...process.env,...t}}).unref();let s=Date.now()+3e3;for(;Date.now()<s;){let i=await je(t);if(i.running)return i;await Rb(100);}throw new Error("daemon_start_timeout")}async function on(t){let e=await je(t);if(e.state?.pid&&e.state.pid!==process.pid)try{process.kill(e.state.pid,"SIGTERM");}catch{}return await unlink(A(t).daemonFile).catch(()=>{}),je(t)}async function Rs(t=process.env){let e=Zd(t);if(!e.supported)return e;if(e.method==="task-scheduler"){let r=await db();return {...e,enabled:r}}return {...e,enabled:e.path?await Ho(e.path):false}}async function Ve(t,e){let r=Zd(t);if(!r.supported)return r;if(e){let n=ob(t);if(r.method==="launchd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await ab(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&await cb(r.path),{...r,enabled:true}}if(r.method==="systemd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await lb(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await ce("systemctl",["--user","daemon-reload"]),await ce("systemctl",["--user","enable","--now",bs])),{...r,enabled:true}}return await pb(n,t),{...r,enabled:true}}return r.method==="launchd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&r.path&&await ub(r.path),r.path&&await unlink(r.path).catch(()=>{}),{...r,enabled:false}):r.method==="systemd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await ce("systemctl",["--user","disable","--now",bs]).catch(()=>{}),await ce("systemctl",["--user","daemon-reload"]).catch(()=>{})),r.path&&await unlink(r.path).catch(()=>{}),{...r,enabled:false}):(await hb(),{...r,enabled:false})}async function je(t){let e=A(t).daemonFile,r;try{r=JSON.parse(await readFile(e,"utf8"));}catch(s){return {running:false,state:null,state_path:e,reason:s.code==="ENOENT"?"missing":"unreadable"}}let n=Eb(r.pid);return {running:n,state:r,state_path:e,reason:n?void 0:"stale"}}function Zd(t){let e=t.PATHRULE_TEST_PLATFORM??process.platform,r=t.PATHRULE_AUTOSTART_DIR;return e==="darwin"?{supported:true,enabled:false,method:"launchd",path:r?join(r,`${nn}.plist`):join(homedir(),"Library","LaunchAgents",`${nn}.plist`)}:e==="linux"?{supported:true,enabled:false,method:"systemd",path:r?join(r,bs):join(homedir(),".config","systemd","user",bs)}:e==="win32"?{supported:false,enabled:false,method:"task-scheduler",path:null,reason:"Windows daemon autostart requires installer support."}:{supported:false,enabled:false,method:"unsupported",path:null,reason:`Unsupported platform: ${e}`}}function ob(t){let e=t.PATHRULE_CLI_ENTRYPOINT?.trim()||process.argv[1];if(!e)throw new Error("daemon_entrypoint_missing");return {command:process.execPath,args:[e,"daemon","run"]}}function Fo(t){let e={PATHRULE_DAEMON_PORT:t.PATHRULE_DAEMON_PORT?.trim()||String(Es)};for(let r of ["PATH","PATHRULE_HOME","PATHRULE_WEB_URL"]){let n=t[r];n&&n.trim()!==""&&(e[r]=n);}return e}async function ab(t,e,r){let n=`<?xml version="1.0" encoding="UTF-8"?>
142
142
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
143
143
  <plist version="1.0">
144
144
  <dict>
145
145
  <key>Label</key>
146
- <string>${nr(rn)}</string>
146
+ <string>${nr(nn)}</string>
147
147
  <key>ProgramArguments</key>
148
148
  <array>
149
149
  ${[e.command,...e.args].map(s=>` <string>${nr(s)}</string>`).join(`
@@ -165,7 +165,7 @@ ${Object.entries(Fo(r)).map(([s,i])=>` <key>${nr(s)}</key>
165
165
  <string>${nr(join(A(r).logsDir,"daemon-launchd.err.log"))}</string>
166
166
  </dict>
167
167
  </plist>
168
- `;await mkdir(dirname(t),{recursive:true,mode:D}),await mkdir(A(r).logsDir,{recursive:true,mode:D}),await writeFile(t,n,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function ob(t,e,r){let n=Fo(r),s=`[Unit]
168
+ `;await mkdir(dirname(t),{recursive:true,mode:D}),await mkdir(A(r).logsDir,{recursive:true,mode:D}),await writeFile(t,n,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function lb(t,e,r){let n=Fo(r),s=`[Unit]
169
169
  Description=Pathrule CLI daemon
170
170
 
171
171
  [Service]
@@ -178,9 +178,9 @@ RestartSec=5
178
178
 
179
179
  [Install]
180
180
  WantedBy=default.target
181
- `;await mkdir(dirname(t),{recursive:true,mode:D}),await writeFile(t,s,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function ab(t){let e=Qd();await le("launchctl",["bootout",e,t]).catch(()=>{}),await le("launchctl",["bootstrap",e,t]),await le("launchctl",["enable",`${e}/${rn}`]).catch(()=>{}),await le("launchctl",["kickstart","-k",`${e}/${rn}`]).catch(()=>{});}async function lb(t){await le("launchctl",["bootout",Qd(),t]).catch(()=>{});}function Qd(){return `gui/${typeof process.getuid=="function"?process.getuid():0}`}async function cb(){try{return await le("schtasks.exe",["/Query","/TN","Pathrule CLI Daemon"]),!0}catch{return false}}async function ub(t,e){let r=Fo(e),n=Object.entries(r).map(([o,a])=>`set ${Mo(o)}=${Mo(a)}`).join("&&"),s=[t.command,...t.args].map(pb).join(" "),i=n?`cmd.exe /d /c "${n}&&${s}"`:s;await le("schtasks.exe",["/Create","/TN","Pathrule CLI Daemon","/TR",i,"/SC","ONLOGON","/F"]);}async function db(){await le("schtasks.exe",["/Delete","/TN","Pathrule CLI Daemon","/F"]).catch(()=>{});}function nr(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Jd(t){return `"${t.replace(/(["\\$`])/g,"\\$1")}"`}function pb(t){return `"${Mo(t)}"`}function Mo(t){return t.replace(/(["^&|<>%])/g,"^$1")}async function ep(t,e={}){let r=null,n=new Map,s=new Map,i=createServer((l,c)=>{gb(l,c,t,r,n,s);}),o=hb(t);await new Promise((l,c)=>{i.once("error",c),i.listen(o.port,o.host,()=>{i.off("error",c),l();});});let a=i.address();if(!a||typeof a=="string")throw new Error("daemon_bind_failed");r={schema_version:1,pid:process.pid,host:en,port:a.port,protocol_version:Uo,daemon_session_id:randomUUID(),started_at:new Date().toISOString()},await _b(t,r),await vs(t,`listening ${en}:${a.port}`),await new Promise(l=>{let c=false,u=()=>{c||(c=true,process.off("SIGTERM",u),process.off("SIGINT",u),e.shutdownSignal?.removeEventListener("abort",u),i.close(()=>l()));};process.once("SIGTERM",u),process.once("SIGINT",u),e.shutdownSignal?.addEventListener("abort",u,{once:true});}),await unlink(A(t).daemonFile).catch(()=>{}),await vs(t,"stopped");}function hb(t){let e=t.PATHRULE_DAEMON_HOST?.trim();if(e&&e!==en&&e!=="localhost")throw new Error("daemon_host_must_be_loopback");let r=t.PATHRULE_DAEMON_PORT?.trim();if(!r)return {host:en,port:0};let n=Number(r);if(!Number.isInteger(n)||n<0||n>65535)throw new Error("daemon_port_invalid");return {host:en,port:n}}function fb(t,e,r,n=Date.now()){let s=Pu({origin:e,ip:r,nowMs:n}),i=(t.get(s)??0)+1;return t.set(s,i),i<=tb}async function gb(t,e,r,n,s,i){let o=new URL(t.url??"/","http://127.0.0.1"),a=Ss(t.headers,"origin"),l=yb();if(t.method==="OPTIONS"){let d=po(a,l);if(!d){T(e,400,{ok:false,error:a?"origin_not_allowed":"origin_required"});return}e.writeHead(204,d),e.end();return}if(a&&!os(a,l)){T(e,400,{ok:false,error:"origin_not_allowed"});return}if(a&&!fb(i,a,kb(t))){T(e,429,{ok:false,error:"rate_limited"});return}let c=a?po(a,l)??void 0:void 0;if(t.method==="GET"&&o.pathname==="/v1/status"){let d=Et(t,a,s);if(d&&n){let p=await rp(r);T(e,200,{daemon_present:true,paired:true,daemon_version:nb.version,protocol_version:Uo,daemon_session_id:d.daemonSessionId,user_id:d.userId,paired_at:d.pairedAt,desktop_runtime_detected:p},c);return}T(e,200,xu(Uo),c);return}if(t.method==="POST"&&o.pathname==="/v1/pair"){let d=yt({headers:t.headers,allowedOrigins:l,requirePairToken:false});if(d){T(e,d.statusCode,{ok:false,error:d.reason},c);return}if(!n){T(e,503,{ok:false,error:"daemon_not_ready"},c);return}try{let p=await Qr(t),h=Ke(p,"browser_profile_id"),f=await Cu({env:r,daemonSessionId:n.daemon_session_id,origin:a??"",pairCode:Ke(p,"pair_code"),pairVerifier:Ke(p,"pair_verifier"),browserProfileId:h});s.set(f.pair_token,{daemonSessionId:f.daemon_session_id,browserProfileId:h,origin:a??"",userId:f.user_id,pairedAt:new Date().toISOString()}),await vs(r,Vd("bridge_paired",{origin:a??"",userId:f.user_id,browserProfileId:h})),T(e,200,f,c);return}catch(p){let h=p instanceof Q?p.code:"pair_failed",f=h==="pair_code_missing"||h==="pair_code_invalid"?401:h==="pair_code_expired"||h==="pair_code_stale"?410:h.endsWith("_required")?400:500;T(e,f,{ok:false,error:h},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/read-dir"){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await Qr(t),f=Ke(h,"workspace_root"),m=Ke(h,"relative_dir");await ge(r,d.userId,f);let _=await xo(f,m);T(e,200,{entries:_},c);return}catch(h){T(e,400,{error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/path-exists"){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await Qr(t),f=Ke(h,"path");await ge(r,d.userId,f);let m=await Ho(f),_=m?await tp(f):!1;T(e,200,{exists:m,isDirectory:_},c);return}catch(h){T(e,400,{error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/doctor"){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{await Wo(r,d.userId);let h=await Qr(t),f=Gd(h,"workspace_root")??process.cwd(),m=await $e(r,f);T(e,200,{ok:m.ok,report:m},c);return}catch(h){T(e,400,{ok:false,error:h instanceof Error?h.message:String(h)},c);return}}let u=mb(o.pathname);if(t.method==="GET"&&u){let d=Et(t,a,s);if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let p=o.searchParams.get("workspace_root")?.trim()??"";if(!p)throw new Error("workspace_root_required");if(u.action==="local-status"){await Kd(e,r,d.userId,u.workspaceId,p,c);return}if(u.action==="agents-status"){await ge(r,d.userId,p,u.workspaceId);let h=await Ct(r,d.userId,u.workspaceId,p);T(e,200,{ok:!0,statuses:h,ai_clients:h},c);return}if(u.action==="fs-read"){await ge(r,d.userId,p,u.workspaceId);let h=await xo(p,o.searchParams.get("dir")??"/");T(e,200,{ok:!0,entries:h},c);return}}catch(p){T(e,400,{ok:false,error:p instanceof Error?p.message:String(p)},c);return}}if(t.method==="POST"&&u){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await Qr(t),f=Ke(h,"workspace_root");if(u.action==="local-status"){await Kd(e,r,d.userId,u.workspaceId,f,c);return}if(u.action==="attach"){await Wo(r,d.userId);let m=await Re(u.workspaceId,f,r);T(e,200,{ok:!0,...m},c);return}if(u.action==="sync"){await ge(r,d.userId,f,u.workspaceId);let m=await Xr(r,u.workspaceId,f);T(e,m.ok?200:409,m,c);return}if(u.action==="repair"){await ge(r,d.userId,f,u.workspaceId);let m=await Zr(r,f);T(e,m.ok?200:409,m,c);return}if(u.action==="agents-status"){await ge(r,d.userId,f,u.workspaceId);let m=await Ct(r,d.userId,u.workspaceId,f);T(e,200,{ok:!0,statuses:m,ai_clients:m},c);return}if(u.action==="agents-install"||u.action==="agents-uninstall"||u.action==="agents-set-enabled"){await ge(r,d.userId,f,u.workspaceId);let m=u.action==="agents-set-enabled"?bb(h,"enabled"):u.action==="agents-install",_=await Hd(r,d.userId,u.workspaceId,f,Ke(h,"client"),m,vb(Gd(h,"disable_mode")));T(e,_.ok?200:409,_,c);return}if(u.action==="hooks-sync"||u.action==="hook-index-rebuild"){await ge(r,d.userId,f,u.workspaceId);let{supabase:m}=await R(r),_=await gs({supabase:m,workspaceId:u.workspaceId,workspaceRoot:f,env:r});T(e,_.ok?200:409,_,c);return}if(u.action==="skills-materialize"){await ge(r,d.userId,f,u.workspaceId);let m=await Xr(r,u.workspaceId,f,{skillsOnly:!0});T(e,m.ok?200:409,m,c);return}}catch(h){T(e,400,{ok:false,error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/unpair"){let d=yt({headers:t.headers,allowedOrigins:l});if(d){T(e,d.statusCode,{ok:false,error:d.reason},c);return}let p=Ss(t.headers,is),h=Et(t,a,s);if(!p||!h){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}s.delete(p),await vs(r,Vd("bridge_unpaired",{origin:a??"",userId:h.userId,browserProfileId:h.browserProfileId})),T(e,200,{ok:true},c);return}T(e,404,{ok:false,error:"not_found"},c);}function Et(t,e,r){let n=Ss(t.headers,is);if(!n||!e)return null;let s=r.get(n);return !s||s.origin!==e||s.browserProfileId!==Ss(t.headers,Ru)?null:s}async function ge(t,e,r,n){await Wo(t,e);let{session:s,supabase:i}=await R(t),o=i.from("user_workspace_paths").select("workspace_id").eq("user_id",e).eq("local_root_path",r).limit(1);n&&(o=o.eq("workspace_id",n));let{data:a,error:l}=await o;if(l)throw l;if(!a||a.length===0)throw new Error("workspace_root_not_attached")}async function Wo(t,e){let{session:r}=await R(t);if(r.user.id!==e)throw new Error("session_user_mismatch")}function mb(t){let e=/^\/v1\/workspaces\/([^/]+)\/(.+)$/.exec(t);if(!e)return null;let r=decodeURIComponent(e[1]??""),n=e[2]??"";return r?n==="local-status"?{workspaceId:r,action:"local-status"}:n==="fs"?{workspaceId:r,action:"fs-read"}:n==="attach"?{workspaceId:r,action:"attach"}:n==="sync"?{workspaceId:r,action:"sync"}:n==="repair"?{workspaceId:r,action:"repair"}:n==="agents/status"?{workspaceId:r,action:"agents-status"}:n==="agents/install"?{workspaceId:r,action:"agents-install"}:n==="agents/uninstall"?{workspaceId:r,action:"agents-uninstall"}:n==="agents/set-enabled"?{workspaceId:r,action:"agents-set-enabled"}:n==="hooks/sync"?{workspaceId:r,action:"hooks-sync"}:n==="hook-index/rebuild"?{workspaceId:r,action:"hook-index-rebuild"}:n==="skills/materialize"?{workspaceId:r,action:"skills-materialize"}:null:null}async function Kd(t,e,r,n,s,i){await ge(e,r,s,n);let o=await Ho(s),a=o?await tp(s):false,l=await rp(e),c=await Ct(e,r,n,s);T(t,200,{ok:true,workspace_id:n,local_root_path:s,root_exists:o,root_is_directory:a,desktop_runtime_detected:l,local_runtime_state:o?a?l?"cli_attached_desktop_also_detected":"cli_attached":"root_not_directory":"root_missing",ai_clients:c},i);}async function Ho(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function tp(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function _b(t,e){let r=A(t).daemonFile;await mkdir(dirname(r),{recursive:true,mode:D});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function vs(t,e){let r=A(t).logsDir;await mkdir(r,{recursive:true,mode:D});let n=new Date().toISOString().slice(0,10),s=`${new Date().toISOString()} ${wb(e)}
182
- `;await writeFile(join(r,`daemon-${n}.log`),s,{flag:"a",encoding:"utf8",mode:O});}function wb(t){return t.replace(/(authorization|token|secret|password)=\S+/gi,"$1=[redacted]")}function Vd(t,e){let r=createHash("sha256").update("pathrule-bridge-profile-v1","utf8").update("\0","utf8").update(e.browserProfileId,"utf8").digest("base64url").slice(0,16);return `${t} origin=${e.origin||"unknown"} user_id=${e.userId} browser_profile_hash=${r}`}async function rp(t,e=Date.now()){let r=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(r==="healthy"||r==="1"||r==="true")return true;if(r==="unhealthy"||r==="0"||r==="false")return false;let n;try{n=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(n.healthy!==true||!n.updated_at)return false;let s=Date.parse(n.updated_at);return Number.isFinite(s)&&e-s<=600*1e3}function yb(){let t=process.env.PATHRULE_BRIDGE_ORIGINS;return t?t.split(",").map(e=>e.trim()).filter(Boolean):["https://app.pathrule.io","http://localhost:5173"]}function Ss(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}function kb(t){return t.socket.remoteAddress??"unknown"}async function Qr(t,e=4096){let r="";for await(let s of t)if(r+=s,Buffer.byteLength(r,"utf8")>e)throw new Error("request_body_too_large");let n=JSON.parse(r||"{}");if(!n||typeof n!="object"||Array.isArray(n))throw new Error("invalid_json_body");return n}function Ke(t,e){let r=t[e];if(typeof r!="string"||r.trim()==="")throw new Q(`${e}_required`);return r.trim()}function Gd(t,e){let r=t[e];return typeof r!="string"||r.trim()===""?null:r.trim()}function bb(t,e){let r=t[e];if(typeof r!="boolean")throw new Q(`${e}_required`);return r}function vb(t){return t==="full-remove"?"full-remove":"restore-backup"}function T(t,e,r,n){t.writeHead(e,{"content-type":"application/json",...n}),t.end(JSON.stringify(r));}function Sb(t){if(!Number.isInteger(t)||t<=0)return false;try{return process.kill(t,0),!0}catch{return false}}function Cb(t){return new Promise(e=>setTimeout(e,t))}q();function y(t){return {schema_version:1,ok:t.ok,command:t.command,cwd:t.cwd,...t.data===void 0?{}:{data:t.data},...t.error===void 0?{}:{error:t.error},...t.next_steps===void 0?{}:{next_steps:t.next_steps}}}function np(t){return `${JSON.stringify(t,null,2)}
183
- `}function g(t,e){let r={ok:"[ok]",warn:"[warn]",error:"[error]",info:"[info]"};return e.color?`${{ok:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",info:"\x1B[36m"}[t]}${r[t]}\x1B[0m`:r[t]}Ce();var Rb=/^[^\s@]+@[^\s@]+\.[^\s@]+$/i,xe=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliInviteUsageError";}code};function qo(t){let e=[],r="editor",n,s;for(let o=0;o<t.length;o+=1){let a=t[o];if(a){if(a==="--role"){r=jb(t[++o]);continue}if(a==="--org"){n=sp(t[++o],"--org requires a value","invite_org_required");continue}if(a==="--workspace"){s=sp(t[++o],"--workspace requires a value","invite_workspace_required");continue}if(a.startsWith("--"))throw new xe("unknown_invite_option",`Unknown invite option "${a}".`);e.push(a);}}let i=e[0];if(!i)throw new xe("invite_email_required","Usage: pathrule invite <email> [--role admin|editor|viewer] [--org <slug-or-id>] [--workspace <name-or-id>]");if(e.length>1)throw new xe("unexpected_invite_argument",`Unexpected extra argument "${e[1]}".`);return {email:i,role:r,orgSelector:n,workspaceSelector:s}}async function zo(t,e){let r=t.email.trim().toLowerCase();if(!Rb.test(r))return xt("invalid_email",null,null,e,r);let{session:n,supabase:s}=await R(e),i=await xb(t.orgSelector,e);if(!i)return xt("org_required",null,null,e,r);if(i.role!=="admin"&&i.role!=="owner")return xt("forbidden",i,null,e,r);let o=await Pb(s,n.user.id,i.id,t.workspaceSelector,e);if(!o&&t.workspaceSelector)return xt("workspace_not_found",i,null,e,r);let a=await Db(s,i.id);if(a.failure)return xt(a.failure.error,i,o,e,r,a.failure.details);let l=await $b(s,i.id,a,e);if(!l.ok)return xt(l.error,i,o,e,r,l.details);let{data:c,error:u}=await s.rpc("create_org_invite",{p_org_id:i.id,p_email:r,p_role:t.role}),d=c,p=d&&d.ok===false?d.error:void 0;if(u||!d||d.ok!==true)return xt(u?.message??p??"invite_failed",i,o,e,r);let h=true;try{let{error:m}=await s.functions.invoke("send-org-invite-email",{body:{invite_id:d.invite_id}});m&&(h=!1);}catch{h=false;}let f={kind:"web",url:Z(i,e,"members"),label:"Open team in Pathrule Web",reason:"preferred"};return {ok:true,invite_id:d.invite_id,email:d.email,role:d.role,email_sent:h,billing_impact:a.billingImpact,billing_adjustment:l.adjustment,organization:ip(i),workspace:op(o),open_target:f,next_steps:[{label:"Open team in Pathrule Web",url:f.url},...h?[]:[{label:"Retry invite email from Pathrule Web",url:f.url}]]}}function ip(t){return t?{id:t.id,name:t.name,slug:t.slug,role:t.role}:null}function op(t){return t?{id:t.id,name:t.name}:null}async function xb(t,e){return t?(await fe(e)).find(n=>n.id===t||n.slug===t)??null:j(e)}async function Pb(t,e,r,n,s){if(!n){let a=await U(s);return a?.organization_id===r?a:null}let{data:i,error:o}=await t.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",r).is("archived_at",null);if(o)throw o;for(let a of i??[]){let c=(a.user_workspace_paths??[]).find(d=>d.user_id===e)??null,u={id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,git_remote_url:a.git_remote_url,git_owner:a.git_owner,git_repo:a.git_repo,local_root_path:c?.local_root_path??null,current:false};if(u.id===n||u.name===n)return u}return null}function xt(t,e,r,n,s,i){let o=Tb(t,e,n),a=Ab(t,s);return {ok:false,error:t,message:Ob(t),...a?{email_hash:a}:{},organization:ip(e),workspace:op(r),open_target:o,next_steps:Ib(t,o),...i}}function Tb(t,e,r){if(e){if(t==="free_plan_invites_disabled"||t==="invite_blocked_billing"||t==="billing_update_failed")return {kind:"web",url:Z(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="subscription_not_invitable"||t==="subscription_frozen")return {kind:"web",url:`${Z(e,r,"billing")}/reactivate`,label:"Open billing reactivation in Pathrule Web",reason:"fallback"};if(t==="paid_seats_required"||t==="seat_limit_reached")return {kind:"web",url:Z(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="forbidden"||t==="permission_denied"||t==="already_member"||t==="email_already_member"||t==="invite_pending")return {kind:"web",url:Z(e,r,"members"),label:"Open team in Pathrule Web",reason:"fallback"}}}function Ab(t,e){if(e&&!(t!=="rate_limited"&&t!=="invite_resent_cooldown_hit"&&t!=="invite_declined_cooldown"))return createHash("sha256").update(e.trim().toLowerCase()).digest("hex")}function Ib(t,e){if(t==="not_authenticated"||t==="session_expired_security_epoch")return [{label:"Sign in again",command:"pathrule login"}];if(t==="org_required")return [{label:"Choose an organization",command:"pathrule org use <slug-or-id>"}];if(t==="workspace_not_found")return [{label:"List workspaces",command:"pathrule workspace list"}];if(t==="rate_limited"||t==="invite_resent_cooldown_hit"||t==="invite_declined_cooldown")return [{label:"Retry later"}];if(e)return [{label:e.label,url:e.url}]}function Ob(t){switch(t){case "invalid_email":return "Enter a valid email address.";case "invalid_role":return "Role must be admin, editor, or viewer.";case "not_authenticated":return "Pathrule CLI is not signed in.";case "session_expired_security_epoch":return "Your session is stale after a security change. Sign in again.";case "org_required":return "No organization is selected.";case "workspace_not_found":return "Workspace context not found for that organization.";case "forbidden":case "permission_denied":return "Your current role cannot invite teammates to this organization.";case "free_plan_invites_disabled":return "Invites require a paid Pathrule organization plan.";case "subscription_not_invitable":case "subscription_frozen":return "Invites are blocked until billing is reactivated.";case "paid_seats_required":case "seat_limit_reached":return "Pathrule could not automatically add paid seat coverage for this invite.";case "billing_update_failed":return "Billing could not be updated for this invite. Review billing before sending it.";case "rate_limited":return "Rate limit reached, try again later.";case "invite_resent_cooldown_hit":case "invite_declined_cooldown":return "Please wait before inviting this email again.";case "already_member":case "email_already_member":return "That email is already a member of this organization.";case "invite_pending":return "There is already a pending invite for this email.";case "organization_not_found":return "Organization not found.";default:return t.replace(/_/g," ")}}async function $b(t,e,r,n){if(!r.billingRequirement)return {ok:true,adjustment:{status:r.billingImpact.seat_effect==="paid_extra_available"?"already_covered":"not_needed",target_seats:r.billingImpact.target_active_seats,required_paid_extra_seats:r.billingImpact.required_paid_extra_seats,paid_extra_seats_after:r.billingImpact.current_paid_extra_seats}};let s=r.billingRequirement,i={target_seats:s.targetSeats,required_paid_extra_seats:s.requiredPaidExtraSeats,gift_seat_cap:s.giftSeatCap,current_paid_extra_seats:s.currentPaidExtraSeats},o=null;try{let{data:a,error:l}=await t.functions.invoke("start-paid-seat-checkout",{body:{org_id:e,target_seats:s.targetSeats,return_url_origin:Nb(n)}});if(l)return {ok:!1,error:"billing_update_failed",details:i};o=a;}catch{return {ok:false,error:"billing_update_failed",details:i}}return o?.ok?o.url?{ok:false,error:"paid_seats_required",details:i}:{ok:true,adjustment:{status:o.updated?"updated":"already_covered",target_seats:s.targetSeats,required_paid_extra_seats:s.requiredPaidExtraSeats,paid_extra_seats_after:o.paid_extra_seats}}:{ok:false,error:o?.error??"billing_update_failed",details:i}}function Nb(t){return (t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}function jb(t){let e=t?.trim().toLowerCase();if(!e||e==="member")return "editor";if(e==="admin"||e==="editor"||e==="viewer")return e;throw new xe("invalid_invite_role",`Invalid invite role "${t}".`)}function sp(t,e,r){if(!t)throw new xe(r,e);return t}async function Db(t,e){let[r,n]=await Promise.all([t.from("organizations").select("plan, subscription_status, trial_status, trial_seat_cap, paid_extra_seats").eq("id",e).maybeSingle(),t.from("organization_members").select("id",{count:"exact",head:true}).eq("organization_id",e)]);if(r.error)throw r.error;if(n.error)throw n.error;let s=ol(r.data,n.count??0);return {failure:s.failure?{error:s.failure.error}:null,billingImpact:s.billingImpact,billingRequirement:s.billingRequirement}}Ce();q();var Pt=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliRefreshError";}code};async function on(t,e={}){let r=await Ps(t),n=await Yo(t,r.id),s=await Na(n,{workspace_id:r.id,include_in_progress:e.includeInProgress});if(!s.ok)throw Xo(s.error);return s.data.slice(0,Mb(e.limit)).map(i=>ap(i,r.id,t))}async function Jo(t,e,r={}){let n=await Ps(t),s=e??await Ub(t),i=await Yo(t,n.id),o=await ja(i,{refresh_id:s,claimed_by:r.claimedBy??"codex"});if(!o.ok)throw Xo(o.error);return lp(o.data,t)}async function Ko(t,e,r,n={}){await Ps(t);let s=await Yo(t),i=await Da(s,{refresh_id:e,status:r,note:n.note,claimed_by:n.claimedBy??"codex"});if(!i.ok)throw Xo(i.error);return lp(i.data,t)}async function Vo(t,e){let r=await Ps(t);if(!e){let l=(await on(t,{includeInProgress:true,limit:1}))[0];if(!l)throw new Pt("refresh_not_found","No pending refresh tasks found.");return l}let{supabase:n}=await R(t),{data:s,error:i}=await n.from("suggestion_refreshes").select("id, workspace_id, subject_type, subject_id, formula_id, status, created_at, brief").eq("id",e).eq("workspace_id",r.id).maybeSingle();if(i)throw i;if(!s)throw new Pt("refresh_not_found",`Refresh ${e} not found.`);let o=s,a=o.brief??{};return ap({id:o.id,subjectType:o.subject_type,subjectId:o.subject_id,subjectTitle:a.subject?.title??"(unknown)",nodePath:a.subject?.nodePath??"/",formulaId:o.formula_id,humanReason:a.signal?.humanReason??o.formula_id,status:o.status,createdAt:o.created_at,hasProposedPatch:!!a.proposedPatch?.newBody},r.id,t)}function xs(t,e={}){let r=t.open_targets.find(n=>n.kind==="web")??{kind:"web",url:t.url,label:"Open refresh task in Pathrule Web",reason:"preferred"};if(e.forceWeb)return {...r,reason:"forced"};if(e.preferDesktopApp){let n=t.open_targets.find(s=>s.kind==="desktop-app");return n||{...r,reason:"fallback"}}return t.open_targets[0]??r}function Go(t,e,r){return `${(r.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}?tab=suggestions&refresh=${encodeURIComponent(e)}`}function Lb(t,e){return `pathrule://workspace/${encodeURIComponent(t)}/refresh/${encodeURIComponent(e)}`}async function Ub(t){let e=(await on(t,{limit:1}))[0];if(!e)throw new Pt("refresh_not_found","No pending refresh tasks found.");return e.id}async function Ps(t){let e=await U(t);if(!e)throw new Pt("workspace_required","No current workspace. Run pathrule workspace use <name-or-id>.");return e}async function Yo(t,e=null){let{session:r,supabase:n}=await R(t);return {supabase:n,userId:r.user.id,workspaceId:e,clientId:"codex"}}function ap(t,e,r){let n=Go(e,t.id,r);return {...t,workspace_id:e,url:n,open_targets:[cp(e,t.id,r),up(e,t.id)]}}function lp(t,e){return {...t,url:Go(t.workspaceId,t.id,e),open_targets:[cp(t.workspaceId,t.id,e),up(t.workspaceId,t.id)]}}function cp(t,e,r){return {kind:"web",url:Go(t,e,r),label:"Open refresh task in Pathrule Web",reason:"preferred"}}function up(t,e){return {kind:"desktop-app",url:Lb(t,e),label:"Open refresh task in Pathrule Desktop",reason:"fallback"}}function Mb(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}function Xo(t){return new Pt(t.code,t.message)}V();V();Qn();q();async function hp(t,e,r=fetch){if(!e.gitRemoteUrl)return {status:"skipped",error:"missing_git_remote"};try{let{session:n,supabase:s}=await R(t),{data:i,error:o}=await s.from("beta_platform_invites").select("id").eq("claimed_user_id",n.user.id).eq("status","claimed").order("claimed_at",{ascending:!1}).limit(1);if(o)return {status:"skipped",error:"invite_lookup_unavailable"};let a=(i??[])[0]??null;if(!a)return {status:"skipped",error:"no_claimed_beta_invite"};let l=Gt(t),c=await Kb(t),u=await r(`${l.supabaseUrl}/functions/v1/process-beta-activation`,{method:"POST",headers:{"content-type":"application/json",apikey:l.supabaseAnonKey,Authorization:`Bearer ${n.access_token}`},body:JSON.stringify({invite_id:a.id,workspace_id:e.workspaceId,git_remote_url:e.gitRemoteUrl,machine_id:c,runtime_source:e.runtimeSource})}),d=await u.json().catch(()=>null);return !u.ok||!d?.status?{status:"skipped",error:"activation_unavailable"}:{status:d.status,credit_cents:pp(d.credit_cents),founder_bonus_cents:pp(d.founder_bonus_cents)}}catch{return {status:"skipped",error:"activation_unavailable"}}}async function Kb(t){let e=join(A(t).home,"machine-install.json");try{let n=JSON.parse(await readFile(e,"utf8"));if(typeof n.machine_id=="string"&&n.machine_id.length>=16)return n.machine_id}catch{}let r=`cli_${randomUUID()}`;return await Vb(e,{schema_version:1,machine_id:r}),r}async function Vb(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:D}),await chmod(r,D).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}function pp(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}Ce();var Qb=promisify(execFile);async function Zo(t,e){let r=await j(e);if(!r)return {cwd:t,organization:null,candidates:[],recommended_action:"select_org"};let[n,s,i]=await Promise.all([Ee(e),kp(t),sv(t,e)]),o=rv(t,r,n,s,i);return {cwd:t,organization:r,candidates:o,recommended_action:o.length===0?"create_workspace":o[0]?.confidence==="exact"||o[0]?.confidence==="high"?"attach_existing":"choose_workspace"}}async function sr(t,e,r,n={yes:false}){let s=tv(t);if(!s.shouldApply)return {plan:await Zo(e,r),applied:false,org_selected:null,workspace_action:"none",workspace:null,install:null,sync:null,beta_activation:null};if(!n.yes)throw new Error("setup_requires_yes");let i=null;if(s.org){let{useCliOrg:p}=await Promise.resolve().then(()=>(Ce(),gu));i=(await p(s.org,r)).id;}let o=await Zo(e,r),a="none",l=null;if(s.createWorkspace){let p=await se("create_workspace",r);if(!p.allowed)throw new Error(p.blocking_reason??"preflight_blocked");l=await _t(s.workspaceName??basename(e),e,r),a="created";}else s.workspaceSelector?(l=await Re(s.workspaceSelector,e,r),a="attached"):o.recommended_action==="attach_existing"&&o.candidates[0]?(l=await Re(o.candidates[0].workspace_id,e,r),a="attached"):s.selectCurrentWorkspace&&(l=await Fr(s.selectCurrentWorkspace,r),a="selected");o=await Zo(e,r);let c=s.target?await Je(s.target,r):null,u=a==="attached"||a==="created"?await Ne(r,e):null,d=u?.ok&&(a==="attached"||a==="created")?await hp(r,{workspaceId:ev(l),gitRemoteUrl:await kp(e),runtimeSource:"cli"}):null;return {plan:o,applied:true,org_selected:i,workspace_action:a,workspace:l,install:c,sync:u,beta_activation:d}}function ev(t){if(!t||typeof t!="object")return null;let e=t.id;if(typeof e=="string")return e;let r=t.workspace?.id;return typeof r=="string"?r:null}function tv(t){let e={org:null,workspaceSelector:null,workspaceName:null,createWorkspace:false,selectCurrentWorkspace:null,target:null};for(let r=0;r<t.length;r+=1){let n=t[r],s=()=>{let i=t[r+1];if(!i||i.startsWith("--"))throw new Error(`missing_value:${n}`);return r+=1,i};if(n==="--org")e.org=s();else if(n==="--workspace"||n==="--workspace-id")e.workspaceSelector=s();else if(n==="--workspace-name")e.workspaceName=s();else if(n==="--create-workspace")e.createWorkspace=true;else if(n==="--select-workspace")e.selectCurrentWorkspace=s();else if(n==="--target")e.target=s();else throw new Error(`unknown_setup_option:${n}`)}return {...e,shouldApply:e.org!==null||e.workspaceSelector!==null||e.workspaceName!==null||e.createWorkspace||e.selectCurrentWorkspace!==null||e.target!==null}}function rv(t,e,r,n,s){let i=wp(basename(t)),o=[],a=new Set,l=c=>{a.has(c.workspace_id)||(a.add(c.workspace_id),o.push(c));};for(let c of r){if(c.local_root_path===t){l(an("cwd_mapping",c,e,"exact",false,"Exact local path mapping."));continue}if(n&&nv(c,n)){l(an("git_remote",c,e,"high",true,"Git remote matches workspace metadata."));continue}if(s.has(c.id)){l(an("hook_cache",c,e,"high",true,"Existing hook cache points at this folder."));continue}let u=wp(c.name);if(u===i){l(an("name_match",c,e,"medium",true,"Folder name matches workspace name."));continue}iv(u,i)&&l(an("name_match",c,e,"low",true,"Folder name is similar to workspace name."));}return o.sort((c,u)=>{let d=mp(u.confidence)-mp(c.confidence);return d!==0?d:_p(u.source)-_p(c.source)}),o.map((c,u)=>({...c,recommended:u===0}))}function an(t,e,r,n,s,i){return {source:t,workspace_id:e.id,workspace_name:e.name,org_id:r.id,org_name:r.name,org_slug:r.slug,confidence:n,recommended:false,requires_confirmation:s,reason:i}}function mp(t){return {exact:4,high:3,medium:2,low:1}[t]}function _p(t){return {cwd_mapping:6,git_remote:5,hook_cache:4,companion_file:3,name_match:2,manual:1}[t]}function nv(t,e){let r=t;return r.git_remote_url&&Qo(r.git_remote_url)===Qo(e)?true:!r.git_owner||!r.git_repo?false:Qo(e).endsWith(`/${r.git_owner}/${r.git_repo}`.toLocaleLowerCase("en-US"))}async function kp(t){try{let{stdout:e}=await Qb("git",["config","--get","remote.origin.url"],{cwd:t,timeout:1e3});return e.trim()||null}catch{return null}}function Qo(t){return t.trim().replace(/^git@([^:]+):/,"https://$1/").replace(/^https?:\/\//,"").replace(/\.git$/,"").toLocaleLowerCase("en-US")}async function sv(t,e){let r=new Set,n=join(A(e).home,"cache"),s;try{s=await readdir(n);}catch{return r}let i=resolve(t);return await Promise.all(s.map(async o=>{try{let a=await readFile(join(n,o,"hook-index.json"),"utf8"),l=JSON.parse(a);if(!l.workspace_id||!l.workspace_root)return;let c=resolve(l.workspace_root);(i===c||i.startsWith(`${c}/`))&&r.add(l.workspace_id);}catch{}})),r}function wp(t){return t.toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/g," ").trim()}function iv(t,e){return !t||!e?false:t.includes(e)||e.includes(t)?true:ov(t,e)<=Math.max(2,Math.floor(Math.max(t.length,e.length)*.25))}function ov(t,e){let r=Array.from({length:e.length+1},(n,s)=>s);for(let n=1;n<=t.length;n+=1){let s=n,i=n-1;for(let o=1;o<=e.length;o+=1){let a=r[o]??0,l=t[n-1]===e[o-1]?0:1;r[o]=Math.min(a+1,s+1,i+l),s=r[o]??0,i=a;}r[0]=n;}return r[e.length]??0}q();Ce();async function ea(t,e){let r=await av(t,e);if(!r)throw new Error("org_required");let{supabase:n}=await R(t),[s,i,o]=await Promise.all([n.from("organization_members").select("id, user_id, role, joined_at").eq("organization_id",r.id).order("joined_at",{ascending:true}),n.rpc("get_org_member_profiles",{p_org_id:r.id}),n.from("organization_invites").select("id, email, role, status, created_at, expires_at").eq("organization_id",r.id).eq("status","pending").order("created_at",{ascending:false})]);if(s.error)throw s.error;if(i.error)throw i.error;if(o.error)throw o.error;let a=new Map,l=i.data??[];for(let d of l)a.set(d.user_id,d);let c=(s.data??[]).map(d=>{let p=a.get(d.user_id);return {id:d.id,user_id:d.user_id,role:d.role,joined_at:d.joined_at,email:p?.email??null,full_name:Qa(p?.full_name,"profile"),avatar_url:el(p?.avatar_url),last_sign_in_at:p?.last_sign_in_at??null}}),u=(o.data??[]).map(d=>({id:d.id,email:d.email,role:d.role,status:d.status,created_at:d.created_at,expires_at:d.expires_at}));return {organization:{id:r.id,name:r.name,slug:r.slug,role:r.role},members:c,invites:u,open_target:{kind:"web",url:Z(r,t,"members"),label:"Open team in Pathrule Web",reason:"preferred"}}}async function av(t,e){return e?(await fe(t)).find(n=>n.id===e||n.slug===e)??null:j(t)}gt();Mr();async function Ts(t,e,r){let n=await mt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");let s=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/cli/versions.json`,i=e.PATHRULE_PROTOCOL_VERSION??Ka;if(n.value==="manual")return {checked:false,policy:n.value,current_version:t,current_protocol_version:i,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"manual_policy",url:s};try{let o=await r(s,{headers:{"user-agent":`pathrule-cli/${t}`}});if(!o.ok)throw new Error(`http_${o.status}`);let a=await o.json(),l=a.latest_version??a.latest??null,c=a.min_supported_protocol_version??null;return {checked:!0,policy:n.value,current_version:t,current_protocol_version:i,latest_version:l,min_supported_protocol_version:c,protocol_compatible:cv(i,c),update_available:l?l!==t:!1,upgrade_command:a.upgrade_command??lv(a.channels),url:s}}catch{return {checked:false,policy:n.value,current_version:t,current_protocol_version:i,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"request_failed",url:s}}}async function vp(t,e,r){let n=await mt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");if(n.value==="manual")return null;let s=await Se(e).catch(()=>null);if(!s)return null;let i=await pe(s.session.user.id,e);if(i.last_update_check_at){let l=new Date(i.last_update_check_at).getTime();if(Number.isFinite(l)&&Date.now()-l<1440*60*1e3)return null}await he(s.session.user.id,{last_update_check_at:new Date().toISOString()},e);let o=await Ts(t,e,r);if(!o.checked||!o.update_available)return null;let a=o.upgrade_command?` Run: ${o.upgrade_command}`:"";return `Pathrule CLI ${o.latest_version} is available.${a}`}function lv(t){return t?t.brew??t.npm??t.standalone??null:null}function cv(t,e){if(!e)return true;let r=bp(t),n=bp(e);return r&&n?uv(r,n)>=0:t===e}function bp(t){let e=t.match(/^v?(\d+)\.(\d+)\.(\d+)$/);return e?[Number(e[1]),Number(e[2]),Number(e[3])]:null}function uv(t,e){for(let r=0;r<3;r+=1){let n=(t[r]??0)-(e[r]??0);if(n!==0)return n}return 0}q();Ce();async function ta(t){let{session:e,supabase:r}=await R(t.env),[n,s]=await Promise.all([j(t.env),U(t.env)]);if(!n)throw new Error("org_required");if(!s)throw new Error("workspace_required");let i=dv(n.plan),[o,a,l,c,u,d,p,h]=await Promise.all([pv(r,s.id),ln(r.from("nodes").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),ln(r.from("memories").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),ln(r.from("rules").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),ln(r.from("skills").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),ln(r.from("workspaces").select("id",{count:"exact",head:true}).eq("organization_id",n.id).is("archived_at",null)),hv(r,s.id),Ct(t.env,e.user.id,s.id,s.local_root_path)]);return {organization:{id:n.id,name:n.name,slug:n.slug,plan:i,role:n.role,subscription_status:n.subscription_status,trial_status:n.trial_status},workspace:s,local_status:{current_folder:t.cwd,attached_root:s.local_root_path,current_folder_attached:s.local_root_path===t.cwd,attached_elsewhere:s.local_root_path!==null&&s.local_root_path!==t.cwd},cloud_tree:{root_node_present:o,nodes:a,memories:l,rules:c,skills:u},capacity:{plan:i,workspaces:{used:d,limit:Me[i].workspaces},memories:{used:l,limit:Me[i].memories},rules:{used:c,limit:Me[i].rules}},active_clients:h.map(f=>gv(f)),recent_activity:p}}function dv(t){return Object.hasOwn(Me,t)?t:"free"}async function pv(t,e){let{data:r,error:n}=await t.from("nodes").select("id").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(n)throw n;return !!r?.id}async function ln(t){let{count:e,error:r}=await t;if(r)throw new Error(r.message);return e??0}async function hv(t,e){let{data:r,error:n}=await t.from("activity_logs").select("created_at, domain, action, scope, node_path, task_summary, files_touched").eq("workspace_id",e).eq("status","active").order("created_at",{ascending:false}).limit(5);if(n)throw n;return (r??[]).map(s=>({created_at:String(s.created_at),domain:String(s.domain??"unknown"),action:String(s.action??"unknown"),scope:String(s.scope??"project"),node_path:String(s.node_path??"/"),task_summary:String(s.task_summary??""),files_touched_total:fv(s.files_touched)}))}function fv(t){if(!t||typeof t!="object")return 0;let e=t.total;return typeof e=="number"&&Number.isFinite(e)?e:0}function gv(t){let e=t.client;return {client:e,label:M[e]?.label??e,active:t.active,selected:t.selected,detected:t.markers.includes("workspace_marker_detected"),machine_installed:t.machineInstalled,machine_config_exists:t.machineConfigExists,machine_config_path:t.machineConfigPath}}var xv=createRequire(import.meta.url),De=xv("../package.json"),Os=promisify(execFile),G=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliContentUsageError";}code},Pv=`${F.cli}
181
+ `;await mkdir(dirname(t),{recursive:true,mode:D}),await writeFile(t,s,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function cb(t){let e=Qd();await ce("launchctl",["bootout",e,t]).catch(()=>{}),await ce("launchctl",["bootstrap",e,t]),await ce("launchctl",["enable",`${e}/${nn}`]).catch(()=>{}),await ce("launchctl",["kickstart","-k",`${e}/${nn}`]).catch(()=>{});}async function ub(t){await ce("launchctl",["bootout",Qd(),t]).catch(()=>{});}function Qd(){return `gui/${typeof process.getuid=="function"?process.getuid():0}`}async function db(){try{return await ce("schtasks.exe",["/Query","/TN","Pathrule CLI Daemon"]),!0}catch{return false}}async function pb(t,e){let r=Fo(e),n=Object.entries(r).map(([o,a])=>`set ${Uo(o)}=${Uo(a)}`).join("&&"),s=[t.command,...t.args].map(fb).join(" "),i=n?`cmd.exe /d /c "${n}&&${s}"`:s;await ce("schtasks.exe",["/Create","/TN","Pathrule CLI Daemon","/TR",i,"/SC","ONLOGON","/F"]);}async function hb(){await ce("schtasks.exe",["/Delete","/TN","Pathrule CLI Daemon","/F"]).catch(()=>{});}function nr(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Jd(t){return `"${t.replace(/(["\\$`])/g,"\\$1")}"`}function fb(t){return `"${Uo(t)}"`}function Uo(t){return t.replace(/(["^&|<>%])/g,"^$1")}async function ep(t,e={}){let r=null,n=new Map,s=new Map,i=createServer((l,c)=>{_b(l,c,t,r,n,s);}),o=gb(t);await new Promise((l,c)=>{i.once("error",c),i.listen(o.port,o.host,()=>{i.off("error",c),l();});});let a=i.address();if(!a||typeof a=="string")throw new Error("daemon_bind_failed");r={schema_version:1,pid:process.pid,host:tn,port:a.port,protocol_version:Mo,daemon_session_id:randomUUID(),started_at:new Date().toISOString()},await yb(t,r),await vs(t,`listening ${tn}:${a.port}`),await new Promise(l=>{let c=false,u=()=>{c||(c=true,process.off("SIGTERM",u),process.off("SIGINT",u),e.shutdownSignal?.removeEventListener("abort",u),i.close(()=>l()));};process.once("SIGTERM",u),process.once("SIGINT",u),e.shutdownSignal?.addEventListener("abort",u,{once:true});}),await unlink(A(t).daemonFile).catch(()=>{}),await vs(t,"stopped");}function gb(t){let e=t.PATHRULE_DAEMON_HOST?.trim();if(e&&e!==tn&&e!=="localhost")throw new Error("daemon_host_must_be_loopback");let r=t.PATHRULE_DAEMON_PORT?.trim();if(!r)return {host:tn,port:0};let n=Number(r);if(!Number.isInteger(n)||n<0||n>65535)throw new Error("daemon_port_invalid");return {host:tn,port:n}}function mb(t,e,r,n=Date.now()){let s=Pu({origin:e,ip:r,nowMs:n}),i=(t.get(s)??0)+1;return t.set(s,i),i<=nb}async function _b(t,e,r,n,s,i){let o=new URL(t.url??"/","http://127.0.0.1"),a=Ss(t.headers,"origin"),l=bb();if(t.method==="OPTIONS"){let d=po(a,l);if(!d){T(e,400,{ok:false,error:a?"origin_not_allowed":"origin_required"});return}e.writeHead(204,d),e.end();return}if(a&&!os(a,l)){T(e,400,{ok:false,error:"origin_not_allowed"});return}if(a&&!mb(i,a,vb(t))){T(e,429,{ok:false,error:"rate_limited"});return}let c=a?po(a,l)??void 0:void 0;if(t.method==="GET"&&o.pathname==="/v1/status"){let d=Et(t,a,s);if(d&&n){let p=await rp(r);T(e,200,{daemon_present:true,paired:true,daemon_version:ib.version,protocol_version:Mo,daemon_session_id:d.daemonSessionId,user_id:d.userId,paired_at:d.pairedAt,desktop_runtime_detected:p},c);return}T(e,200,xu(Mo),c);return}if(t.method==="POST"&&o.pathname==="/v1/pair"){let d=yt({headers:t.headers,allowedOrigins:l,requirePairToken:false});if(d){T(e,d.statusCode,{ok:false,error:d.reason},c);return}if(!n){T(e,503,{ok:false,error:"daemon_not_ready"},c);return}try{let p=await en(t),h=Ke(p,"browser_profile_id"),f=await Cu({env:r,daemonSessionId:n.daemon_session_id,origin:a??"",pairCode:Ke(p,"pair_code"),pairVerifier:Ke(p,"pair_verifier"),browserProfileId:h});s.set(f.pair_token,{daemonSessionId:f.daemon_session_id,browserProfileId:h,origin:a??"",userId:f.user_id,pairedAt:new Date().toISOString()}),await vs(r,Vd("bridge_paired",{origin:a??"",userId:f.user_id,browserProfileId:h})),T(e,200,f,c);return}catch(p){let h=p instanceof ee?p.code:"pair_failed",f=h==="pair_code_missing"||h==="pair_code_invalid"?401:h==="pair_code_expired"||h==="pair_code_stale"?410:h.endsWith("_required")?400:500;T(e,f,{ok:false,error:h},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/read-dir"){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await en(t),f=Ke(h,"workspace_root"),m=Ke(h,"relative_dir");await me(r,d.userId,f);let _=await xo(f,m);T(e,200,{entries:_},c);return}catch(h){T(e,400,{error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/path-exists"){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await en(t),f=Ke(h,"path");await me(r,d.userId,f);let m=await Ho(f),_=m?await tp(f):!1;T(e,200,{exists:m,isDirectory:_},c);return}catch(h){T(e,400,{error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/doctor"){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{await Wo(r,d.userId);let h=await en(t),f=Gd(h,"workspace_root")??process.cwd(),m=await $e(r,f);T(e,200,{ok:m.ok,report:m},c);return}catch(h){T(e,400,{ok:false,error:h instanceof Error?h.message:String(h)},c);return}}let u=wb(o.pathname);if(t.method==="GET"&&u){let d=Et(t,a,s);if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let p=o.searchParams.get("workspace_root")?.trim()??"";if(!p)throw new Error("workspace_root_required");if(u.action==="local-status"){await Kd(e,r,d.userId,u.workspaceId,p,c);return}if(u.action==="agents-status"){await me(r,d.userId,p,u.workspaceId);let h=await Ct(r,d.userId,u.workspaceId,p);T(e,200,{ok:!0,statuses:h,ai_clients:h},c);return}if(u.action==="fs-read"){await me(r,d.userId,p,u.workspaceId);let h=await xo(p,o.searchParams.get("dir")??"/");T(e,200,{ok:!0,entries:h},c);return}}catch(p){T(e,400,{ok:false,error:p instanceof Error?p.message:String(p)},c);return}}if(t.method==="POST"&&u){let d=Et(t,a,s),p=yt({headers:t.headers,allowedOrigins:l});if(p){T(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await en(t),f=Ke(h,"workspace_root");if(u.action==="local-status"){await Kd(e,r,d.userId,u.workspaceId,f,c);return}if(u.action==="attach"){await Wo(r,d.userId);let m=await Re(u.workspaceId,f,r);T(e,200,{ok:!0,...m},c);return}if(u.action==="sync"){await me(r,d.userId,f,u.workspaceId);let m=await Zr(r,u.workspaceId,f);T(e,m.ok?200:409,m,c);return}if(u.action==="repair"){await me(r,d.userId,f,u.workspaceId);let m=await Qr(r,f);T(e,m.ok?200:409,m,c);return}if(u.action==="agents-status"){await me(r,d.userId,f,u.workspaceId);let m=await Ct(r,d.userId,u.workspaceId,f);T(e,200,{ok:!0,statuses:m,ai_clients:m},c);return}if(u.action==="agents-install"||u.action==="agents-uninstall"||u.action==="agents-set-enabled"){await me(r,d.userId,f,u.workspaceId);let m=u.action==="agents-set-enabled"?Sb(h,"enabled"):u.action==="agents-install",_=await Hd(r,d.userId,u.workspaceId,f,Ke(h,"client"),m,Cb(Gd(h,"disable_mode")));T(e,_.ok?200:409,_,c);return}if(u.action==="hooks-sync"||u.action==="hook-index-rebuild"){await me(r,d.userId,f,u.workspaceId);let{supabase:m}=await R(r),_=await gs({supabase:m,workspaceId:u.workspaceId,workspaceRoot:f,env:r});T(e,_.ok?200:409,_,c);return}if(u.action==="skills-materialize"){await me(r,d.userId,f,u.workspaceId);let m=await Zr(r,u.workspaceId,f,{skillsOnly:!0});T(e,m.ok?200:409,m,c);return}}catch(h){T(e,400,{ok:false,error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/unpair"){let d=yt({headers:t.headers,allowedOrigins:l});if(d){T(e,d.statusCode,{ok:false,error:d.reason},c);return}let p=Ss(t.headers,is),h=Et(t,a,s);if(!p||!h){T(e,401,{ok:false,error:"pair_token_invalid"},c);return}s.delete(p),await vs(r,Vd("bridge_unpaired",{origin:a??"",userId:h.userId,browserProfileId:h.browserProfileId})),T(e,200,{ok:true},c);return}T(e,404,{ok:false,error:"not_found"},c);}function Et(t,e,r){let n=Ss(t.headers,is);if(!n||!e)return null;let s=r.get(n);return !s||s.origin!==e||s.browserProfileId!==Ss(t.headers,Ru)?null:s}async function me(t,e,r,n){await Wo(t,e);let{session:s,supabase:i}=await R(t),o=i.from("user_workspace_paths").select("workspace_id").eq("user_id",e).eq("local_root_path",r).limit(1);n&&(o=o.eq("workspace_id",n));let{data:a,error:l}=await o;if(l)throw l;if(!a||a.length===0)throw new Error("workspace_root_not_attached")}async function Wo(t,e){let{session:r}=await R(t);if(r.user.id!==e)throw new Error("session_user_mismatch")}function wb(t){let e=/^\/v1\/workspaces\/([^/]+)\/(.+)$/.exec(t);if(!e)return null;let r=decodeURIComponent(e[1]??""),n=e[2]??"";return r?n==="local-status"?{workspaceId:r,action:"local-status"}:n==="fs"?{workspaceId:r,action:"fs-read"}:n==="attach"?{workspaceId:r,action:"attach"}:n==="sync"?{workspaceId:r,action:"sync"}:n==="repair"?{workspaceId:r,action:"repair"}:n==="agents/status"?{workspaceId:r,action:"agents-status"}:n==="agents/install"?{workspaceId:r,action:"agents-install"}:n==="agents/uninstall"?{workspaceId:r,action:"agents-uninstall"}:n==="agents/set-enabled"?{workspaceId:r,action:"agents-set-enabled"}:n==="hooks/sync"?{workspaceId:r,action:"hooks-sync"}:n==="hook-index/rebuild"?{workspaceId:r,action:"hook-index-rebuild"}:n==="skills/materialize"?{workspaceId:r,action:"skills-materialize"}:null:null}async function Kd(t,e,r,n,s,i){await me(e,r,s,n);let o=await Ho(s),a=o?await tp(s):false,l=await rp(e),c=await Ct(e,r,n,s);T(t,200,{ok:true,workspace_id:n,local_root_path:s,root_exists:o,root_is_directory:a,desktop_runtime_detected:l,local_runtime_state:o?a?l?"cli_attached_desktop_also_detected":"cli_attached":"root_not_directory":"root_missing",ai_clients:c},i);}async function Ho(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function tp(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function yb(t,e){let r=A(t).daemonFile;await mkdir(dirname(r),{recursive:true,mode:D});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function vs(t,e){let r=A(t).logsDir;await mkdir(r,{recursive:true,mode:D});let n=new Date().toISOString().slice(0,10),s=`${new Date().toISOString()} ${kb(e)}
182
+ `;await writeFile(join(r,`daemon-${n}.log`),s,{flag:"a",encoding:"utf8",mode:O});}function kb(t){return t.replace(/(authorization|token|secret|password)=\S+/gi,"$1=[redacted]")}function Vd(t,e){let r=createHash("sha256").update("pathrule-bridge-profile-v1","utf8").update("\0","utf8").update(e.browserProfileId,"utf8").digest("base64url").slice(0,16);return `${t} origin=${e.origin||"unknown"} user_id=${e.userId} browser_profile_hash=${r}`}async function rp(t,e=Date.now()){let r=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(r==="healthy"||r==="1"||r==="true")return true;if(r==="unhealthy"||r==="0"||r==="false")return false;let n;try{n=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(n.healthy!==true||!n.updated_at)return false;let s=Date.parse(n.updated_at);return Number.isFinite(s)&&e-s<=600*1e3}function bb(){let t=process.env.PATHRULE_BRIDGE_ORIGINS;return t?t.split(",").map(e=>e.trim()).filter(Boolean):["https://app.pathrule.io","http://localhost:5173"]}function Ss(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}function vb(t){return t.socket.remoteAddress??"unknown"}async function en(t,e=4096){let r="";for await(let s of t)if(r+=s,Buffer.byteLength(r,"utf8")>e)throw new Error("request_body_too_large");let n=JSON.parse(r||"{}");if(!n||typeof n!="object"||Array.isArray(n))throw new Error("invalid_json_body");return n}function Ke(t,e){let r=t[e];if(typeof r!="string"||r.trim()==="")throw new ee(`${e}_required`);return r.trim()}function Gd(t,e){let r=t[e];return typeof r!="string"||r.trim()===""?null:r.trim()}function Sb(t,e){let r=t[e];if(typeof r!="boolean")throw new ee(`${e}_required`);return r}function Cb(t){return t==="full-remove"?"full-remove":"restore-backup"}function T(t,e,r,n){t.writeHead(e,{"content-type":"application/json",...n}),t.end(JSON.stringify(r));}function Eb(t){if(!Number.isInteger(t)||t<=0)return false;try{return process.kill(t,0),!0}catch{return false}}function Rb(t){return new Promise(e=>setTimeout(e,t))}q();function y(t){return {schema_version:1,ok:t.ok,command:t.command,cwd:t.cwd,...t.data===void 0?{}:{data:t.data},...t.error===void 0?{}:{error:t.error},...t.next_steps===void 0?{}:{next_steps:t.next_steps}}}function np(t){return `${JSON.stringify(t,null,2)}
183
+ `}function g(t,e){let r={ok:"[ok]",warn:"[warn]",error:"[error]",info:"[info]"};return e.color?`${{ok:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",info:"\x1B[36m"}[t]}${r[t]}\x1B[0m`:r[t]}Ce();var Pb=/^[^\s@]+@[^\s@]+\.[^\s@]+$/i,xe=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliInviteUsageError";}code};function qo(t){let e=[],r="editor",n,s;for(let o=0;o<t.length;o+=1){let a=t[o];if(a){if(a==="--role"){r=Lb(t[++o]);continue}if(a==="--org"){n=sp(t[++o],"--org requires a value","invite_org_required");continue}if(a==="--workspace"){s=sp(t[++o],"--workspace requires a value","invite_workspace_required");continue}if(a.startsWith("--"))throw new xe("unknown_invite_option",`Unknown invite option "${a}".`);e.push(a);}}let i=e[0];if(!i)throw new xe("invite_email_required","Usage: pathrule invite <email> [--role admin|editor|viewer] [--org <slug-or-id>] [--workspace <name-or-id>]");if(e.length>1)throw new xe("unexpected_invite_argument",`Unexpected extra argument "${e[1]}".`);return {email:i,role:r,orgSelector:n,workspaceSelector:s}}async function zo(t,e){let r=t.email.trim().toLowerCase();if(!Pb.test(r))return xt("invalid_email",null,null,e,r);let{session:n,supabase:s}=await R(e),i=await Tb(t.orgSelector,e);if(!i)return xt("org_required",null,null,e,r);if(i.role!=="admin"&&i.role!=="owner")return xt("forbidden",i,null,e,r);let o=await Ab(s,n.user.id,i.id,t.workspaceSelector,e);if(!o&&t.workspaceSelector)return xt("workspace_not_found",i,null,e,r);let a=await Mb(s,i.id);if(a.failure)return xt(a.failure.error,i,o,e,r,a.failure.details);let l=await jb(s,i.id,a,e);if(!l.ok)return xt(l.error,i,o,e,r,l.details);let{data:c,error:u}=await s.rpc("create_org_invite",{p_org_id:i.id,p_email:r,p_role:t.role}),d=c,p=d&&d.ok===false?d.error:void 0;if(u||!d||d.ok!==true)return xt(u?.message??p??"invite_failed",i,o,e,r);let h=true;try{let{error:m}=await s.functions.invoke("send-org-invite-email",{body:{invite_id:d.invite_id}});m&&(h=!1);}catch{h=false;}let f={kind:"web",url:Q(i,e,"members"),label:"Open team in Pathrule Web",reason:"preferred"};return {ok:true,invite_id:d.invite_id,email:d.email,role:d.role,email_sent:h,billing_impact:a.billingImpact,billing_adjustment:l.adjustment,organization:ip(i),workspace:op(o),open_target:f,next_steps:[{label:"Open team in Pathrule Web",url:f.url},...h?[]:[{label:"Retry invite email from Pathrule Web",url:f.url}]]}}function ip(t){return t?{id:t.id,name:t.name,slug:t.slug,role:t.role}:null}function op(t){return t?{id:t.id,name:t.name}:null}async function Tb(t,e){return t?(await ge(e)).find(n=>n.id===t||n.slug===t)??null:j(e)}async function Ab(t,e,r,n,s){if(!n){let a=await M(s);return a?.organization_id===r?a:null}let{data:i,error:o}=await t.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",r).is("archived_at",null);if(o)throw o;for(let a of i??[]){let c=(a.user_workspace_paths??[]).find(d=>d.user_id===e)??null,u={id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,git_remote_url:a.git_remote_url,git_owner:a.git_owner,git_repo:a.git_repo,local_root_path:c?.local_root_path??null,current:false};if(u.id===n||u.name===n)return u}return null}function xt(t,e,r,n,s,i){let o=Ib(t,e,n),a=Ob(t,s);return {ok:false,error:t,message:Nb(t),...a?{email_hash:a}:{},organization:ip(e),workspace:op(r),open_target:o,next_steps:$b(t,o),...i}}function Ib(t,e,r){if(e){if(t==="free_plan_invites_disabled"||t==="invite_blocked_billing"||t==="billing_update_failed")return {kind:"web",url:Q(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="subscription_not_invitable"||t==="subscription_frozen")return {kind:"web",url:`${Q(e,r,"billing")}/reactivate`,label:"Open billing reactivation in Pathrule Web",reason:"fallback"};if(t==="paid_seats_required"||t==="seat_limit_reached")return {kind:"web",url:Q(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="forbidden"||t==="permission_denied"||t==="already_member"||t==="email_already_member"||t==="invite_pending")return {kind:"web",url:Q(e,r,"members"),label:"Open team in Pathrule Web",reason:"fallback"}}}function Ob(t,e){if(e&&!(t!=="rate_limited"&&t!=="invite_resent_cooldown_hit"&&t!=="invite_declined_cooldown"))return createHash("sha256").update(e.trim().toLowerCase()).digest("hex")}function $b(t,e){if(t==="not_authenticated"||t==="session_expired_security_epoch")return [{label:"Sign in again",command:"pathrule login"}];if(t==="org_required")return [{label:"Choose an organization",command:"pathrule org use <slug-or-id>"}];if(t==="workspace_not_found")return [{label:"List workspaces",command:"pathrule workspace list"}];if(t==="rate_limited"||t==="invite_resent_cooldown_hit"||t==="invite_declined_cooldown")return [{label:"Retry later"}];if(e)return [{label:e.label,url:e.url}]}function Nb(t){switch(t){case "invalid_email":return "Enter a valid email address.";case "invalid_role":return "Role must be admin, editor, or viewer.";case "not_authenticated":return "Pathrule CLI is not signed in.";case "session_expired_security_epoch":return "Your session is stale after a security change. Sign in again.";case "org_required":return "No organization is selected.";case "workspace_not_found":return "Workspace context not found for that organization.";case "forbidden":case "permission_denied":return "Your current role cannot invite teammates to this organization.";case "free_plan_invites_disabled":return "Invites require a paid Pathrule organization plan.";case "subscription_not_invitable":case "subscription_frozen":return "Invites are blocked until billing is reactivated.";case "paid_seats_required":case "seat_limit_reached":return "Pathrule could not automatically add paid seat coverage for this invite.";case "billing_update_failed":return "Billing could not be updated for this invite. Review billing before sending it.";case "rate_limited":return "Rate limit reached, try again later.";case "invite_resent_cooldown_hit":case "invite_declined_cooldown":return "Please wait before inviting this email again.";case "already_member":case "email_already_member":return "That email is already a member of this organization.";case "invite_pending":return "There is already a pending invite for this email.";case "organization_not_found":return "Organization not found.";default:return t.replace(/_/g," ")}}async function jb(t,e,r,n){if(!r.billingRequirement)return {ok:true,adjustment:{status:r.billingImpact.seat_effect==="paid_extra_available"?"already_covered":"not_needed",target_seats:r.billingImpact.target_active_seats,required_paid_extra_seats:r.billingImpact.required_paid_extra_seats,paid_extra_seats_after:r.billingImpact.current_paid_extra_seats}};let s=r.billingRequirement,i={target_seats:s.targetSeats,required_paid_extra_seats:s.requiredPaidExtraSeats,gift_seat_cap:s.giftSeatCap,current_paid_extra_seats:s.currentPaidExtraSeats},o=null;try{let{data:a,error:l}=await t.functions.invoke("start-paid-seat-checkout",{body:{org_id:e,target_seats:s.targetSeats,return_url_origin:Db(n)}});if(l)return {ok:!1,error:"billing_update_failed",details:i};o=a;}catch{return {ok:false,error:"billing_update_failed",details:i}}return o?.ok?o.url?{ok:false,error:"paid_seats_required",details:i}:{ok:true,adjustment:{status:o.updated?"updated":"already_covered",target_seats:s.targetSeats,required_paid_extra_seats:s.requiredPaidExtraSeats,paid_extra_seats_after:o.paid_extra_seats}}:{ok:false,error:o?.error??"billing_update_failed",details:i}}function Db(t){return (t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}function Lb(t){let e=t?.trim().toLowerCase();if(!e||e==="member")return "editor";if(e==="admin"||e==="editor"||e==="viewer")return e;throw new xe("invalid_invite_role",`Invalid invite role "${t}".`)}function sp(t,e,r){if(!t)throw new xe(r,e);return t}async function Mb(t,e){let[r,n]=await Promise.all([t.from("organizations").select("plan, subscription_status, trial_status, trial_seat_cap, paid_extra_seats").eq("id",e).maybeSingle(),t.from("organization_members").select("id",{count:"exact",head:true}).eq("organization_id",e)]);if(r.error)throw r.error;if(n.error)throw n.error;let s=ol(r.data,n.count??0);return {failure:s.failure?{error:s.failure.error}:null,billingImpact:s.billingImpact,billingRequirement:s.billingRequirement}}Ce();q();var Pt=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliRefreshError";}code};async function an(t,e={}){let r=await Ps(t),n=await Yo(t,r.id),s=await Na(n,{workspace_id:r.id,include_in_progress:e.includeInProgress});if(!s.ok)throw Xo(s.error);return s.data.slice(0,Bb(e.limit)).map(i=>ap(i,r.id,t))}async function Jo(t,e,r={}){let n=await Ps(t),s=e??await Wb(t),i=await Yo(t,n.id),o=await ja(i,{refresh_id:s,claimed_by:r.claimedBy??"codex"});if(!o.ok)throw Xo(o.error);return lp(o.data,t)}async function Ko(t,e,r,n={}){await Ps(t);let s=await Yo(t),i=await Da(s,{refresh_id:e,status:r,note:n.note,claimed_by:n.claimedBy??"codex"});if(!i.ok)throw Xo(i.error);return lp(i.data,t)}async function Vo(t,e){let r=await Ps(t);if(!e){let l=(await an(t,{includeInProgress:true,limit:1}))[0];if(!l)throw new Pt("refresh_not_found","No pending refresh tasks found.");return l}let{supabase:n}=await R(t),{data:s,error:i}=await n.from("suggestion_refreshes").select("id, workspace_id, subject_type, subject_id, formula_id, status, created_at, brief").eq("id",e).eq("workspace_id",r.id).maybeSingle();if(i)throw i;if(!s)throw new Pt("refresh_not_found",`Refresh ${e} not found.`);let o=s,a=o.brief??{};return ap({id:o.id,subjectType:o.subject_type,subjectId:o.subject_id,subjectTitle:a.subject?.title??"(unknown)",nodePath:a.subject?.nodePath??"/",formulaId:o.formula_id,humanReason:a.signal?.humanReason??o.formula_id,status:o.status,createdAt:o.created_at,hasProposedPatch:!!a.proposedPatch?.newBody},r.id,t)}function xs(t,e={}){let r=t.open_targets.find(n=>n.kind==="web")??{kind:"web",url:t.url,label:"Open refresh task in Pathrule Web",reason:"preferred"};if(e.forceWeb)return {...r,reason:"forced"};if(e.preferDesktopApp){let n=t.open_targets.find(s=>s.kind==="desktop-app");return n||{...r,reason:"fallback"}}return t.open_targets[0]??r}function Go(t,e,r){return `${(r.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}?tab=suggestions&refresh=${encodeURIComponent(e)}`}function Ub(t,e){return `pathrule://workspace/${encodeURIComponent(t)}/refresh/${encodeURIComponent(e)}`}async function Wb(t){let e=(await an(t,{limit:1}))[0];if(!e)throw new Pt("refresh_not_found","No pending refresh tasks found.");return e.id}async function Ps(t){let e=await M(t);if(!e)throw new Pt("workspace_required","No current workspace. Run pathrule workspace use <name-or-id>.");return e}async function Yo(t,e=null){let{session:r,supabase:n}=await R(t);return {supabase:n,userId:r.user.id,workspaceId:e,clientId:"codex"}}function ap(t,e,r){let n=Go(e,t.id,r);return {...t,workspace_id:e,url:n,open_targets:[cp(e,t.id,r),up(e,t.id)]}}function lp(t,e){return {...t,url:Go(t.workspaceId,t.id,e),open_targets:[cp(t.workspaceId,t.id,e),up(t.workspaceId,t.id)]}}function cp(t,e,r){return {kind:"web",url:Go(t,e,r),label:"Open refresh task in Pathrule Web",reason:"preferred"}}function up(t,e){return {kind:"desktop-app",url:Ub(t,e),label:"Open refresh task in Pathrule Desktop",reason:"fallback"}}function Bb(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}function Xo(t){return new Pt(t.code,t.message)}V();V();Qn();q();async function hp(t,e,r=fetch){if(!e.gitRemoteUrl)return {status:"skipped",error:"missing_git_remote"};try{let{session:n,supabase:s}=await R(t),{data:i,error:o}=await s.from("beta_platform_invites").select("id").eq("claimed_user_id",n.user.id).eq("status","claimed").order("claimed_at",{ascending:!1}).limit(1);if(o)return {status:"skipped",error:"invite_lookup_unavailable"};let a=(i??[])[0]??null;if(!a)return {status:"skipped",error:"no_claimed_beta_invite"};let l=Gt(t),c=await Gb(t),u=await r(`${l.supabaseUrl}/functions/v1/process-beta-activation`,{method:"POST",headers:{"content-type":"application/json",apikey:l.supabaseAnonKey,Authorization:`Bearer ${n.access_token}`},body:JSON.stringify({invite_id:a.id,workspace_id:e.workspaceId,git_remote_url:e.gitRemoteUrl,machine_id:c,runtime_source:e.runtimeSource})}),d=await u.json().catch(()=>null);return !u.ok||!d?.status?{status:"skipped",error:"activation_unavailable"}:{status:d.status,credit_cents:pp(d.credit_cents),founder_bonus_cents:pp(d.founder_bonus_cents)}}catch{return {status:"skipped",error:"activation_unavailable"}}}async function Gb(t){let e=join(A(t).home,"machine-install.json");try{let n=JSON.parse(await readFile(e,"utf8"));if(typeof n.machine_id=="string"&&n.machine_id.length>=16)return n.machine_id}catch{}let r=`cli_${randomUUID()}`;return await Yb(e,{schema_version:1,machine_id:r}),r}async function Yb(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:D}),await chmod(r,D).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}function pp(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}Ce();var tv=promisify(execFile);async function Zo(t,e){let r=await j(e);if(!r)return {cwd:t,organization:null,candidates:[],recommended_action:"select_org"};let[n,s,i]=await Promise.all([Ee(e),kp(t),ov(t,e)]),o=sv(t,r,n,s,i);return {cwd:t,organization:r,candidates:o,recommended_action:o.length===0?"create_workspace":o[0]?.confidence==="exact"||o[0]?.confidence==="high"?"attach_existing":"choose_workspace"}}async function sr(t,e,r,n={yes:false}){let s=nv(t);if(!s.shouldApply)return {plan:await Zo(e,r),applied:false,org_selected:null,workspace_action:"none",workspace:null,install:null,sync:null,beta_activation:null};if(!n.yes)throw new Error("setup_requires_yes");let i=null;if(s.org){let{useCliOrg:p}=await Promise.resolve().then(()=>(Ce(),gu));i=(await p(s.org,r)).id;}let o=await Zo(e,r),a="none",l=null;if(s.createWorkspace){let p=await ie("create_workspace",r);if(!p.allowed)throw new Error(p.blocking_reason??"preflight_blocked");l=await _t(s.workspaceName??basename(e),e,r),a="created";}else s.workspaceSelector?(l=await Re(s.workspaceSelector,e,r),a="attached"):o.recommended_action==="attach_existing"&&o.candidates[0]?(l=await Re(o.candidates[0].workspace_id,e,r),a="attached"):s.selectCurrentWorkspace&&(l=await Hr(s.selectCurrentWorkspace,r),a="selected");o=await Zo(e,r);let c=s.target?await Je(s.target,r):null,u=a==="attached"||a==="created"?await Ne(r,e):null,d=u?.ok&&(a==="attached"||a==="created")?await hp(r,{workspaceId:rv(l),gitRemoteUrl:await kp(e),runtimeSource:"cli"}):null;return {plan:o,applied:true,org_selected:i,workspace_action:a,workspace:l,install:c,sync:u,beta_activation:d}}function rv(t){if(!t||typeof t!="object")return null;let e=t.id;if(typeof e=="string")return e;let r=t.workspace?.id;return typeof r=="string"?r:null}function nv(t){let e={org:null,workspaceSelector:null,workspaceName:null,createWorkspace:false,selectCurrentWorkspace:null,target:null};for(let r=0;r<t.length;r+=1){let n=t[r],s=()=>{let i=t[r+1];if(!i||i.startsWith("--"))throw new Error(`missing_value:${n}`);return r+=1,i};if(n==="--org")e.org=s();else if(n==="--workspace"||n==="--workspace-id")e.workspaceSelector=s();else if(n==="--workspace-name")e.workspaceName=s();else if(n==="--create-workspace")e.createWorkspace=true;else if(n==="--select-workspace")e.selectCurrentWorkspace=s();else if(n==="--target")e.target=s();else throw new Error(`unknown_setup_option:${n}`)}return {...e,shouldApply:e.org!==null||e.workspaceSelector!==null||e.workspaceName!==null||e.createWorkspace||e.selectCurrentWorkspace!==null||e.target!==null}}function sv(t,e,r,n,s){let i=wp(basename(t)),o=[],a=new Set,l=c=>{a.has(c.workspace_id)||(a.add(c.workspace_id),o.push(c));};for(let c of r){if(c.local_root_path===t){l(ln("cwd_mapping",c,e,"exact",false,"Exact local path mapping."));continue}if(n&&iv(c,n)){l(ln("git_remote",c,e,"high",true,"Git remote matches workspace metadata."));continue}if(s.has(c.id)){l(ln("hook_cache",c,e,"high",true,"Existing hook cache points at this folder."));continue}let u=wp(c.name);if(u===i){l(ln("name_match",c,e,"medium",true,"Folder name matches workspace name."));continue}av(u,i)&&l(ln("name_match",c,e,"low",true,"Folder name is similar to workspace name."));}return o.sort((c,u)=>{let d=mp(u.confidence)-mp(c.confidence);return d!==0?d:_p(u.source)-_p(c.source)}),o.map((c,u)=>({...c,recommended:u===0}))}function ln(t,e,r,n,s,i){return {source:t,workspace_id:e.id,workspace_name:e.name,org_id:r.id,org_name:r.name,org_slug:r.slug,confidence:n,recommended:false,requires_confirmation:s,reason:i}}function mp(t){return {exact:4,high:3,medium:2,low:1}[t]}function _p(t){return {cwd_mapping:6,git_remote:5,hook_cache:4,companion_file:3,name_match:2,manual:1}[t]}function iv(t,e){let r=t;return r.git_remote_url&&Qo(r.git_remote_url)===Qo(e)?true:!r.git_owner||!r.git_repo?false:Qo(e).endsWith(`/${r.git_owner}/${r.git_repo}`.toLocaleLowerCase("en-US"))}async function kp(t){try{let{stdout:e}=await tv("git",["config","--get","remote.origin.url"],{cwd:t,timeout:1e3});return e.trim()||null}catch{return null}}function Qo(t){return t.trim().replace(/^git@([^:]+):/,"https://$1/").replace(/^https?:\/\//,"").replace(/\.git$/,"").toLocaleLowerCase("en-US")}async function ov(t,e){let r=new Set,n=join(A(e).home,"cache"),s;try{s=await readdir(n);}catch{return r}let i=resolve(t);return await Promise.all(s.map(async o=>{try{let a=await readFile(join(n,o,"hook-index.json"),"utf8"),l=JSON.parse(a);if(!l.workspace_id||!l.workspace_root)return;let c=resolve(l.workspace_root);(i===c||i.startsWith(`${c}/`))&&r.add(l.workspace_id);}catch{}})),r}function wp(t){return t.toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/g," ").trim()}function av(t,e){return !t||!e?false:t.includes(e)||e.includes(t)?true:lv(t,e)<=Math.max(2,Math.floor(Math.max(t.length,e.length)*.25))}function lv(t,e){let r=Array.from({length:e.length+1},(n,s)=>s);for(let n=1;n<=t.length;n+=1){let s=n,i=n-1;for(let o=1;o<=e.length;o+=1){let a=r[o]??0,l=t[n-1]===e[o-1]?0:1;r[o]=Math.min(a+1,s+1,i+l),s=r[o]??0,i=a;}r[0]=n;}return r[e.length]??0}q();Ce();async function ea(t,e){let r=await cv(t,e);if(!r)throw new Error("org_required");let{supabase:n}=await R(t),[s,i,o]=await Promise.all([n.from("organization_members").select("id, user_id, role, joined_at").eq("organization_id",r.id).order("joined_at",{ascending:true}),n.rpc("get_org_member_profiles",{p_org_id:r.id}),n.from("organization_invites").select("id, email, role, status, created_at, expires_at").eq("organization_id",r.id).eq("status","pending").order("created_at",{ascending:false})]);if(s.error)throw s.error;if(i.error)throw i.error;if(o.error)throw o.error;let a=new Map,l=i.data??[];for(let d of l)a.set(d.user_id,d);let c=(s.data??[]).map(d=>{let p=a.get(d.user_id);return {id:d.id,user_id:d.user_id,role:d.role,joined_at:d.joined_at,email:p?.email??null,full_name:Qa(p?.full_name,"profile"),avatar_url:el(p?.avatar_url),last_sign_in_at:p?.last_sign_in_at??null}}),u=(o.data??[]).map(d=>({id:d.id,email:d.email,role:d.role,status:d.status,created_at:d.created_at,expires_at:d.expires_at}));return {organization:{id:r.id,name:r.name,slug:r.slug,role:r.role},members:c,invites:u,open_target:{kind:"web",url:Q(r,t,"members"),label:"Open team in Pathrule Web",reason:"preferred"}}}async function cv(t,e){return e?(await ge(t)).find(n=>n.id===e||n.slug===e)??null:j(t)}gt();Wr();async function Ts(t,e,r){let n=await mt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");let s=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/cli/versions.json`,i=e.PATHRULE_PROTOCOL_VERSION??Ka;if(n.value==="manual")return {checked:false,policy:n.value,current_version:t,current_protocol_version:i,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"manual_policy",url:s};try{let o=await r(s,{headers:{"user-agent":`pathrule-cli/${t}`}});if(!o.ok)throw new Error(`http_${o.status}`);let a=await o.json(),l=a.latest_version??a.latest??null,c=a.min_supported_protocol_version??null;return {checked:!0,policy:n.value,current_version:t,current_protocol_version:i,latest_version:l,min_supported_protocol_version:c,protocol_compatible:dv(i,c),update_available:l?l!==t:!1,upgrade_command:a.upgrade_command??uv(a.channels),url:s}}catch{return {checked:false,policy:n.value,current_version:t,current_protocol_version:i,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"request_failed",url:s}}}async function vp(t,e,r){let n=await mt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");if(n.value==="manual")return null;let s=await Se(e).catch(()=>null);if(!s)return null;let i=await he(s.session.user.id,e);if(i.last_update_check_at){let l=new Date(i.last_update_check_at).getTime();if(Number.isFinite(l)&&Date.now()-l<1440*60*1e3)return null}await fe(s.session.user.id,{last_update_check_at:new Date().toISOString()},e);let o=await Ts(t,e,r);if(!o.checked||!o.update_available)return null;let a=o.upgrade_command?` Run: ${o.upgrade_command}`:"";return `Pathrule CLI ${o.latest_version} is available.${a}`}function uv(t){return t?t.brew??t.npm??t.standalone??null:null}function dv(t,e){if(!e)return true;let r=bp(t),n=bp(e);return r&&n?pv(r,n)>=0:t===e}function bp(t){let e=t.match(/^v?(\d+)\.(\d+)\.(\d+)$/);return e?[Number(e[1]),Number(e[2]),Number(e[3])]:null}function pv(t,e){for(let r=0;r<3;r+=1){let n=(t[r]??0)-(e[r]??0);if(n!==0)return n}return 0}q();Ce();async function ta(t){let{session:e,supabase:r}=await R(t.env),[n,s]=await Promise.all([j(t.env),M(t.env)]);if(!n)throw new Error("org_required");if(!s)throw new Error("workspace_required");let i=hv(n.plan),[o,a,l,c,u,d,p,h]=await Promise.all([fv(r,s.id),cn(r.from("nodes").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),cn(r.from("memories").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),cn(r.from("rules").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),cn(r.from("skills").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),cn(r.from("workspaces").select("id",{count:"exact",head:true}).eq("organization_id",n.id).is("archived_at",null)),gv(r,s.id),Ct(t.env,e.user.id,s.id,s.local_root_path)]);return {organization:{id:n.id,name:n.name,slug:n.slug,plan:i,role:n.role,subscription_status:n.subscription_status,trial_status:n.trial_status},workspace:s,local_status:{current_folder:t.cwd,attached_root:s.local_root_path,current_folder_attached:s.local_root_path===t.cwd,attached_elsewhere:s.local_root_path!==null&&s.local_root_path!==t.cwd},cloud_tree:{root_node_present:o,nodes:a,memories:l,rules:c,skills:u},capacity:{plan:i,workspaces:{used:d,limit:Ue[i].workspaces},memories:{used:l,limit:Ue[i].memories},rules:{used:c,limit:Ue[i].rules}},active_clients:h.map(f=>_v(f)),recent_activity:p}}function hv(t){return Object.hasOwn(Ue,t)?t:"free"}async function fv(t,e){let{data:r,error:n}=await t.from("nodes").select("id").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(n)throw n;return !!r?.id}async function cn(t){let{count:e,error:r}=await t;if(r)throw new Error(r.message);return e??0}async function gv(t,e){let{data:r,error:n}=await t.from("activity_logs").select("created_at, domain, action, scope, node_path, task_summary, files_touched").eq("workspace_id",e).eq("status","active").order("created_at",{ascending:false}).limit(5);if(n)throw n;return (r??[]).map(s=>({created_at:String(s.created_at),domain:String(s.domain??"unknown"),action:String(s.action??"unknown"),scope:String(s.scope??"project"),node_path:String(s.node_path??"/"),task_summary:String(s.task_summary??""),files_touched_total:mv(s.files_touched)}))}function mv(t){if(!t||typeof t!="object")return 0;let e=t.total;return typeof e=="number"&&Number.isFinite(e)?e:0}function _v(t){let e=t.client;return {client:e,label:U[e]?.label??e,active:t.active,selected:t.selected,detected:t.markers.includes("workspace_marker_detected"),machine_installed:t.machineInstalled,machine_config_exists:t.machineConfigExists,machine_config_path:t.machineConfigPath}}var Tv=createRequire(import.meta.url),De=Tv("../package.json"),Os=promisify(execFile),Y=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliContentUsageError";}code},Av=`${F.cli}
184
184
 
185
185
  Usage:
186
186
  pathrule <command> [options]
@@ -241,7 +241,7 @@ Options:
241
241
  --browser-callback
242
242
  Use the localhost OAuth callback login fallback
243
243
  --no-color Disable colored output
244
- `,ca=["surfaces","web","desktop","cli"],aa="Set up Pathrule for this project.";function Tv(t){return ca.includes(t)}function Av(t){return t==="surfaces"?`${F.cli} surfaces
244
+ `,ca=["surfaces","web","desktop","cli"],aa="Set up Pathrule for this project.";function Iv(t){return ca.includes(t)}function Ov(t){return t==="surfaces"?`${F.cli} surfaces
245
245
 
246
246
  ${F.web}
247
247
  ${Ze.web}
@@ -303,13 +303,13 @@ Useful commands:
303
303
  pathrule install codex
304
304
  pathrule sync
305
305
  pathrule bridge pair
306
- `}function $p(t){return t?Tv(t)?{ok:true,text:Av(t),topic:t}:{ok:false,message:`Unknown help topic "${t}". Try: ${ca.join(", ")}.`}:{ok:true,text:Pv,topic:null}}async function Np(t,e){let r=Date.now(),n=tu(t,e.env),s={json:n.flags.json,color:n.flags.color,interactive:n.flags.interactive,noOpen:n.flags.noOpen},i=n.flags.version?"version":n.flags.help?"help":n.command;if(s.json){let a=await Iv(i,e,n.positional.slice(1),n.flags);return e.stdout.write(np(a.envelope)),await zi(e.env,{command:i,exitCode:a.exitCode,appVersion:De.version,durationMs:Date.now()-r}),a.exitCode}let o;switch(i){case "help":{let a=$p(n.positional[1]);if(!a.ok){e.stderr.write(`${g("error",s)} ${a.message}
306
+ `}function $p(t){return t?Iv(t)?{ok:true,text:Ov(t),topic:t}:{ok:false,message:`Unknown help topic "${t}". Try: ${ca.join(", ")}.`}:{ok:true,text:Av,topic:null}}async function Np(t,e){let r=Date.now(),n=tu(t,e.env),s={json:n.flags.json,color:n.flags.color,interactive:n.flags.interactive,noOpen:n.flags.noOpen},i=n.flags.version?"version":n.flags.help?"help":n.command;if(s.json){let a=await $v(i,e,n.positional.slice(1),n.flags);return e.stdout.write(np(a.envelope)),await zi(e.env,{command:i,exitCode:a.exitCode,appVersion:De.version,durationMs:Date.now()-r}),a.exitCode}let o;switch(i){case "help":{let a=$p(n.positional[1]);if(!a.ok){e.stderr.write(`${g("error",s)} ${a.message}
307
307
  `),o=64;break}e.stdout.write(a.text),o=0;break}case "version":e.stdout.write(`${De.version}
308
- `),o=0;break;case "start":o=await PS(e,s);break;case "login":o=await Yp(e,s,n.flags.browserCallback);break;case "org":o=await aC(n.positional[1]??"list",n.positional.slice(2),e,s);break;case "workspace":o=await Qv(n.positional[1]??"list",n.positional.slice(2),e,s);break;case "init":o=await eS(n.positional[1],e,s);break;case "setup":o=await tS(e,s,n.positional.slice(1),n.flags.yes);break;case "attach":o=await yS(n.positional[1],e,s);break;case "detach":o=await kS(n.positional[1],e,s);break;case "preflight":o=await bS(n.positional[1],e,s);break;case "install":o=await vS(n.positional[1],e,s);break;case "uninstall":o=await SS(n.positional[1],e,s);break;case "sync":o=await CS(n.positional.slice(1),e,s);break;case "config":o=await ES(n.positional[1],n.positional[2],n.positional[3],e,s);break;case "update":o=await RS(e,s);break;case "daemon":o=await TS(n.positional.slice(1),e,s);break;case "bridge":o=await IS(n.positional[1]??"pair",e,s);break;case "open":o=await Lp(n.positional.slice(1),e,s);break;case "search":o=await GS(n.positional.slice(1),e,s);break;case "memory":case "rule":case "skill":o=await VS(i,n.positional.slice(1),e,s);break;case "refresh":o=await YS(n.positional.slice(1),e,s);break;case "repair":o=await XS(e,s);break;case "cache":o=await ZS(n.positional.slice(1),e,s,n.flags.yes);break;case "billing":case "team":case "invite":case "upgrade":case "reactivate":o=i==="invite"?await MS(n.positional.slice(1),e,s):i==="team"?await WS(n.positional.slice(1),e,s):await US(i,n.positional.slice(1),e,s);break;case "status":o=await jS(e,s);break;case "doctor":o=await NS(n.positional.slice(1),e,s);break;case "whoami":o=await LS(e,s);break;case "logout":o=await _C(e,s);break;default:e.stderr.write(`${g("error",s)} Unknown command "${i}". Run pathrule help.
309
- `),o=64;}return i!=="update"&&i!=="login"&&i!=="logout"&&await xS(e,s),await zi(e.env,{command:i,exitCode:o,appVersion:De.version,durationMs:Date.now()-r}),o}async function Iv(t,e,r,n={yes:false}){if(t==="version")return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{version:De.version}})};if(t==="help"){let s=$p(r[0]);return s.ok?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{topic:s.topic,topics:[...ca],text:s.text,commands:["help","version","start","login","status","doctor","whoami","logout","org","workspace","init","setup","attach","detach","preflight","install","uninstall","sync","config","update","daemon","bridge","open","search","memory","rule","skill","refresh","repair","cache","billing","team","invite","upgrade","reactivate"]}})}:{exitCode:64,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"invalid_help_topic",message:s.message}})}}if(t==="login")try{let s=await Bi({env:e.env,fetch:e.fetch??fetch,sleep:e.sleep??Xp});return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:!0,data:{user_id:s.session.user.id,email:s.session.user.email??null,expires_at:s.session.expires_at}})}}catch(s){let i=s instanceof be?s.code:"login_failed";return {exitCode:1,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:i,message:s instanceof Error?s.message:String(s)}})}}if(t==="daemon")return Gv(e,r);if(t==="bridge")return Yv(e,r[0]??"pair");if(t==="open")return Up(e,r);if(t==="search")return eC(e,r);if(t==="memory"||t==="rule"||t==="skill")return QS(t,e,r);if(t==="refresh")return tC(e,r);if(t==="repair")return rC(e);if(t==="cache")return nC(e,r,n.yes);if(t==="invite")return FS(e,r);if(t==="team")return HS(e,r);if(t==="billing"||t==="upgrade"||t==="reactivate")return BS(t,e,r);if(t==="whoami"){let s=await Se(e.env);return s?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{user_id:s.session.user.id,email:s.session.user.email??null,expires_at:s.session.expires_at,...await jv(e.env)}})}:{exitCode:1,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}if(t==="logout"){let s=await Hi(e.env);return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:s})}}return t==="org"?Xv(e,r[0]??"list",r.slice(1)):t==="workspace"?Uv(e,r[0]??"list",r.slice(1)):t==="init"?Mv(e,r[0]):t==="setup"?Wv(e,r,n.yes):t==="attach"?Bv(e,r[0]):t==="detach"?Fv(e,r[0]):t==="preflight"?Hv(e,r[0]):t==="install"?qv(e,r[0]):t==="uninstall"?zv(e,r[0]):t==="sync"?Jv(e,r):t==="config"?Kv(e,r[0],r[1],r[2]):t==="update"?Vv(e):t==="status"?Lv(e):t==="doctor"?Ov(e,r):t==="__scaffold"?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{status:"not_implemented",phase:"m31a_cli_foundation"},next_steps:Nv(t)})}:{exitCode:64,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"unknown_command",message:`Unknown command "${t}".`,remediation:[{label:"Show help",command:"pathrule help"}]}})}}async function Ov(t,e){try{if(e.includes("--bundle")){let n=await Eo(t.env,t.cwd);return {exitCode:n.ok?0:1,envelope:y({command:"doctor --bundle",cwd:t.cwd,ok:n.ok,data:{path:n.path,report:n.report}})}}let r=await $e(t.env,t.cwd);return await $v(t.env,r.managed_files),{exitCode:r.ok?0:1,envelope:y({command:"doctor",cwd:t.cwd,ok:r.ok,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"doctor",cwd:t.cwd,ok:false,error:{code:K(r,"doctor_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function $v(t,e){e.some(r=>r.status==="other_owner"||r.status==="newer_version")&&(await Br(t,{eventName:"managed_file_owner_conflict",result:"blocked",appVersion:De.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}),await Br(t,{eventName:"dead_end_seen",result:"blocked",appVersion:De.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}));}function Nv(t){if(t==="status"||t==="doctor"||t==="whoami")return [{label:"Continue M31a implementation",command:"pathrule login"}]}async function jv(t){try{let[e,r,n]=await Promise.all([fe(t),j(t),U(t)]);return {organizations:e,current_org:r,current_workspace:n}}catch(e){return {context_error:e instanceof Error?e.message:String(e)}}}async function Dv(t){let e=await U(t);if(!e)throw new Error("workspace_required");return e}async function Lv(t){try{let e=await jp(t);return {exitCode:e.authenticated?0:1,envelope:y({command:"status",cwd:t.cwd,ok:e.authenticated,data:e,error:e.authenticated?void 0:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}catch(e){return {exitCode:1,envelope:y({command:"status",cwd:t.cwd,ok:false,error:{code:K(e,"status_failed"),message:e instanceof Error?e.message:String(e)}})}}}async function Uv(t,e,r){try{if(e==="inspect"){let s=await ta(t);return {exitCode:0,envelope:y({command:"workspace inspect",cwd:t.cwd,ok:!0,data:s})}}if(e==="open"){let s=await ir(t);if(!s)throw new Error("workspace_required");let i=await Ns(s.id,t.env,{preferDesktopApp:r.includes("--desktop-app"),forceWeb:r.includes("--web")});return {exitCode:0,envelope:y({command:"workspace open",cwd:t.cwd,ok:!0,data:i})}}if(e==="create"){let s=await se("create_workspace",t.env);if(!s.allowed){let i=rr(s);return {exitCode:1,envelope:y({command:"workspace create",cwd:t.cwd,ok:!1,data:{preflight:s},error:{code:s.blocking_reason??"preflight_blocked",message:i.summary},next_steps:Ds(i)})}}}let n=e==="current"?await Dv(t.env):e==="use"?await Fr(r[0]??"",t.env):e==="create"?await _t(r[0]??"",t.cwd,t.env):e==="attach"?await Re(r[0],t.cwd,t.env):e==="detach"?await Hr(r[0],t.env):await Ee(t.env);return {exitCode:0,envelope:y({command:`workspace ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:y({command:`workspace ${e}`,cwd:t.cwd,ok:false,error:{code:K(n,"workspace_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function Mv(t,e){try{let r=await se("create_workspace",t.env);if(!r.allowed){let s=rr(r);return {exitCode:1,envelope:y({command:"init",cwd:t.cwd,ok:!1,data:{preflight:r},error:{code:r.blocking_reason??"preflight_blocked",message:s.summary},next_steps:Ds(s)})}}let n=await _t(e??Zp(t.cwd),t.cwd,t.env);return {exitCode:0,envelope:y({command:"init",cwd:t.cwd,ok:!0,data:n})}}catch(r){return {exitCode:1,envelope:y({command:"init",cwd:t.cwd,ok:false,error:{code:K(r,"init_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function Wv(t,e,r){try{let n=await sr(e,t.cwd,t.env,{yes:r});return {exitCode:0,envelope:y({command:"setup",cwd:t.cwd,ok:!0,data:n})}}catch(n){let s=K(n,"setup_failed");return {exitCode:s.startsWith("unknown_setup_option")||s.startsWith("missing_value")||s==="setup_requires_yes"?64:1,envelope:y({command:"setup",cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n)}})}}}async function Bv(t,e){try{let r=await Re(e,t.cwd,t.env);return {exitCode:0,envelope:y({command:"attach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"attach",cwd:t.cwd,ok:false,error:{code:K(r,"attach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function Fv(t,e){try{let r=await Hr(e,t.env);return {exitCode:0,envelope:y({command:"detach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"detach",cwd:t.cwd,ok:false,error:{code:K(r,"detach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function Hv(t,e){if(!e||!No(e))return {exitCode:64,envelope:y({command:"preflight",cwd:t.cwd,ok:false,error:{code:"invalid_preflight_action",message:"Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>"}})};try{let r=await se(e,t.env),n=r.allowed?null:rr(r);return {exitCode:r.allowed?0:1,envelope:y({command:`preflight ${e}`,cwd:t.cwd,ok:r.allowed,data:r,error:r.allowed?void 0:{code:r.blocking_reason??"preflight_blocked",message:n?.summary??"Preflight blocked."},next_steps:n?Ds(n):void 0})}}catch(r){return {exitCode:1,envelope:y({command:`preflight ${e}`,cwd:t.cwd,ok:false,error:{code:K(r,"preflight_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function qv(t,e){try{let r=await Je(e,t.env);return {exitCode:r.every(n=>n.ok)?0:1,envelope:y({command:"install",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:y({command:"install",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"install_failed",message:r instanceof Error?r.message:String(r)}})}}}async function zv(t,e){try{let r=await Lo(e);return {exitCode:r.every(n=>n.ok)?0:1,envelope:y({command:"uninstall",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:y({command:"uninstall",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"uninstall_failed",message:r instanceof Error?r.message:String(r)}})}}}async function Jv(t,e){try{let r=await Ne(t.env,t.cwd,{skillsOnly:e.includes("--skills")});return {exitCode:r.ok?0:1,envelope:y({command:"sync",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error??"sync_failed",message:r.error??"Pathrule sync failed."}})}}catch(r){return {exitCode:1,envelope:y({command:"sync",cwd:t.cwd,ok:false,error:{code:K(r,"sync_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function Kv(t,e,r,n){try{if(e==="get"&&r){let s=await mt(r,t.env);return {exitCode:0,envelope:y({command:`config get ${r}`,cwd:t.cwd,ok:!0,data:s})}}if(e==="set"&&r&&n){let s=await Yi(r,n,t.env);return {exitCode:0,envelope:y({command:`config set ${r}`,cwd:t.cwd,ok:!0,data:s})}}if(e==="reset"&&r){let s=await Xi(r,t.env);return {exitCode:0,envelope:y({command:`config reset ${r}`,cwd:t.cwd,ok:!0,data:s})}}return {exitCode:64,envelope:y({command:"config",cwd:t.cwd,ok:!1,error:{code:"invalid_config_command",message:"Usage: pathrule config get <update.policy|suggestions.desktop|telemetry.enabled|telemetry.id> OR pathrule config set update.policy manual|notify|auto OR pathrule config set suggestions.desktop true|false OR pathrule config set telemetry.enabled true|false OR pathrule config reset telemetry-id"}})}}catch(s){return {exitCode:s instanceof Error&&s.message.startsWith("invalid_")?64:1,envelope:y({command:"config",cwd:t.cwd,ok:false,error:{code:s instanceof Error?s.message:"config_failed",message:s instanceof Error?s.message:String(s)}})}}}async function Vv(t){let e=await Ts(De.version,t.env,t.fetch??fetch);return {exitCode:0,envelope:y({command:"update",cwd:t.cwd,ok:true,data:e})}}async function Gv(t,e){let r=e[0]??"status";try{if(r==="run")throw new Error("daemon_run_not_available_in_json_mode");if(r==="autostart"||r==="toggle"){let s=r==="toggle"?"toggle":e[1]??"status",i=await Rs(t.env),o=s==="status"?i:s==="on"||s==="enable"?await Ve(t.env,!0):s==="off"||s==="disable"?await Ve(t.env,!1):s==="toggle"?await Ve(t.env,!i.enabled):null;if(!o)throw new Error("invalid_daemon_command");return {exitCode:o.supported?0:1,envelope:y({command:r==="toggle"?"daemon toggle":`daemon autostart ${s}`,cwd:t.cwd,ok:o.supported,data:o,error:o.supported?void 0:{code:"daemon_autostart_unsupported",message:o.reason??"Daemon autostart is not supported on this platform."}})}}let n=r==="start"?await nn(ar(t.env)):r==="stop"?await sn(t.env):r==="status"?await je(t.env):null;if(!n)throw new Error("invalid_daemon_command");return {exitCode:0,envelope:y({command:`daemon ${r}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){let s=n instanceof Error?n.message:"daemon_failed";return {exitCode:s==="invalid_daemon_command"?64:1,envelope:y({command:`daemon ${r}`,cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n)}})}}}async function Yv(t,e){try{if(e!=="pair")throw new Error("invalid_bridge_command");let r=ar(t.env),n=await ss(r),s=(await ua(r)).status;if(!s.state?.daemon_session_id)throw new Error("daemon_session_missing");let i=await co({env:r,daemonSessionId:s.state.daemon_session_id,user:n,verifyReauth:!1});return {exitCode:0,envelope:y({command:"bridge pair",cwd:t.cwd,ok:!0,data:i})}}catch(r){let n=r instanceof Q||r instanceof Yt?r.code:r instanceof Error?r.message:"bridge_pair_failed";return {exitCode:n==="invalid_bridge_command"?64:1,envelope:y({command:`bridge ${e}`,cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function Xv(t,e,r){try{let n=e==="current"?await j(t.env):e==="use"?await ns(r[0]??"",t.env):e==="open"?await Zv(t,r[0]):await fe(t.env);return {exitCode:0,envelope:y({command:`org ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:y({command:`org ${e}`,cwd:t.cwd,ok:false,error:{code:K(n,"org_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function Zv(t,e){let r=await j(t.env);if(!r)throw new Error("org_required");let n=Jp(e);return {org_id:r.id,slug:r.slug,name:r.name,role:r.role,billing:r.billing,url:Z(r,t.env,n),opened:false}}async function jp(t){let e=await Se(t.env);if(!e)return {authenticated:false,user:null,organization:null,workspace:null,cwd_workspace_match:null};let r=await j(t.env),n=await U(t.env),s=await Ee(t.env),i=Wp(s,t.cwd),o=i??n;return {authenticated:true,user:{id:e.session.user.id,email:e.session.user.email??null,expires_at:e.session.expires_at},organization:r,workspace:o,selected_workspace:n,cwd_workspace_match:i}}async function Qv(t,e,r,n){try{if(t==="current"){let i=await U(r.env);return i?(r.stdout.write(`${g("ok",n)} ${i.name}
308
+ `),o=0;break;case "start":o=await AS(e,s);break;case "login":o=await Yp(e,s,n.flags.browserCallback);break;case "org":o=await cC(n.positional[1]??"list",n.positional.slice(2),e,s);break;case "workspace":o=await tS(n.positional[1]??"list",n.positional.slice(2),e,s);break;case "init":o=await rS(n.positional[1],e,s);break;case "setup":o=await nS(e,s,n.positional.slice(1),n.flags.yes);break;case "attach":o=await bS(n.positional[1],e,s);break;case "detach":o=await vS(n.positional[1],e,s);break;case "preflight":o=await SS(n.positional[1],e,s);break;case "install":o=await CS(n.positional[1],e,s);break;case "uninstall":o=await ES(n.positional[1],e,s);break;case "sync":o=await RS(n.positional.slice(1),e,s);break;case "config":o=await xS(n.positional[1],n.positional[2],n.positional[3],e,s);break;case "update":o=await PS(e,s);break;case "daemon":o=await IS(n.positional.slice(1),e,s);break;case "bridge":o=await $S(n.positional[1]??"pair",e,s);break;case "open":o=await Lp(n.positional.slice(1),e,s);break;case "search":o=await XS(n.positional.slice(1),e,s);break;case "memory":case "rule":case "skill":o=await YS(i,n.positional.slice(1),e,s);break;case "refresh":o=await ZS(n.positional.slice(1),e,s);break;case "repair":o=await QS(e,s);break;case "cache":o=await eC(n.positional.slice(1),e,s,n.flags.yes);break;case "billing":case "team":case "invite":case "upgrade":case "reactivate":o=i==="invite"?await BS(n.positional.slice(1),e,s):i==="team"?await FS(n.positional.slice(1),e,s):await WS(i,n.positional.slice(1),e,s);break;case "status":o=await LS(e,s);break;case "doctor":o=await DS(n.positional.slice(1),e,s);break;case "whoami":o=await US(e,s);break;case "logout":o=await yC(e,s);break;default:e.stderr.write(`${g("error",s)} Unknown command "${i}". Run pathrule help.
309
+ `),o=64;}return i!=="update"&&i!=="login"&&i!=="logout"&&await TS(e,s),await zi(e.env,{command:i,exitCode:o,appVersion:De.version,durationMs:Date.now()-r}),o}async function $v(t,e,r,n={yes:false}){if(t==="version")return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{version:De.version}})};if(t==="help"){let s=$p(r[0]);return s.ok?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{topic:s.topic,topics:[...ca],text:s.text,commands:["help","version","start","login","status","doctor","whoami","logout","org","workspace","init","setup","attach","detach","preflight","install","uninstall","sync","config","update","daemon","bridge","open","search","memory","rule","skill","refresh","repair","cache","billing","team","invite","upgrade","reactivate"]}})}:{exitCode:64,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"invalid_help_topic",message:s.message}})}}if(t==="login")try{let s=await Bi({env:e.env,fetch:e.fetch??fetch,sleep:e.sleep??Xp});return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:!0,data:{user_id:s.session.user.id,email:s.session.user.email??null,expires_at:s.session.expires_at}})}}catch(s){let i=s instanceof ve?s.code:"login_failed";return {exitCode:1,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:i,message:s instanceof Error?s.message:String(s)}})}}if(t==="daemon")return Xv(e,r);if(t==="bridge")return Zv(e,r[0]??"pair");if(t==="open")return Mp(e,r);if(t==="search")return rC(e,r);if(t==="memory"||t==="rule"||t==="skill")return tC(t,e,r);if(t==="refresh")return nC(e,r);if(t==="repair")return sC(e);if(t==="cache")return iC(e,r,n.yes);if(t==="invite")return qS(e,r);if(t==="team")return zS(e,r);if(t==="billing"||t==="upgrade"||t==="reactivate")return HS(t,e,r);if(t==="whoami"){let s=await Se(e.env);return s?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{user_id:s.session.user.id,email:s.session.user.email??null,expires_at:s.session.expires_at,...await Lv(e.env)}})}:{exitCode:1,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}if(t==="logout"){let s=await Hi(e.env);return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:s})}}return t==="org"?Qv(e,r[0]??"list",r.slice(1)):t==="workspace"?Wv(e,r[0]??"list",r.slice(1)):t==="init"?Bv(e,r[0]):t==="setup"?Fv(e,r,n.yes):t==="attach"?Hv(e,r[0]):t==="detach"?qv(e,r[0]):t==="preflight"?zv(e,r[0]):t==="install"?Jv(e,r[0]):t==="uninstall"?Kv(e,r[0]):t==="sync"?Vv(e,r):t==="config"?Gv(e,r[0],r[1],r[2]):t==="update"?Yv(e):t==="status"?Uv(e):t==="doctor"?Nv(e,r):t==="__scaffold"?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{status:"not_implemented",phase:"m31a_cli_foundation"},next_steps:Dv(t)})}:{exitCode:64,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"unknown_command",message:`Unknown command "${t}".`,remediation:[{label:"Show help",command:"pathrule help"}]}})}}async function Nv(t,e){try{if(e.includes("--bundle")){let n=await Eo(t.env,t.cwd);return {exitCode:n.ok?0:1,envelope:y({command:"doctor --bundle",cwd:t.cwd,ok:n.ok,data:{path:n.path,report:n.report}})}}let r=await $e(t.env,t.cwd);return await jv(t.env,r.managed_files),{exitCode:r.ok?0:1,envelope:y({command:"doctor",cwd:t.cwd,ok:r.ok,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"doctor",cwd:t.cwd,ok:false,error:{code:K(r,"doctor_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function jv(t,e){e.some(r=>r.status==="other_owner"||r.status==="newer_version")&&(await Fr(t,{eventName:"managed_file_owner_conflict",result:"blocked",appVersion:De.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}),await Fr(t,{eventName:"dead_end_seen",result:"blocked",appVersion:De.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}));}function Dv(t){if(t==="status"||t==="doctor"||t==="whoami")return [{label:"Continue M31a implementation",command:"pathrule login"}]}async function Lv(t){try{let[e,r,n]=await Promise.all([ge(t),j(t),M(t)]);return {organizations:e,current_org:r,current_workspace:n}}catch(e){return {context_error:e instanceof Error?e.message:String(e)}}}async function Mv(t){let e=await M(t);if(!e)throw new Error("workspace_required");return e}async function Uv(t){try{let e=await jp(t);return {exitCode:e.authenticated?0:1,envelope:y({command:"status",cwd:t.cwd,ok:e.authenticated,data:e,error:e.authenticated?void 0:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}catch(e){return {exitCode:1,envelope:y({command:"status",cwd:t.cwd,ok:false,error:{code:K(e,"status_failed"),message:e instanceof Error?e.message:String(e)}})}}}async function Wv(t,e,r){try{if(e==="inspect"){let s=await ta(t);return {exitCode:0,envelope:y({command:"workspace inspect",cwd:t.cwd,ok:!0,data:s})}}if(e==="open"){let s=await ir(t);if(!s)throw new Error("workspace_required");let i=await Ns(s.id,t.env,{preferDesktopApp:r.includes("--desktop-app"),forceWeb:r.includes("--web")});return {exitCode:0,envelope:y({command:"workspace open",cwd:t.cwd,ok:!0,data:i})}}if(e==="create"){let s=await ie("create_workspace",t.env);if(!s.allowed){let i=rr(s);return {exitCode:1,envelope:y({command:"workspace create",cwd:t.cwd,ok:!1,data:{preflight:s},error:{code:s.blocking_reason??"preflight_blocked",message:i.summary},next_steps:Ds(i)})}}}let n=e==="current"?await Mv(t.env):e==="use"?await Hr(r[0]??"",t.env):e==="create"?await _t(r[0]??"",t.cwd,t.env):e==="attach"?await Re(r[0],t.cwd,t.env):e==="detach"?await qr(r[0],t.env):await Ee(t.env);return {exitCode:0,envelope:y({command:`workspace ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:y({command:`workspace ${e}`,cwd:t.cwd,ok:false,error:{code:K(n,"workspace_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function Bv(t,e){try{let r=await ie("create_workspace",t.env);if(!r.allowed){let s=rr(r);return {exitCode:1,envelope:y({command:"init",cwd:t.cwd,ok:!1,data:{preflight:r},error:{code:r.blocking_reason??"preflight_blocked",message:s.summary},next_steps:Ds(s)})}}let n=await _t(e??Zp(t.cwd),t.cwd,t.env);return {exitCode:0,envelope:y({command:"init",cwd:t.cwd,ok:!0,data:n})}}catch(r){return {exitCode:1,envelope:y({command:"init",cwd:t.cwd,ok:false,error:{code:K(r,"init_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function Fv(t,e,r){try{let n=await sr(e,t.cwd,t.env,{yes:r});return {exitCode:0,envelope:y({command:"setup",cwd:t.cwd,ok:!0,data:n})}}catch(n){let s=K(n,"setup_failed");return {exitCode:s.startsWith("unknown_setup_option")||s.startsWith("missing_value")||s==="setup_requires_yes"?64:1,envelope:y({command:"setup",cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n)}})}}}async function Hv(t,e){try{let r=await Re(e,t.cwd,t.env);return {exitCode:0,envelope:y({command:"attach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"attach",cwd:t.cwd,ok:false,error:{code:K(r,"attach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function qv(t,e){try{let r=await qr(e,t.env);return {exitCode:0,envelope:y({command:"detach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"detach",cwd:t.cwd,ok:false,error:{code:K(r,"detach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function zv(t,e){if(!e||!No(e))return {exitCode:64,envelope:y({command:"preflight",cwd:t.cwd,ok:false,error:{code:"invalid_preflight_action",message:"Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>"}})};try{let r=await ie(e,t.env),n=r.allowed?null:rr(r);return {exitCode:r.allowed?0:1,envelope:y({command:`preflight ${e}`,cwd:t.cwd,ok:r.allowed,data:r,error:r.allowed?void 0:{code:r.blocking_reason??"preflight_blocked",message:n?.summary??"Preflight blocked."},next_steps:n?Ds(n):void 0})}}catch(r){return {exitCode:1,envelope:y({command:`preflight ${e}`,cwd:t.cwd,ok:false,error:{code:K(r,"preflight_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function Jv(t,e){try{let r=await Je(e,t.env);return {exitCode:r.every(n=>n.ok)?0:1,envelope:y({command:"install",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:y({command:"install",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"install_failed",message:r instanceof Error?r.message:String(r)}})}}}async function Kv(t,e){try{let r=await Lo(e);return {exitCode:r.every(n=>n.ok)?0:1,envelope:y({command:"uninstall",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:y({command:"uninstall",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"uninstall_failed",message:r instanceof Error?r.message:String(r)}})}}}async function Vv(t,e){try{let r=await Ne(t.env,t.cwd,{skillsOnly:e.includes("--skills")});return {exitCode:r.ok?0:1,envelope:y({command:"sync",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error??"sync_failed",message:r.error??"Pathrule sync failed."}})}}catch(r){return {exitCode:1,envelope:y({command:"sync",cwd:t.cwd,ok:false,error:{code:K(r,"sync_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function Gv(t,e,r,n){try{if(e==="get"&&r){let s=await mt(r,t.env);return {exitCode:0,envelope:y({command:`config get ${r}`,cwd:t.cwd,ok:!0,data:s})}}if(e==="set"&&r&&n){let s=await Yi(r,n,t.env);return {exitCode:0,envelope:y({command:`config set ${r}`,cwd:t.cwd,ok:!0,data:s})}}if(e==="reset"&&r){let s=await Xi(r,t.env);return {exitCode:0,envelope:y({command:`config reset ${r}`,cwd:t.cwd,ok:!0,data:s})}}return {exitCode:64,envelope:y({command:"config",cwd:t.cwd,ok:!1,error:{code:"invalid_config_command",message:"Usage: pathrule config get <update.policy|suggestions.desktop|telemetry.enabled|telemetry.id> OR pathrule config set update.policy manual|notify|auto OR pathrule config set suggestions.desktop true|false OR pathrule config set telemetry.enabled true|false OR pathrule config reset telemetry-id"}})}}catch(s){return {exitCode:s instanceof Error&&s.message.startsWith("invalid_")?64:1,envelope:y({command:"config",cwd:t.cwd,ok:false,error:{code:s instanceof Error?s.message:"config_failed",message:s instanceof Error?s.message:String(s)}})}}}async function Yv(t){let e=await Ts(De.version,t.env,t.fetch??fetch);return {exitCode:0,envelope:y({command:"update",cwd:t.cwd,ok:true,data:e})}}async function Xv(t,e){let r=e[0]??"status";try{if(r==="run")throw new Error("daemon_run_not_available_in_json_mode");if(r==="autostart"||r==="toggle"){let s=r==="toggle"?"toggle":e[1]??"status",i=await Rs(t.env),o=s==="status"?i:s==="on"||s==="enable"?await Ve(t.env,!0):s==="off"||s==="disable"?await Ve(t.env,!1):s==="toggle"?await Ve(t.env,!i.enabled):null;if(!o)throw new Error("invalid_daemon_command");return {exitCode:o.supported?0:1,envelope:y({command:r==="toggle"?"daemon toggle":`daemon autostart ${s}`,cwd:t.cwd,ok:o.supported,data:o,error:o.supported?void 0:{code:"daemon_autostart_unsupported",message:o.reason??"Daemon autostart is not supported on this platform."}})}}let n=r==="start"?await sn(ar(t.env)):r==="stop"?await on(t.env):r==="status"?await je(t.env):null;if(!n)throw new Error("invalid_daemon_command");return {exitCode:0,envelope:y({command:`daemon ${r}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){let s=n instanceof Error?n.message:"daemon_failed";return {exitCode:s==="invalid_daemon_command"?64:1,envelope:y({command:`daemon ${r}`,cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n)}})}}}async function Zv(t,e){try{if(e!=="pair")throw new Error("invalid_bridge_command");let r=ar(t.env),n=await ss(r),s=(await ua(r)).status;if(!s.state?.daemon_session_id)throw new Error("daemon_session_missing");let i=await co({env:r,daemonSessionId:s.state.daemon_session_id,user:n,verifyReauth:!1});return {exitCode:0,envelope:y({command:"bridge pair",cwd:t.cwd,ok:!0,data:i})}}catch(r){let n=r instanceof ee||r instanceof Yt?r.code:r instanceof Error?r.message:"bridge_pair_failed";return {exitCode:n==="invalid_bridge_command"?64:1,envelope:y({command:`bridge ${e}`,cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function Qv(t,e,r){try{let n=e==="current"?await j(t.env):e==="use"?await ns(r[0]??"",t.env):e==="open"?await eS(t,r[0]):await ge(t.env);return {exitCode:0,envelope:y({command:`org ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:y({command:`org ${e}`,cwd:t.cwd,ok:false,error:{code:K(n,"org_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function eS(t,e){let r=await j(t.env);if(!r)throw new Error("org_required");let n=Jp(e);return {org_id:r.id,slug:r.slug,name:r.name,role:r.role,billing:r.billing,url:Q(r,t.env,n),opened:false}}async function jp(t){let e=await Se(t.env);if(!e)return {authenticated:false,user:null,organization:null,workspace:null,cwd_workspace_match:null};let r=await j(t.env),n=await M(t.env),s=await Ee(t.env),i=Wp(s,t.cwd),o=i??n;return {authenticated:true,user:{id:e.session.user.id,email:e.session.user.email??null,expires_at:e.session.expires_at},organization:r,workspace:o,selected_workspace:n,cwd_workspace_match:i}}async function tS(t,e,r,n){try{if(t==="current"){let i=await M(r.env);return i?(r.stdout.write(`${g("ok",n)} ${i.name}
310
310
  `),0):(r.stdout.write(`${g("warn",n)} No current workspace selected. Run pathrule workspace use <name-or-id>.
311
311
  `),1)}if(t==="use"){let i=e[0];if(!i)return r.stderr.write(`${g("error",n)} Usage: pathrule workspace use <name-or-id>
312
- `),64;let o=await Fr(i,r.env);return r.stdout.write(`${g("ok",n)} Current workspace: ${o.name}
312
+ `),64;let o=await Hr(i,r.env);return r.stdout.write(`${g("ok",n)} Current workspace: ${o.name}
313
313
  `),0}if(t==="inspect"){let i=await ta(r);r.stdout.write(`${g("ok",n)} Workspace: ${i.workspace.name}
314
314
  `),r.stdout.write(`${g("info",n)} Organization: ${i.organization.slug} (${i.organization.plan}, ${i.organization.role})
315
315
  `),r.stdout.write(`${g("info",n)} Access mode: ${i.workspace.access_mode}
@@ -327,17 +327,17 @@ Useful commands:
327
327
  `),1;let l=await Ns(a.id,r.env,{preferDesktopApp:i,forceWeb:o});return n.interactive&&!n.noOpen?(await Le(r,l.url),r.stdout.write(`${g("ok",n)} Opened ${l.url}
328
328
  `)):r.stdout.write(`${l.url}
329
329
  `),0}if(t==="create"){let i=e[0];if(!i)return r.stderr.write(`${g("error",n)} Usage: pathrule workspace create <name>
330
- `),64;let o=await se("create_workspace",r.env);if(!o.allowed)return Ls(o,r.stderr,n),1;let a=await _t(i,r.cwd,r.env);return r.stdout.write(`${g("ok",n)} Created ${a.workspace.name} and attached it to ${a.local_root_path}
330
+ `),64;let o=await ie("create_workspace",r.env);if(!o.allowed)return Ls(o,r.stderr,n),1;let a=await _t(i,r.cwd,r.env);return r.stdout.write(`${g("ok",n)} Created ${a.workspace.name} and attached it to ${a.local_root_path}
331
331
  `),await or(r,n),0}if(t==="attach"){let i=await Re(e[0],r.cwd,r.env);return r.stdout.write(`${g("ok",n)} Attached ${i.workspace.name} to ${i.local_root_path}
332
- `),await or(r,n),0}if(t==="detach"){let i=await Hr(e[0],r.env);return r.stdout.write(`${g("ok",n)} Detached ${i.name} from this machine.
332
+ `),await or(r,n),0}if(t==="detach"){let i=await qr(e[0],r.env);return r.stdout.write(`${g("ok",n)} Detached ${i.name} from this machine.
333
333
  `),0}if(t!=="list")return r.stderr.write(`${g("error",n)} Unknown workspace command "${t}".
334
334
  `),64;let s=await Ee(r.env);return s.length===0?(r.stdout.write(`${g("warn",n)} No workspaces found.
335
335
  `),0):(r.stdout.write(s.map(i=>`${i.current?"*":" "} ${i.id} ${i.name}`).join(`
336
336
  `)+`
337
337
  `),0)}catch(s){return r.stderr.write(`${g("error",n)} ${s instanceof Error?s.message:String(s)}
338
- `),1}}async function eS(t,e,r){try{let n=await se("create_workspace",e.env);if(!n.allowed)return Ls(n,e.stderr,r),1;let s=await _t(t??Zp(e.cwd),e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Created ${s.workspace.name} and attached it to ${s.local_root_path}
338
+ `),1}}async function rS(t,e,r){try{let n=await ie("create_workspace",e.env);if(!n.allowed)return Ls(n,e.stderr,r),1;let s=await _t(t??Zp(e.cwd),e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Created ${s.workspace.name} and attached it to ${s.local_root_path}
339
339
  `),await or(e,r),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
340
- `),1}}async function tS(t,e,r=[],n=false){if(r.length===0&&!n&&hC(t,e))return rS(t,e);try{let s=await sr(r,t.cwd,t.env,{yes:n}),i=s.plan;if(t.stdout.write(`Pathrule setup
340
+ `),1}}async function nS(t,e,r=[],n=false){if(r.length===0&&!n&&gC(t,e))return sS(t,e);try{let s=await sr(r,t.cwd,t.env,{yes:n}),i=s.plan;if(t.stdout.write(`Pathrule setup
341
341
  `),s.applied)return s.org_selected&&t.stdout.write(`${g("ok",e)} Organization selected.
342
342
  `),s.workspace_action==="created"?t.stdout.write(`${g("ok",e)} Workspace created and attached to this folder.
343
343
  `):s.workspace_action==="attached"?t.stdout.write(`${g("ok",e)} Workspace attached to this folder.
@@ -358,99 +358,99 @@ Useful commands:
358
358
  `):t.stdout.write(`Next: choose one candidate explicitly with pathrule setup --workspace <id> --yes
359
359
  `),0}catch(s){let i=K(s,"setup_failed");return t.stderr.write(`${g("error",e)} ${s instanceof Error?s.message:String(s)}
360
360
  `),i==="setup_requires_yes"?(t.stderr.write(`Next: rerun the setup command with --yes
361
- `),64):i.startsWith("unknown_setup_option")||i.startsWith("missing_value")?64:1}}async function rS(t,e){try{t.stdout.write(nS(e));let r=await sS(t,e);if(!r)return 1;let n=r.plan;t.stdout.write(`${g("ok",e)} Folder: ${t.cwd}
361
+ `),64):i.startsWith("unknown_setup_option")||i.startsWith("missing_value")?64:1}}async function sS(t,e){try{t.stdout.write(iS(e));let r=await oS(t,e);if(!r)return 1;let n=r.plan;t.stdout.write(`${g("ok",e)} Folder: ${t.cwd}
362
362
  `),n.organization&&t.stdout.write(`${g("ok",e)} Organization: ${n.organization.slug}
363
- `);let s=await iS(n,t,e);if(!s)return t.stdout.write(`${g("info",e)} Setup canceled.
364
- `),0;let i=await sr(s,t.cwd,t.env,{yes:!0}),o=wS(i.workspace);if(!o)throw new Error("workspace_setup_failed");i.workspace_action==="created"?t.stdout.write(`${g("ok",e)} Workspace created and attached.
363
+ `);let s=await aS(n,t,e);if(!s)return t.stdout.write(`${g("info",e)} Setup canceled.
364
+ `),0;let i=await sr(s,t.cwd,t.env,{yes:!0}),o=kS(i.workspace);if(!o)throw new Error("workspace_setup_failed");i.workspace_action==="created"?t.stdout.write(`${g("ok",e)} Workspace created and attached.
365
365
  `):i.workspace_action==="attached"&&t.stdout.write(`${g("ok",e)} Workspace attached to this folder.
366
- `),Dp(i.beta_activation,t.stdout,e);let a=await oS(t,e);if(a.length>0){await _S(t.env,o.workspaceId,a);for(let c of a){let u=await Je(c,t.env);for(let d of u)d.ok?t.stdout.write(`${g("ok",e)} ${M[d.client].label} MCP installed.
367
- `):t.stdout.write(`${g("warn",e)} ${M[d.client].label}: ${d.error??d.status}
366
+ `),Dp(i.beta_activation,t.stdout,e);let a=await lS(t,e);if(a.length>0){await yS(t.env,o.workspaceId,a);for(let c of a){let u=await Je(c,t.env);for(let d of u)d.ok?t.stdout.write(`${g("ok",e)} ${U[d.client].label} MCP installed.
367
+ `):t.stdout.write(`${g("warn",e)} ${U[d.client].label}: ${d.error??d.status}
368
368
  `);}let l=await Ne(t.env,t.cwd);l.ok?t.stdout.write(`${g("ok",e)} Workspace files synced.
369
369
  `):t.stdout.write(`${g("warn",e)} ${l.error??"Workspace sync failed."}
370
- `),await lS(t,e,a);}else t.stdout.write(`${g("info",e)} AI tool setup skipped.
371
- `);return await cS(t,e),t.stdout.write(`Workspace: ${da(o.workspaceId,t.env)}
370
+ `),await uS(t,e,a);}else t.stdout.write(`${g("info",e)} AI tool setup skipped.
371
+ `);return await dS(t,e),t.stdout.write(`Workspace: ${da(o.workspaceId,t.env)}
372
372
  `),t.stdout.write(`Next: pathrule doctor
373
373
  `),await Ye(t,e),await or(t,e),0}catch(r){return t.stderr.write(`${g("error",e)} ${r instanceof Error?r.message:String(r)}
374
- `),1}}function nS(t){let e=["\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D","\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ","\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ","\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"],r=t.color?"\x1B[36m":"",n=t.color?"\x1B[2m":"",s=t.color?"\x1B[0m":"";return ["",...e.map(i=>`${r}${i}${s}`),`${n}setup${s}`,""].join(`
375
- `)}async function sS(t,e){try{return await sr([],t.cwd,t.env,{yes:!1})}catch(r){if(!(r instanceof Yt)||r.code!=="not_authenticated")throw r;return !await un(t,"Pathrule CLI is not signed in. Sign in now?",true)||await Yp(t,e)!==0?null:sr([],t.cwd,t.env,{yes:false})}}async function iS(t,e,r){let n=t.candidates.slice(0,5);if(n.length===0){let a=basename(e.cwd)||"Workspace";return await un(e,`Create a new workspace named "${a}" for this folder?`,true)?["--create-workspace"]:null}e.stdout.write(`Workspace candidates:
374
+ `),1}}function iS(t){let e=["\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D","\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ","\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ","\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"],r=t.color?"\x1B[36m":"",n=t.color?"\x1B[2m":"",s=t.color?"\x1B[0m":"";return ["",...e.map(i=>`${r}${i}${s}`),`${n}setup${s}`,""].join(`
375
+ `)}async function oS(t,e){try{return await sr([],t.cwd,t.env,{yes:!1})}catch(r){if(!(r instanceof Yt)||r.code!=="not_authenticated")throw r;return !await dn(t,"Pathrule CLI is not signed in. Sign in now?",true)||await Yp(t,e)!==0?null:sr([],t.cwd,t.env,{yes:false})}}async function aS(t,e,r){let n=t.candidates.slice(0,5);if(n.length===0){let a=basename(e.cwd)||"Workspace";return await dn(e,`Create a new workspace named "${a}" for this folder?`,true)?["--create-workspace"]:null}e.stdout.write(`Workspace candidates:
376
376
  `),n.forEach((a,l)=>{e.stdout.write(`${l+1}. ${a.recommended?"[recommended] ":""}${a.workspace_name} (${a.confidence}) - ${a.reason}
377
- `);});let s=n[0];if(s&&(s.confidence==="exact"||s.confidence==="high")&&await un(e,`Attach "${s.workspace_name}" to this folder?`,true))return ["--workspace",s.workspace_id];let i=(await dn(e,`Choose workspace [1-${n.length}], c to create new, or q to cancel: `)).trim().toLowerCase();if(!i||i==="q")return null;if(i==="c"||i==="create")return ["--create-workspace"];let o=Number(i);return Number.isInteger(o)&&o>=1&&o<=n.length?["--workspace",n[o-1].workspace_id]:(e.stdout.write(`${g("warn",r)} Invalid selection; setup canceled.
378
- `),null)}async function oS(t,e){let r=Object.values(M).filter(c=>c.supported),n=await We(t.cwd).catch(()=>[]),s=new Set(n),i=r.map(c=>c.id).filter(c=>s.has(c));if(Gp(t,e))return aS(r,i,s);t.stdout.write(`AI tools:
377
+ `);});let s=n[0];if(s&&(s.confidence==="exact"||s.confidence==="high")&&await dn(e,`Attach "${s.workspace_name}" to this folder?`,true))return ["--workspace",s.workspace_id];let i=(await lr(e,`Choose workspace [1-${n.length}], c to create new, or q to cancel: `)).trim().toLowerCase();if(!i||i==="q")return null;if(i==="c"||i==="create")return ["--create-workspace"];let o=Number(i);return Number.isInteger(o)&&o>=1&&o<=n.length?["--workspace",n[o-1].workspace_id]:(e.stdout.write(`${g("warn",r)} Invalid selection; setup canceled.
378
+ `),null)}async function lS(t,e){let r=Object.values(U).filter(c=>c.supported),n=await We(t.cwd).catch(()=>[]),s=new Set(n),i=r.map(c=>c.id).filter(c=>s.has(c));if(Gp(t,e))return cS(r,i,s);t.stdout.write(`AI tools:
379
379
  `),r.forEach((c,u)=>{t.stdout.write(`${u+1}. ${c.label}${s.has(c.id)?" [detected]":""}
380
- `);});let o=i.length>0?`Enter for detected (${i.map(c=>M[c].label).join(", ")})`:"Enter to skip",a=(await dn(t,`Select AI tools by number, comma-separated, "all", or "none" (${o}): `)).trim().toLowerCase();if(!a)return i;if(a==="none"||a==="skip")return [];if(a==="all")return r.map(c=>c.id);let l=[];for(let c of a.split(/[,\s]+/).filter(Boolean)){let u=Number(c),d=Number.isInteger(u)?r[u-1]:r.find(p=>p.id===c||p.label.toLowerCase()===c);if(!d){t.stdout.write(`${g("warn",e)} Ignoring unknown AI tool: ${c}
381
- `);continue}l.includes(d.id)||l.push(d.id);}return l}async function aS(t,e,r){let n=process.stdin,s=process.stdout,i=new Set(e),o=Math.max(0,t.findIndex(c=>i.has(c.id))),a=0,l=()=>{a>0&&s.write(`\x1B[${a}A\x1B[J`);let c=["AI tools","Use \u2191\u2193 to move, space to select, enter to confirm.","",...t.map((u,d)=>{let p=d===o?"\u203A":" ",h=i.has(u.id)?"\u25CF":"\u25CB",f=r.has(u.id)?" [detected]":"";return `${p} ${h} ${u.label}${f}`}),"",`Selected: ${i.size>0?Array.from(i).map(u=>M[u].label).join(", "):"none"}`];s.write(`${c.join(`
380
+ `);});let o=i.length>0?`Enter for detected (${i.map(c=>U[c].label).join(", ")})`:"Enter to skip",a=(await lr(t,`Select AI tools by number, comma-separated, "all", or "none" (${o}): `)).trim().toLowerCase();if(!a)return i;if(a==="none"||a==="skip")return [];if(a==="all")return r.map(c=>c.id);let l=[];for(let c of a.split(/[,\s]+/).filter(Boolean)){let u=Number(c),d=Number.isInteger(u)?r[u-1]:r.find(p=>p.id===c||p.label.toLowerCase()===c);if(!d){t.stdout.write(`${g("warn",e)} Ignoring unknown AI tool: ${c}
381
+ `);continue}l.includes(d.id)||l.push(d.id);}return l}async function cS(t,e,r){let n=process.stdin,s=process.stdout,i=new Set(e),o=Math.max(0,t.findIndex(c=>i.has(c.id))),a=0,l=()=>{a>0&&s.write(`\x1B[${a}A\x1B[J`);let c=["AI tools","Use \u2191\u2193 to move, space to select, enter to confirm.","",...t.map((u,d)=>{let p=d===o?"\u203A":" ",h=i.has(u.id)?"\u25CF":"\u25CB",f=r.has(u.id)?" [detected]":"";return `${p} ${h} ${u.label}${f}`}),"",`Selected: ${i.size>0?Array.from(i).map(u=>U[u].label).join(", "):"none"}`];s.write(`${c.join(`
382
382
  `)}
383
383
  `),a=c.length;};emitKeypressEvents(n),n.isTTY&&n.setRawMode(true),n.resume(),s.write("\x1B[?25l"),l();try{return await new Promise((c,u)=>{let d=Date.now()+350,p=()=>{n.off("keypress",f),n.isTTY&&n.setRawMode(!1),n.pause(),s.write("\x1B[?25h");},h=m=>{p(),c(m);},f=(m,_)=>{if(_.ctrl&&_.name==="c"){p(),u(new Error("setup_canceled"));return}if(_.name==="up"){o=(o-1+t.length)%t.length,l();return}if(_.name==="down"){o=(o+1)%t.length,l();return}if(_.name==="space"){let k=t[o];i.has(k.id)?i.delete(k.id):i.add(k.id),l();return}if(_.name==="a"){i.size===t.length?i.clear():t.forEach(k=>i.add(k.id)),l();return}if(_.name==="return"||_.name==="enter"){if(Date.now()<d)return;h(t.map(k=>k.id).filter(k=>i.has(k)));}};n.on("keypress",f);})}finally{s.write(`
384
- `);}}async function lS(t,e,r){if(r.length===0||!await un(t,"Start the first project scan now?",true))return;let s=r.length===1?r[0]:await uS(t,e,r);if(!s)return;let i=await pS(t,s);if(i.ok){i.promptDelivered?t.stdout.write(`${g("ok",e)} Opened ${M[s].label} with the project setup prompt.
385
- `):(t.stdout.write(`${g("ok",e)} Opened ${M[s].label}.
384
+ `);}}async function uS(t,e,r){if(r.length===0||!await dn(t,"Start the first project scan now?",true))return;let s=r.length===1?r[0]:await pS(t,e,r);if(!s)return;let i=await fS(t,s);if(i.ok){i.promptDelivered?t.stdout.write(`${g("ok",e)} Opened ${U[s].label} with the project setup prompt.
385
+ `):(t.stdout.write(`${g("ok",e)} Opened ${U[s].label}.
386
386
  `),t.stdout.write(`Prompt to run in your AI tool: ${aa}
387
387
  `));return}t.stdout.write(`${g("warn",e)} ${i.error}
388
388
  `),t.stdout.write(`Prompt to run in your AI tool: ${aa}
389
- `);}async function cS(t,e){let r=await Rs(t.env);if(!r.supported||r.enabled){t.stdout.write(`Manual start: pathrule start
390
- `);return}if(!await un(t,"Start Pathrule automatically when you sign in?",true)){t.stdout.write(`Manual start: pathrule start
389
+ `);}async function dS(t,e){let r=await Rs(t.env);if(!r.supported||r.enabled){t.stdout.write(`Manual start: pathrule start
390
+ `);return}if(!await dn(t,"Start Pathrule automatically when you sign in?",true)){t.stdout.write(`Manual start: pathrule start
391
391
  `);return}try{let s=await Ve(t.env,!0);s.supported&&s.enabled?t.stdout.write(`${g("ok",e)} Daemon autostart enabled.
392
392
  `):t.stdout.write(`${g("warn",e)} Daemon autostart could not be enabled.
393
393
  `);}catch(s){t.stdout.write(`${g("warn",e)} Daemon autostart could not be enabled. ${s instanceof Error?s.message:String(s)}
394
394
  `);}t.stdout.write(`Manual start: pathrule start
395
- `);}async function uS(t,e,r){let n=r.filter((o,a)=>r.indexOf(o)===a);if(Gp(t,e))return dS(n);t.stdout.write(`Project scan client:
396
- `),n.forEach((o,a)=>{t.stdout.write(`${a+1}. ${M[o].label}
397
- `);});let s=(await dn(t,`Choose client [1-${n.length}] (Enter for 1): `)).trim();if(!s)return n[0]??null;let i=Number(s);return Number.isInteger(i)&&i>=1&&i<=n.length?n[i-1]:null}async function dS(t){let e=process.stdin,r=process.stdout,n=0,s=0,i=()=>{s>0&&r.write(`\x1B[${s}A\x1B[J`);let o=["Project scan","Use \u2191\u2193 to move, enter to launch.","",...t.map((a,l)=>`${l===n?"\u203A":" "} ${M[a].label}`)];r.write(`${o.join(`
395
+ `);}async function pS(t,e,r){let n=r.filter((o,a)=>r.indexOf(o)===a);if(Gp(t,e))return hS(n);t.stdout.write(`Project scan client:
396
+ `),n.forEach((o,a)=>{t.stdout.write(`${a+1}. ${U[o].label}
397
+ `);});let s=(await lr(t,`Choose client [1-${n.length}] (Enter for 1): `)).trim();if(!s)return n[0]??null;let i=Number(s);return Number.isInteger(i)&&i>=1&&i<=n.length?n[i-1]:null}async function hS(t){let e=process.stdin,r=process.stdout,n=0,s=0,i=()=>{s>0&&r.write(`\x1B[${s}A\x1B[J`);let o=["Project scan","Use \u2191\u2193 to move, enter to launch.","",...t.map((a,l)=>`${l===n?"\u203A":" "} ${U[a].label}`)];r.write(`${o.join(`
398
398
  `)}
399
399
  `),s=o.length;};emitKeypressEvents(e),e.isTTY&&e.setRawMode(true),e.resume(),r.write("\x1B[?25l"),i();try{return await new Promise((o,a)=>{let l=Date.now()+350,c=()=>{e.off("keypress",d),e.isTTY&&e.setRawMode(!1),e.pause(),r.write("\x1B[?25h");},u=p=>{c(),o(p);},d=(p,h)=>{if(h.ctrl&&h.name==="c"){c(),a(new Error("setup_canceled"));return}if(h.name==="up"){n=(n-1+t.length)%t.length,i();return}if(h.name==="down"){n=(n+1)%t.length,i();return}if(h.name==="return"||h.name==="enter"){if(Date.now()<l)return;u(t[n]??null);}};e.on("keypress",d);})}finally{r.write(`
400
- `);}}async function pS(t,e){if(process.platform!=="darwin")return {ok:false,error:"Automatic AI launch is currently wired for macOS. Open your AI tool in this repo and paste the setup prompt."};try{let r=gS(aa,await fS(t.cwd));return hS(e,t.cwd,r),{ok:!0,promptDelivered:e==="claude-code"||e==="codex"}}catch(r){return {ok:false,error:r instanceof Error?r.message:String(r)}}}function hS(t,e,r){switch(t){case "cursor":spawn("open",["-a","Cursor",e],{detached:true,stdio:"ignore"}).unref();return;case "windsurf":spawn("open",["-a","Windsurf",e],{detached:true,stdio:"ignore"}).unref();return;case "claude-code":case "codex":{let n=t==="claude-code"?"claude":"codex",s=`cd ${Ep(e)} && ${n} ${Ep(r)}`,i=`tell application "Terminal" to do script "${mS(s)}"
401
- tell application "Terminal" to activate`;spawn("osascript",["-e",i],{detached:true,stdio:"ignore"}).unref();return}}}async function fS(t){try{let{stdout:e}=await Os("git",["-C",t,"status","--porcelain"],{timeout:1500,maxBuffer:65536}),r=e.split(/\r?\n/).map(n=>n.trimEnd()).filter(Boolean);return r.length===0?null:{total:r.length,lines:r.slice(0,12)}}catch{return null}}function gS(t,e){if(!e)return t;let r=e.total>e.lines.length?`
400
+ `);}}async function fS(t,e){if(process.platform!=="darwin")return {ok:false,error:"Automatic AI launch is currently wired for macOS. Open your AI tool in this repo and paste the setup prompt."};try{let r=_S(aa,await mS(t.cwd));return gS(e,t.cwd,r),{ok:!0,promptDelivered:e==="claude-code"||e==="codex"}}catch(r){return {ok:false,error:r instanceof Error?r.message:String(r)}}}function gS(t,e,r){switch(t){case "cursor":spawn("open",["-a","Cursor",e],{detached:true,stdio:"ignore"}).unref();return;case "windsurf":spawn("open",["-a","Windsurf",e],{detached:true,stdio:"ignore"}).unref();return;case "claude-code":case "codex":{let n=t==="claude-code"?"claude":"codex",s=`cd ${Ep(e)} && ${n} ${Ep(r)}`,i=`tell application "Terminal" to do script "${wS(s)}"
401
+ tell application "Terminal" to activate`;spawn("osascript",["-e",i],{detached:true,stdio:"ignore"}).unref();return}}}async function mS(t){try{let{stdout:e}=await Os("git",["-C",t,"status","--porcelain"],{timeout:1500,maxBuffer:65536}),r=e.split(/\r?\n/).map(n=>n.trimEnd()).filter(Boolean);return r.length===0?null:{total:r.length,lines:r.slice(0,12)}}catch{return null}}function _S(t,e){if(!e)return t;let r=e.total>e.lines.length?`
402
402
  - ...and ${e.total-e.lines.length} more`:"";return `${["Before working, note that this workspace already has uncommitted local changes.","Treat them as protected user/team work: inspect overlapping files before editing, do not revert unrelated changes, and keep edits scoped to the user's request.","","Current git status summary:",...e.lines.map(s=>`- ${s}`),r].filter(Boolean).join(`
403
403
  `)}
404
404
 
405
- ${t}`}function Ep(t){return `'${t.replace(/'/g,"'\\''")}'`}function mS(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}async function _S(t,e,r){let{session:n,supabase:s}=await R(t),{error:i}=await s.from("user_workspace_paths").update({selected_ai_clients:r}).eq("user_id",n.user.id).eq("workspace_id",e);if(i)throw new Error(`workspace_client_selection_update_failed: ${i.message}`)}function wS(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.workspace?.id!="string"||typeof e.local_root_path!="string"?null:{workspaceId:e.workspace.id,localRootPath:e.local_root_path}}async function yS(t,e,r){try{let n=await Re(t,e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Attached ${n.workspace.name} to ${n.local_root_path}
405
+ ${t}`}function Ep(t){return `'${t.replace(/'/g,"'\\''")}'`}function wS(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}async function yS(t,e,r){let{session:n,supabase:s}=await R(t),{error:i}=await s.from("user_workspace_paths").update({selected_ai_clients:r}).eq("user_id",n.user.id).eq("workspace_id",e);if(i)throw new Error(`workspace_client_selection_update_failed: ${i.message}`)}function kS(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.workspace?.id!="string"||typeof e.local_root_path!="string"?null:{workspaceId:e.workspace.id,localRootPath:e.local_root_path}}async function bS(t,e,r){try{let n=await Re(t,e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Attached ${n.workspace.name} to ${n.local_root_path}
406
406
  `),await Ye(e,r),await or(e,r),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
407
- `),1}}async function kS(t,e,r){try{let n=await Hr(t,e.env);return e.stdout.write(`${g("ok",r)} Detached ${n.name} from this machine.
407
+ `),1}}async function vS(t,e,r){try{let n=await qr(t,e.env);return e.stdout.write(`${g("ok",r)} Detached ${n.name} from this machine.
408
408
  `),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
409
- `),1}}async function bS(t,e,r){if(!t||!No(t))return e.stderr.write(`${g("error",r)} Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>
410
- `),64;try{let n=await se(t,e.env);return n.allowed?(e.stdout.write(`${g("ok",r)} ${t} is allowed.
409
+ `),1}}async function SS(t,e,r){if(!t||!No(t))return e.stderr.write(`${g("error",r)} Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>
410
+ `),64;try{let n=await ie(t,e.env);return n.allowed?(e.stdout.write(`${g("ok",r)} ${t} is allowed.
411
411
  `),0):(Ls(n,e.stderr,r),1)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
412
- `),1}}async function vS(t,e,r){try{let n=await Je(t,e.env);for(let i of n)e.stdout.write(`${g(i.ok?"ok":"error",r)} ${i.client}: ${i.status} (${i.config_path})
412
+ `),1}}async function CS(t,e,r){try{let n=await Je(t,e.env);for(let i of n)e.stdout.write(`${g(i.ok?"ok":"error",r)} ${i.client}: ${i.status} (${i.config_path})
413
413
  `);let s=n.every(i=>i.ok);return s&&await Ye(e,r),s?0:1}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
414
- `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function SS(t,e,r){try{let n=await Lo(t);for(let s of n)e.stdout.write(`${g(s.ok?"ok":"error",r)} ${s.client}: ${s.status} (${s.config_path})
414
+ `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function ES(t,e,r){try{let n=await Lo(t);for(let s of n)e.stdout.write(`${g(s.ok?"ok":"error",r)} ${s.client}: ${s.status} (${s.config_path})
415
415
  `);return n.every(s=>s.ok)?0:1}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
416
- `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function CS(t,e,r){try{let n=await Ne(e.env,e.cwd,{skillsOnly:t.includes("--skills")});return n.ok?n.skills?(e.stdout.write(`${g("ok",r)} Synced skills: ${n.skills.written} written, ${n.skills.skipped} skipped, ${n.skills.removed} removed.
416
+ `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function RS(t,e,r){try{let n=await Ne(e.env,e.cwd,{skillsOnly:t.includes("--skills")});return n.ok?n.skills?(e.stdout.write(`${g("ok",r)} Synced skills: ${n.skills.written} written, ${n.skills.skipped} skipped, ${n.skills.removed} removed.
417
417
  `),await Ye(e,r),0):(e.stdout.write(`${g("ok",r)} Synced companion files: ${n.companion?.written??0} written, ${n.companion?.skipped??0} skipped, ${n.companion?.removed??0} removed; hook index ${n.hook_index?.ok?"updated":"skipped"}.
418
418
  `),await Ye(e,r),0):(e.stderr.write(`${g("error",r)} ${n.error??"sync_failed"}
419
419
  `),1)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
420
- `),1}}async function ES(t,e,r,n,s){try{if(t==="get"&&e){let i=await mt(e,n.env);return n.stdout.write(`${e}=${i.value} (${i.source})
420
+ `),1}}async function xS(t,e,r,n,s){try{if(t==="get"&&e){let i=await mt(e,n.env);return n.stdout.write(`${e}=${i.value} (${i.source})
421
421
  `),0}if(t==="set"&&e&&r){let i=await Yi(e,r,n.env);return n.stdout.write(`${g("ok",s)} ${e}=${i.value}
422
422
  `),0}if(t==="reset"&&e){let i=await Xi(e,n.env);return n.stdout.write(`${g("ok",s)} ${i.key}=${i.value}
423
423
  `),0}return n.stderr.write(`${g("error",s)} Usage: pathrule config get <update.policy|suggestions.desktop|telemetry.enabled|telemetry.id> OR pathrule config set update.policy manual|notify|auto OR pathrule config set suggestions.desktop true|false OR pathrule config set telemetry.enabled true|false OR pathrule config reset telemetry-id
424
424
  `),64}catch(i){return n.stderr.write(`${g("error",s)} ${i instanceof Error?i.message:String(i)}
425
- `),i instanceof Error&&i.message.startsWith("invalid_")?64:1}}async function RS(t,e){let r=await Ts(De.version,t.env,t.fetch??fetch);return r.checked?r.update_available?(t.stdout.write(`${g("warn",e)} Pathrule CLI ${r.latest_version} is available. Current: ${r.current_version}
425
+ `),i instanceof Error&&i.message.startsWith("invalid_")?64:1}}async function PS(t,e){let r=await Ts(De.version,t.env,t.fetch??fetch);return r.checked?r.update_available?(t.stdout.write(`${g("warn",e)} Pathrule CLI ${r.latest_version} is available. Current: ${r.current_version}
426
426
  `),r.upgrade_command&&t.stdout.write(`Run: ${r.upgrade_command}
427
427
  `),r.protocol_compatible||t.stdout.write(`${g("warn",e)} This CLI protocol is below the minimum supported version.
428
428
  `),0):(t.stdout.write(`${g("ok",e)} Pathrule CLI is up to date.
429
429
  `),0):(t.stdout.write(`${g("info",e)} Update check skipped: ${r.reason}
430
- `),0)}async function xS(t,e){if(!e.interactive)return;let r=await vp(De.version,t.env,t.fetch??fetch).catch(()=>null);r&&t.stderr.write(`${g("info",e)} ${r}
431
- `);}async function PS(t,e){t.stdout.write(`Pathrule
432
- `);let r=await nn(ar(t.env));return r.running&&r.state?t.stdout.write(`${g("ok",e)} Local Web bridge is running on 127.0.0.1:${r.state.port}.
430
+ `),0)}async function TS(t,e){if(!e.interactive)return;let r=await vp(De.version,t.env,t.fetch??fetch).catch(()=>null);r&&t.stderr.write(`${g("info",e)} ${r}
431
+ `);}async function AS(t,e){t.stdout.write(`Pathrule
432
+ `);let r=await sn(ar(t.env));return r.running&&r.state?t.stdout.write(`${g("ok",e)} Local Web bridge is running on 127.0.0.1:${r.state.port}.
433
433
  `):t.stdout.write(`${g("info",e)} Local Web bridge is not running.
434
434
  `),t.stdout.write(`Next: pathrule bridge pair
435
- `),0}async function TS(t,e,r){let n=t[0]??"status";try{if(n==="run")return await ep(e.env),0;if(n==="autostart"||n==="toggle")return AS(n==="toggle"?"toggle":t[1]??"status",e,r);let s=n==="start"?await nn(ar(e.env)):n==="stop"?await sn(e.env):n==="status"?await je(e.env):null;return s?(s.running&&s.state?e.stdout.write(`${g("ok",r)} Daemon running on 127.0.0.1:${s.state.port} (pid ${s.state.pid})
435
+ `),0}async function IS(t,e,r){let n=t[0]??"status";try{if(n==="run")return await ep(e.env),0;if(n==="autostart"||n==="toggle")return OS(n==="toggle"?"toggle":t[1]??"status",e,r);let s=n==="start"?await sn(ar(e.env)):n==="stop"?await on(e.env):n==="status"?await je(e.env):null;return s?(s.running&&s.state?e.stdout.write(`${g("ok",r)} Daemon running on 127.0.0.1:${s.state.port} (pid ${s.state.pid})
436
436
  `):e.stdout.write(`${g("info",r)} Daemon not running (${s.reason??"unknown"}).
437
437
  `),0):(e.stderr.write(`${g("error",r)} Usage: pathrule daemon start|stop|status|autostart on|autostart off|autostart status|toggle
438
438
  `),64)}catch(s){return e.stderr.write(`${g("error",r)} ${s instanceof Error?s.message:String(s)}
439
- `),1}}async function AS(t,e,r){try{let n=await Rs(e.env),s=t==="status"?n:t==="on"||t==="enable"?await Ve(e.env,!0):t==="off"||t==="disable"?await Ve(e.env,!1):t==="toggle"?await Ve(e.env,!n.enabled):null;return s?s.supported?(e.stdout.write(`${g(s.enabled?"ok":"info",r)} Daemon autostart ${s.enabled?"enabled":"disabled"} (${s.method}).
439
+ `),1}}async function OS(t,e,r){try{let n=await Rs(e.env),s=t==="status"?n:t==="on"||t==="enable"?await Ve(e.env,!0):t==="off"||t==="disable"?await Ve(e.env,!1):t==="toggle"?await Ve(e.env,!n.enabled):null;return s?s.supported?(e.stdout.write(`${g(s.enabled?"ok":"info",r)} Daemon autostart ${s.enabled?"enabled":"disabled"} (${s.method}).
440
440
  `),e.stdout.write(`Manual start: pathrule start
441
441
  `),0):(e.stderr.write(`${g("error",r)} Daemon autostart is not supported on this platform. ${s.reason??""}
442
442
  `),1):(e.stderr.write(`${g("error",r)} Usage: pathrule daemon autostart on|off|status or pathrule daemon toggle
443
443
  `),64)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
444
- `),1}}async function IS(t,e,r){if(t!=="pair")return e.stderr.write(`${g("error",r)} Usage: pathrule bridge pair
444
+ `),1}}async function $S(t,e,r){if(t!=="pair")return e.stderr.write(`${g("error",r)} Usage: pathrule bridge pair
445
445
  `),64;try{let n=ar(e.env),s=await ss(n),i=(await ua(n)).status;if(!i.state?.daemon_session_id)throw new Error("daemon_session_missing");let o=await co({env:n,daemonSessionId:i.state.daemon_session_id,user:s,verifyReauth:!1});return e.stdout.write(`${g("ok",r)} Pair code: ${o.pair_code}
446
446
  `),e.stdout.write(`${g("info",r)} Open ${o.url} and paste the code.
447
447
  `),e.stdout.write(`${g("info",r)} Expires at ${o.expires_at}
448
448
  `),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
449
- `),1}}function ar(t){let e=t.PATHRULE_DAEMON_PORT?.trim();return {...t,PATHRULE_DAEMON_PORT:e&&e.length>0?e:String(Es)}}async function ua(t){let e=OS(t),r=await je(t);return r.running&&(e===0||r.state?.port===e)?{status:r,changed:false}:(r.running&&r.state?.port!==e&&await sn(t),{status:await nn(t),changed:true})}function OS(t){let e=t.PATHRULE_DAEMON_PORT?.trim()||String(Es),r=Number(e);if(!Number.isInteger(r)||r<0||r>65535)throw new Error("daemon_port_invalid");return r}async function Ye(t,e,r={}){if(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0")return;let n=ar(t.env);try{let s=await ua(n);s.changed&&s.status.running&&s.status.state&&t.stdout.write(`${g("info",e)} Local Web bridge ready on 127.0.0.1:${s.status.state.port}.
449
+ `),1}}function ar(t){let e=t.PATHRULE_DAEMON_PORT?.trim();return {...t,PATHRULE_DAEMON_PORT:e&&e.length>0?e:String(Es)}}async function ua(t){let e=NS(t),r=await je(t);return r.running&&(e===0||r.state?.port===e)?{status:r,changed:false}:(r.running&&r.state?.port!==e&&await on(t),{status:await sn(t),changed:true})}function NS(t){let e=t.PATHRULE_DAEMON_PORT?.trim()||String(Es),r=Number(e);if(!Number.isInteger(r)||r<0||r>65535)throw new Error("daemon_port_invalid");return r}async function Ye(t,e,r={}){if(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0")return;let n=ar(t.env);try{let s=await ua(n);s.changed&&s.status.running&&s.status.state&&t.stdout.write(`${g("info",e)} Local Web bridge ready on 127.0.0.1:${s.status.state.port}.
450
450
  `);}catch(s){t.stderr.write(`${g("warn",e)} Local Web bridge could not start. ${r.manualHint??"Run pathrule start to start it manually."} (${s instanceof Error?s.message:String(s)})
451
- `);}}async function $S(t,e){if(!(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0"))try{if(!(await je(t.env)).running)return;await sn(t.env),t.stdout.write(`${g("info",e)} Local Web bridge stopped.
451
+ `);}}async function jS(t,e){if(!(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0"))try{if(!(await je(t.env)).running)return;await on(t.env),t.stdout.write(`${g("info",e)} Local Web bridge stopped.
452
452
  `);}catch(r){t.stderr.write(`${g("warn",e)} Local Web bridge could not stop. (${r instanceof Error?r.message:String(r)})
453
- `);}}async function NS(t,e,r){try{if(t.includes("--bundle")){let o=await Eo(e.env,e.cwd);return e.stdout.write(`${g("ok",r)} Support bundle written: ${o.path}
453
+ `);}}async function DS(t,e,r){try{if(t.includes("--bundle")){let o=await Eo(e.env,e.cwd);return e.stdout.write(`${g("ok",r)} Support bundle written: ${o.path}
454
454
  `),o.ok?0:1}let n=await $e(e.env,e.cwd);if(e.stdout.write(`Pathrule doctor
455
455
  `),ra("Account",n.checks.filter(o=>["auth","organization"].includes(o.name)),e,r),ra("Workspace",n.checks.filter(o=>["workspace","cwd_attach"].includes(o.name)),e,r),ra("Managed files",n.checks.filter(o=>o.name==="managed_files"),e,r),n.managed_files.length>0){e.stdout.write(`
456
456
  Managed file ownership
@@ -466,7 +466,7 @@ Next: pathrule attach <workspace>
466
466
  `),1}}function ra(t,e,r,n){if(e.length!==0){r.stdout.write(`
467
467
  ${t}
468
468
  `);for(let s of e)r.stdout.write(`${g(s.status==="pass"?"ok":s.status==="warn"?"warn":"error",n)} ${s.name}${s.detail?`: ${s.detail}`:""}
469
- `);}}async function jS(t,e){try{let r=await jp(t);return r.authenticated?(t.stdout.write(["Pathrule status",`${g("ok",e)} Signed in as ${r.user?.email??r.user?.id}`,`Organization: ${r.organization?.slug??"none"}`,`Trial ends: ${r.organization?.trial_ends_at??"none"}`,`Beta credit: ${DS(r.organization?.beta_referral_credit_cents??0)}`,`Beta Founder: ${r.organization?.beta_referral_founder?"yes":"no"}`,`Workspace: ${r.workspace?.name??"none"}`,`Current folder: ${r.cwd_workspace_match?`attached to ${r.cwd_workspace_match.name}`:"not attached"}`,""].join(`
469
+ `);}}async function LS(t,e){try{let r=await jp(t);return r.authenticated?(t.stdout.write(["Pathrule status",`${g("ok",e)} Signed in as ${r.user?.email??r.user?.id}`,`Organization: ${r.organization?.slug??"none"}`,`Trial ends: ${r.organization?.trial_ends_at??"none"}`,`Beta credit: ${MS(r.organization?.beta_referral_credit_cents??0)}`,`Beta Founder: ${r.organization?.beta_referral_founder?"yes":"no"}`,`Workspace: ${r.workspace?.name??"none"}`,`Current folder: ${r.cwd_workspace_match?`attached to ${r.cwd_workspace_match.name}`:"not attached"}`,""].join(`
470
470
  `)),0):(t.stderr.write(`${g("error",e)} Not signed in. Run pathrule login.
471
471
  `),1)}catch(r){return t.stderr.write(`${g("error",e)} ${r instanceof Error?r.message:String(r)}
472
472
  `),1}}function Dp(t,e,r){if(t){if(t.status==="credited"){e.write(`${g("ok",r)} Beta activation credited: $20 earned for your inviter.
@@ -475,12 +475,12 @@ ${t}
475
475
  `);return}t.status==="duplicate_repo"?e.write(`${g("info",r)} Beta activation already used this repo.
476
476
  `):t.status==="same_machine"?e.write(`${g("info",r)} Beta activation was not eligible on this machine.
477
477
  `):t.status==="reward_cap_reached"&&e.write(`${g("info",r)} Beta invite accepted; inviter reward cap is already full.
478
- `);}}function DS(t){return `$${(t/100).toFixed(2)}`}async function LS(t,e){let r=await Se(t.env);return r?(t.stdout.write(["Pathrule account",`${g("ok",e)} Signed in`,`User: ${r.session.user.email??r.session.user.id}`,`Expires: ${new Date(r.session.expires_at*1e3).toISOString()}`,""].join(`
478
+ `);}}function MS(t){return `$${(t/100).toFixed(2)}`}async function US(t,e){let r=await Se(t.env);return r?(t.stdout.write(["Pathrule account",`${g("ok",e)} Signed in`,`User: ${r.session.user.email??r.session.user.id}`,`Expires: ${new Date(r.session.expires_at*1e3).toISOString()}`,""].join(`
479
479
  `)),0):(t.stderr.write(`${g("error",e)} Not signed in. Run pathrule login.
480
- `),1)}async function Lp(t,e,r){try{let n=await Mp(t,e);return r.interactive&&!r.noOpen?(await Le(e,n.url),e.stdout.write(`${g("ok",r)} Opened ${n.url}
480
+ `),1)}async function Lp(t,e,r){try{let n=await Up(t,e);return r.interactive&&!r.noOpen?(await Le(e,n.url),e.stdout.write(`${g("ok",r)} Opened ${n.url}
481
481
  `)):e.stdout.write(`${n.url}
482
482
  `),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
483
- `),1}}async function US(t,e,r,n){return Lp([Bp(t),...e],r,n)}async function MS(t,e,r){try{let n=await zo(qo(t),e.env);return n.ok?(e.stdout.write(`${g("ok",r)} Invited ${n.email} to ${n.organization.name} as ${n.role}
483
+ `),1}}async function WS(t,e,r,n){return Lp([Bp(t),...e],r,n)}async function BS(t,e,r){try{let n=await zo(qo(t),e.env);return n.ok?(e.stdout.write(`${g("ok",r)} Invited ${n.email} to ${n.organization.name} as ${n.role}
484
484
  `),n.workspace&&e.stdout.write(`Workspace context: ${n.workspace.name}
485
485
  `),n.email_sent?e.stdout.write(`Invite email sent.
486
486
  `):e.stdout.write(`${g("warn",r)} Invite created, but the email could not be sent automatically.
@@ -496,66 +496,66 @@ ${t}
496
496
  `)):e.stderr.write(`${n.open_target.url}
497
497
  `)),Ap(e.stderr,n.next_steps),1)}catch(n){return n instanceof xe?(e.stderr.write(`${g("error",r)} ${n.message}
498
498
  `),64):(e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
499
- `),1)}}async function WS(t,e,r){try{let n=Kp(t),s=await ea(e.env,n.orgSelector),i=await cn(s.organization.slug,e.env,"members",{preferDesktopApp:n.preferDesktopApp,forceWeb:n.forceWeb});return n.open?(r.interactive&&!r.noOpen?(await Le(e,i.url),e.stdout.write(`${g("ok",r)} Opened ${i.url}
499
+ `),1)}}async function FS(t,e,r){try{let n=Kp(t),s=await ea(e.env,n.orgSelector),i=await un(s.organization.slug,e.env,"members",{preferDesktopApp:n.preferDesktopApp,forceWeb:n.forceWeb});return n.open?(r.interactive&&!r.noOpen?(await Le(e,i.url),e.stdout.write(`${g("ok",r)} Opened ${i.url}
500
500
  `)):e.stdout.write(`${i.url}
501
501
  `),0):(e.stdout.write([`${wn(s.organization.name)} (${s.organization.slug})`,`${g("info",r)} Your role: ${s.organization.role}`,"","Members",...s.members.map(o=>`- ${wn(o.email??o.user_id)} \xB7 ${o.role}${o.full_name?` \xB7 ${wn(o.full_name)}`:""}`),"","Pending invites",...s.invites.length?s.invites.map(o=>`- ${o.email} \xB7 ${o.role} \xB7 expires ${o.expires_at}`):["- none"],"",`${i.label}: ${i.url}`,""].join(`
502
502
  `)),0)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
503
- `),1}}async function Up(t,e){try{let r=await Mp(e,t);return {exitCode:0,envelope:y({command:"open",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"open",cwd:t.cwd,ok:false,error:{code:"open_target_failed",message:r instanceof Error?r.message:String(r)}})}}}async function BS(t,e,r){let n=await Up(e,[Bp(t),...r]);return {...n,envelope:{...n.envelope,command:t}}}async function FS(t,e){try{let r=await zo(qo(e),t.env);return {exitCode:r.ok?0:1,envelope:y({command:"invite",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error,message:r.message},next_steps:r.next_steps})}}catch(r){let n=K(r,"invite_failed");return {exitCode:r instanceof xe?64:1,envelope:y({command:"invite",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function HS(t,e){try{let r=Kp(e),n=await ea(t.env,r.orgSelector),s=await cn(n.organization.slug,t.env,"members",{preferDesktopApp:r.preferDesktopApp,forceWeb:r.forceWeb});return {exitCode:0,envelope:y({command:"team",cwd:t.cwd,ok:!0,data:r.open?s:{...n,open_target:s}})}}catch(r){let n=K(r,"team_failed");return {exitCode:n.startsWith("unknown_team_option")?64:1,envelope:y({command:"team",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function Mp(t,e){let r=t.find(i=>i&&!["--web","--desktop-app","--no-open"].includes(i)),n=t.includes("--web"),s=t.includes("--desktop-app")&&!n;if(!r){let i=await ir(e);return i?Ns(i.id,e.env,{preferDesktopApp:s,forceWeb:n}):JS(e.env)}if(r==="workspace"||r==="--workspace"){let i=await ir(e);if(!i)throw new Error("workspace_required");return Ns(i.id,e.env,{preferDesktopApp:s,forceWeb:n})}if(r==="workspace-settings"||r==="--workspace-settings"){let i=await ir(e);if(!i)throw new Error("workspace_required");return Rp(i.id,e.env,"settings",n)}if(r==="agent-setup"||r==="agents"||r==="ai-tools"||r==="--agent-setup"){let i=await ir(e);if(!i)throw new Error("workspace_required");return Rp(i.id,e.env,"ai-tools",n)}if(r==="org"||r==="--org"){let i=await j(e.env);if(!i)throw new Error("org_required");return cn(i.slug,e.env,"home",{preferDesktopApp:s,forceWeb:n})}if(r==="team"||r==="--team")return na(e.env,"members",n,s);if(r==="billing"||r==="--billing"||r==="upgrade"||r==="--upgrade")return na(e.env,"billing",n,s);if(r==="settings"||r==="--settings")return na(e.env,"settings",n,s);if(r==="reactivate"||r==="--reactivate"){let i=await j(e.env);if(!i)throw new Error("org_required");return cn(i.slug,e.env,"reactivate",{preferDesktopApp:s,forceWeb:n})}throw new Error("invalid_open_target")}async function ir(t){let e=await Ee(t.env);return Wp(e,t.cwd)??qS(e)}function qS(t){let e=t.find(r=>r.current);return e||(t.length===1?t[0]??null:null)}function Wp(t,e){let r=t.filter(n=>n.local_root_path?zS(n.local_root_path,e):false);return r.sort((n,s)=>(s.local_root_path?.length??0)-(n.local_root_path?.length??0)),r[0]??null}function zS(t,e){let r=resolve(t),n=resolve(e),s=relative(r,n);return s===""||!s.startsWith("..")&&!isAbsolute(s)}function JS(t){return {kind:"web",url:(t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,""),label:"Open Pathrule Web",reason:"preferred"}}async function na(t,e,r,n){let s=await j(t);if(!s)throw new Error("org_required");return cn(s.slug,t,e,{preferDesktopApp:n,forceWeb:r})}function Bp(t){return t==="team"?"team":t==="upgrade"?"upgrade":t==="reactivate"?"reactivate":"billing"}function da(t,e){return `${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}`}function KS(t,e,r){let n=`${da(t,e)}/settings`;return r==="ai-tools"?`${n}/ai-tools`:n}function Rp(t,e,r,n=false){return {kind:"web",url:KS(t,e,r),label:r==="ai-tools"?"Open AI tools in Pathrule Web":"Open workspace settings in Pathrule Web",reason:n?"forced":"preferred"}}async function Ns(t,e,r={}){return r.preferDesktopApp&&!r.forceWeb?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"forced"}:!r.forceWeb&&await pa(e,"workspace")?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"preferred"}:{kind:"web",url:da(t,e),label:"Open workspace in Pathrule Web",reason:r.forceWeb?"forced":"preferred"}}async function cn(t,e,r,n={}){let s=r==="reactivate"?"billing":r,i={slug:t},o=r==="reactivate"?`${Z(i,e,"billing")}/reactivate`:Z(i,e,s),a=r==="billing"?"Open billing in Pathrule Web":r==="members"?"Open team in Pathrule Web":r==="settings"?"Open settings in Pathrule Web":r==="reactivate"?"Open billing reactivation in Pathrule Web":"Open organization in Pathrule Web";if(n.preferDesktopApp&&!n.forceWeb){let c=r==="members"?"team":r;return {kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${c}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"forced"}}let l=r==="members"?"team":r;return !n.forceWeb&&await pa(e,`org:${l}`)?{kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${l}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"preferred"}:{kind:"web",url:o,label:a,reason:n.forceWeb?"forced":"preferred"}}async function pa(t,e,r=Date.now()){let n=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(n==="healthy"||n==="1"||n==="true")return true;if(n==="unhealthy"||n==="0"||n==="false")return false;let s;try{s=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(s.healthy!==true||!s.updated_at)return false;let i=Date.parse(s.updated_at);return !(!Number.isFinite(i)||r-i>600*1e3||s.routes&&!s.routes.includes(e)&&!s.routes.includes("*"))}function sa(t,e){return `${t} / ${e===-1?"unlimited":e}`}async function VS(t,e,r,n){try{let s=e[0]??"list";if(s==="add"){let a=Hp(t,e.slice(1)),l=await se(zp(t),r.env);if(!l.allowed)return Ls(l,r.stderr,n),1;let c=await qp(t,a,r),u=await oo(t,c,r.env);r.stdout.write(`${g("ok",n)} Created ${t}: ${u.item.title}
503
+ `),1}}async function Mp(t,e){try{let r=await Up(e,t);return {exitCode:0,envelope:y({command:"open",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"open",cwd:t.cwd,ok:false,error:{code:"open_target_failed",message:r instanceof Error?r.message:String(r)}})}}}async function HS(t,e,r){let n=await Mp(e,[Bp(t),...r]);return {...n,envelope:{...n.envelope,command:t}}}async function qS(t,e){try{let r=await zo(qo(e),t.env);return {exitCode:r.ok?0:1,envelope:y({command:"invite",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error,message:r.message},next_steps:r.next_steps})}}catch(r){let n=K(r,"invite_failed");return {exitCode:r instanceof xe?64:1,envelope:y({command:"invite",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function zS(t,e){try{let r=Kp(e),n=await ea(t.env,r.orgSelector),s=await un(n.organization.slug,t.env,"members",{preferDesktopApp:r.preferDesktopApp,forceWeb:r.forceWeb});return {exitCode:0,envelope:y({command:"team",cwd:t.cwd,ok:!0,data:r.open?s:{...n,open_target:s}})}}catch(r){let n=K(r,"team_failed");return {exitCode:n.startsWith("unknown_team_option")?64:1,envelope:y({command:"team",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function Up(t,e){let r=t.find(i=>i&&!["--web","--desktop-app","--no-open"].includes(i)),n=t.includes("--web"),s=t.includes("--desktop-app")&&!n;if(!r){let i=await ir(e);return i?Ns(i.id,e.env,{preferDesktopApp:s,forceWeb:n}):VS(e.env)}if(r==="workspace"||r==="--workspace"){let i=await ir(e);if(!i)throw new Error("workspace_required");return Ns(i.id,e.env,{preferDesktopApp:s,forceWeb:n})}if(r==="workspace-settings"||r==="--workspace-settings"){let i=await ir(e);if(!i)throw new Error("workspace_required");return Rp(i.id,e.env,"settings",n)}if(r==="agent-setup"||r==="agents"||r==="ai-tools"||r==="--agent-setup"){let i=await ir(e);if(!i)throw new Error("workspace_required");return Rp(i.id,e.env,"ai-tools",n)}if(r==="org"||r==="--org"){let i=await j(e.env);if(!i)throw new Error("org_required");return un(i.slug,e.env,"home",{preferDesktopApp:s,forceWeb:n})}if(r==="team"||r==="--team")return na(e.env,"members",n,s);if(r==="billing"||r==="--billing"||r==="upgrade"||r==="--upgrade")return na(e.env,"billing",n,s);if(r==="settings"||r==="--settings")return na(e.env,"settings",n,s);if(r==="reactivate"||r==="--reactivate"){let i=await j(e.env);if(!i)throw new Error("org_required");return un(i.slug,e.env,"reactivate",{preferDesktopApp:s,forceWeb:n})}throw new Error("invalid_open_target")}async function ir(t){let e=await Ee(t.env);return Wp(e,t.cwd)??JS(e)}function JS(t){let e=t.find(r=>r.current);return e||(t.length===1?t[0]??null:null)}function Wp(t,e){let r=t.filter(n=>n.local_root_path?KS(n.local_root_path,e):false);return r.sort((n,s)=>(s.local_root_path?.length??0)-(n.local_root_path?.length??0)),r[0]??null}function KS(t,e){let r=resolve(t),n=resolve(e),s=relative(r,n);return s===""||!s.startsWith("..")&&!isAbsolute(s)}function VS(t){return {kind:"web",url:(t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,""),label:"Open Pathrule Web",reason:"preferred"}}async function na(t,e,r,n){let s=await j(t);if(!s)throw new Error("org_required");return un(s.slug,t,e,{preferDesktopApp:n,forceWeb:r})}function Bp(t){return t==="team"?"team":t==="upgrade"?"upgrade":t==="reactivate"?"reactivate":"billing"}function da(t,e){return `${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}`}function GS(t,e,r){let n=`${da(t,e)}/settings`;return r==="ai-tools"?`${n}/ai-tools`:n}function Rp(t,e,r,n=false){return {kind:"web",url:GS(t,e,r),label:r==="ai-tools"?"Open AI tools in Pathrule Web":"Open workspace settings in Pathrule Web",reason:n?"forced":"preferred"}}async function Ns(t,e,r={}){return r.preferDesktopApp&&!r.forceWeb?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"forced"}:!r.forceWeb&&await pa(e,"workspace")?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"preferred"}:{kind:"web",url:da(t,e),label:"Open workspace in Pathrule Web",reason:r.forceWeb?"forced":"preferred"}}async function un(t,e,r,n={}){let s=r==="reactivate"?"billing":r,i={slug:t},o=r==="reactivate"?`${Q(i,e,"billing")}/reactivate`:Q(i,e,s),a=r==="billing"?"Open billing in Pathrule Web":r==="members"?"Open team in Pathrule Web":r==="settings"?"Open settings in Pathrule Web":r==="reactivate"?"Open billing reactivation in Pathrule Web":"Open organization in Pathrule Web";if(n.preferDesktopApp&&!n.forceWeb){let c=r==="members"?"team":r;return {kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${c}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"forced"}}let l=r==="members"?"team":r;return !n.forceWeb&&await pa(e,`org:${l}`)?{kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${l}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"preferred"}:{kind:"web",url:o,label:a,reason:n.forceWeb?"forced":"preferred"}}async function pa(t,e,r=Date.now()){let n=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(n==="healthy"||n==="1"||n==="true")return true;if(n==="unhealthy"||n==="0"||n==="false")return false;let s;try{s=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(s.healthy!==true||!s.updated_at)return false;let i=Date.parse(s.updated_at);return !(!Number.isFinite(i)||r-i>600*1e3||s.routes&&!s.routes.includes(e)&&!s.routes.includes("*"))}function sa(t,e){return `${t} / ${e===-1?"unlimited":e}`}async function YS(t,e,r,n){try{let s=e[0]??"list";if(s==="add"){let a=Hp(t,e.slice(1)),l=await ie(zp(t),r.env);if(!l.allowed)return Ls(l,r.stderr,n),1;let c=await qp(t,a,r),u=await oo(t,c,r.env);r.stdout.write(`${g("ok",n)} Created ${t}: ${u.item.title}
504
504
  `),r.stdout.write(`${g("info",n)} Path: ${u.item.path}
505
505
  `),a.open?await $s({kind:t,title:u.item.title,totalResults:1,target:u.item.open_targets[0],runtime:r,mode:n}):r.stdout.write(`${g("info",n)} URL: ${u.item.url}
506
506
  `);for(let d of u.warnings)r.stdout.write(`${g("warn",n)} ${d.message??d.code}
507
507
  `);return 0}let i=js(e.slice(1));if(s==="read"){let a=i.positionals[0];if(!a)return r.stderr.write(`${g("error",n)} Usage: pathrule ${t} read <id-or-title>
508
508
  `),64;let l=await ro(t,a,r.env);return i.open||!_u(l.content,i.print)?(await $s({kind:t,title:l.title,totalResults:1,target:await la(l,i,r.env),runtime:r,mode:n,reason:i.open?void 0:"Content is long, so Pathrule CLI is pointing you to Pathrule Web by default. Pass --print to view it in the terminal."}),0):(r.stdout.write([`${l.kind}: ${l.title}`,`Path: ${l.path??"/"}`,`URL: ${l.url}`,"",l.content,""].join(`
509
509
  `)),0)}if(s!=="list")return r.stderr.write(`${g("error",n)} Usage: pathrule ${t} list|read|add
510
- `),64;let o=await qr(t,r.env,i);if(Fp(r.stdout,n,o),i.open&&o.length>0){let a=await Vp(t,o,r,n);if(!a)return 0;await $s({kind:t,title:a.item.title,totalResults:o.length,selectionIndex:a.index,target:await la(a.item,i,r.env),runtime:r,mode:n});}return 0}catch(s){return s instanceof G?(r.stderr.write(`${g("error",n)} ${s.message}
510
+ `),64;let o=await zr(t,r.env,i);if(Fp(r.stdout,n,o),i.open&&o.length>0){let a=await Vp(t,o,r,n);if(!a)return 0;await $s({kind:t,title:a.item.title,totalResults:o.length,selectionIndex:a.index,target:await la(a.item,i,r.env),runtime:r,mode:n});}return 0}catch(s){return s instanceof Y?(r.stderr.write(`${g("error",n)} ${s.message}
511
511
  `),64):(r.stderr.write(`${g("error",n)} ${s instanceof Error?s.message:String(s)}
512
- `),1)}}async function GS(t,e,r){try{let n=js(t),s=n.positionals.join(" ").trim();if(!s)return e.stderr.write(`${g("error",r)} Usage: pathrule search <query>
512
+ `),1)}}async function XS(t,e,r){try{let n=js(t),s=n.positionals.join(" ").trim();if(!s)return e.stderr.write(`${g("error",r)} Usage: pathrule search <query>
513
513
  `),64;let i=await to(s,e.env,{...n,types:n.types});if(Fp(e.stdout,r,i),n.open&&i.length>0){let o=await Vp("result",i,e,r);if(!o)return 0;await $s({kind:o.item.kind,title:o.item.title,totalResults:i.length,selectionIndex:o.index,target:await la(o.item,n,e.env),runtime:e,mode:r});}return 0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
514
- `),1}}async function YS(t,e,r){let n=t[0]??"list";try{if(n==="list"){let s=Ge(t.slice(1)),i=await on(e.env,{includeInProgress:s.includeInProgress,limit:s.limit});if(sC(e.stdout,r,i),s.open&&i.length>0){let o=i[0];if(!o)return 0;await Tp({target:xs(o,{forceWeb:s.forceWeb,preferDesktopApp:s.preferDesktopApp}),title:o.subjectTitle,totalResults:i.length,runtime:e,mode:r});}return 0}if(n==="claim"){let s=Ge(t.slice(1)),i=await Jo(e.env,s.positionals[0]);return iC(e.stdout,r,i),0}if(n==="resolve"){let s=Ge(t.slice(1)),i=s.positionals[0];if(!i)return e.stderr.write(`${g("error",r)} Usage: pathrule refresh resolve <refresh-id> --status applied|rejected [--note "..."]
514
+ `),1}}async function ZS(t,e,r){let n=t[0]??"list";try{if(n==="list"){let s=Ge(t.slice(1)),i=await an(e.env,{includeInProgress:s.includeInProgress,limit:s.limit});if(oC(e.stdout,r,i),s.open&&i.length>0){let o=i[0];if(!o)return 0;await Tp({target:xs(o,{forceWeb:s.forceWeb,preferDesktopApp:s.preferDesktopApp}),title:o.subjectTitle,totalResults:i.length,runtime:e,mode:r});}return 0}if(n==="claim"){let s=Ge(t.slice(1)),i=await Jo(e.env,s.positionals[0]);return aC(e.stdout,r,i),0}if(n==="resolve"){let s=Ge(t.slice(1)),i=s.positionals[0];if(!i)return e.stderr.write(`${g("error",r)} Usage: pathrule refresh resolve <refresh-id> --status applied|rejected [--note "..."]
515
515
  `),64;if(s.status!=="applied"&&s.status!=="rejected")return e.stderr.write(`${g("error",r)} Usage: pathrule refresh resolve <refresh-id> --status applied|rejected [--note "..."]
516
516
  `),64;let o=await Ko(e.env,i,s.status,{note:s.note});return e.stdout.write(`${g("ok",r)} Refresh task marked ${o.status}.
517
517
  `),o.resolvedNote&&e.stdout.write(`${g("info",r)} Note: ${o.resolvedNote}
518
518
  `),0}if(n==="open"){let s=Ge(t.slice(1)),i=await Vo(e.env,s.positionals[0]);return await Tp({target:xs(i,{forceWeb:s.forceWeb,preferDesktopApp:s.preferDesktopApp}),title:i.subjectTitle,totalResults:1,runtime:e,mode:r}),0}return e.stderr.write(`${g("error",r)} Usage: pathrule refresh list|claim|resolve|open
519
519
  `),64}catch(s){return e.stderr.write(`${g("error",r)} ${s instanceof Error?s.message:String(s)}
520
- `),K(s,"refresh_failed")==="workspace_required",1}}async function XS(t,e){let r=await Zr(t.env,t.cwd),n=Nd(r);t.stdout.write(`Pathrule repair
520
+ `),K(s,"refresh_failed")==="workspace_required",1}}async function QS(t,e){let r=await Qr(t.env,t.cwd),n=Nd(r);t.stdout.write(`Pathrule repair
521
521
  `),t.stdout.write(`${g(n.ok?"ok":"error",e)} ${n.headline}${r.error?`: ${r.error}`:""}
522
522
  `);for(let s of n.sections){t.stdout.write(`
523
523
  ${s.title}
524
524
  `);for(let i of s.lines)t.stdout.write(`${g(s.status==="pass"?"ok":s.status==="warn"?"warn":"error",e)} ${i}
525
525
  `);}return t.stdout.write(`
526
526
  Next: ${n.next_command}
527
- `),n.ok?0:1}async function ZS(t,e,r,n){if((t[0]??"prune")!=="prune")return e.stderr.write(`${g("error",r)} Usage: pathrule cache prune [--yes]
527
+ `),n.ok?0:1}async function eC(t,e,r,n){if((t[0]??"prune")!=="prune")return e.stderr.write(`${g("error",r)} Usage: pathrule cache prune [--yes]
528
528
  `),64;let i=await Do(e.env,{dryRun:!n});return i.dry_run?(e.stdout.write(`${g("warn",r)} Dry run: ${i.candidates.length} stale epoch cache dirs found
529
529
  `),e.stdout.write(`Run pathrule cache prune --yes to remove them.
530
530
  `)):e.stdout.write(`${g("ok",r)} Removed ${i.candidates.filter(o=>o.removed).length} stale epoch cache dirs
531
- `),0}async function QS(t,e,r){try{let n=r[0]??"list";if(n==="add"){let o=Hp(t,r.slice(1)),a=await se(zp(t),e.env);if(!a.allowed){let u=rr(a);return {exitCode:1,envelope:y({command:`${t} add`,cwd:e.cwd,ok:!1,error:{code:a.blocking_reason??"preflight_blocked",message:u.summary,remediation:Ds(u)}})}}let l=await qp(t,o,e),c=await oo(t,l,e.env);return {exitCode:0,envelope:y({command:`${t} add`,cwd:e.cwd,ok:!0,data:{...c,open_target:c.item.open_targets[0]??null}})}}let s=js(r.slice(1)),i=n==="read"?await ro(t,ha(s.positionals[0],`${t}_selector_required`),e.env):await qr(t,e.env,s);return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:!0,data:i})}}catch(n){return {exitCode:n instanceof G?64:1,envelope:y({command:r[0]==="add"?`${t} add`:t,cwd:e.cwd,ok:false,error:{code:K(n,"content_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function eC(t,e){try{let r=js(e),n=ha(r.positionals.join(" ").trim(),"search_query_required"),s=await to(n,t.env,r);return {exitCode:0,envelope:y({command:"search",cwd:t.cwd,ok:!0,data:s})}}catch(r){return {exitCode:1,envelope:y({command:"search",cwd:t.cwd,ok:false,error:{code:"search_failed",message:r instanceof Error?r.message:String(r)}})}}}async function tC(t,e){let r=e[0]??"list";try{if(r==="list"){let n=Ge(e.slice(1)),s=await on(t.env,{includeInProgress:n.includeInProgress,limit:n.limit});return {exitCode:0,envelope:y({command:"refresh list",cwd:t.cwd,ok:!0,data:s})}}if(r==="claim"){let n=Ge(e.slice(1)),s=await Jo(t.env,n.positionals[0]);return {exitCode:0,envelope:y({command:"refresh claim",cwd:t.cwd,ok:!0,data:s})}}if(r==="resolve"){let n=Ge(e.slice(1)),s=ha(n.positionals[0],"refresh_id_required");if(n.status!=="applied"&&n.status!=="rejected")throw new Error("refresh_status_required");let i=await Ko(t.env,s,n.status,{note:n.note});return {exitCode:0,envelope:y({command:"refresh resolve",cwd:t.cwd,ok:!0,data:i})}}if(r==="open"){let n=Ge(e.slice(1)),s=await Vo(t.env,n.positionals[0]),i={refresh:s,open_target:xs(s,{forceWeb:n.forceWeb,preferDesktopApp:n.preferDesktopApp})};return {exitCode:0,envelope:y({command:"refresh open",cwd:t.cwd,ok:!0,data:i})}}return {exitCode:64,envelope:y({command:"refresh",cwd:t.cwd,ok:!1,error:{code:"usage",message:"Usage: pathrule refresh list|claim|resolve|open"}})}}catch(n){let s=K(n,"refresh_failed");return {exitCode:s==="refresh_id_required"||s==="refresh_status_required"?64:1,envelope:y({command:r==="list"?"refresh list":`refresh ${r}`,cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n),remediation:s==="workspace_required"?[{label:"Select a workspace",command:"pathrule workspace use <name-or-id>"}]:void 0}})}}}async function rC(t){let e=await Zr(t.env,t.cwd);return {exitCode:e.ok?0:1,envelope:y({command:"repair",cwd:t.cwd,ok:e.ok,data:e.ok?e:void 0,error:e.ok?void 0:{code:"repair_failed",message:e.error??"Repair incomplete"}})}}async function nC(t,e,r){if((e[0]??"prune")!=="prune")return {exitCode:64,envelope:y({command:"cache",cwd:t.cwd,ok:false,error:{code:"usage",message:"Usage: pathrule cache prune [--yes]"}})};let s=await Do(t.env,{dryRun:!r});return {exitCode:0,envelope:y({command:"cache",cwd:t.cwd,ok:true,data:s})}}function Fp(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No content found.
531
+ `),0}async function tC(t,e,r){try{let n=r[0]??"list";if(n==="add"){let o=Hp(t,r.slice(1)),a=await ie(zp(t),e.env);if(!a.allowed){let u=rr(a);return {exitCode:1,envelope:y({command:`${t} add`,cwd:e.cwd,ok:!1,error:{code:a.blocking_reason??"preflight_blocked",message:u.summary,remediation:Ds(u)}})}}let l=await qp(t,o,e),c=await oo(t,l,e.env);return {exitCode:0,envelope:y({command:`${t} add`,cwd:e.cwd,ok:!0,data:{...c,open_target:c.item.open_targets[0]??null}})}}let s=js(r.slice(1)),i=n==="read"?await ro(t,ha(s.positionals[0],`${t}_selector_required`),e.env):await zr(t,e.env,s);return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:!0,data:i})}}catch(n){return {exitCode:n instanceof Y?64:1,envelope:y({command:r[0]==="add"?`${t} add`:t,cwd:e.cwd,ok:false,error:{code:K(n,"content_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function rC(t,e){try{let r=js(e),n=ha(r.positionals.join(" ").trim(),"search_query_required"),s=await to(n,t.env,r);return {exitCode:0,envelope:y({command:"search",cwd:t.cwd,ok:!0,data:s})}}catch(r){return {exitCode:1,envelope:y({command:"search",cwd:t.cwd,ok:false,error:{code:"search_failed",message:r instanceof Error?r.message:String(r)}})}}}async function nC(t,e){let r=e[0]??"list";try{if(r==="list"){let n=Ge(e.slice(1)),s=await an(t.env,{includeInProgress:n.includeInProgress,limit:n.limit});return {exitCode:0,envelope:y({command:"refresh list",cwd:t.cwd,ok:!0,data:s})}}if(r==="claim"){let n=Ge(e.slice(1)),s=await Jo(t.env,n.positionals[0]);return {exitCode:0,envelope:y({command:"refresh claim",cwd:t.cwd,ok:!0,data:s})}}if(r==="resolve"){let n=Ge(e.slice(1)),s=ha(n.positionals[0],"refresh_id_required");if(n.status!=="applied"&&n.status!=="rejected")throw new Error("refresh_status_required");let i=await Ko(t.env,s,n.status,{note:n.note});return {exitCode:0,envelope:y({command:"refresh resolve",cwd:t.cwd,ok:!0,data:i})}}if(r==="open"){let n=Ge(e.slice(1)),s=await Vo(t.env,n.positionals[0]),i={refresh:s,open_target:xs(s,{forceWeb:n.forceWeb,preferDesktopApp:n.preferDesktopApp})};return {exitCode:0,envelope:y({command:"refresh open",cwd:t.cwd,ok:!0,data:i})}}return {exitCode:64,envelope:y({command:"refresh",cwd:t.cwd,ok:!1,error:{code:"usage",message:"Usage: pathrule refresh list|claim|resolve|open"}})}}catch(n){let s=K(n,"refresh_failed");return {exitCode:s==="refresh_id_required"||s==="refresh_status_required"?64:1,envelope:y({command:r==="list"?"refresh list":`refresh ${r}`,cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n),remediation:s==="workspace_required"?[{label:"Select a workspace",command:"pathrule workspace use <name-or-id>"}]:void 0}})}}}async function sC(t){let e=await Qr(t.env,t.cwd);return {exitCode:e.ok?0:1,envelope:y({command:"repair",cwd:t.cwd,ok:e.ok,data:e.ok?e:void 0,error:e.ok?void 0:{code:"repair_failed",message:e.error??"Repair incomplete"}})}}async function iC(t,e,r){if((e[0]??"prune")!=="prune")return {exitCode:64,envelope:y({command:"cache",cwd:t.cwd,ok:false,error:{code:"usage",message:"Usage: pathrule cache prune [--yes]"}})};let s=await Do(t.env,{dryRun:!r});return {exitCode:0,envelope:y({command:"cache",cwd:t.cwd,ok:true,data:s})}}function Fp(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No content found.
532
532
  `);return}for(let n of r)t.write([`${n.kind.padEnd(6)} ${n.title}`,` ${n.path??"/"} ${n.updated_at??""}`,n.preview?` ${n.preview}`:"",` ${n.url}`].filter(Boolean).join(`
533
533
  `)+`
534
- `);}function sC(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No pending refresh tasks.
534
+ `);}function oC(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No pending refresh tasks.
535
535
  `);return}for(let n of r)t.write([`${n.status.padEnd(11)} ${n.subjectTitle}`,` ${n.subjectType} ${n.nodePath} ${n.formulaId}`,` ${n.humanReason}`,` ${n.url}`].filter(Boolean).join(`
536
536
  `)+`
537
- `);}function iC(t,e,r){let n=r.brief.subject,s=r.brief.signal;t.write([`${g("ok",e)} Claimed refresh task ${r.id}`,`Subject: ${n?.type??r.subjectType} ${n?.title??r.subjectId}`,`Path: ${n?.nodePath??"/"}`,`Reason: ${s?.humanReason??r.formulaId}`,"",r.brief.aiInstructions?`Instructions:
537
+ `);}function aC(t,e,r){let n=r.brief.subject,s=r.brief.signal;t.write([`${g("ok",e)} Claimed refresh task ${r.id}`,`Subject: ${n?.type??r.subjectType} ${n?.title??r.subjectId}`,`Path: ${n?.nodePath??"/"}`,`Reason: ${s?.humanReason??r.formulaId}`,"",r.brief.aiInstructions?`Instructions:
538
538
  ${r.brief.aiInstructions}`:"",r.brief.proposedPatch?.newBody?`
539
539
  Proposed patch: ${r.brief.proposedPatch.reasoning} (confidence ${r.brief.proposedPatch.confidence})`:"","",`Next: update the ${r.subjectType}, then run pathrule refresh resolve ${r.id} --status applied`,`URL: ${r.url}`].filter(i=>i!=="").join(`
540
540
  `)+`
541
- `);}function js(t){let e={open:false,print:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];n==="--path"?e.path=t[++r]:n==="--limit"?e.limit=Number(t[++r]):n==="--type"?e.types=oC(t[++r]):n==="--open"?e.open=true:n==="--print"?e.print=true:n==="--web"?e.forceWeb=true:n==="--desktop-app"?e.preferDesktopApp=true:n?.startsWith("/")&&e.positionals.length===0&&!e.path?e.path=n:n&&e.positionals.push(n);}return e}function Ge(t){let e={includeInProgress:false,open:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];if(n){if(n==="--all"||n==="--include-in-progress"){e.includeInProgress=true;continue}if(n==="--limit"){e.limit=Number(t[++r]);continue}if(n==="--open"){e.open=true;continue}if(n==="--web"){e.forceWeb=true;continue}if(n==="--desktop-app"){e.preferDesktopApp=true;continue}if(n==="--status"){let s=t[++r];(s==="applied"||s==="rejected")&&(e.status=s);continue}if(n==="--note"){e.note=t[++r]??"";continue}e.positionals.push(n);}}return e}function Hp(t,e){let r={allowDuplicate:false,open:false,positionals:[]};for(let n=0;n<e.length;n+=1){let s=e[n];if(s){if(s==="--path"){r.path=Tt(e[++n],"--path","content_path_required");continue}if(s==="--title"){r.title=Tt(e[++n],"--title",`${t}_title_required`);continue}if(s==="--name"){r.name=Tt(e[++n],"--name",`${t}_name_required`);continue}if(s==="--description"){r.description=Tt(e[++n],"--description","skill_description_required");continue}if(s==="--body"){r.body=Tt(e[++n],"--body","content_body_required");continue}if(s==="--priority"){r.priority=Tt(e[++n],"--priority","rule_priority_required");continue}if(s==="--scope"){r.scope=Tt(e[++n],"--scope","rule_scope_required");continue}if(s==="--allow-duplicate"){r.allowDuplicate=true;continue}if(s==="--open"){r.open=true;continue}if(s?.startsWith("/")&&r.positionals.length===0&&!r.path){r.path=s;continue}if(s.startsWith("--"))throw new G("unknown_content_option",`Unknown ${t} option "${s}".`);r.positionals.push(s);}}if(t==="memory"?r.positionals.length>0&&!r.title&&(r.title=r.positionals.shift()):r.positionals.length>0&&!r.name&&(r.name=r.positionals.shift()),r.positionals.length>0)throw new G("unexpected_content_argument",`Unexpected extra argument "${r.positionals[0]}".`);return r}async function qp(t,e,r){let n=e.path?.trim();if(!n)throw new G("content_path_required",As(t));if(t==="memory"){let i=e.title?.trim();if(!i)throw new G("memory_title_required",As(t));return {path:n,title:i,body:await ia(r,t,{path:n,title:i,body:e.body??""}),allowDuplicate:e.allowDuplicate}}if(t==="rule"){let i=e.name?.trim();if(!i)throw new G("rule_name_required",As(t));return {path:n,name:i,body:await ia(r,t,{path:n,name:i,body:e.body??"",priority:xp(e.priority),scopeType:Pp(e.scope)}),priority:xp(e.priority),scopeType:Pp(e.scope),allowDuplicate:e.allowDuplicate}}let s=e.name?.trim();if(!s)throw new G("skill_name_required",As(t));return {path:n,name:s,description:e.description?.trim()||null,body:await ia(r,t,{path:n,name:s,description:e.description?.trim()||null,body:e.body??""})}}async function ia(t,e,r){if("body"in r&&typeof r.body=="string"&&r.body.trim())return oa(r.body);if(!(t.stdinIsTTY??process.stdin.isTTY??true)){let a=t.readStdin?await t.readStdin():await cC();return oa(a)}let s=yu(e,r),i=e==="skill"?"SKILL.md":`${e}.md`,o=t.editText?await t.editText(s,i):await uC(t,s,i);return oa(o)}function xp(t){let e=t?.trim().toLowerCase()||"medium";if(e==="high"||e==="medium"||e==="low")return e;throw new G("invalid_rule_priority","Rule priority must be high, medium, or low.")}function Pp(t){let e=t?.trim().toLowerCase()||"project";if(e==="folder"||e==="file_type"||e==="project")return e;throw new G("invalid_rule_scope","Rule scope must be folder, file_type, or project.")}function Tt(t,e,r){if(!t)throw new G(r,`${e} requires a value.`);return t}function oa(t){let e=t.replace(/\r\n/g,`
542
- `);if(!e.trim())throw new G("content_body_required","Content body is required. Pass --body, pipe stdin, or save content in your editor.");return e}function As(t){return t==="memory"?"Usage: pathrule memory add --path </node/path> --title <title> [--body <text>] [--allow-duplicate] [--open]":t==="rule"?"Usage: pathrule rule add --path </node/path> --name <name> [--body <text>] [--priority high|medium|low] [--scope project|folder|file_type] [--allow-duplicate] [--open]":"Usage: pathrule skill add --path </node/path> --name <name> [--description <text>] [--body <text>] [--open]"}function zp(t){return t==="memory"?"write_memory":t==="rule"?"write_rule":"write_skill"}function oC(t){if(!t)return [];let e=new Set(["memory","rule","skill"]);return t.split(",").map(r=>r.trim()).filter(r=>e.has(r))}function ha(t,e){if(!t)throw new Error(e);return t}async function aC(t,e,r,n){try{if(t==="current"){let i=await j(r.env);return i?(r.stdout.write(`${g("ok",n)} ${i.name} (${i.slug}) \u2014 ${i.role}
541
+ `);}function js(t){let e={open:false,print:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];n==="--path"?e.path=t[++r]:n==="--limit"?e.limit=Number(t[++r]):n==="--type"?e.types=lC(t[++r]):n==="--open"?e.open=true:n==="--print"?e.print=true:n==="--web"?e.forceWeb=true:n==="--desktop-app"?e.preferDesktopApp=true:n?.startsWith("/")&&e.positionals.length===0&&!e.path?e.path=n:n&&e.positionals.push(n);}return e}function Ge(t){let e={includeInProgress:false,open:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];if(n){if(n==="--all"||n==="--include-in-progress"){e.includeInProgress=true;continue}if(n==="--limit"){e.limit=Number(t[++r]);continue}if(n==="--open"){e.open=true;continue}if(n==="--web"){e.forceWeb=true;continue}if(n==="--desktop-app"){e.preferDesktopApp=true;continue}if(n==="--status"){let s=t[++r];(s==="applied"||s==="rejected")&&(e.status=s);continue}if(n==="--note"){e.note=t[++r]??"";continue}e.positionals.push(n);}}return e}function Hp(t,e){let r={allowDuplicate:false,open:false,positionals:[]};for(let n=0;n<e.length;n+=1){let s=e[n];if(s){if(s==="--path"){r.path=Tt(e[++n],"--path","content_path_required");continue}if(s==="--title"){r.title=Tt(e[++n],"--title",`${t}_title_required`);continue}if(s==="--name"){r.name=Tt(e[++n],"--name",`${t}_name_required`);continue}if(s==="--description"){r.description=Tt(e[++n],"--description","skill_description_required");continue}if(s==="--body"){r.body=Tt(e[++n],"--body","content_body_required");continue}if(s==="--priority"){r.priority=Tt(e[++n],"--priority","rule_priority_required");continue}if(s==="--scope"){r.scope=Tt(e[++n],"--scope","rule_scope_required");continue}if(s==="--allow-duplicate"){r.allowDuplicate=true;continue}if(s==="--open"){r.open=true;continue}if(s?.startsWith("/")&&r.positionals.length===0&&!r.path){r.path=s;continue}if(s.startsWith("--"))throw new Y("unknown_content_option",`Unknown ${t} option "${s}".`);r.positionals.push(s);}}if(t==="memory"?r.positionals.length>0&&!r.title&&(r.title=r.positionals.shift()):r.positionals.length>0&&!r.name&&(r.name=r.positionals.shift()),r.positionals.length>0)throw new Y("unexpected_content_argument",`Unexpected extra argument "${r.positionals[0]}".`);return r}async function qp(t,e,r){let n=e.path?.trim();if(!n)throw new Y("content_path_required",As(t));if(t==="memory"){let i=e.title?.trim();if(!i)throw new Y("memory_title_required",As(t));return {path:n,title:i,body:await ia(r,t,{path:n,title:i,body:e.body??""}),allowDuplicate:e.allowDuplicate}}if(t==="rule"){let i=e.name?.trim();if(!i)throw new Y("rule_name_required",As(t));return {path:n,name:i,body:await ia(r,t,{path:n,name:i,body:e.body??"",priority:xp(e.priority),scopeType:Pp(e.scope)}),priority:xp(e.priority),scopeType:Pp(e.scope),allowDuplicate:e.allowDuplicate}}let s=e.name?.trim();if(!s)throw new Y("skill_name_required",As(t));return {path:n,name:s,description:e.description?.trim()||null,body:await ia(r,t,{path:n,name:s,description:e.description?.trim()||null,body:e.body??""})}}async function ia(t,e,r){if("body"in r&&typeof r.body=="string"&&r.body.trim())return oa(r.body);if(!(t.stdinIsTTY??process.stdin.isTTY??true)){let a=t.readStdin?await t.readStdin():await dC();return oa(a)}let s=yu(e,r),i=e==="skill"?"SKILL.md":`${e}.md`,o=t.editText?await t.editText(s,i):await pC(t,s,i);return oa(o)}function xp(t){let e=t?.trim().toLowerCase()||"medium";if(e==="high"||e==="medium"||e==="low")return e;throw new Y("invalid_rule_priority","Rule priority must be high, medium, or low.")}function Pp(t){let e=t?.trim().toLowerCase()||"project";if(e==="folder"||e==="file_type"||e==="project")return e;throw new Y("invalid_rule_scope","Rule scope must be folder, file_type, or project.")}function Tt(t,e,r){if(!t)throw new Y(r,`${e} requires a value.`);return t}function oa(t){let e=t.replace(/\r\n/g,`
542
+ `);if(!e.trim())throw new Y("content_body_required","Content body is required. Pass --body, pipe stdin, or save content in your editor.");return e}function As(t){return t==="memory"?"Usage: pathrule memory add --path </node/path> --title <title> [--body <text>] [--allow-duplicate] [--open]":t==="rule"?"Usage: pathrule rule add --path </node/path> --name <name> [--body <text>] [--priority high|medium|low] [--scope project|folder|file_type] [--allow-duplicate] [--open]":"Usage: pathrule skill add --path </node/path> --name <name> [--description <text>] [--body <text>] [--open]"}function zp(t){return t==="memory"?"write_memory":t==="rule"?"write_rule":"write_skill"}function lC(t){if(!t)return [];let e=new Set(["memory","rule","skill"]);return t.split(",").map(r=>r.trim()).filter(r=>e.has(r))}function ha(t,e){if(!t)throw new Error(e);return t}async function cC(t,e,r,n){try{if(t==="current"){let i=await j(r.env);return i?(r.stdout.write(`${g("ok",n)} ${i.name} (${i.slug}) \u2014 ${i.role}
543
543
  `),0):(r.stdout.write(`${g("warn",n)} No organizations found.
544
544
  `),1)}if(t==="use"){let i=e[0];if(!i)return r.stderr.write(`${g("error",n)} Usage: pathrule org use <slug-or-id>
545
545
  `),64;let o=await ns(i,r.env);return r.stdout.write(`${g("ok",n)} Current organization: ${o.name}
546
546
  `),0}if(t==="open"){let i=await j(r.env);if(!i)return r.stderr.write(`${g("error",n)} No current organization. Run pathrule org use <slug-or-id>.
547
- `),1;let o=Jp(e[0]),a=Z(i,r.env,o);return n.interactive&&!n.noOpen?(await Le(r,a),r.stdout.write(`${g("ok",n)} Opened ${a}
547
+ `),1;let o=Jp(e[0]),a=Q(i,r.env,o);return n.interactive&&!n.noOpen?(await Le(r,a),r.stdout.write(`${g("ok",n)} Opened ${a}
548
548
  `)):r.stdout.write(`${a}
549
549
  `),0}if(t!=="list")return r.stderr.write(`${g("error",n)} Unknown org command "${t}".
550
- `),64;let s=await fe(r.env);return s.length===0?(r.stdout.write(`${g("warn",n)} No organizations found.
550
+ `),64;let s=await ge(r.env);return s.length===0?(r.stdout.write(`${g("warn",n)} No organizations found.
551
551
  `),0):(r.stdout.write(s.map(i=>`${i.current?"*":" "} ${i.slug} ${i.role} ${i.name}`).join(`
552
552
  `)+`
553
553
  `),0)}catch(s){return r.stderr.write(`${g("error",n)} ${s instanceof Error?s.message:String(s)}
554
- `),1}}function Jp(t){if(!t||t==="home")return "home";if(t==="billing"||t==="settings"||t==="members")return t;throw new Error("invalid_org_open_target")}function Kp(t){let e=false,r,n=false,s=false;for(let i=0;i<t.length;i+=1){let o=t[i];if(o){if(o==="open"||o==="--open"){e=true;continue}if(o==="--org"){r=t[++i];continue}if(o==="--desktop-app"){n=true;continue}if(o==="--web"){s=true;continue}throw new Error(`unknown_team_option:${o}`)}}return {open:e,orgSelector:r,preferDesktopApp:n,forceWeb:s}}async function lC(t){if(process.platform==="darwin"){await Os("open",[t]);return}if(process.platform==="win32"){await Os("cmd",["/c","start","",t]);return}await Os("xdg-open",[t]);}async function Le(t,e){if(t.openUrl){await t.openUrl(e);return}await lC(e);}async function cC(){return new Promise((t,e)=>{let r="";process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{r+=n;}),process.stdin.on("end",()=>t(r)),process.stdin.on("error",e);})}async function uC(t,e,r){let n=t.env.VISUAL?.trim()||t.env.EDITOR?.trim();if(!n)throw new G("editor_required","Set $EDITOR or pass --body / stdin for this command.");let s=await mkdtemp(join(tmpdir(),"pathrule-cli-edit-")),i=join(s,r);await writeFile(i,e,"utf8");try{return await dC(n,i,t.env),await readFile(i,"utf8")}finally{await rm$1(s,{recursive:true,force:true});}}async function dC(t,e,r){let n=`${t} ${JSON.stringify(e)}`;await new Promise((s,i)=>{let o=spawn(n,{env:r,shell:true,stdio:"inherit"});o.once("error",i),o.once("exit",a=>{if(a===0){s();return}i(new Error(`editor_exit_${a??"signal"}`));});});}async function la(t,e,r){return wu(t,{forceWeb:e.forceWeb,preferDesktopApp:e.preferDesktopApp||!e.forceWeb&&await pa(r,"workspace")})}async function Vp(t,e,r,n){let s=e[0];if(!s)return null;if(e.length===1||!pC(r,n))return {item:s,index:1};let i=(await dn(r,`Select ${t} to open [1-${e.length}] (Enter for 1): `)).trim();if(!i)return {item:s,index:1};let o=Number(i);return !Number.isInteger(o)||o<1||o>e.length?(r.stdout.write(`${g("warn",n)} Invalid selection; opening the top match.
555
- `),{item:s,index:1}):{item:e[o-1],index:o}}function pC(t,e){return !e.interactive||e.noOpen?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function hC(t,e){return !e.interactive||e.json?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function Gp(t,e){return !e.interactive||e.json||t.promptLine||process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}async function un(t,e,r){let n=" [Y/n]: ";if(!t.promptLine&&process.stdin.isTTY&&process.stdout.isTTY)return fC(e,n,r);let s=(await dn(t,`${e}${n}`)).trim().toLowerCase();return s?s==="y"||s==="yes":r}async function fC(t,e,r){let n=process.stdin,s=process.stdout,i=n.isPaused();s.write(`${t}${e}`),n.isTTY&&n.setRawMode(true),n.resume();try{return await new Promise((o,a)=>{let l=!1,c=()=>{n.off("data",d),n.isTTY&&n.setRawMode(!1),n.pause();},u=(p,h)=>{l||(l=!0,s.write(`${h}
554
+ `),1}}function Jp(t){if(!t||t==="home")return "home";if(t==="billing"||t==="settings"||t==="members")return t;throw new Error("invalid_org_open_target")}function Kp(t){let e=false,r,n=false,s=false;for(let i=0;i<t.length;i+=1){let o=t[i];if(o){if(o==="open"||o==="--open"){e=true;continue}if(o==="--org"){r=t[++i];continue}if(o==="--desktop-app"){n=true;continue}if(o==="--web"){s=true;continue}throw new Error(`unknown_team_option:${o}`)}}return {open:e,orgSelector:r,preferDesktopApp:n,forceWeb:s}}async function uC(t){if(process.platform==="darwin"){await Os("open",[t]);return}if(process.platform==="win32"){await Os("cmd",["/c","start","",t]);return}await Os("xdg-open",[t]);}async function Le(t,e){if(t.openUrl){await t.openUrl(e);return}await uC(e);}async function dC(){return new Promise((t,e)=>{let r="";process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{r+=n;}),process.stdin.on("end",()=>t(r)),process.stdin.on("error",e);})}async function pC(t,e,r){let n=t.env.VISUAL?.trim()||t.env.EDITOR?.trim();if(!n)throw new Y("editor_required","Set $EDITOR or pass --body / stdin for this command.");let s=await mkdtemp(join(tmpdir(),"pathrule-cli-edit-")),i=join(s,r);await writeFile(i,e,"utf8");try{return await hC(n,i,t.env),await readFile(i,"utf8")}finally{await rm$1(s,{recursive:true,force:true});}}async function hC(t,e,r){let n=`${t} ${JSON.stringify(e)}`;await new Promise((s,i)=>{let o=spawn(n,{env:r,shell:true,stdio:"inherit"});o.once("error",i),o.once("exit",a=>{if(a===0){s();return}i(new Error(`editor_exit_${a??"signal"}`));});});}async function la(t,e,r){return wu(t,{forceWeb:e.forceWeb,preferDesktopApp:e.preferDesktopApp||!e.forceWeb&&await pa(r,"workspace")})}async function Vp(t,e,r,n){let s=e[0];if(!s)return null;if(e.length===1||!fC(r,n))return {item:s,index:1};let i=(await lr(r,`Select ${t} to open [1-${e.length}] (Enter for 1): `)).trim();if(!i)return {item:s,index:1};let o=Number(i);return !Number.isInteger(o)||o<1||o>e.length?(r.stdout.write(`${g("warn",n)} Invalid selection; opening the top match.
555
+ `),{item:s,index:1}):{item:e[o-1],index:o}}function fC(t,e){return !e.interactive||e.noOpen?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function gC(t,e){return !e.interactive||e.json?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function Gp(t,e){return !e.interactive||e.json||t.promptLine||process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}async function dn(t,e,r){let n=" [Y/n]: ";if(!t.promptLine&&process.stdin.isTTY&&process.stdout.isTTY)return mC(e,n,r);let s=(await lr(t,`${e}${n}`)).trim().toLowerCase();return s?s==="y"||s==="yes":r}async function mC(t,e,r){let n=process.stdin,s=process.stdout,i=n.isPaused();s.write(`${t}${e}`),n.isTTY&&n.setRawMode(true),n.resume();try{return await new Promise((o,a)=>{let l=!1,c=()=>{n.off("data",d),n.isTTY&&n.setRawMode(!1),n.pause();},u=(p,h)=>{l||(l=!0,s.write(`${h}
556
556
  `),c(),o(p));},d=p=>{let h=p.toString("utf8");if(h.includes("")){if(l)return;l=!0,c(),s.write(`
557
557
  `),a(new Error("setup_canceled"));return}if(h.includes("\r")||h.includes(`
558
- `)){u(r,r?"Y":"N");return}if(/[yY]/.test(h)){u(!0,"Y");return}/[nN]/.test(h)&&u(!1,"N");};n.on("data",d);})}finally{n.isTTY&&n.setRawMode(false),(i||!n.isPaused())&&n.pause();}}async function dn(t,e){if(t.promptLine)return t.promptLine(e);let r=createInterface({input:process.stdin,output:process.stdout});try{return await r.question(e)}finally{r.close();}}async function $s(t){let{runtime:e,mode:r,target:n,title:s,totalResults:i,kind:o,reason:a,selectionIndex:l}=t;if(a&&e.stdout.write(`${g("info",r)} ${a}
558
+ `)){u(r,r?"Y":"N");return}if(/[yY]/.test(h)){u(!0,"Y");return}/[nN]/.test(h)&&u(!1,"N");};n.on("data",d);})}finally{n.isTTY&&n.setRawMode(false),(i||!n.isPaused())&&n.pause();}}async function lr(t,e){if(t.promptLine)return t.promptLine(e);let r=createInterface({input:process.stdin,output:process.stdout});try{return await r.question(e)}finally{r.close();}}async function $s(t){let{runtime:e,mode:r,target:n,title:s,totalResults:i,kind:o,reason:a,selectionIndex:l}=t;if(a&&e.stdout.write(`${g("info",r)} ${a}
559
559
  `),n.reason==="fallback"&&n.kind==="web"&&e.stdout.write(`${g("info",r)} Pathrule Desktop deep link is not available yet; falling back to Pathrule Web.
560
560
  `),i>1&&l&&l>1?e.stdout.write(`${g("info",r)} Opening selected ${o} match (${s}) #${l} of ${i}.
561
561
  `):i>1&&e.stdout.write(`${g("info",r)} Opening the top ${o} match (${s}) out of ${i} results.
@@ -572,12 +572,12 @@ Proposed patch: ${r.brief.proposedPatch.reasoning} (confidence ${r.brief.propose
572
572
  `);for(let s of n.details)e.write(`${s}
573
573
  `);n.url&&e.write(`${n.url}
574
574
  `),n.suggested_command_after_resolution&&e.write(`Then retry: ${n.suggested_command_after_resolution}
575
- `);}async function or(t,e){!e.interactive||!(await mt("suggestions.desktop",t.env).catch(()=>({value:true}))).value||t.stdout.write(["",F.desktop,`${g("info",e)} For a visual workspace, tray notifications, and the all-in-one local app, install ${F.desktop}.`,`Download: ${gC(t.env)}`,""].join(`
576
- `));}function gC(t){let e=t.PATHRULE_DESKTOP_DOWNLOAD_URL?.trim();return e&&e.length>0?e:"https://pathrule.io/download"}async function Yp(t,e,r=false){try{if(e.interactive&&r&&!e.noOpen)try{let s=await Fc({env:t.env,openUrl:i=>Le(t,i),onOpen:({redirectUri:i})=>{t.stdout.write(["Pathrule CLI login",`${g("info",e)} Opening your browser for GitHub sign-in.`,`Listening for callback at ${i}`,""].join(`
577
- `));}});return t.stdout.write(`${g("ok",e)} Signed in as ${s.session.user.email??s.session.user.id}
578
- `),await Ye(t,e),0}catch(s){if(!(s instanceof ve))throw s;t.stderr.write(`${g("warn",e)} Browser callback login unavailable (${s.code}); falling back to hosted login.
579
- `);}let n=await Bi({env:t.env,fetch:t.fetch??fetch,sleep:t.sleep??Xp,onPending:({userCode:s,verificationUri:i})=>{let o=mC(i,s);e.interactive&&!e.noOpen&&Le(t,o).catch(()=>{}),t.stdout.write(["Pathrule CLI login",`${g("info",e)} One-time code: ${s}`,e.interactive&&!e.noOpen?`A browser window should open. If not, visit ${o}.`:`Visit ${o} on any browser to authorize this terminal.`,"Waiting for authorization...",""].join(`
575
+ `);}async function or(t,e){!e.interactive||!(await mt("suggestions.desktop",t.env).catch(()=>({value:true}))).value||t.stdout.write(["",F.desktop,`${g("info",e)} For a visual workspace, tray notifications, and the all-in-one local app, install ${F.desktop}.`,`Download: ${_C(t.env)}`,""].join(`
576
+ `));}function _C(t){let e=t.PATHRULE_DESKTOP_DOWNLOAD_URL?.trim();return e&&e.length>0?e:"https://pathrule.io/download"}async function Yp(t,e,r=false){try{if(e.interactive&&r&&!e.noOpen)try{let s=await Fc({env:t.env,openUrl:i=>Le(t,i),onOpen:({redirectUri:i})=>{t.stdout.write(["Pathrule CLI login",`${g("info",e)} Opening your browser for GitHub sign-in.`,`Listening for callback at ${i}`,""].join(`
577
+ `));},promptMfaCode:i=>lr(t,i)});return t.stdout.write(`${g("ok",e)} Signed in as ${s.session.user.email??s.session.user.id}
578
+ `),await Ye(t,e),0}catch(s){if(!(s instanceof G))throw s;t.stderr.write(`${g("warn",e)} Browser callback login unavailable (${s.code}); falling back to hosted login.
579
+ `);}let n=await Bi({env:t.env,fetch:t.fetch??fetch,sleep:t.sleep??Xp,onPending:({userCode:s,verificationUri:i})=>{let o=wC(i,s);e.interactive&&!e.noOpen&&Le(t,o).catch(()=>{}),t.stdout.write(["Pathrule CLI login",`${g("info",e)} One-time code: ${s}`,e.interactive&&!e.noOpen?`A browser window should open. If not, visit ${o}.`:`Visit ${o} on any browser to authorize this terminal.`,"Waiting for authorization...",""].join(`
580
580
  `));}});return t.stdout.write(`${g("ok",e)} Signed in as ${n.session.user.email??n.session.user.id}
581
581
  `),await Ye(t,e),0}catch(n){let s=n instanceof Error?n.message:String(n);return t.stderr.write(`${g("error",e)} ${s}
582
- `),1}}function mC(t,e){try{let r=new URL(t);return r.searchParams.set("code",e),r.toString()}catch{return t}}async function _C(t,e){let n=(await Hi(t.env)).removed_sessions,s=n>0?g("ok",e):g("info",e);return t.stdout.write(`${s} ${n>0?"Signed out.":"Already signed out."}
583
- `),await $S(t,e),0}function Xp(t){return new Promise(e=>setTimeout(e,t))}function K(t,e){return t&&typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:t instanceof Error?t.message:e}function Zp(t){return t.replace(/\/+$/,"").split("/").filter(Boolean).pop()||"Workspace"}Np(process.argv.slice(2),{cwd:process.cwd(),env:process.env,stdout:process.stdout,stderr:process.stderr}).then(t=>{process.exitCode=t;});
582
+ `),1}}function wC(t,e){try{let r=new URL(t);return r.searchParams.set("code",e),r.toString()}catch{return t}}async function yC(t,e){let n=(await Hi(t.env)).removed_sessions,s=n>0?g("ok",e):g("info",e);return t.stdout.write(`${s} ${n>0?"Signed out.":"Already signed out."}
583
+ `),await jS(t,e),0}function Xp(t){return new Promise(e=>setTimeout(e,t))}function K(t,e){return t&&typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:t instanceof Error?t.message:e}function Zp(t){return t.replace(/\/+$/,"").split("/").filter(Boolean).pop()||"Workspace"}Np(process.argv.slice(2),{cwd:process.cwd(),env:process.env,stdout:process.stdout,stderr:process.stderr}).then(t=>{process.exitCode=t;});