feat: display the balance of current key

This commit is contained in:
RugerMc 2023-03-29 22:09:52 +08:00
parent 9724308008
commit bbafb1ec2d
6 changed files with 72 additions and 1 deletions

View File

@ -0,0 +1,22 @@
import { NextRequest } from "next/server";
export async function POST(req: NextRequest) {
try {
let apiKey = process.env.OPENAI_API_KEY;
const userApiKey = req.headers.get("token");
if (userApiKey) {
apiKey = userApiKey;
}
const res = await fetch("https://api.openai.com/dashboard/billing/credit_grants", {
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${apiKey}`,
},
method: "GET"
});
console.log(res.body)
return new Response(res.body);
} catch (error) {
console.error("[TOKEN]", error);
}
}

View File

@ -27,6 +27,7 @@ import { getCurrentCommitId } from "../utils";
import Link from "next/link";
import { UPDATE_URL } from "../constant";
import { SearchService, usePromptStore } from "../store/prompt";
import { requestAccountBalance, requestCreditSummary, requestWithPrompt } from "../requests";
function SettingItem(props: {
title: string;
@ -72,6 +73,7 @@ export function Settings(props: { closeSettings: () => void }) {
useEffect(() => {
checkUpdate();
requestAccountBalance().then((res)=> setAccountBalance(res))
}, []);
const accessStore = useAccessStore();
@ -84,6 +86,8 @@ export function Settings(props: { closeSettings: () => void }) {
const builtinCount = SearchService.count.builtin;
const customCount = promptStore.prompts.size ?? 0;
const [accountBalance, setAccountBalance] = useState(-1);
return (
<>
<div className={styles["window-header"]}>
@ -320,10 +324,24 @@ export function Settings(props: { closeSettings: () => void }) {
placeholder={Locale.Settings.Token.Placeholder}
onChange={(e) => {
accessStore.updateToken(e.currentTarget.value);
requestAccountBalance().then((res)=> setAccountBalance(res))
}}
></input>
</SettingItem>
<SettingItem
title={Locale.Settings.AccountBalance.Title}
subTitle={Locale.Settings.AccountBalance.SubTitle}
>
<input
value={accountBalance}
type="number"
style={{maxWidth: '15%', textAlign: 'center', display: 'flex', justifyContent: 'center', alignItems: 'center' }}
placeholder={Locale.Settings.AccountBalance.Placeholder}
disabled= {true}
></input>
</SettingItem>
<SettingItem
title={Locale.Settings.HistoryCount.Title}
subTitle={Locale.Settings.HistoryCount.SubTitle}

View File

@ -97,6 +97,11 @@ const cn = {
SubTitle: "使用自己的 Key 可绕过受控访问限制",
Placeholder: "OpenAI API Key",
},
AccountBalance: {
Title: "账户余额",
SubTitle: "查看当前 Key 账户余额",
Placeholder: "-1"
},
AccessCode: {
Title: "访问码",
SubTitle: "现在是受控访问状态",

View File

@ -100,6 +100,11 @@ const en: LocaleType = {
SubTitle: "Use your key to ignore access code limit",
Placeholder: "OpenAI API Key",
},
AccountBalance: {
Title: "Account Balance",
SubTitle: "Query balance of current key",
Placeholder: "-1"
},
AccessCode: {
Title: "Access Code",
SubTitle: "Access control enabled",

View File

@ -98,6 +98,11 @@ const tw: LocaleType = {
SubTitle: "使用自己的 Key 可規避受控訪問限制",
Placeholder: "OpenAI API Key",
},
AccountBalance: {
Title: "賬戶余額",
SubTitle: "查詢當前 Key 的賬戶余額",
Placeholder: "-1"
},
AccessCode: {
Title: "訪問碼",
SubTitle: "現在是受控訪問狀態",

View File

@ -57,6 +57,22 @@ export async function requestChat(messages: Message[]) {
return (await res.json()) as ChatReponse;
}
export async function requestCreditSummary() {
const res = await fetch("/api/credit-summary", {
method: "POST",
headers: {
"Content-Type": "application/json",
...getHeaders(),
},
});
return (await res.json())
}
export async function requestAccountBalance() {
const res = await requestCreditSummary();
return res?.total_available ?? -1
}
export async function requestChatStream(
messages: Message[],
options?: {