/* =================================================================== Restaura o preservation_url correto de 78 itens cujo IndexedDB ficou corrompido (achado 2026-09-10): o nome do arquivo tem um "#" literal, e algum processo anterior que passou a URL por `new URL(...).pathname` cortou tudo depois do "#" (tratado como fragmento de URL, nao parte do caminho). O catalogo.jsonl local nunca foi tocado por esse bug -- tem o valor certo. Este script so restaura o campo no IndexedDB. COMO USAR: colar inteiro no console da aba do coletor. =================================================================== */ (async () => { const PATCHES = [{"h": "13308", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13308/1/Album%200035%20218%20CT%20%23.jpg"}, {"h": "13315", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13315/1/Album%200035%20067%20CT%20%23.jpg"}, {"h": "13318", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13318/1/Album%200035%20155%20CT%23.jpg"}, {"h": "13319", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13319/1/Album%200035%20163%20CT%23.jpg"}, {"h": "13320", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13320/1/Album%200035%20185%20CT%20%23.jpg"}, {"h": "13321", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13321/1/Album%200035%20187%20CT%20%23.jpg"}, {"h": "13322", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13322/1/Album%200035%20192%20CT%20%23.jpg"}, {"h": "13325", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13325/1/Album%200035%20199%20CT%20%23.jpg"}, {"h": "13343", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13343/1/Album%200035%20283%20CT%20%23.jpg"}, {"h": "13344", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13344/1/Album%200035%20286%20CT%20%23.jpg"}, {"h": "13346", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13346/1/Album%200035%20297%20CT%20%23.jpg"}, {"h": "13348", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13348/1/Album%200035%20312%20CT%20%23.jpg"}, {"h": "13356", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13356/1/Album%200035%20342%20CT%20%23.jpg"}, {"h": "13358", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13358/1/Album%200035%20349%20CT%20%23.jpg"}, {"h": "13359", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13359/1/Album%200035%20061%20CT%20%23.jpg"}, {"h": "13362", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13362/1/Album%200035%20320%20CT%20%23.jpg"}, {"h": "13363", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13363/1/Album%200035%20324%20CT%20%23.jpg"}, {"h": "13375", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13375/1/Album%200035%20221%20CT%20%23.jpg"}, {"h": "13377", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13377/1/Album%200035%20242%20CT%20%23.jpg"}, {"h": "13379", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13379/1/Album%200035%20257%20CT%20%23.jpg"}, {"h": "13380", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13380/1/Album%200035%20262%20CT%20%23.jpg"}, {"h": "13382", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13382/1/Album%200035%20269%20CT%20%23.jpg"}, {"h": "13782", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13782/1/Alb%200259%20123%20ct%20%23.jpg"}, {"h": "13783", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13783/1/Alb%200259%20128%20ct%20%23.jpg"}, {"h": "13785", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13785/1/Alb%200259%20140ct%20%23.jpg"}, {"h": "13786", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13786/1/Alb%200259%20143%20ct%20%23.jpg"}, {"h": "13798", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13798/1/Alb%200259%20171%20ct%20%23.jpg"}, {"h": "13799", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13799/1/Alb%200259%20178%20ct%20%23.jpg"}, {"h": "13800", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13800/1/Alb%200259%20179%20ct%20%23.jpg"}, {"h": "13802", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13802/1/Alb%200259%20182%20ct%20%23.jpg"}, {"h": "13803", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13803/1/Alb%200259%20183%20ct%20%23.jpg"}, {"h": "13804", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13804/1/Alb%200259%20187%20ct%20%23.jpg"}, {"h": "13805", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13805/1/Alb%200259%20149%20ct%20%23.jpg"}, {"h": "13806", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13806/1/Alb%200259%20153%20ct%20%23.jpg"}, {"h": "13807", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13807/1/Alb%200259%20190%20ct%20%23.jpg"}, {"h": "13808", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13808/1/Alb%200259%20155%20ct%20%23.jpg"}, {"h": "13809", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13809/1/Alb%200259%20156%20ct%20%23.jpg"}, {"h": "13810", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13810/1/Alb%200259%20156%20ct%20%23.jpg"}, {"h": "13811", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13811/1/Alb%200259%20158%20ct%20%23.jpg"}, {"h": "13812", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13812/1/Alb%200259%20160%20ct%20%23.jpg"}, {"h": "13813", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13813/1/Alb%200259%20162%20ct%20%23.jpg"}, {"h": "13814", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13814/1/Alb%200259%20164%20ct%20%23.jpg"}, {"h": "13815", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13815/1/Alb%200259%20167%20ct%20%23.jpg"}, {"h": "13816", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/13816/1/Alb%200259%20170%20ct%20%23.jpg"}, {"h": "14009", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14009/1/Alb%200259%20192%20ct%20%23.jpg"}, {"h": "14010", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14010/1/Alb%200259%20239%20ct%20%23.jpg"}, {"h": "14011", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14011/1/Alb%200259%20241%20ct%20%23.jpg"}, {"h": "14013", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14013/1/Alb%200259%20218%20ct%20%23.jpg"}, {"h": "14014", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14014/1/Alb%200259%20239%20ct%20%23.jpg"}, {"h": "14015", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14015/1/Alb%200259%20193%20ct%20%23.jpg"}, {"h": "14016", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14016/1/Alb%200259%20210%20ct%20%23.jpg"}, {"h": "14017", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14017/1/Alb%200259%20220%20ct%20%23.jpg"}, {"h": "14018", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14018/1/Alb%200259%20225%20ct%20%23.jpg"}, {"h": "14019", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14019/1/Alb%200259%20242%20ct%20%23.jpg"}, {"h": "14020", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14020/1/Alb%200259%20202%20ct%20%23.jpg"}, {"h": "14023", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14023/1/Alb%200259%20204%20ct%20%23.jpg"}, {"h": "14024", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14024/1/Alb%200259%20214%20ct%20%23.jpg"}, {"h": "14061", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14061/1/Alb%200260%20034%20CT%20%23.jpg"}, {"h": "14062", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14062/1/Alb%200260%20065%20CT%20%23.jpg"}, {"h": "14063", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14063/1/Alb%200260%20071%20CT%20%23.jpg"}, {"h": "14064", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14064/1/Alb%200260%20072%20CT%20%23.jpg"}, {"h": "14065", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14065/1/Alb%200260%20101%20CT%20%23.jpg"}, {"h": "14066", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14066/1/Alb%200260%20133%20CT%20%23.jpg"}, {"h": "14067", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14067/1/Alb%200260%20141%20CT%20%23.jpg"}, {"h": "14068", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14068/1/Alb%200260%20142%20CT%20%23.jpg"}, {"h": "14071", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14071/1/Alb%200260%20230%20CT%20%23.jpg"}, {"h": "14073", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14073/1/Alb%200260%20201%20CT%20%23.jpg"}, {"h": "14074", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14074/1/Alb%200260%20046%20CT%20%23.jpg"}, {"h": "14076", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14076/1/Alb%200260%20132%20CT%20%23.jpg"}, {"h": "14077", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14077/1/Alb%200260%20140%20CT%20%23.jpg"}, {"h": "14079", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14079/1/Alb%200260%20050%20CT%20%23.jpg"}, {"h": "14080", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14080/1/Alb%200260%20175%20CT%20%23.jpg"}, {"h": "14081", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14081/1/Alb%200260%20177%20CT%20%23.jpg"}, {"h": "14082", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14082/1/Alb%200260%20204%20CT%20%23.jpg"}, {"h": "14083", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14083/1/Alb%200260%20199%20CT%20%23.jpg"}, {"h": "14084", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14084/1/Alb%200260%20056%20CT%20%23.jpg"}, {"h": "14085", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14085/1/Alb%200260%20070%20CT%20%23.jpg"}, {"h": "14094", "url": "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14094/1/Alb%200260%20207%20CT%20%23.jpg"}]; const req = indexedDB.open('bras', 1); const db = await new Promise((res, rej) => { req.onsuccess = () => res(req.result); req.onerror = () => rej(req.error); }); const get = (st,k) => new Promise(res => { const r=db.transaction(st).objectStore(st).get(k); r.onsuccess=()=>res(r.result); r.onerror=()=>res(undefined); }); const put = (st,k,v) => new Promise((res,rej) => { const t=db.transaction(st,'readwrite'); t.objectStore(st).put(v,k); t.oncomplete=res; t.onerror=()=>rej(t.error); }); let corrigidos = 0, semItem = 0; for (const {h, url} of PATCHES) { const item = await get('itens', h); if (!item) { semItem++; continue; } item.preservation_url = url; await put('itens', h, item); corrigidos++; } console.log(`reparo-hash-url: ${corrigidos} corrigidos, ${semItem} sem item no IndexedDB`); })();