From f696d33b645c53369ec5833593bdc77c9fb7cea9 Mon Sep 17 00:00:00 2001
From: MohamedBassem <me@mbassem.com>
Date: Tue, 9 Apr 2024 19:05:28 +0100
Subject: fix: Delete the API key on logout from phone or extension

---
 packages/shared-react/providers/trpc-provider.tsx | 50 +++++++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100644 packages/shared-react/providers/trpc-provider.tsx

(limited to 'packages/shared-react/providers/trpc-provider.tsx')

diff --git a/packages/shared-react/providers/trpc-provider.tsx b/packages/shared-react/providers/trpc-provider.tsx
new file mode 100644
index 00000000..2cd8661b
--- /dev/null
+++ b/packages/shared-react/providers/trpc-provider.tsx
@@ -0,0 +1,50 @@
+import { useMemo } from "react";
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import { httpBatchLink } from "@trpc/client";
+import superjson from "superjson";
+
+import { api } from "../trpc";
+
+interface Settings {
+  apiKey?: string;
+  address: string;
+}
+
+function getTRPCClient(settings: Settings) {
+  return api.createClient({
+    links: [
+      httpBatchLink({
+        url: `${settings.address}/api/trpc`,
+        headers() {
+          return {
+            Authorization: settings.apiKey
+              ? `Bearer ${settings.apiKey}`
+              : undefined,
+          };
+        },
+        transformer: superjson,
+      }),
+    ],
+  });
+}
+
+export function TRPCProvider({
+  settings,
+  children,
+}: {
+  settings: Settings;
+  children: React.ReactNode;
+}) {
+  const queryClient = useMemo(() => new QueryClient(), [settings]);
+  const trpcClient = useMemo(() => getTRPCClient(settings), [settings]);
+
+  return (
+    <api.Provider
+      key={settings.address}
+      client={trpcClient}
+      queryClient={queryClient}
+    >
+      <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
+    </api.Provider>
+  );
+}
-- 
cgit v1.2.3-70-g09d2

