Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/extendif.../src/Shared/api
File: wp.js
import { AI_HOST } from '@constants';
[0] Fix | Delete
import apiFetch from '@wordpress/api-fetch';
[1] Fix | Delete
import { addQueryArgs } from '@wordpress/url';
[2] Fix | Delete
[3] Fix | Delete
export const getPlugin = async (slug) => {
[4] Fix | Delete
const response = await apiFetch({
[5] Fix | Delete
path: addQueryArgs('/wp/v2/plugins', { search: slug }),
[6] Fix | Delete
});
[7] Fix | Delete
[8] Fix | Delete
const plugin = response?.[0];
[9] Fix | Delete
[10] Fix | Delete
if (!plugin) throw new Error('Plugin not found');
[11] Fix | Delete
[12] Fix | Delete
return plugin;
[13] Fix | Delete
};
[14] Fix | Delete
[15] Fix | Delete
export const getAllPlugins = async () => {
[16] Fix | Delete
const response = await apiFetch({
[17] Fix | Delete
path: '/wp/v2/plugins',
[18] Fix | Delete
});
[19] Fix | Delete
[20] Fix | Delete
if (!response) {
[21] Fix | Delete
throw new Error('Failed to fetch installed plugins');
[22] Fix | Delete
}
[23] Fix | Delete
[24] Fix | Delete
return response;
[25] Fix | Delete
};
[26] Fix | Delete
[27] Fix | Delete
export const installPlugin = async (slug) => {
[28] Fix | Delete
return await apiFetch({
[29] Fix | Delete
path: '/wp/v2/plugins',
[30] Fix | Delete
method: 'POST',
[31] Fix | Delete
data: {
[32] Fix | Delete
slug,
[33] Fix | Delete
},
[34] Fix | Delete
});
[35] Fix | Delete
};
[36] Fix | Delete
[37] Fix | Delete
export const activatePlugin = async (slug) => {
[38] Fix | Delete
const plugin = await getPlugin(slug);
[39] Fix | Delete
[40] Fix | Delete
return await apiFetch({
[41] Fix | Delete
path: `/wp/v2/plugins/${plugin.plugin}`,
[42] Fix | Delete
method: 'POST',
[43] Fix | Delete
data: {
[44] Fix | Delete
status: 'active',
[45] Fix | Delete
},
[46] Fix | Delete
});
[47] Fix | Delete
};
[48] Fix | Delete
[49] Fix | Delete
export const loadImage = (img) => {
[50] Fix | Delete
return new Promise((resolve, reject) => {
[51] Fix | Delete
img.onload = () => resolve(img);
[52] Fix | Delete
img.onerror = (e) => reject(e);
[53] Fix | Delete
});
[54] Fix | Delete
};
[55] Fix | Delete
[56] Fix | Delete
export const importImage = async (imageUrl, metadata = {}) => {
[57] Fix | Delete
const image = new Image();
[58] Fix | Delete
image.src = imageUrl;
[59] Fix | Delete
image.crossOrigin = 'anonymous';
[60] Fix | Delete
await loadImage(image);
[61] Fix | Delete
[62] Fix | Delete
const canvas = document.createElement('canvas');
[63] Fix | Delete
canvas.width = image.width;
[64] Fix | Delete
canvas.height = image.height;
[65] Fix | Delete
[66] Fix | Delete
const ctx = canvas.getContext('2d');
[67] Fix | Delete
if (!ctx) return;
[68] Fix | Delete
ctx.drawImage(image, 0, 0);
[69] Fix | Delete
[70] Fix | Delete
const blob = await new Promise((resolve) => {
[71] Fix | Delete
canvas.toBlob((blob) => {
[72] Fix | Delete
blob && resolve(blob);
[73] Fix | Delete
}, 'image/jpeg');
[74] Fix | Delete
});
[75] Fix | Delete
[76] Fix | Delete
const formData = new FormData();
[77] Fix | Delete
formData.append('file', new File([blob], metadata.filename));
[78] Fix | Delete
formData.append('alt_text', metadata.alt ?? '');
[79] Fix | Delete
formData.append('caption', metadata.caption ?? '');
[80] Fix | Delete
formData.append('status', 'publish');
[81] Fix | Delete
[82] Fix | Delete
return await apiFetch({
[83] Fix | Delete
path: 'wp/v2/media',
[84] Fix | Delete
method: 'POST',
[85] Fix | Delete
body: formData,
[86] Fix | Delete
});
[87] Fix | Delete
};
[88] Fix | Delete
[89] Fix | Delete
export const importImageServer = async (src, metadata = {}) => {
[90] Fix | Delete
const formData = new FormData();
[91] Fix | Delete
formData.append('source', src);
[92] Fix | Delete
// Fallback doesn't support custom file_name
[93] Fix | Delete
formData.append('alt_text', metadata.alt ?? '');
[94] Fix | Delete
formData.append('caption', metadata.caption ?? '');
[95] Fix | Delete
[96] Fix | Delete
return await apiFetch({
[97] Fix | Delete
path: '/extendify/v1/draft/upload-image',
[98] Fix | Delete
method: 'POST',
[99] Fix | Delete
body: formData,
[100] Fix | Delete
});
[101] Fix | Delete
};
[102] Fix | Delete
[103] Fix | Delete
export const downloadImage = async (
[104] Fix | Delete
id,
[105] Fix | Delete
src,
[106] Fix | Delete
source,
[107] Fix | Delete
unsplashId,
[108] Fix | Delete
metadata = { alt: '', caption: '' },
[109] Fix | Delete
) => {
[110] Fix | Delete
let image;
[111] Fix | Delete
if (unsplashId) {
[112] Fix | Delete
await downloadPing(id, source, { unsplashId });
[113] Fix | Delete
}
[114] Fix | Delete
try {
[115] Fix | Delete
image = await importImage(src, {
[116] Fix | Delete
alt: metadata.alt,
[117] Fix | Delete
filename: 'image.jpg',
[118] Fix | Delete
caption: metadata.caption,
[119] Fix | Delete
});
[120] Fix | Delete
} catch (_e) {
[121] Fix | Delete
image = await importImageServer(src, {
[122] Fix | Delete
alt: metadata.alt,
[123] Fix | Delete
filename: 'image.jpg',
[124] Fix | Delete
caption: metadata.caption,
[125] Fix | Delete
});
[126] Fix | Delete
}
[127] Fix | Delete
[128] Fix | Delete
return image;
[129] Fix | Delete
};
[130] Fix | Delete
[131] Fix | Delete
export const downloadPing = (id, source, details = {}) =>
[132] Fix | Delete
fetch(`${AI_HOST}/api/draft/image/download`, {
[133] Fix | Delete
method: 'POST',
[134] Fix | Delete
headers: { 'Content-Type': 'application/json' },
[135] Fix | Delete
body: JSON.stringify({ id, source, ...details }),
[136] Fix | Delete
});
[137] Fix | Delete
[138] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function