From 4bce2c70719ff261a890d3794a669aa1139a3569 Mon Sep 17 00:00:00 2001 From: qier222 Date: Tue, 26 Jan 2021 11:56:03 +0800 Subject: [PATCH] chore: remove netease api code from repo --- .gitignore | 1 + netease_api/.editorconfig | 34 - netease_api/.eslintrc.js | 49 - netease_api/.gitignore | 5 - netease_api/.npmignore | 3 - netease_api/.prettierrc | 5 - netease_api/README.MD | 312 - netease_api/app.js | 117 - netease_api/buildScript.js | 60 - netease_api/interface.d.ts | 1311 --- netease_api/main.js | 26 - netease_api/module/activate_init_profile.js | 19 - netease_api/module/album.js | 15 - netease_api/module/album_detail.js | 17 - netease_api/module/album_detail_dynamic.js | 17 - netease_api/module/album_list.js | 21 - netease_api/module/album_list_style.js | 20 - netease_api/module/album_new.js | 15 - netease_api/module/album_newest.js | 15 - netease_api/module/album_songsaleboard.js | 24 - netease_api/module/album_sub.js | 14 - netease_api/module/album_sublist.js | 15 - netease_api/module/artist_album.js | 20 - netease_api/module/artist_desc.js | 18 - netease_api/module/artist_list.js | 37 - netease_api/module/artist_mv.js | 16 - netease_api/module/artist_songs.js | 17 - netease_api/module/artist_sub.js | 20 - netease_api/module/artist_sublist.js | 15 - netease_api/module/artist_top_song.js | 12 - netease_api/module/artists.js | 15 - netease_api/module/audio_match.js | 19 - netease_api/module/avatar_upload.js | 27 - netease_api/module/banner.js | 17 - netease_api/module/batch.js | 19 - netease_api/module/calendar.js | 12 - netease_api/module/captcha_sent.js | 14 - netease_api/module/captcha_verify.js | 20 - .../module/cellphone_existence_check.js | 20 - netease_api/module/check_music.js | 34 - netease_api/module/cloudsearch.js | 21 - netease_api/module/comment.js | 43 - netease_api/module/comment_album.js | 22 - netease_api/module/comment_dj.js | 22 - netease_api/module/comment_event.js | 20 - netease_api/module/comment_floor.js | 27 - netease_api/module/comment_hot.js | 30 - netease_api/module/comment_hotwall_list.js | 16 - netease_api/module/comment_like.js | 33 - netease_api/module/comment_music.js | 22 - netease_api/module/comment_mv.js | 22 - netease_api/module/comment_new.js | 38 - netease_api/module/comment_playlist.js | 22 - netease_api/module/comment_video.js | 22 - netease_api/module/countries_code_list.js | 16 - netease_api/module/daily_signin.js | 20 - netease_api/module/digitalAlbum_ordering.js | 27 - netease_api/module/digitalAlbum_purchased.js | 20 - netease_api/module/dj_banner.js | 17 - netease_api/module/dj_category_excludehot.js | 15 - netease_api/module/dj_category_recommend.js | 15 - netease_api/module/dj_catelist.js | 15 - netease_api/module/dj_detail.js | 13 - netease_api/module/dj_hot.js | 14 - netease_api/module/dj_paygift.js | 19 - .../module/dj_personalize_recommend.js | 17 - netease_api/module/dj_program.js | 21 - netease_api/module/dj_program_detail.js | 13 - netease_api/module/dj_program_toplist.js | 14 - .../module/dj_program_toplist_hours.js | 18 - netease_api/module/dj_radio_hot.js | 15 - netease_api/module/dj_recommend.js | 15 - netease_api/module/dj_recommend_type.js | 41 - netease_api/module/dj_sub.js | 19 - netease_api/module/dj_sublist.js | 20 - netease_api/module/dj_subscriber.js | 16 - netease_api/module/dj_today_perfered.js | 18 - netease_api/module/dj_toplist.js | 18 - netease_api/module/dj_toplist_hours.js | 14 - netease_api/module/dj_toplist_newcomer.js | 18 - netease_api/module/dj_toplist_pay.js | 18 - netease_api/module/dj_toplist_popular.js | 14 - netease_api/module/event.js | 14 - netease_api/module/event_del.js | 13 - netease_api/module/event_forward.js | 16 - netease_api/module/fm_trash.js | 20 - netease_api/module/follow.js | 17 - netease_api/module/history_recommend_songs.js | 17 - .../module/history_recommend_songs_detail.js | 19 - netease_api/module/homepage_block_page.js | 17 - netease_api/module/homepage_dragon_ball.js | 19 - netease_api/module/hot_topic.js | 14 - netease_api/module/like.js | 23 - netease_api/module/likelist.js | 13 - netease_api/module/login.js | 47 - netease_api/module/login_cellphone.js | 39 - netease_api/module/login_refresh.js | 16 - netease_api/module/login_status.js | 23 - netease_api/module/logout.js | 16 - netease_api/module/lyric.js | 17 - netease_api/module/msg_comments.js | 22 - netease_api/module/msg_forwards.js | 15 - netease_api/module/msg_notices.js | 14 - netease_api/module/msg_private.js | 15 - netease_api/module/msg_private_history.js | 21 - netease_api/module/mv_all.js | 20 - netease_api/module/mv_detail.js | 13 - netease_api/module/mv_detail_info.js | 19 - netease_api/module/mv_exclusive_rcmd.js | 19 - netease_api/module/mv_first.js | 21 - netease_api/module/mv_sub.js | 15 - netease_api/module/mv_sublist.js | 20 - netease_api/module/mv_url.js | 19 - netease_api/module/personal_fm.js | 15 - netease_api/module/personalized.js | 21 - netease_api/module/personalized_djprogram.js | 15 - netease_api/module/personalized_mv.js | 15 - netease_api/module/personalized_newsong.js | 20 - .../module/personalized_privatecontent.js | 15 - .../personalized_privatecontent_list.js | 20 - netease_api/module/playlist_catlist.js | 15 - netease_api/module/playlist_cover_update.js | 28 - netease_api/module/playlist_create.js | 16 - netease_api/module/playlist_delete.js | 14 - netease_api/module/playlist_desc_update.js | 20 - netease_api/module/playlist_detail.js | 15 - .../module/playlist_highquality_tags.js | 15 - netease_api/module/playlist_hot.js | 15 - netease_api/module/playlist_mylike.js | 17 - netease_api/module/playlist_name_update.js | 20 - netease_api/module/playlist_order_update.js | 19 - netease_api/module/playlist_subscribe.js | 19 - netease_api/module/playlist_subscribers.js | 20 - netease_api/module/playlist_tags_update.js | 20 - netease_api/module/playlist_track_add.js | 20 - netease_api/module/playlist_track_delete.js | 26 - netease_api/module/playlist_tracks.js | 51 - netease_api/module/playlist_update.js | 18 - netease_api/module/playlist_video_recent.js | 14 - .../module/playmode_intelligence_list.js | 22 - netease_api/module/program_recommend.js | 20 - netease_api/module/rebind.js | 21 - netease_api/module/recommend_resource.js | 15 - netease_api/module/recommend_songs.js | 17 - netease_api/module/register_cellphone.js | 18 - netease_api/module/related_allvideo.js | 19 - netease_api/module/related_playlist.js | 38 - netease_api/module/resource_like.js | 29 - netease_api/module/scrobble.js | 27 - netease_api/module/search.js | 16 - netease_api/module/search_default.js | 16 - netease_api/module/search_hot.js | 14 - netease_api/module/search_hot_detail.js | 15 - netease_api/module/search_multimatch.js | 19 - netease_api/module/search_suggest.js | 19 - netease_api/module/send_playlist.js | 17 - netease_api/module/send_text.js | 16 - netease_api/module/setting.js | 11 - netease_api/module/share_resource.js | 20 - netease_api/module/simi_artist.js | 18 - netease_api/module/simi_mv.js | 13 - netease_api/module/simi_playlist.js | 20 - netease_api/module/simi_song.js | 20 - netease_api/module/simi_user.js | 20 - netease_api/module/song_detail.js | 15 - netease_api/module/song_order_update.js | 22 - netease_api/module/song_url.js | 25 - netease_api/module/top_album.js | 27 - netease_api/module/top_artists.js | 15 - netease_api/module/top_list.js | 30 - netease_api/module/top_mv.js | 16 - netease_api/module/top_playlist.js | 17 - .../module/top_playlist_highquality.js | 21 - netease_api/module/top_song.js | 21 - netease_api/module/toplist.js | 15 - netease_api/module/toplist_artist.js | 16 - netease_api/module/toplist_detail.js | 15 - netease_api/module/user_account.js | 9 - netease_api/module/user_audio.js | 18 - netease_api/module/user_binding.js | 14 - netease_api/module/user_cloud.js | 14 - netease_api/module/user_cloud_del.js | 13 - netease_api/module/user_cloud_detail.js | 19 - netease_api/module/user_detail.js | 15 - netease_api/module/user_dj.js | 19 - netease_api/module/user_event.js | 21 - netease_api/module/user_followeds.js | 21 - netease_api/module/user_follows.js | 20 - netease_api/module/user_level.js | 11 - netease_api/module/user_playlist.js | 16 - netease_api/module/user_record.js | 14 - netease_api/module/user_replacephone.js | 19 - netease_api/module/user_subcount.js | 15 - netease_api/module/user_update.js | 24 - netease_api/module/video_category_list.js | 20 - netease_api/module/video_detail.js | 18 - netease_api/module/video_detail_info.js | 19 - netease_api/module/video_group.js | 21 - netease_api/module/video_group_list.js | 16 - netease_api/module/video_sub.js | 19 - netease_api/module/video_timeline_all.js | 22 - .../module/video_timeline_recommend.js | 17 - netease_api/module/video_url.js | 19 - netease_api/module/weblog.js | 15 - netease_api/module/yunbei.js | 10 - netease_api/module/yunbei_expense.js | 17 - netease_api/module/yunbei_info.js | 9 - netease_api/module/yunbei_receipt.js | 17 - netease_api/module/yunbei_sign.js | 11 - netease_api/module/yunbei_task_finish.js | 17 - netease_api/module/yunbei_tasks.js | 14 - netease_api/module/yunbei_tasks_todo.js | 14 - netease_api/module/yunbei_today.js | 9 - netease_api/package-lock.json | 4096 -------- netease_api/package.json | 54 - netease_api/plugins/upload.js | 48 - netease_api/public/avatar_update.html | 82 - netease_api/public/index.html | 56 - netease_api/public/playlist_cover_update.html | 91 - netease_api/public/test.html | 61 - netease_api/renovate.json | 3 - netease_api/routes/index.js | 8811 ----------------- netease_api/tsconfig.json | 20 - netease_api/util/apicache.js | 830 -- netease_api/util/crypto.js | 67 - netease_api/util/index.js | 17 - netease_api/util/memory-cache.js | 63 - netease_api/util/request.js | 177 - 228 files changed, 1 insertion(+), 20219 deletions(-) delete mode 100644 netease_api/.editorconfig delete mode 100644 netease_api/.eslintrc.js delete mode 100644 netease_api/.gitignore delete mode 100644 netease_api/.npmignore delete mode 100644 netease_api/.prettierrc delete mode 100644 netease_api/README.MD delete mode 100644 netease_api/app.js delete mode 100644 netease_api/buildScript.js delete mode 100644 netease_api/interface.d.ts delete mode 100644 netease_api/main.js delete mode 100644 netease_api/module/activate_init_profile.js delete mode 100644 netease_api/module/album.js delete mode 100644 netease_api/module/album_detail.js delete mode 100644 netease_api/module/album_detail_dynamic.js delete mode 100644 netease_api/module/album_list.js delete mode 100644 netease_api/module/album_list_style.js delete mode 100644 netease_api/module/album_new.js delete mode 100644 netease_api/module/album_newest.js delete mode 100644 netease_api/module/album_songsaleboard.js delete mode 100644 netease_api/module/album_sub.js delete mode 100644 netease_api/module/album_sublist.js delete mode 100644 netease_api/module/artist_album.js delete mode 100644 netease_api/module/artist_desc.js delete mode 100644 netease_api/module/artist_list.js delete mode 100644 netease_api/module/artist_mv.js delete mode 100644 netease_api/module/artist_songs.js delete mode 100644 netease_api/module/artist_sub.js delete mode 100644 netease_api/module/artist_sublist.js delete mode 100644 netease_api/module/artist_top_song.js delete mode 100644 netease_api/module/artists.js delete mode 100644 netease_api/module/audio_match.js delete mode 100644 netease_api/module/avatar_upload.js delete mode 100644 netease_api/module/banner.js delete mode 100644 netease_api/module/batch.js delete mode 100644 netease_api/module/calendar.js delete mode 100644 netease_api/module/captcha_sent.js delete mode 100644 netease_api/module/captcha_verify.js delete mode 100644 netease_api/module/cellphone_existence_check.js delete mode 100644 netease_api/module/check_music.js delete mode 100644 netease_api/module/cloudsearch.js delete mode 100644 netease_api/module/comment.js delete mode 100644 netease_api/module/comment_album.js delete mode 100644 netease_api/module/comment_dj.js delete mode 100644 netease_api/module/comment_event.js delete mode 100644 netease_api/module/comment_floor.js delete mode 100644 netease_api/module/comment_hot.js delete mode 100644 netease_api/module/comment_hotwall_list.js delete mode 100644 netease_api/module/comment_like.js delete mode 100644 netease_api/module/comment_music.js delete mode 100644 netease_api/module/comment_mv.js delete mode 100644 netease_api/module/comment_new.js delete mode 100644 netease_api/module/comment_playlist.js delete mode 100644 netease_api/module/comment_video.js delete mode 100644 netease_api/module/countries_code_list.js delete mode 100644 netease_api/module/daily_signin.js delete mode 100644 netease_api/module/digitalAlbum_ordering.js delete mode 100644 netease_api/module/digitalAlbum_purchased.js delete mode 100644 netease_api/module/dj_banner.js delete mode 100644 netease_api/module/dj_category_excludehot.js delete mode 100644 netease_api/module/dj_category_recommend.js delete mode 100644 netease_api/module/dj_catelist.js delete mode 100644 netease_api/module/dj_detail.js delete mode 100644 netease_api/module/dj_hot.js delete mode 100644 netease_api/module/dj_paygift.js delete mode 100644 netease_api/module/dj_personalize_recommend.js delete mode 100644 netease_api/module/dj_program.js delete mode 100644 netease_api/module/dj_program_detail.js delete mode 100644 netease_api/module/dj_program_toplist.js delete mode 100644 netease_api/module/dj_program_toplist_hours.js delete mode 100644 netease_api/module/dj_radio_hot.js delete mode 100644 netease_api/module/dj_recommend.js delete mode 100644 netease_api/module/dj_recommend_type.js delete mode 100644 netease_api/module/dj_sub.js delete mode 100644 netease_api/module/dj_sublist.js delete mode 100644 netease_api/module/dj_subscriber.js delete mode 100644 netease_api/module/dj_today_perfered.js delete mode 100644 netease_api/module/dj_toplist.js delete mode 100644 netease_api/module/dj_toplist_hours.js delete mode 100644 netease_api/module/dj_toplist_newcomer.js delete mode 100644 netease_api/module/dj_toplist_pay.js delete mode 100644 netease_api/module/dj_toplist_popular.js delete mode 100644 netease_api/module/event.js delete mode 100644 netease_api/module/event_del.js delete mode 100644 netease_api/module/event_forward.js delete mode 100644 netease_api/module/fm_trash.js delete mode 100644 netease_api/module/follow.js delete mode 100644 netease_api/module/history_recommend_songs.js delete mode 100644 netease_api/module/history_recommend_songs_detail.js delete mode 100644 netease_api/module/homepage_block_page.js delete mode 100644 netease_api/module/homepage_dragon_ball.js delete mode 100644 netease_api/module/hot_topic.js delete mode 100644 netease_api/module/like.js delete mode 100644 netease_api/module/likelist.js delete mode 100644 netease_api/module/login.js delete mode 100644 netease_api/module/login_cellphone.js delete mode 100644 netease_api/module/login_refresh.js delete mode 100644 netease_api/module/login_status.js delete mode 100644 netease_api/module/logout.js delete mode 100644 netease_api/module/lyric.js delete mode 100644 netease_api/module/msg_comments.js delete mode 100644 netease_api/module/msg_forwards.js delete mode 100644 netease_api/module/msg_notices.js delete mode 100644 netease_api/module/msg_private.js delete mode 100644 netease_api/module/msg_private_history.js delete mode 100644 netease_api/module/mv_all.js delete mode 100644 netease_api/module/mv_detail.js delete mode 100644 netease_api/module/mv_detail_info.js delete mode 100644 netease_api/module/mv_exclusive_rcmd.js delete mode 100644 netease_api/module/mv_first.js delete mode 100644 netease_api/module/mv_sub.js delete mode 100644 netease_api/module/mv_sublist.js delete mode 100644 netease_api/module/mv_url.js delete mode 100644 netease_api/module/personal_fm.js delete mode 100644 netease_api/module/personalized.js delete mode 100644 netease_api/module/personalized_djprogram.js delete mode 100644 netease_api/module/personalized_mv.js delete mode 100644 netease_api/module/personalized_newsong.js delete mode 100644 netease_api/module/personalized_privatecontent.js delete mode 100644 netease_api/module/personalized_privatecontent_list.js delete mode 100644 netease_api/module/playlist_catlist.js delete mode 100644 netease_api/module/playlist_cover_update.js delete mode 100644 netease_api/module/playlist_create.js delete mode 100644 netease_api/module/playlist_delete.js delete mode 100644 netease_api/module/playlist_desc_update.js delete mode 100644 netease_api/module/playlist_detail.js delete mode 100644 netease_api/module/playlist_highquality_tags.js delete mode 100644 netease_api/module/playlist_hot.js delete mode 100644 netease_api/module/playlist_mylike.js delete mode 100644 netease_api/module/playlist_name_update.js delete mode 100644 netease_api/module/playlist_order_update.js delete mode 100644 netease_api/module/playlist_subscribe.js delete mode 100644 netease_api/module/playlist_subscribers.js delete mode 100644 netease_api/module/playlist_tags_update.js delete mode 100644 netease_api/module/playlist_track_add.js delete mode 100644 netease_api/module/playlist_track_delete.js delete mode 100644 netease_api/module/playlist_tracks.js delete mode 100644 netease_api/module/playlist_update.js delete mode 100644 netease_api/module/playlist_video_recent.js delete mode 100644 netease_api/module/playmode_intelligence_list.js delete mode 100644 netease_api/module/program_recommend.js delete mode 100644 netease_api/module/rebind.js delete mode 100644 netease_api/module/recommend_resource.js delete mode 100644 netease_api/module/recommend_songs.js delete mode 100644 netease_api/module/register_cellphone.js delete mode 100644 netease_api/module/related_allvideo.js delete mode 100644 netease_api/module/related_playlist.js delete mode 100644 netease_api/module/resource_like.js delete mode 100644 netease_api/module/scrobble.js delete mode 100644 netease_api/module/search.js delete mode 100644 netease_api/module/search_default.js delete mode 100644 netease_api/module/search_hot.js delete mode 100644 netease_api/module/search_hot_detail.js delete mode 100644 netease_api/module/search_multimatch.js delete mode 100644 netease_api/module/search_suggest.js delete mode 100644 netease_api/module/send_playlist.js delete mode 100644 netease_api/module/send_text.js delete mode 100644 netease_api/module/setting.js delete mode 100644 netease_api/module/share_resource.js delete mode 100644 netease_api/module/simi_artist.js delete mode 100644 netease_api/module/simi_mv.js delete mode 100644 netease_api/module/simi_playlist.js delete mode 100644 netease_api/module/simi_song.js delete mode 100644 netease_api/module/simi_user.js delete mode 100644 netease_api/module/song_detail.js delete mode 100644 netease_api/module/song_order_update.js delete mode 100644 netease_api/module/song_url.js delete mode 100644 netease_api/module/top_album.js delete mode 100644 netease_api/module/top_artists.js delete mode 100644 netease_api/module/top_list.js delete mode 100644 netease_api/module/top_mv.js delete mode 100644 netease_api/module/top_playlist.js delete mode 100644 netease_api/module/top_playlist_highquality.js delete mode 100644 netease_api/module/top_song.js delete mode 100644 netease_api/module/toplist.js delete mode 100644 netease_api/module/toplist_artist.js delete mode 100644 netease_api/module/toplist_detail.js delete mode 100644 netease_api/module/user_account.js delete mode 100644 netease_api/module/user_audio.js delete mode 100644 netease_api/module/user_binding.js delete mode 100644 netease_api/module/user_cloud.js delete mode 100644 netease_api/module/user_cloud_del.js delete mode 100644 netease_api/module/user_cloud_detail.js delete mode 100644 netease_api/module/user_detail.js delete mode 100644 netease_api/module/user_dj.js delete mode 100644 netease_api/module/user_event.js delete mode 100644 netease_api/module/user_followeds.js delete mode 100644 netease_api/module/user_follows.js delete mode 100644 netease_api/module/user_level.js delete mode 100644 netease_api/module/user_playlist.js delete mode 100644 netease_api/module/user_record.js delete mode 100644 netease_api/module/user_replacephone.js delete mode 100644 netease_api/module/user_subcount.js delete mode 100644 netease_api/module/user_update.js delete mode 100644 netease_api/module/video_category_list.js delete mode 100644 netease_api/module/video_detail.js delete mode 100644 netease_api/module/video_detail_info.js delete mode 100644 netease_api/module/video_group.js delete mode 100644 netease_api/module/video_group_list.js delete mode 100644 netease_api/module/video_sub.js delete mode 100644 netease_api/module/video_timeline_all.js delete mode 100644 netease_api/module/video_timeline_recommend.js delete mode 100644 netease_api/module/video_url.js delete mode 100644 netease_api/module/weblog.js delete mode 100644 netease_api/module/yunbei.js delete mode 100644 netease_api/module/yunbei_expense.js delete mode 100644 netease_api/module/yunbei_info.js delete mode 100644 netease_api/module/yunbei_receipt.js delete mode 100644 netease_api/module/yunbei_sign.js delete mode 100644 netease_api/module/yunbei_task_finish.js delete mode 100644 netease_api/module/yunbei_tasks.js delete mode 100644 netease_api/module/yunbei_tasks_todo.js delete mode 100644 netease_api/module/yunbei_today.js delete mode 100644 netease_api/package-lock.json delete mode 100644 netease_api/package.json delete mode 100644 netease_api/plugins/upload.js delete mode 100644 netease_api/public/avatar_update.html delete mode 100644 netease_api/public/index.html delete mode 100644 netease_api/public/playlist_cover_update.html delete mode 100644 netease_api/public/test.html delete mode 100644 netease_api/renovate.json delete mode 100644 netease_api/routes/index.js delete mode 100644 netease_api/tsconfig.json delete mode 100644 netease_api/util/apicache.js delete mode 100644 netease_api/util/crypto.js delete mode 100644 netease_api/util/index.js delete mode 100644 netease_api/util/memory-cache.js delete mode 100644 netease_api/util/request.js diff --git a/.gitignore b/.gitignore index c9b6dc7..e02847c 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ pnpm-debug.log* *.sw? .vercel +/netease_api #Electron-builder output /dist_electron diff --git a/netease_api/.editorconfig b/netease_api/.editorconfig deleted file mode 100644 index 6c725ce..0000000 --- a/netease_api/.editorconfig +++ /dev/null @@ -1,34 +0,0 @@ - -# EditorConfig is awesome: http://EditorConfig.org - -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*] -end_of_line = lf -insert_final_newline = true - -# Matches multiple files with brace expansion notation -# Set default charset -[*.{js,py}] -charset = utf-8 - -# 4 space indentation -[*.py] -indent_style = space -indent_size = 4 - -# Tab indentation (no size specified) -[Makefile] -indent_style = tab - -# Indentation override for all JS under lib directory -[*.{js,ts}] -indent_style = space -indent_size = 2 - -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] -indent_style = space -indent_size = 2 \ No newline at end of file diff --git a/netease_api/.eslintrc.js b/netease_api/.eslintrc.js deleted file mode 100644 index e4b2246..0000000 --- a/netease_api/.eslintrc.js +++ /dev/null @@ -1,49 +0,0 @@ -module.exports = { - root: true, - parserOptions: { - parser: 'babel-eslint', - ecmaVersion: 2018, - sourceType: 'module', - }, - plugins: ['html'], - extends: ['plugin:prettier/recommended'], - env: { - browser: true, - node: true, - }, - - rules: { - indent: ['error', 2, { SwitchCase: 1 }], - 'space-infix-ops': ['error', { int32Hint: false }], - 'key-spacing': [ - 2, - { - beforeColon: false, - afterColon: true, - }, - ], - 'no-octal': 2, - 'no-redeclare': 2, - 'comma-spacing': 2, - 'no-new-object': 2, - 'arrow-spacing': 2, - quotes: [ - 2, - 'single', - { - avoidEscape: true, - allowTemplateLiterals: true, - }, - ], - }, - overrides: [ - { - files: ['**/*.ts'], - parser: '@typescript-eslint/parser', - extends: [ - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'prettier/@typescript-eslint', - ], - }, - ], -}; diff --git a/netease_api/.gitignore b/netease_api/.gitignore deleted file mode 100644 index f284b53..0000000 --- a/netease_api/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.DS_Store -node_modules -*.log -.idea -.vscode \ No newline at end of file diff --git a/netease_api/.npmignore b/netease_api/.npmignore deleted file mode 100644 index 3f24434..0000000 --- a/netease_api/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -static -docs -node_modules \ No newline at end of file diff --git a/netease_api/.prettierrc b/netease_api/.prettierrc deleted file mode 100644 index aea847c..0000000 --- a/netease_api/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "semi": true, - "trailingComma": "all", - "singleQuote": true -} diff --git a/netease_api/README.MD b/netease_api/README.MD deleted file mode 100644 index 679cf3e..0000000 --- a/netease_api/README.MD +++ /dev/null @@ -1,312 +0,0 @@ -# 网易云音乐 API - -网易云音乐 Node.js API service - -

-Version -License -devDependencies -devDependencies - -

