whoami7 - Manager
:
/
home
/
fresvfqn
/
emergencywaterdamagemanhattan.com
/
wp-content
/
plugins
/
surerank
/
src
/
functions
/
Upload File:
files >> //home/fresvfqn/emergencywaterdamagemanhattan.com/wp-content/plugins/surerank/src/functions/api.js
import apiFetch from '@wordpress/api-fetch'; import { addQueryArgs } from '@wordpress/url'; import { TERM_SEO_DATA_URL, POST_SEO_DATA_URL } from '@Global/constants/api'; import { isCurrentPage } from '@/functions/utils'; const API_BASE_URL = '/surerank/v1'; export const fetchMetaSettings = async () => { const queryParams = new URLSearchParams(); if ( isCurrentPage( 'term.php' ) ) { queryParams.append( 'term_id', surerank_seo_popup?.term_id ); } else { queryParams.append( 'post_id', surerank_seo_popup?.post_id ); } queryParams.append( 'post_type', surerank_seo_popup?.post_type ); queryParams.append( 'is_taxonomy', surerank_seo_popup?.is_taxonomy ); try { const response = await apiFetch( { path: `${ isCurrentPage( 'term.php' ) ? TERM_SEO_DATA_URL : POST_SEO_DATA_URL }?${ queryParams.toString() }`, method: 'GET', } ); if ( ! response.success ) { throw new Error( response.message ); } return response; } catch ( error ) { throw new Error( error.message ); } }; /** * Fetch image data by URL. * * @param {string} imageUrl The URL of the image to fetch. * @return {Promise} A promise that resolves to the image data. */ export const fetchImageDataByUrl = async ( imageUrl ) => { if ( ! imageUrl ) { return null; } // Extract filename variations for better search const url = new URL( imageUrl ); const pathname = url.pathname; const filename = pathname.split( '/' ).pop().split( '?' )[ 0 ]; // Remove common optimization suffixes (webp, scaled, etc.) const baseFilename = filename .replace( /-\d+x\d+\.(jpg|jpeg|png|gif|webp)$/i, '' ) // Remove dimension suffixes .replace( /-scaled\.(jpg|jpeg|png|gif|webp)$/i, '' ) // Remove -scaled suffix .replace( /\.(webp)$/i, '' ) // Remove .webp extension .replace( /(-optimized|-compressed)/i, '' ); // Remove optimization keywords // Try multiple search strategies const searchStrategies = [ // 1. Search by exact filename { search: filename }, // 2. Search by base filename without optimization suffixes { search: baseFilename }, // 3. Search by filename without extension { search: filename.replace( /\.[^/.]+$/, '' ) }, // 4. Search by base filename without extension { search: baseFilename.replace( /\.[^/.]+$/, '' ) }, ]; for ( const strategy of searchStrategies ) { try { const response = await apiFetch( { path: addQueryArgs( '/wp/v2/media', { search: strategy.search, media_type: 'image', slug: strategy.search, // Use slug for better matching per_page: 20, // Increase results to find better matches } ), method: 'GET', } ); if ( response && response.length > 0 ) { // Try to find exact match first const exactMatch = response.find( ( media ) => { const mediaUrl = media.source_url || media.url; const mediaFilename = mediaUrl .split( '/' ) .pop() .split( '?' )[ 0 ]; return ( mediaFilename === filename || mediaUrl.includes( baseFilename ) || mediaFilename.includes( baseFilename ) ); } ); if ( exactMatch ) { // eslint-disable-next-line no-console console.log( `Search strategy: ${ strategy.search }`, response ); return exactMatch; } // Return first result if no exact match return response[ 0 ]; } } catch ( error ) { // eslint-disable-next-line no-console console.warn( `Search strategy failed for: ${ strategy.search }`, error ); continue; } } // If all strategies fail, try a broader search using just the base name try { const broadSearch = baseFilename.split( '-' )[ 0 ]; // Get first part before any dashes const response = await apiFetch( { path: addQueryArgs( '/wp/v2/media', { search: broadSearch, media_type: 'image', per_page: 50, } ), method: 'GET', } ); if ( response && response.length > 0 ) { return response[ 0 ]; } } catch ( error ) { // eslint-disable-next-line no-console console.warn( 'Broad search failed', error ); } return null; }; /** * Get migrated data for onboarding steps after migration done successfully. * * @return {Promise<Object>} A promise that resolves to the migrated data. */ export const getMigratedData = () => { return apiFetch( { path: `${ API_BASE_URL }/migration/migrated-data`, method: 'GET', } ); }; /** * Fetch AI authentication status * @return {Promise<Object>} The authentication status */ export const getAuth = () => { return apiFetch( { path: `${ API_BASE_URL }/ai/auth` } ); }; /** * Save AI access token * @param {string} accessKey The access token * @return {Promise<Object>} The response from the API */ export const saveAuthAccessToken = ( accessKey ) => { return apiFetch( { path: `${ API_BASE_URL }/ai/auth`, method: 'POST', data: { accessKey }, } ); }; /** * Generate content * @param {string} type - The type of content to generate. * @param {string} [postId] - The optional post ID. * @param {string} [isTaxonomy] - The optional taxonomy flag. */ export const generateContent = ( type, postId, isTaxonomy ) => { const data = { type }; if ( postId ) { data.post_id = postId; } if ( isTaxonomy ) { data.is_taxonomy = isTaxonomy; } return apiFetch( { path: `${ API_BASE_URL }/generate-content`, method: 'POST', data, } ); };
Copyright ©2021 || Defacer Indonesia