diff --git a/app.js b/app.js
index 18a08c0..eff163b 100644
--- a/app.js
+++ b/app.js
@@ -17,12 +17,16 @@ app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
+// 日志
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
+// cookie
app.use(cookieParser());
+// 设置静态资源
app.use(express.static(path.join(__dirname, 'public')));
+//绑定路由
app.use('/', index);
app.use('/users', users);
app.use('/message', message);
diff --git a/bin/www b/bin/www
index 9cf83a1..d4d34ad 100755
--- a/bin/www
+++ b/bin/www
@@ -3,7 +3,6 @@
/**
* Module dependencies.
*/
-
var app = require('../app');
var debug = require('debug')('kefu:server');
var http = require('http');
@@ -12,7 +11,6 @@ var ioSvc = require('../io/io');
/**
* Get port from environment and store in Express.
*/
-
var port = normalizePort(process.env.PORT || '9010');
app.set('port', port);
@@ -28,7 +26,9 @@ ioSvc.ioServer(io);
* Listen on provided port, on all network interfaces.
*/
-server.listen(port);
+server.listen(port,()=>{
+ console.log("server is running,detail see http://localhost:%s",port);
+});
server.on('error', onError);
server.on('listening', onListening);
diff --git a/io/io.js b/io/io.js
index 234290b..41dbbaa 100644
--- a/io/io.js
+++ b/io/io.js
@@ -40,10 +40,10 @@ function ioServer(io) {
//用户与Socket进行绑定
socket.on('login', function (msg) {
var uid = msg.uid;
- console.log(uid+'登录成功');
+ console.log(uid + '登录成功');
//通知用户上线
- if(uid != AppConfig.KEFUUUID){
+ if(uid != AppConfig.KEFUUUID){ // 通知给管理员
redis.get(AppConfig.KEFUUUID,function (err,sid) {
if(err){
console.error(err);
diff --git a/model/users.js b/model/users.js
index bbd45e3..0b90283 100644
--- a/model/users.js
+++ b/model/users.js
@@ -1,47 +1,69 @@
-var mongoose = require('../mongoose').mongoose;
+var mongoose = require('../utils/mongoose').mongoose;
var crypto = require('crypto');
var Schema = mongoose.Schema;
+// 管理员模型
var UsersSchema = new Schema({
- username : { type:String },
- password : { type:String },
- time : { type:Date, default:Date.now }
+ username: {type: String,index: true},
+ password: {type: String},
+ nickname: {type: String},
+ description: {type: String,default:'欢迎咨询'},
+ time: {type: Date, default: Date.now}
});
var UsersModel = mongoose.model("users", UsersSchema);
-function login(username,password,callback) {
+function login(username, password, callback) {
var md5 = crypto.createHash('md5');
password = md5.update(password).digest('hex');
- var condition = {'username' : username,'password':password};
+ var condition = {'username': username, 'password': password};
- UsersModel.findOne(condition, function(err, res){
+ UsersModel.findOne(condition, function (err, res) {
var _err = null;
if (err) {
_err = err;
}
- if(!res){
+ if (!res) {
_err = '用户名密码不正确';
}
- return callback(_err,res);
+ return callback(_err, res);
})
}
-function reset_psw(username,psw_old,psw_new,callback) {
+function reset_psw(username, psw_old, psw_new, callback) {
psw_old = crypto.createHash('md5').update(psw_old).digest('hex');
- UsersModel.find({username:username,password:psw_old},function (err,info) {
+ UsersModel.find({username: username, password: psw_old}, function (err, info) {
if (err) {
- return callback(err,null);
+ return callback(err, null);
}
- if(!info || info.length == 0){
- return callback('原密码不正确',null);
+ if (!info || info.length == 0) {
+ return callback('原密码不正确', null);
}
psw_new = crypto.createHash('md5').update(psw_new).digest('hex');
- UsersModel.findOneAndUpdate({username:username,password:psw_old}, {password:psw_new}, callback);
+ UsersModel.findOneAndUpdate({username: username, password: psw_old}, {password: psw_new}, callback);
});
}
+function findByUserName(username){
+ return new Promise((resolve ,reject)=>{
+ UsersModel.findOne({username},(err,res)=>{
+ if(err) reject(err)
+ else if(!res) resolve(null)
+ else{
+ resolve(res);
+ }
+ });
+ })
+}
+function updateInfo(username, nickname, description) {
+ return new Promise((resovle, reject) => {
+ UsersModel.findOneAndUpdate({username}, {nickname, description}, resovle);
+ })
+}
+
+exports.updateInfo = updateInfo;
+exports.findByUserName = findByUserName;
exports.login = login;
exports.reset_psw = reset_psw;
\ No newline at end of file
diff --git a/package.json b/package.json
index 888cfdd..d5ab96c 100644
--- a/package.json
+++ b/package.json
@@ -11,12 +11,14 @@
"debug": "~2.6.3",
"ejs": "~2.5.6",
"express": "~4.15.2",
+ "express-session": "^1.16.2",
+ "lib-qqwry": "^1.3.1",
+ "mongoose": "^4.12.5",
"morgan": "~1.8.1",
+ "qiniu": "^7.1.1",
+ "redis": "^2.8.0",
"serve-favicon": "~2.4.2",
- "socket.io":"~2.0.4",
- "socket.io-client":"^2.0.4",
- "redis":"^2.8.0",
- "mongoose":"^4.12.5",
- "qiniu":"^7.1.1"
+ "socket.io": "~2.0.4",
+ "socket.io-client": "^2.0.4"
}
}
diff --git a/public/js/server/index.js b/public/js/server/index.js
index feade8c..ac5ddb6 100644
--- a/public/js/server/index.js
+++ b/public/js/server/index.js
@@ -6,10 +6,11 @@ layui.use(['layer', 'form', 'jquery'], function () {
var currentUUID = '';
var uuid = '';
- var socket = io.connect('http://'+document.domain+':9010',{
- "transports":['websocket', 'polling']
+ // 创建socket连接
+ var socket = io.connect('http://' + document.domain + ':9010', {
+ "transports": ['websocket', 'polling'],
+ autoConnect: false
});
-
var uuids = [];
var online_num = 0;
@@ -20,16 +21,16 @@ layui.use(['layer', 'form', 'jquery'], function () {
var height = document.body.clientHeight - 292;
$(".message-container").css("height", height);
- window.onresize = function(){
+ window.onresize = function () {
var height = document.body.clientHeight - 292;
$(".message-container").css("height", height);
};
- document.getElementById("msg-send-textarea").onkeydown=function(e){
- if(e.keyCode == 13 && e.ctrlKey){
+ document.getElementById("msg-send-textarea").onkeydown = function (e) {
+ if (e.keyCode == 13 && e.ctrlKey) {
// 这里实现换行
document.getElementById("msg-send-textarea").value += "\n";
- }else if(e.keyCode == 13){
+ } else if (e.keyCode == 13) {
// 避免回车键换行
e.preventDefault();
// 下面写你的发送消息的代码
@@ -41,21 +42,23 @@ layui.use(['layer', 'form', 'jquery'], function () {
//聊天窗口自动滚到底
function scrollToBottom() {
var div = document.getElementById('message-container');
- div.scrollTop = div.scrollHeight;
+ div.scrollTop = div.scrollHeight;
}
+ // 添加新的节点
function insert_section(uid) {
- var html = '';
+ var html = '';
$(".message-container").append(html);
get_message(uid);
}
- function insert_agent_html(msg){
+ // 添加管理员消息
+ function insert_agent_html(msg) {
var time = dateFormat();
- if(msg.time){
- time = dateFormat("yyyy-MM-dd hh:mm:ss",new Date(msg.time));
+ if (msg.time) {
+ time = dateFormat("yyyy-MM-dd hh:mm:ss", new Date(msg.time));
}
- if(!msg.chat_type){
+ if (!msg.chat_type) {
msg.chat_type = 'text';
}
var html = '
\n' +
@@ -64,105 +67,110 @@ layui.use(['layer', 'form', 'jquery'], function () {
' 我 \n' +
'
\n';
- if(msg.chat_type == "text"){
- html += ' \n' +
- '
' + msg.content + '
\n' +
- '
\n' ;
- }else if(msg.chat_type == "image"){
+ if (msg.chat_type == "text") {
+ html += ' \n' +
+ '
' + msg.content + '
\n' +
+ '
\n';
+ } else if (msg.chat_type == "image") {
html += ' ';
}
- html += ' ';
- $('#section-'+msg.uid).append(html);
+ html += ' ';
+ $('#section-' + msg.uid).append(html);
}
-
- function insert_client_html(msg){
+ // 添加客户端消息
+ function insert_client_html(msg) {
var time = dateFormat();
- if(msg.time){
- time = dateFormat("yyyy-MM-dd hh:mm:ss",new Date(msg.time));
+ if (msg.time) {
+ time = dateFormat("yyyy-MM-dd hh:mm:ss", new Date(msg.time));
}
- if(!msg.chat_type){
+ if (!msg.chat_type) {
msg.chat_type = 'text';
}
var html = '\n' +
'
\n' +
' ' + time + ' \n' +
' 客户 \n' +
- '
\n' ;
- if(msg.chat_type == "text"){
+ '
\n';
+ if (msg.chat_type == "text") {
html += ' \n' +
'
' + msg.content + '
\n' +
- '
\n' ;
- }else if(msg.chat_type == "image"){
+ ' \n';
+ } else if (msg.chat_type == "image") {
html += ' ';
}
html += ' ';
- $('#section-'+msg.uid).append(html);
+ $('#section-' + msg.uid).append(html);
}
- function insert_user_html(id,name) {
+
+ function insert_user_html(id, name) {
var html = '\n' +
'
\n' +
'
\n' +
'
\n' +
'
' + name + '-' + id + '
\n' +
- '
'+
+ '
' +
'
';
$('.chat-user').append(html);
}
- function msg_sender_status(status){
- if(status){
+ //设置消息状态
+ function msg_sender_status(status) {
+ if (status) {
$(".btnMsgSend").removeClass("layui-btn-disabled");
$("#msg-send-textarea").removeAttr("disabled");
$(".empty-status").hide();
- }else{
+ } else {
$(".btnMsgSend").addClass("layui-btn-disabled");
- $("#msg-send-textarea").attr("disabled","disabled");
+ $("#msg-send-textarea").attr("disabled", "disabled");
$(".empty-status").show();
}
}
+ //消息提醒
function msg_notification(msg) {
- $(".chat-user #"+msg.uid+" .msg-tips").show();
- if(window.Notification && Notification.permission !== "denied") {
- Notification.requestPermission(function(status) {
- var n = new Notification('您有新的消息', { body: msg.content });
+ $(".chat-user #" + msg.uid + " .msg-tips").show();
+ if (window.Notification && Notification.permission !== "denied") {
+ Notification.requestPermission(function (status) {
+ var n = new Notification('您有新的消息', {body: msg.content});
});
}
}
+ //设置 在线状态(人数)
function update_online_status() {
var num = uuids.length;
- if(online_num > num){
+ if (online_num > num) {
num = online_num;
}
- $(".friend-head-right").html( online_num + ' / ' + num + ' 人' );
+ $(".friend-head-right").html(online_num + ' / ' + num + ' 人');
}
//发送消息
function msg_send() {
var msg = $("#msg-send-textarea").val();
- if(msg){
+ if (msg) {
var msg_sender = {
- "type":'private',
- "uid":currentUUID,
- "content":msg,
- "from_uid":uuid,
- "chat_type":'text'
+ "type": 'private',
+ "uid": currentUUID,
+ "content": msg,
+ "from_uid": uuid,
+ "chat_type": 'text'
};
socket.emit('message', msg_sender);
+ //将发送的消息添加到页面中
insert_agent_html(msg_sender);
scrollToBottom();
$("#msg-send-textarea").val('');
@@ -171,27 +179,27 @@ layui.use(['layer', 'form', 'jquery'], function () {
//获取在线用户
function get_users() {
- $.get('/users',function (data) {
- if(data.code == 200){
+ $.get('/users', function (data) {
+ if (data.code == 200) {
$('.chat-user').html('');
var data = data.data;
data.forEach(function (user) {
- insert_user_html(user.uid,user.name + '#'+ (uuids.length + 1));
+ insert_user_html(user.uid, user.name + '#' + (uuids.length + 1));
//创建聊天section
insert_section(user.uid);
uuids.push(user.uid);
});
- if(data.length > 0 && !currentUUID){
+ if (data.length > 0 && !currentUUID) {
currentUUID = data[0].uid;
}
- $(".user-info").css("background","#ffffff");
- $("#"+currentUUID).css("background","#f2f3f5");
+ $(".user-info").css("background", "#ffffff");
+ $("#" + currentUUID).css("background", "#f2f3f5");
$(".user-section").hide();
msg_sender_status(true);
- $("#section-"+currentUUID).show();
+ $("#section-" + currentUUID).show();
update_online_status();
}
});
@@ -199,13 +207,13 @@ layui.use(['layer', 'form', 'jquery'], function () {
//获取最新的五条数据
function get_message(uid) {
- $.get('/message?uid='+uid,function (data) {
- if(data.code == 200){
+ $.get('/message?uid=' + uid, function (data) {
+ if (data.code == 200) {
data.data.reverse().forEach(function (msg) {
- if(msg.from_uid == uid){
+ if (msg.from_uid == uid) {
msg.uid = msg.from_uid;
insert_client_html(msg);
- }else{
+ } else {
msg.uid = msg.to_uid;
insert_agent_html(msg);
}
@@ -216,79 +224,14 @@ layui.use(['layer', 'form', 'jquery'], function () {
});
}
- $(".btnMsgSend").click(function(){
+ //发送消息
+ $(".btnMsgSend").click(function () {
msg_send();
});
- $(".picture-upload").click(function () {
- var uploader = Qiniu.uploader({
- runtimes: 'html5,flash,html4', // 上传模式,依次退化
- browse_button: 'pickfiles', // 上传选择的点选按钮,必需
- uptoken_url: '/uptoken', // Ajax请求uptoken的Url,强烈建议设置(服务端提供)
- get_new_uptoken: false, // 设置上传文件的时候是否每次都重新获取新的uptoken
- domain: 'http://kefuimg.chinameyer.com/', // bucket域名,下载资源时用到,必需
- container: 'btn-uploader', // 上传区域DOM ID,默认是browser_button的父元素
- max_file_size: '10mb', // 最大文件体积限制
- flash_swf_url: 'path/of/plupload/Moxie.swf', //引入flash,相对路径
- max_retries: 3, // 上传失败最大重试次数
- dragdrop: false, // 开启可拖曳上传
- drop_element: 'btn-uploader', // 拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传
- chunk_size: '4mb', // 分块上传时,每块的体积
- auto_start: true, // 选择文件后自动上传,若关闭需要自己绑定事件触发上传
- unique_names: true,
- filters : {
- max_file_size : '10mb',
- prevent_duplicates: true,
- // Specify what files to browse for
- mime_types: [
- {title : "Image files", extensions : "jpg,gif,png,bmp"}, // 限定jpg,gif,png后缀上传
- ]
- },
- init: {
- 'FilesAdded': function(up, files) {
- plupload.each(files, function(file) {
- // 文件添加进队列后,处理相关的事情
- });
- },
- 'BeforeUpload': function(up, file) {
- // 每个文件上传前,处理相关的事情
- },
- 'UploadProgress': function(up, file) {
- // 每个文件上传时,处理相关的事情
- },
- 'FileUploaded': function(up, file, info) {
- // 查看简单反馈
- var domain = up.getOption('domain');
- var res = JSON.parse(info);
- var sourceLink = domain +"/"+ res.key;
-
- var msg_sender = {
- "type":'private',
- "uid":currentUUID,
- "content":'图片消息',
- "from_uid":uuid,
- "chat_type":'image',
- "image":sourceLink
- };
- socket.emit('message', msg_sender);
- insert_agent_html(msg_sender);
- scrollToBottom();
- },
- 'Error': function(up, err, errTip) {
- //上传出错时,处理相关的事情
- $.toast("上传失败");
- },
- 'UploadComplete': function() {
- //队列文件处理完毕后,处理相关的事情
- }
- }
- });
-
- });
-
$(".emoji-list li").click(function () {
var content = $("#msg-send-textarea").val();
- $("#msg-send-textarea").val(content + " " +$(this).html()+ " " );
+ $("#msg-send-textarea").val(content + " " + $(this).html() + " ");
$(".emoji-list").toggle();
});
@@ -299,76 +242,104 @@ layui.use(['layer', 'form', 'jquery'], function () {
//连接服务器
socket.on('connect', function () {
console.log('连接成功...');
- uuid = 'chat-kefu-admin';
+ uuid = 'chat-admin-' + data.username;
var ip = $("#keleyivisitorip").html();
var msg = {
- "uid" : uuid,
- "ip" : ip
+ "uid": uuid,
+ "ip": ip
};
socket.emit('login', msg);
});
//后端推送来消息时
- socket.on('message', function(msg){
+ socket.on('message', function (msg) {
insert_client_html(msg);
scrollToBottom();
msg_notification(msg);
});
//后端推送来消息时
- socket.on('update-users', function(msg){
- if(msg.type == 'offline'){
+ socket.on('update-users', function (msg) {
+ if (msg.type == 'offline') {
//arrayRemove(uuids,msg.uid);
- $(".chat-user #"+msg.uid+" .user-avatar img").attr("src","/images/server/mine_fill.png");
+ $(".chat-user #" + msg.uid + " .user-avatar img").attr("src", "/images/server/mine_fill.png");
$("#section-" + msg.uid).hide();
//$(".chat-user").find("#"+msg.uid).remove();
msg_sender_status(false);
- }else if(msg.type == 'online'){
- if(!currentUUID){
+ } else if (msg.type == 'online') {
+ if (!currentUUID) {
currentUUID = msg.uid;
}
- if(currentUUID == uuid){
+ if (currentUUID == uuid) {
return false;
}
var index = uuids.indexOf(msg.uid);
- if( index == -1){
+ if (index == -1) {
uuids.push(msg.uid);
- insert_user_html(msg.uid,msg.name + '#'+ (uuids.length + 1));
+ insert_user_html(msg.uid, msg.name + '#' + (uuids.length + 1));
//创建聊天section
insert_section(msg.uid);
- }else{
- if($(".chat-user").find("#"+msg.uid).length == 0){
- insert_user_html(msg.uid,msg.name + '#'+ (uuids.length + 1));
+ } else {
+ if ($(".chat-user").find("#" + msg.uid).length == 0) {
+ insert_user_html(msg.uid, msg.name + '#' + (uuids.length + 1));
//创建聊天section
insert_section(msg.uid);
}
}
- $(".chat-user #"+msg.uid+" .user-avatar img").attr("src","/images/server/mine_fill_blue.png");
+ $(".chat-user #" + msg.uid + " .user-avatar img").attr("src", "/images/server/mine_fill_blue.png");
}
update_online_status();
});
//更新用户在线数
- socket.on('update_online_count', function(msg){
+ socket.on('update_online_count', function (msg) {
online_num = (msg.online_count - 1) >= 0 ? (msg.online_count - 1) : 0;
update_online_status();
});
//切换用户
- $(document).on('click','.user-info',function(){
+ $(document).on('click', '.user-info', function () {
var uid = $(this).attr("id");
currentUUID = uid;
- $(".user-info").css("background","#ffffff");
- $("#"+uid).css("background","#f2f3f5");
+ $(".user-info").css("background", "#ffffff");
+ $("#" + uid).css("background", "#f2f3f5");
$(".user-section").hide();
- $("#section-"+uid).show();
+ $("#section-" + uid).show();
msg_sender_status(true);
- $(".chat-user #"+uid+" .msg-tips").hide();
+ $(".chat-user #" + uid + " .msg-tips").hide();
});
- init();
- get_users();
+ const showLoginView = () => {
+ layer.prompt({
+ formType: 0,
+ title: '请先输入工号进行登录',
+ btnAlign: 'c',
+ btn: [' 登录 '],
+ closeBtn: 0,
+ shade :0.7,
+ value: ''
+ }, function (username, index, elem) {
+ $.post('/admin/login', {username}, (res) => {
+ if (res.code != 200) {
+ layer.msg(res.message);
+ return;
+ }
+ layer.msg('登录成功');
+ layer.closeAll();
+ console.log(res);
+ // location.reload();
+ }, 'json').fail(() => {
+ layer.msg('登录异常请重试')
+ })
+ });
+ }
+ if (!data.username) {
+ showLoginView();
+ } else {
+ init();
+ get_users();
+ }
});
\ No newline at end of file
diff --git a/routes/index.js b/routes/index.js
index 72ebb54..46d9775 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -2,37 +2,100 @@ var express = require('express');
var router = express.Router();
var AppConfig = require('../config');
var qiniu = require('qiniu');
+var msgModel = require('../model/message');
+var userModel = require('./../model/users');
-router.get('/', function(req, res, next) {
- res.render('./server/index');
-});
+const getViewAdmin = (req) => {
-router.get('/admin', function(req, res, next) {
- res.render('./server/index');
-});
+ let data = {
+ username: null
+ }
+ if (req.cookies && req.cookies.username) {
+ data.username = req.cookies.username
+ }
+ return data;
+};
+const adminIndexHandler = (req, res, next) => {
+ let data = getViewAdmin(req)
+ res.render('./server/index', data);
+}
+router.get('/', adminIndexHandler);
+router.get('/admin', adminIndexHandler);
-router.get('/client', function(req, res, next) {
+router.get('/client', function (req, res, next) {
res.render('./client/index');
});
-router.get('/admin/users', function(req, res, next) {
+router.get('/admin/users', function (req, res, next) {
res.render('./server/users');
});
-router.get('/admin/setup', function(req, res, next) {
- res.render('./server/setup');
+router.get('/admin/setup', function (req, res, next) {
+ let data = getViewAdmin(req)
+ res.render('./server/setup', data);
});
-router.get('/uptoken', function(req, res, next) {
+router.post('/admin/update', async (req, res, next) => {
+ // userModel.updateInfo()
+ let data = req.body;
+ let cookie = req.cookies;
+ if (!cookie.username) {
+ res.send({code: 403, message: '工号格式不正确'});
+ return;
+ }
+ if (!data.nickname) {
+ res.send({code: 500, message: '昵称不能为空'});
+ return;
+ }
+ try {
+ await userModel.findByUserName(cookie.username);
+ await userModel.updateInfo(cookie.username, data.nickname, data.description)
+ res.send({code: 200});
+ } catch (e) {
+ res.send({code: 500, message: e.toString()});
+ }
+});
+router.post('/admin/login', async function (req, res, next) {
+ console.log('/admin/login');
+ let data = req.body;
+ if (!data.username) {
+ res.send({code: 201, message: '工号格式不正确'})
+ return;
+ }
+ try {
+ let user = await userModel.findByUserName(data.username);
+ if (user) {
+ let maxAge = 60 * 1000 * 60 * 24 * 30,httpOnly = true;
+ res.cookie('username', user.username, {httpOnly,httpOnly}) // 该处是设置 cookie 与 httpOnly
+ res.cookie('token', user._id, {httpOnly,httpOnly}) // 该处是设置 cookie 与 httpOnly
+ // req.cookies.set('username', user.username);
+ // req.cookies.set('token', user._id);
+ res.send({
+ code: 200, user: {
+ token: user._id,
+ username: user.username
+ }
+ });
+ } else {
+ res.send({code: 403, message: '工号不存在或者格式不正确'})
+ }
+ } catch (e) {
+ console.log('err', e);
+ res.send({code: 500, message: e.toString()});
+ }
+});
+
+// 七牛上传
+router.get('/uptoken', function (req, res, next) {
var mac = new qiniu.auth.digest.Mac(AppConfig.QINIU.accessKey, AppConfig.QINIU.secretKey);
var options = {
scope: 'kefu',
expires: 7200,
- mimeLimit:"image/*"
+ mimeLimit: "image/*"
};
var putPolicy = new qiniu.rs.PutPolicy(options);
- var uploadToken=putPolicy.uploadToken(mac);
- res.send({"uptoken":uploadToken});
+ var uploadToken = putPolicy.uploadToken(mac);
+ res.send({"uptoken": uploadToken});
});
module.exports = router;
diff --git a/test.js b/test.js
new file mode 100644
index 0000000..621f066
--- /dev/null
+++ b/test.js
@@ -0,0 +1,8 @@
+var libqqwry = require('lib-qqwry');
+var qqwry = libqqwry() //初始化IP库解析器
+qqwry.speed(); //启用急速模式;
+
+var ipInfo = qqwry.searchIP("202.103.102.10"); //查询IP信息
+console.log(ipInfo)
+ipInfo = qqwry.searchIP("127.0.0.1"); //查询IP信息
+console.log(ipInfo)
\ No newline at end of file
diff --git a/utils/common.js b/utils/common.js
index 2678b40..8912b12 100644
--- a/utils/common.js
+++ b/utils/common.js
@@ -1,4 +1,7 @@
-var http=require('http');
+var http = require('http');
+var libqqwry = require('lib-qqwry');
+var qqwry = libqqwry() //初始化IP库解析器
+qqwry.speed(); //启用急速模式;
function getClientIp(req) {
return req.headers['x-forwarded-for'] ||
@@ -7,23 +10,21 @@ function getClientIp(req) {
req.connection.socket.remoteAddress;
};
-function getIpLocation(ip,callback) {
- http.get('http://ip.taobao.com/service/getIpInfo.php?ip='+ip,function(req,res){
- var html='';
- req.on('data',function(data){
- html+=data;
- });
- req.on('end',function(){
- console.info(html);
- var json = JSON.parse(html);
- if(json.code == 0){
- return callback(null,json.data.region + json.data.city);
- }else{
- return callback(json.data,null);
+function getIpLocation(ip, callback) {
+ return setTimeout(() => {
+ try {
+ let data = qqwry.searchIP(ip)
+ if (!data) {
+ callback(new Error('get ip exception'), ip);
+ } else {
+ let area = data.Area.trim().toLowerCase().replace('cz88.net', '');
+ callback(false, data.Country + ' ' + area);
}
+ } catch (e) {
+ callback(e, ip);
- });
- });
+ }
+ }, 10);
}
exports.getClientIp = getClientIp;
diff --git a/views/client/index.ejs b/views/client/index.ejs
index 598581a..ef55fc6 100644
--- a/views/client/index.ejs
+++ b/views/client/index.ejs
@@ -20,7 +20,7 @@
@@ -63,7 +63,6 @@
-
diff --git a/views/error.ejs b/views/error.ejs
new file mode 100644
index 0000000..f63440b
--- /dev/null
+++ b/views/error.ejs
@@ -0,0 +1,12 @@
+
+
+
+
+
+
Document
+
+
+
Error
+
+
\ No newline at end of file
diff --git a/views/server/header.ejs b/views/server/header.ejs
index 33b7021..73254c3 100644
--- a/views/server/header.ejs
+++ b/views/server/header.ejs
@@ -1,67 +1,72 @@
-
-
-
客服系统
-
-
+
+
-
-
+
\ No newline at end of file
diff --git a/views/server/index.ejs b/views/server/index.ejs
index f4fcc7e..006d60d 100644
--- a/views/server/index.ejs
+++ b/views/server/index.ejs
@@ -4,7 +4,9 @@
0人
- 我的对话
+ 我的对话
+
+
@@ -45,10 +47,6 @@
-
-
-
-
diff --git a/views/server/setup.ejs b/views/server/setup.ejs
index 70a2f24..963d7d5 100644
--- a/views/server/setup.ejs
+++ b/views/server/setup.ejs
@@ -1,20 +1,55 @@
<% include header.ejs %>
-
- 敬请期待
+
-
+
+ $(".admin-setup").addClass("layui-this");
+ $('.form-update-info').on('submit', function () {
+ let frm = $(this);
+ layer.load(1);
+ $.post(frm.attr('action'), frm.serializeArray(), (res) => {
+ layer.closeAll()
+ if (res.code != 200) {
+ layer.alert(res.message);
+ return;
+ }
+ layer.alert('更新数据成功~');
+ }, 'json').fail(() => {
+ layer.closeAll()
+ layer.alert('更新数据异常请重试');
+ });
+ return false;
+ })
+ });
+
<% include footer.ejs %>
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..3f2547b
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,1347 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+accepts@~1.3.3, accepts@~1.3.4:
+ version "1.3.7"
+ resolved "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha1-UxvHJlF6OytB+FACHGzBXqq1B80=
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+address@>=0.0.1:
+ version "1.1.2"
+ resolved "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
+ integrity sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+ integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
+
+agentkeepalive@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-3.3.0.tgz#6d5de5829afd3be2712201a39275fd11c651857c"
+ integrity sha1-bV3lgpr9O+JxIgGjknX9EcZRhXw=
+ dependencies:
+ humanize-ms "^1.2.1"
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1566431369422&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
+ dependencies:
+ color-convert "^1.9.0"
+
+any-promise@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+arraybuffer.slice@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
+ integrity sha1-O7xCdd1YTMGxCAm4nU6LY6aednU=
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=
+
+async@2.6.0:
+ version "2.6.0"
+ resolved "https://registry.npm.taobao.org/async/download/async-2.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync%2Fdownload%2Fasync-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+ integrity sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=
+ dependencies:
+ lodash "^4.14.0"
+
+axios@^0.18.0:
+ version "0.18.1"
+ resolved "https://registry.npm.taobao.org/axios/download/axios-0.18.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3"
+ integrity sha1-/z8N4ue10YDnV62YAA8Qgbh7zqM=
+ dependencies:
+ follow-redirects "1.5.10"
+ is-buffer "^2.0.2"
+
+backo2@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+ integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+
+base64id@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/base64id/download/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+ integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
+
+basic-auth@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/basic-auth/download/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884"
+ integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
+ dependencies:
+ callsite "1.0.0"
+
+blob@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
+ integrity sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM=
+
+bluebird@3.5.0:
+ version "3.5.0"
+ resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+ integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=
+
+body-parser@~1.17.1:
+ version "1.17.2"
+ resolved "https://registry.npm.taobao.org/body-parser/download/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee"
+ integrity sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=
+ dependencies:
+ bytes "2.4.0"
+ content-type "~1.0.2"
+ debug "2.6.7"
+ depd "~1.1.0"
+ http-errors "~1.6.1"
+ iconv-lite "0.4.15"
+ on-finished "~2.3.0"
+ qs "6.4.0"
+ raw-body "~2.2.0"
+ type-is "~1.6.15"
+
+bson@~1.0.4:
+ version "1.0.9"
+ resolved "https://registry.npm.taobao.org/bson/download/bson-1.0.9.tgz#12319f8323b1254739b7c6bef8d3e89ae05a2f57"
+ integrity sha1-EjGfgyOxJUc5t8a++NPomuBaL1c=
+
+buffer-shims@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/buffer-shims/download/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+bytes@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.npm.taobao.org/bytes/download/bytes-2.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
+ integrity sha1-fZcZb51br39pNeJZhVSe3SpsIzk=
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+ integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1569560967260&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+commander@^2.19.0:
+ version "2.20.0"
+ resolved "https://registry.npm.taobao.org/commander/download/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+ integrity sha1-1YuytcHuj4ew00ACfp6U4iLFpCI=
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+ integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+ integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+ integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
+
+content-type@^1.0.2, content-type@~1.0.2:
+ version "1.0.4"
+ resolved "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js=
+
+cookie-parser@~1.4.3:
+ version "1.4.4"
+ resolved "https://registry.npm.taobao.org/cookie-parser/download/cookie-parser-1.4.4.tgz#e6363de4ea98c3def9697b93421c09f30cf5d188"
+ integrity sha1-5jY95OqYw975aXuTQhwJ8wz10Yg=
+ dependencies:
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+crc32@0.2.2:
+ version "0.2.2"
+ resolved "https://registry.npm.taobao.org/crc32/download/crc32-0.2.2.tgz#7ad220d6ffdcd119f9fc127a7772cacea390a4ba"
+ integrity sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=
+
+debug@2.6.7:
+ version "2.6.7"
+ resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e"
+ integrity sha1-krrR9tBbu2u6Isyoi80OyJTChh4=
+ dependencies:
+ ms "2.0.0"
+
+debug@2.6.8:
+ version "2.6.8"
+ resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+ integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=
+ dependencies:
+ ms "2.0.0"
+
+debug@2.6.9, debug@^2.6.0, debug@~2.6.3, debug@~2.6.4, debug@~2.6.6:
+ version "2.6.9"
+ resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
+ dependencies:
+ ms "2.0.0"
+
+debug@=3.1.0, debug@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=
+ dependencies:
+ ms "2.0.0"
+
+debug@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=
+ dependencies:
+ ms "^2.1.1"
+
+default-user-agent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/default-user-agent/download/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6"
+ integrity sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=
+ dependencies:
+ os-name "~1.0.3"
+
+define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0=
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+depd@~1.1.0, depd@~1.1.1, depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+depd@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/depd/download/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=
+
+destroy@^1.0.4, destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+digest-header@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npm.taobao.org/digest-header/download/digest-header-0.0.1.tgz#11ccf6deec5766ac379744d901c12cba49514be6"
+ integrity sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=
+ dependencies:
+ utility "0.1.11"
+
+double-ended-queue@^2.1.0-0:
+ version "2.1.0-0"
+ resolved "https://registry.npm.taobao.org/double-ended-queue/download/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
+ integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=
+
+ee-first@1.1.1, ee-first@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+ejs@~2.5.6:
+ version "2.5.9"
+ resolved "https://registry.npm.taobao.org/ejs/download/ejs-2.5.9.tgz#7ba254582a560d267437109a68354112475b0ce5"
+ integrity sha1-e6JUWCpWDSZ0NxCaaDVBEkdbDOU=
+
+encodeurl@^1.0.1, encodeurl@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+engine.io-client@~3.1.0:
+ version "3.1.6"
+ resolved "https://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.1.6.tgz?cache=0&sync_timestamp=1568404651365&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-client%2Fdownload%2Fengine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd"
+ integrity sha1-W96xMPi5SlCsXL63JYPnpKBj3f0=
+ dependencies:
+ component-emitter "1.2.1"
+ component-inherit "0.0.3"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.1"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "~3.3.1"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-client@~3.4.0:
+ version "3.4.0"
+ resolved "https://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.4.0.tgz?cache=0&sync_timestamp=1568404651365&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-client%2Fdownload%2Fengine.io-client-3.4.0.tgz#82a642b42862a9b3f7a188f41776b2deab643700"
+ integrity sha1-gqZCtChiqbP3oYj0F3ay3qtkNwA=
+ dependencies:
+ component-emitter "1.2.1"
+ component-inherit "0.0.3"
+ debug "~4.1.0"
+ engine.io-parser "~2.2.0"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "~6.1.0"
+ xmlhttprequest-ssl "~1.5.4"
+ yeast "0.1.2"
+
+engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
+ version "2.1.3"
+ resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.3.tgz?cache=0&sync_timestamp=1568365944963&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-parser%2Fdownload%2Fengine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
+ integrity sha1-dXq5cPvy37Mse3SwMyFtVznveaY=
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io-parser@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.2.0.tgz?cache=0&sync_timestamp=1568365944963&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-parser%2Fdownload%2Fengine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed"
+ integrity sha1-MSxIlPV9UqArQgho2ntcHISvgO0=
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "~0.0.7"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.5"
+ has-binary2 "~1.0.2"
+
+engine.io@~3.1.0:
+ version "3.1.5"
+ resolved "https://registry.npm.taobao.org/engine.io/download/engine.io-3.1.5.tgz?cache=0&sync_timestamp=1568404651035&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io%2Fdownload%2Fengine.io-3.1.5.tgz#0e7ef9d690eb0b35597f1d4ad02a26ca2dba3845"
+ integrity sha1-Dn751pDrCzVZfx1K0Comyi26OEU=
+ dependencies:
+ accepts "~1.3.4"
+ base64id "1.0.0"
+ cookie "0.3.1"
+ debug "~3.1.0"
+ engine.io-parser "~2.1.0"
+ ws "~3.3.1"
+ optionalDependencies:
+ uws "~9.14.0"
+
+es6-promise@3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes6-promise%2Fdownload%2Fes6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4"
+ integrity sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+etag@~1.8.0, etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+express-session@^1.16.2:
+ version "1.16.2"
+ resolved "https://registry.npm.taobao.org/express-session/download/express-session-1.16.2.tgz#59f36d7770e94872d19b163b6708a2d16aa6848c"
+ integrity sha1-WfNtd3DpSHLRmxY7Zwii0WqmhIw=
+ dependencies:
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~2.0.0"
+ on-headers "~1.0.2"
+ parseurl "~1.3.3"
+ safe-buffer "5.1.2"
+ uid-safe "~2.1.5"
+
+express@~4.15.2:
+ version "4.15.5"
+ resolved "https://registry.npm.taobao.org/express/download/express-4.15.5.tgz#670235ca9598890a5ae8170b83db722b842ed927"
+ integrity sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=
+ dependencies:
+ accepts "~1.3.3"
+ array-flatten "1.1.1"
+ content-disposition "0.5.2"
+ content-type "~1.0.2"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.1"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.0"
+ finalhandler "~1.0.6"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.1"
+ path-to-regexp "0.1.7"
+ proxy-addr "~1.1.5"
+ qs "6.5.0"
+ range-parser "~1.2.0"
+ send "0.15.6"
+ serve-static "1.12.6"
+ setprototypeof "1.0.3"
+ statuses "~1.3.1"
+ type-is "~1.6.15"
+ utils-merge "1.0.0"
+ vary "~1.1.1"
+
+extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+finalhandler@~1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f"
+ integrity sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ statuses "~1.3.1"
+ unpipe "~1.0.0"
+
+follow-redirects@1.5.10:
+ version "1.5.10"
+ resolved "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+ integrity sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=
+ dependencies:
+ debug "=3.1.0"
+
+formstream@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/formstream/download/formstream-1.1.0.tgz#51f3970f26136eb0ad44304de4cebb50207b4479"
+ integrity sha1-UfOXDyYTbrCtRDBN5M67UCB7RHk=
+ dependencies:
+ destroy "^1.0.4"
+ mime "^1.3.4"
+ pause-stream "~0.0.11"
+
+forwarded@~0.1.0:
+ version "0.1.2"
+ resolved "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=
+
+gbk.js@^0.2.0:
+ version "0.2.4"
+ resolved "https://registry.npm.taobao.org/gbk.js/download/gbk.js-0.2.4.tgz#45b609764347c63e4473214adf74cd5359027c8e"
+ integrity sha1-RbYJdkNHxj5EcyFK33TNU1kCfI4=
+
+has-binary2@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
+ integrity sha1-d3asYn8+p3JQz8My2rfd9eT10R0=
+ dependencies:
+ isarray "2.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+ integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+hooks-fixed@2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npm.taobao.org/hooks-fixed/download/hooks-fixed-2.0.2.tgz#20076daa07e77d8a6106883ce3f1722e051140b0"
+ integrity sha1-IAdtqgfnfYphBog84/FyLgURQLA=
+
+http-errors@~1.6.1, http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+humanize-ms@^1.2.0, humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
+ dependencies:
+ ms "^2.0.0"
+
+iconv-lite@0.4.15:
+ version "0.4.15"
+ resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
+ integrity sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=
+
+iconv-lite@^0.4.15:
+ version "0.4.24"
+ resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@~2.0.1:
+ version "2.0.4"
+ resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
+
+ipaddr.js@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0"
+ integrity sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=
+ dependencies:
+ kind-of "^6.0.0"
+
+is-buffer@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
+ integrity sha1-Ts8/z3ScvR5HJonhCaxmJhol5yU=
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=
+ dependencies:
+ kind-of "^6.0.0"
+
+is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=
+ dependencies:
+ isobject "^3.0.1"
+
+isarray@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
+ integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+kareem@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.npm.taobao.org/kareem/download/kareem-1.5.0.tgz?cache=0&sync_timestamp=1566532069231&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkareem%2Fdownload%2Fkareem-1.5.0.tgz#e3e4101d9dcfde299769daf4b4db64d895d17448"
+ integrity sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg=
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha1-ARRrNqYhjmTljzqNZt5df8b20FE=
+
+lib-qqwry@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.npm.taobao.org/lib-qqwry/download/lib-qqwry-1.3.1.tgz#440643cc6115165c23144d03c1ae26f75e528696"
+ integrity sha1-RAZDzGEVFlwjFE0Dwa4m915ShpY=
+ dependencies:
+ axios "^0.18.0"
+ chalk "^2.4.2"
+ commander "^2.19.0"
+ gbk.js "^0.2.0"
+ progress "^2.0.3"
+ stream.pipeline-shim "^1.0.4"
+ to-regex "^3.0.2"
+
+lodash.get@4.4.2:
+ version "4.4.2"
+ resolved "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
+lodash@^4.14.0:
+ version "4.17.15"
+ resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+mime-db@1.40.0:
+ version "1.40.0"
+ resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
+ integrity sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=
+
+mime-types@~2.1.24:
+ version "2.1.24"
+ resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
+ integrity sha1-tvjQs+lR77d97eyhlM/20W9nb4E=
+ dependencies:
+ mime-db "1.40.0"
+
+mime@1.3.4:
+ version "1.3.4"
+ resolved "https://registry.npm.taobao.org/mime/download/mime-1.3.4.tgz?cache=0&sync_timestamp=1560034758817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+ integrity sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=
+
+mime@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npm.taobao.org/mime/download/mime-2.3.1.tgz?cache=0&sync_timestamp=1560034758817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369"
+ integrity sha1-sWIcVNY7l8R9PP5/chX31kUXw2k=
+
+mime@^1.3.4:
+ version "1.6.0"
+ resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1560034758817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=
+
+minimist@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+mongodb-core@2.1.18:
+ version "2.1.18"
+ resolved "https://registry.npm.taobao.org/mongodb-core/download/mongodb-core-2.1.18.tgz#4c46139bdf3a1f032ded91db49f38eec01659050"
+ integrity sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=
+ dependencies:
+ bson "~1.0.4"
+ require_optional "~1.0.0"
+
+mongodb@2.2.34:
+ version "2.2.34"
+ resolved "https://registry.npm.taobao.org/mongodb/download/mongodb-2.2.34.tgz#a34f59bbeb61754aec432de72c3fe21526a44c1a"
+ integrity sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=
+ dependencies:
+ es6-promise "3.2.1"
+ mongodb-core "2.1.18"
+ readable-stream "2.2.7"
+
+mongoose@^4.12.5:
+ version "4.13.19"
+ resolved "https://registry.npm.taobao.org/mongoose/download/mongoose-4.13.19.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmongoose%2Fdownload%2Fmongoose-4.13.19.tgz#58fd2d7dcc02985035ec65a52c99df9078485065"
+ integrity sha1-WP0tfcwCmFA17GWlLJnfkHhIUGU=
+ dependencies:
+ async "2.6.0"
+ bson "~1.0.4"
+ hooks-fixed "2.0.2"
+ kareem "1.5.0"
+ lodash.get "4.4.2"
+ mongodb "2.2.34"
+ mpath "0.5.1"
+ mpromise "0.5.5"
+ mquery "2.3.3"
+ ms "2.0.0"
+ muri "1.3.0"
+ regexp-clone "0.0.1"
+ sliced "1.0.1"
+
+morgan@~1.8.1:
+ version "1.8.2"
+ resolved "https://registry.npm.taobao.org/morgan/download/morgan-1.8.2.tgz#784ac7734e4a453a9c6e6e8680a9329275c8b687"
+ integrity sha1-eErHc05KRTqcbm6GgKkyknXItoc=
+ dependencies:
+ basic-auth "~1.1.0"
+ debug "2.6.8"
+ depd "~1.1.0"
+ on-finished "~2.3.0"
+ on-headers "~1.0.1"
+
+mpath@0.5.1:
+ version "0.5.1"
+ resolved "https://registry.npm.taobao.org/mpath/download/mpath-0.5.1.tgz#17131501f1ff9e6e4fbc8ffa875aa7065b5775ab"
+ integrity sha1-FxMVAfH/nm5PvI/6h1qnBltXdas=
+
+mpromise@0.5.5:
+ version "0.5.5"
+ resolved "https://registry.npm.taobao.org/mpromise/download/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6"
+ integrity sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=
+
+mquery@2.3.3:
+ version "2.3.3"
+ resolved "https://registry.npm.taobao.org/mquery/download/mquery-2.3.3.tgz#221412e5d4e7290ca5582dd16ea8f190a506b518"
+ integrity sha1-IhQS5dTnKQylWC3RbqjxkKUGtRg=
+ dependencies:
+ bluebird "3.5.0"
+ debug "2.6.9"
+ regexp-clone "0.0.1"
+ sliced "0.0.5"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.0.0, ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=
+
+muri@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npm.taobao.org/muri/download/muri-1.3.0.tgz#aeccf3db64c56aa7c5b34e00f95b7878527a4721"
+ integrity sha1-rszz22TFaqfFs04A+Vt4eFJ6RyE=
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+ integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
+
+object-keys@^1.0.12:
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4=
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.1, on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=
+
+os-name@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npm.taobao.org/os-name/download/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf"
+ integrity sha1-GzefZINa98Wn9JizV8uVIVwVnt8=
+ dependencies:
+ osx-release "^1.0.0"
+ win-release "^1.0.0"
+
+osx-release@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/osx-release/download/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c"
+ integrity sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=
+ dependencies:
+ minimist "^1.1.0"
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparseuri%2Fdownload%2Fparseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@~1.3.1, parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+pause-stream@~0.0.11:
+ version "0.0.11"
+ resolved "https://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
+ dependencies:
+ through "~2.3"
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess-nextick-args%2Fdownload%2Fprocess-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=
+
+proxy-addr@~1.1.5:
+ version "1.1.5"
+ resolved "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918"
+ integrity sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=
+ dependencies:
+ forwarded "~0.1.0"
+ ipaddr.js "1.4.0"
+
+qiniu@^7.1.1:
+ version "7.2.2"
+ resolved "https://registry.npm.taobao.org/qiniu/download/qiniu-7.2.2.tgz#94425193f6b1dbd093fd78583070a64dde6cc5e7"
+ integrity sha1-lEJRk/ax29CT/XhYMHCmTd5sxec=
+ dependencies:
+ agentkeepalive "3.3.0"
+ crc32 "0.2.2"
+ encodeurl "^1.0.1"
+ formstream "1.1.0"
+ mime "2.3.1"
+ tunnel-agent "0.6.0"
+ urllib "2.22.0"
+
+qs@6.4.0:
+ version "6.4.0"
+ resolved "https://registry.npm.taobao.org/qs/download/qs-6.4.0.tgz?cache=0&sync_timestamp=1569207136481&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+ integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=
+
+qs@6.5.0:
+ version "6.5.0"
+ resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.0.tgz?cache=0&sync_timestamp=1569207136481&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49"
+ integrity sha1-jQSVTTZN7z78VbWgeT4eLIsebkk=
+
+qs@^6.4.0:
+ version "6.9.0"
+ resolved "https://registry.npm.taobao.org/qs/download/qs-6.9.0.tgz?cache=0&sync_timestamp=1569207136481&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.9.0.tgz#d1297e2a049c53119cb49cca366adbbacc80b409"
+ integrity sha1-0Sl+KgScUxGctJzKNmrbusyAtAk=
+
+random-bytes@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/random-bytes/download/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
+ integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=
+
+range-parser@~1.2.0:
+ version "1.2.1"
+ resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=
+
+raw-body@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npm.taobao.org/raw-body/download/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96"
+ integrity sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=
+ dependencies:
+ bytes "2.4.0"
+ iconv-lite "0.4.15"
+ unpipe "1.0.0"
+
+readable-stream@2.2.7:
+ version "2.2.7"
+ resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1"
+ integrity sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=
+ dependencies:
+ buffer-shims "~1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~1.0.0"
+ util-deprecate "~1.0.1"
+
+redis-commands@^1.2.0:
+ version "1.5.0"
+ resolved "https://registry.npm.taobao.org/redis-commands/download/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785"
+ integrity sha1-gNLiBpj+aI8icSf/nlFkp90X54U=
+
+redis-parser@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.npm.taobao.org/redis-parser/download/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
+ integrity sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=
+
+redis@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.npm.taobao.org/redis/download/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02"
+ integrity sha1-ICKI4/WMSfYHnZevehDhMDrhSwI=
+ dependencies:
+ double-ended-queue "^2.1.0-0"
+ redis-commands "^1.2.0"
+ redis-parser "^2.6.0"
+
+regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexp-clone@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npm.taobao.org/regexp-clone/download/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589"
+ integrity sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=
+
+require_optional@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e"
+ integrity sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4=
+ dependencies:
+ resolve-from "^2.0.0"
+ semver "^5.1.0"
+
+resolve-from@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
+ integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=
+
+safe-buffer@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+ integrity sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0:
+ version "5.1.2"
+ resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
+
+safe-buffer@^5.0.1:
+ version "5.2.0"
+ resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=
+
+semver@^5.0.1, semver@^5.1.0:
+ version "5.7.1"
+ resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1565627362346&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
+
+send@0.15.6:
+ version "0.15.6"
+ resolved "https://registry.npm.taobao.org/send/download/send-0.15.6.tgz#20f23a9c925b762ab82705fe2f9db252ace47e34"
+ integrity sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.1"
+ destroy "~1.0.4"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.6.2"
+ mime "1.3.4"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.3.1"
+
+serve-favicon@~2.4.2:
+ version "2.4.5"
+ resolved "https://registry.npm.taobao.org/serve-favicon/download/serve-favicon-2.4.5.tgz#49d9a46863153a9240691c893d2b0e7d85d6d436"
+ integrity sha1-SdmkaGMVOpJAaRyJPSsOfYXW1DY=
+ dependencies:
+ etag "~1.8.1"
+ fresh "0.5.2"
+ ms "2.0.0"
+ parseurl "~1.3.2"
+ safe-buffer "5.1.1"
+
+serve-static@1.12.6:
+ version "1.12.6"
+ resolved "https://registry.npm.taobao.org/serve-static/download/serve-static-1.12.6.tgz#b973773f63449934da54e5beba5e31d9f4211577"
+ integrity sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=
+ dependencies:
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ parseurl "~1.3.2"
+ send "0.15.6"
+
+setprototypeof@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+ integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=
+
+sliced@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.npm.taobao.org/sliced/download/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f"
+ integrity sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=
+
+sliced@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
+ integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
+
+socket.io-adapter@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
+ integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=
+
+socket.io-client@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.0.4.tgz?cache=0&sync_timestamp=1569002853390&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e"
+ integrity sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=
+ dependencies:
+ backo2 "1.0.2"
+ base64-arraybuffer "0.1.5"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "~2.6.4"
+ engine.io-client "~3.1.0"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ socket.io-parser "~3.1.1"
+ to-array "0.1.4"
+
+socket.io-client@^2.0.4:
+ version "2.3.0"
+ resolved "https://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.3.0.tgz?cache=0&sync_timestamp=1569002853390&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-client%2Fdownload%2Fsocket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4"
+ integrity sha1-FNW6LgC5vNFFrkQ6uWs/hsvMG7Q=
+ dependencies:
+ backo2 "1.0.2"
+ base64-arraybuffer "0.1.5"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "~4.1.0"
+ engine.io-client "~3.4.0"
+ has-binary2 "~1.0.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ socket.io-parser "~3.3.0"
+ to-array "0.1.4"
+
+socket.io-parser@~3.1.1:
+ version "3.1.3"
+ resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e"
+ integrity sha1-7S2l7nnxCVUDbj2kE7/X8eTYbI4=
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ has-binary2 "~1.0.2"
+ isarray "2.0.1"
+
+socket.io-parser@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f"
+ integrity sha1-K1KpalCf3zFEC6QP7WCUx9TxJi8=
+ dependencies:
+ component-emitter "1.2.1"
+ debug "~3.1.0"
+ isarray "2.0.1"
+
+socket.io@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npm.taobao.org/socket.io/download/socket.io-2.0.4.tgz?cache=0&sync_timestamp=1569002852515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io%2Fdownload%2Fsocket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014"
+ integrity sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=
+ dependencies:
+ debug "~2.6.6"
+ engine.io "~3.1.0"
+ socket.io-adapter "~1.1.0"
+ socket.io-client "2.0.4"
+ socket.io-parser "~3.1.1"
+
+"statuses@>= 1.4.0 < 2", statuses@^1.3.1:
+ version "1.5.0"
+ resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+statuses@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+ integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=
+
+stream.finished@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npm.taobao.org/stream.finished/download/stream.finished-1.2.0.tgz#40fc76092792d08a43388184fd0d42c6ab9523a0"
+ integrity sha1-QPx2CSeS0IpDOIGE/Q1CxquVI6A=
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+stream.pipeline-shim@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.npm.taobao.org/stream.pipeline-shim/download/stream.pipeline-shim-1.1.0.tgz#70c94a5f9a1ab84951694a2cc108bc7a47000cb5"
+ integrity sha1-cMlKX5oauElRaUoswQi8ekcADLU=
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+ stream.finished "^1.2.0"
+
+string_decoder@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+ integrity sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=
+ dependencies:
+ safe-buffer "~5.1.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=
+ dependencies:
+ has-flag "^3.0.0"
+
+through@~2.3:
+ version "2.3.8"
+ resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+ integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+
+to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+tunnel-agent@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+type-is@~1.6.15:
+ version "1.6.18"
+ resolved "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+uid-safe@~2.1.5:
+ version "2.1.5"
+ resolved "https://registry.npm.taobao.org/uid-safe/download/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a"
+ integrity sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=
+ dependencies:
+ random-bytes "~1.0.0"
+
+ultron@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+ integrity sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+urllib@2.22.0:
+ version "2.22.0"
+ resolved "https://registry.npm.taobao.org/urllib/download/urllib-2.22.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furllib%2Fdownload%2Furllib-2.22.0.tgz#2965dc4ae127a6fb695b7db27d3184f17d82cb42"
+ integrity sha1-KWXcSuEnpvtpW32yfTGE8X2Cy0I=
+ dependencies:
+ any-promise "^1.3.0"
+ content-type "^1.0.2"
+ debug "^2.6.0"
+ default-user-agent "^1.0.0"
+ digest-header "^0.0.1"
+ ee-first "~1.1.1"
+ humanize-ms "^1.2.0"
+ iconv-lite "^0.4.15"
+ qs "^6.4.0"
+ statuses "^1.3.1"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+utility@0.1.11:
+ version "0.1.11"
+ resolved "https://registry.npm.taobao.org/utility/download/utility-0.1.11.tgz#fde60cf9b4e4751947a0cf5d104ce29367226715"
+ integrity sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=
+ dependencies:
+ address ">=0.0.1"
+
+utils-merge@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
+ integrity sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=
+
+uws@~9.14.0:
+ version "9.14.0"
+ resolved "https://registry.npm.taobao.org/uws/download/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95"
+ integrity sha1-+sg4a+/DOno3BcvVjcR7Qwyk3ZU=
+
+vary@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+win-release@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.npm.taobao.org/win-release/download/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209"
+ integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=
+ dependencies:
+ semver "^5.0.1"
+
+ws@~3.3.1:
+ version "3.3.3"
+ resolved "https://registry.npm.taobao.org/ws/download/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
+ integrity sha1-8c+E/i1ekB686U767OeF8YeiKPI=
+ dependencies:
+ async-limiter "~1.0.0"
+ safe-buffer "~5.1.0"
+ ultron "~1.1.0"
+
+ws@~6.1.0:
+ version "6.1.4"
+ resolved "https://registry.npm.taobao.org/ws/download/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
+ integrity sha1-W1yIAK+rkl6UzLKdFTyNAsF3bvk=
+ dependencies:
+ async-limiter "~1.0.0"
+
+xmlhttprequest-ssl@~1.5.4:
+ version "1.5.5"
+ resolved "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz?cache=0&sync_timestamp=1564594466893&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxmlhttprequest-ssl%2Fdownload%2Fxmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
+ integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+ integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=