import { join } from "node:path"; import { makeGitArtifactStore, makeQuickjsToolSandbox, makeSqliteAppsStore, type AppsBackings, } from "@executor-js/plugin-apps/api"; import { resolveDataDir } from "./config"; interface SelfHostAppsBackings { readonly backings: AppsBackings; readonly close: () => Promise; } const createBackings = (dataDir: string): SelfHostAppsBackings => { const appsDir = join(dataDir, "apps"); return { backings: { artifactStore: makeGitArtifactStore({ root: join(appsDir, "artifacts") }), sandbox: makeQuickjsToolSandbox(), store: makeSqliteAppsStore({ path: join(appsDir, "store.sqlite") }), }, close: async () => {}, }; }; let current: { readonly dataDir: string; readonly value: SelfHostAppsBackings } | undefined; export const getSelfHostAppsBackings = (): AppsBackings => { const dataDir = resolveDataDir(); if (current && current.dataDir === dataDir) return current.value.backings; const value = createBackings(dataDir); current = { dataDir, value }; return value.backings; }; export const closeSelfHostAppsBackings = async (): Promise => { const value = current?.value; current = undefined; await value?.close(); };