@lobehub/chat 1.79.7 → 1.79.9
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.
- package/.eslintrc.js +1 -0
- package/CHANGELOG.md +58 -0
- package/changelog/v1.json +18 -0
- package/docs/development/database-schema.dbml +119 -0
- package/locales/ar/models.json +12 -0
- package/locales/ar/oauth.json +40 -0
- package/locales/bg-BG/models.json +12 -0
- package/locales/bg-BG/oauth.json +40 -0
- package/locales/de-DE/models.json +12 -0
- package/locales/de-DE/oauth.json +40 -0
- package/locales/en-US/models.json +12 -0
- package/locales/en-US/oauth.json +40 -0
- package/locales/es-ES/models.json +12 -0
- package/locales/es-ES/oauth.json +40 -0
- package/locales/fa-IR/models.json +12 -0
- package/locales/fa-IR/oauth.json +40 -0
- package/locales/fr-FR/models.json +12 -0
- package/locales/fr-FR/oauth.json +40 -0
- package/locales/it-IT/models.json +12 -0
- package/locales/it-IT/oauth.json +40 -0
- package/locales/ja-JP/models.json +12 -0
- package/locales/ja-JP/oauth.json +40 -0
- package/locales/ko-KR/models.json +12 -0
- package/locales/ko-KR/oauth.json +40 -0
- package/locales/nl-NL/models.json +12 -0
- package/locales/nl-NL/oauth.json +40 -0
- package/locales/pl-PL/models.json +12 -0
- package/locales/pl-PL/oauth.json +40 -0
- package/locales/pt-BR/models.json +12 -0
- package/locales/pt-BR/oauth.json +40 -0
- package/locales/ru-RU/models.json +12 -0
- package/locales/ru-RU/oauth.json +40 -0
- package/locales/tr-TR/models.json +12 -0
- package/locales/tr-TR/oauth.json +40 -0
- package/locales/vi-VN/models.json +12 -0
- package/locales/vi-VN/oauth.json +40 -0
- package/locales/zh-CN/models.json +12 -0
- package/locales/zh-CN/oauth.json +40 -0
- package/locales/zh-TW/models.json +12 -0
- package/locales/zh-TW/oauth.json +40 -0
- package/package.json +4 -1
- package/scripts/generate-oidc-jwk.mjs +59 -0
- package/scripts/migrateServerDB/index.ts +3 -1
- package/src/app/(backend)/oidc/[...oidc]/route.ts +96 -0
- package/src/app/(backend)/oidc/consent/route.ts +131 -0
- package/src/app/(backend)/trpc/async/[trpc]/route.ts +1 -1
- package/src/app/(backend)/trpc/edge/[trpc]/route.ts +2 -2
- package/src/app/(backend)/trpc/lambda/[trpc]/route.ts +2 -2
- package/src/app/(backend)/trpc/tools/[trpc]/route.ts +2 -2
- package/src/app/[variants]/(main)/files/[id]/page.tsx +1 -1
- package/src/app/[variants]/oauth/consent/[uid]/Client.tsx +224 -0
- package/src/app/[variants]/oauth/consent/[uid]/ClientError.tsx +46 -0
- package/src/app/[variants]/oauth/consent/[uid]/failed/page.tsx +36 -0
- package/src/app/[variants]/oauth/consent/[uid]/page.tsx +69 -0
- package/src/app/[variants]/oauth/consent/[uid]/success/page.tsx +30 -0
- package/src/components/Branding/ProductLogo/index.tsx +6 -1
- package/src/config/aiModels/openai.ts +63 -41
- package/src/database/client/migrations.json +27 -8
- package/src/database/migrations/0020_add_oidc.sql +124 -0
- package/src/database/migrations/meta/0020_snapshot.json +4975 -0
- package/src/database/migrations/meta/_journal.json +7 -0
- package/src/database/repositories/tableViewer/index.test.ts +1 -1
- package/src/database/schemas/index.ts +1 -0
- package/src/database/schemas/oidc.ts +158 -0
- package/src/database/server/models/__tests__/adapter.test.ts +499 -0
- package/src/envs/oidc.ts +18 -0
- package/src/libs/agent-runtime/azureOpenai/index.ts +4 -1
- package/src/libs/agent-runtime/utils/streams/protocol.ts +2 -4
- package/src/libs/oidc-provider/adapter.ts +541 -0
- package/src/libs/oidc-provider/config.ts +52 -0
- package/src/libs/oidc-provider/http-adapter.ts +311 -0
- package/src/libs/oidc-provider/interaction-policy.ts +37 -0
- package/src/libs/oidc-provider/provider.ts +288 -0
- package/src/libs/trpc/async/init.ts +1 -1
- package/src/{server → libs/trpc/edge}/context.ts +2 -2
- package/src/libs/trpc/{index.ts → edge/index.ts} +8 -8
- package/src/libs/trpc/{init.ts → edge/init.ts} +2 -2
- package/src/libs/trpc/{middleware → edge/middleware}/jwtPayload.test.ts +3 -3
- package/src/libs/trpc/{middleware → edge/middleware}/jwtPayload.ts +3 -2
- package/src/libs/trpc/lambda/context.ts +70 -0
- package/src/libs/trpc/lambda/index.ts +39 -1
- package/src/libs/trpc/lambda/init.ts +26 -0
- package/src/libs/trpc/lambda/middleware/index.ts +2 -0
- package/src/libs/trpc/{middleware → lambda/middleware}/keyVaults.ts +2 -1
- package/src/libs/trpc/lambda/{serverDatabase.ts → middleware/serverDatabase.ts} +2 -1
- package/src/libs/trpc/middleware/userAuth.test.ts +3 -3
- package/src/libs/trpc/middleware/userAuth.ts +1 -1
- package/src/libs/trpc/mock.ts +7 -0
- package/src/locales/default/index.ts +2 -0
- package/src/locales/default/oauth.ts +43 -0
- package/src/middleware.ts +94 -6
- package/src/server/routers/edge/appStatus.ts +1 -1
- package/src/server/routers/edge/config/index.test.ts +2 -3
- package/src/server/routers/edge/config/index.ts +1 -1
- package/src/server/routers/edge/index.ts +1 -1
- package/src/server/routers/edge/upload.ts +1 -1
- package/src/server/routers/lambda/_template.ts +2 -2
- package/src/server/routers/lambda/agent.ts +2 -2
- package/src/server/routers/lambda/aiModel.ts +2 -2
- package/src/server/routers/lambda/aiProvider.ts +2 -2
- package/src/server/routers/lambda/chunk.ts +2 -3
- package/src/server/routers/lambda/exporter.ts +2 -2
- package/src/server/routers/lambda/file.ts +2 -2
- package/src/server/routers/lambda/importer.ts +2 -2
- package/src/server/routers/lambda/index.ts +1 -1
- package/src/server/routers/lambda/knowledgeBase.ts +2 -2
- package/src/server/routers/lambda/message.ts +2 -2
- package/src/server/routers/lambda/plugin.ts +2 -2
- package/src/server/routers/lambda/ragEval.ts +2 -3
- package/src/server/routers/lambda/session.ts +2 -2
- package/src/server/routers/lambda/sessionGroup.ts +2 -2
- package/src/server/routers/lambda/thread.ts +2 -2
- package/src/server/routers/lambda/topic.ts +2 -2
- package/src/server/routers/lambda/user.ts +2 -2
- package/src/server/routers/tools/__tests__/search.test.ts +2 -2
- package/src/server/routers/tools/index.ts +1 -1
- package/src/server/routers/tools/search.ts +2 -1
- package/src/server/services/oidc/index.ts +64 -0
- package/src/server/services/oidc/oidcProvider.ts +25 -0
- package/src/server/mock.ts +0 -8
- /package/src/{server/asyncContext.ts → libs/trpc/async/context.ts} +0 -0
@@ -5,8 +5,8 @@ import { serverDBEnv } from '@/config/db';
|
|
5
5
|
import { AsyncTaskModel } from '@/database/models/asyncTask';
|
6
6
|
import { ChunkModel } from '@/database/models/chunk';
|
7
7
|
import { FileModel } from '@/database/models/file';
|
8
|
-
import { authedProcedure, router } from '@/libs/trpc';
|
9
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
8
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
9
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
10
10
|
import { FileService } from '@/server/services/file';
|
11
11
|
import { AsyncTaskStatus, AsyncTaskType } from '@/types/asyncTask';
|
12
12
|
import { FileListItem, QueryFileListSchema, UploadFileSchema } from '@/types/files';
|
@@ -2,8 +2,8 @@ import { TRPCError } from '@trpc/server';
|
|
2
2
|
import { z } from 'zod';
|
3
3
|
|
4
4
|
import { DataImporterRepos } from '@/database/repositories/dataImporter';
|
5
|
-
import { authedProcedure, router } from '@/libs/trpc';
|
6
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
5
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
6
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
7
7
|
import { FileService } from '@/server/services/file';
|
8
8
|
import { ImportPgDataStructure } from '@/types/export';
|
9
9
|
import { ImportResultData, ImporterEntryData } from '@/types/importer';
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/**
|
2
2
|
* This file contains the root router of Lobe Chat tRPC-backend
|
3
3
|
*/
|
4
|
-
import { publicProcedure, router } from '@/libs/trpc';
|
4
|
+
import { publicProcedure, router } from '@/libs/trpc/lambda';
|
5
5
|
|
6
6
|
import { agentRouter } from './agent';
|
7
7
|
import { aiModelRouter } from './aiModel';
|
@@ -2,8 +2,8 @@ import { z } from 'zod';
|
|
2
2
|
|
3
3
|
import { KnowledgeBaseModel } from '@/database/models/knowledgeBase';
|
4
4
|
import { insertKnowledgeBasesSchema } from '@/database/schemas';
|
5
|
-
import { authedProcedure, router } from '@/libs/trpc';
|
6
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
5
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
6
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
7
7
|
import { KnowledgeBaseItem } from '@/types/knowledgeBase';
|
8
8
|
|
9
9
|
const knowledgeBaseProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
|
@@ -3,8 +3,8 @@ import { z } from 'zod';
|
|
3
3
|
import { MessageModel } from '@/database/models/message';
|
4
4
|
import { updateMessagePluginSchema } from '@/database/schemas';
|
5
5
|
import { getServerDB } from '@/database/server';
|
6
|
-
import { authedProcedure, publicProcedure, router } from '@/libs/trpc';
|
7
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
6
|
+
import { authedProcedure, publicProcedure, router } from '@/libs/trpc/lambda';
|
7
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
8
8
|
import { FileService } from '@/server/services/file';
|
9
9
|
import { ChatMessage } from '@/types/message';
|
10
10
|
import { BatchTaskResult } from '@/types/service';
|
@@ -2,8 +2,8 @@ import { z } from 'zod';
|
|
2
2
|
|
3
3
|
import { PluginModel } from '@/database/models/plugin';
|
4
4
|
import { getServerDB } from '@/database/server';
|
5
|
-
import { authedProcedure, publicProcedure, router } from '@/libs/trpc';
|
6
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
5
|
+
import { authedProcedure, publicProcedure, router } from '@/libs/trpc/lambda';
|
6
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
7
7
|
import { LobeTool } from '@/types/tool';
|
8
8
|
|
9
9
|
const pluginProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
|
@@ -13,9 +13,8 @@ import {
|
|
13
13
|
EvalEvaluationModel,
|
14
14
|
EvaluationRecordModel,
|
15
15
|
} from '@/database/server/models/ragEval';
|
16
|
-
import { authedProcedure, router } from '@/libs/trpc';
|
17
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
18
|
-
import { keyVaults } from '@/libs/trpc/middleware/keyVaults';
|
16
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
17
|
+
import { keyVaults, serverDatabase } from '@/libs/trpc/lambda/middleware';
|
19
18
|
import { createAsyncServerClient } from '@/server/routers/async';
|
20
19
|
import { FileService } from '@/server/services/file';
|
21
20
|
import {
|
@@ -4,8 +4,8 @@ import { SessionModel } from '@/database/models/session';
|
|
4
4
|
import { SessionGroupModel } from '@/database/models/sessionGroup';
|
5
5
|
import { insertAgentSchema, insertSessionSchema } from '@/database/schemas';
|
6
6
|
import { getServerDB } from '@/database/server';
|
7
|
-
import { authedProcedure, publicProcedure, router } from '@/libs/trpc';
|
8
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
7
|
+
import { authedProcedure, publicProcedure, router } from '@/libs/trpc/lambda';
|
8
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
9
9
|
import { AgentChatConfigSchema } from '@/types/agent';
|
10
10
|
import { LobeMetaDataSchema } from '@/types/meta';
|
11
11
|
import { BatchTaskResult } from '@/types/service';
|
@@ -2,8 +2,8 @@ import { z } from 'zod';
|
|
2
2
|
|
3
3
|
import { SessionGroupModel } from '@/database/models/sessionGroup';
|
4
4
|
import { insertSessionGroupSchema } from '@/database/schemas';
|
5
|
-
import { authedProcedure, router } from '@/libs/trpc';
|
6
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
5
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
6
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
7
7
|
import { SessionGroupItem } from '@/types/session';
|
8
8
|
|
9
9
|
const sessionProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
|
@@ -3,8 +3,8 @@ import { z } from 'zod';
|
|
3
3
|
import { MessageModel } from '@/database/models/message';
|
4
4
|
import { ThreadModel } from '@/database/models/thread';
|
5
5
|
import { insertThreadSchema } from '@/database/schemas';
|
6
|
-
import { authedProcedure, router } from '@/libs/trpc';
|
7
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
6
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
7
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
8
8
|
import { ThreadItem, createThreadSchema } from '@/types/topic/thread';
|
9
9
|
|
10
10
|
const threadProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
|
@@ -2,8 +2,8 @@ import { z } from 'zod';
|
|
2
2
|
|
3
3
|
import { TopicModel } from '@/database/models/topic';
|
4
4
|
import { getServerDB } from '@/database/server';
|
5
|
-
import { authedProcedure, publicProcedure, router } from '@/libs/trpc';
|
6
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
5
|
+
import { authedProcedure, publicProcedure, router } from '@/libs/trpc/lambda';
|
6
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
7
7
|
import { BatchTaskResult } from '@/types/service';
|
8
8
|
|
9
9
|
const topicProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
|
@@ -7,8 +7,8 @@ import { SessionModel } from '@/database/models/session';
|
|
7
7
|
import { UserModel, UserNotFoundError } from '@/database/models/user';
|
8
8
|
import { ClerkAuth } from '@/libs/clerk-auth';
|
9
9
|
import { LobeNextAuthDbAdapter } from '@/libs/next-auth/adapter';
|
10
|
-
import { authedProcedure, router } from '@/libs/trpc';
|
11
|
-
import { serverDatabase } from '@/libs/trpc/lambda';
|
10
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
11
|
+
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
|
12
12
|
import { KeyVaultsGateKeeper } from '@/server/modules/KeyVaultsEncrypt';
|
13
13
|
import { UserService } from '@/server/services/user';
|
14
14
|
import {
|
@@ -6,8 +6,8 @@ import { isServerMode } from '@/const/version';
|
|
6
6
|
/**
|
7
7
|
* This file contains the root router of your tRPC-backend
|
8
8
|
*/
|
9
|
-
import { createCallerFactory } from '@/libs/trpc';
|
10
|
-
import { AuthContext, createContextInner } from '@/
|
9
|
+
import { createCallerFactory } from '@/libs/trpc/lambda';
|
10
|
+
import { AuthContext, createContextInner } from '@/libs/trpc/lambda/context';
|
11
11
|
import { SearXNGClient } from '@/server/modules/SearXNG';
|
12
12
|
|
13
13
|
import { searchRouter } from '../search';
|
@@ -5,7 +5,8 @@ import { z } from 'zod';
|
|
5
5
|
|
6
6
|
import { toolsEnv } from '@/config/tools';
|
7
7
|
import { isServerMode } from '@/const/version';
|
8
|
-
import {
|
8
|
+
import { passwordProcedure } from '@/libs/trpc/edge';
|
9
|
+
import { authedProcedure, router } from '@/libs/trpc/lambda';
|
9
10
|
import { SearXNGClient } from '@/server/modules/SearXNG';
|
10
11
|
import { SEARCH_SEARXNG_NOT_CONFIG } from '@/types/tool/search';
|
11
12
|
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import debug from 'debug';
|
2
|
+
|
3
|
+
import { createContextForInteractionDetails } from '@/libs/oidc-provider/http-adapter';
|
4
|
+
import { OIDCProvider } from '@/libs/oidc-provider/provider';
|
5
|
+
|
6
|
+
import { getOIDCProvider } from './oidcProvider';
|
7
|
+
|
8
|
+
const log = debug('lobe-oidc:service');
|
9
|
+
|
10
|
+
export class OIDCService {
|
11
|
+
private provider: OIDCProvider;
|
12
|
+
|
13
|
+
constructor(provider: OIDCProvider) {
|
14
|
+
this.provider = provider;
|
15
|
+
}
|
16
|
+
static async initialize() {
|
17
|
+
const provider = await getOIDCProvider();
|
18
|
+
|
19
|
+
return new OIDCService(provider);
|
20
|
+
}
|
21
|
+
|
22
|
+
async getInteractionDetails(uid: string) {
|
23
|
+
const { req, res } = await createContextForInteractionDetails(uid);
|
24
|
+
return this.provider.interactionDetails(req, res);
|
25
|
+
}
|
26
|
+
|
27
|
+
async getInteractionResult(uid: string, result: any) {
|
28
|
+
const { req, res } = await createContextForInteractionDetails(uid);
|
29
|
+
return this.provider.interactionResult(req, res, result);
|
30
|
+
}
|
31
|
+
|
32
|
+
async finishInteraction(uid: string, result: any) {
|
33
|
+
const { req, res } = await createContextForInteractionDetails(uid);
|
34
|
+
return this.provider.interactionFinished(req, res, result, { mergeWithLastSubmission: true });
|
35
|
+
}
|
36
|
+
|
37
|
+
async findOrCreateGrants(accountId: string, clientId: string, existingGrantId?: string) {
|
38
|
+
// 2. 查找或创建 Grant 对象
|
39
|
+
let grant;
|
40
|
+
if (existingGrantId) {
|
41
|
+
// 如果之前的交互步骤已经关联了 Grant
|
42
|
+
grant = await this.provider.Grant.find(existingGrantId);
|
43
|
+
log('Found existing grantId: %s', existingGrantId);
|
44
|
+
}
|
45
|
+
|
46
|
+
if (!grant) {
|
47
|
+
// 如果没有找到或没有 existingGrantId,则创建新的
|
48
|
+
grant = new this.provider.Grant({
|
49
|
+
accountId: accountId,
|
50
|
+
clientId: clientId,
|
51
|
+
});
|
52
|
+
log('Created new Grant for account %s and client %s', accountId, clientId);
|
53
|
+
}
|
54
|
+
|
55
|
+
return grant;
|
56
|
+
}
|
57
|
+
|
58
|
+
async getClientMetadata(clientId: string) {
|
59
|
+
const client = await this.provider.Client.find(clientId);
|
60
|
+
return client?.metadata();
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
export { getOIDCProvider } from './oidcProvider';
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { getDBInstance } from '@/database/core/web-server';
|
2
|
+
import { oidcEnv } from '@/envs/oidc';
|
3
|
+
import { OIDCProvider, createOIDCProvider } from '@/libs/oidc-provider/provider';
|
4
|
+
|
5
|
+
/**
|
6
|
+
* OIDC Provider 实例
|
7
|
+
*/
|
8
|
+
let provider: OIDCProvider;
|
9
|
+
|
10
|
+
/**
|
11
|
+
* 获取 OIDC Provider 实例
|
12
|
+
* @returns OIDC Provider 实例
|
13
|
+
*/
|
14
|
+
export const getOIDCProvider = async (): Promise<OIDCProvider> => {
|
15
|
+
if (!provider) {
|
16
|
+
if (!oidcEnv.ENABLE_OIDC) {
|
17
|
+
throw new Error('OIDC is not enabled. Set ENABLE_OIDC=1 to enable it.');
|
18
|
+
}
|
19
|
+
|
20
|
+
const db = getDBInstance();
|
21
|
+
provider = await createOIDCProvider(db);
|
22
|
+
}
|
23
|
+
|
24
|
+
return provider;
|
25
|
+
};
|
package/src/server/mock.ts
DELETED
File without changes
|