diff --git a/src/core/auth/auth.test.ts b/src/core/auth/auth.test.ts index 62513de9..0c2925b8 100644 --- a/src/core/auth/auth.test.ts +++ b/src/core/auth/auth.test.ts @@ -66,6 +66,20 @@ function loginResponse(accessToken = token(), refreshToken = 'refresh-next') { } } +function domesticOnlyLoginResponse() { + return { + code: '200', + message: 'success', + data: { + tokenType: 'Bearer', + accessToken: token(), + expiresIn: 1800, + refreshToken: 'refresh-domestic', + refreshExpiresIn: 604800, + }, + } +} + describe('admin auth session', () => { beforeEach(() => { vi.stubGlobal('localStorage', createMemoryStorage()) @@ -75,6 +89,17 @@ describe('admin auth session', () => { mocks.refreshHandler = null }) + it('accepts a domestic-only token response when the test environment has no overseas services', async () => { + mocks.post.mockResolvedValue(domesticOnlyLoginResponse()) + mocks.listCurrentPlatformPermissionCodes.mockResolvedValue(['platform:warehouse:list']) + const auth = useAuthStore() + + await auth.login('platform_admin', 'password') + + expect(auth.isAuthenticated).toBe(true) + expect(auth.refreshToken).toBe('refresh-domestic') + }) + it('loads permissions from the current authorization endpoint when the JWT only contains identity', async () => { mocks.post.mockResolvedValue(loginResponse()) mocks.listCurrentPlatformPermissionCodes.mockResolvedValue(['platform:warehouse:list']) diff --git a/src/core/auth/auth.ts b/src/core/auth/auth.ts index a7191f6c..43ac8374 100644 --- a/src/core/auth/auth.ts +++ b/src/core/auth/auth.ts @@ -24,8 +24,8 @@ interface LoginResponse { expiresIn: number refreshToken: string refreshExpiresIn: number - overseasAccessToken: string | null - overseasExpiresIn: number + overseasAccessToken?: string | null + overseasExpiresIn?: number } class ExpiredAccessTokenError extends Error {} @@ -90,7 +90,10 @@ export const useAuthStore = defineStore('admin-auth', () => { async function applySession(result: LoginResponse, expectedGeneration: number) { const session = sessionFromToken(result.accessToken) ensureCurrentGeneration(expectedGeneration) - replaceOverseasAccessToken(result.overseasAccessToken, result.overseasExpiresIn) + replaceOverseasAccessToken( + result.overseasAccessToken ?? null, + result.overseasExpiresIn ?? 0, + ) token.value = result.accessToken refreshToken.value = result.refreshToken user.value = session.user