62 lines
2.4 KiB
TypeScript
62 lines
2.4 KiB
TypeScript
|
|
/**
|
||
|
|
* MOCK — แทน Keycloak OIDC/PKCE ของต้นฉบับ (ผู้ใช้งานเลือกไม่ใช้ Keycloak ช่วงพอร์ต)
|
||
|
|
* ต้นฉบับ: D:\word-addin-poc\addin\src\services\authService.ts (login ผ่าน Office Dialog API,
|
||
|
|
* token เก็บใน memory เท่านั้น, auto-refresh)
|
||
|
|
*
|
||
|
|
* วันสลับเป็น auth จริง: เขียน implementation ใหม่โดยคง export surface ด้านล่างครบทุกตัว
|
||
|
|
* (เพิ่ม refreshAccessToken ที่ต้นฉบับมีอยู่แล้วสำหรับ apiClient) — โค้ดอื่นไม่ต้องแตะ
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { config } from "../config";
|
||
|
|
|
||
|
|
/** discriminated union เหมือนต้นฉบับ — ok:false ต้องมี error เสมอ */
|
||
|
|
export type LoginResult = { ok: true } | { ok: false; error: string };
|
||
|
|
|
||
|
|
/** state เดียวของ mock — null = signed out */
|
||
|
|
let username: string | null = null;
|
||
|
|
|
||
|
|
function delay(ms: number): Promise<void> {
|
||
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** จำลองเปิดหน้าต่าง login — สำเร็จทันที ตั้งชื่อจาก NEXT_PUBLIC_ADDIN_MOCK_USERNAME */
|
||
|
|
export async function login(): Promise<LoginResult> {
|
||
|
|
await delay(300);
|
||
|
|
username = config.mockUsername;
|
||
|
|
return { ok: true };
|
||
|
|
}
|
||
|
|
|
||
|
|
/** mock-only — โหมด ?addindemo ใช้ตั้ง session ทันทีไม่ผ่านปุ่ม Sign in */
|
||
|
|
export function signInForDemo(): void {
|
||
|
|
username = config.mockUsername;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getAccessToken(): Promise<string | null> {
|
||
|
|
return username ? `mock-token-${username}` : null;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** mock: token ไม่มีวันหมดอายุจริง — คืนตัวเดิมหรือ null ตามสถานะ login */
|
||
|
|
export async function refreshAccessToken(): Promise<string | null> {
|
||
|
|
return getAccessToken();
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getUsername(): string | undefined {
|
||
|
|
return username ?? undefined;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isTokenValid(): boolean {
|
||
|
|
return username !== null;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function hasRefreshToken(): boolean {
|
||
|
|
return username !== null;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function startAutoRefresh(): void {
|
||
|
|
// mock: ไม่มีอะไรต้อง refresh
|
||
|
|
}
|
||
|
|
|
||
|
|
export function signOut(): void {
|
||
|
|
username = null;
|
||
|
|
}
|