diff options
Diffstat (limited to 'apps/browser-extension/src/utils/storagePersister.ts')
| -rw-r--r-- | apps/browser-extension/src/utils/storagePersister.ts | 56 |
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); + }, + }; +}; |
