Files

44 lines
1.3 KiB
JavaScript
Raw Permalink Normal View History

"use strict";
function createSessionService(ctx = {}) {
const { invokeSessionAgent, validateClose, beforeClose, afterClose, onClosed } = ctx;
async function close(params = {}, options = {}) {
if (!params.sessionId || typeof params.sessionId !== "string") {
return { ok: false, error: "sessionId is required." };
}
if (!options.skipValidation && typeof validateClose === "function") {
const validation = validateClose(params);
if (validation && validation.ok === false) return validation;
}
if (typeof invokeSessionAgent !== "function") {
return { ok: false, error: "Session close bridge is unavailable." };
}
let result;
let closed = false;
try {
await beforeClose?.(params);
result = await invokeSessionAgent("session.close", { sessionId: params.sessionId });
if (result?.ok !== false) {
await onClosed?.(params.sessionId);
closed = true;
}
return result;
} finally {
await afterClose?.(params, {
closed,
notFound: /\bwas not found\b/i.test(result?.error || ""),
result,
});
}
}
return {
close: (params = {}) => close(params),
closeTracked: (params = {}) => close(params, { skipValidation: true }),
};
}
module.exports = { createSessionService };