PluginProbe
Extendify / 3.2.2
Extendify v3.2.2
3.2.2 3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 All 128 releases
← All changes | src/Shared/api/DataApi.js +25 -5 3.2.1 → 3.2.2 View file →
@@ -21,8 +21,32 @@
21 21 }
22 22 return __('Service temporarily unavailable', 'extendify-local');
23 23 };
24 24
25 +const creditsFromHeaders = (headers) => {
26 + const read = (name) => {
27 + const value = headers.get(name);
28 + return value === null ? null : Number(value);
29 + };
30 + return {
31 + remaining: read('x-ratelimit-remaining'),
32 + total: read('x-ratelimit-limit'),
33 + };
34 +};
35 +
36 +export const fetchImageCredits = async () => {
37 + const url = new URL(`${AI_HOST}/api/draft/image`);
38 + // The limiter keys on the site id, which a GET can only carry in the query.
39 + url.searchParams.set('siteId', reqDataBasics.siteId ?? '');
40 + const { headers } = await fetch(url, { mode: 'cors' });
41 + const credits = creditsFromHeaders(headers);
42 +
43 + if (credits.remaining === null)
44 + throw new Error('Response reports no credits');
45 +
46 + return credits;
47 +};
48 +
25 49 export const generateImage = async (imageData, signal) => {
26 50 const response = await fetch(`${AI_HOST}/api/draft/image`, {
27 51 method: 'POST',
28 52 mode: 'cors',
@@ -36,13 +60,9 @@
36 60 });
37 61
38 62 const body = await response.json();
39 63
40 - const imageCredits = {
41 - remaining: response.headers.get('x-ratelimit-remaining'),
42 - total: response.headers.get('x-ratelimit-limit'),
43 - refresh: response.headers.get('x-ratelimit-reset'),
44 - };
64 + const imageCredits = creditsFromHeaders(response.headers);
45 65
46 66 if (!response.ok) {
47 67 throw { message: imageErrorMessage(body.status), imageCredits };
48 68 }