Files
biliup/app/lib/use-streamers.ts
T
Mostly_Harmless b438d72415 feat(web): 完善账号管理、稿件查询与安全边界 (#1660)
启动 Web 服务时自动登记 CLI 指定的 B 站凭据,并为账号登记、刷新和删除统一补上并发去重、原子写入及引用检查。

同时收紧默认监听、管理员初始化、认证路由、静态文件和日志 WebSocket,恢复 server 的 ds_update.log,并避免凭据及上游响应进入日志。

新增按账号查询远程稿件的 API 与 Web 页面,补齐严格分页和响应校验。

关联 biliup/biliup#1624

关联 biliup/biliup#1658

关联 biliup/biliup#724
2026-08-16 14:05:20 +00:00

71 lines
1.5 KiB
TypeScript

import useSWR from "swr";
import {
BiliType,
fetcher,
LiveStreamerEntity,
User
} from "./api-streamer";
import {useEffect, useState} from "react";
export default function useStreamers() {
const { data, error, isLoading } = useSWR<LiveStreamerEntity[]>("/v1/streamers", fetcher);
return {
isLoading,
streamers: data,
};
}
export function useBiliUsers() {
const {data, error, isLoading} = useSWR<User[]>("/v1/users", fetcher);
const [list, setList] = useState<any[]>([]);
useEffect(() => {
if (!data || data.length === 0) {
setList([])
return;
}
const updateList = async (item: User) => {
try {
const res = await fetcher(`/v1/users/${item.id}`, undefined);
return {
...item,
name: res.data.name,
face: res.data?.face || "/noface.jpg",
};
} catch (error) {
console.error(error);
return {
...item,
name: "Cookie已失效",
face: "/noface.jpg",
};
}
};
Promise.all(data.map(updateList)).then(setList);
}, [data])
return {
isLoading,
isError: error,
biliUsers: list,
};
}
export function useTypeTree() {
const { data: archivePre, error, isLoading } = useSWR("/bili/archive/pre", fetcher);
const treeData = archivePre?.data?.typelist.map((type: BiliType)=> {
return {
label: type.name,
value: type.id,
children: type.children
};
});
return {
isLoading,
isError: error,
typeTree: treeData,
};
}