deepcek / server.js
deepak191z's picture
Update server.js
cc893bd verified
const Fastify = require('fastify');
const fs = require('fs');
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
chromium.use(stealth);
const configFile = fs.readFileSync(__dirname + '/config.json', 'utf8');
const configData = JSON.parse(configFile);
const fastify = Fastify();
const PORT = 7860;
fastify.get('/', async (request, reply) => {
return reply.send({ message: 'Fastify Playwright API is running' });
});
fastify.post('/search', async (request, reply) => {
const { searchText } = request.body;
const url = 'https://chat.deepseek.com';
const buttonSubmit = '.f6d670';
const textareaSearchBox = '#chat-input';
const textMessage = '.ds-markdown';
const profileButton = '.d65532b2';
const deleteAllButton = '.ds-dropdown-menu-option__label:has-text("Delete all chats")';
const confirmDeleteButton = '.ds-button:has-text("Confirm deletion")';
const totalLoopCount = 60;
const printIntervalTime = 1000;
console.log('[INFO] Launching browser...');
const browser = await chromium.launch({ headless: true, slowMo: 100 }); // Headed mode for debugging
const context = await browser.newContext({ userAgent: configData.userAgent });
console.log('[INFO] Setting cookies...');
await context.addCookies([{
'name': 'cf_clearance',
'value': configData.cfClearance,
'domain': '.deepseek.com',
'path': '/',
'httpOnly': true,
'secure': true
}]);
const page = await context.newPage();
console.log(`[INFO] Navigating to ${url}...`);
await page.goto(url, { waitUntil: 'load', timeout: 60000 });
console.log('[INFO] Setting localStorage...');
await page.evaluate(userToken => {
localStorage.setItem('searchEnabled', 'false');
localStorage.setItem('userToken', `{"value":"${userToken}","__version":"0"}`);
}, configData.userToken);
console.log('[INFO] Reloading page after setting localStorage...');
await page.goto(url, { waitUntil: 'load' });
console.log('[INFO] Waiting for search input...');
try {
await page.waitForSelector(textareaSearchBox, { timeout: 60000, state: 'visible' });
} catch (error) {
console.error('[ERROR] Search input not found. Exiting.');
await browser.close();
return reply.send({ error: 'Search input not found!' });
}
console.log('[INFO] Typing search text...');
await page.fill(textareaSearchBox, searchText);
await page.click(buttonSubmit);
let prevResult = '';
console.log('[INFO] Waiting for response...');
for (let i = 0; i < totalLoopCount; i++) {
await new Promise(resolve => setTimeout(resolve, printIntervalTime));
const result = await page.locator(textMessage).innerText().catch(() => null);
if (result) {
console.log(`[INFO] Response received: ${result.slice(0, 50)}...`);
if (prevResult === result && i !== totalLoopCount - 1) break;
prevResult = result;
}
}
console.log('[INFO] Deleting previous chats...');
await page.click(profileButton);
await page.click(deleteAllButton);
await page.click(confirmDeleteButton);
console.log('[INFO] Closing browser...');
await browser.close();
return reply.send({ response: prevResult });
});
fastify.listen({ port: PORT, host: '0.0.0.0' }, (err, address) => {
if (err) throw err;
console.log(`Server running at ${address}`);
});