@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.
93 lines (87 loc) • 2.63 kB
text/typescript
import { createHmac } from 'node:crypto';
import { describe, expect, it } from 'vitest';
interface UserDataUpdatedEvent {
event: string;
createdAt: string;
userAgent: string;
ip: string;
path: string;
method: string;
status: number;
params: {
userId: string;
};
matchedRoute: string;
data: {
id: string;
username: string;
primaryEmail: string;
primaryPhone: string | null;
name: string;
avatar: string | null;
customData: Record<string, unknown>;
identities: Record<string, unknown>;
lastSignInAt: number;
createdAt: number;
updatedAt: number;
profile: Record<string, unknown>;
applicationId: string;
isSuspended: boolean;
};
hookId: string;
}
const userDataUpdatedEvent: UserDataUpdatedEvent = {
event: 'User.Data.Updated',
createdAt: '2024-09-07T08:29:09.381Z',
userAgent:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0',
ip: '223.104.76.217',
path: '/users/rra41h9vmpnd',
method: 'PATCH',
status: 200,
params: {
userId: 'rra41h9vmpnd',
},
matchedRoute: '/users/:userId',
data: {
id: 'uid',
username: 'test',
primaryEmail: 'user@example.com',
primaryPhone: null,
name: 'test',
avatar: null,
customData: {},
identities: {},
lastSignInAt: 1725446291545,
createdAt: 1725440405556,
updatedAt: 1725697749337,
profile: {},
applicationId: 'appid',
isSuspended: false,
},
hookId: 'hookId',
};
const LOGTO_WEBHOOK_SIGNING_KEY = 'logto-signing-key';
// Test Logto Webhooks in Local dev, here is some tips:
// - Replace the var `LOGTO_WEBHOOK_SIGNING_KEY` with the actual value in your `.env` file
// - Start web request: If you want to run the test, replace `describe.skip` with `describe` below
describe.skip('Test Logto Webhooks in Local dev', () => {
// describe('Test Logto Webhooks in Local dev', () => {
it('should send a POST request with logto headers', async () => {
const url = 'http://localhost:3010/api/webhooks/logto'; // 替换为目标URL
const data = userDataUpdatedEvent;
// Generate data signature
const hmac = createHmac('sha256', LOGTO_WEBHOOK_SIGNING_KEY!);
hmac.update(JSON.stringify(data));
const signature = hmac.digest('hex');
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'logto-signature-sha-256': signature,
},
body: JSON.stringify(data),
});
expect(response.status).toBe(200); // 检查响应状态
});
});