| | 'use server' |
| |
|
| | import { NextApiRequest, NextApiResponse } from 'next' |
| | 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' |
| | |
| |
|
| | export default async function handler(req: NextApiRequest, res: NextApiResponse) { |
| | try { |
| | let count = 0 |
| | let { BING_IP, ...cookies } = req.cookies |
| | do { |
| | const headers = createHeaders({ |
| | ...cookies, |
| | BING_IP: BING_IP || randomIP(), |
| | }) |
| | const response = await fetch(API_ENDPOINT, { 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`)) |
| | debug('headers', headers) |
| | res.writeHead(200, { |
| | 'Content-Type': 'application/json', |
| | }) |
| | res.end(await response.text()) |
| | break; |
| | } |
| | BING_IP = '' |
| | await sleep(1000) |
| | debug('loop', count) |
| | } while(count++ < 10) |
| | res.end(JSON.stringify({ |
| | result: { |
| | value: 'TryLater', |
| | message: `Please try again after a while` |
| | } |
| | })) |
| | } catch (e) { |
| | console.log('error', e) |
| | return res.end(JSON.stringify({ |
| | result: { |
| | value: 'UnauthorizedRequest', |
| | message: `${e}` |
| | } |
| | })) |
| | } |
| | } |
| |
|