/proc/thread-self/root/proc/self/root/proc/thread-self/root/proc/1/root/opt/rust
This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.
const { process } = globalThis;"use strict";var Y=(i,t,e)=>{if(!t.has(i))throw TypeError("Cannot "+e)};var g=(i,t,e)=>(Y(i,t,"read from private field"),e?e.call(i):t.get(i)),A=(i,t,e)=>{if(t.has(i))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(i):t.set(i,e)},se=(i,t,e,r)=>(Y(i,t,"write to private field"),r?r.call(i,e):t.set(i,e),e);var E=(i,t,e)=>(Y(i,t,"access private method"),e);function H(){let i,t;return{promise:new Promise((r,n)=>{i=r,t=n}),resolve:i,reject:t}}var W="x-vercel-sc-headers",Z="x-vercel-sc-host",ne="x-vercel-sc-basepath";var Ce=typeof process<"u"?process.env:{},f=!!Ce.NEXT_PRIVATE_DEBUG_CACHE;function l(){return performance.timeOrigin+performance.now()}async function G(i,t,e=0){let r=new AbortController,n=setTimeout(()=>{r.abort()},500);return fetch(i,{...t||{},signal:r.signal}).catch(s=>{if(e===3)throw s;return f&&console.log(`Fetch failed for ${i} retry ${e}`),G(i,t,e+1)}).finally(()=>{clearTimeout(n)})}function x(){let i=globalThis[Symbol.for("@vercel/request-context")].get();if(!i)return console.warn("No request context available"),null;if(!i.headers[Z])return console.warn("No cache host available"),null;let t=i.headers[Z],r=`${t.match(/^localhost:\d+$/)?"http":"https"}://${t}${i.headers[ne]??""}`,n={};if(i.headers[W])try{n=JSON.parse(i.headers[W])}catch{return console.error("Failed to parse suspense cache headers"),null}return n["Content-Type"]="application/json",{ctx:i,scHeaders:n,scEndpoint:r}}async function ae(i){let t="",e=0,r=i.getReader();for(;;){let{done:n,value:s}=await r.read();if(n)break;t+=new TextDecoder().decode(s),e+=s.byteLength}return{data:t,size:e}}function ie(i){return new ReadableStream({start:t=>{t.enqueue(new TextEncoder().encode(i)),t.close()}})}function P(i){let t=i+":";return{debug:f?console.debug.bind(console,t):()=>{},warn:console.warn.bind(console,t),error:console.error.bind(console,t)}}async function w(i,t,e){let r=t.get(i);if(r)return r;let{promise:n,resolve:s,reject:a}=H();t.set(i,n);try{let o=await e();s(o)}catch(o){a(o)}finally{t.delete(i)}return n}var oe="x-next-cache-soft-tags",_="x-vercel-cache-tags",ce="x-vercel-cache-state",$="x-vercel-revalidate",k="x-vercel-cache-item-name",de="x-vercel-cache-control",le="x-vercel-internal-sc-client-name",he="x-vercel-internal-sc-client-origin";var M=class{constructor(t,e){this.cache=new Map,this.sizes=new Map,this.totalSize=0,this.maxSize=t,this.calculateSize=e||(()=>1)}set(t,e){let r=this.calculateSize(e);if(r>this.maxSize){console.warn("Single item size exceeds maxSize");return}this.cache.has(t)&&(this.totalSize-=this.sizes.get(t)||0),this.cache.set(t,e),this.sizes.set(t,r),this.totalSize+=r,this.touch(t)}get(t){let e=this.cache.get(t);if(e!==void 0)return this.touch(t),e}touch(t){let e=this.cache.get(t);e!==void 0&&(this.cache.delete(t),this.cache.set(t,e),this.evictIfNecessary())}evictIfNecessary(){for(;this.totalSize>this.maxSize&&this.cache.size>0;)this.evictLeastRecentlyUsed()}evictLeastRecentlyUsed(){let t=this.cache.keys().next().value,e=this.sizes.get(t)||0;this.totalSize-=e,this.cache.delete(t),this.sizes.delete(t)}remove(t){this.cache.has(t)&&(this.totalSize-=this.sizes.get(t)||0,this.cache.delete(t),this.sizes.delete(t))}clear(){this.cache.clear(),this.sizes.clear(),this.totalSize=0}get size(){return this.cache.size}get currentSize(){return this.totalSize}};var I=class{constructor(t){this.tagsManifest=t;this.cache=process.env.VERCEL_CACHE_HANDLER_MEMORY_CACHE==="0"?void 0:new M(50*1024*1024,t=>t.size);this.pendingSets=new Map;this.rateLimitedUntil=0}async refreshTags(){if(!this.cache)return;if(this.logger.debug("refreshTags"),this.tagsManifest.size>1e3){this.tagsManifest.clear(),this.cache.clear();return}let t=l(),e=this.tagsManifest.size>0;if(this.logger.debug("checking in-memory tags",this.tagsManifest),e){let r={};for(let[s,a]of this.tagsManifest.entries())r[s]=typeof a=="object"?a.expired??0:a;let n=await this.suspenseCacheAPI.areTagsTouched(r);this.logger.debug("tags touched result",n,{now:t});for(let[s,a]of Object.entries(n))if(a){let c={...this.tagsManifest.get(s),expired:t};this.tagsManifest.set(s,c)}}}async receiveExpiredTags(...t){if(this.cache){if(this.logger.debug("receiveExpiredTags",t),t.length>0){let e=l();for(let r of t)this.tagsManifest.set(r,{expired:e})}await this.refreshTags()}}async expireTags(...t){if(this.logger.debug("expireTags",t),t.length===0)return;let e=await this.suspenseCacheAPI.revalidate(t);if(this.cache)for(let[r,n]of e)for(let s of r){let o={...this.tagsManifest.get(s),expired:n};this.tagsManifest.set(s,o)}}async updateTags(t,e){if(this.logger.debug("updateTags",t,e),t.length===0)return;let r=await this.suspenseCacheAPI.revalidate(t,e);if(this.cache)for(let[n,s]of r)for(let a of n){let c={...this.tagsManifest.get(a),stale:s,expired:s+(e?.expire??0)*1e3};this.tagsManifest.set(a,c)}}async getExpiration(...t){let e=Array.isArray(t[0])?t[0]:t;if(!this.cache)return 1/0;this.logger.debug("checking expiration of tags",e);let r=await this.suspenseCacheAPI.mostRecentTagExpiration(e);return this.logger.debug("expiration result",e,{expiration:r}),r}};var U=P("TagsManifest"),D=(i,t,e,r)=>{for(let n of i){let s=e.get(n),a=s?.expired;if(!s&&r.considerUnknownTagExpired)return U.debug("tag",n,"is unknown (not in manifest)",{expiredAt:a,timestamp:t,entry:s}),!0;if(typeof a=="number"){let o=l(),c=a<=o&&a>t;if(c)return U.debug("tag",n,"is expired",{expiredAt:a,timestamp:t,now:o,entry:s,isImmediatelyExpired:c}),!0}U.debug("tag",n,"is not expired",{expiredAt:a,timestamp:t})}return!1},j=(i,t,e,r)=>{for(let n of i){let a=e.get(n)?.stale??0;if(typeof a!="number"&&r.considerUnknownTagExpired)return U.debug("tag",n,"is unknown",{staleAt:a,timestamp:t}),!0;if(typeof a=="number"&&a>t)return U.debug("tag",n,"is stale",{staleAt:a,timestamp:t}),!0;U.debug("tag",n,"is not stale",{staleAt:a,timestamp:t})}return!1};var ye=new Map,xe=new Map,ve=new Map,N,p,O,R,z,F,B,S=class{constructor({runtimeCache:t}){A(this,R);A(this,F);A(this,N,void 0);A(this,p,P("SuspenseCacheAPI"));A(this,O,new Map);se(this,N,t)}createHeaders(t){let e={...t.scHeaders};return g(this,N).enabled&&(e[le]=g(this,N).clientName,e[he]="RUNTIME_CACHE"),e}async areTagsTouched(t){if(E(this,R,z).call(this,this.areTagsTouched))return{};let e=x();if(!e)return{};let{scEndpoint:r}=e,n=this.createHeaders(e),s={internal:!0,fetchType:"cache-validate-tags",fetchUrl:r},a=Object.fromEntries(Array.from(Object.entries(t)).map(([o,c])=>[o,Math.floor(c/1e3)]));try{let o={method:"POST",headers:n,body:JSON.stringify(a)};o.next=s;let c=`${r}/v1/suspense-cache/areTagsTouched`;g(this,p).debug(o.method,"start",c,l());let d=await G(c,o);if(g(this,p).debug(o.method,"done",c,l()),E(this,F,B).call(this,d,this.areTagsTouched),!d.ok){let C=await d.text();throw new Error(`Failed to fetch tags from cache (status: ${d.status}): ${C}`)}return await d.json()}catch(o){return g(this,p).error("Failed to fetch tags from cache",o),{}}}async mostRecentTagExpiration(t){let e=[...t].sort().join(",");return w(e,ve,async()=>{if(E(this,R,z).call(this,this.mostRecentTagExpiration))return l();let r=x();if(!r)return l();let{scEndpoint:n}=r,s=this.createHeaders(r),a={internal:!0,fetchType:"cache-validate-tags",fetchUrl:n};try{let o={method:"POST",headers:s,body:JSON.stringify({tags:t})};o.next=a;let c=`${n}/v1/suspense-cache/mostRecentTagExpiration`;g(this,p).debug(o.method,"start",c,l());let d=await G(c,o);if(g(this,p).debug(o.method,"done",c,l()),E(this,F,B).call(this,d,this.mostRecentTagExpiration),!d.ok)throw new Error(`Invalid response from cache: ${d.status}`);let{expiration:C}=await d.json();return C*1e3}catch(o){return g(this,p).error("Failed to fetch tags expiration.",o),l()}})}async revalidate(t,e){let r=[...t].sort().join(",")+JSON.stringify(e||{});return w(r,ye,async()=>{let n=[];if(E(this,R,z).call(this,this.revalidate))return n;let{ctx:s}=x()??{};if(!s?.purge)return g(this,p).debug("Purge not available on request context",s),n;for(let a=0;a<Math.ceil(t.length/64);a++){let o=t.slice(a*64,a*64+64);try{g(this,p).debug("revalidate start",{tags:o,options:e},l());let{expiration:c}=await s.purge.dangerouslyDeleteByTag(o,typeof e?.expire=="number"?{revalidationDeadlineSeconds:e.expire}:void 0);if(g(this,p).debug("revalidate done",{tags:o,options:e},l()),c){let d=c*1e3;if(isNaN(d))throw new Error("Unexpected /revalidate response");n.push([o,d])}else n.push([o,l()]);g(this,p).debug("Revalidated tags",o)}catch(c){n.push([o,l()]),g(this,p).warn("Failed to revalidate tags",o,c)}if(E(this,R,z).call(this,this.revalidate))break}return n})}async get(t,e){let r=JSON.stringify({cacheKey:t,fetchUrl:e.fetchUrl,tags:e.tags,softTags:e.softTags});return w(r,xe,async()=>{let n=x();if(!n||E(this,R,z).call(this,this.get))return;let s=l(),{fetchUrl:a,fetchIdx:o,tags:c,softTags:d}=e,C={internal:!0,fetchType:"cache-get",fetchUrl:a,fetchIdx:o},{scEndpoint:u}=n,v=this.createHeaders(n);a&&(v[k]=a),c&&(v[_]=c.join(",")),d&&(v[oe]=d.join(","));let h={method:"GET",headers:v};h.next=C;let T=`${u}/v1/suspense-cache/${encodeURIComponent(t)}`;g(this,p).debug(h.method,"start",T,l());let m=await fetch(T,h);if(g(this,p).debug(h.method,"done",T,l()),E(this,F,B).call(this,m,this.get),m.status===404){g(this,p).debug(`no fetch cache entry for ${t}, duration: ${l()-s}ms`);return}if(!m.ok)throw new Error(`invalid response from cache for ${t} ${m.status}`);let y=await m.json(),b=m.headers.get(ce),X=m.headers.get("age");return{value:y,cacheState:b,age:X}})}};N=new WeakMap,p=new WeakMap,O=new WeakMap,R=new WeakSet,z=function(t){return l()<(g(this,O).get(t)??0)?(g(this,p).debug(t.name,"is rate limited until",g(this,O)),!0):!1},F=new WeakSet,B=function(t,e){if(t.status===429){let r=t.headers.get("retry-after")||"60000";g(this,O).set(e,l()+Number.parseInt(r))}};var Q=class extends I{constructor(){super(...arguments);this.logger=P("DefaultCacheHandler");this.suspenseCacheAPI=new S({runtimeCache:{enabled:!0,clientName:"USE_CACHE"}})}async get(e,r){if(!this.cache)return;this.logger.debug("get cache",e),await this.pendingSets.get(e);let n=this.cache.get(e);if(!n)return;let s=n.entry;if(performance.timeOrigin+performance.now()>s.timestamp+s.revalidate*1e3)return;let a=s.revalidate;if(D(s.tags,s.timestamp,this.tagsManifest,{considerUnknownTagExpired:!0})||r&&D(r,s.timestamp,this.tagsManifest,{considerUnknownTagExpired:!1})){this.logger.debug("get",e,"had expired tag");return}j(s.tags,s.timestamp,this.tagsManifest,{considerUnknownTagExpired:!0})&&(this.logger.debug("get",e,"had stale tag"),a=-1);let[o,c]=s.value.tee();return s.value=c,this.logger.debug("get",e,"returning entry",{tags:s.tags,softTags:r,revalidate:a}),{...s,revalidate:a,value:o}}async set(e,r){if(!this.cache)return;this.logger.debug("set cache",e);let{promise:n,resolve:s}=H();this.pendingSets.set(e,n);let a=await r,o=0;try{let[c,d]=a.value.tee();a.value=c;let C=d.getReader();for(let u;!(u=await C.read()).done;)o+=Buffer.from(u.value).byteLength;if(this.cache.set(e,{entry:a,isErrored:!1,errorRetryCount:0,size:o}),a.tags&&a.tags.length>0)for(let u of a.tags)this.tagsManifest.has(u)||this.tagsManifest.set(u,{})}catch(c){f&&this.logger.error(`Error while saving cache key: ${e}`,c)}finally{s(),this.pendingSets.delete(e)}}},ge=new Q(new Map);var ue=0,L,be=new Map,Ae=new S({runtimeCache:{enabled:!1}}),J=class{constructor(t){this.requestContext=null;let e=x();Object.defineProperty(this,"requestContext",{enumerable:!0,get(){return f&&console.log("using a fresh request context"),x()}}),e&&f&&(e.scEndpoint?console.log("using cache endpoint",e.scEndpoint):console.log("no cache endpoint available")),t.maxMemoryCacheSize?L||(f&&console.log("using memory store for fetch cache"),L=new M(t.maxMemoryCacheSize,function({value:n}){return n?n.kind==="FETCH"?JSON.stringify(n.data||"").length:0:25})):f&&console.log("not using memory store for fetch cache"),this.suspenseCacheAPI=t.suspenseCacheAPI??Ae}hasMatchingTags(t,e){if(t.length!==e.length)return!1;let r=new Set(t),n=new Set(e);if(r.size!==n.size)return!1;for(let s of r)if(!n.has(s))return!1;return!0}static isAvailable(){return x()!==null}resetRequestCache(){L?.clear()}async revalidateTag(...t){let[e]=t,[,r]=t;e=typeof e=="string"?[e]:e,f&&console.log("revalidateTag",e),e.length!==0&&await this.suspenseCacheAPI.revalidate(e,r)}async get(...t){let[e,r]=t,{tags:n,softTags:s,kind:a,fetchIdx:o,fetchUrl:c}=r;if(a!=="FETCH")return null;let d=L?.get(e),C=d?.value?.kind==="FETCH"&&this.hasMatchingTags(n??[],d.value.tags??[]);if(this.requestContext&&(!d||!C))try{let u=l(),v=await this.suspenseCacheAPI.get(e,{fetchUrl:c,fetchIdx:o,tags:n,softTags:s});if(!v)return null;let{value:h,cacheState:T,age:m}=v;if(h.kind!=="FETCH")throw f&&console.log({cached:h}),new Error("invalid cache value");if(h.kind==="FETCH"){h.tags??(h.tags=[]);for(let y of n??[])h.tags.includes(y)||h.tags.push(y)}d={value:h,lastModified:T!=="fresh"?l()-31536e3*1e3:l()-Number.parseInt(m||"0",10)*1e3},f&&console.log(`got fetch cache entry for ${e}, duration: ${l()-u}ms, size: ${Object.keys(h).length}, cache-state: ${T} tags: ${n?.join(",")} softTags: ${s?.join(",")}`),d&&L?.set(e,d)}catch(u){f&&console.error("Failed to get from fetch-cache",u)}return d||null}async set(...t){let[e,r,n]=t,{fetchCache:s,fetchIdx:a,fetchUrl:o,tags:c}=n;if(s){if(l()<ue){f&&console.log("rate limited");return}L?.set(e,{value:r,lastModified:l()}),this.requestContext&&await w(e,be,async()=>{try{let d=x();if(!d)return;let{scEndpoint:C}=d,u={...d.scHeaders},v=l();r!==null&&"revalidate"in r&&(u[$]=r.revalidate.toString()),!u[$]&&r!==null&&"data"in r&&(u[de]=r.data.headers["cache-control"]);let h=JSON.stringify({...r,tags:void 0});f&&console.log("set cache",e);let T={internal:!0,fetchType:"cache-set",fetchUrl:o,fetchIdx:a},m={method:"POST",headers:{...u,[k]:o||"",[_]:c?.join(",")||""},body:h};m.next=T;let y=await fetch(`${C}/v1/suspense-cache/${e}`,m);if(y.status===429){let b=y.headers.get("retry-after")||"60000";ue=l()+Number.parseInt(b)}if(!y.ok)throw f&&console.log(await y.text()),new Error(`invalid response ${y.status}`);f&&console.log(`successfully set to fetch-cache for ${e}, duration: ${l()-v}ms, size: ${h.length}`)}catch(d){f&&console.error("Failed to update fetch cache",d)}})}}};var V,ee,q,te,K=class extends I{constructor(){super(...arguments);A(this,V);A(this,q);this.logger=P("RemoteCacheHandler");this.suspenseCacheAPI=new S({runtimeCache:{enabled:!0,clientName:"USE_CACHE_REMOTE"}})}async get(e,r){this.logger.debug("get cache entry",e);let n=this.pendingSets.get(e);n&&(this.logger.debug("pending cache entry",e),await n,this.logger.debug("resolved pending cache entry",e));let s=this.cache?.get(e);try{let a=s?.entry.revalidate??0;if(s){let{entry:d}=s;(D(d.tags,d.timestamp,this.tagsManifest,{considerUnknownTagExpired:!0})||r&&D(r,d.timestamp,this.tagsManifest,{considerUnknownTagExpired:!1}))&&(this.logger.debug("expired in-memory cache entry",e,s.entry.tags),s=await E(this,q,te).call(this,e,r),a=s?.entry.revalidate??0),s&&j(s.entry.tags,s.entry.timestamp,this.tagsManifest,{considerUnknownTagExpired:!0})&&(this.logger.debug("in-memory cache entry had stale tag",e),a=-1)}else this.logger.debug("no in-memory cache entry",e),s=await E(this,q,te).call(this,e,r),a=s?.entry.revalidate??0;if(!s)return;let[o,c]=s.entry.value.tee();return s.entry.value=o,{...s.entry,revalidate:a,value:c}}catch(a){this.logger.error(`Failed to get ${e} from remote cache`,a);return}}async set(e,r){if(this.logger.debug("set cache",e),this.pendingSets.has(e)){this.logger.debug("deduped concurrent set for",e),await this.pendingSets.get(e);return}let{promise:n,resolve:s}=H();this.pendingSets.set(e,n);try{let a=await r,[o,c]=a.value.tee();a.value=o;let{data:d,size:C}=await ae(c);if(E(this,V,ee).call(this,e,{entry:a,size:C}),l()<this.rateLimitedUntil){this.logger.debug("rate limited ",this.rateLimitedUntil);return}let u=x();if(!u)return;let{scEndpoint:v}=u,h=this.suspenseCacheAPI.createHeaders(u);h[_]=a.tags.join(","),h[$]=a.revalidate.toFixed();let T={entry:{...a,value:d},size:C},m=JSON.stringify(T),y={method:"POST",headers:h,body:m};y.next={internal:!0,fetchType:"cache-set"};let b=await fetch(`${v}/v1/suspense-cache/${encodeURIComponent(e)}`,y);if(b.status===429){let X=b.headers.get("retry-after")||"60000";this.rateLimitedUntil=l()+Number.parseInt(X)}if(!b.ok)throw this.logger.error(await b.text()),new Error(`invalid response from cache for ${e}: ${b.status}`);this.logger.debug(`successfully set to remote-cache for ${e}, size: ${m.length}`)}finally{s(),this.pendingSets.delete(e)}}};V=new WeakSet,ee=function(e,r){if(this.cache){if(r.entry.tags.length>0)for(let n of r.entry.tags)this.tagsManifest.has(n)||this.tagsManifest.set(n,{expired:r.entry.timestamp});this.cache.set(e,r)}},q=new WeakSet,te=async function(e,r){this.logger.debug("get cache entry from remote",e);let n=await this.suspenseCacheAPI.get(e,{tags:void 0,softTags:r});if(!n){this.logger.debug("received no cache entry from remote",e);return}let{value:s}=n;this.logger.debug("received cache entry from remote",e,{timestamp:s.entry.timestamp});let a={...s,entry:{...s.entry,value:ie(s.entry.value)}};return E(this,V,ee).call(this,e,a),a};var fe=new K(new Map);var re={FetchCache:J,DefaultCache:ge,RemoteCache:void 0};process.env.VERCEL_VDC_REMOTE_CACHE_ENABLED==="1"&&(re.RemoteCache=fe);var pe=Symbol.for("@next/cache-handlers"),me=(i=globalThis)=>{if(typeof i.set=="function"){i.set(pe,re);return}Object.defineProperty(i,pe,{value:re,enumerable:!1})};me();