File size: 2,148 Bytes
0487046
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
async (image, receipt, threshold) => {
    const unchanged = [{__type__: "update"}, {__type__: "update"}];
    const origin = new URLSearchParams(location.search).get("__labs_parent");
    const allowed = ["https://app.skyebrowse.com", "https://staging.app.skyebrowse.com", "https://dev.app.skyebrowse.com", "http://localhost:8080"];
    if (window.parent === window || !allowed.includes(origin) || !receipt?.ticket || image?.path !== receipt.image) return unchanged;
    const requestId = crypto.randomUUID();
    const currentImage = document.querySelector('input[type="file"]');
    return new Promise(resolve => {
        const finish = result => {
            clearTimeout(timer);
            window.removeEventListener("message", receive);
            currentImage?.removeEventListener("change", cancel);
            document.removeEventListener("click", onClear, true);
            resolve(result);
        };
        const cancel = () => finish(unchanged);
        const onClear = event => {
            if (event.target.closest?.('button[aria-label="Remove Image"], table[role="grid"] tbody tr')) cancel();
        };
        const receive = event => {
            if (event.source !== window.parent || event.origin !== origin) return;
            const data = event.data;
            if (data?.type !== "labs:crowd-result" || data.requestId !== requestId) return;
            if (data.error) return finish([null, data.error]);
            if (!/^data:image\/(png|webp|jpeg);base64,/.test(data.overlay) || !/^[\d,]+ people$/.test(data.count)) return;
            finish([{url: data.overlay, path: data.overlay, orig_name: "crowd-count.webp", meta: {_type: "gradio.FileData"}}, data.count]);
        };
        const timer = setTimeout(() => finish([null, "Crowd Counter timed out. Please upload the image again."]), 120000);
        window.addEventListener("message", receive);
        currentImage?.addEventListener("change", cancel, {once: true});
        document.addEventListener("click", onClear, true);
        window.parent.postMessage({type: "labs:crowd-fallback", requestId, ticket: receipt.ticket, threshold}, origin);
    });
}