@lobehub/chat 1.99.6 → 1.100.0

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 (92) hide show
  1. package/.github/workflows/desktop-pr-build.yml +3 -3
  2. package/.github/workflows/release-desktop-beta.yml +3 -3
  3. package/CHANGELOG.md +25 -0
  4. package/apps/desktop/package.json +5 -2
  5. package/apps/desktop/src/main/controllers/AuthCtr.ts +310 -111
  6. package/apps/desktop/src/main/controllers/NetworkProxyCtr.ts +1 -1
  7. package/apps/desktop/src/main/controllers/RemoteServerConfigCtr.ts +50 -3
  8. package/apps/desktop/src/main/controllers/RemoteServerSyncCtr.ts +188 -23
  9. package/apps/desktop/src/main/controllers/__tests__/NetworkProxyCtr.test.ts +37 -18
  10. package/apps/desktop/src/main/types/store.ts +1 -0
  11. package/apps/desktop/src/preload/electronApi.ts +2 -1
  12. package/apps/desktop/src/preload/streamer.ts +58 -0
  13. package/changelog/v1.json +9 -0
  14. package/docs/development/database-schema.dbml +9 -0
  15. package/locales/ar/electron.json +3 -0
  16. package/locales/ar/oauth.json +8 -4
  17. package/locales/bg-BG/electron.json +3 -0
  18. package/locales/bg-BG/oauth.json +8 -4
  19. package/locales/de-DE/electron.json +3 -0
  20. package/locales/de-DE/oauth.json +9 -5
  21. package/locales/en-US/electron.json +3 -0
  22. package/locales/en-US/oauth.json +8 -4
  23. package/locales/es-ES/electron.json +3 -0
  24. package/locales/es-ES/oauth.json +9 -5
  25. package/locales/fa-IR/electron.json +3 -0
  26. package/locales/fa-IR/oauth.json +8 -4
  27. package/locales/fr-FR/electron.json +3 -0
  28. package/locales/fr-FR/oauth.json +8 -4
  29. package/locales/it-IT/electron.json +3 -0
  30. package/locales/it-IT/oauth.json +9 -5
  31. package/locales/ja-JP/electron.json +3 -0
  32. package/locales/ja-JP/oauth.json +8 -4
  33. package/locales/ko-KR/electron.json +3 -0
  34. package/locales/ko-KR/oauth.json +8 -4
  35. package/locales/nl-NL/electron.json +3 -0
  36. package/locales/nl-NL/oauth.json +9 -5
  37. package/locales/pl-PL/electron.json +3 -0
  38. package/locales/pl-PL/oauth.json +8 -4
  39. package/locales/pt-BR/electron.json +3 -0
  40. package/locales/pt-BR/oauth.json +8 -4
  41. package/locales/ru-RU/electron.json +3 -0
  42. package/locales/ru-RU/oauth.json +8 -4
  43. package/locales/tr-TR/electron.json +3 -0
  44. package/locales/tr-TR/oauth.json +8 -4
  45. package/locales/vi-VN/electron.json +3 -0
  46. package/locales/vi-VN/oauth.json +9 -5
  47. package/locales/zh-CN/electron.json +3 -0
  48. package/locales/zh-CN/oauth.json +8 -4
  49. package/locales/zh-TW/electron.json +3 -0
  50. package/locales/zh-TW/oauth.json +8 -4
  51. package/package.json +3 -3
  52. package/packages/electron-client-ipc/src/dispatch.ts +14 -2
  53. package/packages/electron-client-ipc/src/index.ts +1 -0
  54. package/packages/electron-client-ipc/src/streamInvoke.ts +62 -0
  55. package/packages/electron-client-ipc/src/types/proxyTRPCRequest.ts +5 -0
  56. package/packages/electron-client-ipc/src/utils/headers.ts +27 -0
  57. package/packages/electron-client-ipc/src/utils/request.ts +28 -0
  58. package/src/app/(backend)/oidc/callback/desktop/route.ts +58 -0
  59. package/src/app/(backend)/oidc/handoff/route.ts +46 -0
  60. package/src/app/[variants]/oauth/callback/error/page.tsx +55 -0
  61. package/src/app/[variants]/oauth/callback/layout.tsx +12 -0
  62. package/src/app/[variants]/oauth/callback/loading.tsx +3 -0
  63. package/src/app/[variants]/oauth/{consent/[uid] → callback}/success/page.tsx +10 -1
  64. package/src/app/[variants]/oauth/consent/[uid]/Consent.tsx +7 -1
  65. package/src/database/client/migrations.json +8 -0
  66. package/src/database/migrations/0028_oauth_handoffs.sql +8 -0
  67. package/src/database/migrations/meta/0028_snapshot.json +6055 -0
  68. package/src/database/migrations/meta/_journal.json +7 -0
  69. package/src/database/models/oauthHandoff.ts +94 -0
  70. package/src/database/repositories/tableViewer/index.test.ts +1 -1
  71. package/src/database/schemas/oidc.ts +46 -0
  72. package/src/features/ElectronTitlebar/Connection/Waiting.tsx +59 -115
  73. package/src/features/ElectronTitlebar/Connection/WaitingAnim.tsx +114 -0
  74. package/src/libs/oidc-provider/config.ts +16 -17
  75. package/src/libs/oidc-provider/jwt.ts +135 -0
  76. package/src/libs/oidc-provider/provider.ts +22 -38
  77. package/src/libs/trpc/client/async.ts +1 -2
  78. package/src/libs/trpc/client/edge.ts +1 -2
  79. package/src/libs/trpc/client/lambda.ts +1 -1
  80. package/src/libs/trpc/client/tools.ts +1 -2
  81. package/src/libs/trpc/lambda/context.ts +9 -16
  82. package/src/locales/default/electron.ts +3 -0
  83. package/src/locales/default/oauth.ts +8 -4
  84. package/src/middleware.ts +10 -4
  85. package/src/server/services/oidc/index.ts +0 -71
  86. package/src/services/chat.ts +5 -1
  87. package/src/services/electron/remoteServer.ts +0 -7
  88. package/src/{libs/trpc/client/helpers → utils/electron}/desktopRemoteRPCFetch.ts +22 -7
  89. package/src/utils/server/auth.ts +22 -0
  90. package/src/app/[variants]/oauth/consent/[uid]/failed/page.tsx +0 -36
  91. package/src/app/[variants]/oauth/handoff/Client.tsx +0 -98
  92. package/src/app/[variants]/oauth/handoff/page.tsx +0 -13
