HuggingClaw / iframe-fix.cjs
somratpro's picture
feat: add WhatsApp pairing guardian, improve DNS resolution, and implement workspace sync status reporting
51ec4bc
/**
* iframe-fix.cjs — Node.js preload script
*
* Intercepts OpenClaw's HTTP server to:
* 1. Allow iframe embedding (strip X-Frame-Options, fix CSP)
*/
'use strict';
const http = require('http');
console.log('[iframe-fix] Initialized: Allowing iframe embedding for *.hf.space and huggingface.co');
const origEmit = http.Server.prototype.emit;
http.Server.prototype.emit = function (event, ...args) {
if (event === 'request') {
const [, res] = args;
// Only intercept on the main OpenClaw server (port 7860)
const serverPort = this.address && this.address() && this.address().port;
if (serverPort && serverPort !== 7860) {
return origEmit.apply(this, [event, ...args]);
}
// Fix iframe embedding — must be applied BEFORE any early returns
const origWriteHead = res.writeHead;
res.writeHead = function (statusCode, ...whArgs) {
if (res.getHeader) {
// Strip X-Frame-Options so it can load in a Hugging Face Space iframe
res.removeHeader('x-frame-options');
// Update Content-Security-Policy if it contains frame-ancestors 'none'
const csp = res.getHeader('content-security-policy');
if (csp && typeof csp === 'string') {
res.setHeader('content-security-policy',
csp.replace(/frame-ancestors\s+'none'/i,
"frame-ancestors 'self' https://huggingface.co https://*.hf.space"));
}
}
return origWriteHead.apply(this, [statusCode, ...whArgs]);
};
}
return origEmit.apply(this, [event, ...args]);
};