diff --git a/config.example.js b/config.example.js new file mode 100644 index 0000000..3494046 --- /dev/null +++ b/config.example.js @@ -0,0 +1,8 @@ +module.exports = { + "sessions": [ + { + "cookie": "your_cookie", + "user_agent": "user_agent" + } + ] +} diff --git a/index.js b/index.js index 5be21e3..66a9bed 100644 --- a/index.js +++ b/index.js @@ -7,8 +7,13 @@ const axios = require("axios"); const port = 8080; const validApiKey = process.env.PASSWORD; -axios.defaults.headers.common["User-Agent"] = process.env.USER_AGENT; -axios.defaults.headers.common["Cookie"] = process.env.YOUCOM_COOKIE; +// import config.js +try { + var config = require("./config.js"); +} catch (e) { + console.error("Missing config.js, create it from config.example.js and fill in the values."); + process.exit(1); +} app.post("/v1/messages", apiKeyAuth, (req, res) => { @@ -55,7 +60,7 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => { // 把系统消息加入messages的首条 jsonBody.messages.unshift({ role: "system", content: jsonBody.system }); } - console.log(jsonBody.messages); + console.log("message length:" + jsonBody.messages.length); jsonBody.messages.forEach((msg) => { if (msg.role == "system" || msg.role == "user") { if (lastUpdate) { @@ -79,25 +84,18 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => { }); userQuery = userMessage[userMessage.length - 1].question; - // 获取traceId - - /*let initSearch = await axios.get("https://you.com/_next/data/f3b05a38b379a189a1db48b6665e81f064fbf1b8/en-US/search.json", { - params: { - q: userQuery.trim(), - fromSearchBar: "true", - tbm: "youchat", - chatMode: "custom" - }, - headers: { - "X-Nextjs-Data":"1" - }, - }).then((res) => res.data); - if(!initSearch) throw new Error("Failed to init search"); - - var traceId = initSearch.pageProps.initialTraceId;*/ - var traceId=uuidv4(); + // decide which session to use randomly + let sessionIndex = Math.floor(Math.random() * config.sessions.length); + var session = config.sessions[sessionIndex]; + console.log("using session " + sessionIndex); + var instance = axios.create({ + headers: { + "User-Agent": session.user_agent, + "Cookie": session.cookie, + }, + }); // 试算用户消息长度 if(encodeURIComponent(JSON.stringify(userMessage)).length + encodeURIComponent(userQuery).length > 32000) { @@ -114,14 +112,14 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => { userMessage = []; // GET https://you.com/api/get_nonce to get nonce - let nonce = await axios("https://you.com/api/get_nonce").then((res) => res.data); + let nonce = await instance("https://you.com/api/get_nonce").then((res) => res.data); if (!nonce) throw new Error("Failed to get nonce"); // POST https://you.com/api/upload to upload user message const form_data = new FormData(); var messageBuffer = await createDocx(previousMessages); form_data.append("file", messageBuffer, { filename: "messages.docx", contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }); - var uploadedFile = await axios + var uploadedFile = await instance .post("https://you.com/api/upload", form_data, { headers: { ...form_data.getHeaders(), @@ -155,7 +153,7 @@ app.post("/v1/messages", apiKeyAuth, (req, res) => { // proxy response - var proxyReq = await axios + var proxyReq = await instance .get("https://you.com/api/streamingSearch", { params: { page: "1",