eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 966 B
JavaScript
import{readFile,readdir,realpath}from"node:fs/promises";import{relative,resolve,sep}from"node:path";function createSandboxProviderFiles(e){let t=resolve(e);async function resolvePath(e){let n=resolve(t,e),r=relative(t,n);if(r===``||!r.startsWith(`..${sep}`)&&r!==`..`)return n;throw Error(`Sandbox provider file path escapes the authored sandbox root: ${e}`)}return{async list(){return(await readdir(t,{recursive:!0,withFileTypes:!0}).catch(e=>{if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return[];throw e})).filter(e=>e.isFile()).map(e=>relative(t,resolve(e.parentPath,e.name))).sort()},async read(e){let n=await resolvePath(e),[r,i]=await Promise.all([realpath(t),realpath(n)]),a=relative(r,i);if(a.startsWith(`..${sep}`)||a===`..`)throw Error(`Sandbox provider file resolves outside the authored sandbox root: ${e}`);return await readFile(i)},async readText(e){return Buffer.from(await this.read(e)).toString(`utf8`)}}}export{createSandboxProviderFiles};