File size: 4,915 Bytes
baac5bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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();