diff options
Diffstat (limited to 'src/state/queries/app-passwords.ts')
-rw-r--r-- | src/state/queries/app-passwords.ts | 56 |
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(), + }) + }, + }) +} |