diff --git a/.env.example b/.env.example index d318391..8e0e81a 100644 --- a/.env.example +++ b/.env.example @@ -36,6 +36,13 @@ CLARITY_TOKEN= # [선택] Clarity 에러 알림에 표기할 관리자 이름 ADMIN_NAME= +# ── KOIN 관리자 API ────────────────────────────────────── +# [필수] KOIN 관리자 API 로그인 +KOIN_API_BASE_URL= +KOIN_ADMIN_EMAIL= +# KOIN API 명세에 따라 SHA-256으로 처리된 비밀번호 +KOIN_ADMIN_PASSWORD= + # ── 로컬 모델(RAG, Ollama 사이드카) ────────────────────── # [선택] 기본 http://localhost:11434 (봇과 같은 박스의 Ollama). 보통 비워둠 OLLAMA_BASE_URL= diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d63fe9f..753d7bd 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -54,6 +54,9 @@ jobs: ADMIN_NAME: ${{ secrets.ADMIN_NAME }} GOOGLE_REDIRECT_URI: ${{ secrets.GOOGLE_REDIRECT_URI }} NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }} + KOIN_API_BASE_URL: ${{ secrets.KOIN_API_BASE_URL }} + KOIN_ADMIN_EMAIL: ${{ secrets.KOIN_ADMIN_EMAIL }} + KOIN_ADMIN_PASSWORD: ${{ secrets.KOIN_ADMIN_PASSWORD }} run: | cat < .env SLACK_BOT_TOKEN=$SLACK_BOT_TOKEN @@ -76,6 +79,9 @@ jobs: ADMIN_NAME=$ADMIN_NAME GOOGLE_REDIRECT_URI=$GOOGLE_REDIRECT_URI NOTION_TOKEN=$NOTION_TOKEN + KOIN_API_BASE_URL=$KOIN_API_BASE_URL + KOIN_ADMIN_EMAIL=$KOIN_ADMIN_EMAIL + KOIN_ADMIN_PASSWORD=$KOIN_ADMIN_PASSWORD GDRIVE_FOLDER_IDS=1fMJGkRIuGWBCHnN0pI5Teab9dKtnkw4s,1cxrf10solU3-qPk_1gWmQOSe1KmMM7dA,1XHBKifEhBQdM4DJAOm44YkNxZpMdGAzF,1eKuZ-lzwpxlJu4-9KciF3XYj3GN-lu28,1X2wch3Av6DMYHYufWy6ybol2saRaVdOq,10c1R4a9-HgNrV4t-Vzj6crGhHK1s06HP,1y0yv2oItH3a_Obo5Jvw_ifH3DlbbHbLp,1iEUpsaoquhwCNBLI7hIDznhAuO33YMGo,1dEVWkUaxKpubTdfawzTtE4km-a7LPsRo,1UAAUK7yqHcyCVZI6Xou3u9Eh4YqyAYYc,1XYia9-0r_F-JGU-wLQdmLB8WFllT3ssa,1_HZB6ztDxOloF9Va-Qw2X38iYFiMMPIW,1-aBgwPhmDeSO327VdvR3NFnYqoNu6Anj,1fyrohFc92yjzZ_FuGAs0yssQcxzSgz4t,1J0y8zCdN9-P_ASkZuO3g30_SUKSVRb7r,1MBMf16gw-XPzv9SRrAPq8L-UqWSf7QV9 EOF diff --git a/src/services/koin/adminLogin.ts b/src/services/koin/adminLogin.ts new file mode 100644 index 0000000..6528dac --- /dev/null +++ b/src/services/koin/adminLogin.ts @@ -0,0 +1,24 @@ +interface KoinAdminLoginResponse { + token: string; +} + +export async function loginKoinAdmin(): Promise { + const baseURL = import.meta.env.KOIN_API_BASE_URL; + const email = import.meta.env.KOIN_ADMIN_EMAIL; + const password = import.meta.env.KOIN_ADMIN_PASSWORD; + + const response = await $fetch("admin/user/login", { + baseURL, + method: "POST", + body: { + email, + password, + } + }); + + if (typeof response.token !== "string" || response.token.length === 0) { + throw new Error("KOIN 관리자 로그인 응답에 액세스 토큰이 없습니다."); + } + + return response.token; +} diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 5fa4953..e8e7d76 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -17,6 +17,9 @@ interface ImportMetaEnv { readonly GOOGLE_PROJECT_ID: string; readonly CREDENTIALS_PATH: string; readonly ADMIN_NAME: string; + readonly KOIN_API_BASE_URL: string; + readonly KOIN_ADMIN_EMAIL: string; + readonly KOIN_ADMIN_PASSWORD: string; readonly OLLAMA_BASE_URL?: string; readonly OLLAMA_GEN_MODEL?: string; readonly NOTION_TOKEN?: string; @@ -24,4 +27,4 @@ interface ImportMetaEnv { } interface ImportMeta { env: ImportMetaEnv; -} \ No newline at end of file +}