diff --git a/src/hooks.client.ts b/src/hooks.client.ts
new file mode 100644
index 0000000..217d7ea
--- /dev/null
+++ b/src/hooks.client.ts
@@ -0,0 +1,26 @@
+import type { ClientInit } from "@sveltejs/kit";
+import { getClientKey, getMasterKeys } from "$lib/indexedDB";
+import { clientKeyStore, masterKeyStore } from "$lib/stores";
+
+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])));
+ }
+};
+
+export const init: ClientInit = async () => {
+ await Promise.all([prepareClientKeyStore(), prepareMasterKeyStore()]);
+};
diff --git a/src/routes/(fullscreen)/client/pending/+page.svelte b/src/routes/(fullscreen)/client/pending/+page.svelte
index e009529..8eacc09 100644
--- a/src/routes/(fullscreen)/client/pending/+page.svelte
+++ b/src/routes/(fullscreen)/client/pending/+page.svelte
@@ -1,4 +1,5 @@
diff --git a/src/routes/(fullscreen)/key/generate/+page.svelte b/src/routes/(fullscreen)/key/generate/+page.svelte
index 91f1fab..5812750 100644
--- a/src/routes/(fullscreen)/key/generate/+page.svelte
+++ b/src/routes/(fullscreen)/key/generate/+page.svelte
@@ -1,4 +1,5 @@
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 066a4e0..d682821 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -1,24 +1,25 @@
diff --git a/src/routes/services.ts b/src/routes/services.ts
deleted file mode 100644
index de8f618..0000000
--- a/src/routes/services.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { getClientKey, getMasterKeys } from "$lib/indexedDB";
-import { clientKeyStore, masterKeyStore } from "$lib/stores";
-
-export const prepareClientKeyStore = async () => {
- const encryptKey = await getClientKey("encrypt");
- const decryptKey = await getClientKey("decrypt");
- const signKey = await getClientKey("sign");
- const verifyKey = await getClientKey("verify");
- if (encryptKey && decryptKey && signKey && verifyKey) {
- clientKeyStore.set({ encryptKey, decryptKey, signKey, verifyKey });
- return true;
- } else {
- return false;
- }
-};
-
-export const prepareMasterKeyStore = async () => {
- const masterKeys = await getMasterKeys();
- if (masterKeys.length > 0) {
- masterKeyStore.set(
- new Map(masterKeys.map(({ version, state, key }) => [version, { version, state, key }])),
- );
- return true;
- } else {
- return false;
- }
-};