safari-mcp
Version:
Safari browser automation for AI agents — native macOS, zero Chrome overhead. 98 tools via AppleScript + JavaScript.
18 lines (17 loc) • 936 B
JavaScript
// Pixel size of a JPEG straight from its SOF marker — enough to decide whether a screenshot
// needs downscaling without decoding it or pulling in an image dependency.
export function jpegSize(buf) {
if (!buf || buf.length < 4 || buf[0] !== 0xff || buf[1] !== 0xd8) return null;
let i = 2;
while (i + 9 < buf.length) {
if (buf[i] !== 0xff) { i++; continue; }
const marker = buf[i + 1];
if (marker === 0xff) { i++; continue; } // fill byte
if (marker === 0x01 || marker === 0xd8 || (marker >= 0xd0 && marker <= 0xd7)) { i += 2; continue; } // standalone markers
if (marker === 0xda || marker === 0xd9) return null; // scan data / EOI before any SOF
const isSOF = marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc;
if (isSOF) return { height: buf.readUInt16BE(i + 5), width: buf.readUInt16BE(i + 7) };
i += 2 + buf.readUInt16BE(i + 2);
}
return null;
}