@lobehub/chat 1.105.0 → 1.105.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/changelog/v1.json +18 -0
  3. package/locales/ar/auth.json +54 -0
  4. package/locales/bg-BG/auth.json +54 -0
  5. package/locales/de-DE/auth.json +54 -0
  6. package/locales/en-US/auth.json +54 -0
  7. package/locales/es-ES/auth.json +54 -0
  8. package/locales/fa-IR/auth.json +54 -0
  9. package/locales/fr-FR/auth.json +54 -0
  10. package/locales/it-IT/auth.json +54 -0
  11. package/locales/ja-JP/auth.json +54 -0
  12. package/locales/ko-KR/auth.json +54 -0
  13. package/locales/nl-NL/auth.json +54 -0
  14. package/locales/pl-PL/auth.json +54 -0
  15. package/locales/pt-BR/auth.json +54 -0
  16. package/locales/ru-RU/auth.json +54 -0
  17. package/locales/tr-TR/auth.json +54 -0
  18. package/locales/vi-VN/auth.json +54 -0
  19. package/locales/zh-CN/auth.json +54 -0
  20. package/locales/zh-TW/auth.json +54 -0
  21. package/package.json +2 -2
  22. package/src/app/(backend)/middleware/auth/index.test.ts +5 -5
  23. package/src/app/(backend)/middleware/auth/index.ts +6 -6
  24. package/src/app/(backend)/webapi/chat/[provider]/route.test.ts +11 -9
  25. package/src/app/(backend)/webapi/plugin/gateway/route.ts +2 -2
  26. package/src/app/sitemap.tsx +1 -10
  27. package/src/config/aiModels/giteeai.ts +269 -2
  28. package/src/config/aiModels/qwen.ts +207 -2
  29. package/src/config/aiModels/siliconcloud.ts +24 -2
  30. package/src/config/aiModels/stepfun.ts +67 -2
  31. package/src/config/aiModels/volcengine.ts +56 -2
  32. package/src/config/aiModels/wenxin.ts +62 -2
  33. package/src/config/aiModels/xai.ts +19 -2
  34. package/src/const/auth.ts +2 -3
  35. package/src/libs/model-runtime/ModelRuntime.test.ts +3 -3
  36. package/src/libs/model-runtime/qwen/createImage.ts +29 -9
  37. package/src/libs/trpc/async/context.ts +3 -3
  38. package/src/libs/trpc/edge/context.ts +7 -2
  39. package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +4 -4
  40. package/src/libs/trpc/edge/middleware/jwtPayload.ts +2 -2
  41. package/src/libs/trpc/lambda/context.ts +2 -2
  42. package/src/libs/trpc/lambda/middleware/keyVaults.ts +2 -2
  43. package/src/server/modules/AgentRuntime/index.test.ts +28 -25
  44. package/src/server/modules/AgentRuntime/index.ts +3 -3
  45. package/src/server/routers/async/caller.ts +2 -2
  46. package/src/server/routers/lambda/market/index.ts +0 -14
  47. package/src/server/routers/tools/search.test.ts +2 -2
  48. package/src/server/services/chunk/index.ts +3 -3
  49. package/src/server/services/discover/index.ts +0 -13
  50. package/src/server/sitemap.test.ts +0 -52
  51. package/src/server/sitemap.ts +1 -38
  52. package/src/services/_auth.ts +3 -3
  53. package/src/services/discover.ts +0 -4
  54. package/src/store/discover/slices/mcp/action.ts +0 -8
  55. package/src/utils/client/xor-obfuscation.test.ts +370 -0
  56. package/src/utils/client/xor-obfuscation.ts +39 -0
  57. package/src/utils/server/xor.test.ts +123 -0
  58. package/src/utils/server/xor.ts +42 -0
  59. package/src/utils/jwt.test.ts +0 -27
  60. package/src/utils/jwt.ts +0 -37
  61. package/src/utils/server/jwt.test.ts +0 -62
  62. package/src/utils/server/jwt.ts +0 -28
