Deploy Ladill Servers / deploy (push) Successful in 27s
Use the Domains API for owned domains across panel, account, and order forms, with an embedded iframe purchase modal instead of redirecting to domains.ladill.com. Co-authored-by: Cursor <cursoragent@cursor.com>
100 lines
2.9 KiB
JavaScript
100 lines
2.9 KiB
JavaScript
import { closeLadillModal, openLadillModal } from './ladill-modals';
|
|
|
|
const PURCHASE_MODAL = 'domain-purchase';
|
|
|
|
function allowedParentOrigin(origin) {
|
|
try {
|
|
const host = new URL(origin).hostname;
|
|
|
|
return host === 'ladill.com' || host.endsWith('.ladill.com');
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function loadPurchaseFrame() {
|
|
const frame = document.getElementById('ladill-domain-purchase-frame');
|
|
if (!frame || frame.dataset.loaded === '1') {
|
|
return;
|
|
}
|
|
|
|
const embedUrl = frame.dataset.embedUrl;
|
|
if (embedUrl) {
|
|
frame.src = embedUrl;
|
|
frame.dataset.loaded = '1';
|
|
}
|
|
}
|
|
|
|
export function registerLadillDomainPurchase() {
|
|
window.ladillDomainSourceForm = (initial = {}) => ({
|
|
domainSource: initial.domainSource ?? 'external',
|
|
selectedOwnedDomain: initial.selectedOwnedDomain ?? '',
|
|
externalDomain: initial.externalDomain ?? '',
|
|
ownedDomains: initial.ownedDomains ?? [],
|
|
ownedUrl: initial.ownedUrl ?? '',
|
|
onboardingMode: initial.onboardingMode ?? 'ns_auto',
|
|
|
|
openPurchaseModal() {
|
|
loadPurchaseFrame();
|
|
openLadillModal(PURCHASE_MODAL);
|
|
},
|
|
|
|
async refreshOwnedDomains() {
|
|
if (!this.ownedUrl) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const res = await fetch(this.ownedUrl, {
|
|
headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
|
|
});
|
|
|
|
if (!res.ok) {
|
|
return;
|
|
}
|
|
|
|
const payload = await res.json();
|
|
this.ownedDomains = Array.isArray(payload.data) ? payload.data : [];
|
|
this.domainSource = 'ladill';
|
|
} catch {
|
|
// Non-fatal.
|
|
}
|
|
},
|
|
});
|
|
|
|
window.addEventListener('message', (event) => {
|
|
if (!allowedParentOrigin(event.origin)) {
|
|
return;
|
|
}
|
|
|
|
const data = event.data;
|
|
if (!data || data.type !== 'ladill:domains:purchase-complete') {
|
|
return;
|
|
}
|
|
|
|
closeLadillModal(PURCHASE_MODAL);
|
|
|
|
const domains = Array.isArray(data.domains) ? data.domains : (data.domain ? [data.domain] : []);
|
|
document.querySelectorAll('[x-data*="ladillDomainSourceForm"]').forEach((el) => {
|
|
const component = el._x_dataStack?.[0];
|
|
if (!component?.refreshOwnedDomains) {
|
|
return;
|
|
}
|
|
|
|
component.refreshOwnedDomains().then(() => {
|
|
const newest = domains.map((d) => String(d).toLowerCase()).find(Boolean);
|
|
if (newest) {
|
|
component.selectedOwnedDomain = newest;
|
|
component.domainSource = 'ladill';
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
window.addEventListener('open-modal', (event) => {
|
|
if (String(event.detail) === PURCHASE_MODAL) {
|
|
loadPurchaseFrame();
|
|
}
|
|
});
|
|
}
|