eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.44 kB
JavaScript
import{createHash}from"node:crypto";import{readFile}from"node:fs/promises";import{toErrorMessage}from"#shared/errors.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";import{normalizeSandboxDefinition}from"#internal/authored-definition/sandbox.js";async function compileSandboxDefinition(e,t,n){let r=`Expected the sandbox export "${t.exportName??`default`}" from "${t.logicalPath}" to match the public eve shape.`,i=await loadModuleBackedDefinition({binding:n.binding,kind:`sandbox`,loadNamespace:n.loadNamespace,source:t}),a=await resolveParentSandboxSelector(i,r),o=normalizeSandboxDefinition(a?{}:i,r),s=o.revalidationKey===void 0?void 0:await resolveSandboxRevalidationKey({message:r,revalidationKey:o.revalidationKey,source:t});return{backendName:resolveCompiledBackendName(o.backend),description:o.description,inheritsParent:a||void 0,exportName:t.exportName,logicalPath:t.logicalPath,revalidationKey:s,sourceHash:await resolveSandboxSourceHash(n.binding),sourceId:t.sourceId,sourceKind:`module`}}const PARENT_SANDBOX_VALUE=Object.freeze({__eveSandboxParentValue:Symbol(`parent`)});async function resolveParentSandboxSelector(e,t){if(typeof e!=`function`)return!1;let n;try{n=await e({parent:{sandbox:PARENT_SANDBOX_VALUE}})}catch(e){throw Error(`${t} The callback passed to defineSandbox(...) threw while selecting parent.sandbox: ${toErrorMessage(e)}`)}if(n!==PARENT_SANDBOX_VALUE)throw Error(`${t} The callback passed to defineSandbox(...) must return parent.sandbox. Export a sandbox definition object for an independent sandbox.`);return!0}function resolveCompiledBackendName(e){if(e!==void 0)try{return e.name}catch{return}}async function resolveSandboxRevalidationKey(e){let t;try{t=await e.revalidationKey()}catch(t){throw Error(`${e.message} Failed to execute the "revalidationKey" function from "${e.source.logicalPath}": ${toErrorMessage(t)}`)}if(typeof t!=`string`)throw Error(`${e.message} The "revalidationKey" function must return a string.`);if(t.trim().length===0)throw Error(`${e.message} The "revalidationKey" function must return a non-empty string.`);return t}async function resolveSandboxSourceHash(e){if(e.backing.kind===`programmatic`)return createHash(`sha256`).update(e.backing.semanticRevision??e.backing.revision).digest(`hex`);let t=await readFile(e.backing.sourcePath);return createHash(`sha256`).update(t).digest(`hex`)}export{compileSandboxDefinition,resolveParentSandboxSelector};