@@ -1,98 +0,0 @@
1
- 'use client';
2
-
3
- import { Text } from '@lobehub/ui';
4
- import { Spin } from 'antd';
5
- import { createStyles } from 'antd-style';
6
- import { useSearchParams } from 'next/navigation';
7
- import React, { useEffect, useState } from 'react';
8
- import { useTranslation } from 'react-i18next';
9
- import { Center, Flexbox } from 'react-layout-kit';
10
-
11
- const useStyles = createStyles(({ css, token }) => ({
12
- container: css`
13
- width: 100%;
14
- min-height: 100vh;
15
- padding-block: 40px;
16
- padding-inline: 24px;
17
-
18
- color: ${token.colorTextBase};
19
-
20
- background-color: ${token.colorBgLayout};
21
- `,
22
- content: css`
23
- max-width: 600px;
24
- text-align: center;
25
- `,
26
- message: css`
27
- margin-block-end: ${token.marginXL}px;
28
- color: ${token.colorTextSecondary};
29
- `,
30
- title: css`
31
- margin-block-end: ${token.marginLG}px;
32
- font-size: 24px;
33
- `,
34
- }));
35
-
36
- interface Status {
37
- desc: string;
38
- status: 'processing' | 'success';
39
- title: string;
40
- }
41
- const AuthHandoffPage = () => {
42
- const { styles } = useStyles();
43
- const { t } = useTranslation('oauth'); // Assuming 'oauth' namespace exists
44
- const searchParams = useSearchParams();
45
-
46
- const [status, setStatus] = useState<Status>({
47
- desc: t('handoff.desc.processing'),
48
- status: 'processing',
49
- title: t('handoff.title.processing'),
50
- });
51
-
52
- const [isError, setIsError] = useState<boolean>(false);
53
-
54
- useEffect(() => {
55
- const targetUrl = searchParams.get('target');
56
-
57
- if (targetUrl) {
58
- try {
59
- const decodedTargetUrl = decodeURIComponent(targetUrl);
60
- console.log(`Attempting redirect to: ${decodedTargetUrl}`);
61
-
62
- window.location.href = decodedTargetUrl;
63
-
64
- const url = new URL(decodedTargetUrl);
65
- if (!url.pathname.startsWith('/oidc/auth')) {
66
- setStatus({
67
- desc: t('handoff.desc.success'),
68
- status: 'success',
69
- title: t('handoff.title.success'),
70
- });
71
- }
72
- } catch (error) {
73
- console.error('Error decoding or redirecting:', error);
74
- // setMessage(
75
- // t('handoff.error', '无法自动打开桌面应用。请检查链接是否有效或尝试手动打开应用。'),
76
- // );
77
- setIsError(true);
78
- }
79
- } else {
80
- console.error('Missing target URL for handoff.');
81
- setIsError(true);
82
- }
83
- }, [searchParams]);
84
-
85
- return (
86
- <Center className={styles.container} gap={12}>
87
- {!isError && <Spin size="large" />}
88
- <Flexbox align="center" className={styles.content} gap={16}>
89
- <Text as={'h3'} className={styles.title}>
90
- {status.title}
91
- </Text>
92
- <Text className={styles.message}>{status.desc}</Text>
93
- </Flexbox>
94
- </Center>
95
- );
96
- };
97
-
98
- export default AuthHandoffPage;
@@ -1,13 +0,0 @@
1
- 'use client';
2
-
3
- import React, { Suspense } from 'react';
4
-
5
- import Client from './Client';
6
-
7
- const AuthHandoffPage = () => (
8
- <Suspense>
9
- <Client />
10
- </Suspense>
11
- );
12
-
13
- export default AuthHandoffPage;