- -## 灵感来自 - -[disoul/electron-cloud-music](https://github.com/disoul/electron-cloud-music) - -[darknessomi/musicbox](https://github.com/darknessomi/musicbox) - -[sqaiyan/netmusic-node](https://github.com/sqaiyan/netmusic-node) - - -## 环境要求 - -需要 NodeJS 8.12+ 环境 - -## 安装 - -```shell - -$ git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git - -$ npm install -``` - -或者 -```shell -$ git clone https://github.com/Binaryify/NeteaseCloudMusicApi.git - -$ npm install -``` - -## 运行 - -```shell -$ node app.js -``` - -服务器启动默认端口为 3000,若不想使用 3000 端口,可使用以下命令: Mac/Linux - -```shell -$ PORT=4000 node app.js -``` - -windows 下使用 git-bash 或者 cmder 等终端执行以下命令: - -```shell -$ set PORT=4000 && node app.js -``` - -## 可以在Node.js调用 -v3.31.0后支持Node.js调用,导入的方法为`module`内的文件名,返回内容包含`status`和`body`,`status`为状态码,`body`为请求返回内容,参考`module_example` 文件夹下的 `test.js` -```js -const { login_cellphone, user_cloud } = require('NeteaseCloudMusicApi') -async function main() { - try { - const result = await login_cellphone({ - phone: '手机号', - password: '密码' - }) - console.log(result) - const result2 = await user_cloud({ - cookie: result.body.cookie // 凭证 - }) - console.log(result2.body) - - } catch (error) { - console.log(error) - } -} -main() -``` - -## 支持 TypeScript -```ts -// test.ts -import { banner } from 'NeteaseCloudMusicApi' -banner({ type:0 }).then(res=>{ - console.log(res) -}) -``` - - -## 使用文档 - -[文档地址](https://binaryify.github.io/NeteaseCloudMusicApi) - -[文档地址2](https://neteasecloudmusicapi.vercel.app) - -![文档](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/docs.png) - - -## 功能特性 -1. 登录 -2. 刷新登录 -3. 发送验证码 -4. 校验验证码 -5. 注册(修改密码) -6. 获取用户信息 , 歌单,收藏,mv, dj 数量 -7. 获取用户歌单 -8. 获取用户电台 -9. 获取用户关注列表 -10. 获取用户粉丝列表 -11. 获取用户动态 -12. 获取用户播放记录 -13. 获取精品歌单 -14. 获取歌单详情 -15. 搜索 -16. 搜索建议 -17. 获取歌词 -18. 歌曲评论 -19. 收藏单曲到歌单 -20. 专辑评论 -21. 歌单评论 -22. mv 评论 -23. 电台节目评论 -24. banner -25. 获取歌曲详情 -26. 获取专辑内容 -27. 获取歌手单曲 -28. 获取歌手 mv -29. 获取歌手专辑 -30. 获取歌手描述 -31. 获取相似歌手 -32. 获取相似歌单 -33. 相似 mv -34. 获取相似音乐 -35. 获取最近 5 个听了这首歌的用户 -36. 获取每日推荐歌单 -37. 获取每日推荐歌曲 -38. 私人 FM -39. 签到 -40. 喜欢音乐 -41. 垃圾桶 -42. 歌单 ( 网友精选碟 ) -43. 新碟上架 -44. 热门歌手 -45. 最新 mv -46. 推荐 mv -47. 推荐歌单 -48. 推荐新音乐 -49. 推荐电台 -50. 推荐节目 -51. 独家放送 -52. mv 排行 -53. 获取 mv 数据 -54. 播放 mv/视频 -55. 排行榜 -56. 歌手榜 -57. 云盘 -58. 电台 - 推荐 -59. 电台 - 分类 -60. 电台 - 分类推荐 -61. 电台 - 订阅 -62. 电台 - 详情 -63. 电台 - 节目 -64. 给评论点赞 -65. 获取动态 -66. 热搜列表(简略) -67. 发送私信 -68. 发送私信歌单 -69. 新建歌单 -70. 收藏/取消收藏歌单 -71. 歌单分类 -72. 收藏的歌手列表 -73. 订阅的电台列表 -74. 相关歌单推荐 -75. 付费精选接口 -76. 音乐是否可用检查接口 -77. 登录状态 -78. 获取视频播放地址 -79. 发送/删除评论 -80. 热门评论 -81. 视频评论 -82. 退出登录 -83. 所有榜单 -84. 所有榜单内容摘要 -85. 收藏视频 -86. 收藏 MV -87. 视频详情 -88. 相关视频 -89. 关注用户 -90. 新歌速递 -91. 喜欢音乐列表(无序) -92. 收藏的 MV 列表 -93. 获取最新专辑 -94. 听歌打卡 -95. 获取视频标签/分类下的视频 -96. 已收藏专辑列表 -97. 获取动态评论 -98. 歌单收藏者列表 -99. 云盘歌曲删除 -100. 热门话题 -101. 电台 - 推荐类型 -102. 电台 - 非热门类型 -103. 电台 - 今日优选 -104. 心动模式/智能播放 -105. 转发动态 -106. 删除动态 -107. 分享歌曲、歌单、mv、电台、电台节目到动态 -108. 通知-私信 -109. 通知-评论 -110. 通知-@我 -111. 通知-通知 -112. 设置 -113. 云盘数据详情 -114. 私信内容 -115. 我的数字专辑 -116. batch批量请求接口 -117. 获取视频标签列表 -118. 全部mv -119. 网易出品mv -120. 收藏/取消收藏专辑 -121. 专辑动态信息 -122. 热搜列表(详细) -123. 更换绑定手机 -124. 检测手机号码是否已注册 -125. 初始化昵称 -126. 更新歌单描述 -127. 更新歌单名 -128. 更新歌单标签 -129. 默认搜索关键词 -130. 删除歌单 -131. 电台banner -132. 用户电台 -133. 热门电台 -134. 电台 - 节目详情 -135. 电台 - 节目榜 -136. 电台 - 新晋电台榜/热门电台榜 -137. 类别热门电台 -138. 云村热评 -139. 电台24小时节目榜 -140. 电台24小时主播榜 -141. 电台最热主播榜 -142. 电台主播新人榜 -143. 电台付费精品榜 -144. 歌手热门50首歌曲 -145. 购买数字专辑 -146. 获取 mv 点赞转发评论数数据 -147. 获取视频点赞转发评论数数据 -148. 调整歌单顺序 -149. 调整歌曲顺序 -150. 独家放送列表 -151. 获取推荐视频 -152. 获取视频分类列表 -153. 获取全部视频列表接口 -154. 获取历史日推可用日期列表 -155. 获取历史日推详细数据 -156. 国家编码列表 -157. 首页-发现 -158. 首页-发现-圆形图标入口列表 -159. 数字专辑-全部新碟 -160. 数字专辑-热门新碟 -161. 数字专辑&数字单曲-榜单 -162. 数字专辑-语种风格馆 -163. 数字专辑详情 -164. 更新头像 -165. 歌单封面上传 -166. 楼层评论 -167. 歌手全部歌曲 -168. 精品歌单标签列表 -169. 用户等级信息 -170. 电台个性推荐 -171. 用户绑定信息 -172. 用户绑定手机 -173. 新版评论 -174. 点赞过的视频 -175. 收藏视频到视频歌单 -176. 删除视频歌单里的视频 -177. 最近播放的视频 -178. 音乐日历 -179. 电台订阅者列表 -180. 云贝签到信息 -181. 云贝签到 -182. 云贝所有任务 -183. 云贝todo任务 -184. 云贝今日签到信息 -185. 云贝完成任务 -186. 云贝收入 -187. 云贝支出 -188. 云贝账户信息 -189. 账号信息 - -## 更新日志 - -[changelog](https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/CHANGELOG.MD) - -## 单元测试 - -```shell -$ npm test -``` - -![单元测试](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/screenshot1.png) -![单元测试](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/screenshot2.png) - -## 贡献者 -![](https://opencollective.com/NeteaseCloudMusicApi/contributors.svg?width=890) - - -## License - -[The MIT License (MIT)](https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/LICENSE) diff --git a/netease_api/app.js b/netease_api/app.js deleted file mode 100644 index b1f3294..0000000 --- a/netease_api/app.js +++ /dev/null @@ -1,117 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const express = require('express'); -const bodyParser = require('body-parser'); -const request = require('./util/request'); -const packageJSON = require('./package.json'); -const exec = require('child_process').exec; -const cache = require('./util/apicache').middleware; -const { cookieToJson } = require('./util/index'); -const fileUpload = require('express-fileupload'); -// version check -exec('npm info NeteaseCloudMusicApi version', (err, stdout, stderr) => { - if (!err) { - let version = stdout.trim(); - if (packageJSON.version < version) { - console.log( - `最新版本: ${version}, 当前版本: ${packageJSON.version}, 请及时更新`, - ); - } - } -}); - -const app = express(); - -// CORS & Preflight request -app.use((req, res, next) => { - if (req.path !== '/' && !req.path.includes('.')) { - res.set({ - 'Access-Control-Allow-Credentials': true, - 'Access-Control-Allow-Origin': req.headers.origin || '*', - 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type', - 'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS', - 'Content-Type': 'application/json; charset=utf-8', - }); - } - req.method === 'OPTIONS' ? res.status(204).end() : next(); -}); - -// cookie parser -app.use((req, res, next) => { - req.cookies = {}; - (req.headers.cookie || '').split(/\s*;\s*/).forEach((pair) => { - let crack = pair.indexOf('='); - if (crack < 1 || crack == pair.length - 1) return; - req.cookies[ - decodeURIComponent(pair.slice(0, crack)).trim() - ] = decodeURIComponent(pair.slice(crack + 1)).trim(); - }); - next(); -}); - -// body parser -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); - -app.use(fileUpload()); - -// static -app.use(express.static(path.join(__dirname, 'public'))); - -// cache -app.use(cache('2 minutes', (req, res) => res.statusCode === 200)); -// router -const special = { - 'daily_signin.js': '/daily_signin', - 'fm_trash.js': '/fm_trash', - 'personal_fm.js': '/personal_fm', -}; - -fs.readdirSync(path.join(__dirname, 'module')) - .reverse() - .forEach((file) => { - if (!file.endsWith('.js')) return; - let route = - file in special - ? special[file] - : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/'); - let question = require(path.join(__dirname, 'module', file)); - - app.use(route, (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - - question(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }); - }); - -const port = process.env.PORT || 3000; -const host = process.env.HOST || ''; - -app.server = app.listen(port, host, () => { - console.log(`server running @ http://${host ? host : 'localhost'}:${port}`); -}); - -module.exports = app; diff --git a/netease_api/buildScript.js b/netease_api/buildScript.js deleted file mode 100644 index e557384..0000000 --- a/netease_api/buildScript.js +++ /dev/null @@ -1,60 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const express = require('express'); -const request = require('./util/request'); -const strip = require('strip-comments'); -var router = express.Router(); -const special = { - 'daily_signin.js': '/daily_signin', - 'fm_trash.js': '/fm_trash', - 'personal_fm.js': '/personal_fm', -}; - -const app = express(); -const temp = {}; - -fs.readdirSync(path.join(__dirname, 'module')) - .reverse() - .forEach((file) => { - if (!file.endsWith('.js')) return; - let route = - file in special - ? special[file] - : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/'); - let question = require(path.join(__dirname, 'module', file)); - // console.log(question.toString()) - const func = `(req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const ${file.replace(/\.js$/i, '')} = ${strip(question.toString())}; - ${file.replace(/\.js$/i, '')}(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - }`; - temp[route] = func; - }); - -fs.writeFileSync( - path.resolve(__dirname, './test_result.json'), - JSON.stringify(temp), -); diff --git a/netease_api/interface.d.ts b/netease_api/interface.d.ts deleted file mode 100644 index 548768d..0000000 --- a/netease_api/interface.d.ts +++ /dev/null @@ -1,1311 +0,0 @@ -export interface RequestBaseConfig { - cookie?: string; - realIP?: string; // IPv4/IPv6 filled in X-Real-IP - proxy?: string; // HTTP proxy -} - -export interface MultiPageConfig { - limit?: string | number; - offset?: string | number; -} - -export interface ImageUploadConfig { - imgFile: { - name: string; - data: string | Buffer; - }; - imgSize?: number; - imgX?: number; - imgY?: number; -} - -export interface APIBaseResponse { - code: number; - cookie: string; - [index: string]: unknown; -} - -export interface Response { - status: number; // The Http Response Code - body: APIBaseResponse; // API Response body - cookie: string[]; -} - -export const enum SubAction { - sub = 1, - unsub = 0, -} - -export function activate_init_profile( - params: { nickname: string } & RequestBaseConfig, -): Promise; - -export function album( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function album_detail( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function album_detail_dynamic( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export const enum AlbumListArea { - all = 'ALL', - zh = 'ZH', - ea = 'EA', - kr = 'KR', - jp = 'JP', -} - -export const enum ListOrder { - hot = 'hot', - new = 'new', -} - -export function album_list( - params: { area?: AlbumListArea; type: string } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export const enum AlbumListStyleArea { - zh = 'Z_H', - ea = 'E_A', - kr = 'KR', - jp = 'JP', -} - -export function album_list_style( - params: { area?: AlbumListStyleArea } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function album_new( - params: { area?: AlbumListArea } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function album_newest(params: RequestBaseConfig): Promise; - -export const enum AlbumSongsaleboardType { - daily = 'daily', - week = 'week', - year = 'year', - total = 'total', -} - -export const enum AlbumSongsaleboardAlbumType { - album = 0, - single = 1, -} - -export function album_songsaleboard( - params: { - albumType?: AlbumSongsaleboardAlbumType; // 0 为数字专辑,1 为数字单曲 - type?: AlbumSongsaleboardType; - year?: string | number; // 年份,默认本年。 type 为 year 时有效 - } & RequestBaseConfig, -): Promise; - -export function album_sub( - params: { - id: string | number; - t: SubAction; - } & RequestBaseConfig, -): Promise; - -export function album_sublist( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function artist_album( - params: { id: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function artist_desc( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export const enum ArtistListArea { - zh = 'Z_H', - ea = 'E_A', - kr = 'KR', - jp = 'JP', -} - -export const enum ArtistArea { - all = '-1', - zh = '7', - ea = '96', - ja = '8', - kr = '16', - other = '0', -} - -export const enum ArtistType { - male = '1', - female = '2', - band = '3', -} - -export function artist_list( - params: { - area: ArtistArea; - initial?: - | 'a' - | 'b' - | 'c' - | 'd' - | 'e' - | 'f' - | 'g' - | 'h' - | 'i' - | 'j' - | 'k' - | 'l' - | 'm' - | 'n' - | 'o' - | 'p' - | 'q' - | 'r' - | 's' - | 't' - | 'u' - | 'v' - | 'w' - | 'x' - | 'y' - | 'z' - | 'A' - | 'B' - | 'C' - | 'D' - | 'E' - | 'F' - | 'G' - | 'H' - | 'I' - | 'J' - | 'K' - | 'L' - | 'M' - | 'N' - | 'O' - | 'P' - | 'Q' - | 'R' - | 'S' - | 'T' - | 'U' - | 'V' - | 'W' - | 'X' - | 'Y' - | 'Z'; - type?: ArtistType; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function artist_mv( - params: { id: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export const enum ArtistSongsOrder { - hot = 'hot', - time = 'time', -} - -export function artist_songs( - params: { - id: string | number; - order?: ArtistSongsOrder; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function artist_sub( - params: { id: string | number; t: SubAction } & RequestBaseConfig, -): Promise; - -export function artist_sublist( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function artist_top_song( - params: { - id: string | number; - } & RequestBaseConfig, -): Promise; - -export function artists( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function avatar_upload( - params: ImageUploadConfig & RequestBaseConfig, -): Promise; - -export const enum BannerType { - pc = 0, - android = 1, - iphone = 2, - ipad = 3, -} - -export function banner( - params: { type?: BannerType } & RequestBaseConfig, -): Promise; - -export function batch( - params: { [index: string]: unknown } & RequestBaseConfig, -): Promise; - -export function captcha_sent( - params: { cellphone: string; ctcode?: string } & RequestBaseConfig, -): Promise; - -export function captcha_verify( - params: { - ctcode?: string; - cellphone: string; - captcha: string; - } & RequestBaseConfig, -): Promise; - -export function cellphone_existence_check( - params: { cellphone: string; countrycode: string } & RequestBaseConfig, -): Promise; - -export function check_music( - params: { id: string | number; br: string | number } & RequestBaseConfig, -): Promise; - -export const enum SearchType { - single = 1, - album = 10, - artist = 100, - playlist = 1000, - user = 1002, - mv = 1004, - lyric = 1006, - dj = 1009, - video = 1014, - complex = 1018, -} - -export function cloudsearch( - params: { - keywords: string; - type?: SearchType; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export const enum CommentType { - song = 0, - mv = 1, - playlist = 2, - album = 3, - dj = 4, - video = 5, - event = 6, -} - -export const enum CommentAction { - add = 1, - delete = 0, - reply = 2, -} - -export function comment( - params: { - id: string | number; - type: CommentType; - t: CommentAction.delete; - commentId: string | number; - } & RequestBaseConfig, -): Promise; - -export function comment( - params: { - type: CommentType.event; - t: CommentAction.delete; - threadId: string; - commentId: string | number; - } & RequestBaseConfig, -): Promise; - -export function comment( - params: { - id: string | number; - type: CommentType; - t: CommentAction.add; - content: string | number; - } & RequestBaseConfig, -): Promise; - -export function comment( - params: { - type: CommentType.event; - t: CommentAction.add; - threadId: string; - content: string | number; - } & RequestBaseConfig, -): Promise; - -export function comment( - params: { - id: string | number; - type: CommentType; - t: CommentAction.reply; - content: string | number; - commentId: string | number; - } & RequestBaseConfig, -): Promise; - -export function comment( - params: { - type: CommentType.event; - t: CommentAction.reply; - threadId: string; - content: string | number; - commentId: string | number; - } & RequestBaseConfig, -): Promise; - -export function comment_album( - params: { - id: string | number; - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function comment_dj( - params: { - id: string | number; - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function comment_event( - params: { - threadId: string; - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function comment_floor( - params: { - id: string | number; - parentCommentId: string | number; - type: CommentType; - limit?: string | number; - time?: string | number; - } & RequestBaseConfig, -): Promise; - -export function comment_hot( - params: { - id: string | number; - type: CommentType; - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function comment_hotwall_list( - params: RequestBaseConfig, -): Promise; - -export function comment_like( - params: { - id: string | number; - type: CommentType; - t: SubAction; - cid: string | number; - threadId?: string; - } & RequestBaseConfig, -): Promise; - -export function comment_music( - params: { - id: string | number; - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function comment_mv( - params: { - id: string | number; - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function comment_playlist( - params: { - id: string | number; - - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function comment_video( - params: { - id: string | number; - before?: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function countries_code_list( - params: RequestBaseConfig, -): Promise; - -export const enum DailySigninType { - android = 0, - pc = 1, -} - -export function daily_signin( - params: { type?: DailySigninType } & RequestBaseConfig, -): Promise; - -export function digitalAlbum_ordering( - params: { - payment: string; - id: string | number; - quantity: string; - } & RequestBaseConfig, -): Promise; - -export function digitalAlbum_purchased( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function dj_banner(params: RequestBaseConfig): Promise; - -export function dj_category_excludehot( - params: RequestBaseConfig, -): Promise; - -export function dj_category_recommend( - params: RequestBaseConfig, -): Promise; - -export function dj_catelist(params: RequestBaseConfig): Promise; - -export function dj_detail( - params: { rid: string | number } & RequestBaseConfig, -): Promise; - -export function dj_hot( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function dj_paygift( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function dj_personalize_recommend( - params: { limit?: string | number } & RequestBaseConfig, -): Promise; - -export function dj_program( - params: { - rid: string | number; - asc: 'true' | 1 | 'false' | 0; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function dj_program_detail( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function dj_program_toplist( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function dj_program_toplist_hours( - params: { limit?: string | number } & RequestBaseConfig, -): Promise; - -export function dj_radio_hot( - params: { - cateId: string | number; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function dj_recommend(params: RequestBaseConfig): Promise; - -/* - 有声书 10001 - 知识技能 453050 - 商业财经 453051 - 人文历史 11 - 外语世界 13 - 亲子宝贝 14 - 创作|翻唱 2001 - 音乐故事 2 - 3D|电子 10002 - 相声曲艺 8 - 情感调频 3 - 美文读物 6 - 脱口秀 5 - 广播剧 7 - 二次元 3001 - 明星做主播 1 - 娱乐|影视 4 - 科技科学 453052 - 校园|教育 4001 - 旅途|城市 12 -*/ - -export function dj_recommend_type( - params: { type: number } & RequestBaseConfig, -): Promise; - -export function dj_sub( - params: { t: SubAction; rid: string | number } & RequestBaseConfig, -): Promise; - -export function dj_sublist( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function dj_today_perfered( - params: { page?: string | number } & RequestBaseConfig, -): Promise; - -export function dj_toplist( - params: { type?: ListOrder } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function dj_toplist_hours( - params: { limit?: string | number } & RequestBaseConfig, -): Promise; - -export function dj_toplist_newcomer( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function dj_toplist_pay( - params: { limit?: string | number } & RequestBaseConfig, -): Promise; - -export function dj_toplist_popular( - params: { limit?: string | number } & RequestBaseConfig, -): Promise; - -export function event( - params: { pagesize?: number; lasttime?: number } & RequestBaseConfig, -): Promise; - -export function event_del( - params: { evId: string | number } & RequestBaseConfig, -): Promise; - -export function event_forward( - params: { - forwords: string; - evId: string | number; - uid: string | number; - } & RequestBaseConfig, -): Promise; - -export function fm_trash( - params: { id: string | number; time?: string | number } & RequestBaseConfig, -): Promise; - -export function follow( - params: { t: SubAction; id: string | number } & RequestBaseConfig, -): Promise; - -export function history_recommend_songs( - params: RequestBaseConfig, -): Promise; - -export function history_recommend_songs_detail( - params: { date?: string } & RequestBaseConfig, -): Promise; - -export function homepage_block_page( - params: { refresh?: 'true' | 'false' | boolean } & RequestBaseConfig, -): Promise; - -export function homepage_dragon_ball( - params: RequestBaseConfig, -): Promise; - -export function hot_topic( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function like( - params: { - like?: 'true' | 'false' | boolean; - id: string | number; - alg?: string; - time?: string | number; - } & RequestBaseConfig, -): Promise; - -export function likelist( - params: { uid: string | number } & RequestBaseConfig, -): Promise; - -export function login( - params: { email: string; password: string } & RequestBaseConfig, -): Promise; - -export function login( - params: { email: string; md5_password: string } & RequestBaseConfig, -): Promise; - -export function login_cellphone( - params: { - phone: string; - countrycode?: string; - password: string; - } & RequestBaseConfig, -): Promise; - -export function login_cellphone( - params: { - phone: string; - countrycode?: string; - md5_password: string; - } & RequestBaseConfig, -): Promise; - -export function login_refresh(params: RequestBaseConfig): Promise; - -export function login_status(params: RequestBaseConfig): Promise; - -export function logout(params: RequestBaseConfig): Promise; - -export function lyric( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function msg_comments( - params: { - uid: string | number; - before?: string | number; - limit?: string | number; - } & RequestBaseConfig, -): Promise; - -export function msg_forwards( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function msg_notices( - params: { - limit?: string | number; - lasttime?: string | number; - } & RequestBaseConfig, -): Promise; - -export function msg_private( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function msg_private_history( - params: { - before?: string | number; - limit?: string | number; - uid: string | number; - } & RequestBaseConfig, -): Promise; - -export const enum MvArea { - all = '全部', - zh = '内地', - hk = '港台', - ea = '欧美', - kr = '韩国', - jp = '日本', -} - -export const enum MvType { - all = '全部', - offical = '官方版', - raw = '原生', - live = '现场版', - netease = '网易出品', -} - -export const enum MvOrder { - trend = '上升最快', - hot = '最热', - new = '最新', -} - -export function mv_all( - params: { - area?: MvArea; - type?: MvType; - order?: MvOrder; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function mv_detail( - params: { mvid?: string | number } & RequestBaseConfig, -): Promise; - -export function mv_detail_info( - params: { mvid: string | number } & RequestBaseConfig, -): Promise; - -export function mv_exclusive_rcmd( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function mv_first( - params: { area?: MvArea; limit?: string | number } & RequestBaseConfig, -): Promise; - -export function mv_sub( - params: { t: SubAction; mvid: string | number } & RequestBaseConfig, -): Promise; - -export function mv_sublist( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function mv_url( - params: { id?: string | number; r?: string | number } & RequestBaseConfig, -): Promise; - -export function personal_fm(params: RequestBaseConfig): Promise; - -export function personalized( - params: { limit?: string | number } & RequestBaseConfig, -): Promise; - -export function personalized_djprogram( - params: RequestBaseConfig, -): Promise; - -export function personalized_mv(params: RequestBaseConfig): Promise; - -export function personalized_newsong( - params: { - area?: string | number; - limit?: string | number; - } & RequestBaseConfig, -): Promise; - -export function personalized_privatecontent( - params: RequestBaseConfig, -): Promise; - -export function personalized_privatecontent_list( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function playlist_catlist(params: RequestBaseConfig): Promise; - -export function playlist_cover_update( - params: { id: string } & ImageUploadConfig & RequestBaseConfig, -): Promise; - -export function playlist_create( - params: { - name: string; - privacy: 0 | 10; - type?: PlaylistType; - } & RequestBaseConfig, -): Promise; - -export function playlist_delete( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function playlist_desc_update( - params: { id: string | number; desc: string } & RequestBaseConfig, -): Promise; - -export function playlist_detail( - params: { id: string | number; s?: string | number } & RequestBaseConfig, -): Promise; - -export function playlist_highquality_tags( - params: RequestBaseConfig, -): Promise; - -export function playlist_hot(params: RequestBaseConfig): Promise; - -export function playlist_name_update( - params: { id: string | number; name: string } & RequestBaseConfig, -): Promise; - -export function playlist_order_update( - params: { ids: string } & RequestBaseConfig, -): Promise; - -export function playlist_subscribe( - params: { t: SubAction; id: string | number } & RequestBaseConfig, -): Promise; - -export function playlist_subscribers( - params: { id?: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function playlist_tags_update( - params: { id: string | number; tags: string } & RequestBaseConfig, -): Promise; - -export function playlist_tracks( - params: { - op: 'add' | 'del'; - pid: string | number; - tracks: string; - } & RequestBaseConfig, -): Promise; - -export function playlist_update( - params: { - id: string | number; - name: string; - desc?: string; - tags?: string; - } & RequestBaseConfig, -): Promise; - -export function playmode_intelligence_list( - params: { - id: string | number; - pid: string | number; - sid?: string | number; - count?: string | number; - } & RequestBaseConfig, -): Promise; - -export function program_recommend( - params: { type: string } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function rebind( - params: { - captcha: string; - phone: string; - oldcaptcha: string; - ctcode?: string; - } & RequestBaseConfig, -): Promise; - -export function recommend_resource( - params: RequestBaseConfig, -): Promise; - -export function recommend_songs(params: RequestBaseConfig): Promise; - -export function register_cellphone( - params: { - captcha: string; - phone: string; - password: string; - nickname: string; - } & RequestBaseConfig, -): Promise; - -export function related_allvideo( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function related_playlist( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export const enum ResourceType { - mv = 1, - dj = 4, - video = 5, - event = 6, -} -type PlaylistType = 'NROMAL' | 'VIDEO'; - -export function resource_like( - params: { - t: SubAction; - type: ResourceType; - id?: string | number; - threadId?: string; - } & RequestBaseConfig, -): Promise; - -export function scrobble( - params: { - id: string | number; - sourceid: string | number; - time: string | number; - } & RequestBaseConfig, -): Promise; - -export function search( - params: { - keywords: string; - type?: SearchType; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function search_default(params: RequestBaseConfig): Promise; - -export function search_hot(params: RequestBaseConfig): Promise; - -export function search_hot_detail(params: RequestBaseConfig): Promise; - -export function search_multimatch( - params: { type?: number; keywords: string } & RequestBaseConfig, -): Promise; - -export const enum SearchSuggestType { - mobile = 'mobile', - web = 'web', -} - -export function search_suggest( - params: { keywords: string; type?: SearchSuggestType } & RequestBaseConfig, -): Promise; - -export function send_playlist( - params: { - playlist: string | number; - msg: string; - user_ids: string; - } & RequestBaseConfig, -): Promise; - -export function send_text( - params: { msg: string; user_ids: string } & RequestBaseConfig, -): Promise; - -export function setting(params: RequestBaseConfig): Promise; - -export const enum ShareResourceType { - song = 'song', - playlist = 'playlist', - mv = 'mv', - djprogram = 'djprogram', - djradio = 'djradio', -} - -export function share_resource( - params: { - type?: ShareResourceType; - msg?: string; - id?: string | number; - } & RequestBaseConfig, -): Promise; - -export function simi_artist( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function simi_mv( - params: { mvid: string | number } & RequestBaseConfig, -): Promise; - -export function simi_playlist( - params: { id: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function simi_song( - params: { id: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function simi_user( - params: { id: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function song_detail( - params: { ids: string } & RequestBaseConfig, -): Promise; - -export function song_order_update( - params: { pid: string | number; ids: string } & RequestBaseConfig, -): Promise; - -export function song_url( - params: { id: string | number; br?: string | number } & RequestBaseConfig, -): Promise; - -export function top_album( - params: { - area?: AlbumListArea; - type?: ListOrder; - year?: string; - mouth?: string; - } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function top_artists( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function top_list( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function top_mv( - params: { area?: MvArea } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function top_playlist( - params: { cat?: string; order?: ListOrder } & MultiPageConfig & - RequestBaseConfig, -): Promise; - -export function top_playlist_highquality( - params: { - cat?: string; - before?: string | number; - limit?: string | number; - } & RequestBaseConfig, -): Promise; - -export const enum TopSongType { - all = 0, - zh = 7, - ea = 96, - kr = 16, - ja = 8, -} - -export function top_song( - params: { type: TopSongType } & RequestBaseConfig, -): Promise; - -export function toplist(params: RequestBaseConfig): Promise; - -export const enum ToplistArtistType { - zh = 1, - ea = 2, - kr = 3, - ja = 4, -} - -export function toplist_artist( - params: { type?: ToplistArtistType } & RequestBaseConfig, -): Promise; - -export function toplist_detail(params: RequestBaseConfig): Promise; - -export function user_audio( - params: { uid: string | number } & RequestBaseConfig, -): Promise; - -export function user_cloud( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function user_cloud_del( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function user_cloud_detail( - params: { id: string | number } & RequestBaseConfig, -): Promise; - -export function user_detail( - params: { uid: string | number } & RequestBaseConfig, -): Promise; - -export function user_dj( - params: { uid: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function user_event( - params: { - lasttime?: string | number; - limit?: string | number; - uid: string | number; - } & RequestBaseConfig, -): Promise; - -export function user_followeds( - params: { - uid: string | number; - lasttime?: string | number; - limit?: string | number; - } & RequestBaseConfig, -): Promise; - -export function user_follows( - params: { uid: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export function user_level(params: RequestBaseConfig): Promise; - -export function user_playlist( - params: { uid: string | number } & MultiPageConfig & RequestBaseConfig, -): Promise; - -export const enum UserRecordType { - all = 0, - weekly = 1, -} - -export function user_record( - params: { uid: string | number; type?: UserRecordType } & RequestBaseConfig, -): Promise; - -export function user_subcount(params: RequestBaseConfig): Promise; - -export function user_update( - params: { - birthday: string; - city: string; - gender: string; - nickname: string; - province: string; - signature: string; - } & RequestBaseConfig, -): Promise; - -export function video_category_list( - params: MultiPageConfig & RequestBaseConfig, -): Promise; - -export function video_detail( - params: { id: string } & RequestBaseConfig, -): Promise; - -export function video_detail_info( - params: { vid: string } & RequestBaseConfig, -): Promise; - -export function video_group( - params: { id: string; offset?: string | number } & RequestBaseConfig, -): Promise; - -export function video_group_list(params: RequestBaseConfig): Promise; - -export function video_sub( - params: { t?: SubAction; id: string } & RequestBaseConfig, -): Promise; - -export function video_timeline_all( - params: { offset?: string | number } & RequestBaseConfig, -): Promise; - -export function video_timeline_recommend( - params: { offset?: string | number } & RequestBaseConfig, -): Promise; - -export function video_url( - params: { id: string | number; res?: number } & RequestBaseConfig, -): Promise; - -export function weblog( - params: { data?: { [index: string]: unknown } } & RequestBaseConfig, -): Promise; - -export function playlist_mylike( - params: { - time?: number | string; - limit: number | string; - } & RequestBaseConfig, -): Promise; - -export function playlist_track_add( - params: { pid?: number | string; ids: number | string } & RequestBaseConfig, -): Promise; - -export function playlist_track_delete( - params: { pid?: number | string; ids: number | string } & RequestBaseConfig, -): Promise; - -export function comment_new( - params: { - type?: number | string; - id: number | string; - pageNo?: number | string; - pageSize?: number | string; - sortType?: number | string; - } & RequestBaseConfig, -): Promise; - -export function calendar( - params: { - startTime?: number | string; - endTime: number | string; - } & RequestBaseConfig, -): Promise; - -export function playlist_video_recent( - params: RequestBaseConfig, -): Promise; - -export function user_binding( - params: { uid?: number | string } & RequestBaseConfig, -): Promise; - -export function user_replacephone( - params: { - phone: number | string; - captcha: number | string; - oldcaptcha: number | string; - countrycode?: number | string; - } & RequestBaseConfig, -): Promise; - -export function user_safe(params: RequestBaseConfig): Promise; - -export function dj_subscriber( - params: { - id: number | string; - limit?: number | string; - time?: number | string; - } & RequestBaseConfig, -): Promise; - -export function user_account(params: RequestBaseConfig): Promise; - -export function yunbei(params: RequestBaseConfig): Promise; - -export function yunbei_info(params: RequestBaseConfig): Promise; - -export function yunbei_sign(params: RequestBaseConfig): Promise; - -export function yunbei_receipt( - params: { - limit?: number | string; - offset?: number | string; - } & RequestBaseConfig, -): Promise; - -export function yunbei_expense( - params: { - limit?: number | string; - offset?: number | string; - } & RequestBaseConfig, -): Promise; - -export function yunbei_tasks(params: RequestBaseConfig): Promise; - -export function yunbei_today(params: RequestBaseConfig): Promise; - -export function yunbei_tasks_todo(params: RequestBaseConfig): Promise; - -export function yunbei_task_finish( - params: { - userTaskId: number | string; - depositCode?: number | string; - } & RequestBaseConfig, -): Promise; diff --git a/netease_api/main.js b/netease_api/main.js deleted file mode 100644 index 23c9295..0000000 --- a/netease_api/main.js +++ /dev/null @@ -1,26 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const request = require('./util/request'); -const { cookieToJson } = require('./util/index'); - -let obj = {}; -fs.readdirSync(path.join(__dirname, 'module')) - .reverse() - .forEach((file) => { - if (!file.endsWith('.js')) return; - let fileModule = require(path.join(__dirname, 'module', file)); - obj[file.split('.').shift()] = function (data) { - if (typeof data.cookie === 'string') { - data.cookie = cookieToJson(data.cookie); - } - return fileModule( - { - ...data, - cookie: data.cookie ? data.cookie : {}, - }, - request, - ); - }; - }); - -module.exports = obj; diff --git a/netease_api/module/activate_init_profile.js b/netease_api/module/activate_init_profile.js deleted file mode 100644 index fc69dcf..0000000 --- a/netease_api/module/activate_init_profile.js +++ /dev/null @@ -1,19 +0,0 @@ -// 初始化名字 - -module.exports = (query, request) => { - const data = { - nickname: query.nickname, - }; - return request( - 'POST', - `https://music.163.com/eapi/activate/initProfile`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/activate/initProfile', - }, - ); -}; diff --git a/netease_api/module/album.js b/netease_api/module/album.js deleted file mode 100644 index dd8147a..0000000 --- a/netease_api/module/album.js +++ /dev/null @@ -1,15 +0,0 @@ -// 专辑内容 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/album/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/album_detail.js b/netease_api/module/album_detail.js deleted file mode 100644 index 8bdc16d..0000000 --- a/netease_api/module/album_detail.js +++ /dev/null @@ -1,17 +0,0 @@ -// 数字专辑详情 -module.exports = (query, request) => { - const data = { - id: query.id, - }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/albumproduct/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/album_detail_dynamic.js b/netease_api/module/album_detail_dynamic.js deleted file mode 100644 index 0e30cd3..0000000 --- a/netease_api/module/album_detail_dynamic.js +++ /dev/null @@ -1,17 +0,0 @@ -// 专辑动态信息 -module.exports = (query, request) => { - const data = { - id: query.id, - }; - return request( - 'POST', - `https://music.163.com/api/album/detail/dynamic`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/album_list.js b/netease_api/module/album_list.js deleted file mode 100644 index f7b4840..0000000 --- a/netease_api/module/album_list.js +++ /dev/null @@ -1,21 +0,0 @@ -// 数字专辑-新碟上架 -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - area: query.area || 'ALL', //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本 - type: query.type, - }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/albumproduct/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/album_list_style.js b/netease_api/module/album_list_style.js deleted file mode 100644 index 849bf49..0000000 --- a/netease_api/module/album_list_style.js +++ /dev/null @@ -1,20 +0,0 @@ -// 数字专辑-语种风格馆 -module.exports = (query, request) => { - const data = { - limit: query.limit || 10, - offset: query.offset || 0, - total: true, - area: query.area || 'Z_H', //Z_H:华语,E_A:欧美,KR:韩国,JP:日本 - }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/appalbum/album/style`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/album_new.js b/netease_api/module/album_new.js deleted file mode 100644 index 92dd0b9..0000000 --- a/netease_api/module/album_new.js +++ /dev/null @@ -1,15 +0,0 @@ -// 全部新碟 -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - area: query.area || 'ALL', //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本 - }; - return request('POST', `https://music.163.com/weapi/album/new`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/album_newest.js b/netease_api/module/album_newest.js deleted file mode 100644 index 6fa6ee6..0000000 --- a/netease_api/module/album_newest.js +++ /dev/null @@ -1,15 +0,0 @@ -// 最新专辑 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/discovery/newAlbum`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/album_songsaleboard.js b/netease_api/module/album_songsaleboard.js deleted file mode 100644 index 236864f..0000000 --- a/netease_api/module/album_songsaleboard.js +++ /dev/null @@ -1,24 +0,0 @@ -// 数字专辑&数字单曲-榜单 -module.exports = (query, request) => { - let data = { - albumType: query.albumType || 0, //0为数字专辑,1为数字单曲 - }; - const type = query.type || 'daily'; // daily,week,year,total - if (type === 'year') { - data = { - ...data, - year: query.year, - }; - } - return request( - 'POST', - `https://music.163.com/api/feealbum/songsaleboard/${type}/type`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/album_sub.js b/netease_api/module/album_sub.js deleted file mode 100644 index 3be83fb..0000000 --- a/netease_api/module/album_sub.js +++ /dev/null @@ -1,14 +0,0 @@ -// 收藏/取消收藏专辑 - -module.exports = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { - id: query.id, - }; - return request('POST', `https://music.163.com/api/album/${query.t}`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/album_sublist.js b/netease_api/module/album_sublist.js deleted file mode 100644 index d71ab5b..0000000 --- a/netease_api/module/album_sublist.js +++ /dev/null @@ -1,15 +0,0 @@ -// 已收藏专辑列表 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/album/sublist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/artist_album.js b/netease_api/module/artist_album.js deleted file mode 100644 index 7e37321..0000000 --- a/netease_api/module/artist_album.js +++ /dev/null @@ -1,20 +0,0 @@ -// 歌手专辑列表 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/artist/albums/${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/artist_desc.js b/netease_api/module/artist_desc.js deleted file mode 100644 index 120c592..0000000 --- a/netease_api/module/artist_desc.js +++ /dev/null @@ -1,18 +0,0 @@ -// 歌手介绍 - -module.exports = (query, request) => { - const data = { - id: query.id, - }; - return request( - 'POST', - `https://music.163.com/weapi/artist/introduction`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/artist_list.js b/netease_api/module/artist_list.js deleted file mode 100644 index 605b376..0000000 --- a/netease_api/module/artist_list.js +++ /dev/null @@ -1,37 +0,0 @@ -// 歌手分类 - -/* - type 取值 - 1:男歌手 - 2:女歌手 - 3:乐队 - - area 取值 - -1:全部 - 7华语 - 96欧美 - 8:日本 - 16韩国 - 0:其他 - - initial 取值 a-z/A-Z -*/ - -module.exports = (query, request) => { - const data = { - initial: isNaN(query.initial) - ? (query.initial || '').toUpperCase().charCodeAt() || undefined - : query.initial, - offset: query.offset || 0, - limit: query.limit || 30, - total: true, - type: query.type || '1', - area: query.area, - }; - return request('POST', `https://music.163.com/api/v1/artist/list`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/artist_mv.js b/netease_api/module/artist_mv.js deleted file mode 100644 index 1195c92..0000000 --- a/netease_api/module/artist_mv.js +++ /dev/null @@ -1,16 +0,0 @@ -// 歌手相关MV - -module.exports = (query, request) => { - const data = { - artistId: query.id, - limit: query.limit, - offset: query.offset, - total: true, - }; - return request('POST', `https://music.163.com/weapi/artist/mvs`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/artist_songs.js b/netease_api/module/artist_songs.js deleted file mode 100644 index 4f74653..0000000 --- a/netease_api/module/artist_songs.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - id: query.id, - private_cloud: 'true', - work_type: 1, - order: query.order || 'hot', //hot,time - offset: query.offset || 0, - limit: query.limit || 100, - }; - return request('POST', `https://music.163.com/api/v1/artist/songs`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/artist_sub.js b/netease_api/module/artist_sub.js deleted file mode 100644 index abe238b..0000000 --- a/netease_api/module/artist_sub.js +++ /dev/null @@ -1,20 +0,0 @@ -// 收藏与取消收藏歌手 - -module.exports = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { - artistId: query.id, - artistIds: '[' + query.id + ']', - }; - return request( - 'POST', - `https://music.163.com/weapi/artist/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/artist_sublist.js b/netease_api/module/artist_sublist.js deleted file mode 100644 index f1a8b31..0000000 --- a/netease_api/module/artist_sublist.js +++ /dev/null @@ -1,15 +0,0 @@ -// 关注歌手列表 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/artist/sublist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/artist_top_song.js b/netease_api/module/artist_top_song.js deleted file mode 100644 index 79698a7..0000000 --- a/netease_api/module/artist_top_song.js +++ /dev/null @@ -1,12 +0,0 @@ -// 歌手热门 50 首歌曲 -module.exports = (query, request) => { - const data = { - id: query.id, - }; - return request('POST', `https://music.163.com/api/artist/top/song`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/artists.js b/netease_api/module/artists.js deleted file mode 100644 index 0ab1d87..0000000 --- a/netease_api/module/artists.js +++ /dev/null @@ -1,15 +0,0 @@ -// 歌手单曲 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/artist/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/audio_match.js b/netease_api/module/audio_match.js deleted file mode 100644 index 53b5c20..0000000 --- a/netease_api/module/audio_match.js +++ /dev/null @@ -1,19 +0,0 @@ -const realData = - 'eJx10mtIU2EcBvDtnCwNMfO2klUSmSQ5ZugKW/v/0TIjJVdhDStbXpqXrhY5Kwhtrcwiut9VSqMUMxX6IFqsD92sD1YgWGHRBcowKrpnPa/v+drg4flt572ds2PQ6XQut7MwJ940w2TOyS0pzF+/BV/MJrNO+3TVLOHUzKx5iw3/H5uZ7yxegct3tTl7Cr6QEa0gZ/dZOFsvfe5YHe1D+yFZxpncqEj/cCdwoirdVxHNnZrX3xygU5g7Eh6I9uOx8Ch4y9FQjlKkDz1pYrFXIJLUOovFGcYivqJgXqaXDqu7Rzc0XzmZxG81B/fF8wRVusn2jN5rDnwca8tFhyAJP4L4qiI9vX8cWzEmVKzT/46qxNpIdZOZz2HNcHhSkZ3D4AjYFpfGFkX6+dB+FvcSBe/SWbkLPVnEOJ1DFelXxVVci/Wj4TsBLhrQ/LGoaU4HxsTA28L76Cc8Dfau/U6F6FgkyBDDJar0g8tesmOvOHioWeXXmme6l3MLbIIre6wciU5E2t/k8WVxHfHvuUWXsH4SPCv1NW1Cz0aivgYO34vw1AEvi3MlIw0xHl6JNVPEGW41UJsqPaXYYTuEnotMdHwYfv7CFR/i+aXmrY5wrlSkEwr+0EJ0GvLmdw4/RS9Amj93UAbGZMIF40ezE3PtcG/yBWrT3L6oh66hFyMXK4xsUKT7aufzapxnFTwiNc3Wis5Bdm+OYCvmOuHj/ZeoQPOI00PUrUjXpG+kMFU61tFFDvQaZOn5DH4mzoLw4Hsaj14rzu/K4jF66fSWTnJinW3wBvcveqjZN3iFjKp0qKuF1mi21keST3NtTcbwu1eG3Dussr9eemljLIco0tVH7HwA493wOr+FlIjfy+GvkR4uwfjt4v/6G8K3NX8K38lt6B1ISa+Bv2O8Fy69foZOovci2S4Lr1aku4P9OEWVTt9wgMQ7exgJ8JXyI0W694WFyuBjcH75XyrEXsfhg+ZSvqZIf/Lct8Wp0md2tJN4PifEfjcm8gu02Ptbj459eum8eg8bFWlLXTb/A+uo9bM='; -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - algorithmCode: 'shazam_v2', - times: 1, - sessionId: 'C999431ACDC84EDBB984763654E6F8D7', - duration: 3.3066249999999995, - from: 'recognize-song', - rawdata: realData, - }; - return request('POST', `https://music.163.com/api/music/audio/match`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/avatar_upload.js b/netease_api/module/avatar_upload.js deleted file mode 100644 index a09e65e..0000000 --- a/netease_api/module/avatar_upload.js +++ /dev/null @@ -1,27 +0,0 @@ -const uploadPlugin = require('../plugins/upload'); -module.exports = async (query, request) => { - const uploadInfo = await uploadPlugin(query, request); - const res = await request( - 'POST', - `https://music.163.com/weapi/user/avatar/upload/v1`, - { - imgid: uploadInfo.imgId, - }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { - status: 200, - body: { - code: 200, - data: { - ...uploadInfo, - ...res.body, - }, - }, - }; -}; diff --git a/netease_api/module/banner.js b/netease_api/module/banner.js deleted file mode 100644 index c2fb384..0000000 --- a/netease_api/module/banner.js +++ /dev/null @@ -1,17 +0,0 @@ -// 首页轮播图 - -module.exports = (query, request) => { - const type = - { - 0: 'pc', - 1: 'android', - 2: 'iphone', - 3: 'ipad', - }[query.type || 0] || 'pc'; - return request( - 'POST', - `https://music.163.com/api/v2/banner/get`, - { clientType: type }, - { crypto: 'linuxapi', proxy: query.proxy, realIP: query.realIP }, - ); -}; diff --git a/netease_api/module/batch.js b/netease_api/module/batch.js deleted file mode 100644 index dd2e88e..0000000 --- a/netease_api/module/batch.js +++ /dev/null @@ -1,19 +0,0 @@ -// 批量请求接口 - -module.exports = (query, request) => { - const data = { - e_r: true, - }; - Object.keys(query).forEach((i) => { - if (/^\/api\//.test(i)) { - data[i] = query[i]; - } - }); - return request('POST', `https://music.163.com/eapi/batch`, data, { - crypto: 'eapi', - proxy: query.proxy, - url: '/api/batch', - cookie: query.cookie, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/calendar.js b/netease_api/module/calendar.js deleted file mode 100644 index 2abff77..0000000 --- a/netease_api/module/calendar.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = (query, request) => { - const data = { - startTime: query.startTime || Date.now(), - endTime: query.endTime || Date.now(), - }; - return request('POST', `https://music.163.com/api/mcalendar/detail`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/captcha_sent.js b/netease_api/module/captcha_sent.js deleted file mode 100644 index 6cae966..0000000 --- a/netease_api/module/captcha_sent.js +++ /dev/null @@ -1,14 +0,0 @@ -// 发送验证码 - -module.exports = (query, request) => { - const data = { - ctcode: query.ctcode || '86', - cellphone: query.phone, - }; - return request('POST', `https://music.163.com/weapi/sms/captcha/sent`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/captcha_verify.js b/netease_api/module/captcha_verify.js deleted file mode 100644 index f0edf1c..0000000 --- a/netease_api/module/captcha_verify.js +++ /dev/null @@ -1,20 +0,0 @@ -// 校验验证码 - -module.exports = (query, request) => { - const data = { - ctcode: query.ctcode || '86', - cellphone: query.phone, - captcha: query.captcha, - }; - return request( - 'POST', - `https://music.163.com/weapi/sms/captcha/verify`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/cellphone_existence_check.js b/netease_api/module/cellphone_existence_check.js deleted file mode 100644 index bb28316..0000000 --- a/netease_api/module/cellphone_existence_check.js +++ /dev/null @@ -1,20 +0,0 @@ -// 检测手机号码是否已注册 - -module.exports = (query, request) => { - const data = { - cellphone: query.phone, - countrycode: query.countrycode, - }; - return request( - 'POST', - `https://music.163.com/eapi/cellphone/existence/check`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/cellphone/existence/check', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/check_music.js b/netease_api/module/check_music.js deleted file mode 100644 index 6aed6fd..0000000 --- a/netease_api/module/check_music.js +++ /dev/null @@ -1,34 +0,0 @@ -// 歌曲可用性 - -module.exports = (query, request) => { - const data = { - ids: '[' + parseInt(query.id) + ']', - br: parseInt(query.br || 999000), - }; - return request( - 'POST', - `https://music.163.com/weapi/song/enhance/player/url`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ).then((response) => { - let playable = false; - if (response.body.code == 200) { - if (response.body.data[0].code == 200) { - playable = true; - } - } - if (playable) { - response.body = { success: true, message: 'ok' }; - return response; - } else { - response.status = 404; - response.body = { success: false, message: '亲爱的,暂无版权' }; - return Promise.reject(response); - } - }); -}; diff --git a/netease_api/module/cloudsearch.js b/netease_api/module/cloudsearch.js deleted file mode 100644 index f7bd53e..0000000 --- a/netease_api/module/cloudsearch.js +++ /dev/null @@ -1,21 +0,0 @@ -// 搜索 - -module.exports = (query, request) => { - const data = { - s: query.keywords, - type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudsearch/get/web`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment.js b/netease_api/module/comment.js deleted file mode 100644 index c3e0bab..0000000 --- a/netease_api/module/comment.js +++ /dev/null @@ -1,43 +0,0 @@ -// 发送与删除评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - query.t = { - 1: 'add', - 0: 'delete', - 2: 'reply', - }[query.t]; - query.type = { - 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // MV - 2: 'A_PL_0_', // 歌单 - 3: 'R_AL_3_', // 专辑 - 4: 'A_DJ_1_', // 电台, - 5: 'R_VI_62_', // 视频 - 6: 'A_EV_2_', // 动态 - }[query.type]; - const data = { - threadId: query.type + query.id, - }; - - if (query.type == 'A_EV_2_') { - data.threadId = query.threadId; - } - if (query.t == 'add') data.content = query.content; - else if (query.t == 'delete') data.commentId = query.commentId; - else if (query.t == 'reply') { - data.commentId = query.commentId; - data.content = query.content; - } - return request( - 'POST', - `https://music.163.com/weapi/resource/comments/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_album.js b/netease_api/module/comment_album.js deleted file mode 100644 index f873655..0000000 --- a/netease_api/module/comment_album.js +++ /dev/null @@ -1,22 +0,0 @@ -// 专辑评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_dj.js b/netease_api/module/comment_dj.js deleted file mode 100644 index 27d32d1..0000000 --- a/netease_api/module/comment_dj.js +++ /dev/null @@ -1,22 +0,0 @@ -// 电台评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_event.js b/netease_api/module/comment_event.js deleted file mode 100644 index cf89ade..0000000 --- a/netease_api/module/comment_event.js +++ /dev/null @@ -1,20 +0,0 @@ -// 获取动态评论 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/${query.threadId}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_floor.js b/netease_api/module/comment_floor.js deleted file mode 100644 index 818584b..0000000 --- a/netease_api/module/comment_floor.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = (query, request) => { - query.type = { - 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // MV - 2: 'A_PL_0_', // 歌单 - 3: 'R_AL_3_', // 专辑 - 4: 'A_DJ_1_', // 电台, - 5: 'R_VI_62_', // 视频 - }[query.type]; - const data = { - parentCommentId: query.parentCommentId, - threadId: query.type + query.id, - time: query.time || -1, - limit: query.limit || 20, - }; - return request( - 'POST', - `https://music.163.com/api/resource/comment/floor/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_hot.js b/netease_api/module/comment_hot.js deleted file mode 100644 index 749e318..0000000 --- a/netease_api/module/comment_hot.js +++ /dev/null @@ -1,30 +0,0 @@ -// 热门评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - query.type = { - 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // MV - 2: 'A_PL_0_', // 歌单 - 3: 'R_AL_3_', // 专辑 - 4: 'A_DJ_1_', // 电台, - 5: 'R_VI_62_', // 视频 - }[query.type]; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_hotwall_list.js b/netease_api/module/comment_hotwall_list.js deleted file mode 100644 index 0b7e67a..0000000 --- a/netease_api/module/comment_hotwall_list.js +++ /dev/null @@ -1,16 +0,0 @@ -// 云村热评 - -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/comment/hotwall/list/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_like.js b/netease_api/module/comment_like.js deleted file mode 100644 index e2cfca7..0000000 --- a/netease_api/module/comment_like.js +++ /dev/null @@ -1,33 +0,0 @@ -// 点赞与取消点赞评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'like' : 'unlike'; - query.type = { - 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // MV - 2: 'A_PL_0_', // 歌单 - 3: 'R_AL_3_', // 专辑 - 4: 'A_DJ_1_', // 电台, - 5: 'R_VI_62_', // 视频 - 6: 'A_EV_2_', // 动态 - }[query.type]; - const data = { - threadId: query.type + query.id, - commentId: query.cid, - }; - if (query.type == 'A_EV_2_') { - data.threadId = query.threadId; - } - return request( - 'POST', - `https://music.163.com/weapi/v1/comment/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_music.js b/netease_api/module/comment_music.js deleted file mode 100644 index 9824605..0000000 --- a/netease_api/module/comment_music.js +++ /dev/null @@ -1,22 +0,0 @@ -// 歌曲评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/api/v1/resource/comments/R_SO_4_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_mv.js b/netease_api/module/comment_mv.js deleted file mode 100644 index 3ce3ba9..0000000 --- a/netease_api/module/comment_mv.js +++ /dev/null @@ -1,22 +0,0 @@ -// MV评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_new.js b/netease_api/module/comment_new.js deleted file mode 100644 index 97f51dc..0000000 --- a/netease_api/module/comment_new.js +++ /dev/null @@ -1,38 +0,0 @@ -// 评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - query.type = { - 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // MV - 2: 'A_PL_0_', // 歌单 - 3: 'R_AL_3_', // 专辑 - 4: 'A_DJ_1_', // 电台, - 5: 'R_VI_62_', // 视频 - 6: 'A_EV_2_', // 动态 - }[query.type]; - const threadId = query.type + query.id; - const pageSize = query.pageSize || 20; - const pageNo = query.pageNo || 1; - const data = { - threadId: threadId, //'R_SO_4_863481066', - pageNo, - showInner: query.showInner || true, - pageSize, - cursor: - +query.sortType === 3 ? query.cursor || '0' : (pageNo - 1) * pageSize, - sortType: query.sortType || 1, //1:按推荐排序,2:按热度排序,3:按时间排序 - }; - return request( - 'POST', - `https://music.163.com/api/v2/resource/comments`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/v2/resource/comments', - }, - ); -}; diff --git a/netease_api/module/comment_playlist.js b/netease_api/module/comment_playlist.js deleted file mode 100644 index 37b2465..0000000 --- a/netease_api/module/comment_playlist.js +++ /dev/null @@ -1,22 +0,0 @@ -// 歌单评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/comment_video.js b/netease_api/module/comment_video.js deleted file mode 100644 index af9def1..0000000 --- a/netease_api/module/comment_video.js +++ /dev/null @@ -1,22 +0,0 @@ -// 视频评论 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/countries_code_list.js b/netease_api/module/countries_code_list.js deleted file mode 100644 index fefe732..0000000 --- a/netease_api/module/countries_code_list.js +++ /dev/null @@ -1,16 +0,0 @@ -// 国家编码列表 -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://interface3.music.163.com/eapi/lbs/countries/v1`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/lbs/countries/v1', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/daily_signin.js b/netease_api/module/daily_signin.js deleted file mode 100644 index 4c0d404..0000000 --- a/netease_api/module/daily_signin.js +++ /dev/null @@ -1,20 +0,0 @@ -// 签到 - -/* - 0为安卓端签到 3点经验, 1为网页签到,2点经验 - 签到成功 {'android': {'point': 3, 'code': 200}, 'web': {'point': 2, 'code': 200}} - 重复签到 {'android': {'code': -2, 'msg': '重复签到'}, 'web': {'code': -2, 'msg': '重复签到'}} - 未登录 {'android': {'code': 301}, 'web': {'code': 301}} -*/ - -module.exports = (query, request) => { - const data = { - type: query.type || 0, - }; - return request('POST', `https://music.163.com/weapi/point/dailyTask`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/digitalAlbum_ordering.js b/netease_api/module/digitalAlbum_ordering.js deleted file mode 100644 index 9c23a9c..0000000 --- a/netease_api/module/digitalAlbum_ordering.js +++ /dev/null @@ -1,27 +0,0 @@ -// 购买数字专辑 - -module.exports = (query, request) => { - const data = { - business: 'Album', - paymentMethod: query.payment, - digitalResources: JSON.stringify([ - { - business: 'Album', - resourceID: query.id, - quantity: query.quantity, - }, - ]), - from: 'web', - }; - return request( - 'POST', - `https://music.163.com/api/ordering/web/digital`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/digitalAlbum_purchased.js b/netease_api/module/digitalAlbum_purchased.js deleted file mode 100644 index ad4b43f..0000000 --- a/netease_api/module/digitalAlbum_purchased.js +++ /dev/null @@ -1,20 +0,0 @@ -// 我的数字专辑 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/digitalAlbum/purchased`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_banner.js b/netease_api/module/dj_banner.js deleted file mode 100644 index 8bb4ffc..0000000 --- a/netease_api/module/dj_banner.js +++ /dev/null @@ -1,17 +0,0 @@ -// 电台banner - -module.exports = (query, request) => { - const data = {}; - query.cookie.os = 'pc'; - return request( - 'POST', - `https://music.163.com/weapi/djradio/banner/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_category_excludehot.js b/netease_api/module/dj_category_excludehot.js deleted file mode 100644 index 339b727..0000000 --- a/netease_api/module/dj_category_excludehot.js +++ /dev/null @@ -1,15 +0,0 @@ -// 电台非热门类型 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/category/excludehot`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_category_recommend.js b/netease_api/module/dj_category_recommend.js deleted file mode 100644 index 6461e67..0000000 --- a/netease_api/module/dj_category_recommend.js +++ /dev/null @@ -1,15 +0,0 @@ -// 电台推荐类型 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/category/recommend`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_catelist.js b/netease_api/module/dj_catelist.js deleted file mode 100644 index 3ea33ec..0000000 --- a/netease_api/module/dj_catelist.js +++ /dev/null @@ -1,15 +0,0 @@ -// 电台分类列表 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/category/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_detail.js b/netease_api/module/dj_detail.js deleted file mode 100644 index de4c9f2..0000000 --- a/netease_api/module/dj_detail.js +++ /dev/null @@ -1,13 +0,0 @@ -// 电台详情 - -module.exports = (query, request) => { - const data = { - id: query.rid, - }; - return request('POST', `https://music.163.com/api/djradio/v2/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_hot.js b/netease_api/module/dj_hot.js deleted file mode 100644 index 74474d6..0000000 --- a/netease_api/module/dj_hot.js +++ /dev/null @@ -1,14 +0,0 @@ -// 热门电台 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/weapi/djradio/hot/v1`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_paygift.js b/netease_api/module/dj_paygift.js deleted file mode 100644 index 19d0f89..0000000 --- a/netease_api/module/dj_paygift.js +++ /dev/null @@ -1,19 +0,0 @@ -// 付费电台 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_personalize_recommend.js b/netease_api/module/dj_personalize_recommend.js deleted file mode 100644 index 2ddd0a9..0000000 --- a/netease_api/module/dj_personalize_recommend.js +++ /dev/null @@ -1,17 +0,0 @@ -// 电台个性推荐 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/djradio/personalize/rcmd`, - { - limit: query.limit || 6, - }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_program.js b/netease_api/module/dj_program.js deleted file mode 100644 index 961ef03..0000000 --- a/netease_api/module/dj_program.js +++ /dev/null @@ -1,21 +0,0 @@ -// 电台节目列表 -const { toBoolean } = require('../util'); -module.exports = (query, request) => { - const data = { - radioId: query.rid, - limit: query.limit || 30, - offset: query.offset || 0, - asc: toBoolean(query.asc), - }; - return request( - 'POST', - `https://music.163.com/weapi/dj/program/byradio`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_program_detail.js b/netease_api/module/dj_program_detail.js deleted file mode 100644 index 395160a..0000000 --- a/netease_api/module/dj_program_detail.js +++ /dev/null @@ -1,13 +0,0 @@ -// 电台节目详情 - -module.exports = (query, request) => { - const data = { - id: query.id, - }; - return request('POST', `https://music.163.com/api/dj/program/detail`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_program_toplist.js b/netease_api/module/dj_program_toplist.js deleted file mode 100644 index 60c2b8f..0000000 --- a/netease_api/module/dj_program_toplist.js +++ /dev/null @@ -1,14 +0,0 @@ -// 电台节目榜 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 100, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/api/program/toplist/v1`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_program_toplist_hours.js b/netease_api/module/dj_program_toplist_hours.js deleted file mode 100644 index 72cf980..0000000 --- a/netease_api/module/dj_program_toplist_hours.js +++ /dev/null @@ -1,18 +0,0 @@ -// 电台24小时节目榜 -module.exports = (query, request) => { - const data = { - limit: query.limit || 100, - // 不支持 offset - }; - return request( - 'POST', - `https://music.163.com/api/djprogram/toplist/hours`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_radio_hot.js b/netease_api/module/dj_radio_hot.js deleted file mode 100644 index 6533b35..0000000 --- a/netease_api/module/dj_radio_hot.js +++ /dev/null @@ -1,15 +0,0 @@ -// 类别热门电台 - -module.exports = (query, request) => { - const data = { - cateId: query.cateId, - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/api/djradio/hot`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_recommend.js b/netease_api/module/dj_recommend.js deleted file mode 100644 index 9c530a2..0000000 --- a/netease_api/module/dj_recommend.js +++ /dev/null @@ -1,15 +0,0 @@ -// 精选电台 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/recommend/v1`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_recommend_type.js b/netease_api/module/dj_recommend_type.js deleted file mode 100644 index b864404..0000000 --- a/netease_api/module/dj_recommend_type.js +++ /dev/null @@ -1,41 +0,0 @@ -// 精选电台分类 - -/* - 有声书 10001 - 知识技能 453050 - 商业财经 453051 - 人文历史 11 - 外语世界 13 - 亲子宝贝 14 - 创作|翻唱 2001 - 音乐故事 2 - 3D|电子 10002 - 相声曲艺 8 - 情感调频 3 - 美文读物 6 - 脱口秀 5 - 广播剧 7 - 二次元 3001 - 明星做主播 1 - 娱乐|影视 4 - 科技科学 453052 - 校园|教育 4001 - 旅途|城市 12 -*/ - -module.exports = (query, request) => { - const data = { - cateId: query.type, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/recommend`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_sub.js b/netease_api/module/dj_sub.js deleted file mode 100644 index 5375514..0000000 --- a/netease_api/module/dj_sub.js +++ /dev/null @@ -1,19 +0,0 @@ -// 订阅与取消电台 - -module.exports = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { - id: query.rid, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_sublist.js b/netease_api/module/dj_sublist.js deleted file mode 100644 index b3a90e1..0000000 --- a/netease_api/module/dj_sublist.js +++ /dev/null @@ -1,20 +0,0 @@ -// 订阅电台列表 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/get/subed`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_subscriber.js b/netease_api/module/dj_subscriber.js deleted file mode 100644 index 129df40..0000000 --- a/netease_api/module/dj_subscriber.js +++ /dev/null @@ -1,16 +0,0 @@ -// 电台详情 - -module.exports = (query, request) => { - const data = { - time: query.time || '-1', - id: query.id, - limit: query.limit || '20', - total: 'true', - }; - return request('POST', `https://music.163.com/api/djradio/subscriber`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_today_perfered.js b/netease_api/module/dj_today_perfered.js deleted file mode 100644 index 0f50c69..0000000 --- a/netease_api/module/dj_today_perfered.js +++ /dev/null @@ -1,18 +0,0 @@ -// 电台今日优选 - -module.exports = (query, request) => { - const data = { - page: query.page || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/today/perfered`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_toplist.js b/netease_api/module/dj_toplist.js deleted file mode 100644 index 36249da..0000000 --- a/netease_api/module/dj_toplist.js +++ /dev/null @@ -1,18 +0,0 @@ -// 新晋电台榜/热门电台榜 -const typeMap = { - new: 0, - hot: 1, -}; -module.exports = (query, request) => { - const data = { - limit: query.limit || 100, - offset: query.offset || 0, - type: typeMap[query.type || 'new'] || '0', //0为新晋,1为热门 - }; - return request('POST', `https://music.163.com/api/djradio/toplist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_toplist_hours.js b/netease_api/module/dj_toplist_hours.js deleted file mode 100644 index 193396d..0000000 --- a/netease_api/module/dj_toplist_hours.js +++ /dev/null @@ -1,14 +0,0 @@ -// 电台24小时主播榜 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 100, - // 不支持 offset - }; - return request('POST', `https://music.163.com/api/dj/toplist/hours`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/dj_toplist_newcomer.js b/netease_api/module/dj_toplist_newcomer.js deleted file mode 100644 index 1a0ad48..0000000 --- a/netease_api/module/dj_toplist_newcomer.js +++ /dev/null @@ -1,18 +0,0 @@ -// 电台新人榜 -module.exports = (query, request) => { - const data = { - limit: query.limit || 100, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/api/dj/toplist/newcomer`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_toplist_pay.js b/netease_api/module/dj_toplist_pay.js deleted file mode 100644 index 2b260ff..0000000 --- a/netease_api/module/dj_toplist_pay.js +++ /dev/null @@ -1,18 +0,0 @@ -// 付费精品 -module.exports = (query, request) => { - const data = { - limit: query.limit || 100, - // 不支持 offset - }; - return request( - 'POST', - `https://music.163.com/api/djradio/toplist/pay`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/dj_toplist_popular.js b/netease_api/module/dj_toplist_popular.js deleted file mode 100644 index bb1fbe0..0000000 --- a/netease_api/module/dj_toplist_popular.js +++ /dev/null @@ -1,14 +0,0 @@ -// 电台最热主播榜 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 100, - // 不支持 offset - }; - return request('POST', `https://music.163.com/api/dj/toplist/popular`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/event.js b/netease_api/module/event.js deleted file mode 100644 index 2c32bc1..0000000 --- a/netease_api/module/event.js +++ /dev/null @@ -1,14 +0,0 @@ -// 动态 - -module.exports = (query, request) => { - const data = { - pagesize: query.pagesize || 20, - lasttime: query.lasttime || -1, - }; - return request('POST', `https://music.163.com/weapi/v1/event/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/event_del.js b/netease_api/module/event_del.js deleted file mode 100644 index c5b245f..0000000 --- a/netease_api/module/event_del.js +++ /dev/null @@ -1,13 +0,0 @@ -// 删除动态 - -module.exports = (query, request) => { - const data = { - id: query.evId, - }; - return request('POST', `https://music.163.com/eapi/event/delete`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/event_forward.js b/netease_api/module/event_forward.js deleted file mode 100644 index 77738b2..0000000 --- a/netease_api/module/event_forward.js +++ /dev/null @@ -1,16 +0,0 @@ -// 转发动态 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - forwards: query.forwards, - id: query.evId, - eventUserId: query.uid, - }; - return request('POST', `https://music.163.com/weapi/event/forward`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/fm_trash.js b/netease_api/module/fm_trash.js deleted file mode 100644 index eabd938..0000000 --- a/netease_api/module/fm_trash.js +++ /dev/null @@ -1,20 +0,0 @@ -// 垃圾桶 - -module.exports = (query, request) => { - const data = { - songId: query.id, - }; - return request( - 'POST', - `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${ - query.id - }&time=${query.time || 25}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/follow.js b/netease_api/module/follow.js deleted file mode 100644 index 293bd8a..0000000 --- a/netease_api/module/follow.js +++ /dev/null @@ -1,17 +0,0 @@ -// 关注与取消关注用户 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'follow' : 'delfollow'; - return request( - 'POST', - `https://music.163.com/weapi/user/${query.t}/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/history_recommend_songs.js b/netease_api/module/history_recommend_songs.js deleted file mode 100644 index 89cb904..0000000 --- a/netease_api/module/history_recommend_songs.js +++ /dev/null @@ -1,17 +0,0 @@ -// 历史每日推荐歌曲 - -module.exports = (query, request) => { - query.cookie.os = 'ios'; - const data = {}; - return request( - 'POST', - `https://music.163.com/api/discovery/recommend/songs/history/recent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/history_recommend_songs_detail.js b/netease_api/module/history_recommend_songs_detail.js deleted file mode 100644 index c981b28..0000000 --- a/netease_api/module/history_recommend_songs_detail.js +++ /dev/null @@ -1,19 +0,0 @@ -// 历史每日推荐歌曲详情 - -module.exports = (query, request) => { - query.cookie.os = 'ios'; - const data = { - date: query.date || '', - }; - return request( - 'POST', - `https://music.163.com/api/discovery/recommend/songs/history/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/homepage_block_page.js b/netease_api/module/homepage_block_page.js deleted file mode 100644 index 2f49d75..0000000 --- a/netease_api/module/homepage_block_page.js +++ /dev/null @@ -1,17 +0,0 @@ -// 首页-发现 block page -// 这个接口为移动端接口,首页-发现页,数据结构可以参考 https://github.com/hcanyz/flutter-netease-music-api/blob/master/lib/src/api/uncategorized/bean.dart#L259 HomeBlockPageWrap -// query.refresh 是否刷新数据 -module.exports = (query, request) => { - const data = { refresh: query.refresh || true }; - return request( - 'POST', - `https://music.163.com/api/homepage/block/page`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/homepage_dragon_ball.js b/netease_api/module/homepage_dragon_ball.js deleted file mode 100644 index e048ac1..0000000 --- a/netease_api/module/homepage_dragon_ball.js +++ /dev/null @@ -1,19 +0,0 @@ -// 首页-发现 dragon ball -// 这个接口为移动端接口,首页-发现页(每日推荐、歌单、排行榜 那些入口) -// 数据结构可以参考 https://github.com/hcanyz/flutter-netease-music-api/blob/master/lib/src/api/uncategorized/bean.dart#L290 HomeDragonBallWrap -// !需要登录或者匿名登录,非登录返回 [] -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/eapi/homepage/dragon/ball/static`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/homepage/dragon/ball/static', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/hot_topic.js b/netease_api/module/hot_topic.js deleted file mode 100644 index 1fdbac1..0000000 --- a/netease_api/module/hot_topic.js +++ /dev/null @@ -1,14 +0,0 @@ -//热门话题 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 20, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/weapi/act/hot`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/like.js b/netease_api/module/like.js deleted file mode 100644 index 7fd3e8f..0000000 --- a/netease_api/module/like.js +++ /dev/null @@ -1,23 +0,0 @@ -// 红心与取消红心歌曲 -const { toBoolean } = require('../util'); - -module.exports = (query, request) => { - query.like = query.like == 'false' ? false : true; - const data = { - trackId: query.id, - like: query.like, - }; - return request( - 'POST', - `https://music.163.com/weapi/radio/like?alg=${ - query.alg || 'itembased' - }&trackId=${query.id}&time=${query.time || 25}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/likelist.js b/netease_api/module/likelist.js deleted file mode 100644 index fcffede..0000000 --- a/netease_api/module/likelist.js +++ /dev/null @@ -1,13 +0,0 @@ -// 喜欢的歌曲(无序) - -module.exports = (query, request) => { - const data = { - uid: query.uid, - }; - return request('POST', `https://music.163.com/weapi/song/like/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/login.js b/netease_api/module/login.js deleted file mode 100644 index 72c9966..0000000 --- a/netease_api/module/login.js +++ /dev/null @@ -1,47 +0,0 @@ -// 邮箱登录 - -const crypto = require('crypto'); - -module.exports = async (query, request) => { - query.cookie.os = 'pc'; - const data = { - username: query.email, - password: - query.md5_password || - crypto.createHash('md5').update(query.password).digest('hex'), - rememberLogin: 'true', - }; - let result = await request( - 'POST', - `https://music.163.com/weapi/login`, - data, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - if (result.body.code === 502) { - return { - status: 200, - body: { - msg: '账号或密码错误', - code: 502, - message: '账号或密码错误', - }, - }; - } - if (result.body.code === 200) { - result = { - status: 200, - body: { - ...result.body, - cookie: result.cookie.join(';'), - }, - cookie: result.cookie, - }; - } - return result; -}; diff --git a/netease_api/module/login_cellphone.js b/netease_api/module/login_cellphone.js deleted file mode 100644 index 7f4398c..0000000 --- a/netease_api/module/login_cellphone.js +++ /dev/null @@ -1,39 +0,0 @@ -// 手机登录 - -const crypto = require('crypto'); - -module.exports = async (query, request) => { - query.cookie.os = 'pc'; - const data = { - phone: query.phone, - countrycode: query.countrycode || '86', - password: - query.md5_password || - crypto.createHash('md5').update(query.password).digest('hex'), - rememberLogin: 'true', - }; - let result = await request( - 'POST', - `https://music.163.com/weapi/login/cellphone`, - data, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - - if (result.body.code === 200) { - result = { - status: 200, - body: { - ...result.body, - cookie: result.cookie.join(';'), - }, - cookie: result.cookie, - }; - } - return result; -}; diff --git a/netease_api/module/login_refresh.js b/netease_api/module/login_refresh.js deleted file mode 100644 index 5a57ed4..0000000 --- a/netease_api/module/login_refresh.js +++ /dev/null @@ -1,16 +0,0 @@ -// 登录刷新 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/login/token/refresh`, - {}, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/login_status.js b/netease_api/module/login_status.js deleted file mode 100644 index 9a06d68..0000000 --- a/netease_api/module/login_status.js +++ /dev/null @@ -1,23 +0,0 @@ -// 登录状态 - -module.exports = (query, request) => { - return request( - 'GET', - `https://music.163.com`, - {}, - { cookie: query.cookie, proxy: query.proxy, realIP: query.realIP }, - ).then((response) => { - try { - let profile = eval(`(${/GUser\s*=\s*([^;]+);/.exec(response.body)[1]})`); - let bindings = eval( - `(${/GBinds\s*=\s*([^;]+);/.exec(response.body)[1]})`, - ); - response.body = { code: 200, profile: profile, bindings: bindings }; - return response; - } catch (err) { - response.status = 301; - response.body = { code: 301 }; - return Promise.reject(response); - } - }); -}; diff --git a/netease_api/module/logout.js b/netease_api/module/logout.js deleted file mode 100644 index 2eb97cd..0000000 --- a/netease_api/module/logout.js +++ /dev/null @@ -1,16 +0,0 @@ -// 退出登录 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/logout`, - {}, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/lyric.js b/netease_api/module/lyric.js deleted file mode 100644 index c217c13..0000000 --- a/netease_api/module/lyric.js +++ /dev/null @@ -1,17 +0,0 @@ -// 歌词 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - id: query.id, - lv: -1, - kv: -1, - tv: -1, - }; - return request('POST', `https://music.163.com/api/song/lyric`, data, { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/msg_comments.js b/netease_api/module/msg_comments.js deleted file mode 100644 index a200eae..0000000 --- a/netease_api/module/msg_comments.js +++ /dev/null @@ -1,22 +0,0 @@ -// 评论 - -module.exports = (query, request) => { - const data = { - beforeTime: query.before || '-1', - limit: query.limit || 30, - total: 'true', - uid: query.uid, - }; - - return request( - 'POST', - `https://music.163.com/api/v1/user/comments/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/msg_forwards.js b/netease_api/module/msg_forwards.js deleted file mode 100644 index 7b540e9..0000000 --- a/netease_api/module/msg_forwards.js +++ /dev/null @@ -1,15 +0,0 @@ -// @我 - -module.exports = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - total: 'true', - }; - return request('POST', `https://music.163.com/api/forwards/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/msg_notices.js b/netease_api/module/msg_notices.js deleted file mode 100644 index dbb82f8..0000000 --- a/netease_api/module/msg_notices.js +++ /dev/null @@ -1,14 +0,0 @@ -// 通知 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - time: query.lasttime || -1, - }; - return request('POST', `https://music.163.com/api/msg/notices`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/msg_private.js b/netease_api/module/msg_private.js deleted file mode 100644 index 777356c..0000000 --- a/netease_api/module/msg_private.js +++ /dev/null @@ -1,15 +0,0 @@ -// 私信 - -module.exports = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - total: 'true', - }; - return request('POST', `https://music.163.com/api/msg/private/users`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/msg_private_history.js b/netease_api/module/msg_private_history.js deleted file mode 100644 index c5e8421..0000000 --- a/netease_api/module/msg_private_history.js +++ /dev/null @@ -1,21 +0,0 @@ -// 私信内容 - -module.exports = (query, request) => { - const data = { - userId: query.uid, - limit: query.limit || 30, - time: query.before || 0, - total: 'true', - }; - return request( - 'POST', - `https://music.163.com/api/msg/private/history`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/mv_all.js b/netease_api/module/mv_all.js deleted file mode 100644 index 93ab80c..0000000 --- a/netease_api/module/mv_all.js +++ /dev/null @@ -1,20 +0,0 @@ -// 全部MV - -module.exports = (query, request) => { - const data = { - tags: JSON.stringify({ - 地区: query.area || '全部', - 类型: query.type || '全部', - 排序: query.order || '上升最快', - }), - offset: query.offset || 0, - total: 'true', - limit: query.limit || 30, - }; - return request('POST', `https://interface.music.163.com/api/mv/all`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/mv_detail.js b/netease_api/module/mv_detail.js deleted file mode 100644 index f5c890c..0000000 --- a/netease_api/module/mv_detail.js +++ /dev/null @@ -1,13 +0,0 @@ -// MV详情 - -module.exports = (query, request) => { - const data = { - id: query.mvid, - }; - return request('POST', `https://music.163.com/api/v1/mv/detail`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/mv_detail_info.js b/netease_api/module/mv_detail_info.js deleted file mode 100644 index 5e9ee75..0000000 --- a/netease_api/module/mv_detail_info.js +++ /dev/null @@ -1,19 +0,0 @@ -// MV 点赞转发评论数数据 - -module.exports = (query, request) => { - const data = { - threadid: `R_MV_5_${query.mvid}`, - composeliked: true, - }; - return request( - 'POST', - `https://music.163.com/api/comment/commentthread/info`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/mv_exclusive_rcmd.js b/netease_api/module/mv_exclusive_rcmd.js deleted file mode 100644 index 8856357..0000000 --- a/netease_api/module/mv_exclusive_rcmd.js +++ /dev/null @@ -1,19 +0,0 @@ -// 网易出品 - -module.exports = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - }; - return request( - 'POST', - `https://interface.music.163.com/api/mv/exclusive/rcmd`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/mv_first.js b/netease_api/module/mv_first.js deleted file mode 100644 index 554569d..0000000 --- a/netease_api/module/mv_first.js +++ /dev/null @@ -1,21 +0,0 @@ -// 最新MV - -module.exports = (query, request) => { - const data = { - // 'offset': query.offset || 0, - area: query.area || '', - limit: query.limit || 30, - total: true, - }; - return request( - 'POST', - `https://interface.music.163.com/weapi/mv/first`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/mv_sub.js b/netease_api/module/mv_sub.js deleted file mode 100644 index de9459d..0000000 --- a/netease_api/module/mv_sub.js +++ /dev/null @@ -1,15 +0,0 @@ -// 收藏与取消收藏MV - -module.exports = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { - mvId: query.mvid, - mvIds: '["' + query.mvid + '"]', - }; - return request('POST', `https://music.163.com/weapi/mv/${query.t}`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/mv_sublist.js b/netease_api/module/mv_sublist.js deleted file mode 100644 index 0da033c..0000000 --- a/netease_api/module/mv_sublist.js +++ /dev/null @@ -1,20 +0,0 @@ -// 已收藏MV列表 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/allvideo/sublist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/mv_url.js b/netease_api/module/mv_url.js deleted file mode 100644 index cd5e91a..0000000 --- a/netease_api/module/mv_url.js +++ /dev/null @@ -1,19 +0,0 @@ -// MV链接 - -module.exports = (query, request) => { - const data = { - id: query.id, - r: query.r || 1080, - }; - return request( - 'POST', - `https://music.163.com/weapi/song/enhance/play/mv/url`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/personal_fm.js b/netease_api/module/personal_fm.js deleted file mode 100644 index 8197694..0000000 --- a/netease_api/module/personal_fm.js +++ /dev/null @@ -1,15 +0,0 @@ -// 私人FM - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/radio/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/personalized.js b/netease_api/module/personalized.js deleted file mode 100644 index 45c1639..0000000 --- a/netease_api/module/personalized.js +++ /dev/null @@ -1,21 +0,0 @@ -// 推荐歌单 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - // offset: query.offset || 0, - total: true, - n: 1000, - }; - return request( - 'POST', - `https://music.163.com/weapi/personalized/playlist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/personalized_djprogram.js b/netease_api/module/personalized_djprogram.js deleted file mode 100644 index 232fa78..0000000 --- a/netease_api/module/personalized_djprogram.js +++ /dev/null @@ -1,15 +0,0 @@ -// 推荐电台 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/djprogram`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/personalized_mv.js b/netease_api/module/personalized_mv.js deleted file mode 100644 index 1d0e4e6..0000000 --- a/netease_api/module/personalized_mv.js +++ /dev/null @@ -1,15 +0,0 @@ -// 推荐MV - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/mv`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/personalized_newsong.js b/netease_api/module/personalized_newsong.js deleted file mode 100644 index de275a9..0000000 --- a/netease_api/module/personalized_newsong.js +++ /dev/null @@ -1,20 +0,0 @@ -// 推荐新歌 - -module.exports = (query, request) => { - const data = { - type: 'recommend', - limit: query.limit || 10, - areaId: query.areaId || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/personalized/newsong`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/personalized_privatecontent.js b/netease_api/module/personalized_privatecontent.js deleted file mode 100644 index ac2c228..0000000 --- a/netease_api/module/personalized_privatecontent.js +++ /dev/null @@ -1,15 +0,0 @@ -// 独家放送 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/privatecontent`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/personalized_privatecontent_list.js b/netease_api/module/personalized_privatecontent_list.js deleted file mode 100644 index d98f409..0000000 --- a/netease_api/module/personalized_privatecontent_list.js +++ /dev/null @@ -1,20 +0,0 @@ -// 独家放送列表 - -module.exports = (query, request) => { - const data = { - offset: query.offset || 0, - total: 'true', - limit: query.limit || 60, - }; - return request( - 'POST', - `https://music.163.com/api/v2/privatecontent/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_catlist.js b/netease_api/module/playlist_catlist.js deleted file mode 100644 index def3039..0000000 --- a/netease_api/module/playlist_catlist.js +++ /dev/null @@ -1,15 +0,0 @@ -// 全部歌单分类 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/playlist/catalogue`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_cover_update.js b/netease_api/module/playlist_cover_update.js deleted file mode 100644 index 4e2d412..0000000 --- a/netease_api/module/playlist_cover_update.js +++ /dev/null @@ -1,28 +0,0 @@ -const uploadPlugin = require('../plugins/upload'); -module.exports = async (query, request) => { - const uploadInfo = await uploadPlugin(query, request); - const res = await request( - 'POST', - `https://music.163.com/weapi/playlist/cover/update`, - { - id: query.id, - coverImgId: uploadInfo.imgId, - }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { - status: 200, - body: { - code: 200, - data: { - ...uploadInfo, - ...res.body, - }, - }, - }; -}; diff --git a/netease_api/module/playlist_create.js b/netease_api/module/playlist_create.js deleted file mode 100644 index 42f3e82..0000000 --- a/netease_api/module/playlist_create.js +++ /dev/null @@ -1,16 +0,0 @@ -// 创建歌单 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - name: query.name, - privacy: query.privacy, //0 为普通歌单,10 为隐私歌单 - type: query.type || 'NORMAL', // NORMAL|VIDEO - }; - return request('POST', `https://music.163.com/api/playlist/create`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/playlist_delete.js b/netease_api/module/playlist_delete.js deleted file mode 100644 index 2fe9327..0000000 --- a/netease_api/module/playlist_delete.js +++ /dev/null @@ -1,14 +0,0 @@ -// 删除歌单 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - ids: '[' + query.id + ']', - }; - return request('POST', `https://music.163.com/weapi/playlist/remove`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/playlist_desc_update.js b/netease_api/module/playlist_desc_update.js deleted file mode 100644 index 55fada2..0000000 --- a/netease_api/module/playlist_desc_update.js +++ /dev/null @@ -1,20 +0,0 @@ -// 更新歌单描述 - -module.exports = (query, request) => { - const data = { - id: query.id, - desc: query.desc, - }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/desc/update`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/desc/update', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_detail.js b/netease_api/module/playlist_detail.js deleted file mode 100644 index ccd09b1..0000000 --- a/netease_api/module/playlist_detail.js +++ /dev/null @@ -1,15 +0,0 @@ -// 歌单详情 - -module.exports = (query, request) => { - const data = { - id: query.id, - n: 100000, - s: query.s || 8, - }; - return request('POST', `https://music.163.com/api/v6/playlist/detail`, data, { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/playlist_highquality_tags.js b/netease_api/module/playlist_highquality_tags.js deleted file mode 100644 index d6be7c7..0000000 --- a/netease_api/module/playlist_highquality_tags.js +++ /dev/null @@ -1,15 +0,0 @@ -// 精品歌单 tags -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/playlist/highquality/tags`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_hot.js b/netease_api/module/playlist_hot.js deleted file mode 100644 index fd588f6..0000000 --- a/netease_api/module/playlist_hot.js +++ /dev/null @@ -1,15 +0,0 @@ -// 热门歌单分类 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/playlist/hottags`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_mylike.js b/netease_api/module/playlist_mylike.js deleted file mode 100644 index b96d034..0000000 --- a/netease_api/module/playlist_mylike.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = (query, request) => { - const data = { - time: query.time || '-1', - limit: query.limit || '12', - }; - return request( - 'POST', - `https://music.163.com/api/mlog/playlist/mylike/bytime/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_name_update.js b/netease_api/module/playlist_name_update.js deleted file mode 100644 index 5f4dfbd..0000000 --- a/netease_api/module/playlist_name_update.js +++ /dev/null @@ -1,20 +0,0 @@ -// 更新歌单名 - -module.exports = (query, request) => { - const data = { - id: query.id, - name: query.name, - }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/update/name`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/update/name', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_order_update.js b/netease_api/module/playlist_order_update.js deleted file mode 100644 index 570cd13..0000000 --- a/netease_api/module/playlist_order_update.js +++ /dev/null @@ -1,19 +0,0 @@ -// 编辑歌单顺序 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - ids: query.ids, - }; - return request( - 'POST', - `https://music.163.com/api/playlist/order/update`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_subscribe.js b/netease_api/module/playlist_subscribe.js deleted file mode 100644 index 31d56e9..0000000 --- a/netease_api/module/playlist_subscribe.js +++ /dev/null @@ -1,19 +0,0 @@ -// 收藏与取消收藏歌单 - -module.exports = (query, request) => { - query.t = query.t == 1 ? 'subscribe' : 'unsubscribe'; - const data = { - id: query.id, - }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_subscribers.js b/netease_api/module/playlist_subscribers.js deleted file mode 100644 index 0fa2764..0000000 --- a/netease_api/module/playlist_subscribers.js +++ /dev/null @@ -1,20 +0,0 @@ -// 歌单收藏者 - -module.exports = (query, request) => { - const data = { - id: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/subscribers`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_tags_update.js b/netease_api/module/playlist_tags_update.js deleted file mode 100644 index fa3fb3c..0000000 --- a/netease_api/module/playlist_tags_update.js +++ /dev/null @@ -1,20 +0,0 @@ -// 更新歌单标签 - -module.exports = (query, request) => { - const data = { - id: query.id, - tags: query.tags, - }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/tags/update`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/tags/update', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_track_add.js b/netease_api/module/playlist_track_add.js deleted file mode 100644 index 7daaa74..0000000 --- a/netease_api/module/playlist_track_add.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = async (query, request) => { - query.cookie.os = 'pc'; - query.ids = query.ids || ''; - const data = { - id: query.pid, - tracks: JSON.stringify( - query.ids.split(',').map((item) => { - return { type: 3, id: item }; - }), - ), - }; - console.log(data); - - return request('POST', `https://music.163.com/api/playlist/track/add`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/playlist_track_delete.js b/netease_api/module/playlist_track_delete.js deleted file mode 100644 index ae096e2..0000000 --- a/netease_api/module/playlist_track_delete.js +++ /dev/null @@ -1,26 +0,0 @@ -// 收藏单曲到歌单 从歌单删除歌曲 - -module.exports = async (query, request) => { - query.cookie.os = 'pc'; - query.ids = query.ids || ''; - const data = { - id: query.id, - tracks: JSON.stringify( - query.ids.split(',').map((item) => { - return { type: 3, id: item }; - }), - ), - }; - - return request( - 'POST', - `https://music.163.com/api/playlist/track/delete`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playlist_tracks.js b/netease_api/module/playlist_tracks.js deleted file mode 100644 index 45a0627..0000000 --- a/netease_api/module/playlist_tracks.js +++ /dev/null @@ -1,51 +0,0 @@ -// 收藏单曲到歌单 从歌单删除歌曲 - -module.exports = async (query, request) => { - query.cookie.os = 'pc'; - const tracks = query.tracks.split(','); - const data = { - op: query.op, // del,add - pid: query.pid, // 歌单id - trackIds: JSON.stringify(tracks), // 歌曲id - imme: 'true', - }; - - try { - const res = await request( - 'POST', - `https://music.163.com/api/playlist/manipulate/tracks`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { - status: 200, - body: { - ...res, - }, - }; - } catch (error) { - if (error.body.code === 512) { - return request( - 'POST', - `https://music.163.com/api/playlist/manipulate/tracks`, - { - op: query.op, // del,add - pid: query.pid, // 歌单id - trackIds: JSON.stringify([...tracks, ...tracks]), - imme: 'true', - }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - } - } -}; diff --git a/netease_api/module/playlist_update.js b/netease_api/module/playlist_update.js deleted file mode 100644 index e55a527..0000000 --- a/netease_api/module/playlist_update.js +++ /dev/null @@ -1,18 +0,0 @@ -// 编辑歌单 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - query.desc = query.desc || ''; - query.tags = query.tags || ''; - const data = { - '/api/playlist/desc/update': `{"id":${query.id},"desc":"${query.desc}"}`, - '/api/playlist/tags/update': `{"id":${query.id},"tags":"${query.tags}"}`, - '/api/playlist/update/name': `{"id":${query.id},"name":"${query.name}"}`, - }; - return request('POST', `https://music.163.com/weapi/batch`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/playlist_video_recent.js b/netease_api/module/playlist_video_recent.js deleted file mode 100644 index e29acbe..0000000 --- a/netease_api/module/playlist_video_recent.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/playlist/video/recent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/playmode_intelligence_list.js b/netease_api/module/playmode_intelligence_list.js deleted file mode 100644 index 3a0c2fa..0000000 --- a/netease_api/module/playmode_intelligence_list.js +++ /dev/null @@ -1,22 +0,0 @@ -// 智能播放 - -module.exports = (query, request) => { - const data = { - songId: query.id, - type: 'fromPlayOne', - playlistId: query.pid, - startMusicId: query.sid || query.id, - count: query.count || 1, - }; - return request( - 'POST', - `https://music.163.com/weapi/playmode/intelligence/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/program_recommend.js b/netease_api/module/program_recommend.js deleted file mode 100644 index 56e63e7..0000000 --- a/netease_api/module/program_recommend.js +++ /dev/null @@ -1,20 +0,0 @@ -// 推荐节目 - -module.exports = (query, request) => { - const data = { - cateId: query.type, - limit: query.limit || 10, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/program/recommend/v1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/rebind.js b/netease_api/module/rebind.js deleted file mode 100644 index 6d615be..0000000 --- a/netease_api/module/rebind.js +++ /dev/null @@ -1,21 +0,0 @@ -// 更换手机 - -module.exports = (query, request) => { - const data = { - captcha: query.captcha, - phone: query.phone, - oldcaptcha: query.oldcaptcha, - ctcode: query.ctcode || '86', - }; - return request( - 'POST', - `https://music.163.com/api/user/replaceCellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/recommend_resource.js b/netease_api/module/recommend_resource.js deleted file mode 100644 index 786194b..0000000 --- a/netease_api/module/recommend_resource.js +++ /dev/null @@ -1,15 +0,0 @@ -// 每日推荐歌单 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/recommend/resource`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/recommend_songs.js b/netease_api/module/recommend_songs.js deleted file mode 100644 index 519e70c..0000000 --- a/netease_api/module/recommend_songs.js +++ /dev/null @@ -1,17 +0,0 @@ -// 每日推荐歌曲 - -module.exports = (query, request) => { - query.cookie.os = 'ios'; - const data = {}; - return request( - 'POST', - `https://music.163.com/api/v3/discovery/recommend/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/register_cellphone.js b/netease_api/module/register_cellphone.js deleted file mode 100644 index fb09fb4..0000000 --- a/netease_api/module/register_cellphone.js +++ /dev/null @@ -1,18 +0,0 @@ -// 注册账号 -const crypto = require('crypto'); - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - captcha: query.captcha, - phone: query.phone, - password: crypto.createHash('md5').update(query.password).digest('hex'), - nickname: query.nickname, - }; - return request('POST', `https://music.163.com/api/register/cellphone`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/related_allvideo.js b/netease_api/module/related_allvideo.js deleted file mode 100644 index 7655ac1..0000000 --- a/netease_api/module/related_allvideo.js +++ /dev/null @@ -1,19 +0,0 @@ -// 相关视频 - -module.exports = (query, request) => { - const data = { - id: query.id, - type: /^\d+$/.test(query.id) ? 0 : 1, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/v1/allvideo/rcmd`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/related_playlist.js b/netease_api/module/related_playlist.js deleted file mode 100644 index c553837..0000000 --- a/netease_api/module/related_playlist.js +++ /dev/null @@ -1,38 +0,0 @@ -// 相关歌单 - -module.exports = (query, request) => { - return request( - 'GET', - `https://music.163.com/playlist?id=${query.id}`, - {}, - { - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ).then((response) => { - try { - const pattern = /
[\s\S]*?[\s\S]*?]*>([^<]+?)<\/a>[\s\S]*?]*>([^<]+?)<\/a>/g; - let result, - playlists = []; - while ((result = pattern.exec(response.body)) != null) { - playlists.push({ - creator: { - userId: result[4].slice('/user/home?id='.length), - nickname: result[5], - }, - coverImgUrl: result[1].slice(0, -'?param=50y50'.length), - name: result[3], - id: result[2].slice('/playlist?id='.length), - }); - } - response.body = { code: 200, playlists: playlists }; - return response; - } catch (err) { - response.status = 500; - response.body = { code: 500, msg: err.stack }; - return Promise.reject(response); - } - }); -}; diff --git a/netease_api/module/resource_like.js b/netease_api/module/resource_like.js deleted file mode 100644 index 3d289ba..0000000 --- a/netease_api/module/resource_like.js +++ /dev/null @@ -1,29 +0,0 @@ -// 点赞与取消点赞资源 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'like' : 'unlike'; - query.type = { - 1: 'R_MV_5_', // MV - 4: 'A_DJ_1_', // 电台 - 5: 'R_VI_62_', // 视频 - 6: 'A_EV_2_', - }[query.type]; - const data = { - threadId: query.type + query.id, - }; - if (query.type === 'A_EV_2_') { - data.threadId = query.threadId; - } - return request( - 'POST', - `https://music.163.com/weapi/resource/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/scrobble.js b/netease_api/module/scrobble.js deleted file mode 100644 index 5b6d3e7..0000000 --- a/netease_api/module/scrobble.js +++ /dev/null @@ -1,27 +0,0 @@ -// 听歌打卡 - -module.exports = (query, request) => { - const data = { - logs: JSON.stringify([ - { - action: 'play', - json: { - download: 0, - end: 'playend', - id: query.id, - sourceId: query.sourceid, - time: query.time, - type: 'song', - wifi: 0, - }, - }, - ]), - }; - - return request('POST', `https://music.163.com/weapi/feedback/weblog`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/search.js b/netease_api/module/search.js deleted file mode 100644 index 471d781..0000000 --- a/netease_api/module/search.js +++ /dev/null @@ -1,16 +0,0 @@ -// 搜索 - -module.exports = (query, request) => { - const data = { - s: query.keywords, - type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/weapi/search/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/search_default.js b/netease_api/module/search_default.js deleted file mode 100644 index c231d18..0000000 --- a/netease_api/module/search_default.js +++ /dev/null @@ -1,16 +0,0 @@ -// 默认搜索关键词 - -module.exports = (query, request) => { - return request( - 'POST', - `https://interface3.music.163.com/eapi/search/defaultkeyword/get`, - {}, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/search/defaultkeyword/get', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/search_hot.js b/netease_api/module/search_hot.js deleted file mode 100644 index dd6b6d4..0000000 --- a/netease_api/module/search_hot.js +++ /dev/null @@ -1,14 +0,0 @@ -// 热门搜索 - -module.exports = (query, request) => { - const data = { - type: 1111, - }; - return request('POST', `https://music.163.com/weapi/search/hot`, data, { - crypto: 'weapi', - ua: 'mobile', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/search_hot_detail.js b/netease_api/module/search_hot_detail.js deleted file mode 100644 index 3e869da..0000000 --- a/netease_api/module/search_hot_detail.js +++ /dev/null @@ -1,15 +0,0 @@ -// 热搜列表 -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/weapi/hotsearchlist/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/search_multimatch.js b/netease_api/module/search_multimatch.js deleted file mode 100644 index 6777178..0000000 --- a/netease_api/module/search_multimatch.js +++ /dev/null @@ -1,19 +0,0 @@ -// 多类型搜索 - -module.exports = (query, request) => { - const data = { - type: query.type || 1, - s: query.keywords || '', - }; - return request( - 'POST', - `https://music.163.com/weapi/search/suggest/multimatch`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/search_suggest.js b/netease_api/module/search_suggest.js deleted file mode 100644 index 6e6b9cc..0000000 --- a/netease_api/module/search_suggest.js +++ /dev/null @@ -1,19 +0,0 @@ -// 搜索建议 - -module.exports = (query, request) => { - const data = { - s: query.keywords || '', - }; - let type = query.type == 'mobile' ? 'keyword' : 'web'; - return request( - 'POST', - `https://music.163.com/weapi/search/suggest/` + type, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/send_playlist.js b/netease_api/module/send_playlist.js deleted file mode 100644 index 15e9238..0000000 --- a/netease_api/module/send_playlist.js +++ /dev/null @@ -1,17 +0,0 @@ -// 私信歌单 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - id: query.playlist, - type: 'playlist', - msg: query.msg, - userIds: '[' + query.user_ids + ']', - }; - return request('POST', `https://music.163.com/weapi/msg/private/send`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/send_text.js b/netease_api/module/send_text.js deleted file mode 100644 index 72285d6..0000000 --- a/netease_api/module/send_text.js +++ /dev/null @@ -1,16 +0,0 @@ -// 私信 - -module.exports = (query, request) => { - query.cookie.os = 'pc'; - const data = { - type: 'text', - msg: query.msg, - userIds: '[' + query.user_ids + ']', - }; - return request('POST', `https://music.163.com/weapi/msg/private/send`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/setting.js b/netease_api/module/setting.js deleted file mode 100644 index d26ced6..0000000 --- a/netease_api/module/setting.js +++ /dev/null @@ -1,11 +0,0 @@ -// 设置 - -module.exports = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/user/setting`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/share_resource.js b/netease_api/module/share_resource.js deleted file mode 100644 index cd8a3d0..0000000 --- a/netease_api/module/share_resource.js +++ /dev/null @@ -1,20 +0,0 @@ -// 分享歌曲到动态 - -module.exports = (query, request) => { - const data = { - type: query.type || 'song', // song,playlist,mv,djprogram,djradio - msg: query.msg || '', - id: query.id || '', - }; - return request( - 'POST', - `https://music.163.com/weapi/share/friends/resource`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/simi_artist.js b/netease_api/module/simi_artist.js deleted file mode 100644 index 3c079a8..0000000 --- a/netease_api/module/simi_artist.js +++ /dev/null @@ -1,18 +0,0 @@ -// 相似歌手 - -module.exports = (query, request) => { - const data = { - artistid: query.id, - }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiArtist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/simi_mv.js b/netease_api/module/simi_mv.js deleted file mode 100644 index bdf76a5..0000000 --- a/netease_api/module/simi_mv.js +++ /dev/null @@ -1,13 +0,0 @@ -// 相似MV - -module.exports = (query, request) => { - const data = { - mvid: query.mvid, - }; - return request('POST', `https://music.163.com/weapi/discovery/simiMV`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/simi_playlist.js b/netease_api/module/simi_playlist.js deleted file mode 100644 index dbb6bce..0000000 --- a/netease_api/module/simi_playlist.js +++ /dev/null @@ -1,20 +0,0 @@ -// 相似歌单 - -module.exports = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiPlaylist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/simi_song.js b/netease_api/module/simi_song.js deleted file mode 100644 index 9cc1c4a..0000000 --- a/netease_api/module/simi_song.js +++ /dev/null @@ -1,20 +0,0 @@ -// 相似歌曲 - -module.exports = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/simiSong`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/simi_user.js b/netease_api/module/simi_user.js deleted file mode 100644 index 607277b..0000000 --- a/netease_api/module/simi_user.js +++ /dev/null @@ -1,20 +0,0 @@ -// 相似用户 - -module.exports = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiUser`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/song_detail.js b/netease_api/module/song_detail.js deleted file mode 100644 index 92c72ef..0000000 --- a/netease_api/module/song_detail.js +++ /dev/null @@ -1,15 +0,0 @@ -// 歌曲详情 - -module.exports = (query, request) => { - query.ids = query.ids.split(/\s*,\s*/); - const data = { - c: '[' + query.ids.map((id) => '{"id":' + id + '}').join(',') + ']', - ids: '[' + query.ids.join(',') + ']', - }; - return request('POST', `https://music.163.com/weapi/v3/song/detail`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/song_order_update.js b/netease_api/module/song_order_update.js deleted file mode 100644 index 3fb6c8a..0000000 --- a/netease_api/module/song_order_update.js +++ /dev/null @@ -1,22 +0,0 @@ -// 更新歌曲顺序 - -module.exports = (query, request) => { - const data = { - pid: query.pid, - trackIds: query.ids, - op: 'update', - }; - - return request( - 'POST', - `http://interface.music.163.com/api/playlist/manipulate/tracks`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/desc/update', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/song_url.js b/netease_api/module/song_url.js deleted file mode 100644 index e2a55ae..0000000 --- a/netease_api/module/song_url.js +++ /dev/null @@ -1,25 +0,0 @@ -// 歌曲链接 - -const crypto = require('crypto'); - -module.exports = (query, request) => { - if (!('MUSIC_U' in query.cookie)) - query.cookie._ntes_nuid = crypto.randomBytes(16).toString('hex'); - query.cookie.os = 'pc'; - const data = { - ids: '[' + query.id + ']', - br: parseInt(query.br || 999000), - }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/song/enhance/player/url`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/song/enhance/player/url', - }, - ); -}; diff --git a/netease_api/module/top_album.js b/netease_api/module/top_album.js deleted file mode 100644 index 2812f72..0000000 --- a/netease_api/module/top_album.js +++ /dev/null @@ -1,27 +0,0 @@ -// 新碟上架 - -module.exports = (query, request) => { - const date = new Date(); - - const data = { - area: query.area || 'ALL', // //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本 - limit: query.limit || 50, - offset: query.offset || 0, - type: query.type || 'new', - year: query.year || date.getFullYear(), - month: query.month || date.getMonth() + 1, - total: false, - rcmd: true, - }; - return request( - 'POST', - `https://music.163.com/api/discovery/new/albums/area`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/top_artists.js b/netease_api/module/top_artists.js deleted file mode 100644 index bd3dbad..0000000 --- a/netease_api/module/top_artists.js +++ /dev/null @@ -1,15 +0,0 @@ -// 热门歌手 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 50, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/artist/top`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/top_list.js b/netease_api/module/top_list.js deleted file mode 100644 index 5ab262b..0000000 --- a/netease_api/module/top_list.js +++ /dev/null @@ -1,30 +0,0 @@ -// 排行榜 -module.exports = (query, request) => { - query.cookie.os = 'pc'; - if (query.idx) { - return Promise.resolve({ - status: 500, - body: { - code: 500, - msg: '不支持此方式调用,只支持id调用', - }, - }); - } - - const data = { - id: query.id, - n: '500', - s: '0', - }; - return request( - 'POST', - `https://interface3.music.163.com/api/playlist/v4/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/top_mv.js b/netease_api/module/top_mv.js deleted file mode 100644 index 4c77888..0000000 --- a/netease_api/module/top_mv.js +++ /dev/null @@ -1,16 +0,0 @@ -// MV排行榜 - -module.exports = (query, request) => { - const data = { - area: query.area || '', - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/mv/toplist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/top_playlist.js b/netease_api/module/top_playlist.js deleted file mode 100644 index 7a2e5e0..0000000 --- a/netease_api/module/top_playlist.js +++ /dev/null @@ -1,17 +0,0 @@ -// 分类歌单 - -module.exports = (query, request) => { - const data = { - cat: query.cat || '全部', // 全部,华语,欧美,日语,韩语,粤语,小语种,流行,摇滚,民谣,电子,舞曲,说唱,轻音乐,爵士,乡村,R&B/Soul,古典,民族,英伦,金属,朋克,蓝调,雷鬼,世界音乐,拉丁,另类/独立,New Age,古风,后摇,Bossa Nova,清晨,夜晚,学习,工作,午休,下午茶,地铁,驾车,运动,旅行,散步,酒吧,怀旧,清新,浪漫,性感,伤感,治愈,放松,孤独,感动,兴奋,快乐,安静,思念,影视原声,ACG,儿童,校园,游戏,70后,80后,90后,网络歌曲,KTV,经典,翻唱,吉他,钢琴,器乐,榜单,00后 - order: query.order || 'hot', // hot,new - limit: query.limit || 50, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/playlist/list`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/top_playlist_highquality.js b/netease_api/module/top_playlist_highquality.js deleted file mode 100644 index 8eb5b88..0000000 --- a/netease_api/module/top_playlist_highquality.js +++ /dev/null @@ -1,21 +0,0 @@ -// 精品歌单 - -module.exports = (query, request) => { - const data = { - cat: query.cat || '全部', // 全部,华语,欧美,韩语,日语,粤语,小语种,运动,ACG,影视原声,流行,摇滚,后摇,古风,民谣,轻音乐,电子,器乐,说唱,古典,爵士 - limit: query.limit || 50, - lasttime: query.before || 0, // 歌单updateTime - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/playlist/highquality/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/top_song.js b/netease_api/module/top_song.js deleted file mode 100644 index a6d7d54..0000000 --- a/netease_api/module/top_song.js +++ /dev/null @@ -1,21 +0,0 @@ -// 新歌速递 - -module.exports = (query, request) => { - const data = { - areaId: query.type || 0, // 全部:0 华语:7 欧美:96 日本:8 韩国:16 - // limit: query.limit || 100, - // offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/new/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/toplist.js b/netease_api/module/toplist.js deleted file mode 100644 index 9239ba4..0000000 --- a/netease_api/module/toplist.js +++ /dev/null @@ -1,15 +0,0 @@ -// 所有榜单介绍 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/toplist`, - {}, - { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/toplist_artist.js b/netease_api/module/toplist_artist.js deleted file mode 100644 index 3a71147..0000000 --- a/netease_api/module/toplist_artist.js +++ /dev/null @@ -1,16 +0,0 @@ -// 歌手榜 - -module.exports = (query, request) => { - const data = { - type: query.type || 1, - limit: 100, - offset: 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/toplist/artist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/toplist_detail.js b/netease_api/module/toplist_detail.js deleted file mode 100644 index e3e442f..0000000 --- a/netease_api/module/toplist_detail.js +++ /dev/null @@ -1,15 +0,0 @@ -// 所有榜单内容摘要 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/toplist/detail`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_account.js b/netease_api/module/user_account.js deleted file mode 100644 index f1bf505..0000000 --- a/netease_api/module/user_account.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/nuser/account/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/user_audio.js b/netease_api/module/user_audio.js deleted file mode 100644 index 43aa231..0000000 --- a/netease_api/module/user_audio.js +++ /dev/null @@ -1,18 +0,0 @@ -// 用户创建的电台 - -module.exports = (query, request) => { - const data = { - userId: query.uid, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/get/byuser`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_binding.js b/netease_api/module/user_binding.js deleted file mode 100644 index 787984f..0000000 --- a/netease_api/module/user_binding.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/v1/user/bindings/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_cloud.js b/netease_api/module/user_cloud.js deleted file mode 100644 index 0f0aa8e..0000000 --- a/netease_api/module/user_cloud.js +++ /dev/null @@ -1,14 +0,0 @@ -// 云盘数据 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/weapi/v1/cloud/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/user_cloud_del.js b/netease_api/module/user_cloud_del.js deleted file mode 100644 index ab42bfe..0000000 --- a/netease_api/module/user_cloud_del.js +++ /dev/null @@ -1,13 +0,0 @@ -// 云盘歌曲删除 - -module.exports = (query, request) => { - const data = { - songIds: [query.id], - }; - return request('POST', `https://music.163.com/weapi/cloud/del`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/user_cloud_detail.js b/netease_api/module/user_cloud_detail.js deleted file mode 100644 index c41ff80..0000000 --- a/netease_api/module/user_cloud_detail.js +++ /dev/null @@ -1,19 +0,0 @@ -// 云盘数据详情 - -module.exports = (query, request) => { - const id = query.id.replace(/\s/g, '').split(','); - const data = { - songIds: id, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/cloud/get/byids`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_detail.js b/netease_api/module/user_detail.js deleted file mode 100644 index be14276..0000000 --- a/netease_api/module/user_detail.js +++ /dev/null @@ -1,15 +0,0 @@ -// 用户详情 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/user/detail/${query.uid}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_dj.js b/netease_api/module/user_dj.js deleted file mode 100644 index 78f9c2a..0000000 --- a/netease_api/module/user_dj.js +++ /dev/null @@ -1,19 +0,0 @@ -// 用户电台节目 - -module.exports = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/dj/program/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_event.js b/netease_api/module/user_event.js deleted file mode 100644 index 35a287c..0000000 --- a/netease_api/module/user_event.js +++ /dev/null @@ -1,21 +0,0 @@ -// 用户动态 - -module.exports = (query, request) => { - const data = { - getcounts: true, - time: query.lasttime || -1, - limit: query.limit || 30, - total: false, - }; - return request( - 'POST', - `https://music.163.com/weapi/event/get/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_followeds.js b/netease_api/module/user_followeds.js deleted file mode 100644 index 14dc835..0000000 --- a/netease_api/module/user_followeds.js +++ /dev/null @@ -1,21 +0,0 @@ -// 关注TA的人(粉丝) - -module.exports = (query, request) => { - const data = { - userId: query.uid, - time: query.lasttime || -1, - limit: query.limit || 30, - }; - return request( - 'POST', - `https://music.163.com/eapi/user/getfolloweds/${query.uid}`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/user/getfolloweds', - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_follows.js b/netease_api/module/user_follows.js deleted file mode 100644 index 3e12a21..0000000 --- a/netease_api/module/user_follows.js +++ /dev/null @@ -1,20 +0,0 @@ -// TA关注的人(关注) - -module.exports = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - order: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/user/getfollows/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_level.js b/netease_api/module/user_level.js deleted file mode 100644 index 9eb9694..0000000 --- a/netease_api/module/user_level.js +++ /dev/null @@ -1,11 +0,0 @@ -// 类别热门电台 - -module.exports = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/weapi/user/level`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/user_playlist.js b/netease_api/module/user_playlist.js deleted file mode 100644 index cdef629..0000000 --- a/netease_api/module/user_playlist.js +++ /dev/null @@ -1,16 +0,0 @@ -// 用户歌单 - -module.exports = (query, request) => { - const data = { - uid: query.uid, - limit: query.limit || 30, - offset: query.offset || 0, - includeVideo: true, - }; - return request('POST', `https://music.163.com/api/user/playlist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/user_record.js b/netease_api/module/user_record.js deleted file mode 100644 index a882701..0000000 --- a/netease_api/module/user_record.js +++ /dev/null @@ -1,14 +0,0 @@ -// 听歌排行 - -module.exports = (query, request) => { - const data = { - uid: query.uid, - type: query.type || 0, // 1: 最近一周, 0: 所有时间 - }; - return request('POST', `https://music.163.com/weapi/v1/play/record`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/user_replacephone.js b/netease_api/module/user_replacephone.js deleted file mode 100644 index ee8d459..0000000 --- a/netease_api/module/user_replacephone.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = (query, request) => { - const data = { - phone: query.phone, - captcha: query.captcha, - oldcaptcha: query.oldcaptcha, - countrycode: query.countrycode || '86', - }; - return request( - 'POST', - `https://music.163.com/api/user/replaceCellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_subcount.js b/netease_api/module/user_subcount.js deleted file mode 100644 index 414ce01..0000000 --- a/netease_api/module/user_subcount.js +++ /dev/null @@ -1,15 +0,0 @@ -// 收藏计数 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/subcount`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/user_update.js b/netease_api/module/user_update.js deleted file mode 100644 index d84281c..0000000 --- a/netease_api/module/user_update.js +++ /dev/null @@ -1,24 +0,0 @@ -// 编辑用户信息 - -module.exports = (query, request) => { - const data = { - avatarImgId: '0', - birthday: query.birthday, - city: query.city, - gender: query.gender, - nickname: query.nickname, - province: query.province, - signature: query.signature, - }; - return request( - 'POST', - `https://music.163.com/weapi/user/profile/update`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_category_list.js b/netease_api/module/video_category_list.js deleted file mode 100644 index 40305fb..0000000 --- a/netease_api/module/video_category_list.js +++ /dev/null @@ -1,20 +0,0 @@ -// 视频分类列表 - -module.exports = (query, request) => { - const data = { - offset: query.offset || 0, - total: 'true', - limit: query.limit || 99, - }; - return request( - 'POST', - `https://music.163.com/api/cloudvideo/category/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_detail.js b/netease_api/module/video_detail.js deleted file mode 100644 index f668743..0000000 --- a/netease_api/module/video_detail.js +++ /dev/null @@ -1,18 +0,0 @@ -// 视频详情 - -module.exports = (query, request) => { - const data = { - id: query.id, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/v1/video/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_detail_info.js b/netease_api/module/video_detail_info.js deleted file mode 100644 index c8ebd4b..0000000 --- a/netease_api/module/video_detail_info.js +++ /dev/null @@ -1,19 +0,0 @@ -// 视频点赞转发评论数数据 - -module.exports = (query, request) => { - const data = { - threadid: `R_VI_62_${query.vid}`, - composeliked: true, - }; - return request( - 'POST', - `https://music.163.com/api/comment/commentthread/info`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_group.js b/netease_api/module/video_group.js deleted file mode 100644 index 77ae3f6..0000000 --- a/netease_api/module/video_group.js +++ /dev/null @@ -1,21 +0,0 @@ -// 视频标签/分类下的视频 - -module.exports = (query, request) => { - const data = { - groupId: query.id, - offset: query.offset || 0, - need_preview_url: 'true', - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/videotimeline/videogroup/otherclient/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_group_list.js b/netease_api/module/video_group_list.js deleted file mode 100644 index babe3ab..0000000 --- a/netease_api/module/video_group_list.js +++ /dev/null @@ -1,16 +0,0 @@ -// 视频标签列表 - -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/cloudvideo/group/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_sub.js b/netease_api/module/video_sub.js deleted file mode 100644 index 1e46591..0000000 --- a/netease_api/module/video_sub.js +++ /dev/null @@ -1,19 +0,0 @@ -// 收藏与取消收藏视频 - -module.exports = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { - id: query.id, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/video/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_timeline_all.js b/netease_api/module/video_timeline_all.js deleted file mode 100644 index 9c107a6..0000000 --- a/netease_api/module/video_timeline_all.js +++ /dev/null @@ -1,22 +0,0 @@ -// 全部视频列表 - -module.exports = (query, request) => { - const data = { - groupId: 0, - offset: query.offset || 0, - need_preview_url: 'true', - total: true, - }; - // /api/videotimeline/otherclient/get - return request( - 'POST', - `https://music.163.com/api/videotimeline/otherclient/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/video_timeline_recommend.js b/netease_api/module/video_timeline_recommend.js deleted file mode 100644 index a249089..0000000 --- a/netease_api/module/video_timeline_recommend.js +++ /dev/null @@ -1,17 +0,0 @@ -// 推荐视频 - -module.exports = (query, request) => { - const data = { - offset: query.offset || 0, - filterLives: '[]', - withProgramInfo: 'true', - needUrl: '1', - resolution: '480', - }; - return request('POST', `https://music.163.com/api/videotimeline/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/video_url.js b/netease_api/module/video_url.js deleted file mode 100644 index 8d2673c..0000000 --- a/netease_api/module/video_url.js +++ /dev/null @@ -1,19 +0,0 @@ -// 视频链接 - -module.exports = (query, request) => { - const data = { - ids: '["' + query.id + '"]', - resolution: query.res || 1080, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/playurl`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/weblog.js b/netease_api/module/weblog.js deleted file mode 100644 index 2b8d0be..0000000 --- a/netease_api/module/weblog.js +++ /dev/null @@ -1,15 +0,0 @@ -// 操作记录 - -module.exports = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/feedback/weblog`, - query.data || {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/yunbei.js b/netease_api/module/yunbei.js deleted file mode 100644 index 367fe3e..0000000 --- a/netease_api/module/yunbei.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - // /api/point/today/get - return request('POST', `https://music.163.com/api/point/signed/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/yunbei_expense.js b/netease_api/module/yunbei_expense.js deleted file mode 100644 index 29ab8d0..0000000 --- a/netease_api/module/yunbei_expense.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = (query, request) => { - const data = { - limit: query.limit || 10, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/store/api/point/expense`, - data, - { - crypto: 'api', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/yunbei_info.js b/netease_api/module/yunbei_info.js deleted file mode 100644 index 7aa122a..0000000 --- a/netease_api/module/yunbei_info.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/v1/user/info`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/yunbei_receipt.js b/netease_api/module/yunbei_receipt.js deleted file mode 100644 index 7b662ce..0000000 --- a/netease_api/module/yunbei_receipt.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = (query, request) => { - const data = { - limit: query.limit || 10, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/store/api/point/receipt`, - data, - { - crypto: 'api', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/yunbei_sign.js b/netease_api/module/yunbei_sign.js deleted file mode 100644 index 0f1c913..0000000 --- a/netease_api/module/yunbei_sign.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = (query, request) => { - const data = { - type: '0', - }; - return request('POST', `https://music.163.com/api/point/dailyTask`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/module/yunbei_task_finish.js b/netease_api/module/yunbei_task_finish.js deleted file mode 100644 index 258c495..0000000 --- a/netease_api/module/yunbei_task_finish.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = (query, request) => { - const data = { - userTaskId: query.userTaskId, - depositCode: query.depositCode || '0', - }; - return request( - 'POST', - `https://music.163.com/api/usertool/task/point/receive`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/yunbei_tasks.js b/netease_api/module/yunbei_tasks.js deleted file mode 100644 index 7515e00..0000000 --- a/netease_api/module/yunbei_tasks.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/usertool/task/list/all`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/yunbei_tasks_todo.js b/netease_api/module/yunbei_tasks_todo.js deleted file mode 100644 index 924dced..0000000 --- a/netease_api/module/yunbei_tasks_todo.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/usertool/task/todo/query`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); -}; diff --git a/netease_api/module/yunbei_today.js b/netease_api/module/yunbei_today.js deleted file mode 100644 index 4f707f8..0000000 --- a/netease_api/module/yunbei_today.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/point/today/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); -}; diff --git a/netease_api/package-lock.json b/netease_api/package-lock.json deleted file mode 100644 index de5e769..0000000 --- a/netease_api/package-lock.json +++ /dev/null @@ -1,4096 +0,0 @@ -{ - "name": "NeteaseCloudMusicApi", - "version": "3.45.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522948158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", - "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593521083613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz", - "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593521095576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz", - "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "@eslint/eslintrc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.0.tgz", - "integrity": "sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz", - "integrity": "sha1-Olgr21OATGum0UZXnEblITDPSjs=", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz", - "integrity": "sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz", - "integrity": "sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY=", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz", - "integrity": "sha1-zLkURTYBeaBOf+av94wA/8Hur4I=" - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz?cache=0&sync_timestamp=1598910403749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.6.tgz", - "integrity": "sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA=", - "dev": true - }, - "@types/node": { - "version": "14.11.10", - "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.11.10.tgz", - "integrity": "sha1-jBAquhO/UlPzUUav+/iyYnUGm+8=", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1596839394119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz", - "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.4.1.tgz?cache=0&sync_timestamp=1603565073344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-4.4.1.tgz", - "integrity": "sha1-uKzqA3O9KjiKxH30RlLwC/izaPU=", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.4.1", - "@typescript-eslint/scope-manager": "4.4.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.4.1.tgz?cache=0&sync_timestamp=1603563239927&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-4.4.1.tgz", - "integrity": "sha1-QGE7l1f6AXDePgBDJU27B3yvrAw=", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.4.1", - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/typescript-estree": "4.4.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-4.4.1.tgz?cache=0&sync_timestamp=1603563241160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-4.4.1.tgz", - "integrity": "sha1-Jf3pwIBhHzA/LzPO2xRdLFmRW4A=", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.4.1", - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/typescript-estree": "4.4.1", - "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.4.1.tgz", - "integrity": "sha1-0ZRH5g2yzpxCWJjWL6A7LM6Oo/k=", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/visitor-keys": "4.4.1" - } - }, - "@typescript-eslint/types": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/types/download/@typescript-eslint/types-4.4.1.tgz", - "integrity": "sha1-xQezXPUjvHugCq5fde6bgQzau8E=", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.4.1.tgz?cache=0&sync_timestamp=1603563238913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-4.4.1.tgz", - "integrity": "sha1-WY9t5IgQbCWH1HyiRixg9uJ5fLg=", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.4.1", - "@typescript-eslint/visitor-keys": "4.4.1", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.4.1.tgz", - "integrity": "sha1-F2ncep4tfSz9Mxi3ftgkkYeu1cM=", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.4.1", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/@ungap/promise-all-settled/download/@ungap/promise-all-settled-1.1.2.tgz", - "integrity": "sha1-qlgEJxHW4ydd033Fl+XTHowpCkQ=", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", - "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-es7-plugin": { - "version": "1.1.7", - "resolved": "https://registry.npm.taobao.org/acorn-es7-plugin/download/acorn-es7-plugin-1.1.7.tgz", - "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-6.0.2.tgz?cache=0&sync_timestamp=1603480100923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-6.0.2.tgz", - "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz?cache=0&sync_timestamp=1598049717562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.1.0.tgz", - "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1603561547443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", - "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz", - "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz", - "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1602623859603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz", - "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", - "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", - "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz?cache=0&sync_timestamp=1598649734444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/array-filter/download/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/array-find/download/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz", - "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=", - "dev": true - }, - "ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npm.taobao.org/ast-types/download/ast-types-0.13.4.tgz?cache=0&sync_timestamp=1599935985242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fast-types%2Fdownload%2Fast-types-0.13.4.tgz", - "integrity": "sha1-7g13s0MmOWXsw/ti2hbnIisrZ4I=", - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz", - "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", - "dev": true - }, - "axios": { - "version": "0.20.0", - "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.20.0.tgz", - "integrity": "sha1-BXujDwSIRpSZOozQf6OUz/EcUL0=", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz", - "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", - "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898189928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", - "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz", - "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", - "dev": true - }, - "busboy": { - "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/busboy/download/busboy-0.3.1.tgz", - "integrity": "sha1-FwiZJ0xb84quJ9XGK3EmjNWF/Rs=", - "requires": { - "dicer": "0.3.0" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz", - "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=" - }, - "call-matcher": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/call-matcher/download/call-matcher-1.1.0.tgz", - "integrity": "sha1-I7LBvHqDlMi+KGCdd929V4ZoBDI=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "deep-equal": "^1.0.0", - "espurify": "^1.6.0", - "estraverse": "^4.0.0" - } - }, - "call-signature": { - "version": "0.0.2", - "resolved": "https://registry.npm.taobao.org/call-signature/download/call-signature-0.0.2.tgz", - "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz", - "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1602350083472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz", - "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.3.tgz?cache=0&sync_timestamp=1602585381749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.3.tgz", - "integrity": "sha1-wd84IxRI5FykrFiObHlXO6alfVs=", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz", - "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035524745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", - "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz", - "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-2.1.0.tgz", - "integrity": "sha1-w54ovwXtzeW+O5iZKiLe7Vork8c=", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-2.0.0.tgz", - "integrity": "sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212180491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz", - "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-3.0.0.tgz", - "integrity": "sha1-Md3BCTCht+C2ewjJbC9Jt3p4l4c=", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", - "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1602861367442&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz", - "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", - "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "6.2.0", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-6.2.0.tgz?cache=0&sync_timestamp=1603599636161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-6.2.0.tgz", - "integrity": "sha1-uZC/uKwDCu3G0RvATRSI/+9W23U=", - "dev": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/compare-versions/download/compare-versions-3.6.0.tgz", - "integrity": "sha1-GlaJkTaF5ah2N7jT/8p1UU7EHWI=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", - "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz", - "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525865178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz", - "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz", - "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz?cache=0&sync_timestamp=1596310819353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-6.0.0.tgz", - "integrity": "sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI=", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz", - "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/d/download/d-1.0.1.tgz", - "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/data-uri-to-buffer/download/data-uri-to-buffer-3.0.1.tgz?cache=0&sync_timestamp=1590800007667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdata-uri-to-buffer%2Fdownload%2Fdata-uri-to-buffer-3.0.1.tgz", - "integrity": "sha1-WUuJc5OMW8LDMEZTV4U0GrxPNjY=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz", - "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", - "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "degenerator": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/degenerator/download/degenerator-2.2.0.tgz", - "integrity": "sha1-SemMEfoCk8Wybt+7UvFXKa/NslQ=", - "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "dicer": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/dicer/download/dicer-0.3.0.tgz", - "integrity": "sha1-6s2Ys7+/kuirXC/bcaqsRLsGuHI=", - "requires": { - "streamsearch": "0.1.2" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz?cache=0&sync_timestamp=1578890967183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-4.0.2.tgz", - "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=", - "dev": true - }, - "diff-match-patch": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/diff-match-patch/download/diff-match-patch-1.0.5.tgz", - "integrity": "sha1-q7WE1fEM0Rlt/FWqA3AVkq4/ezc=", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz", - "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz", - "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-1.1.0.tgz", - "integrity": "sha1-X3yCjxv8RIh9wqMVq1xFaR1US1g=", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.2.tgz?cache=0&sync_timestamp=1600028495728&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.0.2.tgz", - "integrity": "sha1-87blSSAeRvWItZRj3XcYcTH+aXE=", - "dev": true - }, - "domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-3.3.0.tgz", - "integrity": "sha1-bbfqRuRhfrFc+HXfaLK4UkzgA3o=", - "dev": true, - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.4.2", - "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-2.4.2.tgz", - "integrity": "sha1-fuW+JhlE4a1IfZqgYWcgAQEjkis=", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.3.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/eastasianwidth/download/eastasianwidth-0.2.0.tgz", - "integrity": "sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212180491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", - "dev": true - }, - "empower": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/empower/download/empower-1.3.1.tgz", - "integrity": "sha1-dol5y7s21x2PXtqrZj3qy52rkWw=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "empower-core": "^1.2.0" - } - }, - "empower-assert": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/empower-assert/download/empower-assert-1.1.0.tgz", - "integrity": "sha1-jTJ/vmmoivkN2pjRv8mCnSok/WI=", - "dev": true, - "requires": { - "estraverse": "^4.2.0" - } - }, - "empower-core": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/empower-core/download/empower-core-1.2.0.tgz", - "integrity": "sha1-zj+ySE1Rh/opwj+6g0Swsv31YBw=", - "dev": true, - "requires": { - "call-signature": "0.0.2", - "core-js": "^2.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz", - "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693291943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz", - "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.1.0.tgz?cache=0&sync_timestamp=1602897029273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.1.0.tgz", - "integrity": "sha1-mS0xKc999ocLlsV4WMJJoSD4uLU=", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz?cache=0&sync_timestamp=1601502719982&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.0-next.1.tgz", - "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", - "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.53.tgz", - "integrity": "sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npm.taobao.org/es6-map/download/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "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": { - "version": "0.1.5", - "resolved": "https://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.3.tgz", - "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/es6-weak-map/download/es6-weak-map-2.0.3.tgz", - "integrity": "sha1-ttofFswswNm+Q+a9v8Xn383zHVM=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escallmatch": { - "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/escallmatch/download/escallmatch-1.5.0.tgz", - "integrity": "sha1-UAmdhugJGwkt+N37w/mm+wWgJNA=", - "dev": true, - "requires": { - "call-matcher": "^1.0.0", - "esprima": "^2.0.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - } - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz?cache=0&sync_timestamp=1596669832613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.3.tgz", - "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.0.tgz", - "integrity": "sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz", - "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz", - "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.9.1.tgz", - "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz", - "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz", - "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - } - } - }, - "eslint-config-prettier": { - "version": "6.13.0", - "resolved": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.13.0.tgz?cache=0&sync_timestamp=1603294035236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.13.0.tgz", - "integrity": "sha1-IH2IeWtWJOW7gVu738WJHOuev/o=", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-plugin-html": { - "version": "6.0.3", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-html/download/eslint-plugin-html-6.0.3.tgz?cache=0&sync_timestamp=1599391535931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-html%2Fdownload%2Feslint-plugin-html-6.0.3.tgz", - "integrity": "sha1-jZ0sGH0aSO142E9F4pgg8QJCXlE=", - "dev": true, - "requires": { - "htmlparser2": "^4.1.0" - } - }, - "eslint-plugin-prettier": { - "version": "3.1.4", - "resolved": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz", - "integrity": "sha1-Foq0MVTi6lfbmSos0JfIKBcfdcI=", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599933651660&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz", - "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1592222145079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz", - "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435068105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", - "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-2.0.0.tgz?cache=0&sync_timestamp=1597435068105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.0.0.tgz", - "integrity": "sha1-If3I+82ceVzAMh8FY3AglXUVEag=", - "dev": true - }, - "espower": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/espower/download/espower-2.1.2.tgz", - "integrity": "sha1-gk+IeI+f7fTPD5KPXhG7kHzpuRg=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "espower-loader": { - "version": "1.2.2", - "resolved": "https://registry.npm.taobao.org/espower-loader/download/espower-loader-1.2.2.tgz", - "integrity": "sha1-7bRsPFmga6yOpzppXIblxaC8gto=", - "dev": true, - "requires": { - "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": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/espower-location-detector/download/espower-location-detector-1.0.0.tgz", - "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=", - "dev": true, - "requires": { - "is-url": "^1.2.1", - "path-is-absolute": "^1.0.0", - "source-map": "^0.5.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "espower-source": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/espower-source/download/espower-source-2.3.0.tgz", - "integrity": "sha1-Q+k7LBivUAGL2xvqehJx9KHBJfQ=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz", - "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=", - "dev": true - } - } - }, - "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" - }, - "espurify": { - "version": "1.8.1", - "resolved": "https://registry.npm.taobao.org/espurify/download/espurify-1.8.1.tgz", - "integrity": "sha1-V0bGwatC0wLeEL0dW/fw6MBRUFY=", - "dev": true, - "requires": { - "core-js": "^2.0.0" - } - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587061286348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz", - "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", - "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz?cache=0&sync_timestamp=1598898255610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesrecurse%2Fdownload%2Fesrecurse-4.3.0.tgz", - "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", - "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", - "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", - "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "execa": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/execa/download/execa-4.0.3.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-4.0.3.tgz", - "integrity": "sha1-CjTau61tZhAL1vLFdshmlAPzF/I=", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz", - "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "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.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "express-fileupload": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/express-fileupload/download/express-fileupload-1.2.0.tgz", - "integrity": "sha1-NWxN/WRb5xq5+y9ObYTusA0keXk=", - "requires": { - "busboy": "^0.3.1" - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/ext/download/ext-1.4.0.tgz", - "integrity": "sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ=", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/type/download/type-2.1.0.tgz?cache=0&sync_timestamp=1598016585110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-2.1.0.tgz", - "integrity": "sha1-m9wixkjPjPht0j0yM2pBz7ZHXj8=", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599697571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", - "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz", - "integrity": "sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM=", - "dev": true - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592291968616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz", - "integrity": "sha1-0grvv5lXk4Pn88xmUpFYybmFVNM=", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.8.0.tgz?cache=0&sync_timestamp=1589280329638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.8.0.tgz", - "integrity": "sha1-VQ4fn1m7xl/hhctqm02VNXEH9IE=", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz", - "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz", - "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-2.0.0.tgz", - "integrity": "sha1-e0Fa66In1XWFHgpbDGQNdlZAP7o=" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", - "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", - "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/find-versions/download/find-versions-3.2.0.tgz", - "integrity": "sha1-ECl/mAMKeGgpaBaQVF72We0dJU4=", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npm.taobao.org/flat/download/flat-5.0.2.tgz?cache=0&sync_timestamp=1602723468701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflat%2Fdownload%2Fflat-5.0.2.tgz", - "integrity": "sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=", - "dev": true - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz", - "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz", - "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", - "dev": true - }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", - "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz", - "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz", - "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", - "dev": true, - "optional": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npm.taobao.org/ftp/download/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&sync_timestamp=1575993334275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha1-tf3nfyLL4185C04ImSLFC85u9mQ=", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz", - "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz", - "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/get-uri/download/get-uri-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-uri%2Fdownload%2Fget-uri-3.0.2.tgz", - "integrity": "sha1-8O8TVvqrxw4flAT6O2ayupv8clw=", - "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - } - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz", - "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", - "dev": true, - "requires": { - "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" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", - "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npm.taobao.org/globby/download/globby-11.0.1.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-11.0.1.tgz", - "integrity": "sha1-mivxB6Bo8//qvEmtcCx57ejP01c=", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz", - "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz", - "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz", - "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", - "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", - "dev": true - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-4.1.0.tgz?cache=0&sync_timestamp=1601761730691&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-4.1.0.tgz", - "integrity": "sha1-mk7xYfLkYl6/ffvmwKL1LRilnng=", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", - "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz", - "integrity": "sha1-ioyO9/WTLM+VPClsqCkblap0qjo=", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - } - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz?cache=0&sync_timestamp=1581106803611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttps-proxy-agent%2Fdownload%2Fhttps-proxy-agent-5.0.0.tgz", - "integrity": "sha1-4qkFQqu2inYuCghQ9sntrf2FBrI=", - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - } - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1584198662293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz", - "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=", - "dev": true - }, - "husky": { - "version": "4.2.5", - "resolved": "https://registry.npm.taobao.org/husky/download/husky-4.2.5.tgz?cache=0&sync_timestamp=1602813564105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhusky%2Fdownload%2Fhusky-4.2.5.tgz", - "integrity": "sha1-K092Imc6cVefkB2Yhe1Eg5S1+jY=", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^6.0.0", - "find-versions": "^3.2.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184264130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz", - "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz", - "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz", - "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "intelli-espower-loader": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/intelli-espower-loader/download/intelli-espower-loader-1.0.1.tgz", - "integrity": "sha1-LHsDFGvB1GvyENCgOXxckatMorA=", - "dev": true, - "requires": { - "espower-loader": "^1.0.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", - "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=" - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz", - "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", - "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz?cache=0&sync_timestamp=1600719276620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.2.tgz", - "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=", - "dev": true - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729165697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz", - "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", - "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", - "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz?cache=0&sync_timestamp=1602541451286&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-2.1.0.tgz", - "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555762356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz", - "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz", - "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz", - "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npm.taobao.org/is-url/download/is-url-1.2.4.tgz", - "integrity": "sha1-BKTfRtKMTP89c9Af8Gq+sxihqlI=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz", - "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1599064788298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599333856086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "10.4.0", - "resolved": "https://registry.npm.taobao.org/lint-staged/download/lint-staged-10.4.0.tgz?cache=0&sync_timestamp=1602914408937&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flint-staged%2Fdownload%2Flint-staged-10.4.0.tgz", - "integrity": "sha1-0YYo9zcyjgu7+H0YP0Agkw6amE4=", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.0.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.1.1", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.0.3", - "listr2": "^2.6.0", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-7.0.0.tgz?cache=0&sync_timestamp=1596310819353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-7.0.0.tgz", - "integrity": "sha1-75tE13OVnK5j3ezRIt4jhTtg+NM=", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - } - } - }, - "listr2": { - "version": "2.6.2", - "resolved": "https://registry.npm.taobao.org/listr2/download/listr2-2.6.2.tgz", - "integrity": "sha1-SRLrAeHi3XLsN/OJWla/JiLW82o=", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.2", - "through": "^2.3.8" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597335994883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", - "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=", - "dev": true - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-4.0.0.tgz?cache=0&sync_timestamp=1587898912367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-4.0.0.tgz", - "integrity": "sha1-abPMRtIPRI7M23XqH6cz2eghySA=", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/log-update/download/log-update-4.0.0.tgz?cache=0&sync_timestamp=1582186170811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-update%2Fdownload%2Flog-update-4.0.0.tgz", - "integrity": "sha1-WJ7NNSRx8qHAxXAodUOmTf0g4KE=", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-2.0.0.tgz", - "integrity": "sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-4.0.0.tgz", - "integrity": "sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms=", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-estraverse-visitors": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/merge-estraverse-visitors/download/merge-estraverse-visitors-1.0.0.tgz", - "integrity": "sha1-65aDOLXe1c7tgs7AMH3sui2OqZQ=", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz", - "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz?cache=0&sync_timestamp=1591170027156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge2%2Fdownload%2Fmerge2-1.4.1.tgz", - "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz", - "integrity": "sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", - "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831210195&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz", - "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz", - "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", - "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", - "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", - "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "8.2.0", - "resolved": "https://registry.npm.taobao.org/mocha/download/mocha-8.2.0.tgz?cache=0&sync_timestamp=1602881142408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmocha%2Fdownload%2Fmocha-8.2.0.tgz", - "integrity": "sha1-+Kp5EQtLWmWAxl1N2Ag8QlKCYk4=", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.4.3", - "debug": "4.2.0", - "diff": "4.0.2", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.14.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.2", - "nanoid": "3.1.12", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "7.2.0", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.0.2", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz", - "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-5.0.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-5.0.0.tgz", - "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-6.0.0.tgz", - "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-3.0.2.tgz?cache=0&sync_timestamp=1594559734248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.0.2.tgz", - "integrity": "sha1-FmTgEK88rcaBuq/T4qQ3vnsPtf4=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-5.0.0.tgz", - "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multi-stage-sourcemap": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/multi-stage-sourcemap/download/multi-stage-sourcemap-0.2.1.tgz", - "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=", - "dev": true, - "requires": { - "source-map": "^0.1.34" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.1.43.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.12.tgz?cache=0&sync_timestamp=1603419433040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanoid%2Fdownload%2Fnanoid-3.1.12.tgz", - "integrity": "sha1-b3c2xi6NOUIWAeSgx3YjqX6mllQ=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", - "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/netmask/download/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", - "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz", - "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545231350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz", - "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=", - "dev": true - }, - "object-is": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.3.tgz?cache=0&sync_timestamp=1601502788762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.3.tgz", - "integrity": "sha1-LjueZVYBN0Ve471irsTZCi6hzIE=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", - "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", - "dev": true - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.1.tgz?cache=0&sync_timestamp=1599844927493&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.1.tgz", - "integrity": "sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz", - "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/opencollective-postinstall/download/opencollective-postinstall-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopencollective-postinstall%2Fdownload%2Fopencollective-postinstall-2.0.3.tgz", - "integrity": "sha1-eg//l49tv6TQBiOPusmO1BmMMlk=", - "dev": true - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz", - "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559734248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-4.0.0.tgz", - "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true - }, - "pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/pac-proxy-agent/download/pac-proxy-agent-4.1.0.tgz", - "integrity": "sha1-Zog+6rrckV/F6VRXMkyw8Kx43vs=", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - } - } - }, - "pac-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/pac-resolver/download/pac-resolver-4.1.0.tgz?cache=0&sync_timestamp=1581134452130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpac-resolver%2Fdownload%2Fpac-resolver-4.1.0.tgz", - "integrity": "sha1-SxLn0JayVaO4TlP2gx8y6cfl/pU=", - "requires": { - "degenerator": "^2.2.0", - "ip": "^1.1.5", - "netmask": "^1.0.6" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", - "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.1.0.tgz", - "integrity": "sha1-+WCIzfJKj6qa6poAny2dlCyZlkY=", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", - "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz", - "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz", - "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz", - "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1602859045787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz", - "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz", - "integrity": "sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "power-assert": { - "version": "1.6.1", - "resolved": "https://registry.npm.taobao.org/power-assert/download/power-assert-1.6.1.tgz", - "integrity": "sha1-soy8Aq6Aiv0UMdDNUJOjmsWlsf4=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "empower": "^1.3.1", - "power-assert-formatter": "^1.4.1", - "universal-deep-strict-equal": "^1.2.1", - "xtend": "^4.0.0" - } - }, - "power-assert-context-formatter": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-context-formatter/download/power-assert-context-formatter-1.2.0.tgz", - "integrity": "sha1-j75yaSKI7FpyA83yFci4OKYGHSo=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "power-assert-context-traversal": "^1.2.0" - } - }, - "power-assert-context-reducer-ast": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-context-reducer-ast/download/power-assert-context-reducer-ast-1.2.0.tgz", - "integrity": "sha1-x8ocnjmm+3F/esX+nnbhkr9SXfM=", - "dev": true, - "requires": { - "acorn": "^5.0.0", - "acorn-es7-plugin": "^1.0.12", - "core-js": "^2.0.0", - "espurify": "^1.6.0", - "estraverse": "^4.2.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz", - "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=", - "dev": true - } - } - }, - "power-assert-context-traversal": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-context-traversal/download/power-assert-context-traversal-1.2.0.tgz", - "integrity": "sha1-9ucUVLr2QN5cHJwnA0n1yasLLpQ=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "estraverse": "^4.1.0" - } - }, - "power-assert-formatter": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/power-assert-formatter/download/power-assert-formatter-1.4.1.tgz", - "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=", - "dev": true, - "requires": { - "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": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-renderer-assertion/download/power-assert-renderer-assertion-1.2.0.tgz", - "integrity": "sha1-Pbb/zaEGs3vB4GQyrQ10imgrFHo=", - "dev": true, - "requires": { - "power-assert-renderer-base": "^1.1.1", - "power-assert-util-string-width": "^1.2.0" - } - }, - "power-assert-renderer-base": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/power-assert-renderer-base/download/power-assert-renderer-base-1.1.1.tgz", - "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=", - "dev": true - }, - "power-assert-renderer-comparison": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-renderer-comparison/download/power-assert-renderer-comparison-1.2.0.tgz", - "integrity": "sha1-5PiBEyJaab6KpYbq0FrvmUYsBJU=", - "dev": true, - "requires": { - "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": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-renderer-diagram/download/power-assert-renderer-diagram-1.2.0.tgz", - "integrity": "sha1-N/ZuhULlZ3xbWObXKwHA2aMOIhk=", - "dev": true, - "requires": { - "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": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-renderer-file/download/power-assert-renderer-file-1.2.0.tgz", - "integrity": "sha1-P0vr2eFFXXXPKsVB57tRWofUzks=", - "dev": true, - "requires": { - "power-assert-renderer-base": "^1.1.1" - } - }, - "power-assert-util-string-width": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/power-assert-util-string-width/download/power-assert-util-string-width-1.2.0.tgz", - "integrity": "sha1-bgbV41gbuHbF03fFMQn/+pW9kaA=", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prettier": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-2.1.2.tgz?cache=0&sync_timestamp=1600215482255&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.2.tgz", - "integrity": "sha1-MFBwDa4uTItnxMP2Zs24r0BeHOU=", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", - "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz", - "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", - "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz", - "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", - "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", - "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz?cache=0&sync_timestamp=1602584331621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.5.0.tgz", - "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz?cache=0&sync_timestamp=1576388141321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz", - "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz?cache=0&sync_timestamp=1601502719982&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.7.tgz", - "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz", - "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", - "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz", - "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", - "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz", - "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz", - "integrity": "sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk=", - "dev": true - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.3.tgz?cache=0&sync_timestamp=1602770834162&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.3.tgz", - "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", - "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz", - "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/semver-regex/download/semver-regex-2.0.0.tgz", - "integrity": "sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg=", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", - "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", - "requires": { - "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.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" - } - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-5.0.1.tgz?cache=0&sync_timestamp=1599740650381&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-5.0.1.tgz", - "integrity": "sha1-eIbshIBJpGJGepfT2Rjrsqr5NPQ=", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", - "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", - "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz", - "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz", - "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", - "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz", - "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz", - "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz", - "integrity": "sha1-kWBcJdkWUvRmHqacz0XxszHKIbo=" - }, - "socks": { - "version": "2.4.4", - "resolved": "https://registry.npm.taobao.org/socks/download/socks-2.4.4.tgz?cache=0&sync_timestamp=1599605506578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks%2Fdownload%2Fsocks-2.4.4.tgz", - "integrity": "sha1-8aM4LngUrijJe7gqOLwawkshzKI=", - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-5.0.0.tgz?cache=0&sync_timestamp=1580845554635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocks-proxy-agent%2Fdownload%2Fsocks-proxy-agent-5.0.0.tgz", - "integrity": "sha1-fA82Tnsc9KekN+cSU77XLpAEvmA=", - "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" - }, - "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", - "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "optional": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz?cache=0&sync_timestamp=1587719289626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.4.18.tgz", - "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", - "dev": true, - "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587327902535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npm.taobao.org/string-argv/download/string-argv-0.3.1.tgz", - "integrity": "sha1-leL77AQnrhkYSTX4FtdKqkxcGdo=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.2.tgz?cache=0&sync_timestamp=1603219618123&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.2.tgz", - "integrity": "sha1-bd2ah5a8cUtImjriIkaiCPN7+kY=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.2.tgz?cache=0&sync_timestamp=1603219618047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.2.tgz", - "integrity": "sha1-ItRdqBAVMJzQzdeXh+iRn8XGE+c=", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "stringifier": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/stringifier/download/stringifier-1.4.0.tgz", - "integrity": "sha1-1wRYFWf0UmJl0A7Y7LNUoCw/7Cg=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "traverse": "^0.6.6", - "type-name": "^2.0.1" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz", - "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", - "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/strip-comments/download/strip-comments-2.0.1.tgz", - "integrity": "sha1-StEcP7ysF3pnpArCJMoznKHBups=" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz", - "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", - "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz", - "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", - "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", - "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.0.3.tgz", - "integrity": "sha1-jgdBrEX8DCJuWKF7/D5kubxsphw=" - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz", - "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", - "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", - "dev": true - } - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz", - "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz?cache=0&sync_timestamp=1598016585110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-1.2.0.tgz", - "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", - "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "type-name": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/type-name/download/type-name-2.0.2.tgz", - "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=", - "dev": true - }, - "typescript": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/typescript/download/typescript-4.0.3.tgz?cache=0&sync_timestamp=1603608626888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-4.0.3.tgz", - "integrity": "sha1-FTu9Ro7wdyXB35x36LRT+NNqu6U=", - "dev": true - }, - "universal-deep-strict-equal": { - "version": "1.2.2", - "resolved": "https://registry.npm.taobao.org/universal-deep-strict-equal/download/universal-deep-strict-equal-1.2.2.tgz", - "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=", - "dev": true, - "requires": { - "array-filter": "^1.0.0", - "indexof": "0.0.1", - "object-keys": "^1.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1603179967633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", - "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814377097&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz", - "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz", - "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/which-pm-runs/download/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz", - "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", - "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=" - }, - "workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npm.taobao.org/workerpool/download/workerpool-6.0.2.tgz", - "integrity": "sha1-4kG0PY0DPxvrUseFEGlFYDnR1Dg=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", - "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212180491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz", - "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", - "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz", - "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz?cache=0&sync_timestamp=1581429204252&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz", - "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz", - "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npm.taobao.org/yaml/download/yaml-1.10.0.tgz", - "integrity": "sha1-O1k63ZRIdgd9TWg/7gEIG9n/8x4=", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1602805561021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", - "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1602861397132&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz", - "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-2.0.0.tgz", - "integrity": "sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.1.0.tgz?cache=0&sync_timestamp=1602350083472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.1.0.tgz", - "integrity": "sha1-J9wXYXNyX7Ct+KSLZH9NeHGUTXg=", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-4.0.0.tgz", - "integrity": "sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=", - "dev": true - } - } - } - } -} diff --git a/netease_api/package.json b/netease_api/package.json deleted file mode 100644 index 7dba2ab..0000000 --- a/netease_api/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "NeteaseCloudMusicApi", - "version": "3.45.2", - "description": "网易云音乐 NodeJS 版 API", - "scripts": { - "start": "node app.js", - "test": "mocha -r intelli-espower-loader -t 20000 app.test.js --exit", - "lint": "eslint **/*.{js,ts}", - "lint-fix": "eslint --fix **/*.{js,ts}" - }, - "keywords": [ - "网易云音乐", - "网易云", - "音乐", - "网易云音乐nodejs" - ], - "main": "main.js", - "types": "./interface.d.ts", - "engines": { - "node": ">=12" - }, - "author": "binaryify", - "license": "MIT", - "files": [ - "module", - "util", - "plugins", - "main.d.ts", - "interface.d.ts", - "module_types" - ], - "dependencies": { - "axios": "^0.20.0", - "express": "^4.17.1", - "express-fileupload": "^1.1.9", - "pac-proxy-agent": "^4.0.0", - "strip-comments": "^2.0.1", - "tunnel": "^0.0.6" - }, - "devDependencies": { - "@types/node": "14.11.10", - "@typescript-eslint/eslint-plugin": "4.4.1", - "@typescript-eslint/parser": "4.4.1", - "eslint": "7.12.0", - "eslint-config-prettier": "6.13.0", - "eslint-plugin-html": "6.0.3", - "eslint-plugin-prettier": "3.1.4", - "intelli-espower-loader": "1.0.1", - "mocha": "8.2.0", - "power-assert": "1.6.1", - "prettier": "2.1.2", - "typescript": "4.0.3" - } -} diff --git a/netease_api/plugins/upload.js b/netease_api/plugins/upload.js deleted file mode 100644 index f572759..0000000 --- a/netease_api/plugins/upload.js +++ /dev/null @@ -1,48 +0,0 @@ -const axios = require('axios'); -module.exports = async (query, request) => { - const data = { - bucket: 'yyimgs', - ext: 'jpg', - filename: query.imgFile.name, - local: false, - nos_product: 0, - return_body: `{"code":200,"size":"$(ObjectSize)"}`, - type: 'other', - }; - // 获取key和token - const res = await request( - 'POST', - `https://music.163.com/weapi/nos/token/alloc`, - data, - { crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }, - ); - // 上传图片 - const res2 = await axios({ - method: 'post', - url: `https://nosup-hz1.127.net/yyimgs/${res.body.result.objectKey}?offset=0&complete=true&version=1.0`, - headers: { - 'x-nos-token': res.body.result.token, - 'Content-Type': 'image/jpeg', - }, - data: query.imgFile.data, - }); - // 获取裁剪后图片的id - const imgSize = query.imgSize || 300; - const imgX = query.imgX || 0; - const imgY = query.imgY || 0; - const res3 = await request( - 'POST', - `https://music.163.com/upload/img/op?id=${res.body.result.docId}&op=${imgX}y${imgY}y${imgSize}y${imgSize}`, - {}, - { crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }, - ); - - return { - // ...res.body.result, - // ...res2.data, - // ...res3.body, - url_pre: 'https://p1.music.126.net/' + res.body.result.objectKey, - url: res3.body.url, - imgId: res3.body.id, - }; -}; diff --git a/netease_api/public/avatar_update.html b/netease_api/public/avatar_update.html deleted file mode 100644 index 41dd8e9..0000000 --- a/netease_api/public/avatar_update.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - 更新头像 - - - - - - - - - diff --git a/netease_api/public/index.html b/netease_api/public/index.html deleted file mode 100644 index 21c33b6..0000000 --- a/netease_api/public/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - 网易云音乐 API - - - -