@@ -1,62 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
-
3
- import { NON_HTTP_PREFIX } from '@/const/auth';
4
-
5
- import { getJWTPayload } from './jwt';
6
-
7
- let enableClerkMock = false;
8
- let enableNextAuthMock = false;
9
-
10
- vi.mock('@/const/auth', async (importOriginal) => {
11
- const data = await importOriginal();
12
-
13
- return {
14
- ...(data as any),
15
- get enableClerk() {
16
- return enableClerkMock;
17
- },
18
- get enableNextAuth() {
19
- return enableNextAuthMock;
20
- },
21
- };
22
- });
23
-
24
- vi.mock('@/envs/app', () => ({
25
- getAppConfig: vi.fn(),
26
- }));
27
-
28
- describe('getJWTPayload', () => {
29
- it('should parse JWT payload for non-HTTPS token', async () => {
30
- const token = `${NON_HTTP_PREFIX}.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ`;
31
- const payload = await getJWTPayload(token);
32
- expect(payload).toEqual({
33
- sub: '1234567890',
34
- name: 'John Doe',
35
- iat: 1516239022,
36
- });
37
- });
38
-
39
- it('should verify and parse JWT payload for HTTPS token', async () => {
40
- const token =
41
- 'eyJhbGciOiJIUzI1NiJ9.eyJhY2Nlc3NDb2RlIjoiIiwidXNlcklkIjoiMDAxMzYyYzMtNDhjNS00NjM1LWJkM2ItODM3YmZmZjU4ZmMwIiwiYXBpS2V5IjoiYWJjIiwiZW5kcG9pbnQiOiJhYmMiLCJpYXQiOjE3MTY4MDIyMjUsImV4cCI6MTAwMDAwMDAwMDE3MTY4MDIwMDB9.FF0FxsE8Cajs-_hv5GD0TNUDwvekAkI9l_LL_IOPdGQ';
42
- const payload = await getJWTPayload(token);
43
- expect(payload).toEqual({
44
- accessCode: '',
45
- apiKey: 'abc',
46
- endpoint: 'abc',
47
- exp: 10000000001716802000,
48
- iat: 1716802225,
49
- userId: '001362c3-48c5-4635-bd3b-837bfff58fc0',
50
- });
51
- });
52
-
53
- it('should not verify success and parse JWT payload for dated token', async () => {
54
- const token =
55
- 'eyJhbGciOiJIUzI1NiJ9.eyJhY2Nlc3NDb2RlIjoiIiwidXNlcklkIjoiYWY3M2JhODktZjFhMy00YjliLWEwM2QtZGViZmZlMzE4NmQxIiwiYXBpS2V5IjoiYWJjIiwiZW5kcG9pbnQiOiJhYmMiLCJpYXQiOjE3MTY3OTk5ODAsImV4cCI6MTcxNjgwMDA4MH0.8AGFsLcwyrQG82kVUYOGFXHIwihm2n16ctyArKW9100';
56
- try {
57
- await getJWTPayload(token);
58
- } catch (e) {
59
- expect((e as Error).message).toEqual('"exp" claim timestamp check failed');
60
- }
61
- });
62
- });
@@ -1,28 +0,0 @@
1
- import { importJWK, jwtVerify } from 'jose';
2
-
3
- import { JWTPayload, JWT_SECRET_KEY, NON_HTTP_PREFIX } from '@/const/auth';
4
-
5
- export const getJWTPayload = async (token: string): Promise<JWTPayload> => {
6
- //如果是 HTTP 协议发起的请求,直接解析 token
7
- // 这是一个非常 hack 的解决方案,未来要找更好的解决方案来处理这个问题
8
- // refs: https://github.com/lobehub/lobe-chat/pull/1238
9
- if (token.startsWith(NON_HTTP_PREFIX)) {
10
- const jwtParts = token.split('.');
11
-
12
- const payload = jwtParts[1];
13
-
14
- return JSON.parse(atob(payload));
15
- }
16
-
17
- const encoder = new TextEncoder();
18
- const secretKey = await crypto.subtle.digest('SHA-256', encoder.encode(JWT_SECRET_KEY));
19
-
20
- const jwkSecretKey = await importJWK(
21
- { k: Buffer.from(secretKey).toString('base64'), kty: 'oct' },
22
- 'HS256',
23
- );
24
-
25
- const { payload } = await jwtVerify(token, jwkSecretKey);
26
-
27
- return payload as JWTPayload;
28
- };