UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

84 lines (83 loc) • 2.92 kB
import { o as racePromiseWithAbortSignal } from "./src-D1BHGNTj.mjs"; import "./abort-signal-QqAmLWTl.mjs"; import { i as resolveRuntimeWorkerUrl } from "./runtime-worker-url-CFqA9Dvi.mjs"; import { n as resolvePreferredOpenClawTmpDir } from "./tmp-openclaw-dir-DR7bHNl9.mjs"; import { n as runtimeProcessEntrypoints } from "./runtime-process-entrypoints-De68tE_W.mjs"; import { t as WorkerTaskPool } from "./worker-task-pool-r__tVCXa.mjs"; import path from "node:path"; import fs from "node:fs/promises"; //#region src/gateway/worker-environments/node-bootstrap-artifact-worker.ts async function prepareNodeBootstrapArtifactInWorker(options, temporaryRoot) { const pool = new WorkerTaskPool({ workerUrl: resolveRuntimeWorkerUrl(runtimeProcessEntrypoints.nodeBootstrapArtifact), workerClass: "writer" }); try { const artifact = await pool.run({ options, temporaryRoot }, {}); return Object.freeze({ ...artifact, enabledPluginIds: Object.freeze(artifact.enabledPluginIds) }); } finally { await pool.close(); } } //#endregion //#region src/gateway/worker-environments/node-bootstrap-artifact.ts /** Owns one immutable deployment artifact for this Gateway process, never the live installation. */ function createNodeBootstrapArtifactProvider(options) { let prepared; let temporaryRoot; let closed = false; const consumers = /* @__PURE__ */ new Map(); return { async prepare(signal) { signal?.throwIfAborted(); if (closed) throw new Error("Node bootstrap artifact provider is closed"); prepared ??= Promise.resolve().then(async () => { try { temporaryRoot = await fs.mkdtemp(path.join(resolvePreferredOpenClawTmpDir(), "openclaw-node-runtime-")); if (closed) throw new Error("Node bootstrap artifact provider is closed"); const artifact = await prepareNodeBootstrapArtifactInWorker(options, temporaryRoot); if (closed) throw new Error("Node bootstrap artifact provider is closed"); return artifact; } catch (error) { if (temporaryRoot) await fs.rm(temporaryRoot, { recursive: true, force: true }); temporaryRoot = void 0; prepared = void 0; throw error; } }); const artifact = await racePromiseWithAbortSignal(prepared, signal); signal?.throwIfAborted(); if (closed) throw new Error("Node bootstrap artifact provider is closed"); if (signal && !consumers.has(signal)) consumers.set(signal, new Promise((resolve) => { signal.addEventListener("abort", () => { consumers.delete(signal); resolve(); }, { once: true }); })); return artifact; }, async close() { closed = true; await prepared?.catch(() => void 0); await Promise.all(consumers.values()); if (temporaryRoot) { await fs.rm(temporaryRoot, { recursive: true, force: true }); temporaryRoot = void 0; } } }; } //#endregion export { createNodeBootstrapArtifactProvider };