about summary refs log tree commit diff
path: root/src/state/queries/app-passwords.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/queries/app-passwords.ts')
-rw-r--r--src/state/queries/app-passwords.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/state/queries/app-passwords.ts b/src/state/queries/app-passwords.ts
new file mode 100644
index 000000000..6a7e43610
--- /dev/null
+++ b/src/state/queries/app-passwords.ts
@@ -0,0 +1,56 @@
+import {ComAtprotoServerCreateAppPassword} from '@atproto/api'
+import {useQuery, useQueryClient, useMutation} from '@tanstack/react-query'
+
+import {STALE} from '#/state/queries'
+import {getAgent} from '../session'
+
+export const RQKEY = () => ['app-passwords']
+
+export function useAppPasswordsQuery() {
+  return useQuery({
+    staleTime: STALE.MINUTES.ONE,
+    queryKey: RQKEY(),
+    queryFn: async () => {
+      const res = await getAgent().com.atproto.server.listAppPasswords({})
+      return res.data.passwords
+    },
+  })
+}
+
+export function useAppPasswordCreateMutation() {
+  const queryClient = useQueryClient()
+  return useMutation<
+    ComAtprotoServerCreateAppPassword.OutputSchema,
+    Error,
+    {name: string}
+  >({
+    mutationFn: async ({name}) => {
+      return (
+        await getAgent().com.atproto.server.createAppPassword({
+          name,
+        })
+      ).data
+    },
+    onSuccess() {
+      queryClient.invalidateQueries({
+        queryKey: RQKEY(),
+      })
+    },
+  })
+}
+
+export function useAppPasswordDeleteMutation() {
+  const queryClient = useQueryClient()
+  return useMutation<void, Error, {name: string}>({
+    mutationFn: async ({name}) => {
+      await getAgent().com.atproto.server.revokeAppPassword({
+        name,
+      })
+    },
+    onSuccess() {
+      queryClient.invalidateQueries({
+        queryKey: RQKEY(),
+      })
+    },
+  })
+}