import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { ApiKey, ApiKeyCreate, ApiKeyCreated, ApiKeyUpdate, CursorPage } from "@umt/contracts"; import { apiData } from "~/lib/api.ts"; import { qk } from "~/lib/query-keys.ts"; import { fetchAllCursorPages } from "./parse.ts"; export function useApiKeys() { return useQuery({ queryKey: qk.list("api-keys"), queryFn: ({ signal }) => fetchAllCursorPages((cursor) => apiData>("/api-keys", { params: { limit: 200, cursor }, signal }), ), }); } /** 创建:明文只在返回值里出现一次 */ export function useCreateApiKey() { const qc = useQueryClient(); return useMutation({ mutationFn: (body: ApiKeyCreate) => apiData("/api-keys", { method: "POST", body }), onSuccess: () => qc.invalidateQueries({ queryKey: qk.all("api-keys") }), }); } export function useUpdateApiKey() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ id, body }: { id: string; body: ApiKeyUpdate }) => apiData("/api-keys/{id}", { method: "PATCH", pathParams: { id }, body }), onSuccess: () => qc.invalidateQueries({ queryKey: qk.all("api-keys") }), }); } export function useRevokeApiKey() { const qc = useQueryClient(); return useMutation({ mutationFn: (id: string) => apiData("/api-keys/{id}", { method: "DELETE", pathParams: { id } }), onSuccess: () => qc.invalidateQueries({ queryKey: qk.all("api-keys") }), }); }