From 894bed05b15140b004b96b5cb165205b12c6042b Mon Sep 17 00:00:00 2001 From: callmeyan Date: Sat, 28 Sep 2019 21:25:24 +0800 Subject: [PATCH] modify from https://github.com/gytai/KeFu.git --- app.js | 4 + bin/www | 6 +- io/io.js | 4 +- model/users.js | 52 +- package.json | 12 +- public/js/server/index.js | 281 ++++---- routes/index.js | 91 ++- test.js | 8 + utils/common.js | 33 +- views/client/index.ejs | 3 +- views/error.ejs | 12 + views/server/header.ejs | 111 +-- views/server/index.ejs | 8 +- views/server/setup.ejs | 59 +- yarn.lock | 1347 +++++++++++++++++++++++++++++++++++++ 15 files changed, 1749 insertions(+), 282 deletions(-) create mode 100644 test.js create mode 100644 views/error.ejs create mode 100644 yarn.lock 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 += '
' + - ' ' + - ' photo'+ + ' ' + + ' photo' + ' ' + '
'; } - 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 += '
' + - ' ' + - ' photo'+ + ' ' + + ' photo' + ' ' + '
'; } 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=