diff --git a/src/pages/account/login/index.vue b/src/pages/account/login/index.vue
index 2fa873e..ccde674 100644
--- a/src/pages/account/login/index.vue
+++ b/src/pages/account/login/index.vue
@@ -1,4 +1,6 @@
diff --git a/src/server/api/account/login/index.ts b/src/server/api/account/login/index.ts
index d13e0c4..440a01c 100644
--- a/src/server/api/account/login/index.ts
+++ b/src/server/api/account/login/index.ts
@@ -1,25 +1,36 @@
+import { FetchError } from 'ofetch';
+
+type LoginCCResponse = {
+ refresh_token: string;
+ access_token: string;
+ token_type: string;
+ expires_in: number;
+};
+
export default defineEventHandler(async (event) => {
const body = await readBody(event);
- const apiResponse = await fetch(`${useRuntimeConfig(event).apiBase}/v1/login`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({ ...body, grant_type: 'password' })
- });
- const apiJSON = await apiResponse.json();
- if (!apiResponse.ok) {
- setResponseStatus(event, apiResponse.status, apiJSON.error);
+ try {
+ const apiResponse = await $fetch(`${useRuntimeConfig(event).apiBase}/v1/login`, {
+ method: 'POST',
+ body: { ...body, grant_type: 'password' }
+ });
+
+ setCookie(event, 'refresh_token', apiResponse.refresh_token);
+ setCookie(event, 'access_token', apiResponse.access_token);
+ setCookie(event, 'token_type', apiResponse.token_type);
+
+ setResponseStatus(event, 200);
+ event.node.res.end();
+ } catch (error: unknown) {
+ if (error instanceof FetchError) {
+ setResponseStatus(event, error.status, error.data.error);
+ } else {
+ setResponseStatus(event, 500);
+ }
+
event.node.res.end();
return;
}
-
- setCookie(event, 'refresh_token', apiJSON.refresh_token);
- setCookie(event, 'access_token', apiJSON.access_token);
- setCookie(event, 'token_type', apiJSON.token_type);
-
- setResponseStatus(event, 200);
- event.node.res.end();
});