aboutsummaryrefslogtreecommitdiffstats
path: root/apps/browser-extension/src/utils/storagePersister.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/browser-extension/src/utils/storagePersister.ts')
-rw-r--r--apps/browser-extension/src/utils/storagePersister.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/apps/browser-extension/src/utils/storagePersister.ts b/apps/browser-extension/src/utils/storagePersister.ts
new file mode 100644
index 00000000..186faa4d
--- /dev/null
+++ b/apps/browser-extension/src/utils/storagePersister.ts
@@ -0,0 +1,56 @@
+import {
+ PersistedClient,
+ Persister,
+} from "@tanstack/react-query-persist-client";
+
+export const TANSTACK_QUERY_CACHE_KEY = "tanstack-query-cache-key";
+
+// Declare chrome namespace for TypeScript
+declare const chrome: {
+ storage: {
+ local: {
+ set: (items: Record<string, string>) => Promise<void>;
+ get: (keys: string | string[]) => Promise<Record<string, string>>;
+ remove: (keys: string | string[]) => Promise<void>;
+ };
+ };
+};
+
+/**
+ * Creates an AsyncStorage-like interface for Chrome's extension storage.
+ *
+ * @param storage The Chrome storage area to use (e.g., `chrome.storage.local`).
+ * @returns An object that mimics the AsyncStorage interface.
+ */
+export const createChromeStorage = (
+ storage: typeof chrome.storage.local = globalThis.chrome?.storage?.local,
+): Persister => {
+ // Check if we are in a Chrome extension environment
+ if (typeof chrome === "undefined" || !chrome.storage) {
+ // Return a noop persister for non-extension environments
+ return {
+ persistClient: async () => {
+ return;
+ },
+ restoreClient: async () => undefined,
+ removeClient: async () => {
+ return;
+ },
+ };
+ }
+
+ return {
+ persistClient: async (client: PersistedClient) => {
+ await storage.set({ [TANSTACK_QUERY_CACHE_KEY]: JSON.stringify(client) });
+ },
+ restoreClient: async () => {
+ const result = await storage.get(TANSTACK_QUERY_CACHE_KEY);
+ return result[TANSTACK_QUERY_CACHE_KEY]
+ ? JSON.parse(result[TANSTACK_QUERY_CACHE_KEY])
+ : undefined;
+ },
+ removeClient: async () => {
+ await storage.remove(TANSTACK_QUERY_CACHE_KEY);
+ },
+ };
+};