CoolFace
Apppublic

wang-dev/bingo

sourceHugging Facemitupdated 3y agoView on Hugging Face
0likes
sydney.ts63 linesDownload Raw Back to api
1import { NextApiRequest, NextApiResponse } from 'next'2import { WebSocket, debug } from '@/lib/isomorphic'3import { BingWebBot } from '@/lib/bots/bing'4import { websocketUtils } from '@/lib/bots/bing/utils'5import { WatchDog, createHeaders } from '@/lib/utils'6 7 8export default async function handler(req: NextApiRequest, res: NextApiResponse) {9  const conversationContext = req.body10  const headers = createHeaders(req.cookies)11  debug(headers)12  res.setHeader('Content-Type', 'text/stream; charset=UTF-8')13 14  const ws = new WebSocket('wss://sydney.bing.com/sydney/ChatHub', {15    headers: {16      ...headers,17      'accept-language': 'zh-CN,zh;q=0.9',18      'cache-control': 'no-cache',19      'x-ms-useragent': 'azsdk-js-api-client-factory/1.0.0-beta.1 core-rest-pipeline/1.10.0 OS/Win32',20      pragma: 'no-cache',21    }22  })23 24  const closeDog = new WatchDog()25  const timeoutDog = new WatchDog()26  ws.onmessage = (event) => {27    timeoutDog.watch(() => {28      ws.send(websocketUtils.packMessage({ type: 6 }))29    }, 1500)30    closeDog.watch(() => {31      ws.close()32    }, 10000)33    res.write(event.data)34    if (/\{"type":([367])\}/.test(String(event.data))) {35      const type = parseInt(RegExp.$1, 10)36      debug('connection type', type)37      if (type === 3) {38        ws.close()39      } else {40        ws.send(websocketUtils.packMessage({ type }))41      }42    }43  }44 45  ws.onclose = () => {46    timeoutDog.reset()47    closeDog.reset()48    debug('connection close')49    res.end()50  }51 52  await new Promise((resolve) => ws.onopen = resolve)53  ws.send(websocketUtils.packMessage({ protocol: 'json', version: 1 }))54  ws.send(websocketUtils.packMessage({ type: 6 }))55  ws.send(websocketUtils.packMessage(BingWebBot.buildChatRequest(conversationContext!)))56  req.socket.once('close', () => {57    ws.close()58    if (!res.closed) {59      res.end()60    }61  })62}63