Authored by 陈峰

init

  1 +other
  2 +node_modules
  1 +{
  2 + "env": {
  3 + "node": true
  4 + },
  5 + "extends": [
  6 + "eslint:recommended",
  7 + "yoho"
  8 + ],
  9 + "parserOptions": {
  10 + "sourceType": "module",
  11 + "ecmaVersion": 8
  12 + },
  13 + "rules": {
  14 + "camelcase": "off",
  15 + "max-len": "off"
  16 + }
  17 +}
  1 +
  2 +# Created by https://www.gitignore.io/api/node,webstorm,netbeans,sublimetext,vim
  3 +
  4 +### Node ###
  5 +# Logs
  6 +logs
  7 +*.log
  8 +npm-debug.log*
  9 +
  10 +# Runtime data
  11 +pids
  12 +*.pid
  13 +*.seed
  14 +
  15 +# Directory for instrumented libs generated by jscoverage/JSCover
  16 +lib-cov
  17 +
  18 +# Coverage directory used by tools like istanbul
  19 +coverage
  20 +
  21 +# nyc test coverage
  22 +.nyc_output
  23 +
  24 +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
  25 +.grunt
  26 +
  27 +# node-waf configuration
  28 +.lock-wscript
  29 +
  30 +# Compiled binary addons (http://nodejs.org/api/addons.html)
  31 +build/Release
  32 +
  33 +# Dependency directories
  34 +node_modules
  35 +jspm_packages
  36 +
  37 +# Optional npm cache directory
  38 +.npm
  39 +
  40 +# Optional REPL history
  41 +.node_repl_history
  42 +
  43 +
  44 +### WebStorm ###
  45 +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
  46 +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
  47 +.idea/
  48 +# User-specific stuff:
  49 +.idea/workspace.xml
  50 +.idea/tasks.xml
  51 +.idea/dictionaries
  52 +.idea/vcs.xml
  53 +.idea/jsLibraryMappings.xml
  54 +
  55 +# Sensitive or high-churn files:
  56 +.idea/dataSources.ids
  57 +.idea/dataSources.xml
  58 +.idea/dataSources.local.xml
  59 +.idea/sqlDataSources.xml
  60 +.idea/dynamic.xml
  61 +.idea/uiDesigner.xml
  62 +
  63 +# Gradle:
  64 +.idea/gradle.xml
  65 +.idea/libraries
  66 +
  67 +# Mongo Explorer plugin:
  68 +.idea/mongoSettings.xml
  69 +
  70 +## File-based project format:
  71 +*.iws
  72 +
  73 +## Plugin-specific files:
  74 +
  75 +# IntelliJ
  76 +/out/
  77 +
  78 +# mpeltonen/sbt-idea plugin
  79 +.idea_modules/
  80 +
  81 +# JIRA plugin
  82 +atlassian-ide-plugin.xml
  83 +
  84 +# Crashlytics plugin (for Android Studio and IntelliJ)
  85 +com_crashlytics_export_strings.xml
  86 +crashlytics.properties
  87 +crashlytics-build.properties
  88 +fabric.properties
  89 +
  90 +### WebStorm Patch ###
  91 +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
  92 +
  93 +# *.iml
  94 +# modules.xml
  95 +
  96 +
  97 +### NetBeans ###
  98 +nbproject/private/
  99 +nbbuild/
  100 +dist/
  101 +nbdist/
  102 +nbactions.xml
  103 +.nb-gradle/
  104 +
  105 +
  106 +### SublimeText ###
  107 +# cache files for sublime text
  108 +*.tmlanguage.cache
  109 +*.tmPreferences.cache
  110 +*.stTheme.cache
  111 +
  112 +# workspace files are user-specific
  113 +*.sublime-workspace
  114 +
  115 +# project files should be checked into the repository, unless a significant
  116 +# proportion of contributors will probably not be using SublimeText
  117 +# *.sublime-project
  118 +
  119 +# sftp configuration file
  120 +sftp-config.json
  121 +
  122 +### TSD ###
  123 +typings/
  124 +
  125 +### Vim ###
  126 +# swap
  127 +[._]*.s[a-w][a-z]
  128 +[._]s[a-w][a-z]
  129 +# session
  130 +Session.vim
  131 +# temporary
  132 +.netrwhist
  133 +*~
  134 +# auto-generated tag files
  135 +tags
  136 +
  137 +### TSD ###
  138 +typings/
  139 +
  140 +### VS Code ###
  141 +.vscode/
  142 +
  143 +### YOHO ###
  144 +dist
  145 +public/build/bundle/*
  146 +public/build/dll/*
  147 +public/build/dist/*
  148 +public/css/*
  149 +public/sprites
  150 +public/bundle/*
  151 +.eslintcache
  152 +.stylelintcache
  153 +*.log.*
  154 +nbproject/*
  155 +.DS_Store
  156 +.devhost
  157 +.happypack/*
  158 +.scannerwork
  159 +package-lock.json
  160 +yoho-yohobuy-wap.tar.gz
  161 +
  162 +other/files
  163 +/db
  164 +other/output
  1 +const schedule = require('node-schedule');
  2 +const config = require('./spider-buyers.json');
  3 +const spiderBuyers = require('./spider-buyers');
  4 +
  5 +schedule.scheduleJob(config.schedule, () => {
  6 + spiderBuyers();
  7 +});
  1 +const spider = require('./spider-buyers.js');
  2 +
  3 +spider();
  1 +const {transports, createLogger, format} = require('winston');
  2 +
  3 +require('winston-daily-rotate-file');
  4 +
  5 +module.exports = (loggers) => {
  6 + const tps = loggers.map(log => {
  7 + switch (log.type) {
  8 + case 'console':
  9 + return new transports.Console(Object.assign({
  10 + level: 'info'
  11 + }, log));
  12 + case 'file':
  13 + return new transports.File(Object.assign({
  14 + level: 'info',
  15 + zippedArchive: true,
  16 + maxsize: 209715200, // 200m
  17 + maxFiles: 7,
  18 + }, log));
  19 + case 'dailyfile':
  20 + return new transports.DailyRotateFile(Object.assign({
  21 + level: 'info',
  22 + zippedArchive: true,
  23 + maxSize: '200m',
  24 + maxFiles: '7d',
  25 + datePattern: 'YYYY-MM-DD',
  26 + dirname: './logs'
  27 + }, log));
  28 + default:
  29 + return void 0;
  30 + }
  31 + });
  32 +
  33 + const logger = createLogger({
  34 + level: 'info',
  35 + format: format.combine(
  36 + format.timestamp({
  37 + format: () => {
  38 + return new Date().toLocaleString();
  39 + }
  40 + }),
  41 + format.printf(info => `${info.level}: ${info.message}`)
  42 + ),
  43 + transports: tps
  44 + });
  45 +
  46 + return logger;
  47 +};
  48 +
  49 +module.exports.logger = module.exports([{
  50 + silent: true,
  51 + type: 'dailyfile',
  52 + level: 'info',
  53 + filename: 'logs/info.log',
  54 +}, {
  55 + silent: true,
  56 + type: 'dailyfile',
  57 + level: 'error',
  58 + filename: 'logs/error.log',
  59 +}, {
  60 + type: 'console',
  61 + level: 'debug',
  62 +}]);
  1 +const mysql = require('mysql');
  2 +const _ = require('lodash');
  3 +const isProduction = process.env.NODE_ENV === 'production';
  4 +
  5 +// const {logger} = require('./logger');
  6 +
  7 +class MysqlAdapter {
  8 + constructor(connect, database) {
  9 + this.connect = connect;
  10 + this.database = database;
  11 + this.createPool();
  12 + }
  13 + createPool() {
  14 + this.pool = mysql.createPool(Object.assign(this.connect, {
  15 + database: this.database,
  16 + queryFormat: function(query, values) {
  17 + let exeQuery;
  18 +
  19 + if (!values) {
  20 + exeQuery = query;
  21 + } else {
  22 + exeQuery = query.replace(/:(\w+)/g, function(txt, key) {
  23 + if (values.hasOwnProperty(key)) {
  24 + return this.escape(values[key]);
  25 + }
  26 + return txt;
  27 + }.bind(this));
  28 + }
  29 + if (!isProduction) {
  30 + // logger.info(exeQuery);
  31 + }
  32 + return exeQuery;
  33 + },
  34 + connectTimeout: 2000
  35 + }));
  36 + }
  37 + getConnection() {
  38 + return new Promise((resolve, reject) => {
  39 + this.pool.getConnection((connErr, connection) => {
  40 + if (connErr) {
  41 + reject(connErr);
  42 + } else {
  43 + resolve(connection);
  44 + }
  45 + });
  46 + });
  47 + }
  48 + query(sql, params, options) {
  49 + return this.execute(sql, params, options);
  50 + }
  51 + delete(sql, params) {
  52 + return this.execute(sql, params).then(result => {
  53 + return result.affectedRows;
  54 + });
  55 + }
  56 + update(sql, params) {
  57 + return this.execute(sql, params).then(result => {
  58 + return result.affectedRows;
  59 + });
  60 + }
  61 + insert(sql, params) {
  62 + return this.execute(sql, params).then(result => {
  63 + return result.insertId;
  64 + });
  65 + }
  66 + execute(sql, params) {
  67 + return new Promise((resolve, reject) => {
  68 + this.getConnection().then(connection => {
  69 + connection.query(sql, params, (queryErr, result) => {
  70 + connection.release();
  71 + if (queryErr) {
  72 + reject(queryErr);
  73 + } else {
  74 + resolve(result);
  75 + }
  76 + });
  77 + }).catch(e => {
  78 + reject(e);
  79 + });
  80 + });
  81 + }
  82 + transaction(sqls, cb) {
  83 + return new Promise((resolve, reject) => {
  84 + this.getConnection().then(connection => {
  85 + let promises = _.map(sqls, sql => {
  86 + return new Promise((res, rej) => {
  87 + connection.query(sql, (queryErr, result) => {
  88 + if (queryErr) {
  89 + connection.rollback();
  90 + rej(queryErr);
  91 + } else {
  92 + cb && cb(sql); // eslint-disable-line
  93 + res(result);
  94 + }
  95 + });
  96 + });
  97 + });
  98 +
  99 + Promise.all(promises).then(results => {
  100 + connection.commit(err => {
  101 + if (err) {
  102 + connection.rollback(() => {
  103 + connection.release();
  104 + });
  105 + reject();
  106 + } else {
  107 + connection.release();
  108 + resolve(results);
  109 + }
  110 + });
  111 + }, () => {
  112 + reject();
  113 + });
  114 + });
  115 + });
  116 + }
  117 + changeDatabase(database) {
  118 + return new Promise(resolve => {
  119 + this.pool.end(() => {
  120 + this.createPool(database);
  121 + resolve();
  122 + });
  123 + });
  124 + }
  125 + close() {
  126 + this.pool.end();
  127 + }
  128 +}
  129 +
  130 +module.exports = MysqlAdapter;
  131 +
  1 +const md5 = require('yoho-md5');
  2 +const rp = require('request-promise');
  3 +const nodeLockup = require('node-lockup');
  4 +const chalk = require('chalk');
  5 +const {logger} = require('./logger');
  6 +
  7 +const sign = (obj) => {
  8 + let constr = '';
  9 +
  10 + Object.keys(obj).sort().forEach(k => {
  11 + constr += k + obj[k].toString();
  12 + });
  13 + return md5(constr + '048a9c4943398714b356a696503d2d36');
  14 +};
  15 +
  16 +const task = async(options, tick = 1) => {
  17 + const params = Object.assign({}, options);
  18 +
  19 + delete params.url;
  20 + params.sign = sign(params);
  21 + try {
  22 + const result = await rp.get({
  23 + url: options.url,
  24 + qs: params,
  25 + json: true,
  26 + headers: {
  27 + Accept: 'application/json, text/plain, */*',
  28 + appVersion: '3.5.0',
  29 + Referer: 'http://du.hupu.com/mdu/product/detail.html?id=1&source=boutiqueRecommend',
  30 + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 Safari/604.1',
  31 + 'X-Requested-With': 'XMLHttpRequest'
  32 + },
  33 + timeout: 2000
  34 + });
  35 +
  36 + return result;
  37 + } catch (error) {
  38 + logger.error(chalk.red(`error:${options}:tick:${tick} ====> ${error}`));
  39 + if (tick >= 3) {
  40 + return Promise.resolve({});
  41 + }
  42 + return task(options, tick + 1);
  43 + }
  44 +};
  45 +
  46 +module.exports = (ids, url = 'http://du.hupu.com/mapi/product/detail', params, delay) => {
  47 + const lockTask = nodeLockup(task, delay || 1);
  48 +
  49 + return ids.map(id => lockTask(Object.assign({
  50 + productId: id,
  51 + source: 'boutiqueRecommend',
  52 + url
  53 + }, params)));
  54 +};
  55 +
  56 +module.exports.spiderFetch = (id, url = 'http://du.hupu.com/mapi/product/detail', params) => {
  57 + return task(Object.assign({
  58 + productId: id,
  59 + source: 'boutiqueRecommend',
  60 + url
  61 + }, params));
  62 +};
  1 +{
  2 + "name": "app-buyers",
  3 + "version": "1.0.0",
  4 + "description": "",
  5 + "main": "app-buyers.js",
  6 + "scripts": {
  7 + "test": "echo \"Error: no test specified\" && exit 1"
  8 + },
  9 + "author": "",
  10 + "license": "ISC",
  11 + "dependencies": {
  12 + "chalk": "^2.4.2",
  13 + "dayjs": "^1.8.12",
  14 + "lodash": "^4.17.11",
  15 + "mysql": "^2.16.0",
  16 + "node-lockup": "^1.0.3",
  17 + "node-schedule": "^1.3.2",
  18 + "request": "^2.88.0",
  19 + "request-promise": "^4.2.4",
  20 + "winston": "^3.2.1",
  21 + "winston-daily-rotate-file": "^3.8.0",
  22 + "yoho-md5": "^2.1.0"
  23 + }
  24 +}
  1 +const dayjs = require('dayjs');
  2 +const lockup = require('node-lockup');
  3 +const isBetween = require('dayjs/plugin/isBetween');
  4 +const _ = require('lodash');
  5 +const MysqlAdapter = require('./libs/mysql');
  6 +const spider = require('./libs/spider');
  7 +const config = require('./spider-buyers.json');
  8 +const {logger} = require('./libs/logger');
  9 +
  10 +dayjs.extend(isBetween);
  11 +
  12 +const mysql = new MysqlAdapter(config.connect, config.connect.database);
  13 +
  14 +const products = {};
  15 +const RegNow = /刚刚/;
  16 +const RegMinute = /(\d+)分钟前/;
  17 +const RegHour = /(\d+)小时前/;
  18 +const RegDay = /(\d+)天前/;
  19 +const RegDate = /(\d+)(\d+)日/;
  20 +const RegDateFull = /\d+\.\d+\.\d+/;
  21 +let tableName;
  22 +
  23 +
  24 +const parseTime = (relativeTime) => {
  25 + const matchMinute = relativeTime.match(RegMinute);
  26 +
  27 + if (matchMinute) {
  28 + return dayjs().add(0 - matchMinute[1], 'minute');
  29 + }
  30 + const matchHour = relativeTime.match(RegHour);
  31 +
  32 + if (matchHour) {
  33 + return dayjs().add(0 - matchHour[1], 'hour');
  34 + }
  35 + const matchDay = relativeTime.match(RegDay);
  36 +
  37 + if (matchDay) {
  38 + return dayjs().add(0 - matchDay[1], 'day');
  39 + }
  40 + const matchDate = relativeTime.match(RegDate);
  41 +
  42 + if (matchDate) {
  43 + return dayjs(`2019/${matchDate[1]}/${matchDate[2]}`);
  44 + }
  45 + if (RegDateFull.test(relativeTime)) {
  46 + return dayjs(relativeTime);
  47 + }
  48 + if (RegNow.test(relativeTime)) {
  49 + return dayjs();
  50 + }
  51 + return dayjs('1990-01-01');
  52 +};
  53 +
  54 +
  55 +const spiderBuyers = async(productId, lsId = 0, page = 0, trys = 0) => {
  56 + const result = await spider.spiderFetch(productId, 'https://du.hupu.com/mapi/product/lastSoldList', {
  57 + lastId: lsId
  58 + });
  59 +
  60 + let lastId;
  61 + let tryLogic = false;
  62 + let list = [];
  63 +
  64 + if (result.status === 200) {
  65 + let skip = false;
  66 +
  67 + lastId = result.data.lastId;
  68 + list = result.data.list;
  69 +
  70 +
  71 + list.forEach(info => {
  72 + const orderTime = parseTime(info.formatTime);
  73 + const startTime = dayjs().subtract(1, 'day').add(1, 'second');
  74 +
  75 + if (!orderTime.isBefore(startTime)) {
  76 + mysql.insert('INSERT INTO `' + tableName + '` (`productId`, `nickName`, `icon`, `time`, `size`, `soldNum`, `price`) VALUES (:productId, :nickName, :icon, :time, :size, :soldNum, :price)', {
  77 + productId: productId,
  78 + nickName: info.buyer.userName,
  79 + icon: info.buyer.icon,
  80 + size: info.item.size,
  81 + time: orderTime.format('YYYY-MM-DD HH:mm:ss'),
  82 + soldNum: products[productId].count,
  83 + price: +products[productId].price / 100,
  84 + });
  85 + } else {
  86 + if (!skip) {
  87 + logger.info(`productid: ${productId}, skip time:${orderTime.format('YYYY-MM-DD HH:mm:ss')}`);
  88 + }
  89 + skip = true;
  90 + }
  91 + });
  92 +
  93 + if (skip) {
  94 + return {productId};
  95 + }
  96 + } else {
  97 + if (trys < 3) {
  98 + tryLogic = true;
  99 + }
  100 + }
  101 +
  102 + if (tryLogic) {
  103 + logger.info(`tryLogic ${trys}`);
  104 + return spiderBuyers(productId, lsId, page, trys + 1);
  105 + } else {
  106 + if (lastId) {
  107 + logger.info(`productId: ${productId}, nextPage: ${page}, lastId: ${lastId}`);
  108 + return spiderBuyers(productId, lastId, page + 1);
  109 + }
  110 + return {productId};
  111 + }
  112 +};
  113 +
  114 +// 2721219
  115 +
  116 +let max = 50000;
  117 +let failNum = 0;
  118 +let over = false;
  119 +
  120 +const start = async(productId) => {
  121 + if (over) {
  122 + return;
  123 + }
  124 +
  125 + if (productId >= max) {
  126 + over = true;
  127 + logger.info('over!!!!!!');
  128 + return;
  129 + }
  130 +
  131 + const result = await spider.spiderFetch(productId);
  132 +
  133 + if (result.status === 200) {
  134 + failNum = 0;
  135 + products[productId] = {
  136 + count: _.get(result, 'data.detail.soldNum', 0),
  137 + price: _.get(result, 'data.item.price', 0)
  138 + };
  139 + try {
  140 + await spiderBuyers(productId);
  141 + } catch (error) {
  142 + logger.info('error', error);
  143 + }
  144 +
  145 +
  146 + } else {
  147 + logger.info(productId, result.status);
  148 + if (result.status) {
  149 + failNum++;
  150 + }
  151 + }
  152 + if (failNum >= 20) {
  153 + over = true;
  154 + return logger.info('over!!!!!!', JSON.stringify(result));
  155 + }
  156 + return true;
  157 +};
  158 +
  159 +const createDayTable = async() => {
  160 + tableName = `buyers_${dayjs().format('YYYY_MM_DD')}`;
  161 + const sql = `CREATE TABLE \`${tableName}\` (\`productId\` int(11) DEFAULT NULL,\`nickName\` varchar(50) DEFAULT NULL,\`icon\` varchar(200) DEFAULT NULL,\`time\` datetime DEFAULT NULL,\`size\` varchar(50) DEFAULT NULL,\`id\` int(11) NOT NULL AUTO_INCREMENT,\`soldNum\` int(11) DEFAULT NULL,\`price\` decimal(10,0) DEFAULT NULL,PRIMARY KEY (\`id\`),KEY \`index_name_icon\` (\`nickName\`,\`icon\`), KEY \`productid\` (\`productId\`) USING BTREE, KEY \`time\` (\`time\`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;`;
  162 +
  163 + const result = await mysql.query(`SELECT table_name FROM information_schema.TABLES WHERE table_name ='${tableName}'`);
  164 +
  165 + if (result.length) {
  166 + return;
  167 + }
  168 +
  169 + return mysql.execute(sql);
  170 +};
  171 +
  172 +const locktask = lockup(start);
  173 +
  174 +// 4211292
  175 +module.exports = async() => {
  176 + await createDayTable();
  177 + Array.from({length: max}).forEach((v, i) => {
  178 + locktask(i + 1);
  179 + });
  180 +};
  1 +{
  2 + "connect": {
  3 + "database": "spider-ufo",
  4 + "host": "127.0.0.1",
  5 + "port": "3306",
  6 + "user": "root",
  7 + "password": "",
  8 + "charset": "utf8mb4",
  9 + "timezone": "+08:00"
  10 + },
  11 + "table": "buyers",
  12 + "schedule": "0 0 2 * * *"
  13 +}
  1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
  2 +# yarn lockfile v1
  3 +
  4 +
  5 +ajv@^6.5.5:
  6 + version "6.10.0"
  7 + resolved "http://npm.yohops.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
  8 + dependencies:
  9 + fast-deep-equal "^2.0.1"
  10 + fast-json-stable-stringify "^2.0.0"
  11 + json-schema-traverse "^0.4.1"
  12 + uri-js "^4.2.2"
  13 +
  14 +ansi-styles@^3.2.1:
  15 + version "3.2.1"
  16 + resolved "http://npm.yohops.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
  17 + dependencies:
  18 + color-convert "^1.9.0"
  19 +
  20 +asn1@~0.2.3:
  21 + version "0.2.4"
  22 + resolved "http://npm.yohops.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
  23 + dependencies:
  24 + safer-buffer "~2.1.0"
  25 +
  26 +assert-plus@1.0.0, assert-plus@^1.0.0:
  27 + version "1.0.0"
  28 + resolved "http://npm.yohops.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
  29 +
  30 +async@^2.6.1:
  31 + version "2.6.2"
  32 + resolved "http://npm.yohops.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
  33 + dependencies:
  34 + lodash "^4.17.11"
  35 +
  36 +asynckit@^0.4.0:
  37 + version "0.4.0"
  38 + resolved "http://npm.yohops.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
  39 +
  40 +aws-sign2@~0.7.0:
  41 + version "0.7.0"
  42 + resolved "http://npm.yohops.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
  43 +
  44 +aws4@^1.8.0:
  45 + version "1.8.0"
  46 + resolved "http://npm.yohops.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
  47 +
  48 +bcrypt-pbkdf@^1.0.0:
  49 + version "1.0.2"
  50 + resolved "http://npm.yohops.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
  51 + dependencies:
  52 + tweetnacl "^0.14.3"
  53 +
  54 +bignumber.js@4.1.0:
  55 + version "4.1.0"
  56 + resolved "http://npm.yohops.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1"
  57 +
  58 +bluebird@^3.5.0:
  59 + version "3.5.4"
  60 + resolved "http://npm.yohops.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714"
  61 +
  62 +caseless@~0.12.0:
  63 + version "0.12.0"
  64 + resolved "http://npm.yohops.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
  65 +
  66 +chalk@^2.4.2:
  67 + version "2.4.2"
  68 + resolved "http://npm.yohops.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
  69 + dependencies:
  70 + ansi-styles "^3.2.1"
  71 + escape-string-regexp "^1.0.5"
  72 + supports-color "^5.3.0"
  73 +
  74 +color-convert@^1.9.0, color-convert@^1.9.1:
  75 + version "1.9.3"
  76 + resolved "http://npm.yohops.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
  77 + dependencies:
  78 + color-name "1.1.3"
  79 +
  80 +color-name@1.1.3:
  81 + version "1.1.3"
  82 + resolved "http://npm.yohops.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
  83 +
  84 +color-name@^1.0.0:
  85 + version "1.1.4"
  86 + resolved "http://npm.yohops.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
  87 +
  88 +color-string@^1.5.2:
  89 + version "1.5.3"
  90 + resolved "http://npm.yohops.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
  91 + dependencies:
  92 + color-name "^1.0.0"
  93 + simple-swizzle "^0.2.2"
  94 +
  95 +color@3.0.x:
  96 + version "3.0.0"
  97 + resolved "http://npm.yohops.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
  98 + dependencies:
  99 + color-convert "^1.9.1"
  100 + color-string "^1.5.2"
  101 +
  102 +colornames@^1.1.1:
  103 + version "1.1.1"
  104 + resolved "http://npm.yohops.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96"
  105 +
  106 +colors@^1.2.1:
  107 + version "1.3.3"
  108 + resolved "http://npm.yohops.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
  109 +
  110 +colorspace@1.1.x:
  111 + version "1.1.1"
  112 + resolved "http://npm.yohops.com/colorspace/-/colorspace-1.1.1.tgz#9ac2491e1bc6f8fb690e2176814f8d091636d972"
  113 + dependencies:
  114 + color "3.0.x"
  115 + text-hex "1.0.x"
  116 +
  117 +combined-stream@^1.0.6, combined-stream@~1.0.6:
  118 + version "1.0.7"
  119 + resolved "http://npm.yohops.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
  120 + dependencies:
  121 + delayed-stream "~1.0.0"
  122 +
  123 +core-util-is@1.0.2, core-util-is@~1.0.0:
  124 + version "1.0.2"
  125 + resolved "http://npm.yohops.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
  126 +
  127 +cron-parser@^2.7.3:
  128 + version "2.11.0"
  129 + resolved "http://npm.yohops.com/cron-parser/-/cron-parser-2.11.0.tgz#c3bf477e01de6a56938d6625b92efd6cec30a8a5"
  130 + dependencies:
  131 + is-nan "^1.2.1"
  132 + moment-timezone "^0.5.23"
  133 +
  134 +cycle@~1.0.3:
  135 + version "1.0.3"
  136 + resolved "http://npm.yohops.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
  137 +
  138 +dashdash@^1.12.0:
  139 + version "1.14.1"
  140 + resolved "http://npm.yohops.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
  141 + dependencies:
  142 + assert-plus "^1.0.0"
  143 +
  144 +dayjs@^1.8.12:
  145 + version "1.8.12"
  146 + resolved "http://npm.yohops.com/dayjs/-/dayjs-1.8.12.tgz#f9610fb9b115aa2fe2a07e742c130df418cee76a"
  147 +
  148 +define-properties@^1.1.1:
  149 + version "1.1.3"
  150 + resolved "http://npm.yohops.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
  151 + dependencies:
  152 + object-keys "^1.0.12"
  153 +
  154 +delayed-stream@~1.0.0:
  155 + version "1.0.0"
  156 + resolved "http://npm.yohops.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
  157 +
  158 +diagnostics@^1.1.1:
  159 + version "1.1.1"
  160 + resolved "http://npm.yohops.com/diagnostics/-/diagnostics-1.1.1.tgz#cab6ac33df70c9d9a727490ae43ac995a769b22a"
  161 + dependencies:
  162 + colorspace "1.1.x"
  163 + enabled "1.0.x"
  164 + kuler "1.0.x"
  165 +
  166 +ecc-jsbn@~0.1.1:
  167 + version "0.1.2"
  168 + resolved "http://npm.yohops.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
  169 + dependencies:
  170 + jsbn "~0.1.0"
  171 + safer-buffer "^2.1.0"
  172 +
  173 +enabled@1.0.x:
  174 + version "1.0.2"
  175 + resolved "http://npm.yohops.com/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
  176 + dependencies:
  177 + env-variable "0.0.x"
  178 +
  179 +env-variable@0.0.x:
  180 + version "0.0.5"
  181 + resolved "http://npm.yohops.com/env-variable/-/env-variable-0.0.5.tgz#913dd830bef11e96a039c038d4130604eba37f88"
  182 +
  183 +escape-string-regexp@^1.0.5:
  184 + version "1.0.5"
  185 + resolved "http://npm.yohops.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
  186 +
  187 +extend@~3.0.2:
  188 + version "3.0.2"
  189 + resolved "http://npm.yohops.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
  190 +
  191 +extsprintf@1.3.0:
  192 + version "1.3.0"
  193 + resolved "http://npm.yohops.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
  194 +
  195 +extsprintf@^1.2.0:
  196 + version "1.4.0"
  197 + resolved "http://npm.yohops.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
  198 +
  199 +fast-deep-equal@^2.0.1:
  200 + version "2.0.1"
  201 + resolved "http://npm.yohops.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
  202 +
  203 +fast-json-stable-stringify@^2.0.0:
  204 + version "2.0.0"
  205 + resolved "http://npm.yohops.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
  206 +
  207 +fast-safe-stringify@^2.0.4:
  208 + version "2.0.6"
  209 + resolved "http://npm.yohops.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2"
  210 +
  211 +fecha@^2.3.3:
  212 + version "2.3.3"
  213 + resolved "http://npm.yohops.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
  214 +
  215 +file-stream-rotator@^0.4.1:
  216 + version "0.4.1"
  217 + resolved "http://npm.yohops.com/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz#09f67b86d6ea589d20b7852c51c59de55d916d6d"
  218 + dependencies:
  219 + moment "^2.11.2"
  220 +
  221 +forever-agent@~0.6.1:
  222 + version "0.6.1"
  223 + resolved "http://npm.yohops.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
  224 +
  225 +form-data@~2.3.2:
  226 + version "2.3.3"
  227 + resolved "http://npm.yohops.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
  228 + dependencies:
  229 + asynckit "^0.4.0"
  230 + combined-stream "^1.0.6"
  231 + mime-types "^2.1.12"
  232 +
  233 +getpass@^0.1.1:
  234 + version "0.1.7"
  235 + resolved "http://npm.yohops.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
  236 + dependencies:
  237 + assert-plus "^1.0.0"
  238 +
  239 +har-schema@^2.0.0:
  240 + version "2.0.0"
  241 + resolved "http://npm.yohops.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
  242 +
  243 +har-validator@~5.1.0:
  244 + version "5.1.3"
  245 + resolved "http://npm.yohops.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
  246 + dependencies:
  247 + ajv "^6.5.5"
  248 + har-schema "^2.0.0"
  249 +
  250 +has-flag@^3.0.0:
  251 + version "3.0.0"
  252 + resolved "http://npm.yohops.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
  253 +
  254 +http-signature@~1.2.0:
  255 + version "1.2.0"
  256 + resolved "http://npm.yohops.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
  257 + dependencies:
  258 + assert-plus "^1.0.0"
  259 + jsprim "^1.2.2"
  260 + sshpk "^1.7.0"
  261 +
  262 +inherits@^2.0.3, inherits@~2.0.3:
  263 + version "2.0.3"
  264 + resolved "http://npm.yohops.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
  265 +
  266 +is-arrayish@^0.3.1:
  267 + version "0.3.2"
  268 + resolved "http://npm.yohops.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
  269 +
  270 +is-nan@^1.2.1:
  271 + version "1.2.1"
  272 + resolved "http://npm.yohops.com/is-nan/-/is-nan-1.2.1.tgz#9faf65b6fb6db24b7f5c0628475ea71f988401e2"
  273 + dependencies:
  274 + define-properties "^1.1.1"
  275 +
  276 +is-stream@^1.1.0:
  277 + version "1.1.0"
  278 + resolved "http://npm.yohops.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
  279 +
  280 +is-typedarray@~1.0.0:
  281 + version "1.0.0"
  282 + resolved "http://npm.yohops.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
  283 +
  284 +isarray@~1.0.0:
  285 + version "1.0.0"
  286 + resolved "http://npm.yohops.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
  287 +
  288 +isstream@~0.1.2:
  289 + version "0.1.2"
  290 + resolved "http://npm.yohops.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
  291 +
  292 +jsbn@~0.1.0:
  293 + version "0.1.1"
  294 + resolved "http://npm.yohops.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
  295 +
  296 +json-schema-traverse@^0.4.1:
  297 + version "0.4.1"
  298 + resolved "http://npm.yohops.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
  299 +
  300 +json-schema@0.2.3:
  301 + version "0.2.3"
  302 + resolved "http://npm.yohops.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
  303 +
  304 +json-stringify-safe@~5.0.1:
  305 + version "5.0.1"
  306 + resolved "http://npm.yohops.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
  307 +
  308 +jsprim@^1.2.2:
  309 + version "1.4.1"
  310 + resolved "http://npm.yohops.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
  311 + dependencies:
  312 + assert-plus "1.0.0"
  313 + extsprintf "1.3.0"
  314 + json-schema "0.2.3"
  315 + verror "1.10.0"
  316 +
  317 +kuler@1.0.x:
  318 + version "1.0.1"
  319 + resolved "http://npm.yohops.com/kuler/-/kuler-1.0.1.tgz#ef7c784f36c9fb6e16dd3150d152677b2b0228a6"
  320 + dependencies:
  321 + colornames "^1.1.1"
  322 +
  323 +lodash@^4.17.11:
  324 + version "4.17.11"
  325 + resolved "http://npm.yohops.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
  326 +
  327 +logform@^1.6.0:
  328 + version "1.10.0"
  329 + resolved "http://npm.yohops.com/logform/-/logform-1.10.0.tgz#c9d5598714c92b546e23f4e78147c40f1e02012e"
  330 + dependencies:
  331 + colors "^1.2.1"
  332 + fast-safe-stringify "^2.0.4"
  333 + fecha "^2.3.3"
  334 + ms "^2.1.1"
  335 + triple-beam "^1.2.0"
  336 +
  337 +logform@^2.1.1:
  338 + version "2.1.2"
  339 + resolved "http://npm.yohops.com/logform/-/logform-2.1.2.tgz#957155ebeb67a13164069825ce67ddb5bb2dd360"
  340 + dependencies:
  341 + colors "^1.2.1"
  342 + fast-safe-stringify "^2.0.4"
  343 + fecha "^2.3.3"
  344 + ms "^2.1.1"
  345 + triple-beam "^1.3.0"
  346 +
  347 +long-timeout@0.1.1:
  348 + version "0.1.1"
  349 + resolved "http://npm.yohops.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514"
  350 +
  351 +mime-db@~1.38.0:
  352 + version "1.38.0"
  353 + resolved "http://npm.yohops.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
  354 +
  355 +mime-types@^2.1.12, mime-types@~2.1.19:
  356 + version "2.1.22"
  357 + resolved "http://npm.yohops.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd"
  358 + dependencies:
  359 + mime-db "~1.38.0"
  360 +
  361 +moment-timezone@^0.5.23:
  362 + version "0.5.23"
  363 + resolved "http://npm.yohops.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463"
  364 + dependencies:
  365 + moment ">= 2.9.0"
  366 +
  367 +"moment@>= 2.9.0", moment@^2.11.2:
  368 + version "2.24.0"
  369 + resolved "http://npm.yohops.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
  370 +
  371 +ms@^2.1.1:
  372 + version "2.1.1"
  373 + resolved "http://npm.yohops.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
  374 +
  375 +mysql@^2.16.0:
  376 + version "2.16.0"
  377 + resolved "http://npm.yohops.com/mysql/-/mysql-2.16.0.tgz#b23b22ab5de44fc2d5d32bd4f5af6653fc45e2ba"
  378 + dependencies:
  379 + bignumber.js "4.1.0"
  380 + readable-stream "2.3.6"
  381 + safe-buffer "5.1.2"
  382 + sqlstring "2.3.1"
  383 +
  384 +node-lockup@^1.0.3:
  385 + version "1.0.3"
  386 + resolved "http://npm.yohops.com/node-lockup/-/node-lockup-1.0.3.tgz#8472738fad3bde97719428cf2d82b07e3b282fe8"
  387 +
  388 +node-schedule@^1.3.2:
  389 + version "1.3.2"
  390 + resolved "http://npm.yohops.com/node-schedule/-/node-schedule-1.3.2.tgz#d774b383e2a6f6ade59eecc62254aea07cd758cb"
  391 + dependencies:
  392 + cron-parser "^2.7.3"
  393 + long-timeout "0.1.1"
  394 + sorted-array-functions "^1.0.0"
  395 +
  396 +oauth-sign@~0.9.0:
  397 + version "0.9.0"
  398 + resolved "http://npm.yohops.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
  399 +
  400 +object-hash@^1.3.0:
  401 + version "1.3.1"
  402 + resolved "http://npm.yohops.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
  403 +
  404 +object-keys@^1.0.12:
  405 + version "1.1.1"
  406 + resolved "http://npm.yohops.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
  407 +
  408 +one-time@0.0.4:
  409 + version "0.0.4"
  410 + resolved "http://npm.yohops.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"
  411 +
  412 +performance-now@^2.1.0:
  413 + version "2.1.0"
  414 + resolved "http://npm.yohops.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
  415 +
  416 +process-nextick-args@~2.0.0:
  417 + version "2.0.0"
  418 + resolved "http://npm.yohops.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
  419 +
  420 +psl@^1.1.24, psl@^1.1.28:
  421 + version "1.1.31"
  422 + resolved "http://npm.yohops.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
  423 +
  424 +punycode@^1.4.1:
  425 + version "1.4.1"
  426 + resolved "http://npm.yohops.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
  427 +
  428 +punycode@^2.1.0, punycode@^2.1.1:
  429 + version "2.1.1"
  430 + resolved "http://npm.yohops.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
  431 +
  432 +qs@~6.5.2:
  433 + version "6.5.2"
  434 + resolved "http://npm.yohops.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
  435 +
  436 +readable-stream@2.3.6, readable-stream@^2.3.6:
  437 + version "2.3.6"
  438 + resolved "http://npm.yohops.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
  439 + dependencies:
  440 + core-util-is "~1.0.0"
  441 + inherits "~2.0.3"
  442 + isarray "~1.0.0"
  443 + process-nextick-args "~2.0.0"
  444 + safe-buffer "~5.1.1"
  445 + string_decoder "~1.1.1"
  446 + util-deprecate "~1.0.1"
  447 +
  448 +readable-stream@^3.1.1:
  449 + version "3.3.0"
  450 + resolved "http://npm.yohops.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9"
  451 + dependencies:
  452 + inherits "^2.0.3"
  453 + string_decoder "^1.1.1"
  454 + util-deprecate "^1.0.1"
  455 +
  456 +request-promise-core@1.1.2:
  457 + version "1.1.2"
  458 + resolved "http://npm.yohops.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346"
  459 + dependencies:
  460 + lodash "^4.17.11"
  461 +
  462 +request-promise@^4.2.4:
  463 + version "4.2.4"
  464 + resolved "http://npm.yohops.com/request-promise/-/request-promise-4.2.4.tgz#1c5ed0d71441e38ad58c7ce4ea4ea5b06d54b310"
  465 + dependencies:
  466 + bluebird "^3.5.0"
  467 + request-promise-core "1.1.2"
  468 + stealthy-require "^1.1.1"
  469 + tough-cookie "^2.3.3"
  470 +
  471 +request@^2.88.0:
  472 + version "2.88.0"
  473 + resolved "http://npm.yohops.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
  474 + dependencies:
  475 + aws-sign2 "~0.7.0"
  476 + aws4 "^1.8.0"
  477 + caseless "~0.12.0"
  478 + combined-stream "~1.0.6"
  479 + extend "~3.0.2"
  480 + forever-agent "~0.6.1"
  481 + form-data "~2.3.2"
  482 + har-validator "~5.1.0"
  483 + http-signature "~1.2.0"
  484 + is-typedarray "~1.0.0"
  485 + isstream "~0.1.2"
  486 + json-stringify-safe "~5.0.1"
  487 + mime-types "~2.1.19"
  488 + oauth-sign "~0.9.0"
  489 + performance-now "^2.1.0"
  490 + qs "~6.5.2"
  491 + safe-buffer "^5.1.2"
  492 + tough-cookie "~2.4.3"
  493 + tunnel-agent "^0.6.0"
  494 + uuid "^3.3.2"
  495 +
  496 +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
  497 + version "5.1.2"
  498 + resolved "http://npm.yohops.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
  499 +
  500 +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
  501 + version "2.1.2"
  502 + resolved "http://npm.yohops.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
  503 +
  504 +semver@^5.6.0:
  505 + version "5.7.0"
  506 + resolved "http://npm.yohops.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
  507 +
  508 +simple-swizzle@^0.2.2:
  509 + version "0.2.2"
  510 + resolved "http://npm.yohops.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
  511 + dependencies:
  512 + is-arrayish "^0.3.1"
  513 +
  514 +sorted-array-functions@^1.0.0:
  515 + version "1.2.0"
  516 + resolved "http://npm.yohops.com/sorted-array-functions/-/sorted-array-functions-1.2.0.tgz#43265b21d6e985b7df31621b1c11cc68d8efc7c3"
  517 +
  518 +sqlstring@2.3.1:
  519 + version "2.3.1"
  520 + resolved "http://npm.yohops.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
  521 +
  522 +sshpk@^1.7.0:
  523 + version "1.16.1"
  524 + resolved "http://npm.yohops.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
  525 + dependencies:
  526 + asn1 "~0.2.3"
  527 + assert-plus "^1.0.0"
  528 + bcrypt-pbkdf "^1.0.0"
  529 + dashdash "^1.12.0"
  530 + ecc-jsbn "~0.1.1"
  531 + getpass "^0.1.1"
  532 + jsbn "~0.1.0"
  533 + safer-buffer "^2.0.2"
  534 + tweetnacl "~0.14.0"
  535 +
  536 +stack-trace@0.0.x:
  537 + version "0.0.10"
  538 + resolved "http://npm.yohops.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
  539 +
  540 +stealthy-require@^1.1.1:
  541 + version "1.1.1"
  542 + resolved "http://npm.yohops.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
  543 +
  544 +string_decoder@^1.1.1:
  545 + version "1.2.0"
  546 + resolved "http://npm.yohops.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
  547 + dependencies:
  548 + safe-buffer "~5.1.0"
  549 +
  550 +string_decoder@~1.1.1:
  551 + version "1.1.1"
  552 + resolved "http://npm.yohops.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
  553 + dependencies:
  554 + safe-buffer "~5.1.0"
  555 +
  556 +supports-color@^5.3.0:
  557 + version "5.5.0"
  558 + resolved "http://npm.yohops.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
  559 + dependencies:
  560 + has-flag "^3.0.0"
  561 +
  562 +text-hex@1.0.x:
  563 + version "1.0.0"
  564 + resolved "http://npm.yohops.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
  565 +
  566 +tough-cookie@^2.3.3:
  567 + version "2.5.0"
  568 + resolved "http://npm.yohops.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
  569 + dependencies:
  570 + psl "^1.1.28"
  571 + punycode "^2.1.1"
  572 +
  573 +tough-cookie@~2.4.3:
  574 + version "2.4.3"
  575 + resolved "http://npm.yohops.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
  576 + dependencies:
  577 + psl "^1.1.24"
  578 + punycode "^1.4.1"
  579 +
  580 +triple-beam@^1.2.0, triple-beam@^1.3.0:
  581 + version "1.3.0"
  582 + resolved "http://npm.yohops.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9"
  583 +
  584 +tunnel-agent@^0.6.0:
  585 + version "0.6.0"
  586 + resolved "http://npm.yohops.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
  587 + dependencies:
  588 + safe-buffer "^5.0.1"
  589 +
  590 +tweetnacl@^0.14.3, tweetnacl@~0.14.0:
  591 + version "0.14.5"
  592 + resolved "http://npm.yohops.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
  593 +
  594 +uri-js@^4.2.2:
  595 + version "4.2.2"
  596 + resolved "http://npm.yohops.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
  597 + dependencies:
  598 + punycode "^2.1.0"
  599 +
  600 +util-deprecate@^1.0.1, util-deprecate@~1.0.1:
  601 + version "1.0.2"
  602 + resolved "http://npm.yohops.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
  603 +
  604 +uuid@^3.3.2:
  605 + version "3.3.2"
  606 + resolved "http://npm.yohops.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
  607 +
  608 +verror@1.10.0:
  609 + version "1.10.0"
  610 + resolved "http://npm.yohops.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
  611 + dependencies:
  612 + assert-plus "^1.0.0"
  613 + core-util-is "1.0.2"
  614 + extsprintf "^1.2.0"
  615 +
  616 +winston-compat@^0.1.4:
  617 + version "0.1.4"
  618 + resolved "http://npm.yohops.com/winston-compat/-/winston-compat-0.1.4.tgz#599b4ce807ffe728713ecc25ede3f6b89425b739"
  619 + dependencies:
  620 + cycle "~1.0.3"
  621 + logform "^1.6.0"
  622 + triple-beam "^1.2.0"
  623 +
  624 +winston-daily-rotate-file@^3.8.0:
  625 + version "3.8.0"
  626 + resolved "http://npm.yohops.com/winston-daily-rotate-file/-/winston-daily-rotate-file-3.8.0.tgz#887de6dcfad798374d4f4ed0598afd587541ffa4"
  627 + dependencies:
  628 + file-stream-rotator "^0.4.1"
  629 + object-hash "^1.3.0"
  630 + semver "^5.6.0"
  631 + triple-beam "^1.3.0"
  632 + winston-compat "^0.1.4"
  633 + winston-transport "^4.2.0"
  634 +
  635 +winston-transport@^4.2.0, winston-transport@^4.3.0:
  636 + version "4.3.0"
  637 + resolved "http://npm.yohops.com/winston-transport/-/winston-transport-4.3.0.tgz#df68c0c202482c448d9b47313c07304c2d7c2c66"
  638 + dependencies:
  639 + readable-stream "^2.3.6"
  640 + triple-beam "^1.2.0"
  641 +
  642 +winston@^3.2.1:
  643 + version "3.2.1"
  644 + resolved "http://npm.yohops.com/winston/-/winston-3.2.1.tgz#63061377976c73584028be2490a1846055f77f07"
  645 + dependencies:
  646 + async "^2.6.1"
  647 + diagnostics "^1.1.1"
  648 + is-stream "^1.1.0"
  649 + logform "^2.1.1"
  650 + one-time "0.0.4"
  651 + readable-stream "^3.1.1"
  652 + stack-trace "0.0.x"
  653 + triple-beam "^1.3.0"
  654 + winston-transport "^4.3.0"
  655 +
  656 +yoho-md5@^2.1.0:
  657 + version "2.1.0"
  658 + resolved "http://npm.yohops.com/yoho-md5/-/yoho-md5-2.1.0.tgz#f0c00d343f775e77952ebce0826863ac52e0ad50"