class RgthreeApi { constructor(baseUrl) { this.getCheckpointsPromise = null; this.getSamplersPromise = null; this.getSchedulersPromise = null; this.getLorasPromise = null; this.getWorkflowsPromise = null; this.setBaseUrl(baseUrl); } setBaseUrl(baseUrlArg) { var _a; let baseUrl = null; if (baseUrlArg) { baseUrl = baseUrlArg; } else if (window.location.pathname.includes("/rgthree/")) { const parts = (_a = window.location.pathname.split("/rgthree/")[1]) === null || _a === void 0 ? void 0 : _a.split("/"); if (parts && parts.length) { baseUrl = parts.map(() => "../").join("") + "rgthree/api"; } } this.baseUrl = baseUrl || "./rgthree/api"; const comfyBasePathname = location.pathname.includes("/rgthree/") ? location.pathname.split("rgthree/")[0] : location.pathname; this.comfyBaseUrl = comfyBasePathname.split("/").slice(0, -1).join("/"); } apiURL(route) { return `${this.baseUrl}${route}`; } fetchApi(route, options) { return fetch(this.apiURL(route), options); } async fetchJson(route, options) { const r = await this.fetchApi(route, options); return await r.json(); } async postJson(route, json) { const body = new FormData(); body.append("json", JSON.stringify(json)); return await rgthreeApi.fetchJson(route, { method: "POST", body }); } getLoras(force = false) { if (!this.getLorasPromise || force) { this.getLorasPromise = this.fetchJson("/loras?format=details", { cache: "no-store" }); } return this.getLorasPromise; } async fetchApiJsonOrNull(route, options) { const response = await this.fetchJson(route, options); if (response.status === 200 && response.data) { return response.data || null; } return null; } async getModelsInfo(options) { var _a; const params = new URLSearchParams(); if ((_a = options.files) === null || _a === void 0 ? void 0 : _a.length) { params.set("files", options.files.join(",")); } if (options.light) { params.set("light", "1"); } if (options.format) { params.set("format", options.format); } const path = `/${options.type}/info?` + params.toString(); return (await this.fetchApiJsonOrNull(path)) || []; } async getLorasInfo(options = {}) { return this.getModelsInfo({ type: "loras", ...options }); } async getCheckpointsInfo(options = {}) { return this.getModelsInfo({ type: "checkpoints", ...options }); } async refreshModelsInfo(options) { var _a; const params = new URLSearchParams(); if ((_a = options.files) === null || _a === void 0 ? void 0 : _a.length) { params.set("files", options.files.join(",")); } const path = `/${options.type}/info/refresh?` + params.toString(); const infos = await this.fetchApiJsonOrNull(path); return infos; } async refreshLorasInfo(options = {}) { return this.refreshModelsInfo({ type: "loras", ...options }); } async refreshCheckpointsInfo(options = {}) { return this.refreshModelsInfo({ type: "checkpoints", ...options }); } async clearModelsInfo(options) { var _a; const params = new URLSearchParams(); if ((_a = options.files) === null || _a === void 0 ? void 0 : _a.length) { params.set("files", options.files.join(",")); } const path = `/${options.type}/info/clear?` + params.toString(); await this.fetchApiJsonOrNull(path); return; } async clearLorasInfo(options = {}) { return this.clearModelsInfo({ type: "loras", ...options }); } async clearCheckpointsInfo(options = {}) { return this.clearModelsInfo({ type: "checkpoints", ...options }); } async saveModelInfo(type, file, data) { const body = new FormData(); body.append("json", JSON.stringify(data)); return await this.fetchApiJsonOrNull(`/${type}/info?file=${encodeURIComponent(file)}`, { cache: "no-store", method: "POST", body }); } async saveLoraInfo(file, data) { return this.saveModelInfo("loras", file, data); } async saveCheckpointsInfo(file, data) { return this.saveModelInfo("checkpoints", file, data); } fetchComfyApi(route, options) { const url = this.comfyBaseUrl + "/api" + route; options = options || {}; options.headers = options.headers || {}; options.cache = options.cache || "no-cache"; return fetch(url, options); } } export const rgthreeApi = new RgthreeApi();