Files
Simon James b54a3139c7 Initial commit: Qortal Web Builder monorepo.
Includes QWB, Qortal Web, and Q-Shops Q-Apps with shared packages and build scripts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 12:17:29 +00:00

64 lines
1.9 KiB
JavaScript

/** Relay qortalRequest from embedded child iframes (websites) to Hub via Qortal Web. */
(function () {
function isChildFrameSource(src) {
if (!src || src === window) return false;
try {
var ifr = document.getElementsByTagName('iframe');
for (var i = 0; i < ifr.length; i++) {
if (ifr[i].contentWindow === src) return true;
}
} catch (e) {
return false;
}
return false;
}
window.addEventListener('message', function (ev) {
if (!ev || !ev.data) return;
if (!ev.ports || !ev.ports[0]) return;
if (typeof ev.data.action !== 'string' || !ev.data.action) return;
if (!isChildFrameSource(ev.source)) return;
var port = ev.ports[0];
function replyRes(res) {
try {
port.postMessage({ result: res, error: null });
} catch (e) {}
}
function replyErr(err) {
var msg;
if (err == null) msg = 'Unknown error';
else if (typeof err === 'string') msg = err;
else if (err && typeof err === 'object' && 'message' in err) msg = String(err.message);
else msg = String(err);
try {
port.postMessage({ result: null, error: { message: msg } });
} catch (e) {}
}
if (typeof window.qortalRequest === 'function') {
var clean = {};
for (var k in ev.data) {
if (Object.prototype.hasOwnProperty.call(ev.data, k) && k !== 'requestedHandler') clean[k] = ev.data[k];
}
var run =
typeof window.qortalRequestWithNoTimeout === 'function'
? window.qortalRequestWithNoTimeout(clean)
: window.qortalRequest(clean);
run.then(replyRes, function (e) {
replyErr(e);
});
return;
}
if (window.top && window.top !== window) {
try {
window.top.postMessage(ev.data, '*', [port]);
} catch (e) {
replyErr(e);
}
return;
}
replyErr('No Qortal bridge on this page for embedded website');
});
})();