From 11367bee5845602f8ddfd5cb16b56ed31aca807c Mon Sep 17 00:00:00 2001 From: weaigc <879821485@qq.com> Date: Tue, 22 Aug 2023 21:55:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20create=20=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=B8=AD=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/bots/bing/index.ts | 9 ++++++--- src/lib/utils.ts | 2 +- src/pages/api/create.ts | 9 ++++----- src/pages/api/kblob.ts | 2 +- src/pages/api/turing/conversation/create.ts | 22 +++++++++++++++++++++ 5 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 src/pages/api/turing/conversation/create.ts diff --git a/src/lib/bots/bing/index.ts b/src/lib/bots/bing/index.ts index 4596f9de..73e853b4 100644 --- a/src/lib/bots/bing/index.ts +++ b/src/lib/bots/bing/index.ts @@ -15,7 +15,7 @@ import { } from './types' import { convertMessageToMarkdown, websocketUtils, streamAsyncIterable } from './utils' -import { WatchDog, createChunkDecoder } from '@/lib/utils' +import { createChunkDecoder } from '@/lib/utils' type Params = SendMessageParams<{ bingConversationStyle: BingConversationStyle }> @@ -351,11 +351,14 @@ export class BingWebBot { params.onEvent({ type: 'DONE' }) conversation.invocationId = parseInt(event.invocationId, 10) + 1 } else if (event.type === 1) { - const messages = event.arguments[0].messages + const { messages, throttling } = event.arguments[0] || {} if (messages) { const text = convertMessageToMarkdown(messages[0]) this.lastText = text - params.onEvent({ type: 'UPDATE_ANSWER', data: { text, spokenText: messages[0].text, throttling: event.arguments[0].throttling } }) + params.onEvent({ type: 'UPDATE_ANSWER', data: { text, spokenText: messages[0].text } }) + } + if (throttling) { + params.onEvent({ type: 'UPDATE_ANSWER', data: { text: '', throttling } }) } } else if (event.type === 2) { const messages = event.item.messages as ChatResponseMessage[] | undefined diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 0be04f86..750248bb 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -140,7 +140,7 @@ export function createHeaders(cookies: Partial<{ [key: string]: string }>, type? BING_HEADER, ...cookies, }) || {} - headers['x-forward-for'] = BING_IP || randomIP() + headers['x-forwarded-for'] = BING_IP || randomIP() return headers } } diff --git a/src/pages/api/create.ts b/src/pages/api/create.ts index d534e75d..fae27ae1 100644 --- a/src/pages/api/create.ts +++ b/src/pages/api/create.ts @@ -5,17 +5,16 @@ import { fetch, debug } from '@/lib/isomorphic' import { createHeaders, randomIP } from '@/lib/utils' import { sleep } from '@/lib/bots/bing/utils' -const API_ENDPOINT = 'https://www.bing.com/turing/conversation/create' -// const API_ENDPOINT = 'https://edgeservices.bing.com/edgesvc/turing/conversation/create'; - export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { let count = 0 const headers = createHeaders(req.cookies) do { headers['x-forwarded-for'] = headers['x-forwarded-for'] || randomIP() - debug(`try ${count+1}`, headers['x-forwarded-for']) - const response = await fetch(API_ENDPOINT, { method: 'GET', headers }) + const endpoints = (process.env.ENDPOINT || 'www.bing.com').split(',') + const endpoint = endpoints[count % endpoints.length] + debug(`try ${count+1}`, endpoint, headers['x-forwarded-for']) + const response = await fetch(`https://${endpoint || 'www.bing.com'}/turing/conversation/create`, { method: 'GET', headers }) if (response.status === 200) { res.setHeader('set-cookie', [headers.cookie, `BING_IP=${headers['x-forwarded-for']}`] .map(cookie => `${cookie}; Max-Age=${86400 * 30}; Path=/; SameSite=None; Secure`)) diff --git a/src/pages/api/kblob.ts b/src/pages/api/kblob.ts index ccd808fd..6833a1b5 100644 --- a/src/pages/api/kblob.ts +++ b/src/pages/api/kblob.ts @@ -32,7 +32,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) method: 'POST', body: formData.getBuffer(), headers: { - 'x-forward-for': headers['x-forwarded-for'], + 'x-forwarded-for': headers['x-forwarded-for'], 'user-agent': headers['User-Agent'], cookie: headers['cookie'], 'Referer': 'https://www.bing.com/search', diff --git a/src/pages/api/turing/conversation/create.ts b/src/pages/api/turing/conversation/create.ts new file mode 100644 index 00000000..d9c7b0ab --- /dev/null +++ b/src/pages/api/turing/conversation/create.ts @@ -0,0 +1,22 @@ +export const runtime = 'experimental-edge' + +const API_ENDPOINT = 'https://www.bing.com/turing/conversation/create' + +export async function GET(req: Request) { + const headers = { + "x-forwarded-for": req.headers.get('x-forwarded-for')! || undefined, + "Accept-Encoding": req.headers.get('accept-encoding')! || undefined, + "Accept-Language": req.headers.get('accept-language')! || undefined, + "x-ms-useragent": req.headers.get('x-ms-useragent')! || undefined, + "User-Agent": req.headers.get('user-agent')!, + "cookie": req.headers.get('cookie')!, + } + console.log('req headers', headers) + + return fetch(API_ENDPOINT, { + method: 'GET', + // @ts-ignore + headers, + }) +} +export default GET;