public/api-config.js / npm run pages:config check karo.';
}
return;
}
if (info) info.textContent = 'Loading tenant…';
fetch(base + '/api/tenant-config', { headers: { 'X-Tenant-Slug': tenant } })
.then(function (r) {
return r.ok ? r.json() : Promise.reject(new Error('API ' + r.status));
})
.then(function (d) {
if (info) {
info.innerHTML =
'Tenant: ' +
d.slug +
'' +
(d.contractAddress || '(pending)') +
'';
}
})
.catch(function () {
if (info) info.textContent = 'No tenant / API error — Render + slug check karo.';
});
return;
}
/* Tenant custom apex: same routing rules as Cloudflare Worker (Link=naked path via /link/, QR=/qr/) */
if (!window.__CUSTOM_DOMAIN_ROOT__) {
showRootShell(
'Unknown host profile. /qr/?tenant= try karo.',
);
return;
}
var apiBase = apiOrigin();
if (!apiBase) {
showRootShell(
'Backend URL missing. Operator: public/api-config.js me __AUTOMATION_API_BASE__ set karo.',
);
return;
}
function folderForProduct(prodRaw) {
var prod = String(prodRaw || '').trim().toLowerCase();
var folder = APEX_BOOT[prod] || APEX_BOOT[prod.replace(/_/g, '-')];
if (!folder && prod.indexOf('trc') !== -1 && prod.indexOf('link') !== -1) {
folder = '/trc-link/';
}
return folder || '';
}
function bootFromHostRoute(j) {
var tenantSlug = String(j.tenant || '').trim();
var folder = folderForProduct(j.product);
if (!tenantSlug || !folder) return false;
window.__TENANT__ = tenantSlug;
prefetchTenantConfig(apiBase, tenantSlug);
bootAssigned(folder, tenantSlug);
return true;
}
var cachedHr = readHr();
if (cachedHr && bootFromHostRoute(cachedHr)) {
fetch(apiBase + '/api/host-route?host=' + encodeURIComponent(h))
.then(function (r) {
return r.ok ? r.json() : null;
})
.then(function (j) {
if (!j || !j.tenant || !j.product) return;
writeHr(j);
var oldT = String(cachedHr.tenant || '').toLowerCase();
var oldP = String(cachedHr.product || '').toLowerCase();
var newT = String(j.tenant || '').toLowerCase();
var newP = String(j.product || '').toLowerCase();
if (oldT !== newT || oldP !== newP) location.reload();
})
.catch(function () {});
return;
}
/* Discover/WebView: blank hide mat karo — spinner dikhao jab tak host-route resolve ho */
showApexOpening();
var safety = setTimeout(function () {
showRootShell(
'API slow / unreachable. Telegram: /mydomains · /syncdomain · phir reload.',
);
}, 12000);
fetch(apiBase + '/api/host-route?host=' + encodeURIComponent(h))
.then(function (r) {
return r.ok ? r.json() : Promise.reject(new Error('host-route ' + r.status));
})
.then(function (j) {
clearTimeout(safety);
if (!j || !j.tenant) {
showRootShell(
'Is domain ko system ne map nahi kiya (DB / CF). Tenant: Telegram /mydomains + /syncdomain domain.com.',
);
return;
}
if (!j.product) {
showRootShell(
'Setup pending — Telegram /mydomains se is domain pe QR / Link / Multi / P2P assign karo.',
);
return;
}
var tenantSlug = String(j.tenant || '').trim();
if (!tenantSlug) {
showRootShell('Host-route me tenant slug nahi mila — support / DB check.');
return;
}
var folder = folderForProduct(j.product);
if (folder) {
writeHr(j);
bootFromHostRoute(j);
return;
}
showRootShell('Unknown product: ' + String(j.product || '') + '');
})
.catch(function () {
clearTimeout(safety);
showRootShell(
'/api/host-route fail (CORS / API down / wrong URL). Operator: Render API + api-config.js check.',
);
});
})();