mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-02-04 16:16:55 +00:00
54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
import type { ClientInit } from "@sveltejs/kit";
|
|
import { cleanupDanglingInfos, getClientKey, getMasterKeys, getHmacSecrets } from "$lib/indexedDB";
|
|
import { prepareFileCache } from "$lib/modules/file";
|
|
import { prepareOpfs } from "$lib/modules/opfs";
|
|
import { clientKeyStore, masterKeyStore, hmacSecretStore } from "$lib/stores";
|
|
|
|
const requestPersistentStorage = async () => {
|
|
const isPersistent = await navigator.storage.persist();
|
|
if (isPersistent) {
|
|
console.log("[ArkVault] Persistent storage granted.");
|
|
} else {
|
|
console.warn("[ArkVault] Persistent storage not granted.");
|
|
}
|
|
};
|
|
|
|
const prepareClientKeyStore = async () => {
|
|
const [encryptKey, decryptKey, signKey, verifyKey] = await Promise.all([
|
|
getClientKey("encrypt"),
|
|
getClientKey("decrypt"),
|
|
getClientKey("sign"),
|
|
getClientKey("verify"),
|
|
]);
|
|
if (encryptKey && decryptKey && signKey && verifyKey) {
|
|
clientKeyStore.set({ encryptKey, decryptKey, signKey, verifyKey });
|
|
}
|
|
};
|
|
|
|
const prepareMasterKeyStore = async () => {
|
|
const masterKeys = await getMasterKeys();
|
|
if (masterKeys.length > 0) {
|
|
masterKeyStore.set(new Map(masterKeys.map((masterKey) => [masterKey.version, masterKey])));
|
|
}
|
|
};
|
|
|
|
const prepareHmacSecretStore = async () => {
|
|
const hmacSecrets = await getHmacSecrets();
|
|
if (hmacSecrets.length > 0) {
|
|
hmacSecretStore.set(new Map(hmacSecrets.map((hmacSecret) => [hmacSecret.version, hmacSecret])));
|
|
}
|
|
};
|
|
|
|
export const init: ClientInit = async () => {
|
|
await Promise.all([
|
|
requestPersistentStorage(),
|
|
prepareFileCache(),
|
|
prepareClientKeyStore(),
|
|
prepareMasterKeyStore(),
|
|
prepareHmacSecretStore(),
|
|
prepareOpfs(),
|
|
]);
|
|
|
|
cleanupDanglingInfos(); // Intended
|
|
};
|