网易云音乐 API

- 当你看到这个页面时,这个服务已经成功跑起来了~ -
查看文档 -

例子:

- - - - diff --git a/netease_api/public/playlist_cover_update.html b/netease_api/public/playlist_cover_update.html deleted file mode 100644 index d09be2c..0000000 --- a/netease_api/public/playlist_cover_update.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - 歌单封面上传 - - - - - - - - - diff --git a/netease_api/public/test.html b/netease_api/public/test.html deleted file mode 100644 index 64da33f..0000000 --- a/netease_api/public/test.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - test - - - -

请在控制台看结果

- - - - - diff --git a/netease_api/renovate.json b/netease_api/renovate.json deleted file mode 100644 index 4f39080..0000000 --- a/netease_api/renovate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["config:base"] -} diff --git a/netease_api/routes/index.js b/netease_api/routes/index.js deleted file mode 100644 index 4014cd0..0000000 --- a/netease_api/routes/index.js +++ /dev/null @@ -1,8811 +0,0 @@ -const { cookieToJson } = require('../util/index'); -const crypto = require('crypto'); -const request = require('../util/request'); -module.exports = { - '/yunbei/today': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_today = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/point/today/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_today(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/tasks/todo': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_tasks_todo = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/usertool/task/todo/query`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_tasks_todo(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/tasks': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_tasks = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/usertool/task/list/all`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_tasks(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/task/finish': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_task_finish = (query, request) => { - const data = { - userTaskId: query.userTaskId, - depositCode: query.depositCode || '0', - }; - return request( - 'POST', - `https://music.163.com/api/usertool/task/point/receive`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_task_finish(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/sign': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_sign = (query, request) => { - const data = { type: '0' }; - return request( - 'POST', - `https://music.163.com/api/point/dailyTask`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_sign(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/receipt': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_receipt = (query, request) => { - const data = { limit: query.limit || 10, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/store/api/point/receipt`, - data, - { - crypto: 'api', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_receipt(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/info': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_info = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/v1/user/info`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - yunbei_info(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/expense': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_expense = (query, request) => { - const data = { limit: query.limit || 10, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/store/api/point/expense`, - data, - { - crypto: 'api', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_expense(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/point/signed/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/weblog': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const weblog = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/feedback/weblog`, - query.data || {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - weblog(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/url': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_url = (query, request) => { - const data = { - ids: '["' + query.id + '"]', - resolution: query.res || 1080, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/playurl`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_url(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/timeline/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_timeline_recommend = (query, request) => { - const data = { - offset: query.offset || 0, - filterLives: '[]', - withProgramInfo: 'true', - needUrl: '1', - resolution: '480', - }; - return request( - 'POST', - `https://music.163.com/api/videotimeline/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_timeline_recommend(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/timeline/all': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_timeline_all = (query, request) => { - const data = { - groupId: 0, - offset: query.offset || 0, - need_preview_url: 'true', - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/videotimeline/otherclient/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_timeline_all(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/video/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_sub(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/group/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_group_list = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/cloudvideo/group/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_group_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/group': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_group = (query, request) => { - const data = { - groupId: query.id, - offset: query.offset || 0, - need_preview_url: 'true', - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/videotimeline/videogroup/otherclient/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_group(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/detail/info': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_detail_info = (query, request) => { - const data = { threadid: `R_VI_62_${query.vid}`, composeliked: true }; - return request( - 'POST', - `https://music.163.com/api/comment/commentthread/info`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_detail_info(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_detail = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/v1/video/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/category/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_category_list = (query, request) => { - const data = { - offset: query.offset || 0, - total: 'true', - limit: query.limit || 99, - }; - return request( - 'POST', - `https://music.163.com/api/cloudvideo/category/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_category_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_update = (query, request) => { - const data = { - avatarImgId: '0', - birthday: query.birthday, - city: query.city, - gender: query.gender, - nickname: query.nickname, - province: query.province, - signature: query.signature, - }; - return request( - 'POST', - `https://music.163.com/weapi/user/profile/update`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/subcount': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_subcount = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/subcount`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_subcount(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/replacephone': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_replacephone = (query, request) => { - const data = { - phone: query.phone, - captcha: query.captcha, - oldcaptcha: query.oldcaptcha, - countrycode: query.countrycode || '86', - }; - return request( - 'POST', - `https://music.163.com/api/user/replaceCellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_replacephone(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/record': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_record = (query, request) => { - const data = { uid: query.uid, type: query.type || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/v1/play/record`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_record(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_playlist = (query, request) => { - const data = { - uid: query.uid, - limit: query.limit || 30, - offset: query.offset || 0, - includeVideo: true, - }; - return request('POST', `https://music.163.com/api/user/playlist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_playlist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/level': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_level = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/weapi/user/level`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_level(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/follows': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_follows = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - order: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/user/getfollows/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_follows(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/followeds': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_followeds = (query, request) => { - const data = { - userId: query.uid, - time: query.lasttime || -1, - limit: query.limit || 30, - }; - return request( - 'POST', - `https://music.163.com/eapi/user/getfolloweds/${query.uid}`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/user/getfolloweds', - realIP: query.realIP, - }, - ); - }; - user_followeds(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/event': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_event = (query, request) => { - const data = { - getcounts: true, - time: query.lasttime || -1, - limit: query.limit || 30, - total: false, - }; - return request( - 'POST', - `https://music.163.com/weapi/event/get/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_event(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/dj': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_dj = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/dj/program/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_dj(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_detail = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/user/detail/${query.uid}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/cloud/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_cloud_detail = (query, request) => { - const id = query.id.replace(/\s/g, '').split(','); - const data = { songIds: id }; - return request( - 'POST', - `https://music.163.com/weapi/v1/cloud/get/byids`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_cloud_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/cloud/del': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_cloud_del = (query, request) => { - const data = { songIds: [query.id] }; - return request('POST', `https://music.163.com/weapi/cloud/del`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_cloud_del(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/cloud': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_cloud = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request('POST', `https://music.163.com/weapi/v1/cloud/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_cloud(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/binding': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_binding = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/v1/user/bindings/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_binding(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/audio': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_audio = (query, request) => { - const data = { userId: query.uid }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/get/byuser`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_audio(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/account': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_account = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/nuser/account/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_account(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/toplist/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const toplist_detail = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/toplist/detail`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - toplist_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/toplist/artist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const toplist_artist = (query, request) => { - const data = { - type: query.type || 1, - limit: 100, - offset: 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/toplist/artist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - toplist_artist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/toplist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const toplist = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/toplist`, - {}, - { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - toplist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/song': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_song = (query, request) => { - const data = { areaId: query.type || 0, total: true }; - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/new/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_song(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/playlist/highquality': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_playlist_highquality = (query, request) => { - const data = { - cat: query.cat || '全部', - limit: query.limit || 50, - lasttime: query.before || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/playlist/highquality/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_playlist_highquality(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_playlist = (query, request) => { - const data = { - cat: query.cat || '全部', - order: query.order || 'hot', - limit: query.limit || 50, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_playlist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_mv = (query, request) => { - const data = { - area: query.area || '', - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/mv/toplist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - top_mv(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_list = (query, request) => { - query.cookie.os = 'pc'; - if (query.idx) { - return Promise.resolve({ - status: 500, - body: { code: 500, msg: '不支持此方式调用,只支持id调用' }, - }); - } - const data = { id: query.id, n: '500', s: '0' }; - return request( - 'POST', - `https://interface3.music.163.com/api/playlist/v4/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/artists': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_artists = (query, request) => { - const data = { - limit: query.limit || 50, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/artist/top`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - top_artists(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_album = (query, request) => { - const date = new Date(); - const data = { - area: query.area || 'ALL', - limit: query.limit || 50, - offset: query.offset || 0, - type: query.type || 'new', - year: query.year || date.getFullYear(), - month: query.month || date.getMonth() + 1, - total: false, - rcmd: true, - }; - return request( - 'POST', - `https://music.163.com/api/discovery/new/albums/area`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_album(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/song/url': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const song_url = (query, request) => { - if (!('MUSIC_U' in query.cookie)) - query.cookie._ntes_nuid = crypto.randomBytes(16).toString('hex'); - query.cookie.os = 'pc'; - const data = { - ids: '[' + query.id + ']', - br: parseInt(query.br || 999000), - }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/song/enhance/player/url`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/song/enhance/player/url', - }, - ); - }; - song_url(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/song/order/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const song_order_update = (query, request) => { - const data = { pid: query.pid, trackIds: query.ids, op: 'update' }; - return request( - 'POST', - `http://interface.music.163.com/api/playlist/manipulate/tracks`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/desc/update', - realIP: query.realIP, - }, - ); - }; - song_order_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/song/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const song_detail = (query, request) => { - query.ids = query.ids.split(/\s*,\s*/); - const data = { - c: '[' + query.ids.map((id) => '{"id":' + id + '}').join(',') + ']', - ids: '[' + query.ids.join(',') + ']', - }; - return request( - 'POST', - `https://music.163.com/weapi/v3/song/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - song_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/user': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_user = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiUser`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_user(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/song': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_song = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/simiSong`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_song(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_playlist = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiPlaylist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_playlist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_mv = (query, request) => { - const data = { mvid: query.mvid }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiMV`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_mv(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/artist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_artist = (query, request) => { - const data = { artistid: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiArtist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_artist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/share/resource': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const share_resource = (query, request) => { - const data = { - type: query.type || 'song', - msg: query.msg || '', - id: query.id || '', - }; - return request( - 'POST', - `https://music.163.com/weapi/share/friends/resource`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - share_resource(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/setting': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const setting = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/user/setting`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - setting(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/send/text': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const send_text = (query, request) => { - query.cookie.os = 'pc'; - const data = { - type: 'text', - msg: query.msg, - userIds: '[' + query.user_ids + ']', - }; - return request( - 'POST', - `https://music.163.com/weapi/msg/private/send`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - send_text(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/send/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const send_playlist = (query, request) => { - query.cookie.os = 'pc'; - const data = { - id: query.playlist, - type: 'playlist', - msg: query.msg, - userIds: '[' + query.user_ids + ']', - }; - return request( - 'POST', - `https://music.163.com/weapi/msg/private/send`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - send_playlist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/suggest': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_suggest = (query, request) => { - const data = { s: query.keywords || '' }; - let type = query.type == 'mobile' ? 'keyword' : 'web'; - return request( - 'POST', - `https://music.163.com/weapi/search/suggest/` + type, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - search_suggest(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/multimatch': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_multimatch = (query, request) => { - const data = { type: query.type || 1, s: query.keywords || '' }; - return request( - 'POST', - `https://music.163.com/weapi/search/suggest/multimatch`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - search_multimatch(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/hot/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_hot_detail = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/weapi/hotsearchlist/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - search_hot_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_hot = (query, request) => { - const data = { type: 1111 }; - return request('POST', `https://music.163.com/weapi/search/hot`, data, { - crypto: 'weapi', - ua: 'mobile', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - search_hot(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/default': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_default = (query, request) => { - return request( - 'POST', - `https://interface3.music.163.com/eapi/search/defaultkeyword/get`, - {}, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/search/defaultkeyword/get', - realIP: query.realIP, - }, - ); - }; - search_default(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search = (query, request) => { - const data = { - s: query.keywords, - type: query.type || 1, - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/weapi/search/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - search(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/scrobble': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const scrobble = (query, request) => { - const data = { - logs: JSON.stringify([ - { - action: 'play', - json: { - download: 0, - end: 'playend', - id: query.id, - sourceId: query.sourceid, - time: query.time, - type: 'song', - wifi: 0, - }, - }, - ]), - }; - return request( - 'POST', - `https://music.163.com/weapi/feedback/weblog`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - scrobble(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/resource/like': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const resource_like = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'like' : 'unlike'; - query.type = { 1: 'R_MV_5_', 4: 'A_DJ_1_', 5: 'R_VI_62_', 6: 'A_EV_2_' }[ - query.type - ]; - const data = { threadId: query.type + query.id }; - if (query.type === 'A_EV_2_') { - data.threadId = query.threadId; - } - return request( - 'POST', - `https://music.163.com/weapi/resource/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - resource_like(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/related/allvideo': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const related_allvideo = (query, request) => { - const data = { id: query.id, type: /^\\d+$/.test(query.id) ? 0 : 1 }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/v1/allvideo/rcmd`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - related_allvideo(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/register/cellphone': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const register_cellphone = (query, request) => { - query.cookie.os = 'pc'; - const data = { - captcha: query.captcha, - phone: query.phone, - password: crypto.createHash('md5').update(query.password).digest('hex'), - nickname: query.nickname, - }; - return request( - 'POST', - `https://music.163.com/api/register/cellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - register_cellphone(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/recommend/songs': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const recommend_songs = (query, request) => { - query.cookie.os = 'ios'; - const data = {}; - return request( - 'POST', - `https://music.163.com/api/v3/discovery/recommend/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - recommend_songs(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/recommend/resource': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const recommend_resource = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/recommend/resource`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - recommend_resource(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/rebind': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const rebind = (query, request) => { - const data = { - captcha: query.captcha, - phone: query.phone, - oldcaptcha: query.oldcaptcha, - ctcode: query.ctcode || '86', - }; - return request( - 'POST', - `https://music.163.com/api/user/replaceCellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - rebind(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/program/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const program_recommend = (query, request) => { - const data = { - cateId: query.type, - limit: query.limit || 10, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/program/recommend/v1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - program_recommend(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playmode/intelligence/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playmode_intelligence_list = (query, request) => { - const data = { - songId: query.id, - type: 'fromPlayOne', - playlistId: query.pid, - startMusicId: query.sid || query.id, - count: query.count || 1, - }; - return request( - 'POST', - `https://music.163.com/weapi/playmode/intelligence/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playmode_intelligence_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/video/recent': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_video_recent = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/playlist/video/recent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_video_recent(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_update = (query, request) => { - query.cookie.os = 'pc'; - query.desc = query.desc || ''; - query.tags = query.tags || ''; - const data = { - '/api/playlist/desc/update': `{\"id\":${query.id},\"desc\":\"${query.desc}\"}`, - '/api/playlist/tags/update': `{\"id\":${query.id},\"tags\":\"${query.tags}\"}`, - '/api/playlist/update/name': `{\"id\":${query.id},\"name\":\"${query.name}\"}`, - }; - return request('POST', `https://music.163.com/weapi/batch`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - playlist_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/tracks': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_tracks = async (query, request) => { - query.cookie.os = 'pc'; - const tracks = query.tracks.split(','); - const data = { - op: query.op, - pid: query.pid, - trackIds: JSON.stringify(tracks), - imme: 'true', - }; - try { - const res = await request( - 'POST', - `https://music.163.com/api/playlist/manipulate/tracks`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { status: 200, body: { ...res } }; - } catch (error) { - if (error.body.code === 512) { - return request( - 'POST', - `https://music.163.com/api/playlist/manipulate/tracks`, - { - op: query.op, - pid: query.pid, - trackIds: JSON.stringify([...tracks, ...tracks]), - imme: 'true', - }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - } - } - }; - playlist_tracks(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/track/delete': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_track_delete = async (query, request) => { - query.cookie.os = 'pc'; - query.ids = query.ids || ''; - const data = { - id: query.id, - tracks: JSON.stringify( - query.ids.split(',').map((item) => { - return { type: 3, id: item }; - }), - ), - }; - return request( - 'POST', - `https://music.163.com/api/playlist/track/delete`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_track_delete(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/track/add': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_track_add = async (query, request) => { - query.cookie.os = 'pc'; - query.ids = query.ids || ''; - const data = { - id: query.pid, - tracks: JSON.stringify( - query.ids.split(',').map((item) => { - return { type: 3, id: item }; - }), - ), - }; - console.log(data); - return request( - 'POST', - `https://music.163.com/api/playlist/track/add`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_track_add(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/tags/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_tags_update = (query, request) => { - const data = { id: query.id, tags: query.tags }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/tags/update`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/tags/update', - realIP: query.realIP, - }, - ); - }; - playlist_tags_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/subscribers': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_subscribers = (query, request) => { - const data = { - id: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/subscribers`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_subscribers(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/subscribe': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_subscribe = (query, request) => { - query.t = query.t == 1 ? 'subscribe' : 'unsubscribe'; - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_subscribe(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/order/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_order_update = (query, request) => { - query.cookie.os = 'pc'; - const data = { ids: query.ids }; - return request( - 'POST', - `https://music.163.com/api/playlist/order/update`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_order_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/name/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_name_update = (query, request) => { - const data = { id: query.id, name: query.name }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/update/name`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/update/name', - realIP: query.realIP, - }, - ); - }; - playlist_name_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/mylike': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_mylike = (query, request) => { - const data = { time: query.time || '-1', limit: query.limit || '12' }; - return request( - 'POST', - `https://music.163.com/api/mlog/playlist/mylike/bytime/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_mylike(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_hot = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/playlist/hottags`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_hot(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/highquality/tags': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_highquality_tags = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/playlist/highquality/tags`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_highquality_tags(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_detail = (query, request) => { - const data = { id: query.id, n: 100000, s: query.s || 8 }; - return request( - 'POST', - `https://music.163.com/api/v6/playlist/detail`, - data, - { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/desc/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_desc_update = (query, request) => { - const data = { id: query.id, desc: query.desc }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/desc/update`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/desc/update', - realIP: query.realIP, - }, - ); - }; - playlist_desc_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/delete': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_delete = (query, request) => { - query.cookie.os = 'pc'; - const data = { ids: '[' + query.id + ']' }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/remove`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_delete(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/create': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_create = (query, request) => { - query.cookie.os = 'pc'; - const data = { - name: query.name, - privacy: query.privacy, - type: query.type || 'NORMAL', - }; - return request( - 'POST', - `https://music.163.com/api/playlist/create`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_create(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/cover/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_cover_update = async (query, request) => { - const uploadInfo = await uploadPlugin(query, request); - const res = await request( - 'POST', - `https://music.163.com/weapi/playlist/cover/update`, - { id: query.id, coverImgId: uploadInfo.imgId }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { - status: 200, - body: { code: 200, data: { ...uploadInfo, ...res.body } }, - }; - }; - playlist_cover_update(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/catlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_catlist = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/playlist/catalogue`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_catlist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/privatecontent/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_privatecontent_list = (query, request) => { - const data = { - offset: query.offset || 0, - total: 'true', - limit: query.limit || 60, - }; - return request( - 'POST', - `https://music.163.com/api/v2/privatecontent/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_privatecontent_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/privatecontent': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_privatecontent = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/privatecontent`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_privatecontent(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/newsong': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_newsong = (query, request) => { - const data = { - type: 'recommend', - limit: query.limit || 10, - areaId: query.areaId || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/personalized/newsong`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_newsong(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_mv = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/mv`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_mv(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/djprogram': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_djprogram = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/djprogram`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_djprogram(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized = (query, request) => { - const data = { limit: query.limit || 30, total: true, n: 1000 }; - return request( - 'POST', - `https://music.163.com/weapi/personalized/playlist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personal_fm': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personal_fm = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/radio/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personal_fm(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/url': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_url = (query, request) => { - const data = { id: query.id, r: query.r || 1080 }; - return request( - 'POST', - `https://music.163.com/weapi/song/enhance/play/mv/url`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_url(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_sublist = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/allvideo/sublist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_sublist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { mvId: query.mvid, mvIds: '["' + query.mvid + '"]' }; - return request( - 'POST', - `https://music.163.com/weapi/mv/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_sub(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/first': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_first = (query, request) => { - const data = { - area: query.area || '', - limit: query.limit || 30, - total: true, - }; - return request( - 'POST', - `https://interface.music.163.com/weapi/mv/first`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_first(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/exclusive/rcmd': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_exclusive_rcmd = (query, request) => { - const data = { offset: query.offset || 0, limit: query.limit || 30 }; - return request( - 'POST', - `https://interface.music.163.com/api/mv/exclusive/rcmd`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_exclusive_rcmd(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/detail/info': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_detail_info = (query, request) => { - const data = { threadid: `R_MV_5_${query.mvid}`, composeliked: true }; - return request( - 'POST', - `https://music.163.com/api/comment/commentthread/info`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_detail_info(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_detail = (query, request) => { - const data = { id: query.mvid }; - return request('POST', `https://music.163.com/api/v1/mv/detail`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - mv_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/all': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_all = (query, request) => { - const data = { - tags: JSON.stringify({ - 地区: query.area || '全部', - 类型: query.type || '全部', - 排序: query.order || '上升最快', - }), - offset: query.offset || 0, - total: 'true', - limit: query.limit || 30, - }; - return request( - 'POST', - `https://interface.music.163.com/api/mv/all`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_all(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/private/history': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_private_history = (query, request) => { - const data = { - userId: query.uid, - limit: query.limit || 30, - time: query.before || 0, - total: 'true', - }; - return request( - 'POST', - `https://music.163.com/api/msg/private/history`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - msg_private_history(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/private': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_private = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - total: 'true', - }; - return request( - 'POST', - `https://music.163.com/api/msg/private/users`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - msg_private(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/notices': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_notices = (query, request) => { - const data = { limit: query.limit || 30, time: query.lasttime || -1 }; - return request('POST', `https://music.163.com/api/msg/notices`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - msg_notices(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/forwards': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_forwards = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - total: 'true', - }; - return request('POST', `https://music.163.com/api/forwards/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - msg_forwards(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/comments': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_comments = (query, request) => { - const data = { - beforeTime: query.before || '-1', - limit: query.limit || 30, - total: 'true', - uid: query.uid, - }; - return request( - 'POST', - `https://music.163.com/api/v1/user/comments/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - msg_comments(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/lyric': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const lyric = (query, request) => { - query.cookie.os = 'pc'; - const data = { id: query.id, lv: -1, kv: -1, tv: -1 }; - return request('POST', `https://music.163.com/api/song/lyric`, data, { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - lyric(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/logout': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const logout = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/logout`, - {}, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - logout(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login/status': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login_status = (query, request) => { - return request( - 'GET', - `https://music.163.com`, - {}, - { cookie: query.cookie, proxy: query.proxy, realIP: query.realIP }, - ).then((response) => { - try { - let profile = eval( - `(${/GUser\\s*=\\s*([^;]+);/.exec(response.body)[1]})`, - ); - let bindings = eval( - `(${/GBinds\\s*=\\s*([^;]+);/.exec(response.body)[1]})`, - ); - response.body = { code: 200, profile: profile, bindings: bindings }; - return response; - } catch (err) { - response.status = 301; - response.body = { code: 301 }; - return Promise.reject(response); - } - }); - }; - login_status(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login/refresh': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login_refresh = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/login/token/refresh`, - {}, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - login_refresh(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login/cellphone': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login_cellphone = async (query, request) => { - query.cookie.os = 'pc'; - const data = { - phone: query.phone, - countrycode: query.countrycode || '86', - password: - query.md5_password || - crypto.createHash('md5').update(query.password).digest('hex'), - rememberLogin: 'true', - }; - let result = await request( - 'POST', - `https://music.163.com/weapi/login/cellphone`, - data, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - if (result.body.code === 200) { - result = { - status: 200, - body: { ...result.body, cookie: result.cookie.join(';') }, - cookie: result.cookie, - }; - } - return result; - }; - login_cellphone(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login = async (query, request) => { - query.cookie.os = 'pc'; - const data = { - username: query.email, - password: - query.md5_password || - crypto.createHash('md5').update(query.password).digest('hex'), - rememberLogin: 'true', - }; - let result = await request( - 'POST', - `https://music.163.com/weapi/login`, - data, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - if (result.body.code === 502) { - return { - status: 200, - body: { msg: '账号或密码错误', code: 502, message: '账号或密码错误' }, - }; - } - if (result.body.code === 200) { - result = { - status: 200, - body: { ...result.body, cookie: result.cookie.join(';') }, - cookie: result.cookie, - }; - } - return result; - }; - login(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/likelist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const likelist = (query, request) => { - const data = { uid: query.uid }; - return request( - 'POST', - `https://music.163.com/weapi/song/like/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - likelist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/like': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const like = (query, request) => { - query.like = query.like == 'false' ? false : true; - const data = { trackId: query.id, like: query.like }; - return request( - 'POST', - `https://music.163.com/weapi/radio/like?alg=${ - query.alg || 'itembased' - }&trackId=${query.id}&time=${query.time || 25}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - like(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/hot/topic': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const hot_topic = (query, request) => { - const data = { limit: query.limit || 20, offset: query.offset || 0 }; - return request('POST', `https://music.163.com/weapi/act/hot`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - hot_topic(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/homepage/dragon/ball': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const homepage_dragon_ball = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/eapi/homepage/dragon/ball/static`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/homepage/dragon/ball/static', - realIP: query.realIP, - }, - ); - }; - homepage_dragon_ball(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/homepage/block/page': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const homepage_block_page = (query, request) => { - const data = { refresh: query.refresh || true }; - return request( - 'POST', - `https://music.163.com/api/homepage/block/page`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - homepage_block_page(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/history/recommend/songs/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const history_recommend_songs_detail = (query, request) => { - query.cookie.os = 'ios'; - const data = { date: query.date || '' }; - return request( - 'POST', - `https://music.163.com/api/discovery/recommend/songs/history/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - history_recommend_songs_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/history/recommend/songs': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const history_recommend_songs = (query, request) => { - query.cookie.os = 'ios'; - const data = {}; - return request( - 'POST', - `https://music.163.com/api/discovery/recommend/songs/history/recent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - history_recommend_songs(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/follow': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const follow = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'follow' : 'delfollow'; - return request( - 'POST', - `https://music.163.com/weapi/user/${query.t}/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - follow(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/fm_trash': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const fm_trash = (query, request) => { - const data = { songId: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${ - query.id - }&time=${query.time || 25}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - fm_trash(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/event/forward': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const event_forward = (query, request) => { - query.cookie.os = 'pc'; - const data = { - forwards: query.forwards, - id: query.evId, - eventUserId: query.uid, - }; - return request( - 'POST', - `https://music.163.com/weapi/event/forward`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - event_forward(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/event/del': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const event_del = (query, request) => { - const data = { id: query.evId }; - return request('POST', `https://music.163.com/eapi/event/delete`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - event_del(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/event': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const event = (query, request) => { - const data = { - pagesize: query.pagesize || 20, - lasttime: query.lasttime || -1, - }; - return request('POST', `https://music.163.com/weapi/v1/event/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - event(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/popular': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_popular = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/dj/toplist/popular`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_popular(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/pay': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_pay = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/djradio/toplist/pay`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_pay(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/newcomer': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_newcomer = (query, request) => { - const data = { limit: query.limit || 100, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/api/dj/toplist/newcomer`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_newcomer(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/hours': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_hours = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/dj/toplist/hours`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_hours(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist = (query, request) => { - const data = { - limit: query.limit || 100, - offset: query.offset || 0, - type: typeMap[query.type || 'new'] || '0', - }; - return request( - 'POST', - `https://music.163.com/api/djradio/toplist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/today/perfered': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_today_perfered = (query, request) => { - const data = { page: query.page || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/today/perfered`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_today_perfered(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/subscriber': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_subscriber = (query, request) => { - const data = { - time: query.time || '-1', - id: query.id, - limit: query.limit || '20', - total: 'true', - }; - return request( - 'POST', - `https://music.163.com/api/djradio/subscriber`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_subscriber(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_sublist = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/get/subed`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_sublist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { id: query.rid }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_sub(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/recommend/type': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_recommend_type = (query, request) => { - const data = { cateId: query.type }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/recommend`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_recommend_type(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_recommend = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/recommend/v1`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_recommend(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/radio/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_radio_hot = (query, request) => { - const data = { - cateId: query.cateId, - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/api/djradio/hot`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - dj_radio_hot(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program/toplist/hours': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program_toplist_hours = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/djprogram/toplist/hours`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program_toplist_hours(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program/toplist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program_toplist = (query, request) => { - const data = { limit: query.limit || 100, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/api/program/toplist/v1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program_toplist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program_detail = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/dj/program/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program = (query, request) => { - const data = { - radioId: query.rid, - limit: query.limit || 30, - offset: query.offset || 0, - asc: toBoolean(query.asc), - }; - return request( - 'POST', - `https://music.163.com/weapi/dj/program/byradio`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/personalize/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_personalize_recommend = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/djradio/personalize/rcmd`, - { limit: query.limit || 6 }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_personalize_recommend(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/paygift': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_paygift = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_paygift(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_hot = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/hot/v1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_hot(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_detail = (query, request) => { - const data = { id: query.rid }; - return request('POST', `https://music.163.com/api/djradio/v2/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - dj_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/catelist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_catelist = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/category/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_catelist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/category/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_category_recommend = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/category/recommend`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_category_recommend(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/category/excludehot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_category_excludehot = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/category/excludehot`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_category_excludehot(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/banner': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_banner = (query, request) => { - const data = {}; - query.cookie.os = 'pc'; - return request( - 'POST', - `https://music.163.com/weapi/djradio/banner/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_banner(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/digitalAlbum/purchased': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const digitalAlbum_purchased = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/digitalAlbum/purchased`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - digitalAlbum_purchased(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/digitalAlbum/ordering': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const digitalAlbum_ordering = (query, request) => { - const data = { - business: 'Album', - paymentMethod: query.payment, - digitalResources: JSON.stringify([ - { business: 'Album', resourceID: query.id, quantity: query.quantity }, - ]), - from: 'web', - }; - return request( - 'POST', - `https://music.163.com/api/ordering/web/digital`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - digitalAlbum_ordering(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/daily_signin': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const daily_signin = (query, request) => { - const data = { type: query.type || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/point/dailyTask`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - daily_signin(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/countries/code/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const countries_code_list = (query, request) => { - const data = {}; - return request( - 'POST', - `https://interface3.music.163.com/eapi/lbs/countries/v1`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/lbs/countries/v1', - realIP: query.realIP, - }, - ); - }; - countries_code_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/video': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_video = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_video(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_playlist = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_playlist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/new': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_new = (query, request) => { - query.cookie.os = 'pc'; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - 6: 'A_EV_2_', - }[query.type]; - const threadId = query.type + query.id; - const pageSize = query.pageSize || 20; - const pageNo = query.pageNo || 1; - const data = { - threadId: threadId, - pageNo, - showInner: query.showInner || true, - pageSize, - cursor: - +query.sortType === 3 ? query.cursor || '0' : (pageNo - 1) * pageSize, - sortType: query.sortType || 1, - }; - return request( - 'POST', - `https://music.163.com/api/v2/resource/comments`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/v2/resource/comments', - }, - ); - }; - comment_new(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_mv = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_mv(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/music': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_music = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/api/v1/resource/comments/R_SO_4_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_music(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/like': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_like = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'like' : 'unlike'; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - 6: 'A_EV_2_', - }[query.type]; - const data = { threadId: query.type + query.id, commentId: query.cid }; - if (query.type == 'A_EV_2_') { - data.threadId = query.threadId; - } - return request( - 'POST', - `https://music.163.com/weapi/v1/comment/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_like(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/hotwall/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_hotwall_list = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/comment/hotwall/list/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_hotwall_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_hot = (query, request) => { - query.cookie.os = 'pc'; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - }[query.type]; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_hot(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/floor': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_floor = (query, request) => { - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - }[query.type]; - const data = { - parentCommentId: query.parentCommentId, - threadId: query.type + query.id, - time: query.time || -1, - limit: query.limit || 20, - }; - return request( - 'POST', - `https://music.163.com/api/resource/comment/floor/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_floor(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/event': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_event = (query, request) => { - const data = { - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/${query.threadId}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_event(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/dj': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_dj = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_dj(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_album = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_album(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment = (query, request) => { - query.cookie.os = 'pc'; - query.t = { 1: 'add', 0: 'delete', 2: 'reply' }[query.t]; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - 6: 'A_EV_2_', - }[query.type]; - const data = { threadId: query.type + query.id }; - if (query.type == 'A_EV_2_') { - data.threadId = query.threadId; - } - if (query.t == 'add') data.content = query.content; - else if (query.t == 'delete') data.commentId = query.commentId; - else if (query.t == 'reply') { - data.commentId = query.commentId; - data.content = query.content; - } - return request( - 'POST', - `https://music.163.com/weapi/resource/comments/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/cloudsearch': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const cloudsearch = (query, request) => { - const data = { - s: query.keywords, - type: query.type || 1, - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudsearch/get/web`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - cloudsearch(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/check/music': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const check_music = (query, request) => { - const data = { - ids: '[' + parseInt(query.id) + ']', - br: parseInt(query.br || 999000), - }; - return request( - 'POST', - `https://music.163.com/weapi/song/enhance/player/url`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ).then((response) => { - let playable = false; - if (response.body.code == 200) { - if (response.body.data[0].code == 200) { - playable = true; - } - } - if (playable) { - response.body = { success: true, message: 'ok' }; - return response; - } else { - response.status = 404; - response.body = { success: false, message: '亲爱的,暂无版权' }; - return Promise.reject(response); - } - }); - }; - check_music(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/cellphone/existence/check': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const cellphone_existence_check = (query, request) => { - const data = { cellphone: query.phone, countrycode: query.countrycode }; - return request( - 'POST', - `https://music.163.com/eapi/cellphone/existence/check`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/cellphone/existence/check', - realIP: query.realIP, - }, - ); - }; - cellphone_existence_check(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/captcha/verify': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const captcha_verify = (query, request) => { - const data = { - ctcode: query.ctcode || '86', - cellphone: query.phone, - captcha: query.captcha, - }; - return request( - 'POST', - `https://music.163.com/weapi/sms/captcha/verify`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - captcha_verify(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/captcha/sent': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const captcha_sent = (query, request) => { - const data = { ctcode: query.ctcode || '86', cellphone: query.phone }; - return request( - 'POST', - `https://music.163.com/weapi/sms/captcha/sent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - captcha_sent(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/calendar': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const calendar = (query, request) => { - const data = { - startTime: query.startTime || Date.now(), - endTime: query.endTime || Date.now(), - }; - return request( - 'POST', - `https://music.163.com/api/mcalendar/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - calendar(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/banner': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const banner = (query, request) => { - const type = - { 0: 'pc', 1: 'android', 2: 'iphone', 3: 'ipad' }[query.type || 0] || - 'pc'; - return request( - 'POST', - `https://music.163.com/api/v2/banner/get`, - { clientType: type }, - { crypto: 'linuxapi', proxy: query.proxy, realIP: query.realIP }, - ); - }; - banner(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/avatar/upload': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const avatar_upload = async (query, request) => { - const uploadInfo = await uploadPlugin(query, request); - const res = await request( - 'POST', - `https://music.163.com/weapi/user/avatar/upload/v1`, - { imgid: uploadInfo.imgId }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { - status: 200, - body: { code: 200, data: { ...uploadInfo, ...res.body } }, - }; - }; - avatar_upload(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/audio/match': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const audio_match = (query, request) => { - query.cookie.os = 'pc'; - const data = { - algorithmCode: 'shazam_v2', - times: 1, - sessionId: 'C999431ACDC84EDBB984763654E6F8D7', - duration: 3.3066249999999995, - from: 'recognize-song', - rawdata: realData, - }; - return request( - 'POST', - `https://music.163.com/api/music/audio/match`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - audio_match(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artists': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artists = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/artist/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artists(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/top/song': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_top_song = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/artist/top/song`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_top_song(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_sublist = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/artist/sublist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_sublist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { artistId: query.id, artistIds: '[' + query.id + ']' }; - return request( - 'POST', - `https://music.163.com/weapi/artist/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_sub(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/songs': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_songs = (query, request) => { - query.cookie.os = 'pc'; - const data = { - id: query.id, - private_cloud: 'true', - work_type: 1, - order: query.order || 'hot', - offset: query.offset || 0, - limit: query.limit || 100, - }; - return request( - 'POST', - `https://music.163.com/api/v1/artist/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_songs(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_mv = (query, request) => { - const data = { - artistId: query.id, - limit: query.limit, - offset: query.offset, - total: true, - }; - return request('POST', `https://music.163.com/weapi/artist/mvs`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - artist_mv(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_list = (query, request) => { - const data = { - initial: isNaN(query.initial) - ? (query.initial || '').toUpperCase().charCodeAt() || undefined - : query.initial, - offset: query.offset || 0, - limit: query.limit || 30, - total: true, - type: query.type || '1', - area: query.area, - }; - return request('POST', `https://music.163.com/api/v1/artist/list`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - artist_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/desc': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_desc = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/artist/introduction`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_desc(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_album = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/artist/albums/${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_album(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_sublist = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/album/sublist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_sublist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/album/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_sub(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/songsaleboard': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_songsaleboard = (query, request) => { - let data = { albumType: query.albumType || 0 }; - const type = query.type || 'daily'; - if (type === 'year') { - data = { ...data, year: query.year }; - } - return request( - 'POST', - `https://music.163.com/api/feealbum/songsaleboard/${type}/type`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_songsaleboard(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/newest': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_newest = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/discovery/newAlbum`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_newest(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/new': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_new = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - area: query.area || 'ALL', - }; - return request('POST', `https://music.163.com/weapi/album/new`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - album_new(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/list/style': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_list_style = (query, request) => { - const data = { - limit: query.limit || 10, - offset: query.offset || 0, - total: true, - area: query.area || 'Z_H', - }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/appalbum/album/style`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_list_style(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_list = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - area: query.area || 'ALL', - type: query.type, - }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/albumproduct/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_list(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/detail/dynamic': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_detail_dynamic = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/album/detail/dynamic`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_detail_dynamic(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_detail = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/albumproduct/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_detail(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/album/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/activate/init/profile': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const activate_init_profile = (query, request) => { - const data = { nickname: query.nickname }; - return request( - 'POST', - `https://music.163.com/eapi/activate/initProfile`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/activate/initProfile', - }, - ); - }; - activate_init_profile(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/related/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const related_playlist = (query, request) => { - return request( - 'GET', - `https://music.163.com/playlist?id=${query.id}`, - {}, - { - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ).then((response) => { - try { - const pattern = /
[\s\S]*?[\s\S]*?]*>([^<]+?)<\/a>[\s\S]*?]*>([^<]+?)<\/a>/g; - let result, - playlists = []; - while ((result = pattern.exec(response.body)) != null) { - playlists.push({ - creator: { - userId: result[4].slice('/user/home?id='.length), - nickname: result[5], - }, - coverImgUrl: result[1].slice(0, -'?param=50y50'.length), - name: result[3], - id: result[2].slice('/playlist?id='.length), - }); - } - response.body = { code: 200, playlists: playlists }; - return response; - } catch (err) { - response.status = 500; - response.body = { code: 500, msg: err.stack }; - return Promise.reject(response); - } - }); - }; - related_playlist(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - - '/batch': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const batch = (query, request) => { - const data = { - e_r: true, - }; - Object.keys(query).forEach((i) => { - if (/^\/api\//.test(i)) { - data[i] = query[i]; - } - }); - return request('POST', `https://music.163.com/eapi/batch`, data, { - crypto: 'eapi', - proxy: query.proxy, - url: '/api/batch', - cookie: query.cookie, - realIP: query.realIP, - }); - }; - batch(query, request) - .then((answer) => { - console.log('[OK]', decodeURIComponent(req.originalUrl)); - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - .catch((answer) => { - console.log('[ERR]', decodeURIComponent(req.originalUrl), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, -}; diff --git a/netease_api/tsconfig.json b/netease_api/tsconfig.json deleted file mode 100644 index 248536d..0000000 --- a/netease_api/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2015", - "module": "commonjs", - "experimentalDecorators": true, - "moduleResolution": "node", - "lib": ["esnext", "esnext.asynciterable", "dom"], - "esModuleInterop": true, - "allowJs": true, - "sourceMap": true, - "strict": true, - "noEmit": true, - "baseUrl": ".", - "paths": { - "~/*": ["./*"], - "@/*": ["./*"] - } - }, - "exclude": ["node_modules"] -} diff --git a/netease_api/util/apicache.js b/netease_api/util/apicache.js deleted file mode 100644 index 1b267ed..0000000 --- a/netease_api/util/apicache.js +++ /dev/null @@ -1,830 +0,0 @@ -var url = require('url'); -var MemoryCache = require('./memory-cache'); - -var t = { - ms: 1, - second: 1000, - minute: 60000, - hour: 3600000, - day: 3600000 * 24, - week: 3600000 * 24 * 7, - month: 3600000 * 24 * 30, -}; - -var instances = []; - -var matches = function (a) { - return function (b) { - return a === b; - }; -}; - -var doesntMatch = function (a) { - return function (b) { - return !matches(a)(b); - }; -}; - -var logDuration = function (d, prefix) { - var str = d > 1000 ? (d / 1000).toFixed(2) + 'sec' : d + 'ms'; - return '\x1b[33m- ' + (prefix ? prefix + ' ' : '') + str + '\x1b[0m'; -}; - -function getSafeHeaders(res) { - return res.getHeaders ? res.getHeaders() : res._headers; -} - -function ApiCache() { - var memCache = new MemoryCache(); - - var globalOptions = { - debug: false, - defaultDuration: 3600000, - enabled: true, - appendKey: [], - jsonp: false, - redisClient: false, - headerBlacklist: [], - statusCodes: { - include: [], - exclude: [], - }, - events: { - expire: undefined, - }, - headers: { - // 'cache-control': 'no-cache' // example of header overwrite - }, - trackPerformance: false, - }; - - var middlewareOptions = []; - var instance = this; - var index = null; - var timers = {}; - var performanceArray = []; // for tracking cache hit rate - - instances.push(this); - this.id = instances.length; - - function debug(a, b, c, d) { - var arr = ['\x1b[36m[apicache]\x1b[0m', a, b, c, d].filter(function (arg) { - return arg !== undefined; - }); - var debugEnv = - process.env.DEBUG && - process.env.DEBUG.split(',').indexOf('apicache') !== -1; - - return (globalOptions.debug || debugEnv) && console.log.apply(null, arr); - } - - function shouldCacheResponse(request, response, toggle) { - var opt = globalOptions; - var codes = opt.statusCodes; - - if (!response) return false; - - if (toggle && !toggle(request, response)) { - return false; - } - - if ( - codes.exclude && - codes.exclude.length && - codes.exclude.indexOf(response.statusCode) !== -1 - ) - return false; - if ( - codes.include && - codes.include.length && - codes.include.indexOf(response.statusCode) === -1 - ) - return false; - - return true; - } - - function addIndexEntries(key, req) { - var groupName = req.apicacheGroup; - - if (groupName) { - debug('group detected "' + groupName + '"'); - var group = (index.groups[groupName] = index.groups[groupName] || []); - group.unshift(key); - } - - index.all.unshift(key); - } - - function filterBlacklistedHeaders(headers) { - return Object.keys(headers) - .filter(function (key) { - return globalOptions.headerBlacklist.indexOf(key) === -1; - }) - .reduce(function (acc, header) { - acc[header] = headers[header]; - return acc; - }, {}); - } - - function createCacheObject(status, headers, data, encoding) { - return { - status: status, - headers: filterBlacklistedHeaders(headers), - data: data, - encoding: encoding, - timestamp: new Date().getTime() / 1000, // seconds since epoch. This is used to properly decrement max-age headers in cached responses. - }; - } - - function cacheResponse(key, value, duration) { - var redis = globalOptions.redisClient; - var expireCallback = globalOptions.events.expire; - - if (redis && redis.connected) { - try { - redis.hset(key, 'response', JSON.stringify(value)); - redis.hset(key, 'duration', duration); - redis.expire(key, duration / 1000, expireCallback || function () {}); - } catch (err) { - debug('[apicache] error in redis.hset()'); - } - } else { - memCache.add(key, value, duration, expireCallback); - } - - // add automatic cache clearing from duration, includes max limit on setTimeout - timers[key] = setTimeout(function () { - instance.clear(key, true); - }, Math.min(duration, 2147483647)); - } - - function accumulateContent(res, content) { - if (content) { - if (typeof content == 'string') { - res._apicache.content = (res._apicache.content || '') + content; - } else if (Buffer.isBuffer(content)) { - var oldContent = res._apicache.content; - - if (typeof oldContent === 'string') { - oldContent = !Buffer.from - ? new Buffer(oldContent) - : Buffer.from(oldContent); - } - - if (!oldContent) { - oldContent = !Buffer.alloc ? new Buffer(0) : Buffer.alloc(0); - } - - res._apicache.content = Buffer.concat( - [oldContent, content], - oldContent.length + content.length, - ); - } else { - res._apicache.content = content; - } - } - } - - function makeResponseCacheable( - req, - res, - next, - key, - duration, - strDuration, - toggle, - ) { - // monkeypatch res.end to create cache object - res._apicache = { - write: res.write, - writeHead: res.writeHead, - end: res.end, - cacheable: true, - content: undefined, - }; - - // append header overwrites if applicable - Object.keys(globalOptions.headers).forEach(function (name) { - res.setHeader(name, globalOptions.headers[name]); - }); - - res.writeHead = function () { - // add cache control headers - if (!globalOptions.headers['cache-control']) { - if (shouldCacheResponse(req, res, toggle)) { - res.setHeader( - 'cache-control', - 'max-age=' + (duration / 1000).toFixed(0), - ); - } else { - res.setHeader('cache-control', 'no-cache, no-store, must-revalidate'); - } - } - - res._apicache.headers = Object.assign({}, getSafeHeaders(res)); - return res._apicache.writeHead.apply(this, arguments); - }; - - // patch res.write - res.write = function (content) { - accumulateContent(res, content); - return res._apicache.write.apply(this, arguments); - }; - - // patch res.end - res.end = function (content, encoding) { - if (shouldCacheResponse(req, res, toggle)) { - accumulateContent(res, content); - - if (res._apicache.cacheable && res._apicache.content) { - addIndexEntries(key, req); - var headers = res._apicache.headers || getSafeHeaders(res); - var cacheObject = createCacheObject( - res.statusCode, - headers, - res._apicache.content, - encoding, - ); - cacheResponse(key, cacheObject, duration); - - // display log entry - var elapsed = new Date() - req.apicacheTimer; - debug( - 'adding cache entry for "' + key + '" @ ' + strDuration, - logDuration(elapsed), - ); - debug('_apicache.headers: ', res._apicache.headers); - debug('res.getHeaders(): ', getSafeHeaders(res)); - debug('cacheObject: ', cacheObject); - } - } - - return res._apicache.end.apply(this, arguments); - }; - - next(); - } - - function sendCachedResponse( - request, - response, - cacheObject, - toggle, - next, - duration, - ) { - if (toggle && !toggle(request, response)) { - return next(); - } - - var headers = getSafeHeaders(response); - - Object.assign( - headers, - filterBlacklistedHeaders(cacheObject.headers || {}), - { - // set properly-decremented max-age header. This ensures that max-age is in sync with the cache expiration. - 'cache-control': - 'max-age=' + - Math.max( - 0, - ( - duration / 1000 - - (new Date().getTime() / 1000 - cacheObject.timestamp) - ).toFixed(0), - ), - }, - ); - - // only embed apicache headers when not in production environment - - // unstringify buffers - var data = cacheObject.data; - if (data && data.type === 'Buffer') { - data = - typeof data.data === 'number' - ? new Buffer.alloc(data.data) - : new Buffer.from(data.data); - } - - // test Etag against If-None-Match for 304 - var cachedEtag = cacheObject.headers.etag; - var requestEtag = request.headers['if-none-match']; - - if (requestEtag && cachedEtag === requestEtag) { - response.writeHead(304, headers); - return response.end(); - } - - response.writeHead(cacheObject.status || 200, headers); - - return response.end(data, cacheObject.encoding); - } - - function syncOptions() { - for (var i in middlewareOptions) { - Object.assign( - middlewareOptions[i].options, - globalOptions, - middlewareOptions[i].localOptions, - ); - } - } - - this.clear = function (target, isAutomatic) { - var group = index.groups[target]; - var redis = globalOptions.redisClient; - - if (group) { - debug('clearing group "' + target + '"'); - - group.forEach(function (key) { - debug('clearing cached entry for "' + key + '"'); - clearTimeout(timers[key]); - delete timers[key]; - if (!globalOptions.redisClient) { - memCache.delete(key); - } else { - try { - redis.del(key); - } catch (err) { - console.log('[apicache] error in redis.del("' + key + '")'); - } - } - index.all = index.all.filter(doesntMatch(key)); - }); - - delete index.groups[target]; - } else if (target) { - debug( - 'clearing ' + - (isAutomatic ? 'expired' : 'cached') + - ' entry for "' + - target + - '"', - ); - clearTimeout(timers[target]); - delete timers[target]; - // clear actual cached entry - if (!redis) { - memCache.delete(target); - } else { - try { - redis.del(target); - } catch (err) { - console.log('[apicache] error in redis.del("' + target + '")'); - } - } - - // remove from global index - index.all = index.all.filter(doesntMatch(target)); - - // remove target from each group that it may exist in - Object.keys(index.groups).forEach(function (groupName) { - index.groups[groupName] = index.groups[groupName].filter( - doesntMatch(target), - ); - - // delete group if now empty - if (!index.groups[groupName].length) { - delete index.groups[groupName]; - } - }); - } else { - debug('clearing entire index'); - - if (!redis) { - memCache.clear(); - } else { - // clear redis keys one by one from internal index to prevent clearing non-apicache entries - index.all.forEach(function (key) { - clearTimeout(timers[key]); - delete timers[key]; - try { - redis.del(key); - } catch (err) { - console.log('[apicache] error in redis.del("' + key + '")'); - } - }); - } - this.resetIndex(); - } - - return this.getIndex(); - }; - - function parseDuration(duration, defaultDuration) { - if (typeof duration === 'number') return duration; - - if (typeof duration === 'string') { - var split = duration.match(/^([\d\.,]+)\s?(\w+)$/); - - if (split.length === 3) { - var len = parseFloat(split[1]); - var unit = split[2].replace(/s$/i, '').toLowerCase(); - if (unit === 'm') { - unit = 'ms'; - } - - return (len || 1) * (t[unit] || 0); - } - } - - return defaultDuration; - } - - this.getDuration = function (duration) { - return parseDuration(duration, globalOptions.defaultDuration); - }; - - /** - * Return cache performance statistics (hit rate). Suitable for putting into a route: - * - * app.get('/api/cache/performance', (req, res) => { - * res.json(apicache.getPerformance()) - * }) - * - */ - this.getPerformance = function () { - return performanceArray.map(function (p) { - return p.report(); - }); - }; - - this.getIndex = function (group) { - if (group) { - return index.groups[group]; - } else { - return index; - } - }; - - this.middleware = function cache( - strDuration, - middlewareToggle, - localOptions, - ) { - var duration = instance.getDuration(strDuration); - var opt = {}; - - middlewareOptions.push({ - options: opt, - }); - - var options = function (localOptions) { - if (localOptions) { - middlewareOptions.find(function (middleware) { - return middleware.options === opt; - }).localOptions = localOptions; - } - - syncOptions(); - - return opt; - }; - - options(localOptions); - - /** - * A Function for non tracking performance - */ - function NOOPCachePerformance() { - this.report = this.hit = this.miss = function () {}; // noop; - } - - /** - * A function for tracking and reporting hit rate. These statistics are returned by the getPerformance() call above. - */ - function CachePerformance() { - /** - * Tracks the hit rate for the last 100 requests. - * If there have been fewer than 100 requests, the hit rate just considers the requests that have happened. - */ - this.hitsLast100 = new Uint8Array(100 / 4); // each hit is 2 bits - - /** - * Tracks the hit rate for the last 1000 requests. - * If there have been fewer than 1000 requests, the hit rate just considers the requests that have happened. - */ - this.hitsLast1000 = new Uint8Array(1000 / 4); // each hit is 2 bits - - /** - * Tracks the hit rate for the last 10000 requests. - * If there have been fewer than 10000 requests, the hit rate just considers the requests that have happened. - */ - this.hitsLast10000 = new Uint8Array(10000 / 4); // each hit is 2 bits - - /** - * Tracks the hit rate for the last 100000 requests. - * If there have been fewer than 100000 requests, the hit rate just considers the requests that have happened. - */ - this.hitsLast100000 = new Uint8Array(100000 / 4); // each hit is 2 bits - - /** - * The number of calls that have passed through the middleware since the server started. - */ - this.callCount = 0; - - /** - * The total number of hits since the server started - */ - this.hitCount = 0; - - /** - * The key from the last cache hit. This is useful in identifying which route these statistics apply to. - */ - this.lastCacheHit = null; - - /** - * The key from the last cache miss. This is useful in identifying which route these statistics apply to. - */ - this.lastCacheMiss = null; - - /** - * Return performance statistics - */ - this.report = function () { - return { - lastCacheHit: this.lastCacheHit, - lastCacheMiss: this.lastCacheMiss, - callCount: this.callCount, - hitCount: this.hitCount, - missCount: this.callCount - this.hitCount, - hitRate: this.callCount == 0 ? null : this.hitCount / this.callCount, - hitRateLast100: this.hitRate(this.hitsLast100), - hitRateLast1000: this.hitRate(this.hitsLast1000), - hitRateLast10000: this.hitRate(this.hitsLast10000), - hitRateLast100000: this.hitRate(this.hitsLast100000), - }; - }; - - /** - * Computes a cache hit rate from an array of hits and misses. - * @param {Uint8Array} array An array representing hits and misses. - * @returns a number between 0 and 1, or null if the array has no hits or misses - */ - this.hitRate = function (array) { - var hits = 0; - var misses = 0; - for (var i = 0; i < array.length; i++) { - var n8 = array[i]; - for (j = 0; j < 4; j++) { - switch (n8 & 3) { - case 1: - hits++; - break; - case 2: - misses++; - break; - } - n8 >>= 2; - } - } - var total = hits + misses; - if (total == 0) return null; - return hits / total; - }; - - /** - * Record a hit or miss in the given array. It will be recorded at a position determined - * by the current value of the callCount variable. - * @param {Uint8Array} array An array representing hits and misses. - * @param {boolean} hit true for a hit, false for a miss - * Each element in the array is 8 bits, and encodes 4 hit/miss records. - * Each hit or miss is encoded as to bits as follows: - * 00 means no hit or miss has been recorded in these bits - * 01 encodes a hit - * 10 encodes a miss - */ - this.recordHitInArray = function (array, hit) { - var arrayIndex = ~~(this.callCount / 4) % array.length; - var bitOffset = (this.callCount % 4) * 2; // 2 bits per record, 4 records per uint8 array element - var clearMask = ~(3 << bitOffset); - var record = (hit ? 1 : 2) << bitOffset; - array[arrayIndex] = (array[arrayIndex] & clearMask) | record; - }; - - /** - * Records the hit or miss in the tracking arrays and increments the call count. - * @param {boolean} hit true records a hit, false records a miss - */ - this.recordHit = function (hit) { - this.recordHitInArray(this.hitsLast100, hit); - this.recordHitInArray(this.hitsLast1000, hit); - this.recordHitInArray(this.hitsLast10000, hit); - this.recordHitInArray(this.hitsLast100000, hit); - if (hit) this.hitCount++; - this.callCount++; - }; - - /** - * Records a hit event, setting lastCacheMiss to the given key - * @param {string} key The key that had the cache hit - */ - this.hit = function (key) { - this.recordHit(true); - this.lastCacheHit = key; - }; - - /** - * Records a miss event, setting lastCacheMiss to the given key - * @param {string} key The key that had the cache miss - */ - this.miss = function (key) { - this.recordHit(false); - this.lastCacheMiss = key; - }; - } - - var perf = globalOptions.trackPerformance - ? new CachePerformance() - : new NOOPCachePerformance(); - - performanceArray.push(perf); - - var cache = function (req, res, next) { - function bypass() { - debug('bypass detected, skipping cache.'); - return next(); - } - - // initial bypass chances - if (!opt.enabled) return bypass(); - if ( - req.headers['x-apicache-bypass'] || - req.headers['x-apicache-force-fetch'] - ) - return bypass(); - - // REMOVED IN 0.11.1 TO CORRECT MIDDLEWARE TOGGLE EXECUTE ORDER - // if (typeof middlewareToggle === 'function') { - // if (!middlewareToggle(req, res)) return bypass() - // } else if (middlewareToggle !== undefined && !middlewareToggle) { - // return bypass() - // } - - // embed timer - req.apicacheTimer = new Date(); - - // In Express 4.x the url is ambigious based on where a router is mounted. originalUrl will give the full Url - var key = req.originalUrl || req.url; - - // Remove querystring from key if jsonp option is enabled - if (opt.jsonp) { - key = url.parse(key).pathname; - } - - // add appendKey (either custom function or response path) - if (typeof opt.appendKey === 'function') { - key += '$$appendKey=' + opt.appendKey(req, res); - } else if (opt.appendKey.length > 0) { - var appendKey = req; - - for (var i = 0; i < opt.appendKey.length; i++) { - appendKey = appendKey[opt.appendKey[i]]; - } - key += '$$appendKey=' + appendKey; - } - - // attempt cache hit - var redis = opt.redisClient; - var cached = !redis ? memCache.getValue(key) : null; - - // send if cache hit from memory-cache - if (cached) { - var elapsed = new Date() - req.apicacheTimer; - debug( - 'sending cached (memory-cache) version of', - key, - logDuration(elapsed), - ); - - perf.hit(key); - return sendCachedResponse( - req, - res, - cached, - middlewareToggle, - next, - duration, - ); - } - - // send if cache hit from redis - if (redis && redis.connected) { - try { - redis.hgetall(key, function (err, obj) { - if (!err && obj && obj.response) { - var elapsed = new Date() - req.apicacheTimer; - debug( - 'sending cached (redis) version of', - key, - logDuration(elapsed), - ); - - perf.hit(key); - return sendCachedResponse( - req, - res, - JSON.parse(obj.response), - middlewareToggle, - next, - duration, - ); - } else { - perf.miss(key); - return makeResponseCacheable( - req, - res, - next, - key, - duration, - strDuration, - middlewareToggle, - ); - } - }); - } catch (err) { - // bypass redis on error - perf.miss(key); - return makeResponseCacheable( - req, - res, - next, - key, - duration, - strDuration, - middlewareToggle, - ); - } - } else { - perf.miss(key); - return makeResponseCacheable( - req, - res, - next, - key, - duration, - strDuration, - middlewareToggle, - ); - } - }; - - cache.options = options; - - return cache; - }; - - this.options = function (options) { - if (options) { - Object.assign(globalOptions, options); - syncOptions(); - - if ('defaultDuration' in options) { - // Convert the default duration to a number in milliseconds (if needed) - globalOptions.defaultDuration = parseDuration( - globalOptions.defaultDuration, - 3600000, - ); - } - - if (globalOptions.trackPerformance) { - debug( - 'WARNING: using trackPerformance flag can cause high memory usage!', - ); - } - - return this; - } else { - return globalOptions; - } - }; - - this.resetIndex = function () { - index = { - all: [], - groups: {}, - }; - }; - - this.newInstance = function (config) { - var instance = new ApiCache(); - - if (config) { - instance.options(config); - } - - return instance; - }; - - this.clone = function () { - return this.newInstance(this.options()); - }; - - // initialize index - this.resetIndex(); -} - -module.exports = new ApiCache(); diff --git a/netease_api/util/crypto.js b/netease_api/util/crypto.js deleted file mode 100644 index de80e15..0000000 --- a/netease_api/util/crypto.js +++ /dev/null @@ -1,67 +0,0 @@ -const crypto = require('crypto'); -const iv = Buffer.from('0102030405060708'); -const presetKey = Buffer.from('0CoJUm6Qyw8W8jud'); -const linuxapiKey = Buffer.from('rFgB&h#%2?^eDg:Q'); -const base62 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; -const publicKey = - '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgtQn2JZ34ZC28NWYpAUd98iZ37BUrX/aKzmFbt7clFSs6sXqHauqKWqdtLkF2KexO40H1YTX8z2lSgBBOAxLsvaklV8k4cBFK9snQXE9/DDaFt6Rr7iVZMldczhC0JNgTz+SHXT6CBHuX3e9SdB1Ua44oncaTWz7OBGLbCiK45wIDAQAB\n-----END PUBLIC KEY-----'; -const eapiKey = 'e82ckenh8dichen8'; - -const aesEncrypt = (buffer, mode, key, iv) => { - const cipher = crypto.createCipheriv('aes-128-' + mode, key, iv); - return Buffer.concat([cipher.update(buffer), cipher.final()]); -}; - -const rsaEncrypt = (buffer, key) => { - buffer = Buffer.concat([Buffer.alloc(128 - buffer.length), buffer]); - return crypto.publicEncrypt( - { key: key, padding: crypto.constants.RSA_NO_PADDING }, - buffer, - ); -}; - -const weapi = (object) => { - const text = JSON.stringify(object); - const secretKey = crypto - .randomBytes(16) - .map((n) => base62.charAt(n % 62).charCodeAt()); - return { - params: aesEncrypt( - Buffer.from( - aesEncrypt(Buffer.from(text), 'cbc', presetKey, iv).toString('base64'), - ), - 'cbc', - secretKey, - iv, - ).toString('base64'), - encSecKey: rsaEncrypt(secretKey.reverse(), publicKey).toString('hex'), - }; -}; - -const linuxapi = (object) => { - const text = JSON.stringify(object); - return { - eparams: aesEncrypt(Buffer.from(text), 'ecb', linuxapiKey, '') - .toString('hex') - .toUpperCase(), - }; -}; - -const eapi = (url, object) => { - const text = typeof object === 'object' ? JSON.stringify(object) : object; - const message = `nobody${url}use${text}md5forencrypt`; - const digest = crypto.createHash('md5').update(message).digest('hex'); - const data = `${url}-36cd479b6b5-${text}-36cd479b6b5-${digest}`; - return { - params: aesEncrypt(Buffer.from(data), 'ecb', eapiKey, '') - .toString('hex') - .toUpperCase(), - }; -}; - -const decrypt = (cipherBuffer) => { - const decipher = crypto.createDecipheriv('aes-128-ecb', eapiKey, ''); - return Buffer.concat([decipher.update(cipherBuffer), decipher.final()]); -}; - -module.exports = { weapi, linuxapi, eapi, decrypt }; diff --git a/netease_api/util/index.js b/netease_api/util/index.js deleted file mode 100644 index 6241c2c..0000000 --- a/netease_api/util/index.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - toBoolean(val) { - if (typeof val === 'boolean') return val; - if (val === '') return val; - return val === 'true' || val == '1'; - }, - cookieToJson(cookie) { - if (!cookie) return {}; - let cookieArr = cookie.split(';'); - let obj = {}; - cookieArr.forEach((i) => { - let arr = i.split('='); - obj[arr[0]] = arr[1]; - }); - return obj; - }, -}; diff --git a/netease_api/util/memory-cache.js b/netease_api/util/memory-cache.js deleted file mode 100644 index 02e735a..0000000 --- a/netease_api/util/memory-cache.js +++ /dev/null @@ -1,63 +0,0 @@ -function MemoryCache() { - this.cache = {}; - this.size = 0; -} - -MemoryCache.prototype.add = function (key, value, time, timeoutCallback) { - var old = this.cache[key]; - var instance = this; - - var entry = { - value: value, - expire: time + Date.now(), - timeout: setTimeout(function () { - instance.delete(key); - return ( - timeoutCallback && - typeof timeoutCallback === 'function' && - timeoutCallback(value, key) - ); - }, time), - }; - - this.cache[key] = entry; - this.size = Object.keys(this.cache).length; - - return entry; -}; - -MemoryCache.prototype.delete = function (key) { - var entry = this.cache[key]; - - if (entry) { - clearTimeout(entry.timeout); - } - - delete this.cache[key]; - - this.size = Object.keys(this.cache).length; - - return null; -}; - -MemoryCache.prototype.get = function (key) { - var entry = this.cache[key]; - - return entry; -}; - -MemoryCache.prototype.getValue = function (key) { - var entry = this.get(key); - - return entry && entry.value; -}; - -MemoryCache.prototype.clear = function () { - Object.keys(this.cache).forEach(function (key) { - this.delete(key); - }, this); - - return true; -}; - -module.exports = MemoryCache; diff --git a/netease_api/util/request.js b/netease_api/util/request.js deleted file mode 100644 index 84d448d..0000000 --- a/netease_api/util/request.js +++ /dev/null @@ -1,177 +0,0 @@ -const encrypt = require('./crypto'); -const axios = require('axios'); -const queryString = require('querystring'); -const PacProxyAgent = require('pac-proxy-agent'); -const http = require('http'); -const https = require('https'); -const tunnel = require('tunnel'); -const qs = require('url'); -// request.debug = true // 开启可看到更详细信息 - -const chooseUserAgent = (ua = false) => { - const userAgentList = { - mobile: [ - // iOS 13.5.1 14.0 beta with safari - 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', - 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.', - // iOS with qq micromsg - 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML like Gecko) Mobile/14A456 QQ/6.5.7.408 V1_IPH_SQ_6.5.7_1_APP_A Pixel/750 Core/UIWebView NetType/4G Mem/103', - 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.15(0x17000f27) NetType/WIFI Language/zh', - // Android -> Huawei Xiaomi - 'Mozilla/5.0 (Linux; Android 9; PCT-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.311 Mobile Safari/537.36', - 'Mozilla/5.0 (Linux; U; Android 9; zh-cn; Redmi Note 8 Build/PKQ1.190616.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.5.22', - // Android + qq micromsg - 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2581 MMWEBSDK/200801 Mobile Safari/537.36 MMWEBID/3027 MicroMessenger/7.0.18.1740(0x27001235) Process/toolsmp WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64', - 'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BKK-AL10 Build/HONORBKK-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.6 Mobile Safari/537.36', - ], - pc: [ - // macOS 10.15.6 Firefox / Chrome / Safari - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0', - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36', - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15', - // Windows 10 Firefox / Chrome / Edge - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0', - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36', - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/13.10586', - // Linux 就算了 - ], - }; - let realUserAgentList = - userAgentList[ua] || userAgentList.mobile.concat(userAgentList.pc); - return ['mobile', 'pc', false].indexOf(ua) > -1 - ? realUserAgentList[Math.floor(Math.random() * realUserAgentList.length)] - : ua; -}; -const createRequest = (method, url, data, options) => { - return new Promise((resolve, reject) => { - let headers = { 'User-Agent': chooseUserAgent(options.ua) }; - if (method.toUpperCase() === 'POST') - headers['Content-Type'] = 'application/x-www-form-urlencoded'; - if (url.includes('music.163.com')) - headers['Referer'] = 'https://music.163.com'; - if (options.realIP) headers['X-Real-IP'] = options.realIP; - // headers['X-Real-IP'] = '118.88.88.88' - if (typeof options.cookie === 'object') - headers['Cookie'] = Object.keys(options.cookie) - .map( - (key) => - encodeURIComponent(key) + - '=' + - encodeURIComponent(options.cookie[key]), - ) - .join('; '); - else if (options.cookie) headers['Cookie'] = options.cookie; - - if (!headers['Cookie']) { - headers['Cookie'] = options.token || ''; - } - if (options.crypto === 'weapi') { - let csrfToken = (headers['Cookie'] || '').match(/_csrf=([^(;|$)]+)/); - data.csrf_token = csrfToken ? csrfToken[1] : ''; - data = encrypt.weapi(data); - url = url.replace(/\w*api/, 'weapi'); - } else if (options.crypto === 'linuxapi') { - data = encrypt.linuxapi({ - method: method, - url: url.replace(/\w*api/, 'api'), - params: data, - }); - headers['User-Agent'] = - 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'; - url = 'https://music.163.com/api/linux/forward'; - } else if (options.crypto === 'eapi') { - const cookie = options.cookie || {}; - const csrfToken = cookie['__csrf'] || ''; - const header = { - osver: cookie.osver, //系统版本 - deviceId: cookie.deviceId, //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7') - appver: cookie.appver || '6.1.1', // app版本 - versioncode: cookie.versioncode || '140', //版本号 - mobilename: cookie.mobilename, //设备model - buildver: cookie.buildver || Date.now().toString().substr(0, 10), - resolution: cookie.resolution || '1920x1080', //设备分辨率 - __csrf: csrfToken, - os: cookie.os || 'android', - channel: cookie.channel, - requestId: `${Date.now()}_${Math.floor(Math.random() * 1000) - .toString() - .padStart(4, '0')}`, - }; - if (cookie.MUSIC_U) header['MUSIC_U'] = cookie.MUSIC_U; - if (cookie.MUSIC_A) header['MUSIC_A'] = cookie.MUSIC_A; - headers['Cookie'] = Object.keys(header) - .map( - (key) => - encodeURIComponent(key) + '=' + encodeURIComponent(header[key]), - ) - .join('; '); - data.header = header; - data = encrypt.eapi(options.url, data); - url = url.replace(/\w*api/, 'eapi'); - } - - const answer = { status: 500, body: {}, cookie: [] }; - const settings = { - method: method, - url: url, - headers: headers, - data: queryString.stringify(data), - httpAgent: new http.Agent({ keepAlive: true }), - httpsAgent: new https.Agent({ keepAlive: true }), - }; - - if (options.crypto === 'eapi') settings.encoding = null; - - if (options.proxy) { - if (options.proxy.indexOf('pac') > -1) { - settings.httpAgent = new PacProxyAgent(options.proxy); - settings.httpsAgent = new PacProxyAgent(options.proxy); - } else { - var purl = qs.parse(options.proxy); - if (purl.hostname) { - const agent = tunnel.httpsOverHttp({ - proxy: { - host: purl.hostname, - port: purl.port || 80, - }, - }); - settings.httpsAgent = agent; - settings.httpAgent = agent; - settings.proxy = false; - } else { - console.error('代理配置无效,不使用代理'); - } - } - } - - axios(settings) - .then((res) => { - const body = res.data; - answer.cookie = (res.headers['set-cookie'] || []).map((x) => - x.replace(/\s*Domain=[^(;|$)]+;*/, ''), - ); - try { - answer.body = body; - answer.status = answer.body.code || res.status; - if (answer.body.code === 502) { - answer.status = 200; - } - } catch (e) { - answer.body = body; - answer.status = res.status; - } - - answer.status = - 100 < answer.status && answer.status < 600 ? answer.status : 400; - if (answer.status == 200) resolve(answer); - else reject(answer); - }) - .catch((err) => { - answer.status = 502; - answer.body = { code: 502, msg: err }; - reject(answer); - }); - }); -}; - -module.exports = createRequest;