UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines • 2.28 kB
import{randomUUID}from"node:crypto";import{mkdir,readFile,rename,writeFile}from"node:fs/promises";import{dirname,join}from"node:path";import{isSandboxNetworkPolicy}from"#shared/sandbox-network-policy.js";const MICROSANDBOX_METADATA_VERSION=2,MICROSANDBOX_METADATA_FILE_NAME=`metadata.json`;function createMicrosandboxSessionMetadata(e){let t={optionsHash:e.optionsHash,sandboxName:e.sandboxName,version:2};return e.networkPolicy!==void 0&&(t.networkPolicy=e.networkPolicy),e.stateSnapshotName!==void 0&&(t.stateSnapshotName=e.stateSnapshotName),t}function resolveMicrosandboxMetadataPath(e){return join(e,MICROSANDBOX_METADATA_FILE_NAME)}async function readTemplateMetadata(e){let t=await readJsonFile(e);return t?.version!==2||typeof t.optionsHash!=`string`||typeof t.snapshotName!=`string`?null:{image:typeof t.image==`string`?t.image:void 0,optionsHash:t.optionsHash,snapshotName:t.snapshotName,version:2}}async function writeTemplateMetadata(e,t){await writeJsonFileAtomically(e,t)}async function readSessionMetadata(e){return readSessionMetadataRecord(await readJsonFile(e))}function readSessionMetadataRecord(e){return!isRecord(e)||e.version!==2||typeof e.optionsHash!=`string`||typeof e.sandboxName!=`string`||e.networkPolicy!==void 0&&!isSandboxNetworkPolicy(e.networkPolicy)?null:{image:typeof e.image==`string`?e.image:void 0,networkPolicy:e.networkPolicy,optionsHash:e.optionsHash,sandboxName:e.sandboxName,stateSnapshotName:typeof e.stateSnapshotName==`string`?e.stateSnapshotName:void 0,version:2}}async function writeSessionMetadata(e,t){await writeJsonFileAtomically(e,t)}async function readJsonFile(e){try{let t=JSON.parse(await readFile(e,`utf8`));return isRecord(t)?t:null}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return null;throw e}}async function writeJsonFileAtomically(e,t){let n=`${e}.${randomUUID()}.tmp`;await mkdir(dirname(e),{recursive:!0}),await writeFile(n,`${JSON.stringify(t,null,2)}\n`),await rename(n,e)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{MICROSANDBOX_METADATA_FILE_NAME,MICROSANDBOX_METADATA_VERSION,createMicrosandboxSessionMetadata,readSessionMetadata,readSessionMetadataRecord,readTemplateMetadata,resolveMicrosandboxMetadataPath,writeSessionMetadata,writeTemplateMetadata};