clash-linux commited on
Commit
7cb5e36
·
verified ·
1 Parent(s): 14bda3d

Upload 14 files

Browse files
src/lightweight-client-express.js CHANGED
@@ -209,9 +209,6 @@ app.post('/v1/chat/completions', authenticate, async (req, res) => {
209
  });
210
  }
211
 
212
- // 构建Notion请求
213
- const notionRequestBody = buildNotionRequest(requestData);
214
-
215
  // 处理流式响应
216
  if (requestData.stream) {
217
  res.setHeader('Content-Type', 'text/event-stream');
@@ -219,7 +216,7 @@ app.post('/v1/chat/completions', authenticate, async (req, res) => {
219
  res.setHeader('Connection', 'keep-alive');
220
 
221
  logger.info(`开始流式响应`);
222
- const stream = await streamNotionResponse(notionRequestBody);
223
  stream.pipe(res);
224
 
225
  // 处理客户端断开连接
@@ -231,7 +228,7 @@ app.post('/v1/chat/completions', authenticate, async (req, res) => {
231
  // 创建一个内部流来收集完整响应
232
  logger.info(`开始非流式响应`);
233
  const chunks = [];
234
- const stream = await streamNotionResponse(notionRequestBody);
235
 
236
  return new Promise((resolve, reject) => {
237
  stream.on('data', (chunk) => {
 
209
  });
210
  }
211
 
 
 
 
212
  // 处理流式响应
213
  if (requestData.stream) {
214
  res.setHeader('Content-Type', 'text/event-stream');
 
216
  res.setHeader('Connection', 'keep-alive');
217
 
218
  logger.info(`开始流式响应`);
219
+ const stream = await streamNotionResponse(requestData);
220
  stream.pipe(res);
221
 
222
  // 处理客户端断开连接
 
228
  // 创建一个内部流来收集完整响应
229
  logger.info(`开始非流式响应`);
230
  const chunks = [];
231
+ const stream = await streamNotionResponse(requestData);
232
 
233
  return new Promise((resolve, reject) => {
234
  stream.on('data', (chunk) => {
src/lightweight-client.js CHANGED
@@ -311,7 +311,7 @@ async function fetchAndSetNotionIds(cookie) {
311
  }
312
 
313
  // 构建Notion请求
314
- function buildNotionRequest(requestData) {
315
  // 当前时间
316
  const now = new Date();
317
  // 格式化为ISO字符串,确保包含毫秒和时区
@@ -346,8 +346,8 @@ function buildNotionRequest(requestData) {
346
  transcript.push(new NotionTranscriptItem({
347
  type: "context",
348
  value: new NotionTranscriptContextValue({
349
- userId: FETCHED_NOTION_USER_ID,
350
- spaceId: NOTION_SPACE_ID,
351
  surface: "home_module",
352
  timezone: "America/Los_Angeles",
353
  userName: userName,
@@ -387,7 +387,7 @@ function buildNotionRequest(requestData) {
387
  transcript.push(new NotionTranscriptItemByuser({
388
  type: "user",
389
  value: [[content]],
390
- userId: FETCHED_NOTION_USER_ID,
391
  createdAt: message.createdAt || isoString
392
  }));
393
  } else if (message.role === "user") {
@@ -395,7 +395,7 @@ function buildNotionRequest(requestData) {
395
  transcript.push(new NotionTranscriptItemByuser({
396
  type: "user",
397
  value: [[content]],
398
- userId: FETCHED_NOTION_USER_ID,
399
  createdAt: message.createdAt || isoString
400
  }));
401
  } else if (message.role === "assistant") {
@@ -411,7 +411,7 @@ function buildNotionRequest(requestData) {
411
 
412
  // 创建请求体
413
  return new NotionRequestBody({
414
- spaceId: NOTION_SPACE_ID,
415
  transcript: transcript,
416
  createThread: true,
417
  traceId: randomUUID(),
@@ -426,24 +426,31 @@ function buildNotionRequest(requestData) {
426
  }
427
 
428
  // 流式处理Notion响应
429
- async function streamNotionResponse(notionRequestBody) {
430
  const chunkQueue = new PassThrough();
431
  let timeoutId = null;
432
 
433
  try {
434
- // 动态获取cookie
435
  const currentCookie = getCookie();
436
  if (!currentCookie) {
437
- throw new Error("无法获取 Notion cookie");
438
  }
439
- NOTION_COOKIE = currentCookie; // 更新当前使用的cookie
 
 
 
 
 
 
 
 
440
 
441
- // 获取对应的 space_id 和 user_id
442
- notionRequestBody.spaceId = NOTION_SPACE_IDS[currentCookie];
443
  const headers = {
444
  'Content-Type': 'application/json',
445
  'Cookie': currentCookie,
446
- 'x-notion-active-user-header': NOTION_USER_IDS[currentCookie],
447
  "accept": "application/json",
448
  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
449
  };
@@ -872,7 +879,7 @@ async function initialize() {
872
  for (const cookie of NOTION_COOKIES) {
873
  try {
874
  const ids = await fetchAndSetNotionIds(cookie);
875
- if (ids) {
876
  NOTION_SPACE_IDS[cookie] = ids.spaceId;
877
  NOTION_USER_IDS[cookie] = ids.userId;
878
  logger.success(`成功获取 cookie 的 ID: ...${cookie.slice(-10)}`);
 
311
  }
312
 
313
  // 构建Notion请求
314
+ function buildNotionRequest(requestData, userId, spaceId) {
315
  // 当前时间
316
  const now = new Date();
317
  // 格式化为ISO字符串,确保包含毫秒和时区
 
346
  transcript.push(new NotionTranscriptItem({
347
  type: "context",
348
  value: new NotionTranscriptContextValue({
349
+ userId: userId,
350
+ spaceId: spaceId,
351
  surface: "home_module",
352
  timezone: "America/Los_Angeles",
353
  userName: userName,
 
387
  transcript.push(new NotionTranscriptItemByuser({
388
  type: "user",
389
  value: [[content]],
390
+ userId: userId,
391
  createdAt: message.createdAt || isoString
392
  }));
393
  } else if (message.role === "user") {
 
395
  transcript.push(new NotionTranscriptItemByuser({
396
  type: "user",
397
  value: [[content]],
398
+ userId: userId,
399
  createdAt: message.createdAt || isoString
400
  }));
401
  } else if (message.role === "assistant") {
 
411
 
412
  // 创建请求体
413
  return new NotionRequestBody({
414
+ spaceId: spaceId,
415
  transcript: transcript,
416
  createThread: true,
417
  traceId: randomUUID(),
 
426
  }
427
 
428
  // 流式处理Notion响应
429
+ async function streamNotionResponse(requestData) {
430
  const chunkQueue = new PassThrough();
431
  let timeoutId = null;
432
 
433
  try {
434
+ // 动态获取cookie并查找其对应的ID
435
  const currentCookie = getCookie();
436
  if (!currentCookie) {
437
+ throw new Error("无法获取 Notion cookie,请检查配置");
438
  }
439
+ const userId = NOTION_USER_IDS[currentCookie];
440
+ const spaceId = NOTION_SPACE_IDS[currentCookie];
441
+
442
+ if (!userId || !spaceId) {
443
+ throw new Error(`无法找到 cookie ...${currentCookie.slice(-10)} 对应的ID`);
444
+ }
445
+
446
+ // 使用正确的ID构建请求体
447
+ const notionRequestBody = buildNotionRequest(requestData, userId, spaceId);
448
 
449
+ // 设置请求头
 
450
  const headers = {
451
  'Content-Type': 'application/json',
452
  'Cookie': currentCookie,
453
+ 'x-notion-active-user-header': userId,
454
  "accept": "application/json",
455
  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
456
  };
 
879
  for (const cookie of NOTION_COOKIES) {
880
  try {
881
  const ids = await fetchAndSetNotionIds(cookie);
882
+ if (ids && ids.spaceId && ids.userId) {
883
  NOTION_SPACE_IDS[cookie] = ids.spaceId;
884
  NOTION_USER_IDS[cookie] = ids.userId;
885
  logger.success(`成功获取 cookie 的 ID: ...${cookie.slice(-10)}`);