@lobehub/chat 1.79.8 → 1.79.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.
Files changed (109) hide show
  1. package/.eslintrc.js +1 -0
  2. package/CHANGELOG.md +58 -0
  3. package/changelog/v1.json +18 -0
  4. package/locales/ar/models.json +9 -0
  5. package/locales/ar/oauth.json +7 -6
  6. package/locales/bg-BG/models.json +9 -0
  7. package/locales/bg-BG/oauth.json +7 -6
  8. package/locales/de-DE/models.json +9 -0
  9. package/locales/de-DE/oauth.json +7 -6
  10. package/locales/en-US/models.json +9 -0
  11. package/locales/en-US/oauth.json +7 -6
  12. package/locales/es-ES/models.json +9 -0
  13. package/locales/es-ES/oauth.json +7 -6
  14. package/locales/fa-IR/models.json +9 -0
  15. package/locales/fa-IR/oauth.json +7 -6
  16. package/locales/fr-FR/models.json +9 -0
  17. package/locales/fr-FR/oauth.json +7 -6
  18. package/locales/it-IT/models.json +9 -0
  19. package/locales/it-IT/oauth.json +7 -6
  20. package/locales/ja-JP/models.json +9 -0
  21. package/locales/ja-JP/oauth.json +7 -6
  22. package/locales/ko-KR/models.json +9 -0
  23. package/locales/ko-KR/oauth.json +7 -6
  24. package/locales/nl-NL/models.json +9 -0
  25. package/locales/nl-NL/oauth.json +7 -6
  26. package/locales/pl-PL/models.json +9 -0
  27. package/locales/pl-PL/oauth.json +7 -6
  28. package/locales/pt-BR/models.json +9 -0
  29. package/locales/pt-BR/oauth.json +7 -6
  30. package/locales/ru-RU/models.json +9 -0
  31. package/locales/ru-RU/oauth.json +7 -6
  32. package/locales/tr-TR/models.json +9 -0
  33. package/locales/tr-TR/oauth.json +7 -6
  34. package/locales/vi-VN/models.json +9 -0
  35. package/locales/vi-VN/oauth.json +7 -6
  36. package/locales/zh-CN/models.json +9 -0
  37. package/locales/zh-CN/oauth.json +7 -6
  38. package/locales/zh-TW/models.json +9 -0
  39. package/locales/zh-TW/oauth.json +7 -6
  40. package/package.json +1 -1
  41. package/src/app/(backend)/oidc/[...oidc]/route.ts +27 -201
  42. package/src/app/(backend)/oidc/consent/route.ts +58 -24
  43. package/src/app/(backend)/trpc/async/[trpc]/route.ts +1 -1
  44. package/src/app/(backend)/trpc/edge/[trpc]/route.ts +2 -2
  45. package/src/app/(backend)/trpc/lambda/[trpc]/route.ts +2 -2
  46. package/src/app/(backend)/trpc/tools/[trpc]/route.ts +2 -2
  47. package/src/app/[variants]/(main)/files/[id]/page.tsx +1 -1
  48. package/src/app/[variants]/oauth/consent/[uid]/Client.tsx +184 -57
  49. package/src/app/[variants]/oauth/consent/[uid]/ClientError.tsx +46 -0
  50. package/src/app/[variants]/oauth/consent/[uid]/page.tsx +19 -21
  51. package/src/components/Branding/ProductLogo/index.tsx +6 -1
  52. package/src/config/aiModels/openai.ts +63 -41
  53. package/src/config/modelProviders/openai.ts +17 -0
  54. package/src/const/settings/llm.ts +1 -1
  55. package/src/database/server/models/__tests__/adapter.test.ts +1 -5
  56. package/src/libs/oidc-provider/adapter.ts +47 -0
  57. package/src/libs/oidc-provider/config.ts +4 -5
  58. package/src/libs/oidc-provider/http-adapter.ts +60 -28
  59. package/src/libs/oidc-provider/provider.ts +41 -13
  60. package/src/libs/trpc/async/init.ts +1 -1
  61. package/src/{server → libs/trpc/edge}/context.ts +2 -2
  62. package/src/libs/trpc/{index.ts → edge/index.ts} +8 -8
  63. package/src/libs/trpc/{init.ts → edge/init.ts} +2 -2
  64. package/src/libs/trpc/{middleware → edge/middleware}/jwtPayload.test.ts +3 -3
  65. package/src/libs/trpc/{middleware → edge/middleware}/jwtPayload.ts +3 -2
  66. package/src/libs/trpc/lambda/context.ts +70 -0
  67. package/src/libs/trpc/lambda/index.ts +39 -1
  68. package/src/libs/trpc/lambda/init.ts +26 -0
  69. package/src/libs/trpc/lambda/middleware/index.ts +2 -0
  70. package/src/libs/trpc/{middleware → lambda/middleware}/keyVaults.ts +2 -1
  71. package/src/libs/trpc/lambda/{serverDatabase.ts → middleware/serverDatabase.ts} +2 -1
  72. package/src/libs/trpc/middleware/userAuth.test.ts +3 -3
  73. package/src/libs/trpc/middleware/userAuth.ts +1 -1
  74. package/src/libs/trpc/mock.ts +7 -0
  75. package/src/locales/default/oauth.ts +8 -6
  76. package/src/server/routers/edge/appStatus.ts +1 -1
  77. package/src/server/routers/edge/config/index.test.ts +2 -3
  78. package/src/server/routers/edge/config/index.ts +1 -1
  79. package/src/server/routers/edge/index.ts +1 -1
  80. package/src/server/routers/edge/upload.ts +1 -1
  81. package/src/server/routers/lambda/_template.ts +2 -2
  82. package/src/server/routers/lambda/agent.ts +2 -2
  83. package/src/server/routers/lambda/aiModel.ts +2 -2
  84. package/src/server/routers/lambda/aiProvider.ts +2 -2
  85. package/src/server/routers/lambda/chunk.ts +2 -3
  86. package/src/server/routers/lambda/exporter.ts +2 -2
  87. package/src/server/routers/lambda/file.ts +2 -2
  88. package/src/server/routers/lambda/importer.ts +2 -2
  89. package/src/server/routers/lambda/index.ts +1 -1
  90. package/src/server/routers/lambda/knowledgeBase.ts +2 -2
  91. package/src/server/routers/lambda/message.ts +2 -2
  92. package/src/server/routers/lambda/plugin.ts +2 -2
  93. package/src/server/routers/lambda/ragEval.ts +2 -3
  94. package/src/server/routers/lambda/session.ts +2 -2
  95. package/src/server/routers/lambda/sessionGroup.ts +2 -2
  96. package/src/server/routers/lambda/thread.ts +2 -2
  97. package/src/server/routers/lambda/topic.ts +2 -2
  98. package/src/server/routers/lambda/user.ts +2 -2
  99. package/src/server/routers/tools/__tests__/search.test.ts +2 -2
  100. package/src/server/routers/tools/index.ts +1 -1
  101. package/src/server/routers/tools/search.ts +3 -1
  102. package/src/server/services/oidc/index.ts +36 -1
  103. package/src/server/services/oidc/oidcProvider.ts +1 -3
  104. package/src/services/chat.ts +1 -0
  105. package/src/store/agent/slices/chat/selectors/__snapshots__/agent.test.ts.snap +1 -1
  106. package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +1 -0
  107. package/src/store/user/slices/settings/selectors/__snapshots__/settings.test.ts.snap +8 -8
  108. package/src/server/mock.ts +0 -8
  109. /package/src/{server/asyncContext.ts → libs/trpc/async/context.ts} +0 -0
