diff options
| author | MohamedBassem <me@mbassem.com> | 2024-03-13 21:43:44 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2024-03-14 16:40:45 +0000 |
| commit | 04572a8e5081b1e4871e273cde9dbaaa44c52fe0 (patch) | |
| tree | 8e993acb732a50d1306d4d6953df96c165c57f57 /apps/browser-extension/src/utils | |
| parent | 2df08ed08c065e8b91bc8df0266bd4bcbb062be4 (diff) | |
| download | karakeep-04572a8e5081b1e4871e273cde9dbaaa44c52fe0.tar.zst | |
structure: Create apps dir and copy tooling dir from t3-turbo repo
Diffstat (limited to 'apps/browser-extension/src/utils')
| -rw-r--r-- | apps/browser-extension/src/utils/providers.tsx | 46 | ||||
| -rw-r--r-- | apps/browser-extension/src/utils/settings.ts | 22 | ||||
| -rw-r--r-- | apps/browser-extension/src/utils/trpc.ts | 4 |
3 files changed, 72 insertions, 0 deletions
diff --git a/apps/browser-extension/src/utils/providers.tsx b/apps/browser-extension/src/utils/providers.tsx new file mode 100644 index 00000000..d20f2512 --- /dev/null +++ b/apps/browser-extension/src/utils/providers.tsx @@ -0,0 +1,46 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { httpBatchLink } from "@trpc/client"; +import { useEffect, useState } from "react"; +import { api } from "./trpc"; +import usePluginSettings, { getPluginSettings } from "./settings"; +import superjson from "superjson"; + +function getTRPCClient(address: string) { + return api.createClient({ + links: [ + httpBatchLink({ + url: `${address}/api/trpc`, + async headers() { + const settings = await getPluginSettings(); + return { + Authorization: `Bearer ${settings.apiKey}`, + }; + }, + transformer: superjson, + }), + ], + }); +} + +export function Providers({ children }: { children: React.ReactNode }) { + const { settings } = usePluginSettings(); + const [queryClient] = useState(() => new QueryClient()); + + const [trpcClient, setTrpcClient] = useState< + ReturnType<typeof getTRPCClient> + >(getTRPCClient(settings.address)); + + useEffect(() => { + setTrpcClient(getTRPCClient(settings.address)); + }, [settings.address]); + + return ( + <api.Provider + key={settings.address} + client={trpcClient} + queryClient={queryClient} + > + <QueryClientProvider client={queryClient}>{children}</QueryClientProvider> + </api.Provider> + ); +} diff --git a/apps/browser-extension/src/utils/settings.ts b/apps/browser-extension/src/utils/settings.ts new file mode 100644 index 00000000..37f474c0 --- /dev/null +++ b/apps/browser-extension/src/utils/settings.ts @@ -0,0 +1,22 @@ +import { useChromeStorageSync } from "use-chrome-storage"; + +export type Settings = { + apiKey: string; + address: string; +}; + +export default function usePluginSettings() { + const [settings, setSettings, _1, _2, isInit] = useChromeStorageSync( + "settings", + { + apiKey: "", + address: "", + } as Settings, + ); + + return { settings, setSettings, isPending: isInit }; +} + +export async function getPluginSettings() { + return (await chrome.storage.sync.get("settings")).settings as Settings; +} diff --git a/apps/browser-extension/src/utils/trpc.ts b/apps/browser-extension/src/utils/trpc.ts new file mode 100644 index 00000000..da21a55a --- /dev/null +++ b/apps/browser-extension/src/utils/trpc.ts @@ -0,0 +1,4 @@ +import { createTRPCReact } from "@trpc/react-query"; +import type { AppRouter } from "@hoarder/trpc/routers/_app"; + +export const api = createTRPCReact<AppRouter>(); |
