diff --git a/README.md b/README.md index 1bec8f6..ab56c3e 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,135 @@ - - #
+ # 🎥项目演示地址 + 🔗[https://www.bilibili.com/video/BV1Fg4y1u76d/](https://www.bilibili.com/video/BV1Fg4y1u76d/) **希望观众老爷给个免费的三连支持一下新人up主** + # ♻️项目基本介绍 + `翎`是基于`electron(vue2)`和`nodejs`实现的简单聊天软件,其中用`websocket`和`http`进行通讯传递,数据库使用了`mysql`数据库,该项目功能简单,界面简洁,适合正在练习`websocket`和`vue`的小白查看代码,代码量极少且逻辑清晰,每个功能都会添加相应的逻辑供大家观看学习(大佬勿喷) + # 🧨 部分用户遇到的问题 + ## 数据库无法连接 + ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0ffa8532bb84153b8b0033b31d16a41.png) + ### 问题分析 + 可能用户新装的mysql,没有设置数据库访问权限 + ### 问题解决方案 + 1. 进入到你的数据库 + ```shell mysql -u root -p ``` + 2. 输入以下命令 + ```shell use mysql; update user set Host="%" where User="root"; flush privileges; exit; ``` + 3. 使用连接工具尝试连接mysql数据库(navicat) -## 前端安装依赖出现问题(node-gyp) + +# docker生成的mysql8,后端无法连接成功,navicat能连接 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/8eb821b5875d4b04a2d868530ca89e68.png) + +### 问题分析 + +MySQL 8 默认情况下不允许使用旧的身份验证插件,而某些 Node.js MySQL 驱动程序(例如 mysql 模块)可能仍在使用这些插件。如果您遇到这个问题,可以在 MySQL 8 中启用旧的身份验证插件。您可以使用以下命令在 MySQL 8 中启用旧的身份验证插件: + +### 解决方案 + +1. 进入到你的数据库 + +```shell +mysql -u root -p +``` + +2. 输入以下命令 + +```shell +ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; +flush privileges; +exit; +``` + +## 后端安装依赖出现问题(node-gyp) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/8aac61eee61a4a00b9b7451dbb4ab737.png) + ### 问题分析 -`electron`和nodejs版本不兼容,建议将nodejs版本修改为16.18或者14.20 + +node-pty需要python依赖,这个只能根据错误去一个一个查找问题 + ### 问题解决方案 -卸载当前版本的nodejs,然后安装`16.18`版本 -#### 16.18 -[https://nodejs.org/download/release/v16.18.0/node-v16.18.0-x64.msi](https://nodejs.org/download/release/v16.18.0/node-v16.18.0-x64.msi) -#### 14.20 -[https://nodejs.org/download/release/v14.20.0/node-v14.20.0-x64.msi](https://nodejs.org/download/release/v14.20.0/node-v14.20.0-x64.msi) + +错误可忽略,不影响程序运行 + +# 🔖项目运行 + +## 后端运行 + +```shell +git clone https://github.com/OblivionTime/chat.git +cd server +yarn +node index.js +``` + +## 前端调试运行 + +```shell +git clone https://github.com/OblivionTime/chat.git +cd ui +yarn +#调试 +yarn serve +#打包 +yarn build +``` + + + +## 🎗️ docker 部署 + +### 注意事项 + +如果是linux使用的话,是无法使用new bing功能的 + +### 简单部署 + +```shell +git clone https://github.com/OblivionTime/chat.git +cd docker +docker build -t chat . +#等待安装..... +#安装成功后 +docker run --name chat --restart=always -p 3306:3306 -p 8888:8888 -d chat +``` + +访问页面:https://服务器ip:8888,如果能正常访问并不是报404页面错误则配置成功(出现error是正常的) + # 🧨项目目前存在的问题 -* 如果在同一台电脑上,进行视频通话,是不成功的,因为会出现摄像头也被占用问题,但是语音通话是可以的 -* 目前逻辑是必须双方都在同时相互聊天,才能进行语音和视频通话 -* 目前用户可以同时和不同的人同时进行音视频(后期会修改这个逻辑) -* 目前视频通话存在画质模糊问题(待修复) + +* 目前视频通话存在画质模糊问题 +* 如果想使用需要将chat.exe放在windows上运行 + # 🥑已修复的bug + 1. 文件下载出现了白屏 2. 聊天框没有置底 + # 👻注意事项 + 1. 打开软件第一时间修改服务器地址 ![在这里插入图片描述](https://img-blog.csdnimg.cn/163aa1f40fc14711915900ff7df25ce0.png) @@ -52,7 +139,9 @@ exit; 格式必须为`https://你的ip地址`,技术人员根据自己的需求去修改 + # 🎉已完成功能 + * 登录账号 * 修改服务器地址 * 注册账号 @@ -63,36 +152,58 @@ exit; * 发送表情包,图片,文字,文件(50mb以内) * 支持一对一语音通话,一对一视频通话 * 集成`new bing` -# 🎗️待完成功能 -* 搜索好友和群聊 * 群聊 * 修改好友备注 -* 好友通过请求 -* 删除好友 +* 邀请好友进入群聊 * 群视频 -* 共享屏幕 + +# 🖼️ 项目截图 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/163aa1f40fc14711915900ff7df25ce0.png) +![在这里插入图片描述](https://img-blog.csdnimg.cn/515d30cb15194de3972bf838ec8c8b59.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/ec92a4770c5642758c248c4b93ce7cc7.png) +![在这里插入图片描述](https://img-blog.csdnimg.cn/66c0aa6e5a5742fba29689cd8710115b.png) + +![在这里插入图片描述](https://img-blog.csdnimg.cn/76c65c9dd9f0417aab6a5de5bc0a92b1.png) +![在这里插入图片描述](https://img-blog.csdnimg.cn/0e93ab57d76e424e88d381c9d9db3cb8.png) + +![在这里插入图片描述](https://img-blog.csdnimg.cn/c046fd41571746c29d1e2df22b493fb3.png) + +![在这里插入图片描述](https://img-blog.csdnimg.cn/5cd9ce85876843cfa205620c44aedf11.png) +![在这里插入图片描述](https://img-blog.csdnimg.cn/bc8dcc804b774c1b96c4116ef05350d7.png) +![在这里插入图片描述](https://img-blog.csdnimg.cn/b17a50a8de884d51b82c6a9637e1cf18.png) # 🤖如何在项目使用new bing + ## 你必须要满足以下条件 + 1. 科学上网 2. edge登录了bing以及能使用new bing +3. 使用window启动`chat.exe` + ## 优点 + 1.保存每次会话记录 + 2. 获取一次聊天次数后,就可以无需科学上网永久使用对话(每六小时自动重置次数) + ## 基本使用 + 1. 设置代理服务器 -![在这里插入图片描述](https://img-blog.csdnimg.cn/4f82e09f138c4cee9ed657d66e13b423.png) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/4f82e09f138c4cee9ed657d66e13b423.png) 2. 生成次数 -![在这里插入图片描述](https://img-blog.csdnimg.cn/95c35de9a4ca4749814a565a7079143c.png) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/95c35de9a4ca4749814a565a7079143c.png) 3. 开始对话 -![在这里插入图片描述](https://img-blog.csdnimg.cn/8f17e6d1249742abad19073d0102f0ce.png) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/8f17e6d1249742abad19073d0102f0ce.png) # 🪵前端框架和技术介绍 + 前端主要是由`vue2`和`electron`配合`elementui`UI框架实现的页面 + ## vue2 + Vue.js是一款流行的前端JavaScript框架,它由尤雨溪(Yuxi You)开发并维护,第一个版本发布于2014年2月。Vue.js 的目标是通过尽可能简单的 API 实现响应式的数据绑定和组合视图组件。 Vue.js的核心库只关注视图层,易于上手,同时也可以轻松与其他第三方库或现有项目集成。Vue.js 可以通过简单的模板语法和可重用组件来实现快速开发,它也支持许多高级特性,例如计算属性、指令、路由、状态管理等。 @@ -100,7 +211,9 @@ Vue.js的核心库只关注视图层,易于上手,同时也可以轻松与 Vue.js在2016年发布了Vue.js 2.0版本,Vue.js 2.x的性能得到了很大提升,并增加了许多新特性。Vue.js 2.x使用虚拟DOM(Virtual DOM)进行高效的DOM更新,还支持服务端渲染(SSR)和单文件组件(SFC)等功能。Vue.js 2.x也提供了更好的TypeScript支持,使得开发更加友好。 Vue.js还有一些周边生态,例如Vue Router、Vuex、Vue CLI、Vue Devtools等,这些库可以进一步扩展Vue.js的功能和性能,以提高开发效率。 + ## electron + Electron(前身为Atom Shell)是由 GitHub 开发的一款跨平台桌面应用程序开发框架,它基于 Chromium 和 Node.js 构建,允许开发者使用 web 技术(如 HTML、CSS 和 JavaScript)构建原生的跨平台桌面应用程序。Electron 的目标是让开发人员使用简单的前端技术构建跨平台桌面应用程序,并且可以像开发网页一样进行调试。 Electron 采用了多进程架构,应用程序主进程使用 Node.js 运行,用于管理应用程序的生命周期和处理系统级别的操作,如菜单、对话框、剪贴板等。而渲染进程则是一个 Chromium 浏览器实例,用于渲染应用程序的 UI。 @@ -108,7 +221,9 @@ Electron 采用了多进程架构,应用程序主进程使用 Node.js 运行 Electron 提供了丰富的 API 和开发工具,例如可以通过 Electron-Builder、Electron-Packager 等工具将应用程序打包成可执行文件,并支持跨平台发布和自动更新。此外,Electron 还支持许多第三方模块和插件,如 Spectron、electron-devtools-installer、electron-store 等,用于进一步扩展应用程序的功能。 Electron 已经被广泛应用于许多知名的跨平台应用程序,如 Visual Studio Code、GitHub Desktop、Slack、Atom、Discord 等。 + ## elementui + Element UI 是一款基于 Vue.js 2.0 的桌面端组件库,由饿了么前端团队开发并维护。它提供了丰富的 UI 组件,包括表单、表格、弹窗、菜单、导航等,可以满足大部分企业级应用的 UI 需求。 Element UI 设计风格简洁、美观,同时还具备响应式设计,可以适应不同屏幕尺寸的设备。Element UI 的组件可高度定制,允许通过修改主题、样式、属性等实现自定义的外观和功能。 @@ -116,25 +231,41 @@ Element UI 设计风格简洁、美观,同时还具备响应式设计,可以 Element UI 还提供了丰富的文档和示例,便于开发人员快速学习和上手,同时也提供了丰富的 API 文档和源代码,方便开发者进行二次开发和定制。 除了 Vue.js,Element UI 还支持其他常用的前端框架,例如 React、Angular 等,可以与这些框架轻松集成。Element UI 是一款开源的组件库,采用 MIT 许可证,可以在任何商业和非商业项目中免费使用。 + ## 目录介绍 + ![在这里插入图片描述](https://img-blog.csdnimg.cn/04de8008d2d047088cd064440a6b7022.png) + ### 核心文件介绍 + #### components的vueImageVerify.vue + 这个文件主要是生成验证码图片 + #### utils的cookie.js + 这个文件主要是帮你存储你的登录信息,个人信息到缓存里 + #### utils的file.js + 这个文件主要是获取从一个url里获取文件名和判断你的文件类型是图片还是zip或者其他的 + #### utils的request.js + 这个文件主要就是向后端发送请求并获取相应的数据,axios + #### views的Login + 这个目录核心就是负责`登录`,`注册`,`忘记密码`,`修改服务器地址`,代码基本上一样,如果看懂其中一个页面其他页面的代码基本上就都看懂了,以下是实现登录的核心逻辑,简单吧!! ![在这里插入图片描述](https://img-blog.csdnimg.cn/7d8fc561b5124895aa517d1d3df70c84.png) + #### views的index目录 + 这个目录偏核心一点,主要就是我们登录后的界面,界面主要分为三大块,`侧边栏`,`列表栏`,`聊天栏`,侧边只会影响`列表栏`并不会影响`聊天栏` ## 前端逻辑 + 1. 用户打开应用后,页面具有四个功能,`登录`,`注册`,`找回密码`,`设置服务器地址`,二个次要功能`自动登录`和`记住密码`,填入正确的用户名和密码后会直接跳转到首页,如果填入失败则会提示响应的错误 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e2ba818ab25548a5b1f35b4668b48e3b.png) @@ -142,12 +273,17 @@ Element UI 还提供了丰富的文档和示例,便于开发人员快速学习 2. 登录成功或者注册成功后,我们将进入到主页面,主页面主要由`侧边栏`,`列表栏`,`聊天栏`组成,`侧边栏`主要可以进行`个人信息的修改`,选择`聊天`和`联系人`,当我们点击其中一个图片,我们会进行相对于的`tag`修改,然后通过vue的路由跳转实现响应的界面展示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6fe3ebac59e04c408ec86d7ac9763478.png) + 3. 当我们选择一个好友时,我们获取房间号和好友名称来建立一个`websocket`,后端会发送所有与之相关的所有历史记录,前端会根据消息的类型来进行相对应的展示,(音视频记录不会展示,可以做但是不想做😼😼😼),当发送或接收一条消息会自动更新`列表栏`的数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/616e8cd7b58e437a8a1eff4781d88074.png) + # 后端项目 + 后端主要是由`nodejs`配合`express`和`express-ws`实现简单的后端搭建,通过`mysql`对数据的存储,代码已经实现创建各个表,无需执行`sql`文件,代码简单且逻辑基本上类似,懂一些即可懂大部分,适合新手 + ## nodejs + Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,使JavaScript可以在服务器端运行。Node.js采用事件驱动、非阻塞I/O模型,因此可以处理大量并发连接,且处理速度快、性能高。Node.js的模块化设计使得开发者可以方便地组织代码和管理依赖项。 Node.js最初由Ryan Dahl在2009年开发,目的是构建高性能、可扩展的网络应用程序。Node.js的优点在于可以使用JavaScript编写服务器端代码,并且可以方便地与前端JavaScript框架进行集成,如React、Angular、Vue.js等。 @@ -155,13 +291,17 @@ Node.js最初由Ryan Dahl在2009年开发,目的是构建高性能、可扩展 Node.js拥有丰富的内置库和第三方模块,可用于构建Web应用程序、命令行工具、网络服务器、流处理应用程序等。Node.js提供了许多有用的工具和工具库,如npm、Express、Socket.IO等,使得开发和维护应用程序变得更加轻松和高效。 Node.js具有跨平台的特性,可在Windows、Linux、macOS等不同操作系统上运行。由于其强大的性能和便捷的开发体验,Node.js被越来越多的开发者和企业所采用,并且在大型公司和开源社区中得到了广泛的应用。 + ## express + Express是一个流行的基于Node.js的Web应用程序框架,提供了一组简单的API,可以帮助开发者更快地构建Web应用程序。Express采用MVC(模型-视图-控制器)的软件设计模式,使得开发者可以将应用程序的逻辑、数据和UI分离开来,从而使得代码更加模块化和易于维护。 Express框架提供了许多有用的功能和中间件,如路由、模板引擎、HTTP工具、数据库集成等,可帮助开发者快速构建Web应用程序。同时,Express也是高度可定制的,允许开发者根据需求自定义中间件和插件,以满足特定的开发需求。 Express非常流行,因为它具有简单、轻量级、易于学习的特点,同时也可以通过第三方模块扩展其功能,例如body-parser、cookie-parser、multer等。Express也被广泛应用于许多开源项目和企业级应用程序中,包括GitHub、PayPal、IBM等。 + ## express-ws + Express-ws是一个基于Express框架的WebSocket插件,用于在Express应用程序中添加WebSocket功能。WebSocket是一种网络协议,允许客户端和服务器之间进行双向通信,可以在Web应用程序中实现实时数据传输和通信。 Express-ws提供了WebSocket相关的API,可帮助开发者快速添加WebSocket功能,同时也与Express的中间件机制兼容,使得WebSocket和HTTP请求可以在同一应用程序中共存。使用Express-ws,开发者可以在Express应用程序中实现实时通信、在线游戏、聊天室等功能。 @@ -169,28 +309,40 @@ Express-ws提供了WebSocket相关的API,可帮助开发者快速添加WebSock Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单的API进行配置和使用。Express-ws也可以与其他Express中间件和插件集成,例如Express-session、Passport等,以实现更加复杂的功能。 总的来说,Express-ws是一个非常有用的工具,使得在Express应用程序中添加WebSocket功能变得更加容易和快速,可以大大提高Web应用程序的实时通信能力。 + ## 目录介绍 + ![在这里插入图片描述](https://img-blog.csdnimg.cn/11c581bf6e5241cf81a227ece54279e7.png) + ### 后端逻辑 + 我会将后端所有逻辑都写在代码里,可以根据自己需求去查看相对应的代码块 + # 🎙️WebRTC + ## 代码逻辑 + 1. 邀请人先创建麦克风并初始化PC源 2. 发送创建房间的指令到当前房间,后端接受到指令后,给当前房间的所有用户发送响应的指令 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e803127e3d8645a3b468c44a825b4269.png) -3. 被邀请人点击同意后,获取自己的视频流,初始化PC源,PC添加音视频流,创建offer,获取自己的音视频流,并通过setLocalDescription函数存储自己的音视频流,并发送peer指令(携带自己的音视频)告诉邀请人要存储自己的音视频 +3. 被邀请人点击同意后,获取自己的视频流,初始化PC源,PC添加音视频流,创建offer,获取自己的音视频流,并通过setLocalDescription函数存储自己的音视频流,并发送new_peer指令(携带自己的音视频)告诉房间的人,我要进入房间 +![在这里插入图片描述](https://img-blog.csdnimg.cn/57f5283083254dcfb4ecba99f67c89d7.png) + +![在这里插入图片描述](https://img-blog.csdnimg.cn/83b6b19c06484c93a060ab3448de255c.png) + + -![在这里插入图片描述](https://img-blog.csdnimg.cn/7f039caed012453dac2c14e2ce4e3bd0.png) -![在这里插入图片描述](https://img-blog.csdnimg.cn/dbe2de1f9dc2409b87ed65ecb9af3fa9.png) +4. 邀请人接收到有新人进入房间,则发送视频流和offer指令给新人 -4. 邀请人接受到对方同意的指令后,将对方的音视频流通过setRemoteDescription函数进行存储,存储完后邀请人创建answer来获取自己的音视频流,通过setLocalDescription函数存储自己的音视频流,并发送answer指令(携带自己的音视频)告诉对方要存储邀请人的音视频 +![在这里插入图片描述](https://img-blog.csdnimg.cn/241e681ad22f4c7f8c62a3cf0026f25a.png) -![在这里插入图片描述](https://img-blog.csdnimg.cn/0bd551ca94b6420dbbe28266c19210fa.png) +5. 新人接受到对方同意的指令后,将对方的音视频流通过setRemoteDescription函数进行存储,存储完后新人创建answer来获取自己的音视频流,通过setLocalDescription函数存储自己的音视频流,并发送answer指令(携带自己的音视频)告诉对方要存储邀请人的音视频 +![在这里插入图片描述](https://img-blog.csdnimg.cn/72bbb2e5f8f24336addc32e3450f834b.png) -5. 设置邀请方发来的音频源 +6. 设置邀请方发来的音频源 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d102c00236cf4555ab33bae24daee803.png) @@ -209,8 +361,11 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 ![在这里插入图片描述](https://img-blog.csdnimg.cn/fd55c12db2654ebe8fb3f1f93955f20a.png) # 🕹️数据库 + 目前这些表只是待定的,后期大概率还是会改里面的字段 + ## 用户表(user) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/c687f7a37c1143afb6193595013ac445.png) 这是一个MySQL数据库中的用户表,其中包含以下字段: @@ -222,13 +377,14 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * name:用户昵称,可选字段,用于显示用户的个人信息,是一个长度为255的字符串,使用utf8mb4编码和Unicode排序规则,可以为NULL。 * signature:用户签名,可选字段,用于显示用户的个人信息,是一个长文本类型,使用utf8mb4编码和Unicode排序规则,可以为NULL。 * created_at:用户创建时间,用于记录用户的创建时间,是一个日期时间类型,使用当前时间戳作为默认值,可以为NULL。 + ## 好友表(friend) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/d628a04b61b541be89237602f92be4bc.png) * id: 该字段为自增主键,表示每个朋友记录的唯一标识符。 * user_id: 该字段表示朋友所属的用户 ID。 * username: 该字段表示朋友的用户名。 -* avatar: 该字段表示朋友的头像图片链接地址,可以为 NULL。 * online_status: 该字段表示朋友的在线状态,取值为 online 或 offline。 * remark: 该字段表示朋友的备注,可以为 NULL。 * group_id: 该字段表示朋友所属的朋友分组 ID,可以为 NULL。 @@ -239,7 +395,9 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * PRIMARY KEY: 指定主键为 id 字段。 * INDEX: 指定索引为 group_id 字段。 * CONSTRAINT: 指定外键约束,将 group_id 字段与 friend_group 表中的 id 字段关联,实现级联更新和级联删除。该约束名称为 friend_ibfk_1。 + ## 好友组表(friend_group) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/9a88e10fd81a4c88b1cffb2d862f8bb7.png) * id: 主键,自动递增的整数。 @@ -251,6 +409,7 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * 此外,该表还定义了一个名为idx_user_id的索引,用于加速对user_id字段的查询。并且定义了一个名为friend_group_ibfk_1的外键约束,当删除user表中的记录时,会级联删除与之关联的friend_group表中的记录。 ## 群聊表(group_chat) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/4142e495759b4fb4b19097b70eab4089.png) * id: 主键,自动递增的整数。 @@ -262,7 +421,9 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。 * updated_at: 记录更新时间,时间戳类型,默认值为当前时间戳,在记录更新时自动更新。 * 此外,该表还定义了一个名为idx_creator_id的索引,用于加速对creator_id字段的查询。并且定义了一个名为group_chat_ibfk_1的外键约束,当删除user表中的记录时,会级联删除与之关联的group_chat表中的记录。 + ## 群聊成员表(group_numbers) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/dc5c2de67c594fd7922652b9571f906a.png) * id: 主键,自动递增的整数。 @@ -272,7 +433,9 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。 * updated_at: 记录更新时间,时间戳类型,默认值为当前时间戳,在记录更新时自动更新。 * 此外,该表还定义了两个索引:一个名为idx_user_id的索引用于加速对user_id字段的查询;另一个名为idx_group_id的索引用于加速对group_id字段的查询。并且定义了一个名为group_members_ibfk_1的外键约束,当删除group_chat表中的记录时,会级联删除与之关联的group_members表中的记录 + ## 消息表(message) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/613e40a3635a47d4931bda67b6e2f8b6.png) * id: 主键,自动递增的整数。 @@ -284,8 +447,10 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * media_type: 媒体类型,枚举类型,可选值为’text’、‘image’、‘video’和’file’。 * status: 消息状态,整数类型,默认值为0。 * created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。 -此外,该表还定义了一个名为sender_id的索引,用于加速对sender_id字段的查询。并且定义了一个名为message_ibfk_1的外键约束,当删除user表中的记录时,会级联删除与之关联的message表中的记录。 + 此外,该表还定义了一个名为sender_id的索引,用于加速对sender_id字段的查询。并且定义了一个名为message_ibfk_1的外键约束,当删除user表中的记录时,会级联删除与之关联的message表中的记录。 + ## 消息统计表(message_statistics) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/2372a088b20340ceb655364e4c1a4ddb.png) * id: 主键,自动递增的整数。 @@ -293,8 +458,10 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * total: 消息总数,整数类型。 * created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。 * updated_at: 记录更新时间,时间戳类型,默认值为当前时间戳,在记录更新时自动更新。 -该表没有定义外键约束和索引。 + 该表没有定义外键约束和索引。 + ## AI密钥存储表(ai_conversation) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/c7085feca20c45d2aa5e86545a364856.png) @@ -310,8 +477,11 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 此外,该表还包含一个外键约束,它引用了 user 表中的 username 字段,并在删除或更新时级联操作。 表使用 InnoDB 引擎,并使用 utf8mb4 字符集和 utf8mb4_unicode_ci 校对规则。 + ## AI消息存储表(ai_conversation) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/10a9f89bc8b74ab28318028d1f27cb30.png)* id: 主键,自动递增的整数。 + * sender_id: 发送者 ID,非空整数。 * receiver_id: 接收者 ID,非空整数。 * content: 消息内容,非空长文本。 @@ -323,35 +493,17 @@ Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单 * invocation_id: 调用ID,非空整数。 * created_at: 记录创建时间,默认值为当前时间戳。 -# 🔖项目运行 -## 后端运行 -```shell -git clone https://github.com/OblivionTime/chat.git -cd server -yarn -node index.js -``` - -## 前端调试运行 -```shell -git clone https://github.com/OblivionTime/chat.git -cd ui -yarn -#调试 -yarn server -#打包 -yarn build -``` ## 注意electron打包会出现的问题 + ## 打包前必须做的事 - 进入到下面目录C:\Users\自己的用户名\AppData\Local\electron-builder\Cache -![在这里插入图片描述](https://img-blog.csdnimg.cn/07e7a371077042039fe75a7aae4ada23.png) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/07e7a371077042039fe75a7aae4ada23.png) - 创建目录**winCodeSign**和**nsis** -![在这里插入图片描述](https://img-blog.csdnimg.cn/99b0ca3b41fb424498775ad81274c950.png) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/99b0ca3b41fb424498775ad81274c950.png) @@ -361,5 +513,16 @@ yarn build - 进入到**C:\Users\自己的用户名\AppData\Local\electron-builder\Cache\nsis**目录下,将**electron必须安装包**目录下分别解压成如下图所示的样子 -![在这里插入图片描述](https://img-blog.csdnimg.cn/6d91296313c9490a9de1b58c0db6373e.png) -详细教程:[https://www.cnblogs.com/liliyou/p/13423709.html](https://www.cnblogs.com/liliyou/p/13423709.html) + ![在这里插入图片描述](https://img-blog.csdnimg.cn/6d91296313c9490a9de1b58c0db6373e.png) + 详细教程:[https://www.cnblogs.com/liliyou/p/13423709.html](https://www.cnblogs.com/liliyou/p/13423709.html) + + + +# 结语 + + +![在这里插入图片描述](https://img-blog.csdnimg.cn/e8be97b67c1b43a68add5c6c5944fbc9.jpeg) + + + +![](https://files.catbox.moe/bhs6h3.png) diff --git a/docker/chat b/docker/chat new file mode 100644 index 0000000..6c3e75d Binary files /dev/null and b/docker/chat differ diff --git a/docker/dockerfile b/docker/dockerfile new file mode 100644 index 0000000..e1699ec --- /dev/null +++ b/docker/dockerfile @@ -0,0 +1,17 @@ +FROM ubuntu:18.04 +LABEL maintainer="https://github.com/OblivionTime" +LABEL version="1.0" +LABEL description="Chat docker 搭建平台" +ARG DEBIAN_FRONTEND=noninteractive +ENV TZ=Asia/Shanghai +USER root +RUN apt-get update +RUN apt-get install mysql-server -y +RUN apt-get install libmysqlclient-dev -y +COPY . /chat +RUN chmod 777 /chat +RUN cd /chat && ./init.sh +EXPOSE 3306 +EXPOSE 8888 +WORKDIR /chat +CMD service mysql start && ./chat diff --git a/docker/execSql.sql b/docker/execSql.sql new file mode 100644 index 0000000..1026095 --- /dev/null +++ b/docker/execSql.sql @@ -0,0 +1,5 @@ +ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; +flush privileges; +use mysql; +update user set Host="%" where User="root"; +create database chat character set = utf8mb4; \ No newline at end of file diff --git a/docker/init.sh b/docker/init.sh new file mode 100644 index 0000000..80f0d74 --- /dev/null +++ b/docker/init.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cp -rf /chat/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf +service mysql start +mysql < /chat/execSql.sql diff --git a/docker/mysqld.cnf b/docker/mysqld.cnf new file mode 100644 index 0000000..6e36941 --- /dev/null +++ b/docker/mysqld.cnf @@ -0,0 +1,105 @@ +# +# The MySQL database server configuration file. +# +# You can copy this to one of: +# - "/etc/mysql/my.cnf" to set global options, +# - "~/.my.cnf" to set user-specific options. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# This will be passed to all mysql clients +# It has been reported that passwords should be enclosed with ticks/quotes +# escpecially if they contain "#" chars... +# Remember to edit /etc/mysql/debian.cnf when changing the socket location. + +# Here is entries for some specific programs +# The following values assume you have at least 32M ram + +[mysqld_safe] +socket = /var/run/mysqld/mysqld.sock +nice = 0 + +[mysqld] +# +# * Basic Settings +# +user = mysql +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +tmpdir = /tmp +lc-messages-dir = /usr/share/mysql +skip-external-locking +# +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +bind-address = 0.0.0.0 +# +# * Fine Tuning +# +key_buffer_size = 16M +max_allowed_packet = 16M +thread_stack = 192K +thread_cache_size = 8 +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched +myisam-recover-options = BACKUP +#max_connections = 100 +#table_open_cache = 64 +#thread_concurrency = 10 +# +# * Query Cache Configuration +# +query_cache_limit = 1M +query_cache_size = 16M +# +# * Logging and Replication +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log_file = /var/log/mysql/mysql.log +#general_log = 1 +# +# Error log - should be very few entries. +# +log_error = /var/log/mysql/error.log +# +# Here you can see queries with especially long duration +#slow_query_log = 1 +#slow_query_log_file = /var/log/mysql/mysql-slow.log +#long_query_time = 2 +#log-queries-not-using-indexes +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +#server-id = 1 +#log_bin = /var/log/mysql/mysql-bin.log +expire_logs_days = 10 +max_binlog_size = 100M +#binlog_do_db = include_database_name +#binlog_ignore_db = include_database_name +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +# +# * Security Features +# +# Read the manual, too, if you want chroot! +# chroot = /var/lib/mysql/ +# +# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". +# +# ssl-ca=/etc/mysql/cacert.pem +# ssl-cert=/etc/mysql/server-cert.pem +# ssl-key=/etc/mysql/server-key.pem diff --git a/server/app/routes/friend.js b/server/app/routes/friend.js index b2028a4..240be5a 100644 --- a/server/app/routes/friend.js +++ b/server/app/routes/friend.js @@ -31,5 +31,10 @@ module.exports = function () { router.get('/list', authenticateToken, friend.List) router.post('/add_friend', authenticateToken, friend.AddFriend) router.get('/search', authenticateToken, friend.SearchUser) + router.get('/info', authenticateToken, friend.getFriendInfo) + router.get('/group_list', authenticateToken, friend.getFriendGroupList) + router.post('/create', authenticateToken, friend.createFriendGroup) + router.post('/update', authenticateToken, friend.updateFriendGroup) + router.post('/update_friend', authenticateToken, friend.updateFriendInfo) return router } \ No newline at end of file diff --git a/server/app/routes/group.js b/server/app/routes/group.js index 4f0a830..e908a7e 100644 --- a/server/app/routes/group.js +++ b/server/app/routes/group.js @@ -29,9 +29,25 @@ function authenticateToken(req, res, next) { }); } module.exports = function () { + //群聊列表 router.get('/list', authenticateToken, group.List) + //获取群聊中所有群员 + router.get('/members_list', authenticateToken, group.MembersList) + //创建群聊 router.post('/create_group', authenticateToken, upload.single('avatar'), group.CreateGroupChat) + //搜索群聊 router.get('/search', authenticateToken, group.SearchGroupChat) + //加入群聊 router.get('/join', authenticateToken, group.JoinGroupChat) + //群聊信息 + router.get('/info', authenticateToken, group.GroupInfo) + //重命名 + router.post('/rename', authenticateToken, group.RenameGroup) + //邀请群聊 + router.post('/invitation', authenticateToken, group.invitedUsersToGroup) + //退出群聊 + router.post('/exitGroupChat', authenticateToken, group.DeleteUserFromGroup) + //获取音视频房间的所有用户 + router.get('/getRTCUser', authenticateToken, group.GetRTCUser) return router } \ No newline at end of file diff --git a/server/app/routes/message.js b/server/app/routes/message.js index 96797cb..b633494 100644 --- a/server/app/routes/message.js +++ b/server/app/routes/message.js @@ -29,6 +29,6 @@ function authenticateToken(req, res, next) { } module.exports = function () { router.get('/list', authenticateToken, message.List) - router.ws('/single',message.SingleConnect) + router.ws('/chat', message.ChatConnect) return router } \ No newline at end of file diff --git a/server/app/routes/rtc.js b/server/app/routes/rtc.js index 6358740..890e9ff 100644 --- a/server/app/routes/rtc.js +++ b/server/app/routes/rtc.js @@ -4,5 +4,6 @@ const rtc = require("../../container/rtc/index") module.exports = function () { router.ws('/single',rtc.SingleRTCConnect) + router.ws('/group',rtc.groupRTCConnect) return router } \ No newline at end of file diff --git a/server/container/auth/index.js b/server/container/auth/index.js index e76bae4..e39b504 100644 --- a/server/container/auth/index.js +++ b/server/container/auth/index.js @@ -9,7 +9,7 @@ module.exports = { }; const jwt = require('jsonwebtoken'); const secretKey = 'xWbiNA3FqnK77MnVCj5CAcfA-VlXj7xoQLd1QaAme6l_t0Yp1TdHbSw'; -let rooms = {} +let codeRooms = {} let { RespUserOrPassErr, RespParamErr, RespServerErr, RespUserExitErr, RespUpdateErr, RespUserNotExitErr } = require('../../model/error'); const { RespData, RespSuccess } = require('../../model/resp'); const { Query } = require('../../db/query'); @@ -189,10 +189,10 @@ function LoginCode(ws, req) { let room = params.get("room") let name = params.get("name") if (name == 'device') { - rooms[room] = {} - rooms[room][name] = ws - } else if (rooms[room] && name == 'user') { - rooms[room][name] = ws + codeRooms[room] = {} + codeRooms[room][name] = ws + } else if (codeRooms[room] && name == 'user') { + codeRooms[room][name] = ws } else { ws.close() } @@ -200,7 +200,7 @@ function LoginCode(ws, req) { let data = JSON.parse(Resp_data) if (name == 'user') { if (data.operation == "connect") { - rooms[room]['device'].send(JSON.stringify(data)) + codeRooms[room]['device'].send(JSON.stringify(data)) } else if (data.operation == "login") { let username = data.username const sql = 'select * from user where username=?' @@ -224,26 +224,26 @@ function LoginCode(ws, req) { phone: results[0].phone, } } - rooms[room]['device'].send(JSON.stringify(data)) + codeRooms[room]['device'].send(JSON.stringify(data)) } else { ws.send(JSON.stringify({ operation: "error", error: "登录失败" })) } }) } } else { - rooms[room]['user'].send(Resp_data) + codeRooms[room]['user'].send(Resp_data) } }); ws.on('close', function () { if (name == 'device') { - delete rooms[room][name] - for (const key in rooms[room]) { - rooms[room][key].close() + delete codeRooms[room][name] + for (const key in codeRooms[room]) { + codeRooms[room][key].close() } - delete rooms[room] + delete codeRooms[room] } else { - if (rooms[room]) { - delete rooms[room][name] + if (codeRooms[room]) { + delete codeRooms[room][name] } } }) @@ -276,18 +276,76 @@ function initUserNotification(ws, req) { let params = new URLSearchParams(url) let username = params.get("username") //如果用户已经登录则强制退出当前用户 - if (LoginRooms[username]) { - ws.close() + // if (LoginRooms[username]) { + // LoginRooms[username].send(JSON.stringify({ name: "logout" })) + // LoginRooms[username].close() + // } + LoginRooms[username] = { + ws: ws, + status: false, } - LoginRooms[username] = ws - ws.on('message', function (Resp_data) { + ws.on('message', async (Resp_data) => { let data = JSON.parse(Resp_data) //接收者 let receiver_username = data.receiver_username + if (data.name == 'audio' || data.name == 'video') { + if (!LoginRooms[receiver_username]) { + ws.send(JSON.stringify({ name: "reject", message: "对方当前不在线!!!" })) + return + } + if (LoginRooms[receiver_username].status) { + ws.send(JSON.stringify({ name: "reject", message: "对方正在通话中!!!" })) + return + } + //当用户已经在音视频通话了则需要告知发送方 + if (LoginRooms[username].status) { + ws.send(JSON.stringify({ name: "reject", message: "你正在通话中,请勿发送其他通话请求...." })) + return + } + LoginRooms[username].status = true + //对方在线 + if (LoginRooms[receiver_username]) { + LoginRooms[receiver_username].ws.send(Resp_data) + data.method = data.name + data.name = 'peer' + ws.send(JSON.stringify(data)) + return + } + } else if (data.name == 'group_audio' || data.name == 'group_video') { + if (LoginRooms[username].status || (group_rooms[data.room] && Object.keys(group_rooms[data.room]).length != 0)) { + ws.send(JSON.stringify({ name: "reject", message: "无法创建群音视频...." })) + return + } + /** + * 群视频逻辑处理 + * + */ + group_rooms[data.room] = {} + group_rooms[data.room][username] = "" + LoginRooms[username].status = true + for (const user of data.userList) { + if (user == data.sender_name) { + continue + } + //对方在线且并未通话 + if (LoginRooms[user] && !LoginRooms[user].status) { + group_rooms[data.room][user] = "" + LoginRooms[user].ws.send(Resp_data) + } + } + data.method = data.name + data.name = 'group_peer' + ws.send(JSON.stringify(data)) + return + } + //拒绝通话 + if (data.name == 'reject') { + LoginRooms[username].status = false + return + } //对方在线 if (LoginRooms[receiver_username]) { - LoginRooms[receiver_username].send(Resp_data) - + LoginRooms[receiver_username].ws.send(Resp_data) } }); ws.on('close', function () { diff --git a/server/container/bing/index.js b/server/container/bing/index.js index 604c797..4181dca 100644 --- a/server/container/bing/index.js +++ b/server/container/bing/index.js @@ -3,7 +3,7 @@ let { RespUserOrPassErr, RespParamErr, RespServerErr, RespUserExitErr, RespUpdat const { Query } = require('../../db/query'); const { getConversation } = require('../../utils/newBing'); const { v4: uuidv4 } = require('uuid'); -let rooms = {} +let bing_rooms = {} /** * 生成Conversation * 1.获取当前登录的用户名,并获取到前端传来的代理服务器地址 @@ -13,6 +13,9 @@ let rooms = {} */ //生成密钥对 async function generateConversation(req, res) { + if (os.platform() !== 'win32') { + return RespError(res, RespServerErr) + } //获取当前登录的用户名 let username = req.user.username const { proxy } = req.query @@ -62,7 +65,7 @@ async function getConversationInfo(req, res) { let sql = "update ai_conversation set count=0 where username=? and TIMESTAMPDIFF(hour, updated_at, NOW()) >= 6" await Query(sql, [username]) //获取到可聊天总数和已用次数 - sql = "select count(*) as total,SUM(count) as us_count,room from ai_conversation where username=?" + sql = "select count(*) as total,SUM(count) as us_count,room from ai_conversation where username=? GROUP BY room" let { err, results } = await Query(sql, [username]) // 查询数据失败 if (err) return RespError(res, RespServerErr) @@ -104,7 +107,7 @@ async function BingConnect(ws, req) { let url = req.url.split("?")[1]; let params = new URLSearchParams(url) let room = params.get("room") - rooms[room] = ws + bing_rooms[room] = ws //获取所有聊天记录 let sql = 'SELECT m.*,u.avatar FROM (SELECT sender_id, receiver_id, content, room, link_list,ai_message.created_at,invocation_id FROM ai_message WHERE `room` =? ORDER BY created_at ASC) AS m LEFT JOIN user as u ON u.`id`=m.`sender_id`' let { err, results } = await Query(sql, [room]) @@ -133,8 +136,8 @@ async function BingConnect(ws, req) { sql = `update ai_conversation set count=? where conversation_id=? and conversation_signature=?` await Query(sql, [message.numUserMessagesInConversation, message.conversation_id, message.conversation_signature]) if (message.numUserMessagesInConversation == 20) { - if (rooms[room]) { - rooms[room].send(JSON.stringify({ "name": "reset" })) + if (bing_rooms[room]) { + bing_rooms[room].send(JSON.stringify({ "name": "reset" })) } } return diff --git a/server/container/friend/index.js b/server/container/friend/index.js index 14ac1d9..96e6f88 100644 --- a/server/container/friend/index.js +++ b/server/container/friend/index.js @@ -1,7 +1,12 @@ module.exports = { List, AddFriend, - SearchUser + SearchUser, + getFriendInfo, + createFriendGroup, + updateFriendGroup, + updateFriendInfo, + getFriendGroupList }; let { RespParamErr, RespServerErr, RespExitFriendErr, RespUpdateErr, RespCreateErr } = require('../../model/error'); const { v4: uuidv4 } = require('uuid'); @@ -114,7 +119,6 @@ async function AddFriend(req, res) { let friendInfo = { username: username, - avatar: info.avatar, remark: username, group_id: results[0].id, user_id: id, @@ -131,7 +135,6 @@ async function AddFriend(req, res) { let usr2 = await Query(sql, [username]) let friendInfo2 = { username: user.username, - avatar: "", remark: user.username, group_id: usr2.results[0].id, user_id: user.id, @@ -158,7 +161,13 @@ async function AddFriend(req, res) { await Query(sql, { room: uuid, total: 1 }) //通知对方,让其好友列表进行更新 NotificationUser({ receiver_username: username, name: "friend" }) - return RespSuccess(res) + let options = { + room: uuid, + user_id: usr2.results[0].user_id, + name: username, + receiver_name: username + } + return RespData(res,options) } /** * 查询用户 @@ -203,6 +212,85 @@ async function SearchUser(req, res) { } RespData(res, searchList) } +/** + * 获取好友信息 + * 1.获取用户账号,昵称,备注,分组.个性签名,头像 + * 2.根据group_id和user_id查询friend表,获取user_id,username,remark和group_id + * 3.根据user表获取头像,个性签名,昵称 + */ +async function getFriendInfo(req, res) { + const { group_id, user_id } = req.query + let sql = 'SELECT user_id,room,user.username,user.signature,user.avatar,user.name,remark,group_id FROM friend,user WHERE group_id=? and user_id=? and user.id=?' + let { err, results } = await Query(sql, [group_id, user_id, user_id]) + let userInfo = { + user_id: "", + username: "", + avatar: "", + name: "", + remark: "", + group_id: "", + signature: "", + room: "", + } + if (results.length > 0) { + userInfo = results[0] + } + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + RespData(res, userInfo) +} +/** + * 添加好友分组 + */ +async function createFriendGroup(req, res) { + const friend_group = req.body + let sql = 'insert into friend_group set ?' + let { err, results } = await Query(sql, friend_group) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + if (results.affectedRows === 1) { + return RespSuccess(res) + } +} +/** + * 获取当前用户的分组列表 + */ +async function getFriendGroupList(req, res) { + let user_id = req.user.id + const sql = 'select * from friend_group where user_id=?' + let { err, results } = await Query(sql, [user_id]) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + RespData(res, results) +} +/** + * 重命名好友分组 + */ +async function updateFriendGroup(req, res) { + const { name, user_id, old_name } = req.body + let sql = 'update friend_group set name=? where user_id=? and name=?' + let { err, results } = await Query(sql, [name, user_id, old_name]) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + if (results.affectedRows === 1) { + return RespSuccess(res) + } + return RespError(res, RespUpdateErr) +} +/** + * 修改好友的信息 + */ +async function updateFriendInfo(req, res) { + const { old_group_id, user_id, new_group_id, remark } = req.body + let sql = 'update friend set group_id=?,remark=? where user_id=? and group_id=?' + let { err, results } = await Query(sql, [new_group_id, remark, user_id, old_group_id]) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + if (results.affectedRows === 1) { + return RespSuccess(res) + } + return RespError(res, RespUpdateErr) +} //查询好友信息 async function getFriendList(group_id) { const sql = 'select * from friend where group_id=?' diff --git a/server/container/group/index.js b/server/container/group/index.js index d1f7711..39ee7bd 100644 --- a/server/container/group/index.js +++ b/server/container/group/index.js @@ -1,35 +1,57 @@ module.exports = { List, + MembersList, CreateGroupChat, SearchGroupChat, - JoinGroupChat + JoinGroupChat, + GroupInfo, + RenameGroup, + invitedUsersToGroup, + DeleteUserFromGroup, + GetRTCUser, }; -let { RespParamErr, RespServerErr, RespExitFriendErr, RespUpdateErr, RespCreateErr, RespExitGroupErr } = require('../../model/error'); +let { RespParamErr, RespServerErr, RespExitFriendErr, RespUpdateErr, RespCreateErr, RespExitGroupErr, RespGroupInsertError, RespGroupDeletError } = require('../../model/error'); const { RespError, RespSuccess, RespData } = require('../../model/resp'); const { Query } = require('../../db/query'); const { v4: uuidv4 } = require('uuid'); +/** + * 获取当前用户加入的所有群聊 + * 1.获取当前用户id + * 2.根据group_members获取所有group_id,在根据left join获取group_chat对应的id下的群聊信息 + * 3.根据group_id,使用count(*)获取group_members的成员数量 + */ async function List(req, res) { //根据id获取所有分组下的所有好友 let id = req.user.id - let sql = 'select id,name,avatar from group_chat where creator_id=?' + let groupChatList = [] + let sql = 'SELECT gct.* from ((select group_id from group_members where user_id=?) as gmb LEFT JOIN group_chat as gct on gmb.group_id=gct.id)' let { err, results } = await Query(sql, [id]) - // 查询数据失败 if (err) return RespError(res, RespServerErr) - let groupChatList = [] - if (results.length != 0) { - for (const item of results) { - let groupChat = { name: item.name, members: [], id: item.id, avatar: item.avatar } - sql = 'select * from group_members where group_id=?' - let res = await Query(sql, [item.id]) - let members = res.results - for (const item2 of members) { - groupChat.members.push(item2) - } - groupChatList.push(groupChat) - } + groupChatList = results + for (const index in groupChatList) { + sql = 'select count(*) as members_len from group_members where group_id=?' + let resp = await Query(sql, [groupChatList[index].id]) + groupChatList[index].members_len = resp.results[0].members_len } return RespData(res, groupChatList) } +/** + * 获取群聊中所有群员 + * 1.获取group_id + * 2.根据group_members获取所有user_id,在根据user表获取username + */ +async function MembersList(req, res) { + let { group_id } = req.query + let sql = 'select username from group_members,user where group_id=? and user_id=user.id' + let { err, results } = await Query(sql, [group_id]) + if (err) return RespError(res, RespServerErr) + let userList = [] + for (const { username } of results) { + userList.push(username) + } + return RespData(res, userList) + +} //创建群聊 async function CreateGroupChat(req, res) { let fileName @@ -87,11 +109,20 @@ async function CreateGroupChat(req, res) { sql = 'insert into group_members set ?' await Query(sql, memberInfo) } - - return RespSuccess(res) + let options = { + room: uuid, + group_id: results.insertId + } + return RespData(res, options) } + return RespError(res, RespCreateErr) } +/** + * 查询群聊 + * 1.根据name查询group_chat获取相似的所有群聊 + * 2.根据user_id和id查询group_members判断当前用户是否加入群聊 + */ //查询群聊 async function SearchGroupChat(req, res) { const { name } = req.query @@ -102,15 +133,23 @@ async function SearchGroupChat(req, res) { let searchList = [] if (results.length != 0) { let { id } = req.user - sql = 'select id from group_members where group_id=?' + sql = 'select id,user_id from group_members where group_id=?' for (const item of results) { - let res = await Query(sql, [item.id]) + let status = false + let res = await Query(sql, [item.id, id]) let err2 = res.err, results2 = res.results - searchList.push({ name: item.name, number: results2.length, status: item.creator_id == id, group_id: item.id }) + for (const { user_id } of results2) { + if (user_id == id) { + status = true + break + } + } + searchList.push({ name: item.name, number: results2.length, status: status, group_id: item.id }) } } RespData(res, searchList) } + async function JoinGroupChat(req, res) { let group_id = req.query.group_id let { id, name } = req.user @@ -132,5 +171,152 @@ async function JoinGroupChat(req, res) { err = resp.err // 查询数据失败 if (err) return RespError(res, RespServerErr) + sql = 'select room from group_chat where id=?' + resp = await Query(sql, [group_id]) + let options = { + room: resp.results[0].room, + group_id: group_id + } + return RespData(res, options) +} +/** + * 群聊信息 + * 1.需要获取群介绍,群主,所有群成员(头像,群昵称,name,加入群聊时间,最后发言时间) + * 2.根据group_id查询group_chat表获取群主的id,房间room,群介绍,头像 + * 3. 根据group_id查询group_numbers表获取群成员的user_id,nickname,created_at,并查询user表获取相关的头像,name + * 4.使用left join 根据user_id和room查询message表获取用户的最后一次发消息时间 + */ +async function GroupInfo(req, res) { + let group_id = req.query.group_id + let info = {} + let sql = 'select * from group_chat where id=?' + let { err, results } = await Query(sql, [group_id]) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + let { id, creator_id, avatar, announcement, room, name, created_at } = results[0] + info = { + id, name, creator_id, avatar, announcement, room, created_at, members: [] + } + sql = "SELECT s.*,m.lastMessageTime FROM (SELECT user_id,user.avatar,user.name,nickname,group_members.created_at FROM group_members,user WHERE group_id=? and user_id=user.id) as s left JOIN (SELECT sender_id,Max(created_at) as lastMessageTime FROM message as msg WHERE msg.room=? GROUP BY sender_id) as m on m.sender_id=s.user_id" + let resp = await Query(sql, [group_id, room]) + err = resp.err, results = resp.results + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + for (const item of results) { + info.members.push({ ...item }) + } + return RespData(res, info) +} +/** + * 邀请好友进入群聊 + * 1. 获取邀请名单和group_id + * 2.根据group_id查询group_numbers表去筛选邀请名单,过滤掉已经存在群里的用户 + * 3. insert into group_members set ?插入数据 + */ +async function invitedUsersToGroup(req, res) { + let { invitationList, group_id } = req.body + let sql = "SELECT u.name,u.id,gms.nickname FROM (SELECT id,name FROM user as u WHERE FIND_IN_SET(id, ?)) as u LEFT JOIN group_members as gms on group_id=? and u.id=gms.user_id" + //获取邀请名单的用户信息,根据nickname为空来判断群是否包含该用户 + let { err, results } = await Query(sql, [invitationList.join(","), group_id]) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + let invitationInfoList = [] + for (const item of results) { + if (!item.nickname) { + invitationInfoList.push({ + group_id: group_id, + user_id: item.id, + nickname: item.name + }) + } + } + if (invitationInfoList.length == 0) { + return RespError(res, RespGroupInsertError) + } + //插入成员 + sql = 'insert into group_members set ?' + let resp = await Query(sql, invitationInfoList) + err = resp.err + // 查询数据失败 + if (err) return RespError(res, RespServerErr) return RespSuccess(res) +} +/** + * 重命名好友分组 + */ +async function RenameGroup(req, res) { + const { name, group_id, old_name } = req.body + console.log(name, group_id, old_name); + let sql = 'update group_chat set name=? where id=? and name=?' + let { err, results } = await Query(sql, [name, group_id, old_name]) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + if (results.affectedRows === 1) { + return RespSuccess(res) + } + return RespError(res, RespUpdateErr) +} +/** + * 退出群聊 + * 1.先判断是否为创建者,如果是创建者则会解散整个群聊 + * 2.从group_members删除当前用户 + * 3.删除当前用户在群聊中的所有聊天记录 + */ +async function DeleteUserFromGroup(req, res) { + let { group_id } = req.body + let user_id = req.user.id + let sql = "select creator_id,room from group_chat where id=?" + let { err, results } = await Query(sql, [group_id]) + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + if (results.length == 0) { + return RespError(res, RespGroupDeletError) + } + let room = results[0].room + if (results[0].creator_id == user_id) { + sql = 'DELETE FROM group_chat WHERE id=?' + let resp = await Query(sql, [group_id]) + err = resp.err, results = resp.results + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + if (results.affectedRows != 1) { + return RespError(res, RespGroupDeletError) + } + //删除相对于的所有聊天记录 + sql = 'DELETE FROM message WHERE type="group" and room=?' + await Query(sql, [room]) + } else { + sql = 'DELETE FROM group_members WHERE user_id=? and group_id=?' + let resp = await Query(sql, [user_id, group_id]) + err = resp.err, results = resp.results + // 查询数据失败 + if (err) return RespError(res, RespServerErr) + if (results.affectedRows !== 1) { + return RespError(res, RespGroupDeletError) + } + //删除相对于的所有聊天记录 + sql = 'DELETE FROM message WHERE type="group" and room=? and (sender_id = ? OR receiver_id= ?)' + await Query(sql, [room, user_id, user_id]) + } + return RespSuccess(res) +} +/** + * 获取音视频指定房间的所有用户 + * 1获取group_rooms所有用户 + * 2.查询group_members和user获取头像 + * + */ +async function GetRTCUser(req, res) { + let { group_id, room } = req.query + let userList = {} + for (const username in group_rooms[room]) { + let sql = "SELECT avatar FROM group_members,user WHERE group_id=? and group_members.user_id=user.id and username=?" + let resp = await Query(sql, [group_id, username]) + // 查询数据失败 + if (resp.err) continue + if (resp.results.length != 0) { + userList[username] = { avatar: resp.results[0].avatar, accept: false, name: username } + } + } + return RespData(res, userList) } \ No newline at end of file diff --git a/server/container/message/index.js b/server/container/message/index.js index fb4182e..df4f9af 100644 --- a/server/container/message/index.js +++ b/server/container/message/index.js @@ -1,6 +1,6 @@ module.exports = { List, - SingleConnect + ChatConnect }; const path = require('path'); @@ -18,12 +18,17 @@ let rooms = {} * 3.如何根据对方id和房间号获取未读消息的数量 * 4.根据房间号和创建时间获取最后一次消息内容 * 5.根据房间号获取群聊历史记录 + * + * 群聊历史记录获取 + * 需要获取的字段 avatar,lastMessage(最后一条消息),name,room,type,unreadCount(当前用户未读的消息数量),updated_at,group_id(分组id) + * 2.根据group_chat获取头像,name,room,group_id + * */ async function List(req, res) { let data = [] let id = req.user.id //获取所有好友聊天列表 - let sql = `SELECT user_id,avatar,remark as name,f.room,msg_sta.updated_at from friend as f,(SELECT id FROM friend_group WHERE user_id=? LIMIT 1) as fp,message_statistics as msg_sta WHERE fp.id=f.group_id and f.room=msg_sta.room GROUP BY msg_sta.updated_at DESC;` + let sql = `SELECT user_id,remark as name,username as receiver_username,f.room,msg_sta.updated_at from friend as f,(SELECT id FROM friend_group WHERE user_id=?) as fp,message_statistics as msg_sta WHERE fp.id=f.group_id and f.room=msg_sta.room ORDER BY msg_sta.updated_at DESC;` let { err, results } = await Query(sql, [id]) for (const index in results) { let item = results[index] @@ -34,6 +39,9 @@ async function List(req, res) { r = await Query(sql, [item.room, id]) results[index].lastMessage = r.results[0].lastMessage results[index].type = r.results[0].type + sql = `SELECT avatar from user where id=?` + r = await Query(sql, [item.user_id]) + results[index].avatar = r.results[0].avatar } // 处理 一开始查询结果可能为空 results的值undefined导致报错 if (results) { @@ -41,13 +49,26 @@ async function List(req, res) { } // 查询数据失败 if (err) return RespError(res, RespServerErr) - //获取所有群聊聊天列表 - sql = 'SELECT avatar,name,gc.room,msg_sta.updated_at FROM group_chat as gc,(SELECT * FROM group_members WHERE user_id=?) as gm,message_statistics as msg_sta WHERE gc.id=gm.group_id and gc.room=msg_sta.room GROUP BY msg_sta.updated_at DESC;' + //获取所有群聊聊天列表 获取头像,姓名,房间号和最后一次更新时间 + sql = 'SELECT gc.id as group_id,avatar,name,gc.room,msg_sta.updated_at FROM group_chat as gc,(SELECT * FROM group_members WHERE user_id=?) as gm,message_statistics as msg_sta WHERE gc.id=gm.group_id and gc.room=msg_sta.room ORDER BY msg_sta.updated_at DESC;' let resObj = await Query(sql, [id]) // 查询数据失败 if (resObj.err) return RespError(res, RespServerErr) let results2 = resObj.results - data.push(...results2) + //获取最后一条信息 + for (const index in results2) { + let item = results2[index] + // sql = `SELECT count(*) as unreadCount FROM message WHERE room=? and receiver_id=? and status=0` + // let r = await Query(sql, [item.room, id]) + results2[index].unreadCount = 0 + sql = `SELECT content as lastMessage,media_type as type FROM message WHERE room=? ORDER BY created_at DESC LIMIT 1` + r = await Query(sql, [item.room, id]) + results2[index].lastMessage = r.results[0]?.lastMessage + results2[index].type = r.results[0]?.type + } + if (results2.length > 0) { + data.push(...results2) + } data.sort((a, b) => { let t1 = new Date(a.updated_at).getTime() let t2 = new Date(b.updated_at).getTime() @@ -64,7 +85,8 @@ async function List(req, res) { } /** * 建立聊天 - * 1.获取房间号和对方id + * 需要获取信息:发送人ID,接收人ID,聊天内容,房间号,头像,内容的类型,文件大小,创建时间,(群聊中的昵称) + * 1.获取房间号和对方id(群聊ID) * 2. 根据房间号获取所有聊天记录 * 3.将当前用户的所有未读变成已读 * 4.监听message @@ -73,35 +95,46 @@ async function List(req, res) { * 7. image(图片),video(视频),file(文件)先获取文件名,在判断存储的目录是否存在,不存在则创建,然后将其进行保存,并发送相关存储路径给前端 * 8.插入数据到message表中 * 9.并修改当前房间的最早一次的聊天时间 + * */ -async function SingleConnect(ws, req) { +async function ChatConnect(ws, req) { //获取name let url = req.url.split("?")[1]; let params = new URLSearchParams(url) let room = params.get("room") let id = params.get("id") + let type = params.get("type") if (!rooms[room]) { rooms[room] = {} } rooms[room][id] = ws - let sql = 'SELECT m.*,u.avatar FROM (SELECT sender_id, receiver_id, content, room, media_type,message.created_at FROM message WHERE `room` =? AND `type` = ? ORDER BY created_at ASC) AS m LEFT JOIN user as u ON u.`id`=m.`sender_id`' - let { err, results } = await Query(sql, [room, "private"]) + let sql + let resp + if (type == 'group') { + sql = 'SELECT gm.nickname,m.*,u.avatar FROM (SELECT sender_id, receiver_id, content, room, media_type,message.created_at FROM message WHERE `room` =? AND `type` = ?) AS m LEFT JOIN user as u ON u.`id`=m.`sender_id` LEFT JOIN group_members as gm on gm.group_id=? and user_id=u.`id` ORDER BY created_at ASC' + resp = await Query(sql, [room, type, id]) + } else { + sql = 'SELECT m.*,u.avatar FROM (SELECT sender_id, receiver_id, content, room, media_type,message.created_at FROM message WHERE `room` =? AND `type` = ? ORDER BY created_at ASC) AS m LEFT JOIN user as u ON u.`id`=m.`sender_id`' + resp = await Query(sql, [room, type]) + } + let results = resp.results let histroyMsg = results.map((item) => { return { "sender_id": item.sender_id, "receiver_id": item.receiver_id, + 'nickname': item.nickname, "content": item.content, "room": item.room, "avatar": item.avatar, "type": item.media_type, - file_size: formatBytes(item.file_size), + 'file_size': formatBytes(item.file_size), "created_at": new Date(item.created_at).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }) } }) ws.send(JSON.stringify(histroyMsg)) //将所有未读消息变成已读 sql = 'update message set status=1 where receiver_id=? and room=? and type=? and status=0' - await Query(sql, [id, room, "private"]) + await Query(sql, [id, room, type]) let fileInfo = null; let receivedSize = 0; let writeStream = null; @@ -113,7 +146,7 @@ async function SingleConnect(ws, req) { let msg = { sender_id: message.sender_id, receiver_id: message.receiver_id, - type: 'private', + type: type, media_type: message.type, room: room, file_size: 0, @@ -196,10 +229,4 @@ async function SingleConnect(ws, req) { NotificationUser({ receiver_id: message.receiver_id, name: "list" }) } }) -} - -async function getAvatar(id) { - const sql = `select avatar from user where id=?` - let { results } = await Query(sql, [id]) - return results[0].avatar } \ No newline at end of file diff --git a/server/container/rtc/index.js b/server/container/rtc/index.js index ee19e52..6d3b4b2 100644 --- a/server/container/rtc/index.js +++ b/server/container/rtc/index.js @@ -1,5 +1,6 @@ module.exports = { - SingleRTCConnect + SingleRTCConnect, + groupRTCConnect }; const path = require('path'); @@ -7,8 +8,9 @@ let { RespParamErr, RespServerErr, RespExitFriendErr, RespUpdateErr, RespCreateE const { RespError, RespSuccess, RespData } = require('../../model/resp'); const { Query } = require('../../db/query'); const fs = require('fs'); -const { generateRandomString, notExitCreate } = require('../../utils/utils') -let rooms = {} +const { generateRandomString, notExitCreate } = require('../../utils/utils'); +const { group } = require('console'); + /** * 建立音视频聊天 * 1. 获取房间号和当前用户名 @@ -27,13 +29,11 @@ async function SingleRTCConnect(ws, req) { rooms[room] = {} } rooms[room][username] = ws - let flag = false ws.on('message', async (Resp_data) => { let message = JSON.parse(Resp_data) let msg let receiverWs switch (message.name) { - //创建房间 case 'createRoom': //发送邀请 @@ -42,22 +42,25 @@ async function SingleRTCConnect(ws, req) { sender: username } BroadcastSocket(username, room, msg) - ListenWs = rooms[room][username + "_listen"] - ListenWs.send(JSON.stringify({ name: "status", flag: true })) + break; + //新用户加入 + case "new_peer": + msg = { + name: "new_peer", + sender: username, + } + BroadcastSocket(username, room, msg) break; //被邀请方接收 - case 'peer': + case 'offer': //发送offer msg = { name: "offer", sender: username, - data: message.data + data: message.data, } receiverWs = rooms[room][message.receiver] receiverWs.send(JSON.stringify(msg)) - ListenWs = rooms[room][username + "_listen"] - ListenWs.send(JSON.stringify({ name: "status", flag: true })) - flag = true break; //接收answer case 'answer': @@ -69,7 +72,6 @@ async function SingleRTCConnect(ws, req) { } receiverWs = rooms[room][message.receiver] receiverWs.send(JSON.stringify(msg)) - flag = true break case 'ice_candidate': //接收answer @@ -88,22 +90,123 @@ async function SingleRTCConnect(ws, req) { name: "reject", sender: username } - flag = false BroadcastSocket(username, room, msg) - ListenWs = rooms[room][username + "_listen"] - ListenWs.send(JSON.stringify({ name: "status", flag: false })) + NotificationUser({ name: "reject", receiver_username: username, message: "" }) break; } }) ws.on('close', () => { rooms[room][username] = "" }) +} +/** + * 建立音视频聊天 + * 1. 获取房间号和当前用户名 + * 2. createRoom 邀请人会发送创建房间指令,广播给当前房间的所有人,如果被邀请者在线的话,会接受到请求,自动打开语音/视频通话界面 + * 3. peer 被邀请人收到邀请后,前端点击同意后,会携带自己的音视频流数据发送peer指令给后端,后端在发送offer指令(携带了相对于的数据)给邀请人 + * 4. answer 邀请人接受到数据后将数据进行处理后发送answer指令给被邀请人并携带自己的音视频流 + * 5. ice_candidate 双方建立音视频通道后发送ice_candidate数据 + */ +async function groupRTCConnect(ws, req) { + //获取name + let url = req.url.split("?")[1]; + let params = new URLSearchParams(url) + let room = params.get("room") + let username = params.get("username") + if (!group_rooms[room]) { + rooms[room] = {} + } + group_rooms[room][username] = ws + ws.on('message', async (Resp_data) => { + let message = JSON.parse(Resp_data) + let msg + let receiverWs + switch (message.name) { + //创建房间 + case 'createRoom': + //发送邀请 + msg = { + name: message.mode, + sender: username + } + BroadcastGroupSocket(username, room, msg) + break; + //新用户加入 + case "new_peer": + msg = { + name: "new_peer", + username: username, + } + BroadcastGroupSocket(username, room, msg) + break; + //回应给被邀请人 + case "peer": + msg = { + name: "peer", + username: username, + } + if (group_rooms[room][message.receiver]) { + let ws = group_rooms[room][message.receiver] + ws.send(JSON.stringify(msg)) + } + break; + //被邀请方接收 + case 'offer': + //发送offer + msg = { + name: "offer", + sender: username, + data: message.data, + username + } + receiverWs = group_rooms[room][message.receiver] + receiverWs.send(JSON.stringify(msg)) + break; + //接收answer + case 'answer': + //接收answer + msg = { + name: "answer", + sender: username, + data: message.data, + username + } + receiverWs = group_rooms[room][message.receiver] + receiverWs.send(JSON.stringify(msg)) + break + case 'ice_candidate': + //接收answer + msg = { + name: "ice_candidate", + sender: username, + data: message.data, + username + } + receiverWs = group_rooms[room][message.receiver] + receiverWs.send(JSON.stringify(msg)) + break + //被邀请方拒绝/挂断 + case 'reject': + //发送offer + msg = { + name: "reject", + sender: username, + username + } + BroadcastGroupSocket(username, room, msg) + NotificationUser({ name: "reject", receiver_username: username, message: "" }) + break; + } + }) + ws.on('close', () => { + delete group_rooms[room][username] + }) } //发送给其他人 function BroadcastSocket(username, room, data) { for (const key in rooms[room]) { - if (key == username || key == username + '_listen') { + if (key == username) { continue } if (rooms[room][key]) { @@ -111,4 +214,16 @@ function BroadcastSocket(username, room, data) { ws.send(JSON.stringify(data)) } } +} +//发送群聊中其他人 +function BroadcastGroupSocket(username, room, data) { + for (const key in group_rooms[room]) { + if (key == username) { + continue + } + if (group_rooms[room][key]) { + let ws = group_rooms[room][key] + ws.send(JSON.stringify(data)) + } + } } \ No newline at end of file diff --git a/server/db/db.js b/server/db/db.js index 7269b83..1a6cb43 100644 --- a/server/db/db.js +++ b/server/db/db.js @@ -32,9 +32,7 @@ const db = mysql.createPool({ }) //创建user表 function initUserTable() { - let sql = `CREATE TABLE - IF - NOT EXISTS USER ( + let sql = `CREATE TABLE IF NOT EXISTS user ( id INT ( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR ( 255 ) NOT NULL UNIQUE, password VARCHAR ( 255 ) NOT NULL, @@ -62,7 +60,6 @@ function initFirendTable() { id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, user_id INT(11) NOT NULL, username VARCHAR(50) NOT NULL, - avatar VARCHAR(255), online_status ENUM('online', 'offline') DEFAULT 'offline', remark VARCHAR(50), group_id INT(11), diff --git a/server/global.js b/server/global.js index 758468a..b9edf1d 100644 --- a/server/global.js +++ b/server/global.js @@ -1,3 +1,12 @@ +/* + * @Description: + * @Version: 1.0 + * @Autor: solid + * @Date: 2023-04-14 17:16:36 + * @LastEditors: solid + * @LastEditTime: 2023-04-24 10:05:39 + */ +const os = require('os'); function initGlobal() { /** * 初始化数据库 @@ -23,10 +32,17 @@ function initGlobal() { */ const { NotificationUser } = require("./utils/notification.js") global.NotificationUser = NotificationUser + /** + * 音视频房间 + */ + global.rooms={} + global.group_rooms={} /** * 初始化new bing中的可执行文件 */ - ExitDir() + if(os.platform() === 'win32'){ + ExitDir() + } } function ExitDir() { const path = require('path'); diff --git a/server/model/error.js b/server/model/error.js index 01d43b7..f90f28d 100644 --- a/server/model/error.js +++ b/server/model/error.js @@ -12,6 +12,8 @@ exports.RespCreateErr = 4007 exports.RespExitGroupErr = 4008 exports.RespBingNotLogin = 4009 exports.RespBingErrorProxy = 4010 +exports.RespGroupInsertError = 4011 +exports.RespGroupDeletError = 4012 exports.RespServerErr = 5000 exports.RespMap = { @@ -24,5 +26,9 @@ exports.RespMap = { 4006: "好友已存在", 4007: "创建失败", 4008: "你已加入群聊", + 4009: "请在edge浏览器中登录new bing", + 4010: "无法找到代理服务器,请设置正确的代理服务器", + 4011: "你邀请的好友都已经加入群聊", + 4012: "退出群聊失败", 5000: "服务有误", } diff --git a/server/utils/newBing.js b/server/utils/newBing.js index bcde40f..3d01582 100644 --- a/server/utils/newBing.js +++ b/server/utils/newBing.js @@ -30,6 +30,7 @@ let HEADERS = { }; async function getConversation(proxy) { + const cookieJar = new CookieJar(); let cookie = new browserCookie() await cookie.GetBrowserCookie() diff --git a/server/utils/notification.js b/server/utils/notification.js index 2bb7986..958d2a6 100644 --- a/server/utils/notification.js +++ b/server/utils/notification.js @@ -1,3 +1,11 @@ +/* + * @Description: + * @Version: 1.0 + * @Autor: solid + * @Date: 2023-04-14 17:16:36 + * @LastEditors: solid + * @LastEditTime: 2023-04-23 17:06:29 + */ //通知对方 async function NotificationUser(data) { @@ -9,7 +17,7 @@ async function NotificationUser(data) { receiver_username = results[0].username } if (LoginRooms[receiver_username]) { - LoginRooms[receiver_username].send(JSON.stringify(data)) + LoginRooms[receiver_username].ws.send(JSON.stringify(data)) } } module.exports = { diff --git a/server/yarn.lock b/server/yarn.lock index 6275a31..d5ba58d 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -49,11 +49,6 @@ resolved "https://registry.npmmirror.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== -"@calebboyd/semaphore@^1.3.1": - version "1.3.1" - resolved "https://registry.npmmirror.com/@calebboyd/semaphore/-/semaphore-1.3.1.tgz#4faa403d12f80e5d5c1d6e0d7916d048b6fa79cb" - integrity sha512-17z9me12RgAEcMhIgR7f+BiXKbzwF9p1VraI69OxrUUSWGuSMOyOTEHQNVtMKuVrkEDVD0/Av5uiGZPBMYZljw== - "@jridgewell/gen-mapping@^0.3.0": version "0.3.2" resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -107,57 +102,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.npmmirror.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "18.15.10" - resolved "https://registry.npmmirror.com/@types/node/-/node-18.15.10.tgz#4ee2171c3306a185d1208dad5f44dae3dee4cfe3" - integrity sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ== - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -183,23 +127,11 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -207,23 +139,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -app-builder@^7.0.4: - version "7.0.4" - resolved "https://registry.npmmirror.com/app-builder/-/app-builder-7.0.4.tgz#7ec0d7033e9a661a0dcd51ba8807d5c1bf7f01f6" - integrity sha512-QCmWZnoNN2uItlRV+gj4J6OONaFcJPyFoIuP1RkoILcuq19MlkynYB+wtH8uGv/umyynMWHI1HxnH1jGa1hNKQ== - append-field@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== -archive-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" - integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== - dependencies: - file-type "^4.2.0" - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -266,11 +186,6 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - base64-js@^1.3.1: version "1.5.1" resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -303,14 +218,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^1.0.0: - version "1.2.3" - resolved "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" - integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - bl@^4.0.3: version "4.1.0" resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -338,14 +245,6 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - braces@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -353,40 +252,17 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.2.1, buffer@^5.5.0: +buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -411,37 +287,6 @@ bytes@3.1.2: resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - call-bind@^1.0.0: version "1.0.2" resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -455,25 +300,6 @@ caseless@~0.12.0: resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -caw@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" - integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== - dependencies: - get-proxy "^2.0.0" - isurl "^1.0.0-alpha5" - tunnel-agent "^0.6.0" - url-to-options "^1.0.1" - -chalk@^2.0.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -495,18 +321,6 @@ chownr@^1.1.1: resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-spinners@^2.0.0: - version "2.7.0" - resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - cli-table@^0.3.1: version "0.3.11" resolved "https://registry.npmmirror.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" @@ -523,32 +337,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clone-response@1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== - dependencies: - mimic-response "^1.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -556,11 +344,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -578,16 +361,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.8.1: - version "2.20.3" - resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - concat-stream@^1.5.2: version "1.6.2" resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" @@ -598,15 +371,7 @@ concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -content-disposition@0.5.4, content-disposition@^0.5.2: +content-disposition@0.5.4: version "0.5.4" resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -667,18 +432,6 @@ debug@4, debug@^4.1.1: dependencies: ms "2.1.2" -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -686,76 +439,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" - integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== - dependencies: - file-type "^5.2.0" - is-stream "^1.1.0" - tar-stream "^1.5.2" - -decompress-tarbz2@^4.0.0: - version "4.1.1" - resolved "https://registry.npmmirror.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" - integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== - dependencies: - decompress-tar "^4.1.0" - file-type "^6.1.0" - is-stream "^1.1.0" - seek-bzip "^1.0.5" - unbzip2-stream "^1.0.9" - -decompress-targz@^4.0.0: - version "4.1.1" - resolved "https://registry.npmmirror.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" - integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== - dependencies: - decompress-tar "^4.1.1" - file-type "^5.2.0" - is-stream "^1.1.0" - -decompress-unzip@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" - integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== - dependencies: - file-type "^3.8.0" - get-stream "^2.2.0" - pify "^2.3.0" - yauzl "^2.4.2" - -decompress@^4.2.1: - version "4.2.1" - resolved "https://registry.npmmirror.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" - integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== - dependencies: - decompress-tar "^4.0.0" - decompress-tarbz2 "^4.0.0" - decompress-targz "^4.0.0" - decompress-unzip "^4.0.1" - graceful-fs "^4.1.10" - make-dir "^1.0.0" - pify "^2.3.0" - strip-dirs "^2.0.0" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -802,28 +490,6 @@ dockerode@^3.3.4: docker-modem "^3.0.0" tar-fs "~2.0.1" -download@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/download/-/download-8.0.0.tgz#afc0b309730811731aae9f5371c9f46be73e51b1" - integrity sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA== - dependencies: - archive-type "^4.0.0" - content-disposition "^0.5.2" - decompress "^4.2.1" - ext-name "^5.0.0" - file-type "^11.1.0" - filenamify "^3.0.0" - get-stream "^4.1.0" - got "^8.3.1" - make-dir "^2.1.0" - p-event "^2.1.0" - pify "^4.0.1" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -854,21 +520,13 @@ encodeurl@~1.0.2: resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enhanced-resolve@^5.9.3: - version "5.12.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -879,11 +537,6 @@ escape-html@~1.0.3: resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - etag@~1.8.1: version "1.8.1" resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -952,21 +605,6 @@ express@^4.18.2: utils-merge "1.0.1" vary "~1.1.2" -ext-list@^2.0.0: - version "2.2.2" - resolved "https://registry.npmmirror.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" - integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== - dependencies: - mime-db "^1.28.0" - -ext-name@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" - integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== - dependencies: - ext-list "^2.0.0" - sort-keys-length "^1.0.0" - extend@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -987,7 +625,7 @@ fast-deep-equal@^3.1.1: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.9: +fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -1010,57 +648,11 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -file-type@^11.1.0: - version "11.1.0" - resolved "https://registry.npmmirror.com/file-type/-/file-type-11.1.0.tgz#93780f3fed98b599755d846b99a1617a2ad063b8" - integrity sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g== - -file-type@^3.8.0: - version "3.9.0" - resolved "https://registry.npmmirror.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== - -file-type@^4.2.0: - version "4.4.0" - resolved "https://registry.npmmirror.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" - integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== - -file-type@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" - integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== - -file-type@^6.1.0: - version "6.2.0" - resolved "https://registry.npmmirror.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" - integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== - file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== - -filenamify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/filenamify/-/filenamify-3.0.0.tgz#9603eb688179f8c5d40d828626dcbb92c3a4672c" - integrity sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1105,7 +697,7 @@ fresh@0.5.2: resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -from2@^2.1.1, from2@^2.3.0: +from2@^2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== @@ -1128,11 +720,6 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -1152,40 +739,6 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.3" -get-proxy@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" - integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== - dependencies: - npm-conf "^1.1.0" - -get-stream@3.0.0, get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1205,19 +758,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globby@^11.0.2, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -1229,47 +770,7 @@ globby@^11.0.2, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -got@^11.8.2: - version "11.8.6" - resolved "https://registry.npmmirror.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -got@^8.3.1: - version "8.3.2" - resolved "https://registry.npmmirror.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" - integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" - -graceful-fs@^4.1.10, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1287,33 +788,16 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.npmmirror.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.npmmirror.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - has@^1.0.3: version "1.0.3" resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1321,16 +805,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -1351,14 +825,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -1384,32 +850,16 @@ ignore@^5.2.0: resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.4, ini@~1.3.0: +ini@~1.3.0: version "1.3.8" resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -into-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - into-stream@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" @@ -1454,36 +904,11 @@ is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-natural-number@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" - integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-object@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" - integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1499,14 +924,6 @@ isstream@~0.1.2: resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.npmmirror.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -1517,16 +934,6 @@ jsesc@^2.5.1: resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1588,47 +995,11 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== - dependencies: - json-buffer "3.0.0" - -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -lowercase-keys@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1636,21 +1007,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - media-typer@0.3.0: version "0.3.0" resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -1666,11 +1022,6 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -meriyah@^4.2.1, meriyah@^4.3.3: - version "4.3.5" - resolved "https://registry.npmmirror.com/meriyah/-/meriyah-4.3.5.tgz#4421091aa5618bb02617e86e2366fe27876be8ad" - integrity sha512-oCOuzPtD4udAYnvxIi4Rp99nEHJWHtAFHEFmS27hQuDNjxTQ39Z/hQ9uWW+ZgJjCmpi0nRo7wwciT7rtQE31Bw== - methods@~1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -1684,7 +1035,7 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, mime-db@^1.28.0: +mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -1701,28 +1052,11 @@ mime@1.6.0: resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -1740,11 +1074,6 @@ mkdirp@^0.5.4: dependencies: minimist "^1.2.6" -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1791,7 +1120,7 @@ mysql@^2.18.1: safe-buffer "5.1.2" sqlstring "2.3.1" -nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: +nan@^2.15.0, nan@^2.16.0: version "2.17.0" resolved "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== @@ -1806,26 +1135,6 @@ negotiator@0.6.3: resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -nexe@^4.0.0-rc.2: - version "4.0.0-rc.2" - resolved "https://registry.npmmirror.com/nexe/-/nexe-4.0.0-rc.2.tgz#5270e39bde0be2d04182b0aae88fd3ca563b2900" - integrity sha512-icz+gIlYZ4zCrLo8zVChnbwAMB6ffqQKiF4vy/eehWbVkMlHTSNqlIwNmRlAq6dNmJCaKNEoff7nhunsXRSWeA== - dependencies: - "@calebboyd/semaphore" "^1.3.1" - app-builder "^7.0.4" - caw "^2.0.1" - chalk "^2.4.2" - download "^8.0.0" - globby "^11.0.2" - got "^11.8.2" - meriyah "^4.3.3" - minimist "^1.2.6" - mkdirp "^1.0.4" - multistream "^4.1.0" - ora "^3.4.0" - resolve-dependencies "^6.0.8" - rimraf "^3.0.2" - node-abi@^3.3.0: version "3.33.0" resolved "https://registry.npmmirror.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f" @@ -1840,41 +1149,12 @@ node-fetch@^2.6.6: dependencies: whatwg-url "^5.0.0" -node-pty@^0.10.1: - version "0.10.1" - resolved "https://registry.npmmirror.com/node-pty/-/node-pty-0.10.1.tgz#cd05d03a2710315ec40221232ec04186f6ac2c6d" - integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== - dependencies: - nan "^2.14.0" - -normalize-url@2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-conf@^1.1.0: - version "1.1.3" - resolved "https://registry.npmmirror.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" - integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== - dependencies: - config-chain "^1.1.11" - pify "^3.0.0" - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -1891,81 +1171,23 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -p-cancelable@^0.4.0: - version "0.4.1" - resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-event@^2.1.0: - version "2.3.1" - resolved "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" - integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== - dependencies: - p-timeout "^2.0.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== - p-is-promise@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== - dependencies: - p-finally "^1.0.0" - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -1981,11 +1203,6 @@ path-type@^4.0.0: resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -1996,33 +1213,6 @@ picomatch@^2.3.1: resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - pkg-fetch@3.4.2: version "3.4.2" resolved "https://registry.npmmirror.com/pkg-fetch/-/pkg-fetch-3.4.2.tgz#6f68ebc54842b73f8c0808959a9df3739dcb28b7" @@ -2075,11 +1265,6 @@ prebuild-install@7.1.1, prebuild-install@^7.1.0: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -2090,11 +1275,6 @@ progress@^2.0.3: resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -2133,15 +1313,6 @@ qs@~6.5.2: resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -2152,11 +1323,6 @@ queue-microtask@^1.2.2: resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -2195,7 +1361,7 @@ readable-stream@2.3.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.0.0, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.0.0, readable-stream@^2.1.4, readable-stream@^2.2.2: version "2.3.8" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -2253,20 +1419,6 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.npmmirror.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-dependencies@^6.0.8: - version "6.0.8" - resolved "https://registry.npmmirror.com/resolve-dependencies/-/resolve-dependencies-6.0.8.tgz#ac75ec000581adf3aa553ee08c81eff5e0c2c6bc" - integrity sha512-THJ6KVvsC7HWwv3c5UfWqufUecTYlUrH4a56/SWTwt11sa15OAg5hkbNQqynHZu05v/bOkIQDXXsBGxDYXfasw== - dependencies: - enhanced-resolve "^5.9.3" - fast-glob "^3.2.11" - meriyah "^4.2.1" - resolve@^1.22.0: version "1.22.1" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" @@ -2276,40 +1428,11 @@ resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -2322,7 +1445,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -2332,18 +1455,6 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, s resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -seek-bzip@^1.0.5: - version "1.0.6" - resolved "https://registry.npmmirror.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" - integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== - dependencies: - commander "^2.8.1" - -semver@^5.6.0: - version "5.7.1" - resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^7.3.5, semver@^7.3.8: version "7.3.8" resolved "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" @@ -2394,11 +1505,6 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -2418,27 +1524,6 @@ slash@^3.0.0: resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -sort-keys-length@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" - integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== - dependencies: - sort-keys "^1.0.0" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - split-ca@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" @@ -2492,11 +1577,6 @@ streamsearch@^1.1.0: resolved "https://registry.npmmirror.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -2520,13 +1600,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2534,32 +1607,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-dirs@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" - integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== - dependencies: - is-natural-number "^4.0.1" - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2572,11 +1624,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - tar-fs@^2.0.0, tar-fs@^2.1.1: version "2.1.1" resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -2597,19 +1644,6 @@ tar-fs@~2.0.1: pump "^3.0.0" tar-stream "^2.0.0" -tar-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - tar-stream@^2.0.0, tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -2621,21 +1655,6 @@ tar-stream@^2.0.0, tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -through@^2.3.8: - version "2.3.8" - resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -2676,13 +1695,6 @@ tr46@~0.0.3: resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== - dependencies: - escape-string-regexp "^1.0.2" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -2708,14 +1720,6 @@ typedarray@^0.0.6: resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -unbzip2-stream@^1.0.9: - version "1.4.3" - resolved "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - universalify@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -2738,13 +1742,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - url-parse@^1.5.3: version "1.5.10" resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -2753,11 +1750,6 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -2792,13 +1784,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -2868,11 +1853,3 @@ yargs@^16.2.0: string-width "^4.2.0" y18n "^5.0.5" yargs-parser "^20.2.2" - -yauzl@^2.4.2: - version "2.10.0" - resolved "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" diff --git a/ui/src/api/friend.js b/ui/src/api/friend.js index 52022a2..5530139 100644 --- a/ui/src/api/friend.js +++ b/ui/src/api/friend.js @@ -23,4 +23,40 @@ export function getSearch(params) { method: 'get', params }) +} +//获取好友信息 +export function getFriend_info(params) { + return request({ + url: '/friend/info', + method: 'get', + params + }) +} +export function getFriendGroup_list(params) { + return request({ + url: '/friend/group_list', + method: 'get', + params + }) +} +export function postCreate(data) { + return request({ + url: '/friend/create', + method: 'post', + data + }) +} +export function postUpdate(data) { + return request({ + url: '/friend/update', + method: 'post', + data + }) +} +export function postUpdate_friend(data) { + return request({ + url: '/friend/update_friend', + method: 'post', + data + }) } \ No newline at end of file diff --git a/ui/src/api/group.js b/ui/src/api/group.js index 072759f..a9d01a0 100644 --- a/ui/src/api/group.js +++ b/ui/src/api/group.js @@ -1,6 +1,6 @@ import request from '@/utils/request' -//好友列表 +//群聊列表 export function getGroup_list(params) { return request({ url: '/group/list', @@ -8,7 +8,14 @@ export function getGroup_list(params) { params }) } - +//群员列表 +export function getGroup_Members_list(params) { + return request({ + url: '/group/members_list', + method: 'get', + params + }) +} //添加分组 export function postCreate_group(data) { return request({ @@ -33,4 +40,44 @@ export function getJoin(params) { method: 'get', params }) +} +//获取群聊详情 +export function getGroupInfo(params) { + return request({ + url: '/group/info', + method: 'get', + params + }) +} +//邀请群聊 +export function postRenameGroup(data) { + return request({ + url: '/group/rename', + method: 'post', + data, + }) +} +//邀请群聊 +export function postGroupInvitation(data) { + return request({ + url: '/group/invitation', + method: 'post', + data, + }) +} +//退出群聊 +export function postExitGroupChat(data) { + return request({ + url: '/group/exitGroupChat', + method: 'post', + data, + }) +} +//获取音视频所有用户 +export function GetRTCUser(params) { + return request({ + url: '/group/getRTCUser', + method: 'get', + params + }) } \ No newline at end of file diff --git a/ui/src/assets/black.png b/ui/src/assets/black.png new file mode 100644 index 0000000..65830df Binary files /dev/null and b/ui/src/assets/black.png differ diff --git a/ui/src/assets/full.png b/ui/src/assets/full.png new file mode 100644 index 0000000..6e4156a Binary files /dev/null and b/ui/src/assets/full.png differ diff --git a/ui/src/background.js b/ui/src/background.js index 4f9ae73..fdb7de1 100644 --- a/ui/src/background.js +++ b/ui/src/background.js @@ -4,13 +4,12 @@ * @Autor: solid * @Date: 2022-08-12 14:21:50 * @LastEditors: solid - * @LastEditTime: 2022-10-10 20:35:01 + * @LastEditTime: 2023-04-25 10:54:31 */ 'use strict' import { app, protocol, BrowserWindow, ipcMain } from 'electron' import { createProtocol } from 'vue-cli-plugin-electron-builder/lib' const isDevelopment = process.env.NODE_ENV !== 'production' - // Scheme must be registered before the app is ready protocol.registerSchemesAsPrivileged([ { scheme: 'app', privileges: { secure: true, standard: true } } @@ -26,8 +25,11 @@ async function createWindow() { title: "翎", icon: "./assets/logo.png", width: 400, - useContentSize: true, height: 320, + minWidth: 400, + minHeight: 320, + useContentSize: true, + autoHideMenuBar: true, webPreferences: { nodeIntegration: true, enableRemoteModule: true, @@ -37,9 +39,9 @@ async function createWindow() { }) win.center() if (isDevelopment) { - win.webContents.openDevTools() + // win.webContents.openDevTools() } else { - win.setMenu(null); + // win.setMenu(null); createProtocol('app') } win.loadURL(winURL) @@ -50,16 +52,30 @@ ipcMain.on('resize-window', (event, { width, height }) => { const window = BrowserWindow.getFocusedWindow(); if (window) { - window.setSize(width, height); + window.setSize(width, height, true); + window.setMinimumSize(width, height); window.center(); } }); ipcMain.on('open-window', (event, options) => { + let title + if (options.method == 'video') { + title = "视频" + } else if (options.method == 'audio') { + title = "语音" + } else if (options.method == 'group_audio') { + title = "群语音" + } else if (options.method == 'group_video') { + title = "群视频" + } let new_win = new BrowserWindow({ - title: options.method == 'video' ? "视频" : "语音" + "通话", + title: title, width: 600, useContentSize: true, + autoHideMenuBar: true, height: 400, + minWidth: 600, + minHeight: 400, icon: "./assets/logo.png", webPreferences: { nodeIntegration: true, @@ -67,16 +83,19 @@ ipcMain.on('open-window', (event, options) => { contextIsolation: false }, }) - // new_win.webContents.openDevTools() - // new_win.setMenu(null); - if(isDevelopment){ - new_win.webContents.openDevTools() + if (!isDevelopment) { + new_win.setMenu(null); } - let { room, receiver, beInviter } = options + // new_win.webContents.openDevTools() + let { room, sender, receiver, beInviter } = options if (options.method == 'audio') { - new_win.loadURL(winURL + `audio?room=${room}&receiver=${receiver}&beInviter=${beInviter}`); - } else { - new_win.loadURL(winURL + `video?room=${room}&receiver=${receiver}&beInviter=${beInviter}`); + new_win.loadURL(winURL + `audio?room=${room}&sender=${sender}&receiver=${receiver}&beInviter=${beInviter}`); + } else if (options.method == 'video') { + new_win.loadURL(winURL + `video?room=${room}&sender=${sender}&receiver=${receiver}&beInviter=${beInviter}`); + } else if (options.method == 'group_audio') { + new_win.loadURL(winURL + `group_audio?room=${room}&sender=${sender}&group_id=${options.group_id}&beInviter=${beInviter}`); + } else if (options.method == 'group_video') { + new_win.loadURL(winURL + `group_video?room=${room}&sender=${sender}&group_id=${options.group_id}&beInviter=${beInviter}`); } }); diff --git a/ui/src/components/HomeMenu.vue b/ui/src/components/HomeMenu.vue new file mode 100644 index 0000000..3c0a73f --- /dev/null +++ b/ui/src/components/HomeMenu.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/ui/src/components/settings.vue b/ui/src/components/settings.vue index 6849384..2aa6a4a 100644 --- a/ui/src/components/settings.vue +++ b/ui/src/components/settings.vue @@ -16,10 +16,10 @@
- +
- 取消 + 取消 保存配置
diff --git a/ui/src/router/index.js b/ui/src/router/index.js index 5f798b0..d629e21 100644 --- a/ui/src/router/index.js +++ b/ui/src/router/index.js @@ -32,6 +32,15 @@ const routes = [ path: '/video', name: 'video', component: () => import(/* webpackChunkName: "about" */ '@/views/audioVideo/video') + }, { + path: '/group_audio', + name: 'group_audio', + component: () => import(/* webpackChunkName: "about" */ '@/views/audioVideo/group_audio') + }, + { + path: '/group_video', + name: 'group_video', + component: () => import(/* webpackChunkName: "about" */ '@/views/audioVideo/group_video') } ] diff --git a/ui/src/utils/emoji.js b/ui/src/utils/emoji.js index 1135f09..14f932c 100644 --- a/ui/src/utils/emoji.js +++ b/ui/src/utils/emoji.js @@ -1 +1 @@ -export const EmojiList = ['😀','😁','😂','🤣','😃','😄','😅','😆','😉','😊','😋','😎','😍','😘','🥰','😗','😙','🥲','😚','🙂','🤗','🤩','🤔','🤨','😐','😑','😶','😶‍🌫️','🙄','😏','😣','😥','😮','🤐','😯','😪','😫','🥱','😴','😌','😛','😜','😝','🤤','😒','😓','😔','😕','🙃','🤑','😲','☹️','🙁','😖','😞','😟','😤','😢','😭','😦','😧','😨','😩','🤯','😬','😮‍💨','😰','😱','🥵','🥶','😳','🤪','😵','😵‍💫','🥴','😠','😡','🤬','😷','🤒','🤕','🤢','🤮','😇','🥳','🥸','🥺','🤠','🤡','🤥','🤫','🤭','🧐','🤓','😈','👹','👺','💀','☠️','👻','👽','👾','🤖','💩','😺','😸','😹','😻','😼'] +export const EmojiList = ['😀','😁','😂','🤣','😃','😄','😅','😆','😉','😊','😋','😎','😍','😘','🥰','😗','😙','🥲','😚','🙂','🤗','🤩','🤔','🤨','😐','😑','😶','🙄','😏','😣','😥','😮','🤐','😯','😪','😫','🥱','😴','😌','😛','😜','😝','🤤','😒','😓','😔','😕','🙃','🤑','😲','☹️','🙁','😖','😞','😟','😤','😢','😭','😦','😧','😨','😩','🤯','😬','😮‍💨','😰','😱','🥵','🥶','😳','🤪','😵','😵‍💫','🥴','😠','😡','🤬','😷','🤒','🤕','🤢','🤮','😇','🥳','🥸','🥺','🤠','🤡','🤥','🤫','🤭','🧐','🤓','😈','👹','👺','💀','☠️','👻','👽','👾','🤖','💩','😺','😸','😹','😻','😼'] diff --git a/ui/src/views/Index/components/List/chat.vue b/ui/src/views/Index/components/List/chat.vue index 2a3542c..6c6b974 100644 --- a/ui/src/views/Index/components/List/chat.vue +++ b/ui/src/views/Index/components/List/chat.vue @@ -1,10 +1,10 @@ diff --git a/ui/src/views/Index/components/AIRoom.vue b/ui/src/views/Index/components/Room/AIRoom.vue similarity index 98% rename from ui/src/views/Index/components/AIRoom.vue rename to ui/src/views/Index/components/Room/AIRoom.vue index 7f8bbcb..b9e2fe0 100644 --- a/ui/src/views/Index/components/AIRoom.vue +++ b/ui/src/views/Index/components/Room/AIRoom.vue @@ -3,12 +3,12 @@
- +
- - - + + +
@@ -43,7 +43,7 @@
-