Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
extendify
/
src
/
Shared
/
api
:
pluginsActivation.js
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
import apiFetch from '@wordpress/api-fetch'; import { addQueryArgs } from '@wordpress/url'; const getRecaptchaToken = (action, siteKey) => new Promise((resolve, reject) => { const existing = document.querySelector( `script[src*="recaptcha/enterprise"]`, ); const load = () => window.grecaptcha.enterprise.ready(async () => { try { resolve( await window.grecaptcha.enterprise.execute(siteKey, { action }), ); } catch (error) { reject(error); } }); if (existing) { load(); return; } const script = document.createElement('script'); script.src = `https://www.google.com/recaptcha/enterprise.js?render=${siteKey}`; script.async = true; script.onload = load; document.head.appendChild(script); }); const createAccount = async ({ slug, email, marketingConsent, termsAgreed, signal, scriptData, }) => { await apiFetch({ path: `extendify/v1/${slug}/create-account`, method: 'POST', data: { email, marketingConsent, termsAgreed, ...scriptData, }, signal, }); }; /* * Plugin entries shape: * createAccountCallback: (data) => Promise<void> — performs the account creation request * idempotent: boolean (default true) — false skips retries; use when re-sending the same request could cause errors */ export const pluginsActivation = { simplybook: { idempotent: false, createAccountCallback: async ({ scriptData, email, marketingConsent, termsAgreed, signal, }) => { const captchaToken = await getRecaptchaToken( scriptData?.recaptchaAction, scriptData?.recaptchaSiteKey, ); // Hit the endpoint via ?rest_route= so the request URL contains "simplybook" — // SimplyBook only registers its onboarding routes when it does, else they 404. const url = addQueryArgs(`${window.extSharedData.homeUrl}/`, { rest_route: '/extendify/v1/simplybook/create-account', }); await apiFetch({ url, method: 'POST', data: { email, marketingConsent, termsAgreed, captcha_token: captchaToken, }, signal, }); }, }, 'translatepress-multilingual': { createAccountCallback: (data) => createAccount({ slug: 'translatepress-multilingual', ...data }), }, imagify: { createAccountCallback: (data) => createAccount({ slug: 'imagify', ...data }), }, };