Socialvoid-React/cache/index.ts

39 lines
823 B
TypeScript

import { IDBPDatabase, openDB } from 'idb'
import { client } from '../socialvoid'
let _db: IDBPDatabase | undefined
async function getDB() {
if (typeof _db !== 'undefined') {
return _db
}
_db = await openDB('socialvoidCaches', 1, {
upgrade(db) {
db.createObjectStore('documents')
},
})
return _db
}
async function getStore() {
return (await getDB())
.transaction('documents', 'readwrite')
.objectStore('documents')
}
export async function getDocument(id: string): Promise<string> {
const cache = await (await getStore()).get(id)
if (typeof cache !== 'undefined') {
return URL.createObjectURL(new Blob([cache]))
}
const data = (await client.cdn.download(id)) as ArrayBuffer
await (await getStore()).put(data, id)
return URL.createObjectURL(new Blob([data]))
}