Files

258 lines
9.0 KiB
JavaScript
Raw Permalink Normal View History

"use strict";
/** Matches waitForScriptRun default (1h) plus bridge overhead. */
const VAULT_AGENT_SCRIPT_WAIT_TIMEOUT_MS = 3_605_000;
function parseVaultAgentWaitFlag(raw) {
if (raw === undefined || raw === null || raw === "") return false;
if (typeof raw === "boolean") return raw;
const normalized = String(raw).trim().toLowerCase();
return normalized === "true" || normalized === "1" || normalized === "yes";
}
function vaultAgentInvokeOptions(op, params = {}) {
if (op !== "snippets.run" && op !== "scripts.run") return undefined;
if (!parseVaultAgentWaitFlag(params.wait)) return undefined;
return { timeoutMs: VAULT_AGENT_SCRIPT_WAIT_TIMEOUT_MS };
}
/**
* Vault domain service. Read-only metadata and notes/snippets are served from
* renderer vault state via VaultAgentBridge; credentials never cross the bridge.
*/
function createVaultService(ctx = {}) {
const { invokeVaultAgent } = ctx;
function requireBridge() {
if (typeof invokeVaultAgent !== "function") {
return { ok: false, error: "Vault agent bridge is unavailable." };
}
return null;
}
return {
getHost: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.get", { hostId: params.hostId });
},
listHosts: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.list", {});
},
openHost: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.open", {
hostId: params.hostId,
chatSessionId: params.chatSessionId,
});
},
createHosts: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("hosts.create", params);
},
updateHost: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.update", params);
},
deleteHost: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.delete", { hostId: params.hostId });
},
importHosts: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.import", params);
},
getHostNotes: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.notes.get", { hostId: params.hostId });
},
setHostNotes: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.notes.set", {
hostId: params.hostId,
notes: params.notes,
});
},
listNotes: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("note.list", {});
},
getNote: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("note.get", {
noteId: params.noteId,
offset: params.offset,
maxChars: params.maxChars,
query: params.query,
expectedUpdatedAt: params.expectedUpdatedAt,
});
},
createNote: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("note.create", params);
},
updateNote: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("note.update", params);
},
deleteNote: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("note.delete", { noteId: params.noteId });
},
listIdentities: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("identity.list", {});
},
listProxyProfiles: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("proxyProfile.list", {});
},
listGroups: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("group.list", {});
},
createGroup: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("group.create", params);
},
updateGroup: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("group.update", params);
},
deleteGroup: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("group.delete", params);
},
listSnippets: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("snippets.list", {});
},
getSnippet: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("snippets.get", { snippetId: params.snippetId });
},
runSnippet: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("snippets.run", {
snippetId: params.snippetId,
sessionId: params.sessionId,
variables: params.variables,
chatSessionId: params.chatSessionId,
wait: params.wait,
}, vaultAgentInvokeOptions("snippets.run", params));
},
createSnippet: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("snippets.create", params);
},
updateSnippet: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("snippets.update", params);
},
deleteSnippet: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("snippets.delete", params);
},
listScripts: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.list", {});
},
getScript: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.get", { scriptId: params.scriptId, snippetId: params.scriptId });
},
createScript: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.create", params);
},
updateScript: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.update", params);
},
deleteScript: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.delete", params);
},
runScript: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.run", params, vaultAgentInvokeOptions("scripts.run", params));
},
getScriptReference: async () => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.reference", {});
},
listScriptRuns: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.runs.list", params);
},
stopScriptRun: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.run.stop", params);
},
pauseScriptRun: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.run.pause", params);
},
resumeScriptRun: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.run.resume", params);
},
setScriptTargets: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("scripts.targets.set", params);
},
listHostConnectScripts: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.connectScripts.list", params);
},
setHostConnectScripts: async (params = {}) => {
const bridgeErr = requireBridge();
if (bridgeErr) return bridgeErr;
return invokeVaultAgent("host.connectScripts.set", params);
},
};
}
module.exports = {
createVaultService,
};