@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
63 lines (53 loc) • 2.05 kB
text/typescript
import { describe, expect, it, vi } from 'vitest';
import { NON_HTTP_PREFIX } from '@/const/auth';
import { getJWTPayload } from './jwt';
let enableClerkMock = false;
let enableNextAuthMock = false;
vi.mock('@/const/auth', async (importOriginal) => {
const data = await importOriginal();
return {
...(data as any),
get enableClerk() {
return enableClerkMock;
},
get enableNextAuth() {
return enableNextAuthMock;
},
};
});
vi.mock('@/envs/app', () => ({
getAppConfig: vi.fn(),
}));
describe('getJWTPayload', () => {
it('should parse JWT payload for non-HTTPS token', async () => {
const token = `${NON_HTTP_PREFIX}.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ`;
const payload = await getJWTPayload(token);
expect(payload).toEqual({
sub: '1234567890',
name: 'John Doe',
iat: 1516239022,
});
});
it('should verify and parse JWT payload for HTTPS token', async () => {
const token =
'eyJhbGciOiJIUzI1NiJ9.eyJhY2Nlc3NDb2RlIjoiIiwidXNlcklkIjoiMDAxMzYyYzMtNDhjNS00NjM1LWJkM2ItODM3YmZmZjU4ZmMwIiwiYXBpS2V5IjoiYWJjIiwiZW5kcG9pbnQiOiJhYmMiLCJpYXQiOjE3MTY4MDIyMjUsImV4cCI6MTAwMDAwMDAwMDE3MTY4MDIwMDB9.FF0FxsE8Cajs-_hv5GD0TNUDwvekAkI9l_LL_IOPdGQ';
const payload = await getJWTPayload(token);
expect(payload).toEqual({
accessCode: '',
apiKey: 'abc',
endpoint: 'abc',
exp: 10000000001716802000,
iat: 1716802225,
userId: '001362c3-48c5-4635-bd3b-837bfff58fc0',
});
});
it('should not verify success and parse JWT payload for dated token', async () => {
const token =
'eyJhbGciOiJIUzI1NiJ9.eyJhY2Nlc3NDb2RlIjoiIiwidXNlcklkIjoiYWY3M2JhODktZjFhMy00YjliLWEwM2QtZGViZmZlMzE4NmQxIiwiYXBpS2V5IjoiYWJjIiwiZW5kcG9pbnQiOiJhYmMiLCJpYXQiOjE3MTY3OTk5ODAsImV4cCI6MTcxNjgwMDA4MH0.8AGFsLcwyrQG82kVUYOGFXHIwihm2n16ctyArKW9100';
try {
await getJWTPayload(token);
} catch (e) {
expect((e as Error).message).toEqual('"exp" claim timestamp check failed');
}
});
});