From 4610c50ea003cfdd47a1802774f42c4d5a2f4a92 Mon Sep 17 00:00:00 2001 From: binaryify Date: Sun, 27 May 2018 13:22:40 +0800 Subject: [PATCH 01/12] update to v2.12.0 --- CHANGELOG.MD | 3 +++ README.MD | 37 ------------------------------------- docs/README.md | 2 ++ package.json | 2 +- 4 files changed, 6 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 50c8d14..cbbc05f 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,7 @@ # 更新日志 +### 2.12.0 | 2018.05.27 +更新文档,优化歌单详情接口 + ### 2.11.1 | 2018.05.24 更新文档,优化`/dj/program`接口 diff --git a/README.MD b/README.MD index 80015f0..a54e551 100644 --- a/README.MD +++ b/README.MD @@ -18,43 +18,6 @@ [sqaiyan/netmusic-node](https://github.com/sqaiyan/netmusic-node) -## 版本新特性 -### 2.11.0 | 2018.05.21 -增加收藏歌手列表&订阅电台列表 - -### 2.10.0 | 2018.05.17 -歌单操作调整为批量操作 - -### 2.9.8 | 2018.05.10 -新增歌手分类列表,收藏/取消收藏歌手接口,新增更新用户信息,更新歌单接口 - -### 2.9.6 | 2018.05.08 -新增发送私信相关接口,新增新建歌单,收藏/取消收藏歌单接口 - -### 2.9.4 | 2018.05.04 -新增热搜接口,更新 banner 接口 - -### 2.9.0 | 2018.01.26 - -docker 构建文件的一些增强以及增加访问日志和调试输出 - -### 2.8.1 | 2018.01.04 - -添加了 proxy 功能 - -### 2.6.4 | 2017.7.16 - -添加缓存机制和随机 UA 机制 感谢[@u3u](https://github.com/u3u) -[issue:77](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/77) 优化请求 -代码 感谢 [@huhuime](https://github.com/huhuime) -[issue:83](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/83) - -### 2.5.0 | 2017.4.29 - -增加 mv/ 专辑 / 歌单评论接口 , 增加云盘相关接口 , 增加获取用户动态 / 信息接口 , -增加关注 / 粉丝列表接口 , 增加收藏歌单接口 , 增加相似 mv/ 歌曲 / 用户接口 , 增加 -banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评论接口 , 更新文档 - ## 功能特性 1. 登录 diff --git a/docs/README.md b/docs/README.md index 50256b3..beefd99 100644 --- a/docs/README.md +++ b/docs/README.md @@ -545,6 +545,8 @@ category Code 取值: **必选参数 :** `id` : 歌单 id +**可选参数 :** `s` : 歌单最近的s个收藏者 + **接口地址 :** `/playlist/detail` **调用例子 :** `/playlist/detail?id=24381616` diff --git a/package.json b/package.json index ae6cde2..3689dd6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.11.1", + "version": "2.12.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", From 7b9b1513190d7bb05dd215a134e0491d298c9025 Mon Sep 17 00:00:00 2001 From: dds_feng Date: Thu, 31 May 2018 11:53:06 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E8=B0=83=E6=95=B4=20=E5=AF=B9=E5=A4=96?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=20=E4=B8=8E=20router=20=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E4=BB=B6=E7=9A=84=E5=AF=B9=E5=BA=94=E5=85=B3?= =?UTF-8?q?=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 10 +++++----- router/{artists_desc.js => artist_desc.js} | 0 router/{artists_mv.js => artist_mv.js} | 0 router/{simi_artists.js => simi_artist.js} | 0 router/{top_songs.js => top_song.js} | 0 router/{user_playrecord.js => user_record.js} | 0 6 files changed, 5 insertions(+), 5 deletions(-) rename router/{artists_desc.js => artist_desc.js} (100%) rename router/{artists_mv.js => artist_mv.js} (100%) rename router/{simi_artists.js => simi_artist.js} (100%) rename router/{top_songs.js => top_song.js} (100%) rename router/{user_playrecord.js => user_record.js} (100%) diff --git a/app.js b/app.js index ef06903..40eb36b 100644 --- a/app.js +++ b/app.js @@ -42,10 +42,10 @@ app.use("/artists", require("./router/artists")); app.use("/artist/album", require("./router/artist_album")); //艺术家-信息 -app.use("/artist/desc", require("./router/artists_desc")); +app.use("/artist/desc", require("./router/artist_desc")); //艺术家-mv -app.use("/artist/mv", require("./router/artists_mv")); +app.use("/artist/mv", require("./router/artist_mv")); // 收藏歌手 app.use("/artist/sub", require("./router/artist_sub")); @@ -220,7 +220,7 @@ app.use("/simi/mv", require("./router/simi_mv")); app.use("/simi/user", require("./router/simi_user")); //相似歌手 -app.use("/simi/artist", require("./router/simi_artists")); +app.use("/simi/artist", require("./router/simi_artist")); // 获取音乐详情 app.use("/song/detail", require("./router/song_detail")); @@ -244,7 +244,7 @@ app.use( require("./router/top_playlist_highquality") ); -app.use("/top/song", require("./router/top_songs")); +app.use("/top/song", require("./router/top_song")); app.use("/toplist", require("./router/toplist")); @@ -276,7 +276,7 @@ app.use("/user/follows", require("./router/user_follows")); app.use("/user/subcount", require("./router/user_subcount")); -app.use("/user/record", require("./router/user_playrecord")); +app.use("/user/record", require("./router/user_record")); app.use("/user/update", require("./router/user_update")); diff --git a/router/artists_desc.js b/router/artist_desc.js similarity index 100% rename from router/artists_desc.js rename to router/artist_desc.js diff --git a/router/artists_mv.js b/router/artist_mv.js similarity index 100% rename from router/artists_mv.js rename to router/artist_mv.js diff --git a/router/simi_artists.js b/router/simi_artist.js similarity index 100% rename from router/simi_artists.js rename to router/simi_artist.js diff --git a/router/top_songs.js b/router/top_song.js similarity index 100% rename from router/top_songs.js rename to router/top_song.js diff --git a/router/user_playrecord.js b/router/user_record.js similarity index 100% rename from router/user_playrecord.js rename to router/user_record.js From b8d9fac78f6ff09957a8f7126f721d7aac538902 Mon Sep 17 00:00:00 2001 From: dds_feng Date: Thu, 31 May 2018 12:32:33 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=B3=A8=E5=86=8C=20ro?= =?UTF-8?q?uter=20=E7=9B=AE=E5=BD=95=E4=B8=AD=E7=9A=84js=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=BA=E5=AF=B9=E5=BA=94=E7=9A=84=E8=B7=AF=E7=94=B1,=20?= =?UTF-8?q?=E5=85=8D=E9=99=A4=E5=9C=A8app.js=E4=B8=AD=E4=B8=8D=E5=81=9C?= =?UTF-8?q?=E7=9A=84=E6=B7=BB=E5=8A=A0=20router=20=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 290 +++++++-------------------------------------------------- 1 file changed, 32 insertions(+), 258 deletions(-) diff --git a/app.js b/app.js index 40eb36b..40fec73 100644 --- a/app.js +++ b/app.js @@ -1,7 +1,7 @@ const express = require("express"); const apicache = require("apicache"); const path = require("path"); - +const fs = require("fs"); const app = express(); let cache = apicache.middleware; @@ -32,263 +32,37 @@ app.use(function(req, res, next) { next(); }); -// 获取专辑内容 -app.use("/album", require("./router/album")); - -// 获取歌手单曲 -app.use("/artists", require("./router/artists")); - -// 获取歌手专辑列表 -app.use("/artist/album", require("./router/artist_album")); - -//艺术家-信息 -app.use("/artist/desc", require("./router/artist_desc")); - -//艺术家-mv -app.use("/artist/mv", require("./router/artist_mv")); - -// 收藏歌手 -app.use("/artist/sub", require("./router/artist_sub")); - -// 取消收藏歌手 -app.use("/artist/unsub", require("./router/artist_unsub")); - -// 已关注歌手 -app.use("/artist/sublist", require("./router/artist_sublist")); - -// 歌手分类 -app.use("/artist/list", require("./router/artist_list")); - -// 获取 banner -app.use("/banner", require("./router/banner")); - -app.use("/check/music", require("./router/check_music")); - -app.use("/comment/music", require("./router/comment_music")); - -app.use("/comment/mv", require("./router/comment_mv")); - -app.use("/comment/album", require("./router/comment_album")); - -app.use("/comment/playlist", require("./router/comment_playlist")); - -//未知 api -app.use("/comment/like", require("./router/comment_like")); - -app.use("/comment/dj", require("./router/comment_dj")); - -//签到 -app.use("/daily_signin", require("./router/daily_signin")); - -//djradio detail -app.use("/dj/detail", require("./router/dj_detail")); - -//dj主播 radio -app.use("/dj/program", require("./router/dj_program")); - -app.use("/dj/program/detail", require("./router/dj_program_detail")); - -app.use("/dj/sub", require("./router/dj_sub")); - -app.use("/dj/catelist", require("./router/dj_catelist")); - -app.use("/dj/hot", require("./router/dj_hot")); - -app.use("/dj/sublist", require("./router/dj_sublist")); - -// 精选电台 -app.use("/dj/recommend", require("./router/dj_recommend")); - -//精选电台-分类电台 -app.use("/dj/recommend/type", require("./router/dj_recommend_type")); - -//获取动态 -app.use("/event", require("./router/event")); - -//垃圾桶 -app.use("/fm_trash", require("./router/fm_trash")); - -app.use("/follow", require("./router/follow")); - -// 喜欢歌曲 -app.use("/like", require("./router/like")); - -app.use("/likelist", require("./router/likelist")); - -//手机登录 -app.use("/login/cellphone", require("./router/loginCellphone")); - -//邮箱登录 -app.use("/login", require("./router/login")); - -//登录刷新 -app.use("/login/refresh", require("./router/login_refresh")); - -// 不明 api -app.use("/log/web", require("./router/logWeb")); - -// 获取歌词 -app.use("/lyric", require("./router/lyric")); - -// 获取音乐 url -app.use("/music/url", require("./router/musicUrl")); - -//最新 mv -app.use("/mv/first", require("./router/mv_first")); - -//播放 mv -app.use("/mv/url", require("./router/mv_url")); - -//mv -app.use("/mv", require("./router/mv")); - -// 私人 FM -app.use("/personal_fm", require("./router/personal_fm")); - -//推荐歌单 -app.use("/personalized", require("./router/personalized")); - -//推荐dj -app.use("/personalized/djprogram", require("./router/personalized_djprogram")); - -//推荐新音乐 -app.use("/personalized/newsong", require("./router/personalized_newsong")); - -//独家放送 -app.use( - "/personalized/privatecontent", - require("./router/personalized_privatecontent") -); - -//推荐mv -app.use("/personalized/mv", require("./router/personalized_mv")); - -// 获取歌单内列表 -app.use("/playlist/detail", require("./router/playlist_detail")); - -//收藏单曲到歌单,从歌单删除歌曲 op=del,add;pid=歌单id,tracks=歌曲id -app.use("/playlist/tracks", require("./router/playlist_tracks")); - -// 热门歌单分类 -app.use("/playlist/hot", require("./router/playlist_hot")); - -// 全部歌单分类 -app.use("/playlist/catlist", require("./router/playlist_catlist")); - -// 新建歌单 -app.use("/playlist/create", require("./router/playlist_create")); - -// 收藏/取消收藏歌单 -app.use("/playlist/subscribe", require("./router/playlist_subscribe")); - -//推荐节目 -app.use("/program/recommend", require("./router/program_recommend")); - -// 获取每日推荐歌曲 -app.use("/recommend/songs", require("./router/recommend_songs")); - -// 获取每日推荐歌单 -app.use("/recommend/resource", require("./router/recommend_resource")); - -//取消推荐 -app.use("/recommend/dislike", require("./router/recommend_dislike")); - -app.use("/resource/like", require("./router/resource_like")); - -// 搜索 -app.use("/search", require("./router/search")); - -// 热搜 -app.use("/search/hot", require("./router/search_hot.js")); - -//搜索 multimatch -app.use("/search/multimatch", require("./router/search_multimatch")); - -// 搜索 suggest,搜索结果包含单曲,歌手,歌单,mv信息 -app.use("/search/suggest", require("./router/search_suggest")); - -//simi ,相似歌单 -app.use("/simi/playlist", require("./router/simi_playlist")); - -//simi ,相似歌曲 -app.use("/simi/song", require("./router/simi_song")); - -//相似 mv -app.use("/simi/mv", require("./router/simi_mv")); - -//simi ,相似关注的用户 -app.use("/simi/user", require("./router/simi_user")); - -//相似歌手 -app.use("/simi/artist", require("./router/simi_artist")); - -// 获取音乐详情 -app.use("/song/detail", require("./router/song_detail")); - -// 新碟上架 http://music.163.com/#/discover/album/ -app.use("/top/album", require("./router/top_album")); - -// 热门歌手 http://music.163.com/#/discover/artist/ -app.use("/top/artists", require("./router/top_artists")); - -app.use("/top/list", require("./router/top_list")); - -app.use("/top/mv", require("./router/top_mv")); - -//分类歌单 -app.use("/top/playlist", require("./router/top_playlist")); - -//精品歌单 -app.use( - "/top/playlist/highquality", - require("./router/top_playlist_highquality") -); - -app.use("/top/song", require("./router/top_song")); - -app.use("/toplist", require("./router/toplist")); - -app.use("/toplist/artist", require("./router/toplist_artist")); - -app.use("/toplist/detail", require("./router/toplist_detail")); - -// 获取用户歌单 -app.use("/user/playlist", require("./router/user_playlist")); - -// 获取用户电台 -app.use("/user/audio", require("./router/user_audio")); - -//云盘数据 -app.use("/user/cloud", require("./router/user_cloud")); - -//云盘数据详情? 暂时不要使用 -app.use("/user/cloud/search", require("./router/user_cloud_search")); -//用户动态 -app.use("/user/event", require("./router/user_event")); - -app.use("/user/detail", require("./router/user_detail")); - -app.use("/user/dj", require("./router/user_dj")); - -app.use("/user/followeds", require("./router/user_followeds")); - -app.use("/user/follows", require("./router/user_follows")); - -app.use("/user/subcount", require("./router/user_subcount")); - -app.use("/user/record", require("./router/user_record")); - -app.use("/user/update", require("./router/user_update")); - -app.use("/send/text", require("./router/send_text")); - -app.use("/send/playlist", require("./router/send_playlist")); - -app.use("/playlist/create", require("./router/playlist_create")); - -app.use("/playlist/subscribe", require("./router/playlist_subscribe")); - -app.use("/playlist/update", require("./router/playlist_update")); +// 因为这几个文件对外所注册的路由 和 其他文件对外注册的路由规则不一样, 所以专门写个MAP对这些文件做特殊处理 +const UnusualRouteFileMap = { + // key 为文件名, value 为对外注册的路由 + "daily_signin.js": "/daily_signin", + "fm_trash.js": "/fm_trash", + "personal_fm.js": "/personal_fm" +}; + +// 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由 +fs.readdirSync("./router/").forEach(file => { + if (/\.js$/i.test(file) === false) { + return; + } + + let route; + + if (typeof UnusualRouteFileMap[file] !== "undefined") { + route = UnusualRouteFileMap[file]; + } else { + route = + "/" + + file + .replace(/\.js$/i, "") + .replace(/_/g, "/") + .replace(/[A-Z]/g, a => { + return "/" + a.toLowerCase(); + }); + } + + app.use(route, require("./router/" + file)); +}); const port = process.env.PORT || 3000; From f34dce37b48d91ccc02fdc7dca28f4b28f8d03c7 Mon Sep 17 00:00:00 2001 From: dds_feng Date: Thu, 31 May 2018 12:38:19 +0800 Subject: [PATCH 04/12] =?UTF-8?q?util=20=E4=B8=AD=E5=AF=BC=E5=87=BA=20requ?= =?UTF-8?q?est=20=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- util/util.js | 1 + 1 file changed, 1 insertion(+) diff --git a/util/util.js b/util/util.js index 7326841..cc1454e 100644 --- a/util/util.js +++ b/util/util.js @@ -114,6 +114,7 @@ function createRequest(path, method, data) { }); } module.exports = { + request, createWebAPIRequest, createRequest }; From cc2783a2482604c3a483dc65b007d84cbbc110b4 Mon Sep 17 00:00:00 2001 From: dds_feng Date: Thu, 31 May 2018 13:11:18 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E7=AE=80=E5=8C=96=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 6 +++- router/album.js | 29 +++++++--------- router/artist_album.js | 27 ++++++--------- router/artist_desc.js | 26 ++++++-------- router/artist_list.js | 11 ++---- router/artist_mv.js | 26 ++++++-------- router/artist_sub.js | 11 ++---- router/artist_sublist.js | 11 ++---- router/artist_unsub.js | 11 ++---- router/artists.js | 11 ++---- router/banner.js | 10 ++---- router/check_music.js | 34 ++++++++----------- router/comment_album.js | 28 ++++++--------- router/comment_dj.js | 28 ++++++--------- router/comment_like.js | 47 ++++++++++++------------- router/comment_music.js | 10 ++---- router/comment_mv.js | 28 ++++++--------- router/comment_playlist.js | 28 ++++++--------- router/daily_signin.js | 28 ++++++--------- router/dj_catelist.js | 28 ++++++--------- router/dj_detail.js | 31 +++++++---------- router/dj_hot.js | 28 ++++++--------- router/dj_program.js | 11 ++---- router/dj_program_detail.js | 28 ++++++--------- router/dj_recommend.js | 29 +++++++--------- router/dj_recommend_type.js | 29 +++++++--------- router/dj_sub.js | 28 ++++++--------- router/dj_sublist.js | 10 ++---- router/event.js | 27 ++++++--------- router/fm_trash.js | 31 +++++++---------- router/follow.js | 30 +++++++--------- router/like.js | 33 ++++++++---------- router/likelist.js | 26 ++++++-------- router/logWeb.js | 27 ++++++--------- router/login.js | 49 +++++++++++++-------------- router/loginCellphone.js | 10 ++---- router/login_refresh.js | 31 +++++++---------- router/lyric.js | 29 +++++++--------- router/musicUrl.js | 35 ++++++++----------- router/mv.js | 27 ++++++--------- router/mv_first.js | 25 ++++++-------- router/mv_url.js | 28 ++++++--------- router/personal_fm.js | 27 ++++++--------- router/personalized.js | 11 ++---- router/personalized_djprogram.js | 27 ++++++--------- router/personalized_mv.js | 27 ++++++--------- router/personalized_newsong.js | 29 +++++++--------- router/personalized_privatecontent.js | 27 ++++++--------- router/playlist_catlist.js | 29 +++++++--------- router/playlist_create.js | 10 ++---- router/playlist_detail.js | 12 ++----- router/playlist_hot.js | 27 ++++++--------- router/playlist_subscribe.js | 10 ++---- router/playlist_tracks.js | 9 ++--- router/playlist_update.js | 10 ++---- router/program_recommend.js | 29 +++++++--------- router/recommend_dislike.js | 27 ++++++--------- router/recommend_resource.js | 27 ++++++--------- router/recommend_songs.js | 27 ++++++--------- router/resource_like.js | 28 ++++++--------- router/search.js | 11 ++---- router/search_hot.js | 11 ++---- router/search_multimatch.js | 31 +++++++---------- router/search_suggest.js | 31 +++++++---------- router/send_playlist.js | 10 ++---- router/send_text.js | 10 ++---- router/simi_artist.js | 26 ++++++-------- router/simi_mv.js | 25 ++++++-------- router/simi_playlist.js | 11 ++---- router/simi_song.js | 11 ++---- router/simi_user.js | 11 ++---- router/song_detail.js | 35 ++++++++----------- router/top_album.js | 28 +++++++-------- router/top_artists.js | 27 ++++++--------- router/top_list.js | 10 ++---- router/top_mv.js | 30 +++++++--------- router/top_playlist.js | 32 +++++++---------- router/top_playlist_highquality.js | 11 ++---- router/top_song.js | 10 ++---- router/toplist.js | 28 ++++++--------- router/toplist_artist.js | 28 ++++++--------- router/toplist_detail.js | 28 ++++++--------- router/user_audio.js | 33 ++++++++---------- router/user_cloud.js | 31 +++++++---------- router/user_cloud_search.js | 31 +++++++---------- router/user_detail.js | 28 ++++++--------- router/user_dj.js | 30 +++++++--------- router/user_event.js | 29 +++++++--------- router/user_followeds.js | 28 ++++++--------- router/user_follows.js | 28 ++++++--------- router/user_playlist.js | 11 ++---- router/user_record.js | 26 ++++++-------- router/user_subcount.js | 26 ++++++-------- router/user_update.js | 10 ++---- 94 files changed, 851 insertions(+), 1348 deletions(-) diff --git a/app.js b/app.js index 40fec73..1043fb2 100644 --- a/app.js +++ b/app.js @@ -40,6 +40,10 @@ const UnusualRouteFileMap = { "personal_fm.js": "/personal_fm" }; +// 简化 路由 导出方式, 由这里统一对 router 目录中导出的路由做包装, 路由实际对应的文件只专注做它该做的事情, 不用重复写样板代码 +const { createWebAPIRequest, request } = require("./util/util"); +const Wrap = fn => (req, res) => fn(req, res, createWebAPIRequest, request); + // 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由 fs.readdirSync("./router/").forEach(file => { if (/\.js$/i.test(file) === false) { @@ -61,7 +65,7 @@ fs.readdirSync("./router/").forEach(file => { }); } - app.use(route, require("./router/" + file)); + app.use(route, Wrap(require("./router/" + file))); }); const port = process.env.PORT || 3000; diff --git a/router/album.js b/router/album.js index 37fdd48..fd0d90d 100644 --- a/router/album.js +++ b/router/album.js @@ -1,24 +1,19 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 获取专辑内容 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } - const id = req.query.id + csrf_token: "" + }; + const id = req.query.id; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/v1/album/${id}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/artist_album.js b/router/artist_album.js index 58f4747..cbded4d 100644 --- a/router/artist_album.js +++ b/router/artist_album.js @@ -1,25 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.id +// 获取歌手专辑列表 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.id; const data = { offset: req.query.offset || 0, total: true, limit: req.query.limit || 30, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/artist/albums/${id}`, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/artist_desc.js b/router/artist_desc.js index 481d6ec..9ab800a 100644 --- a/router/artist_desc.js +++ b/router/artist_desc.js @@ -1,23 +1,17 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.id +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.id; const data = { id, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/artist/introduction`, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/artist_list.js b/router/artist_list.js index b150dc7..0c90a61 100644 --- a/router/artist_list.js +++ b/router/artist_list.js @@ -1,9 +1,6 @@ //分类歌单 -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 歌手分类 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; // categoryCode 取值 @@ -42,6 +39,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/artist_mv.js b/router/artist_mv.js index 549057e..79ec920 100644 --- a/router/artist_mv.js +++ b/router/artist_mv.js @@ -1,26 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.id +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.id; const data = { artistId: id, total: true, offset: req.query.offset, limit: req.query.limit, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/artist/mvs`, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/artist_sub.js b/router/artist_sub.js index 213e41f..7045529 100644 --- a/router/artist_sub.js +++ b/router/artist_sub.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 收藏歌手 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { artistId: `${req.query.id}` @@ -18,6 +15,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/artist_sublist.js b/router/artist_sublist.js index 2a64328..9ba1485 100644 --- a/router/artist_sublist.js +++ b/router/artist_sublist.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 已关注歌手 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { @@ -21,6 +18,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/artist_unsub.js b/router/artist_unsub.js index 97cec49..82b6390 100644 --- a/router/artist_unsub.js +++ b/router/artist_unsub.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 取消收藏歌手 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { artistId: `${req.query.id}`, @@ -19,6 +16,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/artists.js b/router/artists.js index 8b60810..09a7070 100644 --- a/router/artists.js +++ b/router/artists.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 获取歌手单曲 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const id = req.query.id; @@ -21,6 +18,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/banner.js b/router/banner.js index 419ecae..3f6c7fd 100644 --- a/router/banner.js +++ b/router/banner.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const request = require("request"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const options = { url: "http://music.163.com/discover", method: "GET", @@ -25,6 +21,4 @@ router.get("/", (req, res) => { } } }); -}); - -module.exports = router; +}; diff --git a/router/check_music.js b/router/check_music.js index 48ec768..782cfa3 100644 --- a/router/check_music.js +++ b/router/check_music.js @@ -1,33 +1,27 @@ -const express = require('express') -const router = express() -const request = require('request') -const { createWebAPIRequest } = require('../util/util') -router.get('/', (req, res) => { - const id = parseInt(req.query.id) - const br = parseInt(req.query.br || 999000) +module.exports = (req, res, createWebAPIRequest, request) => { + const id = parseInt(req.query.id); + const br = parseInt(req.query.br || 999000); const data = { ids: [id], br: br, - csrf_token: '' - } - const cookie = req.get('Cookie') ? req.get('Cookie') : '' + csrf_token: "" + }; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; createWebAPIRequest( - 'music.163.com', - '/weapi/song/enhance/player/url', - 'POST', + "music.163.com", + "/weapi/song/enhance/player/url", + "POST", data, cookie, music_req => { if (JSON.parse(music_req).code == 200) { - return res.send({ success: true, message: 'ok' }) + return res.send({ success: true, message: "ok" }); } - return res.send({ success: false, message: '亲爱的,暂无版权' }) + return res.send({ success: false, message: "亲爱的,暂无版权" }); }, err => { - res.status(502).send('fetch error') + res.status(502).send("fetch error"); } - ) -}) - -module.exports = router + ); +}; diff --git a/router/comment_album.js b/router/comment_album.js index c2be605..6b8deb4 100644 --- a/router/comment_album.js +++ b/router/comment_album.js @@ -1,27 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const rid = req.query.id - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const rid = req.query.id; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, rid: rid, limit: req.query.limit || 20, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/v1/resource/comments/R_AL_3_${rid}/?csrf_token=`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/comment_dj.js b/router/comment_dj.js index 6236741..9f0e9a7 100644 --- a/router/comment_dj.js +++ b/router/comment_dj.js @@ -1,27 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const rid = req.query.id - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const rid = req.query.id; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, rid: rid, limit: req.query.limit || 20, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/v1/resource/comments/A_DJ_1_${rid}/?csrf_token=`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/comment_like.js b/router/comment_like.js index 92405af..978847b 100644 --- a/router/comment_like.js +++ b/router/comment_like.js @@ -1,37 +1,32 @@ //comment like -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const cid = req.query.cid //评论 id - const id = req.query.id // 歌曲 id +//未知 api +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const cid = req.query.cid; //评论 id + const id = req.query.id; // 歌曲 id const typeMap = { - 0: 'R_SO_4_', //歌曲 - 1: 'R_MV_5_', //mv - 2: 'A_PL_0_', //歌单 - 3: 'R_AL_3_', //专辑 - 4: 'A_DJ_1_' //电台 - } - const type = typeMap[req.query.type] + 0: "R_SO_4_", //歌曲 + 1: "R_MV_5_", //mv + 2: "A_PL_0_", //歌单 + 3: "R_AL_3_", //专辑 + 4: "A_DJ_1_" //电台 + }; + const type = typeMap[req.query.type]; const data = { threadId: `${type}${id}`, commentId: cid, - csrf_token: '' - } - const action = req.query.t == 1 ? 'like' : 'unlike' + csrf_token: "" + }; + const action = req.query.t == 1 ? "like" : "unlike"; - const url = `/weapi/v1/comment/${action}` + const url = `/weapi/v1/comment/${action}`; createWebAPIRequest( - 'music.163.com', + "music.163.com", url, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/comment_music.js b/router/comment_music.js index 8c5697c..8a44332 100644 --- a/router/comment_music.js +++ b/router/comment_music.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const rid = req.query.id; const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { @@ -22,6 +18,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send(err.message) ); -}); - -module.exports = router; +}; diff --git a/router/comment_mv.js b/router/comment_mv.js index dba7216..49a4688 100644 --- a/router/comment_mv.js +++ b/router/comment_mv.js @@ -1,27 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const rid = req.query.id - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const rid = req.query.id; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, rid: rid, limit: req.query.limit || 20, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/v1/resource/comments/R_MV_5_${rid}/?csrf_token=`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/comment_playlist.js b/router/comment_playlist.js index 88f0585..3f3d9df 100644 --- a/router/comment_playlist.js +++ b/router/comment_playlist.js @@ -1,27 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const rid = req.query.id - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const rid = req.query.id; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, rid: rid, limit: req.query.limit || 20, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/v1/resource/comments/A_PL_0_${rid}/?csrf_token=`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/daily_signin.js b/router/daily_signin.js index 026d8fa..555f6b0 100644 --- a/router/daily_signin.js +++ b/router/daily_signin.js @@ -1,28 +1,22 @@ // 签到 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - let type = req.query.type || 0 //0为安卓端签到 3点经验,1为网页签到,2点经验 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + let type = req.query.type || 0; //0为安卓端签到 3点经验,1为网页签到,2点经验 const data = { - csrf_token: '', + csrf_token: "", type - } + }; // {'android': {'point': 3, 'code': 200}, 'web': {'point': 2, 'code': 200}} // {'android': {'code': -2, 'msg': '重复签到'}, 'web': {'code': -2, 'msg': '重复签到'}} // 'android': {'code': 301}, 'web': {'code': 301}} createWebAPIRequest( - 'music.163.com', - '/weapi/point/dailyTask', - 'POST', + "music.163.com", + "/weapi/point/dailyTask", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_catelist.js b/router/dj_catelist.js index 4d79c21..677b0ec 100644 --- a/router/dj_catelist.js +++ b/router/dj_catelist.js @@ -1,23 +1,17 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/djradio/category/get', - 'POST', + "music.163.com", + "/weapi/djradio/category/get", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_detail.js b/router/dj_detail.js index c486094..d636f25 100644 --- a/router/dj_detail.js +++ b/router/dj_detail.js @@ -1,25 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const rid = req.query.rid - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//djradio detail +module.exports = (req, res, createWebAPIRequest, request) => { + const rid = req.query.rid; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { id: rid, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/djradio/get', - 'POST', + "music.163.com", + "/weapi/djradio/get", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_hot.js b/router/dj_hot.js index b4c445f..ffd66e7 100644 --- a/router/dj_hot.js +++ b/router/dj_hot.js @@ -1,9 +1,5 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { cat: req.query.type, cateId: req.query.type, @@ -12,19 +8,17 @@ router.get('/', (req, res) => { category: req.query.type, limit: req.query.limit, offset: req.query.offset, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/djradio/hot/v1', - 'POST', + "music.163.com", + "/weapi/djradio/hot/v1", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_program.js b/router/dj_program.js index cf950aa..b13dcde 100644 --- a/router/dj_program.js +++ b/router/dj_program.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +//dj主播 radio +module.exports = (req, res, createWebAPIRequest, request) => { const rid = req.query.rid; const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { @@ -23,6 +20,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/dj_program_detail.js b/router/dj_program_detail.js index f938ba9..75cf0b8 100644 --- a/router/dj_program_detail.js +++ b/router/dj_program_detail.js @@ -1,24 +1,18 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { id: req.query.id, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/dj/program/detail', - 'POST', + "music.163.com", + "/weapi/dj/program/detail", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_recommend.js b/router/dj_recommend.js index d31e6fb..8bff7be 100644 --- a/router/dj_recommend.js +++ b/router/dj_recommend.js @@ -1,23 +1,18 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 精选电台 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/djradio/recommend/v1', - 'POST', + "music.163.com", + "/weapi/djradio/recommend/v1", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_recommend_type.js b/router/dj_recommend_type.js index 8ad7b14..1e82d93 100644 --- a/router/dj_recommend_type.js +++ b/router/dj_recommend_type.js @@ -1,24 +1,19 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//精选电台-分类电台 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { cateId: req.query.type, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/djradio/recommend', - 'POST', + "music.163.com", + "/weapi/djradio/recommend", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_sub.js b/router/dj_sub.js index 8bc8198..8c5b8e5 100644 --- a/router/dj_sub.js +++ b/router/dj_sub.js @@ -1,25 +1,19 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { id: req.query.rid, - csrf_token: '' - } - const action = req.query.t == 1 ? 'sub' : 'unsub' + csrf_token: "" + }; + const action = req.query.t == 1 ? "sub" : "unsub"; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/djradio/${action}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/dj_sublist.js b/router/dj_sublist.js index c8c78ac..c4c774f 100644 --- a/router/dj_sublist.js +++ b/router/dj_sublist.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { @@ -21,6 +17,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/event.js b/router/event.js index 2234d12..49b1769 100644 --- a/router/event.js +++ b/router/event.js @@ -1,21 +1,16 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//获取动态 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/v1/event/get', - 'POST', + "music.163.com", + "/weapi/v1/event/get", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/fm_trash.js b/router/fm_trash.js index 18831ad..a960f43 100644 --- a/router/fm_trash.js +++ b/router/fm_trash.js @@ -1,26 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const songId = req.query.id - const alg = 'RT' - const time = req.query.time || 25 +//垃圾桶 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const songId = req.query.id; + const alg = "RT"; + const time = req.query.time || 25; const data = { - csrf_token: '', + csrf_token: "", songId - } + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/radio/trash/add?alg=${alg}&songId=${songId}&time=${time}`, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/follow.js b/router/follow.js index 6b3a389..5984463 100644 --- a/router/follow.js +++ b/router/follow.js @@ -1,25 +1,19 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } - const url = req.query.type == 'add' ? 'follow' : 'delfollow' - const id = req.query.id + csrf_token: "" + }; + const url = req.query.type == "add" ? "follow" : "delfollow"; + const id = req.query.id; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/user/${url}/${id}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/like.js b/router/like.js index 5f52dc8..9ed357d 100644 --- a/router/like.js +++ b/router/like.js @@ -1,27 +1,22 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const trackId = req.query.id - const like = req.query.like || true - const alg = req.query.alg || 'itembased' - const time = req.query.time || 25 +// 喜欢歌曲 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const trackId = req.query.id; + const like = req.query.like || true; + const alg = req.query.alg || "itembased"; + const time = req.query.time || 25; const data = { - csrf_token: '', + csrf_token: "", trackId, like - } + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/radio/like?alg=${alg}&trackId=${trackId}&like=${like}&time=${time}`, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/likelist.js b/router/likelist.js index 42b33c6..bf2f67c 100644 --- a/router/likelist.js +++ b/router/likelist.js @@ -1,24 +1,18 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { uid: req.query.uid, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/song/like/get`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/logWeb.js b/router/logWeb.js index 21a1973..4d7a16b 100644 --- a/router/logWeb.js +++ b/router/logWeb.js @@ -1,22 +1,17 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 不明 api +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/feedback/weblog', - 'POST', + "music.163.com", + "/weapi/feedback/weblog", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/login.js b/router/login.js index 431d3a5..6c83c90 100644 --- a/router/login.js +++ b/router/login.js @@ -1,38 +1,35 @@ -const express = require('express') -const crypto = require('crypto') -const router = express() -const { createWebAPIRequest } = require('../util/util') +const crypto = require("crypto"); -router.get('/', (req, res) => { - const email = req.query.email - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const md5sum = crypto.createHash('md5') - md5sum.update(req.query.password) +//邮箱登录 +module.exports = (req, res, createWebAPIRequest, request) => { + const email = req.query.email; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const md5sum = crypto.createHash("md5"); + md5sum.update(req.query.password); const data = { username: email, - password: md5sum.digest('hex'), - rememberLogin: 'true', + password: md5sum.digest("hex"), + rememberLogin: "true", clientToken: - '1_jVUMqWEPke0/1/Vu56xCmJpo5vP1grjn_SOVVDzOc78w8OKLVZ2JH7IfkjSXqgfmh' - } - console.log(email, req.query.password) + "1_jVUMqWEPke0/1/Vu56xCmJpo5vP1grjn_SOVVDzOc78w8OKLVZ2JH7IfkjSXqgfmh" + }; + console.log(email, req.query.password); createWebAPIRequest( - 'music.163.com', - '/weapi/login?csrf_token=', - 'POST', + "music.163.com", + "/weapi/login?csrf_token=", + "POST", data, cookie, (music_req, cookie) => { // console.log(music_req) - cookie = cookie&&cookie.map(x => x.replace("Domain=.music.163.com", "")) + cookie = + cookie && cookie.map(x => x.replace("Domain=.music.163.com", "")); res.set({ - 'Set-Cookie': cookie - }) - res.send(music_req) + "Set-Cookie": cookie + }); + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/loginCellphone.js b/router/loginCellphone.js index 692097f..ab6dffb 100644 --- a/router/loginCellphone.js +++ b/router/loginCellphone.js @@ -1,9 +1,7 @@ -const express = require("express"); const crypto = require("crypto"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); -router.get("/", (req, res) => { +//手机登录 +module.exports = (req, res, createWebAPIRequest, request) => { const phone = req.query.phone; const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const md5sum = crypto.createHash("md5"); @@ -32,6 +30,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/login_refresh.js b/router/login_refresh.js index 50c6c8e..3e71cfe 100644 --- a/router/login_refresh.js +++ b/router/login_refresh.js @@ -1,26 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//登录刷新 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/login/token/refresh`, - 'POST', + "POST", data, cookie, (music_req, cookie) => { res.set({ - 'Set-Cookie': cookie - }) - res.send(music_req) + "Set-Cookie": cookie + }); + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/lyric.js b/router/lyric.js index 9d0a3e7..a49b778 100644 --- a/router/lyric.js +++ b/router/lyric.js @@ -1,22 +1,17 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const data = {} - const id = req.query.id +// 获取歌词 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const data = {}; + const id = req.query.id; createWebAPIRequest( - 'music.163.com', - '/weapi/song/lyric?os=osx&id=' + id + '&lv=-1&kv=-1&tv=-1', - 'POST', + "music.163.com", + "/weapi/song/lyric?os=osx&id=" + id + "&lv=-1&kv=-1&tv=-1", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/musicUrl.js b/router/musicUrl.js index 9e99ddf..fc8b995 100644 --- a/router/musicUrl.js +++ b/router/musicUrl.js @@ -1,31 +1,26 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const id = req.query.id - const br = req.query.br || 999000 +// 获取音乐 url +module.exports = (req, res, createWebAPIRequest, request) => { + const id = req.query.id; + const br = req.query.br || 999000; const data = { ids: [id], br: br, - csrf_token: '' - } - const cookie = req.get('Cookie') ? req.get('Cookie') : '' + csrf_token: "" + }; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; createWebAPIRequest( - 'music.163.com', - '/weapi/song/enhance/player/url', - 'POST', + "music.163.com", + "/weapi/song/enhance/player/url", + "POST", data, cookie, music_req => { - res.setHeader('Content-Type', 'application/json') - res.send(music_req) + res.setHeader("Content-Type", "application/json"); + res.send(music_req); }, err => { - res.status(502).send('fetch error') + res.status(502).send("fetch error"); } - ) -}) - -module.exports = router + ); +}; diff --git a/router/mv.js b/router/mv.js index 0b23d43..6c9cf15 100644 --- a/router/mv.js +++ b/router/mv.js @@ -1,25 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const mvid = req.query.mvid +//mv +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const mvid = req.query.mvid; const data = { id: mvid - } + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/mv/detail`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/mv_first.js b/router/mv_first.js index 9a578e5..011e074 100644 --- a/router/mv_first.js +++ b/router/mv_first.js @@ -1,26 +1,21 @@ //最新mv -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') // type ALL, ZH,EA,KR,JP -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { // 'offset': req.query.offset || 0, total: true, limit: req.query.limit || 30, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/mv/first', - 'POST', + "music.163.com", + "/weapi/mv/first", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/mv_url.js b/router/mv_url.js index 8826769..8971e65 100644 --- a/router/mv_url.js +++ b/router/mv_url.js @@ -1,24 +1,18 @@ -const express = require('express') -const router = express() -const request = require('request') - -router.get('/', (req, res) => { - const url = req.query.url +module.exports = (req, res, createWebAPIRequest, request) => { + const url = req.query.url; const headers = { - Referer: 'http://music.163.com/', - Cookie: 'appver=1.5.0.75771;', - 'Content-Type': 'video/mp4', + Referer: "http://music.163.com/", + Cookie: "appver=1.5.0.75771;", + "Content-Type": "video/mp4", Location: url - } + }; const options = { header: headers, url: url - } + }; request(options) - .on('error', err => { - res.send({ err }) + .on("error", err => { + res.send({ err }); }) - .pipe(res) -}) - -module.exports = router + .pipe(res); +}; diff --git a/router/personal_fm.js b/router/personal_fm.js index a6774e4..9e029bd 100644 --- a/router/personal_fm.js +++ b/router/personal_fm.js @@ -1,21 +1,16 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 私人 FM +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/v1/radio/get', - 'POST', + "music.163.com", + "/weapi/v1/radio/get", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/personalized.js b/router/personalized.js index db85dc4..ebac911 100644 --- a/router/personalized.js +++ b/router/personalized.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +//推荐歌单 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { limit: req.query.limit || 30, @@ -22,6 +19,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/personalized_djprogram.js b/router/personalized_djprogram.js index 3210455..275df5e 100644 --- a/router/personalized_djprogram.js +++ b/router/personalized_djprogram.js @@ -1,21 +1,16 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const data = {} +//推荐dj +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const data = {}; createWebAPIRequest( - 'music.163.com', - '/weapi/personalized/djprogram', - 'POST', + "music.163.com", + "/weapi/personalized/djprogram", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/personalized_mv.js b/router/personalized_mv.js index 7b6a68d..ee02a37 100644 --- a/router/personalized_mv.js +++ b/router/personalized_mv.js @@ -1,21 +1,16 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const data = {} +//推荐mv +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const data = {}; createWebAPIRequest( - 'music.163.com', - '/weapi/personalized/mv', - 'POST', + "music.163.com", + "/weapi/personalized/mv", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/personalized_newsong.js b/router/personalized_newsong.js index b91bdea..97d9b4a 100644 --- a/router/personalized_newsong.js +++ b/router/personalized_newsong.js @@ -1,23 +1,18 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//推荐新音乐 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - type: 'recommend' - } + type: "recommend" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/personalized/newsong', - 'POST', + "music.163.com", + "/weapi/personalized/newsong", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/personalized_privatecontent.js b/router/personalized_privatecontent.js index 861eb37..d6f0d21 100644 --- a/router/personalized_privatecontent.js +++ b/router/personalized_privatecontent.js @@ -1,21 +1,16 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const data = {} +//独家放送 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const data = {}; createWebAPIRequest( - 'music.163.com', - '/weapi/personalized/privatecontent', - 'POST', + "music.163.com", + "/weapi/personalized/privatecontent", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/playlist_catlist.js b/router/playlist_catlist.js index d9e03a0..50592b0 100644 --- a/router/playlist_catlist.js +++ b/router/playlist_catlist.js @@ -1,23 +1,18 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 全部歌单分类 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/playlist/catalogue', - 'POST', + "music.163.com", + "/weapi/playlist/catalogue", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/playlist_create.js b/router/playlist_create.js index 61abcbb..a26a023 100644 --- a/router/playlist_create.js +++ b/router/playlist_create.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { name: req.query.name, @@ -19,6 +15,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/playlist_detail.js b/router/playlist_detail.js index 4ccc423..1db977a 100644 --- a/router/playlist_detail.js +++ b/router/playlist_detail.js @@ -1,9 +1,5 @@ -const http = require("http"); -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 获取歌单内列表 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { id: req.query.id, @@ -27,6 +23,4 @@ router.get("/", (req, res) => { res.status(502).send("fetch error"); } ); -}); - -module.exports = router; +}; diff --git a/router/playlist_hot.js b/router/playlist_hot.js index fdc0c11..c19fbd7 100644 --- a/router/playlist_hot.js +++ b/router/playlist_hot.js @@ -1,21 +1,16 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const data = {} +// 热门歌单分类 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const data = {}; createWebAPIRequest( - 'music.163.com', - '/weapi/playlist/hottags', - 'POST', + "music.163.com", + "/weapi/playlist/hottags", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/playlist_subscribe.js b/router/playlist_subscribe.js index 21c7c12..42f5f57 100644 --- a/router/playlist_subscribe.js +++ b/router/playlist_subscribe.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { id: req.query.id, @@ -20,6 +16,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/playlist_tracks.js b/router/playlist_tracks.js index ae3ccc9..2f1711a 100644 --- a/router/playlist_tracks.js +++ b/router/playlist_tracks.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); //收藏单曲到歌单,从歌单删除歌曲 op=del,add;pid=歌单id,tracks=歌曲id -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const op = req.query.op; const pid = req.query.pid; // const tracks = req.query.tracks.split(',') @@ -27,6 +24,4 @@ router.get("/", (req, res) => { music_req => res.send(music_req), err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/playlist_update.js b/router/playlist_update.js index ec88b96..06c962b 100644 --- a/router/playlist_update.js +++ b/router/playlist_update.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const playlist_id = req.query.id; const desc_detail = req.query.desc || ""; @@ -28,6 +24,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/program_recommend.js b/router/program_recommend.js index 5192876..355c683 100644 --- a/router/program_recommend.js +++ b/router/program_recommend.js @@ -1,24 +1,19 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//推荐节目 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { cateId: req.query.type, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/program/recommend/v1', - 'POST', + "music.163.com", + "/weapi/program/recommend/v1", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/recommend_dislike.js b/router/recommend_dislike.js index c605280..ed23fe4 100644 --- a/router/recommend_dislike.js +++ b/router/recommend_dislike.js @@ -1,22 +1,17 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//取消推荐 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/v1/radio/get', - 'POST', + "music.163.com", + "/weapi/v1/radio/get", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/recommend_resource.js b/router/recommend_resource.js index bac9b1d..34529a2 100644 --- a/router/recommend_resource.js +++ b/router/recommend_resource.js @@ -1,22 +1,17 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 获取每日推荐歌单 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/v1/discovery/recommend/resource', - 'POST', + "music.163.com", + "/weapi/v1/discovery/recommend/resource", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/recommend_songs.js b/router/recommend_songs.js index 2dbb882..2d36ed7 100644 --- a/router/recommend_songs.js +++ b/router/recommend_songs.js @@ -1,25 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 获取每日推荐歌曲 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: 0, total: true, limit: 20, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/v1/discovery/recommend/songs', - 'POST', + "music.163.com", + "/weapi/v1/discovery/recommend/songs", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/resource_like.js b/router/resource_like.js index ae73d92..61d828e 100644 --- a/router/resource_like.js +++ b/router/resource_like.js @@ -1,25 +1,19 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { threadId: req.query.id, - csrf_token: '' - } - const action = req.query.t == 1 ? 'like' : 'unlike' + csrf_token: "" + }; + const action = req.query.t == 1 ? "like" : "unlike"; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/resource/${action}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/search.js b/router/search.js index 17dac15..dab25f1 100644 --- a/router/search.js +++ b/router/search.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 搜索 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const keywords = req.query.keywords; const type = req.query.type || 1; @@ -26,6 +23,4 @@ router.get("/", (req, res) => { music_req => res.send(music_req), err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/search_hot.js b/router/search_hot.js index 36818f6..c22b72e 100644 --- a/router/search_hot.js +++ b/router/search_hot.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 热搜 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { type: 1111 @@ -19,6 +16,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/search_multimatch.js b/router/search_multimatch.js index 6bcef33..021b454 100644 --- a/router/search_multimatch.js +++ b/router/search_multimatch.js @@ -1,26 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//搜索 multimatch +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '', + csrf_token: "", type: req.query.type || 1, - s: req.query.keywords || '' - } + s: req.query.keywords || "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/search/suggest/multimatch', - 'POST', + "music.163.com", + "/weapi/search/suggest/multimatch", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/search_suggest.js b/router/search_suggest.js index 31a4ddc..8a94bed 100644 --- a/router/search_suggest.js +++ b/router/search_suggest.js @@ -1,25 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 搜索 suggest,搜索结果包含单曲,歌手,歌单,mv信息 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '', - s: req.query.keywords || '' - } + csrf_token: "", + s: req.query.keywords || "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/search/suggest/web', - 'POST', + "music.163.com", + "/weapi/search/suggest/web", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/send_playlist.js b/router/send_playlist.js index 3c52b31..4512383 100644 --- a/router/send_playlist.js +++ b/router/send_playlist.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const user_ids = req.query.user_ids; const data = { @@ -21,6 +17,4 @@ router.get("/", (req, res) => { music_req => res.send(music_req), err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/send_text.js b/router/send_text.js index f3485a0..10481e0 100644 --- a/router/send_text.js +++ b/router/send_text.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; // user_id must be [id] const user_ids = req.query.user_ids; @@ -22,6 +18,4 @@ router.get("/", (req, res) => { music_req => res.send(music_req), err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/simi_artist.js b/router/simi_artist.js index 1a63965..54805d5 100644 --- a/router/simi_artist.js +++ b/router/simi_artist.js @@ -1,23 +1,17 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.id +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.id; const data = { artistid: id, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/discovery/simiArtist`, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/simi_mv.js b/router/simi_mv.js index de37619..d1f6dcb 100644 --- a/router/simi_mv.js +++ b/router/simi_mv.js @@ -1,21 +1,16 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +//相似 mv +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { mvid: req.query.mvid - } + }; createWebAPIRequest( - 'music.163.com', - '/weapi/discovery/simiMV', - 'POST', + "music.163.com", + "/weapi/discovery/simiMV", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/simi_playlist.js b/router/simi_playlist.js index 667385e..eddb125 100644 --- a/router/simi_playlist.js +++ b/router/simi_playlist.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +//simi ,相似歌单 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { songid: req.query.id @@ -18,6 +15,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/simi_song.js b/router/simi_song.js index 0457e5c..cb3d332 100644 --- a/router/simi_song.js +++ b/router/simi_song.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +//simi ,相似歌曲 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { songid: req.query.id @@ -18,6 +15,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/simi_user.js b/router/simi_user.js index b1b6b7b..7627e44 100644 --- a/router/simi_user.js +++ b/router/simi_user.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +//simi ,相似关注的用户 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { songid: req.query.id @@ -18,6 +15,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/song_detail.js b/router/song_detail.js index 5b4f529..7c9e7d3 100644 --- a/router/song_detail.js +++ b/router/song_detail.js @@ -1,28 +1,23 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = parseInt(req.query.ids) +// 获取音乐详情 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = parseInt(req.query.ids); const data = { // "id": id, c: JSON.stringify([{ id: id }]), - ids: '[' + id + ']', - csrf_token: '' - } - console.log(data) + ids: "[" + id + "]", + csrf_token: "" + }; + console.log(data); createWebAPIRequest( - 'music.163.com', - '/weapi/v3/song/detail', - 'POST', + "music.163.com", + "/weapi/v3/song/detail", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/top_album.js b/router/top_album.js index 82ad822..7f6f2ea 100644 --- a/router/top_album.js +++ b/router/top_album.js @@ -1,29 +1,25 @@ //最新mv -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') +// 新碟上架 http://music.163.com/#/discover/album/ // type ALL, ZH,EA,KR,JP -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, total: true, limit: req.query.limit || 50, area: req.query.type, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/album/new', - 'POST', + "music.163.com", + "/weapi/album/new", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/top_artists.js b/router/top_artists.js index b0e1a21..4c93128 100644 --- a/router/top_artists.js +++ b/router/top_artists.js @@ -1,26 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// 热门歌手 http://music.163.com/#/discover/artist/ +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, total: true, limit: req.query.limit || 50, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/artist/top`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/top_list.js b/router/top_list.js index 91bc743..d76a5cf 100644 --- a/router/top_list.js +++ b/router/top_list.js @@ -24,11 +24,7 @@ const top_list_all = { "22": ["云音乐ACG音乐榜", "71385702"], "23": ["云音乐嘻哈榜", "991319590"] }; -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const idx = req.query.idx; const id = top_list_all[idx][1]; const cookie = req.get("Cookie") ? req.get("Cookie") : ""; @@ -52,6 +48,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/top_mv.js b/router/top_mv.js index ad4b527..9a90b18 100644 --- a/router/top_mv.js +++ b/router/top_mv.js @@ -1,28 +1,22 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, total: true, limit: req.query.limit || 30, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/mv/toplist', - 'POST', + "music.163.com", + "/weapi/mv/toplist", + "POST", data, cookie, music_req => { - res.setHeader('Content-Type', 'application/json') - res.send(music_req) + res.setHeader("Content-Type", "application/json"); + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/top_playlist.js b/router/top_playlist.js index 867377e..84f4f19 100644 --- a/router/top_playlist.js +++ b/router/top_playlist.js @@ -1,29 +1,23 @@ //分类歌单 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; // order可为 'hot' 可为 'new' const data = { - cat: req.query.cat || '全部', - order: req.query.order || 'hot', + cat: req.query.cat || "全部", + order: req.query.order || "hot", offset: req.query.offset || 0, - total: req.query.total ? 'true' : 'false', + total: req.query.total ? "true" : "false", limit: req.query.limit || 50 - } + }; createWebAPIRequest( - 'music.163.com', - '/weapi/playlist/list', - 'POST', + "music.163.com", + "/weapi/playlist/list", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/top_playlist_highquality.js b/router/top_playlist_highquality.js index 02d9f6f..7906cef 100644 --- a/router/top_playlist_highquality.js +++ b/router/top_playlist_highquality.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +//精品歌单 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { cat: req.query.cat || "全部", @@ -21,6 +18,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/top_song.js b/router/top_song.js index 7a654c9..30a9417 100644 --- a/router/top_song.js +++ b/router/top_song.js @@ -1,9 +1,5 @@ //暂时废弃 -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { csrf_token: "" @@ -19,6 +15,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/toplist.js b/router/toplist.js index bc093ec..2cbc658 100644 --- a/router/toplist.js +++ b/router/toplist.js @@ -1,24 +1,18 @@ // 排行榜 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/toplist', - 'POST', + "music.163.com", + "/weapi/toplist", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/toplist_artist.js b/router/toplist_artist.js index b04e8f2..2604a25 100644 --- a/router/toplist_artist.js +++ b/router/toplist_artist.js @@ -1,25 +1,19 @@ //歌手榜 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { type: req.query.type, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/eapi/toplist/artist?params=B5CAE4715306477C2EFA74D383640F01BF227BF8E889F80E2E2A442958463A7E589CC99878CFCE88D165B64712332AF39EC61B7E68903B2F9F079E8D1AB99FC61049A6D5B97AF8E6FFE8DA16ED540D2CFA80205B889ACA39F8B05AE593FDF5A094F118FF4600C2025094ECF6EB58F6D424B7A97B21A8C1D7CF0609AF2FBE9FDD88826E1667C889757BA920684C5C425FF01B5514AF1EB08AB7D298DB4D65187829E315F9FFBBEB43C2AE3DC21222B31CEC6FF337957AC122FBCB3E793FC1960151B0BDEBB1565BFD835E7A7D6A2D034A5591070D42C32DA4B69E0061C46D61239221A1C64EF676D891B44D7B855E27C82A7EB376F0B0C27952F2006E302B47DA1DE86C3488D53FD98ED9FDC6AA341DF0ECF92BA2E8F77E41811BF9447973C5C34FFED13E28AC544347F9E6ADF4B0008C371FC41C4490D3C9E1A225791D2170326231C40662633AA93D5CEF9AABC777AF268A4B13C560157339478DFAD5D910C966B43E1F017410DBF06D189E2BD6D0CD2682F343A83994E66CA73B5E2A67A122842BF945F2B434CBDE4C5A589A3A90F70DF1A8B63E7BAFBEB624956C62CFB1114AB841379541E5BB4625F2C28CAEA6A67E77A7EEAA1149D9D0F7E190D3A3408DF88B62FBF27996ABC925A93E5A67B4B0D1D931214BB07064F2BA4DCBA2E548E5A110E9B992C21E3930EB488172929C02C06D76BB193EF923D1906E0A0C4D75F5EB909AE77B0A2E55539A182D0B2533C654F2C90A038406B8850BFC022639F2B3FB7EDF40FD74AEA0B9119E9987D2909C01C587794F53459DB8EE83AA8D15FBEAC71EB3A00D8E40E78FE9A9A4068495D9257B39D8F825086F391FD5E7A48AACA96BC261E334A1929C81633234A0B22C573AEAD05BC8B4216283ACFD9E022950AEC812F554B913B4457FDF68AA2CC5E476922C2670D49154BC1DEB6D464F60DBFAD2BB4144762CD3721F52D42FDAE56DB9C529EDB6FB946CD725B3E2EA2AFDCF3F759D384B4F7F75AAA6F01F8093C8A140B3B388FF57272A6A7E10274290A79CDCA69E37BC066CE8CCD5B4BB4E12DA841B', - 'POST', + "music.163.com", + "/eapi/toplist/artist?params=B5CAE4715306477C2EFA74D383640F01BF227BF8E889F80E2E2A442958463A7E589CC99878CFCE88D165B64712332AF39EC61B7E68903B2F9F079E8D1AB99FC61049A6D5B97AF8E6FFE8DA16ED540D2CFA80205B889ACA39F8B05AE593FDF5A094F118FF4600C2025094ECF6EB58F6D424B7A97B21A8C1D7CF0609AF2FBE9FDD88826E1667C889757BA920684C5C425FF01B5514AF1EB08AB7D298DB4D65187829E315F9FFBBEB43C2AE3DC21222B31CEC6FF337957AC122FBCB3E793FC1960151B0BDEBB1565BFD835E7A7D6A2D034A5591070D42C32DA4B69E0061C46D61239221A1C64EF676D891B44D7B855E27C82A7EB376F0B0C27952F2006E302B47DA1DE86C3488D53FD98ED9FDC6AA341DF0ECF92BA2E8F77E41811BF9447973C5C34FFED13E28AC544347F9E6ADF4B0008C371FC41C4490D3C9E1A225791D2170326231C40662633AA93D5CEF9AABC777AF268A4B13C560157339478DFAD5D910C966B43E1F017410DBF06D189E2BD6D0CD2682F343A83994E66CA73B5E2A67A122842BF945F2B434CBDE4C5A589A3A90F70DF1A8B63E7BAFBEB624956C62CFB1114AB841379541E5BB4625F2C28CAEA6A67E77A7EEAA1149D9D0F7E190D3A3408DF88B62FBF27996ABC925A93E5A67B4B0D1D931214BB07064F2BA4DCBA2E548E5A110E9B992C21E3930EB488172929C02C06D76BB193EF923D1906E0A0C4D75F5EB909AE77B0A2E55539A182D0B2533C654F2C90A038406B8850BFC022639F2B3FB7EDF40FD74AEA0B9119E9987D2909C01C587794F53459DB8EE83AA8D15FBEAC71EB3A00D8E40E78FE9A9A4068495D9257B39D8F825086F391FD5E7A48AACA96BC261E334A1929C81633234A0B22C573AEAD05BC8B4216283ACFD9E022950AEC812F554B913B4457FDF68AA2CC5E476922C2670D49154BC1DEB6D464F60DBFAD2BB4144762CD3721F52D42FDAE56DB9C529EDB6FB946CD725B3E2EA2AFDCF3F759D384B4F7F75AAA6F01F8093C8A140B3B388FF57272A6A7E10274290A79CDCA69E37BC066CE8CCD5B4BB4E12DA841B", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/toplist_detail.js b/router/toplist_detail.js index e7cd9fa..1c7199e 100644 --- a/router/toplist_detail.js +++ b/router/toplist_detail.js @@ -1,26 +1,20 @@ // 排行榜详情 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { id: req.query.id, limit: 20, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/toplist/detail', - 'POST', + "music.163.com", + "/weapi/toplist/detail", + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_audio.js b/router/user_audio.js index 4078526..18e8d28 100644 --- a/router/user_audio.js +++ b/router/user_audio.js @@ -1,29 +1,24 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { +// 获取用户电台 +module.exports = (req, res, createWebAPIRequest, request) => { const data = { userId: req.query.uid, - csrf_token: '' - } - console.log(data) - const cookie = req.get('Cookie') ? req.get('Cookie') : '' + csrf_token: "" + }; + console.log(data); + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; createWebAPIRequest( - 'music.163.com', - '/weapi/djradio/get/byuser', - 'POST', + "music.163.com", + "/weapi/djradio/get/byuser", + "POST", data, cookie, music_req => { - res.setHeader('Content-Type', 'application/json') - res.send(music_req) + res.setHeader("Content-Type", "application/json"); + res.send(music_req); }, err => { - res.status(502).send('fetch error') + res.status(502).send("fetch error"); } - ) -}) - -module.exports = router + ); +}; diff --git a/router/user_cloud.js b/router/user_cloud.js index 7f40e5d..06e4ddb 100644 --- a/router/user_cloud.js +++ b/router/user_cloud.js @@ -1,28 +1,23 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { +//云盘数据 +module.exports = (req, res, createWebAPIRequest, request) => { const data = { limit: req.query.limit || 10, offset: req.query.offset || 0, - csrf_token: '' - } - const cookie = req.get('Cookie') ? req.get('Cookie') : '' + csrf_token: "" + }; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; createWebAPIRequest( - 'music.163.com', - '/weapi/v1/cloud/get', - 'POST', + "music.163.com", + "/weapi/v1/cloud/get", + "POST", data, cookie, music_req => { - res.setHeader('Content-Type', 'application/json') - res.send(music_req) + res.setHeader("Content-Type", "application/json"); + res.send(music_req); }, err => { - res.status(502).send('fetch error') + res.status(502).send("fetch error"); } - ) -}) - -module.exports = router + ); +}; diff --git a/router/user_cloud_search.js b/router/user_cloud_search.js index 1ddd02d..7aed9a5 100644 --- a/router/user_cloud_search.js +++ b/router/user_cloud_search.js @@ -1,28 +1,23 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { +//云盘数据详情? 暂时不要使用 +module.exports = (req, res, createWebAPIRequest, request) => { const data = { byids: req.query.id, id: req.query.id, - csrf_token: '' - } - const cookie = req.get('Cookie') ? req.get('Cookie') : '' + csrf_token: "" + }; + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; createWebAPIRequest( - 'music.163.com', - '/weapi/v1/cloud/get/byids', - 'POST', + "music.163.com", + "/weapi/v1/cloud/get/byids", + "POST", data, cookie, music_req => { - res.setHeader('Content-Type', 'application/json') - res.send(music_req) + res.setHeader("Content-Type", "application/json"); + res.send(music_req); }, err => { - res.status(502).send('fetch error') + res.status(502).send("fetch error"); } - ) -}) - -module.exports = router + ); +}; diff --git a/router/user_detail.js b/router/user_detail.js index 0d45819..a77c86d 100644 --- a/router/user_detail.js +++ b/router/user_detail.js @@ -1,25 +1,19 @@ // 用户详情 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.uid +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.uid; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/v1/user/detail/${id}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_dj.js b/router/user_dj.js index 9e61c4f..e532d59 100644 --- a/router/user_dj.js +++ b/router/user_dj.js @@ -1,27 +1,21 @@ // 用户电台 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.uid +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.uid; const data = { - offset: req.query.offset || '0', + offset: req.query.offset || "0", limit: req.query.limit || 30, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/dj/program/${id}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_event.js b/router/user_event.js index bc674f3..28ff042 100644 --- a/router/user_event.js +++ b/router/user_event.js @@ -1,26 +1,21 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.uid +//用户动态 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.uid; const data = { time: -1, getcounts: true, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/event/get/${id}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_followeds.js b/router/user_followeds.js index ba78a7d..dac39ac 100644 --- a/router/user_followeds.js +++ b/router/user_followeds.js @@ -1,26 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { userId: req.query.uid, - offset: req.query.offset || '0', + offset: req.query.offset || "0", limit: req.query.limit || 30, - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/user/getfolloweds/`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_follows.js b/router/user_follows.js index 4486caf..863cdbd 100644 --- a/router/user_follows.js +++ b/router/user_follows.js @@ -1,26 +1,20 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' - const id = req.query.uid +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const id = req.query.uid; const data = { - offset: req.query.offset || '0', + offset: req.query.offset || "0", limit: req.query.limit || 30, order: true - } + }; createWebAPIRequest( - 'music.163.com', + "music.163.com", `/weapi/user/getfollows/${id}`, - 'POST', + "POST", data, cookie, music_req => { - res.send(music_req) + res.send(music_req); }, - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_playlist.js b/router/user_playlist.js index 7dbf879..9769c0a 100644 --- a/router/user_playlist.js +++ b/router/user_playlist.js @@ -1,8 +1,5 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +// 获取用户歌单 +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { offset: req.query.offset || 0, @@ -22,6 +19,4 @@ router.get("/", (req, res) => { }, err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; diff --git a/router/user_record.js b/router/user_record.js index bd8190e..4f06acc 100644 --- a/router/user_record.js +++ b/router/user_record.js @@ -1,27 +1,21 @@ //播放记录 -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; // type=1时只返回weekData, type=0时返回allData const data = { type: req.query.type || 0, uid: req.query.uid, //用户 id, - csrf_token: '' - } - const action = `/weapi/v1/play/record` + csrf_token: "" + }; + const action = `/weapi/v1/play/record`; createWebAPIRequest( - 'music.163.com', + "music.163.com", action, - 'POST', + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_subcount.js b/router/user_subcount.js index 07b5653..0db00d8 100644 --- a/router/user_subcount.js +++ b/router/user_subcount.js @@ -1,21 +1,15 @@ -const express = require('express') -const router = express() -const { createWebAPIRequest } = require('../util/util') - -router.get('/', (req, res) => { - const cookie = req.get('Cookie') ? req.get('Cookie') : '' +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; const data = { - csrf_token: '' - } + csrf_token: "" + }; createWebAPIRequest( - 'music.163.com', - '/weapi/subcount', - 'POST', + "music.163.com", + "/weapi/subcount", + "POST", data, cookie, music_req => res.send(music_req), - err => res.status(502).send('fetch error') - ) -}) - -module.exports = router + err => res.status(502).send("fetch error") + ); +}; diff --git a/router/user_update.js b/router/user_update.js index 2ea5257..be5ec0b 100644 --- a/router/user_update.js +++ b/router/user_update.js @@ -1,8 +1,4 @@ -const express = require("express"); -const router = express(); -const { createWebAPIRequest } = require("../util/util"); - -router.get("/", (req, res) => { +module.exports = (req, res, createWebAPIRequest, request) => { const cookie = req.get("Cookie") ? req.get("Cookie") : ""; // 暂时不提供更换头像接口 // gender为0表示保密,1为男性,2为女性 @@ -28,6 +24,4 @@ router.get("/", (req, res) => { music_req => res.send(music_req), err => res.status(502).send("fetch error") ); -}); - -module.exports = router; +}; From 22e6c0116f2057a1a938c1f7b7543976eade54e1 Mon Sep 17 00:00:00 2001 From: binaryify Date: Tue, 5 Jun 2018 16:02:55 +0800 Subject: [PATCH 06/12] update to 2.13.0 --- CHANGELOG.MD | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.MD b/CHANGELOG.MD index cbbc05f..7c7ca43 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,7 @@ # 更新日志 +### 2.13.0 | 2018.06.05 +增加自动注册路由的功能,简化路由注册逻辑 + ### 2.12.0 | 2018.05.27 更新文档,优化歌单详情接口 diff --git a/package.json b/package.json index 3689dd6..1c289fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.12.0", + "version": "2.13.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", From 9687c94c366341ca9410af66f5f539738308b903 Mon Sep 17 00:00:00 2001 From: binaryify Date: Tue, 5 Jun 2018 16:20:11 +0800 Subject: [PATCH 07/12] improve --- .pre-commit-config.yaml | 4 - package.json | 18 +- yarn.lock | 1739 --------------------------------------- 3 files changed, 8 insertions(+), 1753 deletions(-) delete mode 100644 .pre-commit-config.yaml delete mode 100644 yarn.lock diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 51cfad2..0000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,4 +0,0 @@ - - repo: https://github.com/Binaryify/NeteaseCloudMusicApi - sha: '' # Use the sha or tag you want to point at - hooks: - - id: prettier \ No newline at end of file diff --git a/package.json b/package.json index 1c289fe..8c31686 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,14 @@ "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", - "test": "mocha -r intelli-espower-loader -t 20000 test", - "precommit": "lint-staged" + "test": "mocha -r intelli-espower-loader -t 20000 test" }, - "lint-staged": { - "*.js": ["prettier --write", "git add"] - }, - "keywords": ["网易云音乐", "网易云", "音乐", "网易云音乐nodejs"], + "keywords": [ + "网易云音乐", + "网易云", + "音乐", + "网易云音乐nodejs" + ], "author": "", "license": "MIT", "dependencies": { @@ -20,11 +21,8 @@ "request": "^2.85.0" }, "devDependencies": { - "husky": "^0.14.3", "intelli-espower-loader": "^1.0.1", - "lint-staged": "^7.1.0", "mocha": "^5.1.1", - "power-assert": "^1.5.0", - "prettier": "^1.12.1" + "power-assert": "^1.5.0" } } diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index b57cc83..0000000 --- a/yarn.lock +++ /dev/null @@ -1,1739 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -accepts@~1.3.4: - version "1.3.4" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" - dependencies: - mime-types "~2.1.16" - negotiator "0.6.1" - -acorn-es7-plugin@^1.0.10, acorn-es7-plugin@^1.0.12: - version "1.1.7" - resolved "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" - -acorn@^4.0.0: - version "4.0.13" - resolved "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.0: - version "5.3.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" - -ajv@^5.1.0: - version "5.5.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.1.0, ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - dependencies: - color-convert "^1.9.0" - -any-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" - -apicache@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/apicache/-/apicache-1.2.0.tgz#b880b1ac7a7e2e3b14f625fb53a992b18943cb31" - -app-root-path@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" - -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - -array-find@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -big-integer@^1.6.26: - version "1.6.26" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.26.tgz#3af1672fa62daf2d5ecafacf6e5aa0d25e02c1c8" - -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -call-matcher@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/call-matcher/-/call-matcher-1.0.1.tgz#5134d077984f712a54dad3cbf62de28dce416ca8" - dependencies: - core-js "^2.0.0" - deep-equal "^1.0.0" - espurify "^1.6.0" - estraverse "^4.0.0" - -call-signature@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.1, chalk@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -ci-info@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - -commander@2.11.0: - version "2.11.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - -commander@^2.11.0, commander@^2.9.0: - version "2.13.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^1.1.0, convert-source-map@^1.1.1: - version "1.5.1" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -core-js@^2.0.0: - version "2.5.3" - resolved "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -d@1: - version "1.0.0" - resolved "https://registry.npmjs.org/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@3.1.0, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - -deep-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -depd@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -diff-match-patch@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.0.tgz#1cc3c83a490d67f95d91e39f6ad1f2e086b63048" - -diff@3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" - -eastasianwidth@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - -empower-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/empower-assert/-/empower-assert-1.0.1.tgz#31e310abc065baa7c3a0487e6be5bbcc65f3c1de" - dependencies: - estraverse "^4.2.0" - -empower-core@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/empower-core/-/empower-core-0.6.2.tgz#5adef566088e31fba80ba0a36df47d7094169144" - dependencies: - call-signature "0.0.2" - core-js "^2.0.0" - -empower@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/empower/-/empower-1.2.3.tgz#6f0da73447f4edd838fec5c60313a88ba5cb852b" - dependencies: - core-js "^2.0.0" - empower-core "^0.6.2" - -encodeurl@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.38" - resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escallmatch@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/escallmatch/-/escallmatch-1.5.0.tgz#50099d86e8091b092df8ddfbc3f9a6fb05a024d0" - dependencies: - call-matcher "^1.0.0" - esprima "^2.0.0" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.6.1, escodegen@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.5.6" - -escope@^3.3.0: - version "3.6.0" - resolved "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -espower-loader@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/espower-loader/-/espower-loader-1.2.2.tgz#edb46c3c59a06bac8ea73a695c86e5c5a0bc82da" - dependencies: - convert-source-map "^1.1.0" - espower-source "^2.0.0" - minimatch "^3.0.0" - source-map-support "^0.4.0" - xtend "^4.0.0" - -espower-location-detector@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5" - dependencies: - is-url "^1.2.1" - path-is-absolute "^1.0.0" - source-map "^0.5.0" - xtend "^4.0.0" - -espower-source@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/espower-source/-/espower-source-2.2.0.tgz#7e005255ae47b5c136448644b3f3d802d503f752" - dependencies: - acorn "^5.0.0" - acorn-es7-plugin "^1.0.10" - convert-source-map "^1.1.1" - empower-assert "^1.0.0" - escodegen "^1.6.1" - espower "^2.0.0" - estraverse "^4.0.0" - merge-estraverse-visitors "^1.0.0" - multi-stage-sourcemap "^0.2.1" - path-is-absolute "^1.0.0" - xtend "^4.0.0" - -espower@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/espower/-/espower-2.1.0.tgz#ce1edb3d98702841fdf596d1cb8e85bdc4ae8e48" - dependencies: - array-find "^1.0.0" - escallmatch "^1.5.0" - escodegen "^1.7.0" - escope "^3.3.0" - espower-location-detector "^1.0.0" - espurify "^1.3.0" - estraverse "^4.1.0" - source-map "^0.5.0" - type-name "^2.0.0" - xtend "^4.0.0" - -esprima@^2.0.0: - version "2.7.3" - resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -espurify@^1.3.0, espurify@^1.6.0: - version "1.7.0" - resolved "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226" - dependencies: - core-js "^2.0.0" - -esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" - dependencies: - estraverse "^4.1.0" - object-assign "^4.0.1" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -express@^4.16.2: - version "4.16.2" - resolved "https://registry.npmjs.org/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" - dependencies: - accepts "~1.3.4" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - 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.1" - finalhandler "1.1.0" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.2" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" - setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@~3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - 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" - -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -get-own-enumerable-property-symbols@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob@7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -growl@1.10.3: - version "1.10.3" - resolved "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -he@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - -http-errors@1.6.2, http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -husky@^0.14.3: - version "0.14.3" - resolved "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" - dependencies: - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -intelli-espower-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/intelli-espower-loader/-/intelli-espower-loader-1.0.1.tgz#2c7b03146bc1d46bf210d0a0397c5c91ab4ca2b0" - dependencies: - espower-loader "^1.0.0" - -ipaddr.js@1.5.2: - version "1.5.2" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - -is-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" - dependencies: - symbol-observable "^0.2.2" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-url@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -jest-get-type@^21.2.0: - version "21.2.0" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" - -jest-validate@^21.1.0: - version "21.2.1" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" - dependencies: - chalk "^2.0.1" - jest-get-type "^21.2.0" - leven "^2.1.0" - pretty-format "^21.2.1" - -js-yaml@^3.9.0: - version "3.10.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -json-parse-better-errors@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lint-staged@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-6.0.1.tgz#855f2993ab4a265430e2fd9828427e648d65e6b4" - dependencies: - app-root-path "^2.0.0" - chalk "^2.1.0" - commander "^2.11.0" - cosmiconfig "^4.0.0" - debug "^3.1.0" - dedent "^0.7.0" - execa "^0.8.0" - find-parent-dir "^0.3.0" - is-glob "^4.0.0" - jest-validate "^21.1.0" - listr "^0.13.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - minimatch "^3.0.0" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - staged-git-files "0.0.4" - stringify-object "^3.2.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -listr@^0.13.0: - version "0.13.0" - resolved "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" - is-observable "^0.2.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.4.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^5.4.2" - stream-to-observable "^0.2.0" - strip-ansi "^3.0.1" - -lodash@^4.17.4: - version "4.17.4" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-symbols@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -merge-estraverse-visitors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/merge-estraverse-visitors/-/merge-estraverse-visitors-1.0.0.tgz#eb968338b5ded5ceed82cec0307decba2d8ea994" - dependencies: - estraverse "^4.0.0" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - -mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17: - version "2.1.17" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -minimatch@^3.0.0, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mocha@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz#cccac988b0bc5477119cba0e43de7af6d6ad8f4e" - dependencies: - browser-stdout "1.3.0" - commander "2.11.0" - debug "3.1.0" - diff "3.3.1" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.3" - he "1.1.1" - mkdirp "0.5.1" - supports-color "4.4.0" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multi-stage-sourcemap@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz#b09fc8586eaa17f81d575c4ad02e0f7a3f6b1105" - dependencies: - source-map "^0.1.34" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-keys@^1.0.0, object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -ora@^0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -power-assert-context-formatter@^1.0.7: - version "1.1.1" - resolved "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz#edba352d3ed8a603114d667265acce60d689ccdf" - dependencies: - core-js "^2.0.0" - power-assert-context-traversal "^1.1.1" - -power-assert-context-reducer-ast@^1.0.7: - version "1.1.2" - resolved "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.1.2.tgz#484a99e26f4973ff8832e5c5cc756702e6094174" - dependencies: - acorn "^4.0.0" - acorn-es7-plugin "^1.0.12" - core-js "^2.0.0" - espurify "^1.6.0" - estraverse "^4.2.0" - -power-assert-context-traversal@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz#88cabca0d13b6359f07d3d3e8afa699264577ed9" - dependencies: - core-js "^2.0.0" - estraverse "^4.1.0" - -power-assert-formatter@^1.3.1: - version "1.4.1" - resolved "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a" - dependencies: - core-js "^2.0.0" - power-assert-context-formatter "^1.0.7" - power-assert-context-reducer-ast "^1.0.7" - power-assert-renderer-assertion "^1.0.7" - power-assert-renderer-comparison "^1.0.7" - power-assert-renderer-diagram "^1.0.7" - power-assert-renderer-file "^1.0.7" - -power-assert-renderer-assertion@^1.0.7: - version "1.1.1" - resolved "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz#cbfc0e77e0086a8f96af3f1d8e67b9ee7e28ce98" - dependencies: - power-assert-renderer-base "^1.1.1" - power-assert-util-string-width "^1.1.1" - -power-assert-renderer-base@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb" - -power-assert-renderer-comparison@^1.0.7: - version "1.1.1" - resolved "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.1.1.tgz#d7439d97d85156be4e30a00f2fb5a72514ce3c08" - dependencies: - core-js "^2.0.0" - diff-match-patch "^1.0.0" - power-assert-renderer-base "^1.1.1" - stringifier "^1.3.0" - type-name "^2.0.1" - -power-assert-renderer-diagram@^1.0.7: - version "1.1.2" - resolved "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.2.tgz#655f8f711935a9b6d541b86327654717c637a986" - dependencies: - core-js "^2.0.0" - power-assert-renderer-base "^1.1.1" - power-assert-util-string-width "^1.1.1" - stringifier "^1.3.0" - -power-assert-renderer-file@^1.0.7: - version "1.1.1" - resolved "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.1.1.tgz#a37e2bbd178ccacd04e78dbb79c92fe34933c5e7" - dependencies: - power-assert-renderer-base "^1.1.1" - -power-assert-util-string-width@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz#be659eb7937fdd2e6c9a77268daaf64bd5b7c592" - dependencies: - eastasianwidth "^0.1.1" - -power-assert@^1.4.4: - version "1.4.4" - resolved "https://registry.npmjs.org/power-assert/-/power-assert-1.4.4.tgz#9295ea7437196f5a601fde420f042631186d7517" - dependencies: - define-properties "^1.1.2" - empower "^1.2.3" - power-assert-formatter "^1.3.1" - universal-deep-strict-equal "^1.2.1" - xtend "^4.0.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -prettier@^1.10.2: - version "1.10.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93" - -pretty-format@^21.2.1: - version "21.2.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -proxy-addr@~2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.5.2" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@6.5.1, qs@~6.5.1: - version "6.5.1" - resolved "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@^2.83.0: - version "2.83.0" - resolved "https://registry.npmjs.org/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -require-from-string@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -rxjs@^5.4.2: - version "5.5.6" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" - dependencies: - symbol-observable "1.0.1" - -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -send@0.16.1: - version "0.16.1" - resolved "https://registry.npmjs.org/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" - 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.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" - -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" - dependencies: - encodeurl "~1.0.1" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.1" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -source-map-support@^0.4.0: - version "0.4.18" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map@^0.1.34: - version "0.1.43" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.6: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -staged-git-files@0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" - -"statuses@>= 1.3.1 < 2", statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stream-to-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" - dependencies: - any-observable "^0.2.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -stringifier@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/stringifier/-/stringifier-1.3.0.tgz#def18342f6933db0f2dbfc9aa02175b448c17959" - dependencies: - core-js "^2.0.0" - traverse "^0.6.6" - type-name "^2.0.1" - -stringify-object@^3.2.0: - version "3.2.1" - resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" - dependencies: - get-own-enumerable-property-symbols "^2.0.1" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - -supports-color@4.4.0, supports-color@^4.0.0: - version "4.4.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" - dependencies: - has-flag "^2.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - -symbol-observable@^0.2.2: - version "0.2.4" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" - -tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - -traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.15: - version "1.6.15" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.15" - -type-name@^2.0.0, type-name@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" - -universal-deep-strict-equal@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7" - dependencies: - array-filter "^1.0.0" - indexof "0.0.1" - object-keys "^1.0.0" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -which@^1.2.10, which@^1.2.9: - version "1.3.0" - resolved "https://registry.npmjs.org/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" From ac1fa995d30bab5c7c6ea86a4bd6eef6ee156c5d Mon Sep 17 00:00:00 2001 From: Gavin Gong Date: Wed, 13 Jun 2018 20:56:59 +0800 Subject: [PATCH 08/12] =?UTF-8?q?fix:=20=E6=89=8B=E6=9C=BA=E7=99=BB?= =?UTF-8?q?=E9=99=86=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 1043fb2..84ea762 100644 --- a/app.js +++ b/app.js @@ -45,7 +45,7 @@ const { createWebAPIRequest, request } = require("./util/util"); const Wrap = fn => (req, res) => fn(req, res, createWebAPIRequest, request); // 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由 -fs.readdirSync("./router/").forEach(file => { +fs.readdirSync("./router/").reverse().forEach(file => { if (/\.js$/i.test(file) === false) { return; } From 2cdec0ac645613af5f6d4fb5e2c184892255bcd3 Mon Sep 17 00:00:00 2001 From: binaryify Date: Wed, 13 Jun 2018 21:10:42 +0800 Subject: [PATCH 09/12] =?UTF-8?q?fix:=20=E6=89=8B=E6=9C=BA=E7=99=BB?= =?UTF-8?q?=E9=99=86=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c31686..8e5fc77 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.13.0", + "version": "2.13.1", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", From ea6cfefb69a9ba416ea161b2d3dc97e3f5dd5662 Mon Sep 17 00:00:00 2001 From: binaryify Date: Tue, 3 Jul 2018 09:11:09 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E9=82=AE=E7=AE=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.MD | 3 + docs/README.md | 4 + package.json | 2 +- router/login.js | 41 +- yarn.lock | 1153 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1180 insertions(+), 23 deletions(-) create mode 100644 yarn.lock diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 7c7ca43..82fea9a 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,7 @@ # 更新日志 +### 2.14.0 | 2018.07.03 +修复无法使用邮箱问题 + ### 2.13.0 | 2018.06.05 增加自动注册路由的功能,简化路由注册逻辑 diff --git a/docs/README.md b/docs/README.md index beefd99..6d3e1f4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,6 +15,9 @@ 跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API ## 版本新特性 +### 2.14.0 | 2018.07.03 +修复无法使用邮箱问题 + ### 2.11.0 | 2018.05.21 增加收藏歌手列表&订阅电台列表 @@ -236,6 +239,7 @@ $ sudo docker run -d -p 3000:3000 netease-music-api #### 2. 邮箱登录 > 注意 : 此接口被网易和谐了 , 待修复 , 暂时使用手机登录 (2017.05.20) +> 更新 : 此接口已经可以正常使用(2018.07.03) **必选参数 :** `email`: 163 网易邮箱 `password`: 密码 diff --git a/package.json b/package.json index 8e5fc77..173cbca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.13.1", + "version": "2.14.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", diff --git a/router/login.js b/router/login.js index 6c83c90..ac914ef 100644 --- a/router/login.js +++ b/router/login.js @@ -1,35 +1,32 @@ -const crypto = require("crypto"); +const crypto = require('crypto') //邮箱登录 module.exports = (req, res, createWebAPIRequest, request) => { - const email = req.query.email; - const cookie = req.get("Cookie") ? req.get("Cookie") : ""; - const md5sum = crypto.createHash("md5"); - md5sum.update(req.query.password); + const email = req.query.email + const cookie = req.get('Cookie') ? req.get('Cookie') : '' + const md5sum = crypto.createHash('md5') + md5sum.update(req.query.password) const data = { username: email, - password: md5sum.digest("hex"), - rememberLogin: "true", - clientToken: - "1_jVUMqWEPke0/1/Vu56xCmJpo5vP1grjn_SOVVDzOc78w8OKLVZ2JH7IfkjSXqgfmh" - }; - console.log(email, req.query.password); + password: md5sum.digest('hex'), + rememberLogin: 'true' + } + console.log(email, req.query.password) createWebAPIRequest( - "music.163.com", - "/weapi/login?csrf_token=", - "POST", + 'music.163.com', + '/weapi/login', + 'POST', data, cookie, (music_req, cookie) => { // console.log(music_req) - cookie = - cookie && cookie.map(x => x.replace("Domain=.music.163.com", "")); + cookie = cookie && cookie.map(x => x.replace('Domain=.music.163.com', '')) res.set({ - "Set-Cookie": cookie - }); - res.send(music_req); + 'Set-Cookie': cookie + }) + res.send(music_req) }, - err => res.status(502).send("fetch error") - ); -}; + err => res.status(502).send('fetch error') + ) +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..8c4c424 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1153 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@~1.3.5: + version "1.3.5" + resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-es7-plugin@^1.0.10, acorn-es7-plugin@^1.0.12: + version "1.1.7" + resolved "http://registry.npm.taobao.org/acorn-es7-plugin/download/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" + +acorn@^5.0.0: + version "5.7.1" + resolved "http://registry.npm.taobao.org/acorn/download/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" + +ajv@^5.1.0: + version "5.5.2" + resolved "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +apicache@^1.2.1: + version "1.2.2" + resolved "http://registry.npm.taobao.org/apicache/download/apicache-1.2.2.tgz#ca2c096a042c154dbd581d1196e81ad922a8500f" + +array-filter@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/array-filter/download/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + +array-find@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/array-find/download/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + +array-flatten@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +asn1@~0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +asynckit@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.6.0: + version "1.7.0" + resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + dependencies: + tweetnacl "^0.14.3" + +big-integer@^1.6.28: + version "1.6.32" + resolved "http://registry.npm.taobao.org/big-integer/download/big-integer-1.6.32.tgz#5867458b25ecd5bcb36b627c30bb501a13c07e89" + +body-parser@1.18.2: + version "1.18.2" + resolved "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "http://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + +bytes@3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +call-matcher@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/call-matcher/download/call-matcher-1.0.1.tgz#5134d077984f712a54dad3cbf62de28dce416ca8" + dependencies: + core-js "^2.0.0" + deep-equal "^1.0.0" + espurify "^1.6.0" + estraverse "^4.0.0" + +call-signature@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/call-signature/download/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" + +caseless@~0.12.0: + version "0.12.0" + resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +co@^4.6.0: + version "4.6.0" + resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +combined-stream@1.0.6, combined-stream@~1.0.5: + version "1.0.6" + resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@2.15.1: + version "2.15.1" + resolved "http://registry.npm.taobao.org/commander/download/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + +concat-map@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +content-disposition@0.5.2: + version "0.5.2" + resolved "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.1.0, convert-source-map@^1.1.1: + version "1.5.1" + resolved "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^2.0.0: + version "2.5.7" + resolved "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + +core-util-is@1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +d@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/d/download/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9: + version "2.6.9" + resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +deep-equal@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-is@~0.1.3: + version "0.1.3" + resolved "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +define-properties@^1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +depd@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +destroy@~1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +diff-match-patch@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/diff-match-patch/download/diff-match-patch-1.0.1.tgz#d5f880213d82fbc124d2b95111fb3c033dbad7fa" + +diff@3.5.0: + version "3.5.0" + resolved "http://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/eastasianwidth/download/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +empower-assert@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/empower-assert/download/empower-assert-1.1.0.tgz#8d327fbe69a88af90dda98d1bfc9829d2a24fd62" + dependencies: + estraverse "^4.2.0" + +empower-core@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/empower-core/download/empower-core-1.2.0.tgz#ce3fb2484d5187fa29c23fba8344b0b2fdf5601c" + dependencies: + call-signature "0.0.2" + core-js "^2.0.0" + +empower@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/empower/download/empower-1.3.0.tgz#6b05e77625e77dc44945c4328562c3020b01fa4b" + dependencies: + core-js "^2.0.0" + empower-core "^1.2.0" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.45" + resolved "http://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "http://registry.npm.taobao.org/es6-map/download/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "http://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "http://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "http://registry.npm.taobao.org/es6-weak-map/download/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escallmatch@^1.5.0: + version "1.5.0" + resolved "http://registry.npm.taobao.org/escallmatch/download/escallmatch-1.5.0.tgz#50099d86e8091b092df8ddfbc3f9a6fb05a024d0" + dependencies: + call-matcher "^1.0.0" + esprima "^2.0.0" + +escape-html@~1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.10.0, escodegen@^1.7.0: + version "1.10.0" + resolved "http://registry.npm.taobao.org/escodegen/download/escodegen-1.10.0.tgz#f647395de22519fbd0d928ffcf1d17e0dec2603e" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +escope@^3.3.0: + version "3.6.0" + resolved "http://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +espower-loader@^1.0.0: + version "1.2.2" + resolved "http://registry.npm.taobao.org/espower-loader/download/espower-loader-1.2.2.tgz#edb46c3c59a06bac8ea73a695c86e5c5a0bc82da" + dependencies: + convert-source-map "^1.1.0" + espower-source "^2.0.0" + minimatch "^3.0.0" + source-map-support "^0.4.0" + xtend "^4.0.0" + +espower-location-detector@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/espower-location-detector/download/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5" + dependencies: + is-url "^1.2.1" + path-is-absolute "^1.0.0" + source-map "^0.5.0" + xtend "^4.0.0" + +espower-source@^2.0.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/espower-source/download/espower-source-2.3.0.tgz#43e93b2c18af50018bdb1bea7a1271f4a1c125f4" + dependencies: + acorn "^5.0.0" + acorn-es7-plugin "^1.0.10" + convert-source-map "^1.1.1" + empower-assert "^1.0.0" + escodegen "^1.10.0" + espower "^2.1.1" + estraverse "^4.0.0" + merge-estraverse-visitors "^1.0.0" + multi-stage-sourcemap "^0.2.1" + path-is-absolute "^1.0.0" + xtend "^4.0.0" + +espower@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/espower/download/espower-2.1.1.tgz#158c91585528db46c0eb5a731c2136a427ad2857" + dependencies: + array-find "^1.0.0" + escallmatch "^1.5.0" + escodegen "^1.7.0" + escope "^3.3.0" + espower-location-detector "^1.0.0" + espurify "^1.3.0" + estraverse "^4.1.0" + source-map "^0.5.0" + type-name "^2.0.0" + xtend "^4.0.0" + +esprima@^2.0.0: + version "2.7.3" + resolved "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.3: + version "3.1.3" + resolved "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +espurify@^1.3.0, espurify@^1.6.0: + version "1.8.0" + resolved "http://registry.npm.taobao.org/espurify/download/espurify-1.8.0.tgz#270d8046e4e47e923d75bc8a87357c7112ca8485" + dependencies: + core-js "^2.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.1: + version "1.8.1" + resolved "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "http://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +express@^4.16.3: + version "4.16.3" + resolved "http://registry.npm.taobao.org/express/download/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@~3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extsprintf@1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +finalhandler@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +foreach@^2.0.5: + version "2.0.5" + resolved "http://registry.npm.taobao.org/foreach/download/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.3.1: + version "2.3.2" + resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +getpass@^0.1.1: + version "0.1.7" + resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob@7.1.2: + version "7.1.2" + resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +growl@1.10.5: + version "1.10.5" + resolved "http://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.0.3: + version "5.0.3" + resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +he@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +http-errors@1.6.2: + version "1.6.2" + resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-errors@~1.6.2: + version "1.6.3" + resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-signature@~1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +indexof@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +intelli-espower-loader@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/intelli-espower-loader/download/intelli-espower-loader-1.0.1.tgz#2c7b03146bc1d46bf210d0a0397c5c91ab4ca2b0" + dependencies: + espower-loader "^1.0.0" + +ipaddr.js@1.6.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-url@^1.2.1: + version "1.2.4" + resolved "http://registry.npm.taobao.org/is-url/download/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + +isstream@~0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jsbn@~0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +jsprim@^1.2.2: + version "1.4.1" + resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +levn@~0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge-estraverse-visitors@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/merge-estraverse-visitors/download/merge-estraverse-visitors-1.0.0.tgz#eb968338b5ded5ceed82cec0307decba2d8ea994" + dependencies: + estraverse "^4.0.0" + +methods@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.33.0: + version "1.33.0" + resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18: + version "2.1.18" + resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mime@1.4.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4: + version "3.0.4" + resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@0.5.1: + version "0.5.1" + resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^5.1.1: + version "5.2.0" + resolved "http://registry.npm.taobao.org/mocha/download/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + dependencies: + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" + mkdirp "0.5.1" + supports-color "5.4.0" + +ms@2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multi-stage-sourcemap@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/multi-stage-sourcemap/download/multi-stage-sourcemap-0.2.1.tgz#b09fc8586eaa17f81d575c4ad02e0f7a3f6b1105" + dependencies: + source-map "^0.1.34" + +negotiator@0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +next-tick@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + +oauth-sign@~0.8.2: + version "0.8.2" + resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-keys@^1.0.0, object-keys@^1.0.8: + version "1.0.12" + resolved "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + +on-finished@~2.3.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.2" + resolved "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +parseurl@~1.3.2: + version "1.3.2" + resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +performance-now@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +power-assert-context-formatter@^1.0.7: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-context-formatter/download/power-assert-context-formatter-1.2.0.tgz#8fbe72692288ec5a7203cdf215c8b838a6061d2a" + dependencies: + core-js "^2.0.0" + power-assert-context-traversal "^1.2.0" + +power-assert-context-reducer-ast@^1.0.7: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-context-reducer-ast/download/power-assert-context-reducer-ast-1.2.0.tgz#c7ca1c9e39a6fb717f7ac5fe9e76e192bf525df3" + dependencies: + acorn "^5.0.0" + acorn-es7-plugin "^1.0.12" + core-js "^2.0.0" + espurify "^1.6.0" + estraverse "^4.2.0" + +power-assert-context-traversal@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-context-traversal/download/power-assert-context-traversal-1.2.0.tgz#f6e71454baf640de5c1c9c270349f5c9ab0b2e94" + dependencies: + core-js "^2.0.0" + estraverse "^4.1.0" + +power-assert-formatter@^1.4.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/power-assert-formatter/download/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a" + dependencies: + core-js "^2.0.0" + power-assert-context-formatter "^1.0.7" + power-assert-context-reducer-ast "^1.0.7" + power-assert-renderer-assertion "^1.0.7" + power-assert-renderer-comparison "^1.0.7" + power-assert-renderer-diagram "^1.0.7" + power-assert-renderer-file "^1.0.7" + +power-assert-renderer-assertion@^1.0.7: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-renderer-assertion/download/power-assert-renderer-assertion-1.2.0.tgz#3db6ffcda106b37bc1e06432ad0d748a682b147a" + dependencies: + power-assert-renderer-base "^1.1.1" + power-assert-util-string-width "^1.2.0" + +power-assert-renderer-base@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/power-assert-renderer-base/download/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb" + +power-assert-renderer-comparison@^1.0.7: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-renderer-comparison/download/power-assert-renderer-comparison-1.2.0.tgz#e4f88113225a69be8aa586ead05aef99462c0495" + dependencies: + core-js "^2.0.0" + diff-match-patch "^1.0.0" + power-assert-renderer-base "^1.1.1" + stringifier "^1.3.0" + type-name "^2.0.1" + +power-assert-renderer-diagram@^1.0.7: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-renderer-diagram/download/power-assert-renderer-diagram-1.2.0.tgz#37f66e8542e5677c5b58e6d72b01c0d9a30e2219" + dependencies: + core-js "^2.0.0" + power-assert-renderer-base "^1.1.1" + power-assert-util-string-width "^1.2.0" + stringifier "^1.3.0" + +power-assert-renderer-file@^1.0.7: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-renderer-file/download/power-assert-renderer-file-1.2.0.tgz#3f4bebd9e1455d75cf2ac541e7bb515a87d4ce4b" + dependencies: + power-assert-renderer-base "^1.1.1" + +power-assert-util-string-width@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/power-assert-util-string-width/download/power-assert-util-string-width-1.2.0.tgz#6e06d5e3581bb876c5d377c53109fffa95bd91a0" + dependencies: + eastasianwidth "^0.2.0" + +power-assert@^1.5.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/power-assert/download/power-assert-1.6.0.tgz#3a9d2b943cf0d6fc6a623766869c4460838c05fb" + dependencies: + define-properties "^1.1.2" + empower "^1.3.0" + power-assert-formatter "^1.4.1" + universal-deep-strict-equal "^1.2.1" + xtend "^4.0.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +proxy-addr@~2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.6.0" + +punycode@^1.4.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@6.5.1: + version "6.5.1" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~6.5.1: + version "6.5.2" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +range-parser@~1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +request@^2.85.0: + version "2.87.0" + resolved "http://registry.npm.taobao.org/request/download/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +safe-buffer@5.1.1: + version "5.1.1" + resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1: + version "5.1.2" + resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safer-buffer@^2.0.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +send@0.16.2: + version "0.16.2" + resolved "http://registry.npm.taobao.org/send/download/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +source-map-support@^0.4.0: + version "0.4.18" + resolved "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map@^0.1.34: + version "0.1.43" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +sshpk@^1.7.0: + version "1.14.2" + resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + safer-buffer "^2.0.2" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +stringifier@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/stringifier/download/stringifier-1.3.0.tgz#def18342f6933db0f2dbfc9aa02175b448c17959" + dependencies: + core-js "^2.0.0" + traverse "^0.6.6" + type-name "^2.0.1" + +supports-color@5.4.0: + version "5.4.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + +tough-cookie@~2.3.3: + version "2.3.4" + resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +traverse@^0.6.6: + version "0.6.6" + resolved "http://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +type-name@^2.0.0, type-name@^2.0.1: + version "2.0.2" + resolved "http://registry.npm.taobao.org/type-name/download/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" + +universal-deep-strict-equal@^1.2.1: + version "1.2.2" + resolved "http://registry.npm.taobao.org/universal-deep-strict-equal/download/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7" + dependencies: + array-filter "^1.0.0" + indexof "0.0.1" + object-keys "^1.0.0" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +utils-merge@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.1.0: + version "3.3.2" + resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +vary@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrappy@1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xtend@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" From 411f62f9873cb254cdcea16a358ce51ad3a219de Mon Sep 17 00:00:00 2001 From: binaryify Date: Tue, 3 Jul 2018 11:38:47 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 6d3e1f4..e9e18fd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -238,7 +238,9 @@ $ sudo docker run -d -p 3000:3000 netease-music-api #### 2. 邮箱登录 -> 注意 : 此接口被网易和谐了 , 待修复 , 暂时使用手机登录 (2017.05.20) +~~ 注意 : 此接口被网易和谐了 , 待修复 , 暂时使用手机登录 (2017.05.20)~~ + + > 更新 : 此接口已经可以正常使用(2018.07.03) **必选参数 :** `email`: 163 网易邮箱 `password`: 密码 From f80c5887897a4cd93f0bd32bc22c34b935428849 Mon Sep 17 00:00:00 2001 From: binaryify Date: Wed, 4 Jul 2018 14:02:01 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20issues=20=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- issue_template.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/issue_template.md b/issue_template.md index c037979..6034c22 100644 --- a/issue_template.md +++ b/issue_template.md @@ -1,5 +1,5 @@ ### 环境 -系统: +系统: nodejs 版本: @@ -7,4 +7,8 @@ nodejs 版本: ### 重现步骤 -### 期待效果 \ No newline at end of file +### 期待效果 + +>重现步骤尽量详细,不能含糊不清 + +>如果不是提建议,提 issues 如果不照着模版来将不会优先处理或直接关闭 \ No newline at end of file