@@ -1,188 +1,17 @@
1
1
  import debug from 'debug';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
- import { randomUUID } from 'node:crypto';
4
3
  import { URL } from 'node:url';
5
4
 
6
- import { getDBInstance } from '@/database/core/web-server';
7
5
  import { oidcEnv } from '@/envs/oidc';
8
- import { DrizzleAdapter } from '@/libs/oidc-provider/adapter';
9
6
  import { createNodeRequest, createNodeResponse } from '@/libs/oidc-provider/http-adapter';
10
7
  import { getOIDCProvider } from '@/server/services/oidc/oidcProvider';
11
8
 
12
9
  const log = debug('lobe-oidc:route'); // Create a debug instance with a namespace
13
10
 
14
- // 会话同步标头
15
- const OIDC_SESSION_HEADER = 'x-oidc-session-sync';
16
-
17
- /**
18
- * 处理会话同步
19
- * 如果请求中包含 x-oidc-session-sync 头,预先创建一个 OIDC 会话
20
- */
21
- const syncOIDCSession = async (req: NextRequest): Promise<void> => {
22
- const externalUserId = req.headers.get(OIDC_SESSION_HEADER);
23
-
24
- if (!externalUserId) {
25
- log('没有找到 x-oidc-session-sync 头,跳过会话同步');
26
- return;
27
- }
28
-
29
- log('找到会话同步请求,外部用户 ID: %s', externalUserId);
30
-
31
- try {
32
- const db = getDBInstance();
33
- const sessionAdapter = new DrizzleAdapter('Session', db);
34
-
35
- // 查找是否已有对应的 OIDC 会话
36
- // 使用新方法按用户 ID 查找会话
37
- const existingSession = await sessionAdapter.findSessionByUserId(externalUserId);
38
-
39
- if (existingSession) {
40
- log(
41
- '已找到与用户 %s 关联的现有 OIDC 会话,ID: %s',
42
- externalUserId,
43
- existingSession.uid || existingSession.jti,
44
- );
45
- return;
46
- }
47
-
48
- // 创建新的会话
49
- const sessionId = randomUUID();
50
- const now = Math.floor(Date.now() / 1000);
51
- const expiresIn = 30 * 24 * 60 * 60; // 30 天,与 provider.ts 中的 TTL 配置一致
52
-
53
- // 创建基本会话数据
54
- const sessionData = {
55
- accountId: externalUserId,
56
-
57
- // 添加额外会话信息
58
- authTime: now,
59
-
60
- // 添加所有必要的 OIDC 会话字段
61
- cookie: `oidc.session.${sessionId}`,
62
-
63
- exp: now + expiresIn,
64
-
65
- iat: now,
66
-
67
- jti: sessionId,
68
-
69
- // 为 findAccount 添加必要的字段
70
- login: {
71
- accountId: externalUserId,
72
- remember: true,
73
- },
74
-
75
- uid: sessionId,
76
- username: externalUserId,
77
- };
78
-
79
- // 使用适配器创建会话
80
- await sessionAdapter.upsert(sessionId, sessionData, expiresIn);
81
- log('成功为外部用户 %s 创建 OIDC 会话 %s', externalUserId, sessionId);
82
- } catch (error) {
83
- log('同步 OIDC 会话时出错: %O', error);
84
- console.error('同步 OIDC 会话错误:', error);
85
- // 不抛出错误,让请求继续处理
86
- }
87
- };
88
-
89
- /**
90
- * 处理 catch-all 路由下的所有 OIDC 请求
91
- * 这个处理器会捕获所有 /oauth/[...oidc] 的请求
92
- * 例如: /oauth/auth, /oauth/token, /oauth/userinfo 等
93
- */
94
- export async function GET(req: NextRequest) {
11
+ const handler = async (req: NextRequest) => {
95
12
  const requestUrl = new URL(req.url);
96
- log('Received GET request: %s %s', req.method, req.url);
13
+ log(`Received ${req.method.toUpperCase()} request: %s %s`, req.method, req.url);
97
14
  log('Path: %s, Pathname: %s', requestUrl.pathname, requestUrl.pathname);
98
- log('Headers: %O', Object.fromEntries(req.headers.entries())); // Log headers object
99
-
100
- // 声明响应收集器
101
- let responseCollector;
102
-
103
- try {
104
- if (!oidcEnv.ENABLE_OIDC) {
105
- log('OIDC is not enabled');
106
- return new NextResponse('OIDC is not enabled', { status: 404 });
107
- }
108
-
109
- // 在获取 OIDC 提供者实例前同步会话
110
- await syncOIDCSession(req);
111
-
112
- // 获取 OIDC Provider 实例
113
- const provider = await getOIDCProvider();
114
-
115
- log('Calling provider.callback() for GET');
116
- await new Promise<void>((resolve, reject) => {
117
- let middleware: any;
118
- try {
119
- log('Attempting to get middleware from provider.callback()');
120
- middleware = provider.callback();
121
- log('Successfully obtained middleware function.');
122
- } catch (syncError) {
123
- log('SYNC ERROR during provider.callback() call itself: %O', syncError);
124
- reject(syncError);
125
- return;
126
- }
127
-
128
- // 使用辅助方法创建响应收集器
129
- responseCollector = createNodeResponse(resolve);
130
- const nodeResponse = responseCollector.nodeResponse;
131
-
132
- // 使用辅助方法创建 Node.js 请求对象
133
- const nodeRequest = createNodeRequest(req);
134
-
135
- log('Calling the obtained middleware...');
136
- middleware(nodeRequest, nodeResponse, (error?: Error) => {
137
- log('Middleware callback function HAS BEEN EXECUTED.');
138
- if (error) {
139
- log('Middleware error reported via callback: %O', error);
140
- reject(error); // Reject if callback reports error
141
- } else {
142
- log(
143
- 'Middleware completed successfully via callback (may be redundant if .end() was called).',
144
- );
145
- // Ensure promise resolves even if end() wasn't called but callback was
146
- resolve();
147
- }
148
- });
149
- log('Middleware call initiated, waiting for its callback OR nodeResponse.end()...');
150
- });
151
-
152
- log('Promise surrounding middleware call resolved.');
153
-
154
- if (!responseCollector) {
155
- throw new Error('ResponseCollector was not initialized.');
156
- }
157
-
158
- const {
159
- responseStatus: finalStatus,
160
- responseBody: finalBody,
161
- responseHeaders: finalHeaders,
162
- } = responseCollector;
163
-
164
- log('Final Response Status: %d', finalStatus);
165
- log('Final Response Headers: %O', finalHeaders);
166
-
167
- return new NextResponse(finalBody, {
168
- // eslint-disable-next-line no-undef
169
- headers: finalHeaders as HeadersInit,
170
- status: finalStatus,
171
- });
172
- } catch (error) {
173
- log('Error handling OIDC GET request: %O', error); // Log the full error object
174
- // Ensure responseCollector is checked even in catch block if needed, though error likely occurred before/during promise
175
- return new NextResponse(`Internal Server Error: ${(error as Error).message}`, { status: 500 });
176
- }
177
- }
178
-
179
- /**
180
- * 处理 POST 请求 (用于令牌端点等)
181
- */
182
- export async function POST(req: NextRequest) {
183
- log('Received POST request: %s %s', req.method, req.url);
184
- const bodyText = await req.text(); // Read body first
185
- log('Body: %s', bodyText); // Log body as string
186
15
 
187
16
  // 声明响应收集器
188
17
  let responseCollector;
@@ -193,14 +22,12 @@ export async function POST(req: NextRequest) {
193
22
  return new NextResponse('OIDC is not enabled', { status: 404 });
194
23
  }
195
24
 
196
- // 在获取 OIDC 提供者实例前同步会话
197
- await syncOIDCSession(req);
198
-
199
25
  // 获取 OIDC Provider 实例
200
26
  const provider = await getOIDCProvider();
201
27
 
202
- log('Calling provider.callback() for POST');
28
+ log(`Calling provider.callback() for ${req.method}`); // Log the method
203
29
  await new Promise<void>((resolve, reject) => {
30
+ // <-- Make promise callback async
204
31
  let middleware: any;
205
32
  try {
206
33
  log('Attempting to get middleware from provider.callback()');
@@ -216,23 +43,23 @@ export async function POST(req: NextRequest) {
216
43
  responseCollector = createNodeResponse(resolve);
217
44
  const nodeResponse = responseCollector.nodeResponse;
218
45
 
219
- // 使用辅助方法创建 Node.js 请求对象,包含 POST 请求体
220
- const nodeRequest = createNodeRequest(req, '/oauth', bodyText);
221
-
222
- log('Calling the obtained middleware...');
223
- middleware(nodeRequest, nodeResponse, (error?: Error) => {
224
- log('Middleware callback function HAS BEEN EXECUTED.');
225
- if (error) {
226
- log('Middleware error reported via callback: %O', error);
227
- reject(error);
228
- } else {
229
- log(
230
- 'Middleware completed successfully via callback (may be redundant if .end() was called).',
231
- );
232
- resolve();
233
- }
46
+ // 使用辅助方法创建 Node.js 请求对象,现在需要 await
47
+ createNodeRequest(req).then((nodeRequest) => {
48
+ log('Calling the obtained middleware...');
49
+ middleware(nodeRequest, nodeResponse, (error?: Error) => {
50
+ log('Middleware callback function HAS BEEN EXECUTED.');
51
+ if (error) {
52
+ log('Middleware error reported via callback: %O', error);
53
+ reject(error);
54
+ } else {
55
+ log(
56
+ 'Middleware completed successfully via callback (may be redundant if .end() was called).',
57
+ );
58
+ resolve();
59
+ }
60
+ });
61
+ log('Middleware call initiated, waiting for its callback OR nodeResponse.end()...');
234
62
  });
235
- log('Middleware call initiated, waiting for its callback OR nodeResponse.end()...');
236
63
  });
237
64
 
238
65
  log('Promise surrounding middleware call resolved.');
@@ -257,14 +84,13 @@ export async function POST(req: NextRequest) {
257
84
  status: finalStatus,
258
85
  });
259
86
  } catch (error) {
260
- log('Error handling OIDC POST request: %O', error); // Log the full error object
87
+ log(`Error handling OIDC ${req.method} request: %O`, error); // Log method in error
261
88
  return new NextResponse(`Internal Server Error: ${(error as Error).message}`, { status: 500 });
262
89
  }
263
- }
90
+ };
264
91
 
265
- /**
266
- * 同样处理其他 HTTP 方法
267
- */
268
- export const PUT = POST;
269
- export const DELETE = POST;
270
- export const PATCH = POST;
92
+ export const GET = handler;
93
+ export const POST = handler;
94
+ export const PUT = handler;
95
+ export const DELETE = handler;
96
+ export const PATCH = handler;
@@ -1,13 +1,13 @@
1
1
  import debug from 'debug';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
- import urlJoin from 'url-join';
4
3
 
5
- import { appEnv } from '@/config/app';
6
4
  import { OIDCService } from '@/server/services/oidc';
5
+ import { getUserAuth } from '@/utils/server/auth';
7
6
 
8
7
  const log = debug('lobe-oidc:consent');
9
8
 
10
9
  export async function POST(request: NextRequest) {
10
+ log('Received POST request for /oidc/consent, URL: %s', request.url);
11
11
  try {
12
12
  const formData = await request.formData();
13
13
  const consent = formData.get('consent') as string;
@@ -43,22 +43,64 @@ export async function POST(request: NextRequest) {
43
43
  throw error;
44
44
  }
45
45
 
46
+ const { prompt } = details;
46
47
  let result;
47
48
  if (consent === 'accept') {
49
+ log(`User accepted the request, Handling 'login' prompt`);
50
+ const { userId } = await getUserAuth();
51
+ log('Obtained userId: %s', userId);
52
+
48
53
  if (details.prompt.name === 'login') {
49
54
  result = {
50
- login: { accountId: details.session?.accountId, remember: true },
55
+ login: { accountId: userId, remember: true },
51
56
  };
52
57
  } else {
53
- result = {
54
- consent: {
55
- rejectedClaims: [],
56
- rejectedScopes: [],
57
- },
58
- };
58
+ log(`Handling 'consent' prompt`);
59
+
60
+ // 1. 获取必要的 ID
61
+ const clientId = details.params.client_id as string;
62
+
63
+ // 2. 查找或创建 Grant 对象
64
+ const grant = await oidcService.findOrCreateGrants(userId!, clientId, details.grantId);
65
+
66
+ // 3. 将用户同意的 scopes 和 claims 添加到 Grant 对象
67
+ // 这些信息通常在 details.prompt.details 中
68
+ const missingOIDCScope = (prompt.details.missingOIDCScope as string[]) || [];
69
+ if (missingOIDCScope) {
70
+ grant.addOIDCScope(missingOIDCScope.join(' '));
71
+ log('Added OIDC scopes to grant: %s', missingOIDCScope.join(' '));
72
+ }
73
+ const missingOIDCClaims = (prompt.details.missingOIDCClaims as string[]) || [];
74
+ if (missingOIDCClaims) {
75
+ grant.addOIDCClaims(missingOIDCClaims);
76
+ log('Added OIDC claims to grant: %s', missingOIDCClaims.join(' '));
77
+ }
78
+
79
+ const missingResourceScopes =
80
+ (prompt.details.missingResourceScopes as Record<string, string[]>) || {};
81
+ if (missingResourceScopes) {
82
+ for (const [indicator, scopes] of Object.entries(missingResourceScopes)) {
83
+ grant.addResourceScope(indicator, scopes.join(' '));
84
+ log('Added resource scopes for %s to grant: %s', indicator, scopes.join(' '));
85
+ }
86
+ }
87
+ // 如果使用了 RAR (Rich Authorization Requests),也需要添加到 grant
88
+ // if (prompt.details.rar) {
89
+ // prompt.details.rar.forEach(detail => grant.addRar(detail));
90
+ // }
91
+
92
+ // 4. 保存 Grant 对象以获取其 jti (grantId)
93
+ const newGrantId = await grant.save();
94
+ log('Saved grant with ID: %s', newGrantId);
95
+
96
+ // 5. 准备包含 grantId 的 result
97
+ result = { consent: { grantId: newGrantId } };
98
+
99
+ log('Consent result prepared with grantId');
59
100
  }
60
101
  log('User %s the authorization', consent);
61
102
  } else {
103
+ log('User rejected the request');
62
104
  result = {
63
105
  error: 'access_denied',
64
106
  error_description: 'User denied the authorization request',
@@ -66,23 +108,15 @@ export async function POST(request: NextRequest) {
66
108
  log('User %s the authorization', consent);
67
109
  }
68
110
 
69
- // 获取OIDC提供商的默认重定向URL,但不会直接使用它
70
- const redirectUrl = await oidcService.getInteractionResult(uid, result);
71
- log('Default redirectUrl: %s', redirectUrl);
111
+ log('Interaction Result: %O', result);
72
112
 
73
- // 根据用户选择定制重定向地址
113
+ const internalRedirectUrlString = await oidcService.getInteractionResult(uid, result);
114
+ log('OIDC Provider internal redirect URL string: %s', internalRedirectUrlString);
74
115
 
75
- if (consent === 'accept') {
76
- // 用户同意授权,跳转到success页面
77
- const successUrl = urlJoin(appEnv.APP_URL!, `/oauth/consent/${uid}/success`);
78
- log('Redirecting to success page: %s', successUrl);
79
- return NextResponse.redirect(successUrl);
80
- } else {
81
- // 用户拒绝授权,跳转到failed页面
82
- const failedUrl = urlJoin(appEnv.APP_URL!, `/oauth/consent/${uid}/failed`);
83
- log('Redirecting to failed page: %s', failedUrl);
84
- return NextResponse.redirect(failedUrl);
85
- }
116
+ return NextResponse.redirect(internalRedirectUrlString, {
117
+ headers: request.headers,
118
+ status: 303,
119
+ });
86
120
  } catch (error) {
87
121
  log('Error processing consent: %s', error instanceof Error ? error.message : 'unknown error');
88
122
  console.error('Error processing consent:', error);
@@ -2,7 +2,7 @@ import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
2
2
  import type { NextRequest } from 'next/server';
3
3
 
4
4
  import { pino } from '@/libs/logger';
5
- import { createAsyncRouteContext } from '@/server/asyncContext';
5
+ import { createAsyncRouteContext } from '@/libs/trpc/async/context';
6
6
  import { asyncRouter } from '@/server/routers/async';
7
7
 
8
8
  export const maxDuration = 60;
@@ -2,7 +2,7 @@ import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
2
2
  import type { NextRequest } from 'next/server';
3
3
 
4
4
  import { pino } from '@/libs/logger';
5
- import { createContext } from '@/server/context';
5
+ import { createEdgeContext } from '@/libs/trpc/edge/context';
6
6
  import { edgeRouter } from '@/server/routers/edge';
7
7
 
8
8
  export const runtime = 'edge';
@@ -12,7 +12,7 @@ const handler = (req: NextRequest) =>
12
12
  /**
13
13
  * @link https://trpc.io/docs/v11/context
14
14
  */
15
- createContext: () => createContext(req),
15
+ createContext: () => createEdgeContext(req),
16
16
 
17
17
  endpoint: '/trpc/edge',
18
18
 
@@ -2,7 +2,7 @@ import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
2
2
  import type { NextRequest } from 'next/server';
3
3
 
4
4
  import { pino } from '@/libs/logger';
5
- import { createContext } from '@/server/context';
5
+ import { createLambdaContext } from '@/libs/trpc/lambda/context';
6
6
  import { lambdaRouter } from '@/server/routers/lambda';
7
7
 
8
8
  const handler = (req: NextRequest) =>
@@ -10,7 +10,7 @@ const handler = (req: NextRequest) =>
10
10
  /**
11
11
  * @link https://trpc.io/docs/v11/context
12
12
  */
13
- createContext: () => createContext(req),
13
+ createContext: () => createLambdaContext(req),
14
14
 
15
15
  endpoint: '/trpc/lambda',
16
16
 
@@ -2,7 +2,7 @@ import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
2
2
  import type { NextRequest } from 'next/server';
3
3
 
4
4
  import { pino } from '@/libs/logger';
5
- import { createContext } from '@/server/context';
5
+ import { createLambdaContext } from '@/libs/trpc/lambda/context';
6
6
  import { toolsRouter } from '@/server/routers/tools';
7
7
 
8
8
  const handler = (req: NextRequest) =>
@@ -10,7 +10,7 @@ const handler = (req: NextRequest) =>
10
10
  /**
11
11
  * @link https://trpc.io/docs/v11/context
12
12
  */
13
- createContext: () => createContext(req),
13
+ createContext: () => createLambdaContext(req),
14
14
 
15
15
  endpoint: '/trpc/tools',
16
16
 
@@ -2,7 +2,7 @@ import { notFound } from 'next/navigation';
2
2
  import { Flexbox } from 'react-layout-kit';
3
3
 
4
4
  import FileViewer from '@/features/FileViewer';
5
- import { createCallerFactory } from '@/libs/trpc';
5
+ import { createCallerFactory } from '@/libs/trpc/lambda';
6
6
  import { lambdaRouter } from '@/server/routers/lambda';
7
7
  import { PagePropsWithId } from '@/types/next';
8
8
  import { getUserAuth } from '@/utils/server/auth';