From 6bf5ae468222e259c8a4a33ae01a2edbd9c5be90 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 3 Mar 2026 19:31:39 +0800 Subject: [PATCH] enhance: cache user keys to speedup first sync --- src/main/frontend/worker/sync.cljs | 2 +- src/main/frontend/worker/sync/crypt.cljs | 117 +++++++++++++++++++---- 2 files changed, 100 insertions(+), 19 deletions(-) diff --git a/src/main/frontend/worker/sync.cljs b/src/main/frontend/worker/sync.cljs index 57710fe4e3..383e2d03aa 100644 --- a/src/main/frontend/worker/sync.cljs +++ b/src/main/frontend/worker/sync.cljs @@ -95,7 +95,7 @@ (defn- timing-platform-fields [] - {:mobile? (:mobile? (worker-state/get-context))}) + {:mobile? (boolean (:mobile? (worker-state/get-context)))}) (defn- mark-ws-open! [client] diff --git a/src/main/frontend/worker/sync/crypt.cljs b/src/main/frontend/worker/sync/crypt.cljs index fc5b93cd6e..670cc8a07c 100644 --- a/src/main/frontend/worker/sync/crypt.cljs +++ b/src/main/frontend/worker/sync/crypt.cljs @@ -14,6 +14,7 @@ [promesa.core :as p])) (defonce ^:private *graph->aes-key (atom {})) +(defonce ^:private *user-rsa-key-pair-inflight (atom {})) (defonce ^:private e2ee-store (delay (idb-keyval/newStore "localforage" "keyvaluepairs" 2))) (defonce ^:private e2ee-password-file "e2ee-password") (defonce ^:private native-env? @@ -150,7 +151,7 @@ [k] (assert (and k @e2ee-store)) (p/let [r (idb-keyval/get k @e2ee-store)] - (js->clj r :keywordize-keys true))) + (some-> r (js->clj :keywordize-keys true)))) (defn- (p/let [cached (js body))} - {:response-schema :e2ee/user-keys}))) + (p/let [pair (fetch-json (str base "/e2ee/user-keys") + {:method "POST" + :headers {"content-type" "application/json"} + :body (js/JSON.stringify (clj->js body))} + {:response-schema :e2ee/user-keys}) + user-id (get-user-uuid) + _ ( (js body))} {:response-schema :e2ee/graph-aes-key}))) +(defn- ( (p/let [_ (