forked from tornadocash/nova-ui
49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
|
import { unzip } from 'fflate'
|
||
|
|
||
|
export function unzipAsync(data: Uint8Array) {
|
||
|
return new Promise((res, rej) => {
|
||
|
unzip(data, {}, (err, data) => {
|
||
|
if (err) {
|
||
|
rej(err);
|
||
|
return;
|
||
|
}
|
||
|
res(data);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
export async function downloadEvents(fileName: string, deployedBlock: number) {
|
||
|
fileName = fileName.toLowerCase()
|
||
|
|
||
|
// @ts-ignore
|
||
|
const prefix = __webpack_public_path__.slice(0, -7)
|
||
|
|
||
|
try {
|
||
|
const resp = await fetch(`${prefix}/${fileName}.zip`, {
|
||
|
method: 'GET',
|
||
|
headers: {
|
||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||
|
}
|
||
|
})
|
||
|
|
||
|
const arrayBuffer = await resp.arrayBuffer()
|
||
|
|
||
|
const { [fileName]: content } = (await unzipAsync(new Uint8Array(arrayBuffer))) as any
|
||
|
|
||
|
const events = JSON.parse(new TextDecoder().decode(content))
|
||
|
|
||
|
const lastBlock = events && Array.isArray(events) && events[events.length - 1]
|
||
|
? events[events.length - 1].blockNumber
|
||
|
: deployedBlock
|
||
|
|
||
|
return {
|
||
|
events,
|
||
|
lastBlock
|
||
|
}
|
||
|
} catch {
|
||
|
return {
|
||
|
events: [],
|
||
|
lastBlock: deployedBlock
|
||
|
}
|
||
|
}
|
||
|
}
|