diff --git a/app/api/chat-stream/route.ts b/app/api/chat-stream/route.ts
index d9a3fc1e7..9519ddac9 100644
--- a/app/api/chat-stream/route.ts
+++ b/app/api/chat-stream/route.ts
@@ -1,7 +1,7 @@
import { createParser } from "eventsource-parser";
import { NextRequest } from "next/server";
import { requestOpenai } from "../common";
-import clientPromise from "../../db/mongdb";
+import Atlas from "atlas-fetch-data-api";
async function createStream(req: NextRequest) {
const encoder = new TextEncoder();
@@ -51,31 +51,39 @@ async function createStream(req: NextRequest) {
export async function POST(req: NextRequest) {
const accessCode = req.headers.get("access-code");
try {
- // // 使用 clientPromise 连接到 MongoDB 数据库
- // const client = await clientPromise;
- // // 选择数据库和集合
- // const db = client.db("chat_db");
- // const usersCollection = db.collection("users");
- // // 查询用户数据
- // const user = await usersCollection.findOne({ key: accessCode });
- // console.log(user, accessCode);
- // const tips =
- // "您的链接授权已过期,为了避免恶意盗刷,\n 请关注微信公众号【coder思维】\n回复关键词:`ai` 获取授权链接 \n ";
- // if (!user) {
- // return new Response(tips);
- // }
- // console.log("compare: ");
- // console.log(
- // user["expire"] < new Date().getTime(),
- // user["expire"],
- // new Date().getTime(),
- // );
- // if (user["expire"] < new Date().getTime()) {
- // // 判断用户是否过期
- // return new Response(tips);
- // }
+ // MongoDB init by URL Endpoint
+ const atlasAPI = new Atlas({
+ dataSource: "Cluster0",
+ database: "chat_db",
+ apiKey:
+ "8uOObGDRUqxdzfFzk91CHMq1UcUbqwQvnE6XjPQZe2Nv1xEXRBUi3vakKBWg7nbH",
+ apiUrl: "https://data.mongodb-api.com/app/data-ffyyc/endpoint/data/v1",
+ });
- // // 创建查询条件
+ let userRes = await atlasAPI.findOne({
+ collection: "users",
+ filter: { key: accessCode },
+ });
+ const tips =
+ "您的链接授权已过期,为了避免恶意盗刷,\n 请关注微信公众号【code思维】\n回复关键词:`ai` 获取授权链接 \n ";
+
+ if (!userRes || !userRes.document) {
+ return new Response(tips);
+ }
+
+ const user = userRes.document;
+
+ console.log(
+ new Date(user["expire"]).getTime() < new Date().getTime(),
+ user["expire"],
+ new Date().getTime(),
+ );
+ if (new Date(user["expire"]).getTime() < new Date().getTime()) {
+ // 判断用户是否过期
+ return new Response(tips);
+ }
+
+ // 创建查询条件
// // 计算24小时前的时间戳
// const currentTime = new Date();
// const startTime = new Date(currentTime.getTime() - 24 * 60 * 60 * 1000);
diff --git a/app/components/chat.tsx b/app/components/chat.tsx
index f39a304d5..42a089a5f 100644
--- a/app/components/chat.tsx
+++ b/app/components/chat.tsx
@@ -336,6 +336,13 @@ export function Chat(props: {
showSideBar?: () => void;
sideBarShowing?: boolean;
}) {
+ const [createNewSession, currentIndex, removeSession] = useChatStore(
+ (state) => [
+ state.newSession,
+ state.currentSessionIndex,
+ state.removeSession,
+ ],
+ );
type RenderMessage = Message & { preview?: boolean };
const chatStore = useChatStore();
@@ -571,16 +578,18 @@ export function Chat(props: {
onClick={props?.showSideBar}
/>
-
- }
- bordered
- title={Locale.Chat.Actions.CompressedHistory}
- onClick={() => {
- setShowPromptModal(true);
- }}
- />
-
+ {!isMobileScreen() && (
+
+ }
+ bordered
+ title={Locale.Chat.Actions.CompressedHistory}
+ onClick={() => {
+ setShowPromptModal(true);
+ }}
+ />
+
+ )}
}
@@ -594,6 +603,18 @@ export function Chat(props: {
}}
/>
+ {isMobileScreen() && ( // mobile only 显示新增聊天
+
+ }
+ text={Locale.Home.NewChat}
+ onClick={() => {
+ createNewSession();
+ }}
+ bordered
+ />
+
+ )}
{!isMobileScreen() && (
;
-}
-
-class Singleton {
- private static _instance: Singleton;
- private client: MongoClient;
- private clientPromise: Promise;
- private constructor() {
- this.client = new MongoClient(uri, options);
- this.clientPromise = this.client.connect();
- if (process.env.NODE_ENV === "development") {
- // In development mode, use a global variable so that the value
- // is preserved across module reloads caused by HMR (Hot Module Replacement).
- global._mongoClientPromise = this.clientPromise;
- }
- }
-
- public static get instance() {
- if (!this._instance) {
- this._instance = new Singleton();
- }
- return this._instance.clientPromise;
- }
-}
-const clientPromise = Singleton.instance;
-
-// Export a module-scoped MongoClient promise. By doing this in a
-// separate module, the client can be shared across functions.
-export default clientPromise;
diff --git a/app/locales/cn.ts b/app/locales/cn.ts
index 5b64c3c96..d89912233 100644
--- a/app/locales/cn.ts
+++ b/app/locales/cn.ts
@@ -10,7 +10,7 @@ const cn = {
ChatItemCount: (count: number) => `${count} 条对话`,
},
Chat: {
- SubTitle: (count: number) => `与 ChatGPT 的 ${count} 条对话`,
+ SubTitle: (count: number) => `${count} 条对话`,
Actions: {
ChatList: "查看消息列表",
CompressedHistory: "查看压缩后的历史 Prompt",
diff --git a/package.json b/package.json
index 86c9e9a11..a8d46440a 100644
--- a/package.json
+++ b/package.json
@@ -15,10 +15,10 @@
"@hello-pangea/dnd": "^16.2.0",
"@svgr/webpack": "^6.5.1",
"@vercel/analytics": "^0.1.11",
+ "atlas-fetch-data-api": "^1.0.5",
"emoji-picker-react": "^4.4.7",
"eventsource-parser": "^0.1.0",
"fuse.js": "^6.6.2",
- "mongodb": "^5.2.0",
"next": "^13.2.3",
"node-fetch": "^3.3.1",
"openai": "^3.2.1",
diff --git a/public/wx.png b/public/wx.png
index 96b892e58..770e1e061 100644
Binary files a/public/wx.png and b/public/wx.png differ
diff --git a/yarn.lock b/yarn.lock
index 69b0da291..eaf5168d8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1376,7 +1376,7 @@
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
-"@types/node@*", "@types/node@^18.14.6":
+"@types/node@^18.14.6":
version "18.15.11"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f"
integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==
@@ -1434,19 +1434,6 @@
resolved "https://registry.npmmirror.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43"
integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==
-"@types/webidl-conversions@*":
- version "7.0.0"
- resolved "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7"
- integrity sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==
-
-"@types/whatwg-url@^8.2.1":
- version "8.2.2"
- resolved "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63"
- integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==
- dependencies:
- "@types/node" "*"
- "@types/webidl-conversions" "*"
-
"@typescript-eslint/parser@^5.42.0":
version "5.57.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.0.tgz#f675bf2cd1a838949fd0de5683834417b757e4fa"
@@ -1650,6 +1637,13 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+atlas-fetch-data-api@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/atlas-fetch-data-api/-/atlas-fetch-data-api-1.0.5.tgz#0e4d0cb0d07f850d489b113f2e42d5926fb49586"
+ integrity sha512-o+F2gOBoqXXfOcWf61dRXFW2y2fGb2T6dn+qrTUfe0VRr2euEUHymWhb3nBZldX86IxcbH9dn6TXuRCg+F1f7g==
+ dependencies:
+ node-fetch "^2.6.9"
+
available-typed-arrays@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
@@ -1743,11 +1737,6 @@ browserslist@^4.21.3, browserslist@^4.21.5:
node-releases "^2.0.8"
update-browserslist-db "^1.0.10"
-bson@^5.2.0:
- version "5.2.0"
- resolved "https://registry.npmmirror.com/bson/-/bson-5.2.0.tgz#c81d35dd30e2798203e5422a639780ea98dd25ba"
- integrity sha512-HevkSpDbpUfsrHWmWiAsNavANKYIErV2ePXllp1bwq5CDreAaFVj6RVlZpJnxK4WWDCJ/5jMUpaY6G526q3Hjg==
-
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -3008,11 +2997,6 @@ internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5:
has "^1.0.3"
side-channel "^1.0.4"
-ip@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmmirror.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
- integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
-
is-arguments@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
@@ -3595,11 +3579,6 @@ memoize-one@^6.0.0:
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
-memory-pager@^1.0.2:
- version "1.5.0"
- resolved "https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
- integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
-
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -3940,25 +3919,6 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-mongodb-connection-string-url@^2.6.0:
- version "2.6.0"
- resolved "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf"
- integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==
- dependencies:
- "@types/whatwg-url" "^8.2.1"
- whatwg-url "^11.0.0"
-
-mongodb@^5.2.0:
- version "5.2.0"
- resolved "https://registry.npmmirror.com/mongodb/-/mongodb-5.2.0.tgz#58c3688614e793a8e970d797255130db9fd6ddea"
- integrity sha512-nLgo95eP1acvjBcOdrUV3aqpWwHZCZwhYA2opB8StybbtQL/WoE5pk92qUUfjbKOWcGLYJczTqQbfOQhYtrkKg==
- dependencies:
- bson "^5.2.0"
- mongodb-connection-string-url "^2.6.0"
- socks "^2.7.1"
- optionalDependencies:
- saslprep "^1.0.3"
-
mri@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
@@ -4014,6 +3974,13 @@ node-domexception@^1.0.0:
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+node-fetch@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
+ integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
+ dependencies:
+ whatwg-url "^5.0.0"
+
node-fetch@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e"
@@ -4293,7 +4260,7 @@ property-information@^6.0.0:
resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d"
integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==
-punycode@^2.1.0, punycode@^2.1.1:
+punycode@^2.1.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
@@ -4593,13 +4560,6 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
-saslprep@^1.0.3:
- version "1.0.3"
- resolved "https://registry.npmmirror.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
- integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==
- dependencies:
- sparse-bitfield "^3.0.3"
-
sass@^1.59.2:
version "1.60.0"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.60.0.tgz#657f0c23a302ac494b09a5ba8497b739fb5b5a81"
@@ -4690,19 +4650,6 @@ slice-ansi@^5.0.0:
ansi-styles "^6.0.0"
is-fullwidth-code-point "^4.0.0"
-smart-buffer@^4.2.0:
- version "4.2.0"
- resolved "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
- integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
-
-socks@^2.7.1:
- version "2.7.1"
- resolved "https://registry.npmmirror.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
- integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
- dependencies:
- ip "^2.0.0"
- smart-buffer "^4.2.0"
-
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -4723,13 +4670,6 @@ spark-md5@^3.0.2:
resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc"
integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==
-sparse-bitfield@^3.0.3:
- version "3.0.3"
- resolved "https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
- integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==
- dependencies:
- memory-pager "^1.0.2"
-
stable@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
@@ -4934,12 +4874,10 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
-tr46@^3.0.0:
- version "3.0.0"
- resolved "https://registry.npmmirror.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
- integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
- dependencies:
- punycode "^2.1.1"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
trim-lines@^3.0.0:
version "3.0.1"
@@ -5190,18 +5128,18 @@ web-streams-polyfill@^3.0.3:
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
-webidl-conversions@^7.0.0:
- version "7.0.0"
- resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
- integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-whatwg-url@^11.0.0:
- version "11.0.0"
- resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
- integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
dependencies:
- tr46 "^3.0.0"
- webidl-conversions "^7.0.0"
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
which-boxed-primitive@^1.0.2:
version "1.0.2"