@lobehub/chat 1.35.9 → 1.35.10
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/CHANGELOG.md +25 -0
- package/changelog/v1.json +9 -0
- package/package.json +1 -1
- package/src/app/(main)/repos/[id]/@menu/default.tsx +2 -1
- package/src/app/(main)/repos/[id]/page.tsx +2 -1
- package/src/database/schemas/topic.ts +3 -1
- package/src/database/server/core/dbForTest.ts +4 -6
- package/src/database/server/models/__tests__/_test_template.ts +3 -9
- package/src/database/server/models/__tests__/agent.test.ts +2 -8
- package/src/database/server/models/__tests__/asyncTask.test.ts +1 -7
- package/src/database/server/models/__tests__/chunk.test.ts +155 -16
- package/src/database/server/models/__tests__/file.test.ts +123 -15
- package/src/database/server/models/__tests__/knowledgeBase.test.ts +6 -12
- package/src/database/server/models/__tests__/message.test.ts +230 -7
- package/src/database/server/models/__tests__/nextauth.test.ts +1 -7
- package/src/database/server/models/__tests__/plugin.test.ts +1 -7
- package/src/database/server/models/__tests__/session.test.ts +169 -11
- package/src/database/server/models/__tests__/sessionGroup.test.ts +2 -8
- package/src/database/server/models/__tests__/topic.test.ts +1 -7
- package/src/database/server/models/__tests__/user.test.ts +55 -20
- package/src/database/server/models/_template.ts +10 -8
- package/src/database/server/models/agent.ts +17 -13
- package/src/database/server/models/asyncTask.ts +11 -9
- package/src/database/server/models/chunk.ts +19 -14
- package/src/database/server/models/embedding.ts +10 -8
- package/src/database/server/models/file.ts +19 -17
- package/src/database/server/models/knowledgeBase.ts +14 -12
- package/src/database/server/models/message.ts +36 -34
- package/src/database/server/models/plugin.ts +10 -8
- package/src/database/server/models/session.ts +23 -64
- package/src/database/server/models/sessionGroup.ts +11 -9
- package/src/database/server/models/thread.ts +11 -9
- package/src/database/server/models/topic.ts +19 -22
- package/src/database/server/models/user.ts +96 -84
- package/src/database/type.ts +7 -0
- package/src/libs/next-auth/adapter/index.ts +10 -10
- package/src/libs/trpc/async/asyncAuth.ts +2 -1
- package/src/server/routers/async/file.ts +5 -4
- package/src/server/routers/async/ragEval.ts +4 -3
- package/src/server/routers/lambda/_template.ts +2 -1
- package/src/server/routers/lambda/agent.ts +6 -5
- package/src/server/routers/lambda/chunk.ts +5 -5
- package/src/server/routers/lambda/file.ts +4 -3
- package/src/server/routers/lambda/knowledgeBase.ts +2 -1
- package/src/server/routers/lambda/message.ts +4 -2
- package/src/server/routers/lambda/plugin.ts +4 -2
- package/src/server/routers/lambda/ragEval.ts +2 -1
- package/src/server/routers/lambda/session.ts +4 -3
- package/src/server/routers/lambda/sessionGroup.ts +2 -1
- package/src/server/routers/lambda/thread.ts +3 -2
- package/src/server/routers/lambda/topic.ts +4 -2
- package/src/server/routers/lambda/user.ts +10 -9
- package/src/server/services/chunk/index.ts +3 -2
- package/src/server/services/nextAuthUser/index.ts +3 -3
- package/src/server/services/user/index.ts +7 -6
@@ -1,5 +1,6 @@
|
|
1
1
|
import { z } from 'zod';
|
2
2
|
|
3
|
+
import { serverDB } from '@/database/server';
|
3
4
|
import { TopicModel } from '@/database/server/models/topic';
|
4
5
|
import { authedProcedure, publicProcedure, router } from '@/libs/trpc';
|
5
6
|
import { BatchTaskResult } from '@/types/service';
|
@@ -8,7 +9,7 @@ const topicProcedure = authedProcedure.use(async (opts) => {
|
|
8
9
|
const { ctx } = opts;
|
9
10
|
|
10
11
|
return opts.next({
|
11
|
-
ctx: { topicModel: new TopicModel(ctx.userId) },
|
12
|
+
ctx: { topicModel: new TopicModel(serverDB, ctx.userId) },
|
12
13
|
});
|
13
14
|
});
|
14
15
|
|
@@ -78,6 +79,7 @@ export const topicRouter = router({
|
|
78
79
|
return ctx.topicModel.queryAll();
|
79
80
|
}),
|
80
81
|
|
82
|
+
// TODO: this procedure should be used with authedProcedure
|
81
83
|
getTopics: publicProcedure
|
82
84
|
.input(
|
83
85
|
z.object({
|
@@ -89,7 +91,7 @@ export const topicRouter = router({
|
|
89
91
|
.query(async ({ input, ctx }) => {
|
90
92
|
if (!ctx.userId) return [];
|
91
93
|
|
92
|
-
const topicModel = new TopicModel(ctx.userId);
|
94
|
+
const topicModel = new TopicModel(serverDB, ctx.userId);
|
93
95
|
|
94
96
|
return topicModel.query(input);
|
95
97
|
}),
|
@@ -3,6 +3,7 @@ import { currentUser } from '@clerk/nextjs/server';
|
|
3
3
|
import { z } from 'zod';
|
4
4
|
|
5
5
|
import { enableClerk } from '@/const/auth';
|
6
|
+
import { serverDB } from '@/database/server';
|
6
7
|
import { MessageModel } from '@/database/server/models/message';
|
7
8
|
import { SessionModel } from '@/database/server/models/session';
|
8
9
|
import { UserModel, UserNotFoundError } from '@/database/server/models/user';
|
@@ -12,7 +13,7 @@ import { UserGuideSchema, UserInitializationState, UserPreference } from '@/type
|
|
12
13
|
|
13
14
|
const userProcedure = authedProcedure.use(async (opts) => {
|
14
15
|
return opts.next({
|
15
|
-
ctx: { userModel: new UserModel() },
|
16
|
+
ctx: { userModel: new UserModel(serverDB, opts.ctx.userId) },
|
16
17
|
});
|
17
18
|
});
|
18
19
|
|
@@ -23,7 +24,7 @@ export const userRouter = router({
|
|
23
24
|
// get or create first-time user
|
24
25
|
while (!state) {
|
25
26
|
try {
|
26
|
-
state = await ctx.userModel.getUserState(
|
27
|
+
state = await ctx.userModel.getUserState();
|
27
28
|
} catch (error) {
|
28
29
|
if (enableClerk && error instanceof UserNotFoundError) {
|
29
30
|
const user = await currentUser();
|
@@ -56,10 +57,10 @@ export const userRouter = router({
|
|
56
57
|
}
|
57
58
|
}
|
58
59
|
|
59
|
-
const messageModel = new MessageModel(ctx.userId);
|
60
|
+
const messageModel = new MessageModel(serverDB, ctx.userId);
|
60
61
|
const messageCount = await messageModel.count();
|
61
62
|
|
62
|
-
const sessionModel = new SessionModel(ctx.userId);
|
63
|
+
const sessionModel = new SessionModel(serverDB, ctx.userId);
|
63
64
|
const sessionCount = await sessionModel.count();
|
64
65
|
|
65
66
|
return {
|
@@ -77,25 +78,25 @@ export const userRouter = router({
|
|
77
78
|
}),
|
78
79
|
|
79
80
|
makeUserOnboarded: userProcedure.mutation(async ({ ctx }) => {
|
80
|
-
return ctx.userModel.updateUser(
|
81
|
+
return ctx.userModel.updateUser({ isOnboarded: true });
|
81
82
|
}),
|
82
83
|
|
83
84
|
resetSettings: userProcedure.mutation(async ({ ctx }) => {
|
84
|
-
return ctx.userModel.deleteSetting(
|
85
|
+
return ctx.userModel.deleteSetting();
|
85
86
|
}),
|
86
87
|
|
87
88
|
updateGuide: userProcedure.input(UserGuideSchema).mutation(async ({ ctx, input }) => {
|
88
|
-
return ctx.userModel.updateGuide(
|
89
|
+
return ctx.userModel.updateGuide(input);
|
89
90
|
}),
|
90
91
|
|
91
92
|
updatePreference: userProcedure.input(z.any()).mutation(async ({ ctx, input }) => {
|
92
|
-
return ctx.userModel.updatePreference(
|
93
|
+
return ctx.userModel.updatePreference(input);
|
93
94
|
}),
|
94
95
|
|
95
96
|
updateSettings: userProcedure
|
96
97
|
.input(z.object({}).passthrough())
|
97
98
|
.mutation(async ({ ctx, input }) => {
|
98
|
-
return ctx.userModel.updateSetting(
|
99
|
+
return ctx.userModel.updateSetting(input);
|
99
100
|
}),
|
100
101
|
});
|
101
102
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { JWTPayload } from '@/const/auth';
|
2
|
+
import { serverDB } from '@/database/server';
|
2
3
|
import { AsyncTaskModel } from '@/database/server/models/asyncTask';
|
3
4
|
import { FileModel } from '@/database/server/models/file';
|
4
5
|
import { ChunkContentParams, ContentChunk } from '@/server/modules/ContentChunk';
|
@@ -21,8 +22,8 @@ export class ChunkService {
|
|
21
22
|
|
22
23
|
this.chunkClient = new ContentChunk();
|
23
24
|
|
24
|
-
this.fileModel = new FileModel(userId);
|
25
|
-
this.asyncTaskModel = new AsyncTaskModel(userId);
|
25
|
+
this.fileModel = new FileModel(serverDB, userId);
|
26
|
+
this.asyncTaskModel = new AsyncTaskModel(serverDB, userId);
|
26
27
|
}
|
27
28
|
|
28
29
|
async chunkContent(params: ChunkContentParams) {
|
@@ -7,11 +7,9 @@ import { pino } from '@/libs/logger';
|
|
7
7
|
import { LobeNextAuthDbAdapter } from '@/libs/next-auth/adapter';
|
8
8
|
|
9
9
|
export class NextAuthUserService {
|
10
|
-
userModel;
|
11
10
|
adapter;
|
12
11
|
|
13
12
|
constructor() {
|
14
|
-
this.userModel = new UserModel();
|
15
13
|
this.adapter = LobeNextAuthDbAdapter(serverDB);
|
16
14
|
}
|
17
15
|
|
@@ -29,8 +27,10 @@ export class NextAuthUserService {
|
|
29
27
|
|
30
28
|
// 2. If found, Update user data from provider
|
31
29
|
if (user?.id) {
|
30
|
+
const userModel = new UserModel(serverDB, user.id);
|
31
|
+
|
32
32
|
// Perform update
|
33
|
-
await
|
33
|
+
await userModel.updateUser({
|
34
34
|
avatar: data?.avatar,
|
35
35
|
email: data?.email,
|
36
36
|
fullName: data?.fullName,
|
@@ -1,13 +1,14 @@
|
|
1
1
|
import { UserJSON } from '@clerk/backend';
|
2
2
|
import { NextResponse } from 'next/server';
|
3
3
|
|
4
|
+
import { serverDB } from '@/database/server';
|
4
5
|
import { UserModel } from '@/database/server/models/user';
|
5
6
|
import { pino } from '@/libs/logger';
|
6
7
|
|
7
8
|
export class UserService {
|
8
9
|
createUser = async (id: string, params: UserJSON) => {
|
9
10
|
// Check if user already exists
|
10
|
-
const res = await UserModel.findById(id);
|
11
|
+
const res = await UserModel.findById(serverDB, id);
|
11
12
|
|
12
13
|
// If user already exists, skip creating a new user
|
13
14
|
if (res)
|
@@ -27,7 +28,7 @@ export class UserService {
|
|
27
28
|
/* ↑ cloud slot ↑ */
|
28
29
|
|
29
30
|
// 2. create user in database
|
30
|
-
await UserModel.createUser({
|
31
|
+
await UserModel.createUser(serverDB, {
|
31
32
|
avatar: params.image_url,
|
32
33
|
clerkCreatedAt: new Date(params.created_at),
|
33
34
|
email: email?.email_address,
|
@@ -49,7 +50,7 @@ export class UserService {
|
|
49
50
|
if (id) {
|
50
51
|
pino.info('delete user due to clerk webhook');
|
51
52
|
|
52
|
-
await UserModel.deleteUser(id);
|
53
|
+
await UserModel.deleteUser(serverDB, id);
|
53
54
|
|
54
55
|
return NextResponse.json({ message: 'user deleted' }, { status: 200 });
|
55
56
|
} else {
|
@@ -61,10 +62,10 @@ export class UserService {
|
|
61
62
|
updateUser = async (id: string, params: UserJSON) => {
|
62
63
|
pino.info('updating user due to clerk webhook');
|
63
64
|
|
64
|
-
const userModel = new UserModel();
|
65
|
+
const userModel = new UserModel(serverDB, id);
|
65
66
|
|
66
67
|
// Check if user already exists
|
67
|
-
const res = await UserModel.findById(id);
|
68
|
+
const res = await UserModel.findById(serverDB, id);
|
68
69
|
|
69
70
|
// If user not exists, skip update the user
|
70
71
|
if (!res)
|
@@ -79,7 +80,7 @@ export class UserService {
|
|
79
80
|
const email = params.email_addresses.find((e) => e.id === params.primary_email_address_id);
|
80
81
|
const phone = params.phone_numbers.find((e) => e.id === params.primary_phone_number_id);
|
81
82
|
|
82
|
-
await userModel.updateUser(
|
83
|
+
await userModel.updateUser({
|
83
84
|
avatar: params.image_url,
|
84
85
|
email: email?.email_address,
|
85
86
|
firstName: params.first_name,
|