File Explorer

/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 /.

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