├── .gitattributes ├── JS_USER_AGENTS.js ├── README.md ├── USER_AGENTS.js ├── jdCookie.js ├── jd_25618hb.js ├── jd_25618hb_task.js ├── jd_3c_signtask.js ├── jd_CheckCK.js ├── jd_babel_sign.js ├── jd_beanTask.js ├── jd_bean_change_plus.js ├── jd_bean_info.js ├── jd_bean_sign.js ├── jd_carPromotion_sign.js ├── jd_card_force.js ├── jd_cjhy_completeInfoActivity.js ├── jd_cjhy_daily.js ├── jd_cjhy_sevenDay.js ├── jd_cjhy_signActivity.js ├── jd_cjhy_wxCollectionActivity.js ├── jd_cjhy_wxDrawActivity.js ├── jd_cjhy_wxGameActivity.js ├── jd_cjhy_wxKnowledgeActivity.js ├── jd_cjhy_wxMcLevelAndBirthGifts.js ├── jd_cjhy_wxPointShopView.js ├── jd_cjhy_wxShopFollowActivity.js ├── jd_cjhy_wxShopGift.js ├── jd_cjhydz_wxTeam.js ├── jd_cjppr.js ├── jd_cleanCartAll.js ├── jd_deps.sh ├── jd_disables.py ├── jd_dp052401.js ├── jd_dp0525.js ├── jd_dp0601.js ├── jd_dpqd.js ├── jd_dpqd_own.js ├── jd_dwapp.js ├── jd_evaluate.js ├── jd_fcwb_auto.js ├── jd_fcwb_auto2.js ├── jd_fcwb_help.js ├── jd_fcwb_help2.js ├── jd_fish_help.js ├── jd_gzsl_contact.js ├── jd_gzsl_lottery.js ├── jd_gzsl_sevenSign.js ├── jd_healthTask.js ├── jd_hyDraw.js ├── jd_jiexi.js ├── jd_jinggeng_draw.js ├── jd_jinggeng_showSign.js ├── jd_jingyun_daily.js ├── jd_jingyun_draw.js ├── jd_jingyun_partitionTeam.js ├── jd_jingyun_plusGift.js ├── jd_jingyun_sign.js ├── jd_jxttlhb.js ├── jd_jzDraw.js ├── jd_live_lottery.js ├── jd_loreal_10070_yqhyrh.js ├── jd_lzkj_10006_v1.js ├── jd_lzkj_10033_zdgf.js ├── jd_lzkj_10038_lrkj.js ├── jd_lzkj_10043_fxyl.js ├── jd_lzkj_10044_tpyl.js ├── jd_lzkj_10047_glyl.js ├── jd_lzkj_10053_gzspyl.js ├── jd_lzkj_10058_dplb.js ├── jd_lzkj_10068_yqgzdpyl.js ├── jd_lzkj_10069_gzyl.js ├── jd_lzkj_10070_v1.js ├── jd_lzkj_10070_yqhyrh.js ├── jd_lzkj_10079_jfdh.js ├── jd_lzkj_100_daily.js ├── jd_lzkj_100_draw.js ├── jd_lzkj_100_jgyl.js ├── jd_lzkj_100_sign.js ├── jd_lzkj_daily.js ├── jd_lzkj_sevenDay.js ├── jd_lzkj_signActivity2.js ├── jd_lzkj_v2_birthday.js ├── jd_lzkj_v2_cart.js ├── jd_lzkj_v2_completeInfo.js ├── jd_lzkj_v2_draw.js ├── jd_lzkj_v2_sign.js ├── jd_lzkj_v2_yqrhyl.js ├── jd_lzkj_wxCollectionActivity.js ├── jd_lzkj_wxDrawActivity.js ├── jd_lzkj_wxShopFollowActivity.js ├── jd_lzkj_wxShopGift.js ├── jd_market_draw.js ├── jd_market_exchange.js ├── jd_market_game.js ├── jd_market_signtask.js ├── jd_mini_fruit.js ├── jd_mini_fruitHelp.js ├── jd_mini_lhb.js ├── jd_mini_sign.js ├── jd_mini_tuan.js ├── jd_msDraw.js ├── jd_new_fruit_help.js ├── jd_new_fruit_lottery.js ├── jd_new_fruit_task.js ├── jd_new_fruit_watering.js ├── jd_new_red.js ├── jd_opencardDPLHTY.js ├── jd_opencard_common.js ├── jd_opencard_dp052402.js ├── jd_opencard_gw.js ├── jd_opencard_shopLeague.js ├── jd_opencard_szxyun.js ├── jd_opencard_viewshop.js ├── jd_plantBean.js ├── jd_plantBeans.js ├── jd_plus_draw.js ├── jd_plus_help.js ├── jd_prices.js ├── jd_pro_lottery.js ├── jd_pro_lottery_task.js ├── jd_prodev.js ├── jd_push_help.js ├── jd_quan_day.js ├── jd_redrain.js ├── jd_sendbeans.js ├── jd_shopGifts.js ├── jd_shop_draw.js ├── jd_shopbenefit.js ├── jd_superBrandStar.js ├── jd_tokens.js ├── jd_try.js ├── jd_ttdk.js ├── jd_txzj_cart_item.js ├── jd_txzj_collect_item.js ├── jd_txzj_lottery.js ├── jd_txzj_sign_in.js ├── jd_unCoupon.js ├── jd_unFollow.js ├── jd_unGoods.js ├── jd_v50.js ├── jd_video_task.js ├── jd_video_task1.js ├── jd_video_task2.js ├── jd_video_view.js ├── jd_video_view1.js ├── jd_video_view2.js ├── jd_wsck.py ├── jd_wyw.js ├── jd_wyw_exchange.js ├── jd_wyw_ff.js ├── jd_wyw_ttld.js ├── jd_wyw_withdraw.js ├── jd_wyw_worldCup.js ├── jd_wyw_yyy.js ├── jd_ycDraw.js ├── jd_yqzhb_draw.js ├── jd_yqzhb_help.js ├── jd_zlyhl.js ├── ql.js ├── sendNotify.js ├── sendNotify.py └── utils ├── Rebels_jdCommon.js ├── baseCookie.js ├── baseUtils.js ├── proenv ├── pro310.js ├── pro410.js ├── pro420.js ├── pro430.js ├── pro440.js ├── pro470.js ├── pro471.js ├── pro472.js ├── proecy.js ├── proenv.js └── proenvcard.js ├── ql.js ├── sharecodes.json └── smashUtils.js /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.png -text 3 | *.jpg -text -------------------------------------------------------------------------------- /JS_USER_AGENTS.js: -------------------------------------------------------------------------------- 1 | const USER_AGENTS = [ 2 | 'jdltapp;iPad;6.27.8;14.4;network/wifi;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 3 | 'jdltapp;android;6.27.8;10;2346663656561603-4353564623932316;network/wifi;model/ONEPLUS A5010;addressid/0;aid/2dfceea045ed292a;oaid/;osVer/29;appBuild/1436;psn/BS6Y9SAiw0IpJ4ro7rjSOkCRZTgR3z2K|10;psq/5;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/10.5;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/oppo;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36', 4 | 'jdltapp;iPhone;6.27.8;14.1;59d6ae6e8387bd09fe046d5b8918ead51614e80a;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,1;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/1.26;apprpd/;ref/JDLTSubMainPageViewController;psq/0;ads/;psn/59d6ae6e8387bd09fe046d5b8918ead51614e80a|3;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 5 | 'jdltapp;iPhone;6.27.8;13.5;22d679c006bf9c087abf362cf1d2e0020ebb8798;network/wifi;ADID/10857A57-DDF8-4A0D-A548-7B8F43AC77EE;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone12,1;addressid/2378947694;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/15.7;apprpd/Allowance_Registered;ref/JDLTTaskCenterViewController;psq/6;ads/;psn/22d679c006bf9c087abf362cf1d2e0020ebb8798|22;jdv/0|kong|t_1000170135|tuiguang|notset|1614153044558|1614153044;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 6 | 'jdltapp;android;6.27.8;10;2616935633265383-5333463636261326;network/UNKNOWN;model/M2007J3SC;addressid/1840745247;aid/ba9e3b5853dccb1b;oaid/371d8af7dd71e8d5;osVer/29;appBuild/1436;psn/t7JmxZUXGkimd4f9Jdul2jEeuYLwxPrm|8;psq/6;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/5.6;jdv/;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/xiaomi;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 10; M2007J3SC Build/QKQ1.200419.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045135 Mobile Safari/537.36', 7 | 'jdltapp;iPhone;6.27.8;14.3;d7beab54ae7758fa896c193b49470204fbb8fce9;network/4g;ADID/97AD46C9-6D49-4642-BF6F-689256673906;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 8 | 'jdltapp;android;6.27.8;9;D246836333735-3264353430393;network/4g;model/MIX 2;addressid/138678023;aid/bf8bcf1214b3832a;oaid/308540d1f1feb2f5;osVer/28;appBuild/1436;psn/Z/rGqfWBY/h5gcGFnVIsRw==|16;psq/3;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 9;osv/9;pv/13.7;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/xiaomi;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 9; MIX 2 Build/PKQ1.190118.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045135 Mobile Safari/537.36', 9 | 'jdltapp;iPhone;2.1.0;14.4;eb5a9e7e596e262b4ffb3b6b5c830984c8a5c0d5;network/wifi;ADID/5603541B-30C1-4B5C-A782-20D0B569D810;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,2;addressid/1041002757;hasOCPay/0;appBuild/101;supportBestPay/0;pv/34.6;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/5;ads/;psn/eb5a9e7e596e262b4ffb3b6b5c830984c8a5c0d5|44;jdv/0|androidapp|t_335139774|appshare|CopyURL|1612612940307|1612612944;adk/;app_device/IOS;pap/JA2020_3112531|2.1.0|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 10 | 'jdltapp;iPhone;6.27.8;14.3;21631ed983b3e854a3154b0336413825ad0d6783;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,4;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.47;apprpd/;ref/JDLTSubMainPageViewController;psq/8;ads/;psn/21631ed983b3e854a3154b0336413825ad0d6783|9;jdv/0|direct|-|none|-|1614150725100|1614225882;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 11 | 'jdltapp;iPhone;6.27.8;13.5;500a795cb2abae60b877ee4a1930557a800bef1c;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone8,1;addressid/669949466;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/9.11;apprpd/;ref/JDLTSubMainPageViewController;psq/10;ads/;psn/500a795cb2abae60b877ee4a1930557a800bef1c|11;jdv/;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 12 | 'jdltapp;iPad;6.27.8;14.4;f5e7b7980fb50efc9c294ac38653c1584846c3db;network/wifi;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPad6,3;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/231.11;pap/JA2020_3112531|6.27.8|IOS 14.4;apprpd/;psn/f5e7b7980fb50efc9c294ac38653c1584846c3db|305;usc/kong;jdv/0|kong|t_1000170135|tuiguang|notset|1613606450668|1613606450;umd/tuiguang;psq/2;ucp/t_1000170135;app_device/IOS;utr/notset;ref/JDLTRedPacketViewController;adk/;ads/;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 13 | 'jdltapp;iPhone;6.27.8;14.4;19fef5419f88076c43f5317eabe20121d52c6a61;network/wifi;ADID/00000000-0000-0000-0000-000000000000;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,8;addressid/3430850943;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/10.4;apprpd/;ref/JDLTSubMainPageViewController;psq/3;ads/;psn/19fef5419f88076c43f5317eabe20121d52c6a61|16;jdv/0|kong|t_1001327829_|jingfen|f51febe09dd64b20b06bc6ef4c1ad790#/|1614096460311|1614096511;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', 14 | 'jdltapp;iPhone;6.27.8;12.2;f995bc883282f7c7ea9d7f32da3f658127aa36c7;network/4g;ADID/9F40F4CA-EA7C-4F2E-8E09-97A66901D83E;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,4;addressid/525064695;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/11.11;apprpd/;ref/JDLTSubMainPageViewController;psq/2;ads/;psn/f995bc883282f7c7ea9d7f32da3f658127aa36c7|22;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 12.2;Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 15 | 'jdltapp;android;6.27.8;10;5366566313931326-6633931643233693;network/wifi;model/Mi9 Pro 5G;addressid/0;aid/5fe6191bf39a42c9;oaid/e3a9473ef6699f75;osVer/29;appBuild/1436;psn/b3rJlGi AwLqa9AqX7Vp0jv4T7XPMa0o|5;psq/4;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/5.4;jdv/;ref/HomeFragment;partner/xiaomi;apprpd/Home_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; Mi9 Pro 5G Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045135 Mobile Safari/537.36', 16 | 'jdltapp;iPhone;6.27.8;14.4;4e6b46913a2e18dd06d6d69843ee4cdd8e033bc1;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/666624049;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/54.11;apprpd/MessageCenter_MessageMerge;ref/MessageCenterController;psq/10;ads/;psn/4e6b46913a2e18dd06d6d69843ee4cdd8e033bc1|101;jdv/0|kong|t_2010804675_|jingfen|810dab1ba2c04b8588c5aa5a0d44c4bd|1614183499;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 17 | 'jdltapp;iPhone;6.27.8;14.2;c71b599e9a0bcbd8d1ad924d85b5715530efad06;network/wifi;ADID/751C6E92-FD10-4323-B37C-187FD0CF0551;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,8;addressid/4053561885;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/263.8;apprpd/;ref/JDLTSubMainPageViewController;psq/2;ads/;psn/c71b599e9a0bcbd8d1ad924d85b5715530efad06|481;jdv/0|kong|t_1001610202_|jingfen|3911bea7ee2f4fcf8d11fdf663192bbe|1614157052210|1614157056;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.2;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 18 | 'jdltapp;iPhone;6.27.8;14.4;2d306ee3cacd2c02560627a5113817ebea20a2c9;network/4g;ADID/A346F099-3182-4889-9A62-2B3C28AB861E;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,3;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/1.35;apprpd/Allowance_Registered;ref/JDLTTaskCenterViewController;psq/0;ads/;psn/2d306ee3cacd2c02560627a5113817ebea20a2c9|2;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 19 | 'jdltapp;iPhone;6.27.8;14.4;28355aff16cec8bcf3e5728dbbc9725656d8c2c2;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,2;addressid/833058617;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.10;apprpd/;ref/JDLTWebViewController;psq/9;ads/;psn/28355aff16cec8bcf3e5728dbbc9725656d8c2c2|5;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 20 | 'jdltapp;iPhone;6.27.8;13.5;24ddac73a3de1b91816b7aedef53e97c4c313733;network/4g;ADID/598C6841-76AC-4512-AA97-CBA940548D70;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone11,6;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/12.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/24ddac73a3de1b91816b7aedef53e97c4c313733|23;jdv/0|kong|t_1000170135|tuiguang|notset|1614126110904|1614126110;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 21 | 'jdltapp;iPhone;6.27.8;14.4;d7732ba60c8ff73cc3f5ba7290a3aa9551f73a1b;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,1;addressid/25239372;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/8.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/d7732ba60c8ff73cc3f5ba7290a3aa9551f73a1b|14;jdv/0|kong|t_1001226363_|jingfen|5713234d1e1e4893b92b2de2cb32484d|1614182989528|1614182992;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 22 | 'jdltapp;iPhone;6.27.8;14.4;ca1a32afca36bc9fb37fd03f18e653bce53eaca5;network/wifi;ADID/3AF380AB-CB74-4FE6-9E7C-967693863CA3;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone8,1;addressid/138323416;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/72.12;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/ca1a32afca36bc9fb37fd03f18e653bce53eaca5|109;jdv/0|kong|t_1000536212_|jingfen|c82bfa19e33a4269a5884ffc614790f4|1614141246;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 23 | 'jdltapp;android;6.27.8;10;7346933333666353-8333366646039373;network/wifi;model/ONEPLUS A5010;addressid/138117973;aid/7d933f6583cfd097;oaid/;osVer/29;appBuild/1436;psn/T/eqfRSwp8VKEvvXyEunq09Cg2MUkiQ5|17;psq/4;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/11.4;jdv/0|kong|t_1001849073_|jingfen|495a47f6c0b8431c9d460f61ad2304dc|1614084403978|1614084407;ref/HomeFragment;partner/oppo;apprpd/Home_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36', 24 | 'jdltapp;android;6.27.8;11;4626269356736353-5353236346334673;network/wifi;model/M2006J10C;addressid/0;aid/dbb9e7655526d3d7;oaid/66a7af49362987b0;osVer/30;appBuild/1436;psn/rQRQgJ 4 S3qkq8YDl28y6jkUHmI/rlX|3;psq/4;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 11;osv/11;pv/3.4;jdv/;ref/HomeFragment;partner/xiaomi;apprpd/Home_Main;eufv/1;Mozilla/5.0 (Linux; Android 11; M2006J10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045513 Mobile Safari/537.36', 25 | 'jdltapp;iPhone;6.27.8;14.4;78fc1d919de0c8c2de15725eff508d8ab14f9c82;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,1;addressid/137829713;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/23.11;apprpd/;ref/JDLTSubMainPageViewController;psq/10;ads/;psn/78fc1d919de0c8c2de15725eff508d8ab14f9c82|34;jdv/0|iosapp|t_335139774|appshare|Wxfriends|1612508702380|1612534293;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 26 | 'jdltapp;android;6.27.8;10;0373263343266633-5663030363465326;network/wifi;model/Redmi Note 7;addressid/590846082;aid/07b34bf3e6006d5b;oaid/17975a142e67ec92;osVer/29;appBuild/1436;psn/OHNqtdhQKv1okyh7rB3HxjwI00ixJMNG|4;psq/3;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/2.3;jdv/;ref/activityId=8a8fabf3cccb417f8e691b6774938bc2;partner/xiaomi;apprpd/jsbqd_home;eufv/1;Mozilla/5.0 (Linux; Android 10; Redmi Note 7 Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.152 Mobile Safari/537.36', 27 | 'jdltapp;android;6.27.8;10;3636566623663623-1693635613166646;network/wifi;model/ASUS_I001DA;addressid/1397761133;aid/ccef2fc2a96e1afd;oaid/;osVer/29;appBuild/1436;psn/T8087T0D82PHzJ4VUMGFrfB9dw4gUnKG|76;psq/5;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/73.5;jdv/0|kong|t_1002354188_|jingfen|2335e043b3344107a2750a781fde9a2e#/|1614097081426|1614097087;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/yingyongbao;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ASUS_I001DA Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36', 28 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,2;addressid/138419019;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/5.7;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/6;ads/;psn/4ee6af0db48fd605adb69b63f00fcbb51c2fc3f0|9;jdv/0|direct|-|none|-|1613705981655|1613823229;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 29 | 'jdltapp;iPhone;6.27.8;14.3;network/wifi;ADID/F9FD7728-2956-4DD1-8EDD-58B07950864C;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/1346909722;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/30.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/40d4d4323eb3987226cae367d6b0d8be50f2c7b3|39;jdv/0|kong|t_1000252057_0|tuiguang|eba7648a0f4445aa9cfa6f35c6f36e15|1613995717959|1613995723;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 30 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;ADID/5D306F0D-A131-4B26-947E-166CCB9BFFFF;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 31 | 'jdltapp;iPad;6.27.8;14.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPad8,9;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/1.20;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/5;ads/;psn/d9f5ddaa0160a20f32fb2c8bfd174fae7993c1b4|3;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.5;Mozilla/5.0 (iPad; CPU OS 14_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 32 | 'jdltapp;iPhone;6.27.8;14.3;network/wifi;ADID/31548A9C-8A01-469A-B148-E7D841C91FD0;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/10.5;apprpd/;ref/JDLTSubMainPageViewController;psq/4;ads/;psn/a858fb4b40e432ea32f80729916e6c3e910bb922|12;jdv/0|direct|-|none|-|1613898710373|1613898712;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 33 | 'jdltapp;iPhone;6.27.8;13.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,2;addressid/2237496805;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/13.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/48e495dcf5dc398b4d46b27e9f15a2b427a154aa|15;jdv/0|direct|-|none|-|1613354874698|1613952828;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 34 | 'jdltapp;android;6.27.8;10;3346332626262353-1666434336539336;network/wifi;model/ONEPLUS A6000;addressid/0;aid/3d3bbb25af44c59c;oaid/;osVer/29;appBuild/1436;psn/ECbc2EqmdSa7mDF1PS1GSrV/Tn7R1LS1|6;psq/8;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/2.67;jdv/0|direct|-|none|-|1613822479379|1613991194;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/oppo;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A6000 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36', 35 | 'jdltapp;android;6.27.8;8.1.0;8363834353530333132333132373-43D2930366035323639333662383;network/wifi;model/16th Plus;addressid/0;aid/f909e5f2c464c7c6;oaid/;osVer/27;appBuild/1436;psn/c21YWvVr77Hn6 pOZfxXGY4TZrre1 UOL5hcPbCEDMo=|3;psq/10;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 8.1.0;osv/8.1.0;pv/2.15;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/jsxdlyqj09;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 8.1.0; 16th Plus Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045514 Mobile Safari/537.36', 36 | 'jdltapp;android;6.27.8;11;1343467336264693-3343562673463613;network/wifi;model/Mi 10 Pro;addressid/0;aid/14d7cbd934eb7dc1;oaid/335f198546eb3141;osVer/30;appBuild/1436;psn/ZcQh/Wov sNYfZ6JUjTIUBu28 KT0T3u|1;psq/24;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 11;osv/11;pv/1.24;jdv/;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/xiaomi;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 11; Mi 10 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.181 Mobile Safari/537.36', 37 | 'jdltapp;android;6.27.8;10;8353636393732346-6646931673935346;network/wifi;model/MI 8;addressid/1969998059;aid/8566972dfd9a795d;oaid/4a8b773c3e307386;osVer/29;appBuild/1436;psn/PhYbUtCsCJo r 1b8hwxjnY8rEv5S8XC|383;psq/14;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/374.14;jdv/0|iosapp|t_335139774|liteshare|CopyURL|1609306590175|1609306596;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/jsxdlyqj09;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36', 38 | 'jdltapp;iPhone;6.27.8;14.4;6d343c58764a908d4fa56609da4cb3a5cc1396d3;network/wifi;ADID/4965D884-3E61-4C4E-AEA7-9A8CE3742DA7;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 39 | 'jdltapp;iPhone;6.27.8;13.6.1;4606ddccdfe8f343f8137de7fea7f91fc4aef3a3;network/4g;ADID/C6FB6E20-D334-45FA-818A-7A4C58305202;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone10,1;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/5.9;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/8;ads/;psn/4606ddccdfe8f343f8137de7fea7f91fc4aef3a3|5;jdv/0|iosapp|t_335139774|liteshare|Qqfriends|1614206359106|1614206366;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 13.6.1;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 40 | 'jdltapp;iPhone;6.27.8;14.4;3b6e79334551fc6f31952d338b996789d157c4e8;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/138051400;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/14.34;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/12;ads/;psn/3b6e79334551fc6f31952d338b996789d157c4e8|46;jdv/0|kong|t_1001707023_|jingfen|e80d7173a4264f4c9a3addcac7da8b5d|1613837384708|1613858760;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 41 | 'jdltapp;android;6.27.8;10;1346235693831363-2373837393932673;network/wifi;model/LYA-AL00;addressid/3321567203;aid/1d2e9816278799b7;oaid/00000000-0000-0000-0000-000000000000;osVer/29;appBuild/1436;psn/45VUZFTZJkhP5fAXbeBoQ0 O2GCB I|7;psq/5;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/5.8;jdv/0|iosapp|t_335139774|liteshare|CopyURL|1614066210320|1614066219;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/huawei;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; LYA-AL00 Build/HUAWEILYA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36', 42 | 'jdltapp;iPhone;6.27.8;14.3;c2a8854e622a1b17a6c56c789f832f9d78ef1ba7;network/wifi;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPhone12,5;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.9;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/8;ads/;psn/c2a8854e622a1b17a6c56c789f832f9d78ef1ba7|6;jdv/0|direct|-|none|-|1613541016735|1613823566;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 43 | 'jdltapp;android;6.27.8;9;;network/wifi;model/MIX 2S;addressid/;aid/f87efed6d9ed3c65;oaid/94739128ef9dd245;osVer/28;appBuild/1436;psn/R7wD/OWkQjYWxax1pDV6kTIDFPJCUid7C/nl2hHnUuI=|3;psq/13;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 9;osv/9;pv/1.42;jdv/;ref/activityId=8a8fabf3cccb417f8e691b6774938bc2;partner/xiaomi;apprpd/jsbqd_home;eufv/1;Mozilla/5.0 (Linux; Android 9; MIX 2S Build/PKQ1.180729.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.181 Mobile Safari/537.36', 44 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 45 | 'jdltapp;android;6.27.8;10;network/wifi;Mozilla/5.0 (Linux; Android 10; Redmi Note 7 Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.152 Mobile Safari/537.36', 46 | 'jdltapp;iPhone;6.27.8;14.4;network/3g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 47 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148', 48 | 'jdltapp;iPad;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;model/iPad6,3;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/231.11;pap/JA2020_3112531|6.27.8|IOS 14.4;apprpd/;psn/f5e7b7980fb50efc9c294ac38653c1584846c3db|305;usc/kong;jdv/0|kong|t_1000170135|tuiguang|notset|1613606450668|1613606450;umd/tuiguang;psq/2;ucp/t_1000170135;app_device/IOS;utr/notset;ref/JDLTRedPacketViewController;adk/;ads/;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 49 | 'jdltapp;iPhone;6.27.8;13.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone8,1;addressid/669949466;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/9.11;apprpd/;ref/JDLTSubMainPageViewController;psq/10;ads/;psn/500a795cb2abae60b877ee4a1930557a800bef1c|11;jdv/;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 50 | 'jdltapp;iPhone;6.27.8;14.3;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,4;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.47;apprpd/;ref/JDLTSubMainPageViewController;psq/8;ads/;psn/21631ed983b3e854a3154b0336413825ad0d6783|9;jdv/0|direct|-|none|-|1614150725100|1614225882;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 51 | 'jdltapp;iPhone;6.27.8;14.3;network/3g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,4;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.47;apprpd/;ref/JDLTSubMainPageViewController;psq/8;ads/;psn/21631ed983b3e854a3154b0336413825ad0d6783|9;jdv/0|direct|-|none|-|1614150725100|1614225882;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 52 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.15;apprpd/;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fchat%2Findex.action%3Fentry%3Djd_m_JiSuCommodity%26pid%3D7763388%26lng%3D118.159665%26lat%3D24.504633%26sid%3D31cddc2d58f6e36bf2c31c4e8a79767w%26un_area%3D16_1315_3486_0;psq/12;ads/;psn/c10e0db6f15dec57a94637365f4c3d43e05bbd48|4;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 53 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.15;apprpd/;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fchat%2Findex.action%3Fentry%3Djd_m_JiSuCommodity%26pid%3D7763388%26lng%3D118.159665%26lat%3D24.504633%26sid%3D31cddc2d58f6e36bf2c31c4e8a79767w%26un_area%3D16_1315_3486_0;psq/12;ads/;psn/c10e0db6f15dec57a94637365f4c3d43e05bbd48|4;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 54 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone13,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/3.15;apprpd/;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fchat%2Findex.action%3Fentry%3Djd_m_JiSuCommodity%26pid%3D7763388%26lng%3D118.159665%26lat%3D24.504633%26sid%3D31cddc2d58f6e36bf2c31c4e8a79767w%26un_area%3D16_1315_3486_0;psq/12;ads/;psn/c10e0db6f15dec57a94637365f4c3d43e05bbd48|4;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 55 | 'jdltapp;iPhone;6.27.8;14.4;;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/2813715704;pv/67.38;apprpd/MyJD_Main;ref/https%3A%2F%2Fh5.m.jd.com%2FbabelDiy%2FZeus%2F2ynE8QDtc2svd36VowmYWBzzDdK6%2Findex.html%3Flng%3D103.957532%26lat%3D30.626962%26sid%3D4fe8ef4283b24723a7bb30ee87c18b2w%26un_area%3D22_1930_49324_52512;psq/4;ads/;psn/5aef178f95931bdbbde849ea9e2fc62b18bc5829|127;jdv/0|direct|-|none|-|1612588090667|1613822580;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 56 | 'jdltapp;iPhone;6.27.8;14.3;;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 57 | 'jdltapp;iPhone;6.27.8;14.3;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 58 | 'jdltapp;iPhone;6.27.8;14.3;;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 59 | 'jdltapp;iPhone;6.27.8;14.3;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 60 | 'jdltapp;iPhone;6.27.8;14.3;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,2;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/6.28;apprpd/;ref/JDLTRedPacketViewController;psq/3;ads/;psn/d7beab54ae7758fa896c193b49470204fbb8fce9|8;jdv/0|kong|t_1001707023_|jingfen|79ad0319fa4d47e38521a616d80bc4bd|1613800945610|1613824900;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 61 | 'jdltapp;iPhone;6.27.8;14.4;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,1;addressid/3104834020;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/c633e62b5a4ad0fdd93d9862bdcacfa8f3ecef63|6;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 62 | 'jdltapp;iPhone;6.27.8;14.3;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/1346909722;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/30.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/40d4d4323eb3987226cae367d6b0d8be50f2c7b3|39;jdv/0|kong|t_1000252057_0|tuiguang|eba7648a0f4445aa9cfa6f35c6f36e15|1613995717959|1613995723;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 63 | 'jdltapp;iPhone;6.27.8;14.3;network/wifi;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone10,1;addressid/1346909722;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/30.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/40d4d4323eb3987226cae367d6b0d8be50f2c7b3|39;jdv/0|kong|t_1000252057_0|tuiguang|eba7648a0f4445aa9cfa6f35c6f36e15|1613995717959|1613995723;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.3;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 64 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 65 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 66 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone11,6;addressid/138164461;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/7.8;apprpd/;ref/JDLTSubMainPageViewController;psq/7;ads/;psn/d40e5d4a33c100e8527f779557c347569b49c304|7;jdv/0|kong|t_1001226363_|jingfen|3bf5372cb9cd445bbb270b8bc9a34f00|1608439066693|1608439068;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 67 | 'jdltapp;iPhone;6.27.8;13.5;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,2;addressid/2237496805;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/13.6;apprpd/;ref/JDLTSubMainPageViewController;psq/5;ads/;psn/48e495dcf5dc398b4d46b27e9f15a2b427a154aa|15;jdv/0|direct|-|none|-|1613354874698|1613952828;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 13.5;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 68 | 'jdltapp;android;6.27.8;10;network/wifi;model/ONEPLUS A6000;addressid/0;aid/3d3bbb25af44c59c;oaid/;osVer/29;appBuild/1436;psn/ECbc2EqmdSa7mDF1PS1GSrV/Tn7R1LS1|6;psq/8;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/2.67;jdv/0|direct|-|none|-|1613822479379|1613991194;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/oppo;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 10; ONEPLUS A6000 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36', 69 | 'jdltapp;android;6.27.8;8.1.0;network/wifi;model/16th Plus;addressid/0;aid/f909e5f2c464c7c6;oaid/;osVer/27;appBuild/1436;psn/c21YWvVr77Hn6 pOZfxXGY4TZrre1 UOL5hcPbCEDMo=|3;psq/10;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 8.1.0;osv/8.1.0;pv/2.15;jdv/;ref/com.jd.jdlite.lib.personal.view.fragment.JDPersonalFragment;partner/jsxdlyqj09;apprpd/MyJD_Main;eufv/1;Mozilla/5.0 (Linux; Android 8.1.0; 16th Plus Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045514 Mobile Safari/537.36', 70 | 'jdltapp;android;6.27.8;11;network/wifi;model/Mi 10 Pro;addressid/0;aid/14d7cbd934eb7dc1;oaid/335f198546eb3141;osVer/30;appBuild/1436;psn/ZcQh/Wov sNYfZ6JUjTIUBu28 KT0T3u|1;psq/24;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 11;osv/11;pv/1.24;jdv/;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/xiaomi;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 11; Mi 10 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.181 Mobile Safari/537.36', 71 | 'jdltapp;android;6.27.8;10;network/wifi;model/MI 8;addressid/1969998059;aid/8566972dfd9a795d;oaid/4a8b773c3e307386;osVer/29;appBuild/1436;psn/PhYbUtCsCJo r 1b8hwxjnY8rEv5S8XC|383;psq/14;adk/;ads/;pap/JA2020_3112531|6.27.8|ANDROID 10;osv/10;pv/374.14;jdv/0|iosapp|t_335139774|liteshare|CopyURL|1609306590175|1609306596;ref/com.jd.jdlite.lib.jdlitemessage.view.activity.MessageCenterMainActivity;partner/jsxdlyqj09;apprpd/MessageCenter_MessageMerge;eufv/1;Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045140 Mobile Safari/537.36', 72 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone8,4;addressid/1477231693;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/21.15;apprpd/MyJD_Main;ref/https%3A%2F%2Fgold.jd.com%2F%3Flng%3D0.000000%26lat%3D0.000000%26sid%3D4584eb84dc00141b0d58e000583a338w%26un_area%3D19_1607_3155_62114;psq/0;ads/;psn/2c822e59db319590266cc83b78c4a943783d0077|46;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 73 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 74 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 75 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 76 | 'jdltapp;iPhone;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone9,1;addressid/70390480;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.24;apprpd/MyJD_Main;ref/https%3A%2F%2Fjdcs.m.jd.com%2Fafter%2Findex.action%3FcategoryId%3D600%26v%3D6%26entry%3Dm_self_jd;psq/4;ads/;psn/6d343c58764a908d4fa56609da4cb3a5cc1396d3|17;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 77 | 'jdltapp;iPhone;6.27.8;14.4;network/4g;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPhone12,3;hasOCPay/0;appBuild/1017;supportBestPay/0;addressid/;pv/3.49;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/7;ads/;psn/9e0e0ea9c6801dfd53f2e50ffaa7f84c7b40cd15|6;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 78 | 'jdltapp;iPad;6.27.8;14.4;network/wifi;hasUPPay/0;pushNoticeIsOpen/0;lang/zh_CN;model/iPad7,5;addressid/;hasOCPay/0;appBuild/1017;supportBestPay/0;pv/4.14;apprpd/MyJD_Main;ref/MyJdMTAManager;psq/3;ads/;psn/956c074c769cd2eeab2e36fca24ad4c9e469751a|8;jdv/0|;adk/;app_device/IOS;pap/JA2020_3112531|6.27.8|IOS 14.4;Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1', 79 | ] 80 | 81 | /** 82 | * 生成随机数字 83 | * @param {number} min 最小值(包含) 84 | * @param {number} max 最大值(不包含) 85 | * @returns {number} 随机生成的数字 86 | */ 87 | const randomNumber = (min = 0, max = 100) => Math.floor(Math.random() * (max - min)) + min; 88 | const USER_AGENT = USER_AGENTS[randomNumber(0, USER_AGENTS.length)]; 89 | module.exports = { 90 | USER_AGENT 91 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 学习使用 2 | 3 | ## 加入频道 4 | ### https://t.me/proenvc 5 | 6 | ## 依赖 7 | ``` 8 | redis@4.7.0 9 | global-agent 10 | https-proxy-agent@7.0.5 11 | tunnel 12 | ws 13 | png-js 14 | date-fns 15 | axios@1.7.7 16 | dotenv 17 | got@11.8.6 18 | crypto-js 19 | sharp 20 | fs 21 | form-data 22 | md5 23 | ts-md5 24 | tslib 25 | @types/node 26 | request 27 | tough-cookie 28 | jsdom 29 | download 30 | js-base64 31 | qrcode-terminal 32 | moment 33 | ``` 34 | 35 | ## 拉库命令 36 | ### 无代理拉取 37 | ``` 38 | ql repo https://github.com/feverrun/my_scripts.git "jd_|jx_|jddj_|getCookie|getJDCookie" "backUp" "^(jd|JD|JS)[^_]|USER|sendNotify|ql|utils" 39 | ``` 40 | 41 | ### 通过代理拉取 42 | ``` 43 | ql repo https://pro.proenv.top/https://github.com/feverrun/my_scripts.git "jd_|jx_|jddj_|getCookie|getJDCookie" "backUp" "^(jd|JD|JS)[^_]|USER|sendNotify|ql|utils" 44 | ``` 45 | 46 | 47 | 定时更新: 1 * * * * 48 | 49 | 学习使用 50 | 51 | ## [一些介绍](https://github.com/feverrun/my_scripts/wiki/%E4%BB%8B%E7%BB%8D) 52 | -------------------------------------------------------------------------------- /USER_AGENTS.js: -------------------------------------------------------------------------------- 1 | const USER_AGENTS = [ 2 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 3 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 4 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 9; Mi Note 3 Build/PKQ1.181007.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36", 5 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; GM1910 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 6 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 9; 16T Build/PKQ1.190616.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 7 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 8 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 9 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 10 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 11 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 12 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 13 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 14 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 15 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 16 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 17 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 18 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 9; MI 6 Build/PKQ1.190118.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 19 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 11; Redmi K30 5G Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045511 Mobile Safari/537.36", 20 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15F79", 21 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; M2006J10C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 22 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; M2006J10C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 23 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; ONEPLUS A6000 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045224 Mobile Safari/537.36", 24 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 9; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 25 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 8.1.0; 16 X Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 26 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 8.0.0; HTC U-3w Build/OPR6.170623.013; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 27 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 28 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; LYA-AL00 Build/HUAWEILYA-AL00L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 29 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 30 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 31 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36", 32 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 9; HLK-AL00 Build/HONORHLK-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045227 Mobile Safari/537.36", 33 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 34 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 35 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; LYA-AL10 Build/HUAWEILYA-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045513 Mobile Safari/537.36", 36 | "jdapp;android;11.3.7;;;Mozilla/5.0 (Linux; Android 10; MI 9 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045227 Mobile Safari/537.36", 37 | "jdapp;iPhone;11.3.7;;;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 38 | ] 39 | 40 | /** 41 | * 生成随机数字 42 | * @param {number} min 最小值(包含) 43 | * @param {number} max 最大值(不包含) 44 | * @returns {number} 随机生成的数字 45 | */ 46 | const randomNumber = (min = 0, max = 100) => Math.floor(Math.random() * (max - min)) + min; 47 | const USER_AGENT = USER_AGENTS[randomNumber(0, USER_AGENTS.length)]; 48 | module.exports = { 49 | USER_AGENT 50 | } 51 | -------------------------------------------------------------------------------- /jdCookie.js: -------------------------------------------------------------------------------- 1 | /* 2 | 此文件为Node.js专用。其他用户请忽略 3 | 此处填写京东账号cookie。 4 | */ 5 | let CookieJDs = [] 6 | 7 | if (process.env.JD_COOKIE) { 8 | let jd_cookies = process.env.JD_COOKIE.replace(/\s+/g, ''); 9 | CookieJDs = jd_cookies.split(/[\n&]+/); 10 | } 11 | 12 | // if (JSON.stringify(process.env).indexOf('GITHUB') > -1) { 13 | // console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`); 14 | // !(async () => { 15 | // await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`) 16 | // await process.exit(0); 17 | // })() 18 | // } 19 | 20 | CookieJDs = [...new Set(CookieJDs.filter(item => !!item))] 21 | console.log(`\n【保护环境】欢迎进群反馈问题: https://t.me/proenv\n`); 22 | console.log(`===============共${CookieJDs.length}个京东账号Cookie===============\n`); 23 | if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { 24 | }; 25 | 26 | // const path = require('path'); 27 | // /** 28 | // * 获取当前活动脚本的文件名或完整路径 29 | // * @param {boolean} onlyName - 如果为 true,则返回文件名;如果为 false,则返回完整路径 30 | // * @returns {string} 当前活动脚本的文件名或完整路径 31 | // */ 32 | // function getCurrentScriptName(onlyName = false) { 33 | // if (onlyName) { 34 | // return path.basename(__filename); // 返回文件名 35 | // } 36 | // return __filename; // 返回完整路径 37 | // } 38 | // console.log(getCurrentScriptName(true), getCurrentScriptName(false)) 39 | 40 | for (let i = 0; i < CookieJDs.length; i++) { 41 | const cookie = CookieJDs[i]; 42 | const hasPtPin = cookie.match(/pt_pin=(.+?);/); 43 | const hasPtKey = cookie.match(/pt_key=(.+?);/); 44 | if (!hasPtPin || !hasPtKey) { 45 | console.log(`\n提示:京东cookie 【${cookie}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`); 46 | } 47 | const index = (i === 0) ? '' : (i + 1); 48 | exports['CookieJD' + index] = cookie.trim(); 49 | } -------------------------------------------------------------------------------- /jd_CheckCK.js: -------------------------------------------------------------------------------- 1 | /* 2 | cron "30 * * * *" jd_CheckCK.js, tag:京东CK检测by-ccwav 3 | */ 4 | //详细说明参考 https://github.com/ccwav/QLScript2. 5 | const $ = new Env('京东CK检测'); 6 | 7 | 8 | const notify = $.isNode() ? require('./sendNotify') : ''; 9 | //Node.js用户请在jdCookie.js处填写京东ck; 10 | const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; 11 | const got = require('got'); 12 | const { 13 | getEnvs, 14 | getEnvById, 15 | DisableCk, 16 | EnableCk, 17 | getstatus 18 | } = require('./utils/ql'); 19 | const api = got.extend({ 20 | retry: { 21 | limit: 0 22 | }, 23 | responseType: 'json', 24 | }); 25 | 26 | let ShowSuccess = "false", 27 | CKAlwaysNotify = "false", 28 | CKAutoEnable = "true", 29 | NoWarnError = "false"; 30 | 31 | let MessageUserGp2 = ""; 32 | let MessageUserGp3 = ""; 33 | let MessageUserGp4 = ""; 34 | 35 | let MessageGp2 = ""; 36 | let MessageGp3 = ""; 37 | let MessageGp4 = ""; 38 | let MessageAll = ""; 39 | 40 | let userIndex2 = -1; 41 | let userIndex3 = -1; 42 | let userIndex4 = -1; 43 | 44 | let IndexGp2 = 0; 45 | let IndexGp3 = 0; 46 | let IndexGp4 = 0; 47 | let IndexAll = 0; 48 | 49 | let TempErrorMessage = '', 50 | TempSuccessMessage = '', 51 | TempDisableMessage = '', 52 | TempEnableMessage = '', 53 | TempOErrorMessage = ''; 54 | 55 | let allMessage = '', 56 | ErrorMessage = '', 57 | SuccessMessage = '', 58 | DisableMessage = '', 59 | EnableMessage = '', 60 | OErrorMessage = ''; 61 | 62 | let allMessageGp2 = '', 63 | ErrorMessageGp2 = '', 64 | SuccessMessageGp2 = '', 65 | DisableMessageGp2 = '', 66 | EnableMessageGp2 = '', 67 | OErrorMessageGp2 = ''; 68 | 69 | let allMessageGp3 = '', 70 | ErrorMessageGp3 = '', 71 | SuccessMessageGp3 = '', 72 | DisableMessageGp3 = '', 73 | EnableMessageGp3 = '', 74 | OErrorMessageGp3 = ''; 75 | 76 | let allMessageGp4 = '', 77 | ErrorMessageGp4 = '', 78 | SuccessMessageGp4 = '', 79 | DisableMessageGp4 = '', 80 | EnableMessageGp4 = '', 81 | OErrorMessageGp4 = ''; 82 | 83 | let strAllNotify = ""; 84 | let strNotifyOneTemp = ""; 85 | let WP_APP_TOKEN_ONE = ""; 86 | if ($.isNode() && process.env.WP_APP_TOKEN_ONE) { 87 | WP_APP_TOKEN_ONE = process.env.WP_APP_TOKEN_ONE; 88 | } 89 | 90 | let ReturnMessageTitle = ''; 91 | 92 | if ($.isNode() && process.env.BEANCHANGE_USERGP2) { 93 | MessageUserGp2 = process.env.BEANCHANGE_USERGP2 ? process.env.BEANCHANGE_USERGP2.split('&') : []; 94 | console.log(`检测到设定了分组推送2`); 95 | } 96 | 97 | if ($.isNode() && process.env.BEANCHANGE_USERGP3) { 98 | MessageUserGp3 = process.env.BEANCHANGE_USERGP3 ? process.env.BEANCHANGE_USERGP3.split('&') : []; 99 | console.log(`检测到设定了分组推送3`); 100 | } 101 | 102 | if ($.isNode() && process.env.BEANCHANGE_USERGP4) { 103 | MessageUserGp4 = process.env.BEANCHANGE_USERGP4 ? process.env.BEANCHANGE_USERGP4.split('&') : []; 104 | console.log(`检测到设定了分组推送4`); 105 | } 106 | 107 | if ($.isNode() && process.env.CHECKCK_SHOWSUCCESSCK) { 108 | ShowSuccess = process.env.CHECKCK_SHOWSUCCESSCK; 109 | } 110 | if ($.isNode() && process.env.CHECKCK_CKALWAYSNOTIFY) { 111 | CKAlwaysNotify = process.env.CHECKCK_CKALWAYSNOTIFY; 112 | } 113 | if ($.isNode() && process.env.CHECKCK_CKAUTOENABLE) { 114 | CKAutoEnable = process.env.CHECKCK_CKAUTOENABLE; 115 | } 116 | if ($.isNode() && process.env.CHECKCK_CKNOWARNERROR) { 117 | NoWarnError = process.env.CHECKCK_CKNOWARNERROR; 118 | } 119 | 120 | if ($.isNode() && process.env.CHECKCK_ALLNOTIFY) { 121 | 122 | strAllNotify = process.env.CHECKCK_ALLNOTIFY; 123 | console.log(`检测到设定了温馨提示,将在推送信息中置顶显示...`); 124 | strAllNotify = `\n【✨✨✨✨温馨提示✨✨✨✨】\n` + strAllNotify; 125 | console.log(strAllNotify); 126 | } 127 | 128 | !(async () => { 129 | const envs = await getEnvs(); 130 | if (!envs[0]) { 131 | $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', { 132 | "open-url": "https://bean.m.jd.com/bean/signIndex.action" 133 | }); 134 | return; 135 | } 136 | 137 | for (let i = 0; i < envs.length; i++) { 138 | if (envs[i].value) { 139 | var tempid = 0; 140 | if (envs[i]._id) { 141 | tempid = envs[i]._id; 142 | } 143 | if (envs[i].id) { 144 | tempid = envs[i].id; 145 | } 146 | cookie = await getEnvById(tempid); 147 | $.UserName = (cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]) 148 | $.UserName2 = decodeURIComponent($.UserName); 149 | $.index = i + 1; 150 | $.isLogin = true; 151 | $.error = ''; 152 | $.NoReturn = ''; 153 | $.nickName = ""; 154 | TempErrorMessage = ''; 155 | TempSuccessMessage = ''; 156 | TempDisableMessage = ''; 157 | TempEnableMessage = ''; 158 | TempOErrorMessage = ''; 159 | 160 | console.log(`开始检测【京东账号${$.index}】${$.UserName2} ....\n`); 161 | if (MessageUserGp4) { 162 | userIndex4 = MessageUserGp4.findIndex((item) => item === $.UserName); 163 | } 164 | if (MessageUserGp2) { 165 | 166 | userIndex2 = MessageUserGp2.findIndex((item) => item === $.UserName); 167 | } 168 | if (MessageUserGp3) { 169 | 170 | userIndex3 = MessageUserGp3.findIndex((item) => item === $.UserName); 171 | } 172 | 173 | if (userIndex2 != -1) { 174 | console.log(`账号属于分组2`); 175 | IndexGp2 += 1; 176 | ReturnMessageTitle = `【账号${IndexGp2}🆔】${$.UserName2}`; 177 | } 178 | if (userIndex3 != -1) { 179 | console.log(`账号属于分组3`); 180 | IndexGp3 += 1; 181 | ReturnMessageTitle = `【账号${IndexGp3}🆔】${$.UserName2}`; 182 | } 183 | if (userIndex4 != -1) { 184 | console.log(`账号属于分组4`); 185 | IndexGp4 += 1; 186 | ReturnMessageTitle = `【账号${IndexGp4}🆔】${$.UserName2}`; 187 | } 188 | if (userIndex4 == -1 && userIndex2 == -1 && userIndex3 == -1) { 189 | console.log(`账号没有分组`); 190 | IndexAll += 1; 191 | ReturnMessageTitle = `【账号${IndexAll}🆔】${$.UserName2}`; 192 | } 193 | 194 | try { 195 | await TotalBean(); 196 | } catch (e) { 197 | 198 | } 199 | if ($.NoReturn) { 200 | console.log(`接口1检测失败,尝试使用接口2....\n`); 201 | await isLoginByX1a0He(); 202 | } else { 203 | if ($.isLogin) { 204 | if (!$.nickName) { 205 | console.log(`获取的别名为空,尝试使用接口2验证....\n`); 206 | await isLoginByX1a0He(); 207 | } else { 208 | console.log(`成功获取到别名: ${$.nickName},Pass!\n`); 209 | } 210 | } 211 | } 212 | 213 | if ($.error) { 214 | console.log(`有错误,跳出....`); 215 | TempOErrorMessage = $.error; 216 | 217 | } else { 218 | const strnowstatus = await getstatus(tempid); 219 | if (strnowstatus == 99) { 220 | strnowstatus = envs[i].status; 221 | } 222 | if (!$.isLogin) { 223 | 224 | if (strnowstatus == 0) { 225 | const DisableCkBody = await DisableCk(tempid); 226 | if (DisableCkBody.code == 200) { 227 | if ($.isNode() && WP_APP_TOKEN_ONE) { 228 | strNotifyOneTemp = `京东账号: ${$.nickName || $.UserName2} 已失效,自动禁用成功!\n如果要继续挂机,请联系管理员重新登录账号,账号有效期为30天.` 229 | 230 | if (strAllNotify) 231 | strNotifyOneTemp += `\n` + strAllNotify; 232 | 233 | await notify.sendNotifybyWxPucher(`${$.name}`, strNotifyOneTemp, `${$.UserName2}`); 234 | } 235 | console.log(`京东账号${$.index} : ${$.nickName || $.UserName2} 已失效,自动禁用成功!\n`); 236 | TempDisableMessage = ReturnMessageTitle + ` (自动禁用成功!)\n`; 237 | TempErrorMessage = ReturnMessageTitle + ` 已失效,自动禁用成功!\n`; 238 | } else { 239 | if ($.isNode() && WP_APP_TOKEN_ONE) { 240 | strNotifyOneTemp = `京东账号: ${$.nickName || $.UserName2} 已失效!\n如果要继续挂机,请联系管理员重新登录账号,账号有效期为30天.` 241 | 242 | if (strAllNotify) 243 | strNotifyOneTemp += `\n` + strAllNotify; 244 | 245 | await notify.sendNotifybyWxPucher(`${$.name}`, strNotifyOneTemp, `${$.UserName2}`); 246 | } 247 | console.log(`京东账号${$.index} : ${$.nickName || $.UserName2} 已失效,自动禁用失败!\n`); 248 | TempDisableMessage = ReturnMessageTitle + ` (自动禁用失败!)\n`; 249 | TempErrorMessage = ReturnMessageTitle + ` 已失效,自动禁用失败!\n`; 250 | } 251 | } else { 252 | console.log(`京东账号${$.index} : ${$.nickName || $.UserName2} 已失效,已禁用!\n`); 253 | TempErrorMessage = ReturnMessageTitle + ` 已失效,已禁用.\n`; 254 | } 255 | } else { 256 | if (strnowstatus == 1) { 257 | 258 | if (CKAutoEnable == "true") { 259 | const EnableCkBody = await EnableCk(tempid); 260 | if (EnableCkBody.code == 200) { 261 | if ($.isNode() && WP_APP_TOKEN_ONE) { 262 | await notify.sendNotifybyWxPucher(`${$.name}`, `京东账号: ${$.nickName || $.UserName2} 已恢复,自动启用成功!\n祝您挂机愉快...`, `${$.UserName2}`); 263 | } 264 | console.log(`京东账号${$.index} : ${$.nickName || $.UserName2} 已恢复,自动启用成功!\n`); 265 | TempEnableMessage = ReturnMessageTitle + ` (自动启用成功!)\n`; 266 | TempSuccessMessage = ReturnMessageTitle + ` (自动启用成功!)\n`; 267 | } else { 268 | if ($.isNode() && WP_APP_TOKEN_ONE) { 269 | await notify.sendNotifybyWxPucher(`${$.name}`, `京东账号: ${$.nickName || $.UserName2} 已恢复,但自动启用失败!\n请联系管理员处理...`, `${$.UserName2}`); 270 | } 271 | console.log(`京东账号${$.index} : ${$.nickName || $.UserName2} 已恢复,但自动启用失败!\n`); 272 | TempEnableMessage = ReturnMessageTitle + ` (自动启用失败!)\n`; 273 | } 274 | } else { 275 | console.log(`京东账号${$.index} : ${$.nickName || $.UserName2} 已恢复,可手动启用!\n`); 276 | TempEnableMessage = ReturnMessageTitle + ` 已恢复,可手动启用.\n`; 277 | } 278 | } else { 279 | console.log(`京东账号${$.index} : ${$.nickName || $.UserName2} 状态正常!\n`); 280 | TempSuccessMessage = ReturnMessageTitle + `\n`; 281 | } 282 | } 283 | } 284 | 285 | if (userIndex2 != -1) { 286 | ErrorMessageGp2 += TempErrorMessage; 287 | SuccessMessageGp2 += TempSuccessMessage; 288 | DisableMessageGp2 += TempDisableMessage; 289 | EnableMessageGp2 += TempEnableMessage; 290 | OErrorMessageGp2 += TempOErrorMessage; 291 | } 292 | if (userIndex3 != -1) { 293 | ErrorMessageGp3 += TempErrorMessage; 294 | SuccessMessageGp3 += TempSuccessMessage; 295 | DisableMessageGp3 += TempDisableMessage; 296 | EnableMessageGp3 += TempEnableMessage; 297 | OErrorMessageGp3 += TempOErrorMessage; 298 | } 299 | if (userIndex4 != -1) { 300 | ErrorMessageGp4 += TempErrorMessage; 301 | SuccessMessageGp4 += TempSuccessMessage; 302 | DisableMessageGp4 += TempDisableMessage; 303 | EnableMessageGp4 += TempEnableMessage; 304 | OErrorMessageGp4 += TempOErrorMessage; 305 | } 306 | 307 | if (userIndex4 == -1 && userIndex2 == -1 && userIndex3 == -1) { 308 | ErrorMessage += TempErrorMessage; 309 | SuccessMessage += TempSuccessMessage; 310 | DisableMessage += TempDisableMessage; 311 | EnableMessage += TempEnableMessage; 312 | OErrorMessage += TempOErrorMessage; 313 | } 314 | 315 | } 316 | console.log(`等待2秒....... \n`); 317 | await $.wait(2 * 1000) 318 | } 319 | 320 | if ($.isNode()) { 321 | if (MessageUserGp2) { 322 | if (OErrorMessageGp2) { 323 | allMessageGp2 += `👇👇👇👇👇检测出错账号👇👇👇👇👇\n` + OErrorMessageGp2 + `\n\n`; 324 | } 325 | if (DisableMessageGp2) { 326 | allMessageGp2 += `👇👇👇👇👇自动禁用账号👇👇👇👇👇\n` + DisableMessageGp2 + `\n\n`; 327 | } 328 | if (EnableMessageGp2) { 329 | if (CKAutoEnable == "true") { 330 | allMessageGp2 += `👇👇👇👇👇自动启用账号👇👇👇👇👇\n` + EnableMessageGp2 + `\n\n`; 331 | } else { 332 | allMessageGp2 += `👇👇👇👇👇账号已恢复👇👇👇👇👇\n` + EnableMessageGp2 + `\n\n`; 333 | } 334 | } 335 | 336 | if (ErrorMessageGp2) { 337 | allMessageGp2 += `👇👇👇👇👇失效账号👇👇👇👇👇\n` + ErrorMessageGp2 + `\n\n`; 338 | } else { 339 | allMessageGp2 += `👇👇👇👇👇失效账号👇👇👇👇👇\n 一个失效的都没有呢,羡慕啊...\n\n`; 340 | } 341 | 342 | if (ShowSuccess == "true" && SuccessMessage) { 343 | allMessageGp2 += `👇👇👇👇👇有效账号👇👇👇👇👇\n` + SuccessMessageGp2 + `\n`; 344 | } 345 | 346 | if (NoWarnError == "true") { 347 | OErrorMessageGp2 = ""; 348 | } 349 | 350 | if ($.isNode() && (EnableMessageGp2 || DisableMessageGp2 || OErrorMessageGp2 || CKAlwaysNotify == "true")) { 351 | console.log("京东CK检测#2:"); 352 | console.log(allMessageGp2); 353 | 354 | if (strAllNotify) 355 | allMessageGp2 += `\n` + strAllNotify; 356 | 357 | await notify.sendNotify("京东CK检测#2", `${allMessageGp2}`, { 358 | url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean` 359 | }) 360 | } 361 | } 362 | if (MessageUserGp3) { 363 | if (OErrorMessageGp3) { 364 | allMessageGp3 += `👇👇👇👇👇检测出错账号👇👇👇👇👇\n` + OErrorMessageGp3 + `\n\n`; 365 | } 366 | if (DisableMessageGp3) { 367 | allMessageGp3 += `👇👇👇👇👇自动禁用账号👇👇👇👇👇\n` + DisableMessageGp3 + `\n\n`; 368 | } 369 | if (EnableMessageGp3) { 370 | if (CKAutoEnable == "true") { 371 | allMessageGp3 += `👇👇👇👇👇自动启用账号👇👇👇👇👇\n` + EnableMessageGp3 + `\n\n`; 372 | } else { 373 | allMessageGp3 += `👇👇👇👇👇账号已恢复👇👇👇👇👇\n` + EnableMessageGp3 + `\n\n`; 374 | } 375 | } 376 | 377 | if (ErrorMessageGp3) { 378 | allMessageGp3 += `👇👇👇👇👇失效账号👇👇👇👇👇\n` + ErrorMessageGp3 + `\n\n`; 379 | } else { 380 | allMessageGp3 += `👇👇👇👇👇失效账号👇👇👇👇👇\n 一个失效的都没有呢,羡慕啊...\n\n`; 381 | } 382 | 383 | if (ShowSuccess == "true" && SuccessMessage) { 384 | allMessageGp3 += `👇👇👇👇👇有效账号👇👇👇👇👇\n` + SuccessMessageGp3 + `\n`; 385 | } 386 | 387 | if (NoWarnError == "true") { 388 | OErrorMessageGp3 = ""; 389 | } 390 | 391 | if ($.isNode() && (EnableMessageGp3 || DisableMessageGp3 || OErrorMessageGp3 || CKAlwaysNotify == "true")) { 392 | console.log("京东CK检测#3:"); 393 | console.log(allMessageGp3); 394 | if (strAllNotify) 395 | allMessageGp3 += `\n` + strAllNotify; 396 | 397 | await notify.sendNotify("京东CK检测#3", `${allMessageGp3}`, { 398 | url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean` 399 | }) 400 | } 401 | } 402 | if (MessageUserGp4) { 403 | if (OErrorMessageGp4) { 404 | allMessageGp4 += `👇👇👇👇👇检测出错账号👇👇👇👇👇\n` + OErrorMessageGp4 + `\n\n`; 405 | } 406 | if (DisableMessageGp4) { 407 | allMessageGp4 += `👇👇👇👇👇自动禁用账号👇👇👇👇👇\n` + DisableMessageGp4 + `\n\n`; 408 | } 409 | if (EnableMessageGp4) { 410 | if (CKAutoEnable == "true") { 411 | allMessageGp4 += `👇👇👇👇👇自动启用账号👇👇👇👇👇\n` + EnableMessageGp4 + `\n\n`; 412 | } else { 413 | allMessageGp4 += `👇👇👇👇👇账号已恢复👇👇👇👇👇\n` + EnableMessageGp4 + `\n\n`; 414 | } 415 | } 416 | 417 | if (ErrorMessageGp4) { 418 | allMessageGp4 += `👇👇👇👇👇失效账号👇👇👇👇👇\n` + ErrorMessageGp4 + `\n\n`; 419 | } else { 420 | allMessageGp4 += `👇👇👇👇👇失效账号👇👇👇👇👇\n 一个失效的都没有呢,羡慕啊...\n\n`; 421 | } 422 | 423 | if (ShowSuccess == "true" && SuccessMessage) { 424 | allMessageGp4 += `👇👇👇👇👇有效账号👇👇👇👇👇\n` + SuccessMessageGp4 + `\n`; 425 | } 426 | 427 | if (NoWarnError == "true") { 428 | OErrorMessageGp4 = ""; 429 | } 430 | 431 | if ($.isNode() && (EnableMessageGp4 || DisableMessageGp4 || OErrorMessageGp4 || CKAlwaysNotify == "true")) { 432 | console.log("京东CK检测#4:"); 433 | console.log(allMessageGp4); 434 | if (strAllNotify) 435 | allMessageGp4 += `\n` + strAllNotify; 436 | 437 | await notify.sendNotify("京东CK检测#4", `${allMessageGp4}`, { 438 | url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean` 439 | }) 440 | } 441 | } 442 | 443 | if (OErrorMessage) { 444 | allMessage += `👇👇👇👇👇检测出错账号👇👇👇👇👇\n` + OErrorMessage + `\n\n`; 445 | } 446 | if (DisableMessage) { 447 | allMessage += `👇👇👇👇👇自动禁用账号👇👇👇👇👇\n` + DisableMessage + `\n\n`; 448 | } 449 | if (EnableMessage) { 450 | if (CKAutoEnable == "true") { 451 | allMessage += `👇👇👇👇👇自动启用账号👇👇👇👇👇\n` + EnableMessage + `\n\n`; 452 | } else { 453 | allMessage += `👇👇👇👇👇账号已恢复👇👇👇👇👇\n` + EnableMessage + `\n\n`; 454 | } 455 | } 456 | 457 | if (ErrorMessage) { 458 | allMessage += `👇👇👇👇👇失效账号👇👇👇👇👇\n` + ErrorMessage + `\n\n`; 459 | } else { 460 | allMessage += `👇👇👇👇👇失效账号👇👇👇👇👇\n 一个失效的都没有呢,羡慕啊...\n\n`; 461 | } 462 | 463 | if (ShowSuccess == "true" && SuccessMessage) { 464 | allMessage += `👇👇👇👇👇有效账号👇👇👇👇👇\n` + SuccessMessage + `\n`; 465 | } 466 | 467 | if (NoWarnError == "true") { 468 | OErrorMessage = ""; 469 | } 470 | 471 | if ($.isNode() && (EnableMessage || DisableMessage || OErrorMessage || CKAlwaysNotify == "true")) { 472 | console.log("京东CK检测:"); 473 | console.log(allMessage); 474 | if (strAllNotify) 475 | allMessage += `\n` + strAllNotify; 476 | 477 | await notify.sendNotify(`${$.name}`, `${allMessage}`, { 478 | url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean` 479 | }) 480 | } 481 | 482 | } 483 | 484 | })() 485 | .catch((e) => $.logErr(e)) 486 | .finally(() => $.done()) 487 | 488 | function TotalBean() { 489 | return new Promise(async resolve => { 490 | const options = { 491 | url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion", 492 | headers: { 493 | Host: "me-api.jd.com", 494 | Accept: "*/*", 495 | Connection: "keep-alive", 496 | Cookie: cookie, 497 | "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), 498 | "Accept-Language": "zh-cn", 499 | "Referer": "https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&", 500 | "Accept-Encoding": "gzip, deflate, br" 501 | } 502 | } 503 | $.get(options, (err, resp, data) => { 504 | try { 505 | if (err) { 506 | // $.logErr(err) 507 | $.nickName = decodeURIComponent($.UserName); 508 | $.NoReturn = `${$.nickName} :` + `${JSON.stringify(err)}\n`; 509 | } else { 510 | if (data) { 511 | data = JSON.parse(data); 512 | if (data['retcode'] === "1001") { 513 | $.isLogin = false; //cookie过期 514 | $.nickName = decodeURIComponent($.UserName); 515 | return; 516 | } 517 | if (data['retcode'] === "0" && data.data && data.data.hasOwnProperty("userInfo")) { 518 | $.nickName = (data.data.userInfo.baseInfo.nickname); 519 | } else { 520 | $.nickName = decodeURIComponent($.UserName); 521 | console.log("Debug Code:" + data['retcode']); 522 | $.NoReturn = `${$.nickName} :` + `服务器返回未知状态,不做变动\n`; 523 | } 524 | } else { 525 | $.nickName = decodeURIComponent($.UserName); 526 | $.log('京东服务器返回空数据'); 527 | $.NoReturn = `${$.nickName} :` + `服务器返回空数据,不做变动\n`; 528 | } 529 | } 530 | } catch (e) { 531 | $.nickName = decodeURIComponent($.UserName); 532 | // $.logErr(e) 533 | $.NoReturn = `${$.nickName} : 检测出错,不做变动\n`; 534 | } finally { 535 | resolve(); 536 | } 537 | }) 538 | }) 539 | } 540 | 541 | function isLoginByX1a0He() { 542 | return new Promise((resolve) => { 543 | const options = { 544 | url: 'https://plogin.m.jd.com/cgi-bin/ml/islogin', 545 | headers: { 546 | "Cookie": cookie, 547 | "referer": "https://h5.m.jd.com/", 548 | "User-Agent": "jdapp;iPhone;10.1.2;15.0;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 549 | }, 550 | } 551 | $.get(options, (err, resp, data) => { 552 | try { 553 | if (data) { 554 | data = JSON.parse(data); 555 | if (data.islogin === "1") { 556 | console.log(`使用X1a0He写的接口加强检测: Cookie有效\n`) 557 | } else if (data.islogin === "0") { 558 | $.isLogin = false; 559 | console.log(`使用X1a0He写的接口加强检测: Cookie无效\n`) 560 | } else { 561 | console.log(`使用X1a0He写的接口加强检测: 未知返回,不作变更...\n`) 562 | $.error = `${$.nickName} :` + `使用X1a0He写的接口加强检测: 未知返回...\n` 563 | } 564 | } 565 | } catch (e) { 566 | console.log(e); 567 | } finally { 568 | resolve(); 569 | } 570 | }); 571 | }); 572 | } 573 | 574 | function jsonParse(str) { 575 | if (typeof str == "string") { 576 | try { 577 | return JSON.parse(str); 578 | } catch (e) { 579 | console.log(e); 580 | $.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie') 581 | return []; 582 | } 583 | } 584 | } 585 | 586 | // prettier-ignore 587 | function Env(t, e) { 588 | "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); 589 | 590 | class s { 591 | constructor(t) { 592 | this.env = t 593 | } 594 | 595 | send(t, e = "GET") { 596 | t = "string" == typeof t ? { 597 | url: t 598 | } 599 | : t; 600 | let s = this.get; 601 | return "POST" === e && (s = this.post), 602 | new Promise((e, i) => { 603 | s.call(this, t, (t, s, r) => { 604 | t ? i(t) : e(s) 605 | }) 606 | }) 607 | } 608 | 609 | get(t) { 610 | return this.send.call(this.env, t) 611 | } 612 | 613 | post(t) { 614 | return this.send.call(this.env, t, "POST") 615 | } 616 | } 617 | 618 | return new class { 619 | constructor(t, e) { 620 | this.name = t, 621 | this.http = new s(this), 622 | this.data = null, 623 | this.dataFile = "box.dat", 624 | this.logs = [], 625 | this.isMute = !1, 626 | this.isNeedRewrite = !1, 627 | this.logSeparator = "\n", 628 | this.startTime = (new Date).getTime(), 629 | Object.assign(this, e), 630 | this.log("", `🔔${this.name}, 开始!`) 631 | } 632 | 633 | isNode() { 634 | return "undefined" != typeof module && !!module.exports 635 | } 636 | 637 | isQuanX() { 638 | return "undefined" != typeof $task 639 | } 640 | 641 | isSurge() { 642 | return "undefined" != typeof $httpClient && "undefined" == typeof $loon 643 | } 644 | 645 | isLoon() { 646 | return "undefined" != typeof $loon 647 | } 648 | 649 | toObj(t, e = null) { 650 | try { 651 | return JSON.parse(t) 652 | } catch { 653 | return e 654 | } 655 | } 656 | 657 | toStr(t, e = null) { 658 | try { 659 | return JSON.stringify(t) 660 | } catch { 661 | return e 662 | } 663 | } 664 | 665 | getjson(t, e) { 666 | let s = e; 667 | const i = this.getdata(t); 668 | if (i) 669 | try { 670 | s = JSON.parse(this.getdata(t)) 671 | } catch { 672 | } 673 | return s 674 | } 675 | 676 | setjson(t, e) { 677 | try { 678 | return this.setdata(JSON.stringify(t), e) 679 | } catch { 680 | return !1 681 | } 682 | } 683 | 684 | getScript(t) { 685 | return new Promise(e => { 686 | this.get({ 687 | url: t 688 | }, (t, s, i) => e(i)) 689 | }) 690 | } 691 | 692 | runScript(t, e) { 693 | return new Promise(s => { 694 | let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); 695 | i = i ? i.replace(/\n/g, "").trim() : i; 696 | let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); 697 | r = r ? 1 * r : 20, 698 | r = e && e.timeout ? e.timeout : r; 699 | const [o, h] = i.split("@"), 700 | n = { 701 | url: `http://${h}/v1/scripting/evaluate`, 702 | body: { 703 | script_text: t, 704 | mock_type: "cron", 705 | timeout: r 706 | }, 707 | headers: { 708 | "X-Key": o, 709 | Accept: "*/*" 710 | } 711 | }; 712 | this.post(n, (t, e, i) => s(i)) 713 | }).catch(t => this.logErr(t)) 714 | } 715 | 716 | loaddata() { 717 | if (!this.isNode()) 718 | return {}; 719 | { 720 | this.fs = this.fs ? this.fs : require("fs"), 721 | this.path = this.path ? this.path : require("path"); 722 | const t = this.path.resolve(this.dataFile), 723 | e = this.path.resolve(process.cwd(), this.dataFile), 724 | s = this.fs.existsSync(t), 725 | i = !s && this.fs.existsSync(e); 726 | if (!s && !i) 727 | return {}; 728 | { 729 | const i = s ? t : e; 730 | try { 731 | return JSON.parse(this.fs.readFileSync(i)) 732 | } catch (t) { 733 | return {} 734 | } 735 | } 736 | } 737 | } 738 | 739 | writedata() { 740 | if (this.isNode()) { 741 | this.fs = this.fs ? this.fs : require("fs"), 742 | this.path = this.path ? this.path : require("path"); 743 | const t = this.path.resolve(this.dataFile), 744 | e = this.path.resolve(process.cwd(), this.dataFile), 745 | s = this.fs.existsSync(t), 746 | i = !s && this.fs.existsSync(e), 747 | r = JSON.stringify(this.data); 748 | s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) 749 | } 750 | } 751 | 752 | lodash_get(t, e, s) { 753 | const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); 754 | let r = t; 755 | for (const t of i) 756 | if (r = Object(r)[t], void 0 === r) 757 | return s; 758 | return r 759 | } 760 | 761 | lodash_set(t, e, s) { 762 | return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) 763 | } 764 | 765 | getdata(t) { 766 | let e = this.getval(t); 767 | if (/^@/.test(t)) { 768 | const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), 769 | r = s ? this.getval(s) : ""; 770 | if (r) 771 | try { 772 | const t = JSON.parse(r); 773 | e = t ? this.lodash_get(t, i, "") : e 774 | } catch (t) { 775 | e = "" 776 | } 777 | } 778 | return e 779 | } 780 | 781 | setdata(t, e) { 782 | let s = !1; 783 | if (/^@/.test(e)) { 784 | const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), 785 | o = this.getval(i), 786 | h = i ? "null" === o ? null : o || "{}" : "{}"; 787 | try { 788 | const e = JSON.parse(h); 789 | this.lodash_set(e, r, t), 790 | s = this.setval(JSON.stringify(e), i) 791 | } catch (e) { 792 | const o = {}; 793 | this.lodash_set(o, r, t), 794 | s = this.setval(JSON.stringify(o), i) 795 | } 796 | } else 797 | s = this.setval(t, e); 798 | return s 799 | } 800 | 801 | getval(t) { 802 | return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null 803 | } 804 | 805 | setval(t, e) { 806 | return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null 807 | } 808 | 809 | initGotEnv(t) { 810 | this.got = this.got ? this.got : require("got"), 811 | this.cktough = this.cktough ? this.cktough : require("tough-cookie"), 812 | this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, 813 | t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) 814 | } 815 | 816 | get(t, e = (() => { 817 | })) { 818 | t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), 819 | this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { 820 | "X-Surge-Skip-Scripting": !1 821 | })), $httpClient.get(t, (t, s, i) => { 822 | !t && s && (s.body = i, s.statusCode = s.status), 823 | e(t, s, i) 824 | })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { 825 | hints: !1 826 | })), $task.fetch(t).then(t => { 827 | const { 828 | statusCode: s, 829 | statusCode: i, 830 | headers: r, 831 | body: o 832 | } = t; 833 | e(null, { 834 | status: s, 835 | statusCode: i, 836 | headers: r, 837 | body: o 838 | }, o) 839 | }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { 840 | try { 841 | if (t.headers["set-cookie"]) { 842 | const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); 843 | s && this.ckjar.setCookieSync(s, null), 844 | e.cookieJar = this.ckjar 845 | } 846 | } catch (t) { 847 | this.logErr(t) 848 | } 849 | }).then(t => { 850 | const { 851 | statusCode: s, 852 | statusCode: i, 853 | headers: r, 854 | body: o 855 | } = t; 856 | e(null, { 857 | status: s, 858 | statusCode: i, 859 | headers: r, 860 | body: o 861 | }, o) 862 | }, t => { 863 | const { 864 | message: s, 865 | response: i 866 | } = t; 867 | e(s, i, i && i.body) 868 | })) 869 | } 870 | 871 | post(t, e = (() => { 872 | })) { 873 | if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) 874 | this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { 875 | "X-Surge-Skip-Scripting": !1 876 | })), $httpClient.post(t, (t, s, i) => { 877 | !t && s && (s.body = i, s.statusCode = s.status), 878 | e(t, s, i) 879 | }); 880 | else if (this.isQuanX()) 881 | t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { 882 | hints: !1 883 | })), $task.fetch(t).then(t => { 884 | const { 885 | statusCode: s, 886 | statusCode: i, 887 | headers: r, 888 | body: o 889 | } = t; 890 | e(null, { 891 | status: s, 892 | statusCode: i, 893 | headers: r, 894 | body: o 895 | }, o) 896 | }, t => e(t)); 897 | else if (this.isNode()) { 898 | this.initGotEnv(t); 899 | const { 900 | url: s, 901 | ...i 902 | } = t; 903 | this.got.post(s, i).then(t => { 904 | const { 905 | statusCode: s, 906 | statusCode: i, 907 | headers: r, 908 | body: o 909 | } = t; 910 | e(null, { 911 | status: s, 912 | statusCode: i, 913 | headers: r, 914 | body: o 915 | }, o) 916 | }, t => { 917 | const { 918 | message: s, 919 | response: i 920 | } = t; 921 | e(s, i, i && i.body) 922 | }) 923 | } 924 | } 925 | 926 | time(t, e = null) { 927 | const s = e ? new Date(e) : new Date; 928 | let i = { 929 | "M+": s.getMonth() + 1, 930 | "d+": s.getDate(), 931 | "H+": s.getHours(), 932 | "m+": s.getMinutes(), 933 | "s+": s.getSeconds(), 934 | "q+": Math.floor((s.getMonth() + 3) / 3), 935 | S: s.getMilliseconds() 936 | }; 937 | /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); 938 | for (let e in i) 939 | new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); 940 | return t 941 | } 942 | 943 | msg(e = t, s = "", i = "", r) { 944 | const o = t => { 945 | if (!t) 946 | return t; 947 | if ("string" == typeof t) 948 | return this.isLoon() ? t : this.isQuanX() ? { 949 | "open-url": t 950 | } 951 | : this.isSurge() ? { 952 | url: t 953 | } 954 | : void 0; 955 | if ("object" == typeof t) { 956 | if (this.isLoon()) { 957 | let e = t.openUrl || t.url || t["open-url"], 958 | s = t.mediaUrl || t["media-url"]; 959 | return { 960 | openUrl: e, 961 | mediaUrl: s 962 | } 963 | } 964 | if (this.isQuanX()) { 965 | let e = t["open-url"] || t.url || t.openUrl, 966 | s = t["media-url"] || t.mediaUrl; 967 | return { 968 | "open-url": e, 969 | "media-url": s 970 | } 971 | } 972 | if (this.isSurge()) { 973 | let e = t.url || t.openUrl || t["open-url"]; 974 | return { 975 | url: e 976 | } 977 | } 978 | } 979 | }; 980 | if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { 981 | let t = ["", "==============📣系统通知📣=============="]; 982 | t.push(e), 983 | s && t.push(s), 984 | i && t.push(i), 985 | console.log(t.join("\n")), 986 | this.logs = this.logs.concat(t) 987 | } 988 | } 989 | 990 | log(...t) { 991 | t.length > 0 && (this.logs = [...this.logs, ...t]), 992 | console.log(t.join(this.logSeparator)) 993 | } 994 | 995 | logErr(t, e) { 996 | const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); 997 | s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) 998 | } 999 | 1000 | wait(t) { 1001 | return new Promise(e => setTimeout(e, t)) 1002 | } 1003 | 1004 | done(t = {}) { 1005 | const e = (new Date).getTime(), 1006 | s = (e - this.startTime) / 1e3; 1007 | this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), 1008 | this.log(), 1009 | (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) 1010 | } 1011 | } 1012 | (t, e) 1013 | } -------------------------------------------------------------------------------- /jd_bean_info.js: -------------------------------------------------------------------------------- 1 | /** 2 | 京豆详情统计 3 | cron "2 2 29 2 *" jd_bean_info.js 4 | */ 5 | 6 | const $ = new Env('京豆详情统计'); 7 | const notify = $.isNode() ? require('./sendNotify') : ''; 8 | const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; 9 | let allMessage = '' 10 | let myMap = new Map(); 11 | let allBean = 0; 12 | let cookiesArr = [], cookie = ''; 13 | 14 | if ($.isNode()) { 15 | Object.keys(jdCookieNode).forEach((item) => { 16 | cookiesArr.push(jdCookieNode[item]) 17 | }) 18 | if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { 19 | }; 20 | } else { 21 | cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item); 22 | } 23 | 24 | !(async () => { 25 | if (!cookiesArr[0]) { 26 | $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); 27 | return; 28 | } 29 | for (let i = 0; i < cookiesArr.length; i++) { 30 | if (cookiesArr[i]) { 31 | cookie = cookiesArr[i]; 32 | $.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]) 33 | $.index = i + 1; 34 | $.beanCount = 0; 35 | $.incomeBean = 0; 36 | $.expenseBean = 0; 37 | $.todayIncomeBean = 0; 38 | $.errorMsg = ''; 39 | $.isLogin = true; 40 | $.nickName = ''; 41 | $.message = ''; 42 | $.balance = 0; 43 | $.expiredBalance = 0; 44 | //await TotalBean(); 45 | console.log(`\n********开始【京东账号${$.index}】${$.nickName || $.UserName}******\n`); 46 | if (!$.isLogin) { 47 | $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"}); 48 | 49 | if ($.isNode()) { 50 | await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`); 51 | } 52 | continue 53 | } 54 | 55 | await bean(); 56 | await $.wait(parseInt(Math.random() * 1000 + 1000, 10)); 57 | await showMsg(); 58 | } 59 | 60 | await $.wait(parseInt(Math.random() * 15000 + 60000, 10)); 61 | } 62 | allMessage += `\n今日全部账号收入:${allBean}个京豆 🐶\n` 63 | if ($.isNode() && allMessage) { 64 | await notify.sendNotify(`${$.name}`, `${allMessage}`, {url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean`}) 65 | } 66 | })() 67 | .catch((e) => { 68 | // $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') 69 | }) 70 | .finally(() => { 71 | $.done(); 72 | }) 73 | 74 | async function showMsg() { 75 | if ($.errorMsg) return 76 | 77 | try { 78 | allMessage += `\n【账号${$.index}:${$.nickName || $.UserName} 京豆详情统计】\n\n`; 79 | $.message += `\n【账号${$.index}:${$.nickName || $.UserName} 京豆详情统计】\n\n`; 80 | allMessage += `今日收入:${$.todayIncomeBean}个京豆 🐶\n` 81 | $.message += `今日收入:${$.todayIncomeBean}个京豆 🐶\n` 82 | allBean = allBean + parseInt($.todayIncomeBean) 83 | for (let key of myMap.keys()) { 84 | allMessage += key + ' ---> ' + myMap.get(key) + '京豆 🐶\n' 85 | $.message += key + ' ---> ' + myMap.get(key) + '京豆 🐶\n' 86 | } 87 | myMap = new Map() 88 | console.log($.message); 89 | // if ($.isNode()) { 90 | // await notify.sendNotify(`${$.name} - 账号${$.index} - ${$.nickName}`, `账号${$.index}:${$.nickName || $.UserName}\n昨日收入:${$.incomeBean}京豆 🐶\n昨日支出:${$.expenseBean}京豆 🐶\n当前京豆:${$.beanCount}京豆 🐶${$.message}`, { url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean` }) 91 | // } 92 | // $.msg($.name, '', `账号${$.index}:${$.nickName || $.UserName}\n今日收入:${$.todayIncomeBean}京豆 🐶\n昨日收入:${$.incomeBean}京豆 🐶\n昨日支出:${$.expenseBean}京豆 🐶\n当前京豆:${$.beanCount}(七天将过期${$.expirejingdou})京豆🐶${$.message}`, {"open-url": "https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean", "media-url": "https://raw.githubusercontent.com/Orz-3/mini/master/Color/jd.png"}); 93 | } catch (e) { 94 | console.log(e.message) 95 | } 96 | } 97 | 98 | async function bean() { 99 | try { 100 | // console.log(`北京时间零点时间戳:${parseInt((Date.now() + 28800000) / 86400000) * 86400000 - 28800000}`); 101 | // console.log(`北京时间2020-10-28 06:16:05::${new Date("2020/10/28 06:16:05+08:00").getTime()}`) 102 | // 不管哪个时区。得到都是当前时刻北京时间的时间戳 new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000 103 | //前一天的0:0:0时间戳 104 | const tm = parseInt((Date.now() + 28800000) / 86400000) * 86400000 - 28800000 - (24 * 60 * 60 * 1000); 105 | // 今天0:0:0时间戳 106 | const tm1 = parseInt((Date.now() + 28800000) / 86400000) * 86400000 - 28800000; 107 | let page = 1, t = 0, yesterdayArr = [], todayArr = []; 108 | do { 109 | let response = await getJingBeanBalanceDetail(page); 110 | await $.wait(parseInt(Math.random() * 1000 + 200, 10)); 111 | 112 | // console.log(`第${page}页: ${JSON.stringify(response)}`); 113 | if (response && response.code === "0") { 114 | page++; 115 | let detailList = response.detailList; 116 | if (detailList && detailList.length > 0) { 117 | for (let item of detailList) { 118 | const date = item.date.replace(/-/g, '/') + "+08:00"; 119 | if (new Date(date).getTime() >= tm1 && (!item['eventMassage'].includes("退还") && !item['eventMassage'].includes('扣赠'))) { 120 | todayArr.push(item); 121 | } else if (tm <= new Date(date).getTime() && new Date(date).getTime() < tm1 && (!item['eventMassage'].includes("退还") && !item['eventMassage'].includes('扣赠'))) { 122 | //昨日的 123 | yesterdayArr.push(item); 124 | } else if (tm > new Date(date).getTime()) { 125 | //前天的 126 | t = 1; 127 | break; 128 | } 129 | } 130 | } else { 131 | $.errorMsg = `数据异常`; 132 | // $.msg($.name, ``, `账号${$.index}:${$.nickName}\n${$.errorMsg}`); 133 | t = 1; 134 | } 135 | } else if (response && response.code === "3") { 136 | // console.log(`cookie已过期,或者填写不规范,跳出`) 137 | t = 1; 138 | } else { 139 | // console.log(`未知情况:${JSON.stringify(response)}`); 140 | // console.log(`未知情况,跳出`) 141 | t = 1; 142 | } 143 | } while (t === 0); 144 | for (let item of yesterdayArr) { 145 | if (Number(item.amount) > 0) { 146 | $.incomeBean += Number(item.amount); 147 | } else if (Number(item.amount) < 0) { 148 | $.expenseBean += Number(item.amount); 149 | } 150 | } 151 | for (let item of todayArr) { 152 | if (Number(item.amount) > 0) { 153 | $.todayIncomeBean += Number(item.amount); 154 | myMap.set(item.eventMassage, 0) 155 | } 156 | } 157 | for (let item of todayArr) { 158 | if (Number(item.amount) > 0) { 159 | myMap.set(item.eventMassage, parseInt(myMap.get(item.eventMassage)) + parseInt(item.amount)) 160 | } 161 | } 162 | // console.log(myMap) 163 | // await queryexpirejingdou();//过期京豆 164 | // await redPacket();//过期红包 165 | // console.log(`今日收入:${$.todayIncomeBean}个京豆 🐶`); 166 | // console.log(`昨日支出:${$.expenseBean}个京豆 🐶`) 167 | } catch (e) { 168 | 169 | } 170 | } 171 | 172 | function TotalBean() { 173 | return new Promise(async resolve => { 174 | const options = { 175 | url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion", 176 | headers: { 177 | Host: "me-api.jd.com", 178 | Accept: "*/*", 179 | Connection: "keep-alive", 180 | Cookie: cookie, 181 | "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), 182 | "Accept-Language": "zh-cn", 183 | "Referer": "https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&", 184 | "Accept-Encoding": "gzip, deflate, br" 185 | } 186 | } 187 | $.get(options, (err, resp, data) => { 188 | try { 189 | if (err) { 190 | // $.logErr(err) 191 | } else { 192 | if (data) { 193 | data = JSON.parse(data); 194 | if (data['retcode'] === "1001") { 195 | $.isLogin = false; //cookie过期 196 | return; 197 | } 198 | if (data['retcode'] === "0" && data.data && data.data.hasOwnProperty("userInfo")) { 199 | $.nickName = data.data.userInfo.baseInfo.nickname; 200 | } 201 | if (data['retcode'] === '0' && data.data && data.data['assetInfo']) { 202 | $.beanCount = data.data && data.data['assetInfo']['beanNum']; 203 | } 204 | } else { 205 | $.log('京东服务器返回空数据'); 206 | } 207 | } 208 | } catch (e) { 209 | // $.logErr(e) 210 | } finally { 211 | resolve(); 212 | } 213 | }) 214 | }) 215 | } 216 | 217 | function getJingBeanBalanceDetail(page) { 218 | return new Promise(async resolve => { 219 | const options = { 220 | "url": `https://api.m.jd.com/client.action?functionId=getJingBeanBalanceDetail`, 221 | "body": `body=${escape(JSON.stringify({"pageSize": "20", "page": page.toString()}))}&appid=ld`, 222 | "headers": { 223 | 'User-Agent': $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"), 224 | 'Host': 'api.m.jd.com', 225 | 'Content-Type': 'application/x-www-form-urlencoded', 226 | 'Cookie': cookie, 227 | } 228 | } 229 | await $.wait(200); 230 | $.post(options, (err, resp, data) => { 231 | try { 232 | if (err) { 233 | // console.log(`${JSON.stringify(err)}`) 234 | // console.log(`${$.name} API请求失败,请检查网路重试`) 235 | } else { 236 | if (data) { 237 | data = JSON.parse(data); 238 | // console.log(data) 239 | } else { 240 | // console.log(`京东服务器返回空数据`) 241 | } 242 | } 243 | } catch (e) { 244 | // $.logErr(e, resp) 245 | } finally { 246 | resolve(data); 247 | } 248 | }) 249 | }) 250 | } 251 | 252 | function queryexpirejingdou() { 253 | return new Promise(async resolve => { 254 | const options = { 255 | "url": `https://wq.jd.com/activep3/singjd/queryexpirejingdou?_=${Date.now()}&g_login_type=1&sceneval=2`, 256 | "headers": { 257 | "Accept": "*/*", 258 | "Accept-Encoding": "gzip, deflate, br", 259 | "Accept-Language": "zh-cn", 260 | "Connection": "keep-alive", 261 | "Cookie": cookie, 262 | "Host": "wq.jd.com", 263 | "Referer": "https://wqs.jd.com/promote/201801/bean/mybean.html", 264 | "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Mobile/15E148 Safari/604.1" 265 | } 266 | } 267 | $.expirejingdou = 0; 268 | $.get(options, (err, resp, data) => { 269 | try { 270 | if (err) { 271 | // console.log(`${JSON.stringify(err)}`) 272 | // console.log(`${$.name} API请求失败,请检查网路重试`) 273 | } else { 274 | if (data) { 275 | // console.log(data) 276 | data = JSON.parse(data.slice(23, -13)); 277 | // console.log(data) 278 | if (data.ret === 0) { 279 | data['expirejingdou'].map(item => { 280 | // console.log(`${timeFormat(item['time'] * 1000)}日过期京豆:${item['expireamount']}\n`); 281 | $.expirejingdou += item['expireamount']; 282 | }) 283 | // if ($.expirejingdou > 0) { 284 | // $.message += `\n今日将过期:${$.expirejingdou}京豆 🐶`; 285 | // } 286 | } 287 | } else { 288 | // console.log(`京东服务器返回空数据`) 289 | } 290 | } 291 | } catch (e) { 292 | // $.logErr(e, resp) 293 | } finally { 294 | resolve(); 295 | } 296 | }) 297 | }) 298 | } 299 | 300 | function jsonParse(str) { 301 | if (typeof str == "string") { 302 | try { 303 | return JSON.parse(str); 304 | } catch (e) { 305 | // console.log(e); 306 | // $.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie') 307 | return []; 308 | } 309 | } 310 | } 311 | 312 | // prettier-ignore 313 | function Env(t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, i) => { s.call(this, t, (t, s, r) => { t ? i(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const i = this.getdata(t); if (i) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, i) => e(i)) }) } runScript(t, e) { return new Promise(s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(n, (t, e, i) => s(i)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const o = {}; this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) } } else s = this.setval(t, e); return s } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null } setval(t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) })) } post(t, e = (() => { })) { if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } msg(e = t, s = "", i = "", r) { const o = t => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s } } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } } }; if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } -------------------------------------------------------------------------------- /jd_deps.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | #依赖安装,运行一次就好 3 | #2 2 29 2 * jd_deps.sh 4 | #new Env('依赖安装') 5 | # 6 | 7 | npm_ver=$(pnpm -v | awk -F. '{print $1}') 8 | if [[ $npm_ver -ge 7 ]]; then 9 | export PNPM_HOME="/root/.local/share/pnpm" 10 | export PATH="$PNPM_HOME:$PATH" 11 | fi 12 | 13 | echo -e "安装脚本所需依赖,不一定一次全部安装成功,请自己检查\n" 14 | echo -e "开始安装............\n" 15 | 16 | #apk add g++ make pixman-dev pango-dev cairo-dev pkgconf --no-cache 17 | apk add g++ make --no-cache 18 | pnpm config set registry https://registry.npmmirror.com 19 | pnpm install -g redis@4.6.10 20 | pnpm install -g ds 21 | pnpm install -g png-js 22 | pnpm install -g date-fns 23 | pnpm install -g axios@1.6.7 24 | pnpm install -g crypto-js 25 | pnpm install -g tunnel 26 | pnpm install -g js-base64 27 | pnpm install -g ts-md5 28 | pnpm install -g tslib 29 | pnpm install -g global-agent 30 | pnpm install -g @types/node 31 | pnpm install -g request 32 | pnpm install -g jsdom 33 | pnpm install -g moment 34 | pnpm install -g cheerio 35 | pnpm install -g dotenv 36 | pnpm install -g got@11.8.6 37 | pnpm install -g tough-cookie 38 | pnpm install -g https-proxy-agent@7.0.4 39 | pnpm install -g console-table-printer@2.12.0 40 | pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jieba 41 | pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests 42 | rm -rf /usr/local/pnpm-global/5/node_modules/.pnpm/canvas* 43 | rm -rf /root/.local/share/pnpm/global/5/.pnpm/canvas* 44 | echo -e "\n所需依赖安装完成,请检查有没有报错,可尝试再次运行" -------------------------------------------------------------------------------- /jd_disables.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | """ 3 | cron: 20 9 * * * 4 | new Env('禁用重复任务'); 5 | """ 6 | 7 | import json 8 | import logging 9 | import os 10 | from re import findall 11 | import sys,re 12 | import time 13 | import traceback 14 | import requests 15 | 16 | logger = logging.getLogger(name=None) # 创建一个日志对象 17 | logging.Formatter("%(message)s") # 日志内容格式化 18 | logger.setLevel(logging.INFO) # 设置日志等级 19 | logger.addHandler(logging.StreamHandler()) # 添加控制台日志 20 | # logger.addHandler(logging.FileHandler(filename="text.log", mode="w")) # 添加文件日志 21 | 22 | 23 | ipport = os.getenv("IPPORT") 24 | if not ipport: 25 | logger.info( 26 | "如果报错请在环境变量中添加你的真实 IP:端口\n名称:IPPORT\t值:127.0.0.1:5700\n或在 config.sh 中添加 export IPPORT='127.0.0.1:5700'" 27 | ) 28 | ipport = "localhost:5700" 29 | else: 30 | ipport = ipport.lstrip("http://").rstrip("/") 31 | sub_str = os.getenv("RES_SUB", "feverrun_my_scripts") 32 | sub_list = sub_str.split("&") 33 | res_only = os.getenv("RES_ONLY", True) 34 | headers = { 35 | "Accept": "application/json", 36 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", 37 | } 38 | 39 | 40 | def load_send() -> None: 41 | logger.info("加载推送功能中...") 42 | global send 43 | send = None 44 | cur_path = os.path.abspath(os.path.dirname(__file__)) 45 | sys.path.append(cur_path) 46 | if os.path.exists(cur_path + "/notify.py"): 47 | try: 48 | from notify import send 49 | except Exception: 50 | send = None 51 | logger.info(f"❌加载通知服务失败!!!\n{traceback.format_exc()}") 52 | 53 | 54 | def get_tasklist() -> list: 55 | tasklist = [] 56 | t = round(time.time() * 1000) 57 | url = f"http://{ipport}/api/crons?searchValue=&t={t}" 58 | response = requests.get(url=url, headers=headers) 59 | datas = json.loads(response.content.decode("utf-8")) 60 | if datas.get("code") == 200: 61 | try: 62 | tasklist = datas.get("data").get("data") 63 | except Exception: 64 | tasklist = datas.get("data") 65 | return tasklist 66 | 67 | 68 | def filter_res_sub(tasklist: list) -> tuple: 69 | filter_list = [] 70 | res_list = [] 71 | for task in tasklist: 72 | for sub in sub_list: 73 | if task.get("command").find(sub) == -1: 74 | flag = False 75 | else: 76 | flag = True 77 | break 78 | if flag: 79 | res_list.append(task) 80 | else: 81 | filter_list.append(task) 82 | return filter_list, res_list 83 | 84 | 85 | def get_index(lst: list, item: str) -> list: 86 | return [index for (index, value) in enumerate(lst) if value == item] 87 | 88 | 89 | def get_duplicate_list(tasklist: list) -> tuple: 90 | logger.info("\n=== 第一轮初筛开始 ===") 91 | 92 | ids = [] 93 | names = [] 94 | cmds = [] 95 | for task in tasklist: 96 | ids.append(task.get("_id", task.get("id"))) 97 | names.append(task.get("name")) 98 | cmds.append(task.get("command")) 99 | 100 | name_list = [] 101 | for i, name in enumerate(names): 102 | if name not in name_list: 103 | name_list.append(name) 104 | 105 | tem_tasks = [] 106 | tem_ids = [] 107 | dup_ids = [] 108 | for name2 in name_list: 109 | name_index = get_index(names, name2) 110 | for i in range(len(name_index)): 111 | if i == 0: 112 | logger.info(f"【✅保留】{cmds[name_index[0]]}") 113 | tem_tasks.append(tasklist[name_index[0]]) 114 | tem_ids.append(ids[name_index[0]]) 115 | else: 116 | logger.info(f"【🚫禁用】{cmds[name_index[i]]}") 117 | dup_ids.append(ids[name_index[i]]) 118 | logger.info("") 119 | 120 | logger.info("=== 第一轮初筛结束 ===") 121 | 122 | return tem_ids, tem_tasks, dup_ids 123 | 124 | 125 | def reserve_task_only( 126 | tem_ids: list, tem_tasks: list, dup_ids: list, res_list: list 127 | ) -> list: 128 | if len(tem_ids) == 0: 129 | return tem_ids 130 | 131 | logger.info("\n=== 最终筛选开始 ===") 132 | task3 = None 133 | for task1 in tem_tasks: 134 | for task2 in res_list: 135 | if task1.get("name") == task2.get("name"): 136 | dup_ids.append(task1.get("_id", task1.get("id"))) 137 | logger.info(f"【✅保留】{task2.get('command')}") 138 | task3 = task1 139 | if task3: 140 | logger.info(f"【🚫禁用】{task3.get('command')}\n") 141 | task3 = None 142 | logger.info("=== 最终筛选结束 ===") 143 | return dup_ids 144 | 145 | 146 | def disable_duplicate_tasks(ids: list) -> None: 147 | t = round(time.time() * 1000) 148 | url = f"http://{ipport}/api/crons/disable?t={t}" 149 | data = json.dumps(ids) 150 | headers["Content-Type"] = "application/json;charset=UTF-8" 151 | response = requests.put(url=url, headers=headers, data=data) 152 | datas = json.loads(response.content.decode("utf-8")) 153 | if datas.get("code") != 200: 154 | logger.info(f"❌出错!!!错误信息为:{datas}") 155 | else: 156 | logger.info("🎉成功禁用重复任务~") 157 | 158 | 159 | def get_token() -> str or None: 160 | path = '/ql/config/auth.json' # 设置青龙 auth文件地址 161 | path1 = '/ql/data/config/auth.json' 162 | path2 = '/ql/data/db/keyv.sqlite' 163 | global flag1 164 | flag1 = True 165 | if not os.path.isfile(path): 166 | path = path1 # 尝试设置青龙 auth 新版文件地址 167 | flag1 = False 168 | if os.path.isfile(path2): 169 | with open(path2, "r", encoding="latin1") as f1: 170 | content = f1.read() 171 | matches = re.search(r'token":"([^"]+)"', content) 172 | token = matches.group(1) 173 | return token 174 | else: 175 | try: 176 | with open(path, "r", encoding="utf-8") as f: 177 | data = json.load(f) 178 | except Exception: 179 | logger.info(f"❌无法获取 token!!!\n{traceback.format_exc()}") 180 | send("💔禁用重复任务失败", "无法获取 token!!!") 181 | exit(1) 182 | return data.get("token") 183 | 184 | 185 | if __name__ == "__main__": 186 | logger.info("===> 禁用重复任务开始 <===") 187 | load_send() 188 | token = get_token() 189 | headers["Authorization"] = f"Bearer {token}" 190 | 191 | # 获取过滤后的任务列表 192 | sub_str = "\n".join(sub_list) 193 | logger.info(f"\n=== 你选择过滤的任务前缀为 ===\n{sub_str}") 194 | tasklist = get_tasklist() 195 | if len(tasklist) == 0: 196 | logger.info("❌无法获取 tasklist!!!") 197 | exit(1) 198 | filter_list, res_list = filter_res_sub(tasklist) 199 | 200 | tem_ids, tem_tasks, dup_ids = get_duplicate_list(filter_list) 201 | # 是否在重复任务中只保留设置的前缀 202 | if res_only: 203 | ids = reserve_task_only(tem_ids, tem_tasks, dup_ids, res_list) 204 | else: 205 | ids = dup_ids 206 | logger.info("你选择保留除了设置的前缀以外的其他任务") 207 | 208 | sum = f"所有任务数量为:{len(tasklist)}" 209 | filter = f"过滤的任务数量为:{len(res_list)}" 210 | disable = f"禁用的任务数量为:{len(ids)}" 211 | logging.info("\n=== 禁用数量统计 ===\n" + sum + "\n" + filter + "\n" + disable) 212 | 213 | if len(ids) == 0: 214 | logger.info("😁没有重复任务~") 215 | else: 216 | disable_duplicate_tasks(ids) 217 | # if send: 218 | # send("💖禁用重复任务成功", f"\n{sum}\n{filter}\n{disable}") 219 | -------------------------------------------------------------------------------- /jd_wsck.py: -------------------------------------------------------------------------------- 1 | from requests import get, post, put, packages 2 | import requests 3 | from re import findall 4 | from os.path import exists 5 | import json 6 | import os 7 | import sys,re 8 | import random,time 9 | import base64 10 | import hashlib 11 | import urllib.parse 12 | import uuid 13 | 14 | packages.urllib3.disable_warnings() 15 | from urllib.parse import unquote 16 | """ 17 | new Env('wskey本地转换'); 18 | 20 20 * * * jd_wsck.py 19 | by:lonesomexz 20 | """ 21 | hadsend=True 22 | UserAgent="" 23 | 24 | def printf(text): 25 | print(text) 26 | sys.stdout.flush() 27 | 28 | def randomuserAgent(): 29 | global struuid,addressid,iosVer,iosV,clientVersion,iPhone,area,ADID,lng,lat 30 | global UserAgent 31 | struuid=''.join(random.sample(['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','0','1','2','3','4','5','6','7','8','9','a','b','c','z'], 40)) 32 | addressid = ''.join(random.sample('1234567898647', 10)) 33 | iosVer = ''.join(random.sample(["15.1.1","14.5.1", "14.4", "14.3", "14.2", "14.1", "14.0.1"], 1)) 34 | iosV = iosVer.replace('.', '_') 35 | clientVersion=''.join(random.sample(["10.3.0", "10.2.7", "10.2.4"], 1)) 36 | iPhone = ''.join(random.sample(["8", "9", "10", "11", "12", "13"], 1)) 37 | area=''.join(random.sample('0123456789', 2)) + '_' + ''.join(random.sample('0123456789', 4)) + '_' + ''.join(random.sample('0123456789', 5)) + '_' + ''.join(random.sample('0123456789', 5)) 38 | ADID = ''.join(random.sample('0987654321ABCDEF', 8)) + '-' + ''.join(random.sample('0987654321ABCDEF', 4)) + '-' + ''.join(random.sample('0987654321ABCDEF', 4)) + '-' + ''.join(random.sample('0987654321ABCDEF', 4)) + '-' + ''.join(random.sample('0987654321ABCDEF', 12)) 39 | lng='119.31991256596'+str(random.randint(100,999)) 40 | lat='26.1187118976'+str(random.randint(100,999)) 41 | UserAgent=f'jdapp;iPhone;10.0.4;{iosVer};{uuid};network/wifi;ADID/{ADID};model/iPhone{iPhone},1;addressid/{addressid};appBuild/167707;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS {iosV} like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/null;supportJDSHWK/1' 42 | 43 | 44 | def get_proxy_api(proxy_url, max_retries=5, timeout=60, retry_delay=1): 45 | for retry in range(max_retries): 46 | res = get(url=proxy_url) 47 | printf(f"本次获取到的代理:{res.text}") 48 | proxy_ip_port = res.text.strip() 49 | proxy_address = f"http://{proxy_ip_port}" 50 | 51 | try: 52 | response = get("https://jd.com", proxies={"http": proxy_address, "https": proxy_address}, timeout=timeout) 53 | if response.status_code == 200: 54 | return proxy_address 55 | except Exception as e: 56 | printf(f"代理检测失败,错误信息:{e}") 57 | 58 | printf("代理检测失败,重新获取...") 59 | time.sleep(retry_delay) 60 | 61 | printf("无法获取可用的代理IP,尝试次数已达上限。") 62 | return None 63 | 64 | 65 | 66 | def load_send(): 67 | global send 68 | global hadsend 69 | cur_path = os.path.abspath(os.path.dirname(__file__)) 70 | sys.path.append(cur_path) 71 | if os.path.exists(cur_path + "/sendNotify.py"): 72 | try: 73 | from sendNotify import send 74 | hadsend=True 75 | except: 76 | printf("加载sendNotify.py的通知服务失败,请检查~") 77 | hadsend=False 78 | else: 79 | printf("加载通知服务失败,缺少sendNotify.py文件") 80 | hadsend=False 81 | load_send() 82 | 83 | def send_notification(title, content,summary): 84 | # Add your own WxPusher API key here 85 | api_key = os.environ["WP_APP_TOKEN_ONE"] 86 | uids= os.environ["WP_APP_MAIN_UID"] 87 | desp = '''
89 |
92 |
93 |

94 | texttext 95 |

96 |
97 |
98 |
101 |
104 |

105 | 📢 106 |

107 |
108 |
109 |
110 |
111 |
112 |

113 | despdesp 114 |

115 |
116 |
117 |
''' 118 | desp=desp.replace("texttext",title) 119 | desp=desp.replace("despdesp" ,content.replace("\n", '
')) 120 | 121 | 122 | payload = {"appToken": api_key, 123 | "content": desp, 124 | "summary": title+"\n"+summary, 125 | "contentType": 2, 126 | "uids": [uids] 127 | } 128 | 129 | # Send the request 130 | res = requests.post('http://wxpusher.zjiecode.com/api/send/message', json=payload, timeout=15).json() 131 | if res["code"]==1000: 132 | printf("WxPusher 发送通知消息成功!") 133 | else: 134 | printf(res.text) 135 | 136 | 137 | def randomstr(num): 138 | #randomstr = ''.join(str(uuid.uuid4()).split('-'))[num:] 139 | randomstr = ''.join(str(uuid.uuid4()).split('-')) 140 | return randomstr 141 | 142 | def randomstr1(num): 143 | randomstr = "" 144 | for i in range(num): 145 | randomstr = randomstr + random.choice("abcdefghijklmnopqrstuvwxyz0123456789") 146 | return randomstr 147 | 148 | def sign_core(inarg): 149 | key = b'80306f4370b39fd5630ad0529f77adb6' 150 | mask = [0x37, 0x92, 0x44, 0x68, 0xA5, 0x3D, 0xCC, 0x7F, 0xBB, 0xF, 0xD9, 0x88, 0xEE, 0x9A, 0xE9, 0x5A] 151 | array = [0 for _ in range(len(inarg))] 152 | for i in range(len(inarg)): 153 | r0 = int(inarg[i]) 154 | r2 = mask[i & 0xf] 155 | r4 = int(key[i & 7]) 156 | r0 = r2 ^ r0 157 | r0 = r0 ^ r4 158 | r0 = r0 + r2 159 | r2 = r2 ^ r0 160 | r1 = int(key[i & 7]) 161 | r2 = r2 ^ r1 162 | array[i] = r2 & 0xff 163 | return bytes(array) 164 | 165 | def base64Encode(string): 166 | return base64.b64encode(string.encode("utf-8")).decode('utf-8').translate(str.maketrans("KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")) 167 | 168 | def base64Decode(string): 169 | return base64.b64decode(string.translate(str.maketrans("KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"))).decode('utf-8') 170 | 171 | def randomeid(): 172 | return 'eidAaf8081218as20a2GM%s7FnfQYOecyDYLcd0rfzm3Fy2ePY4UJJOeV0Ub840kG8C7lmIqt3DTlc11fB/s4qsAP8gtPTSoxu' % randomstr1(20) 173 | 174 | def get_ep(jduuid : str=''): 175 | if not jduuid: 176 | jduuid = randomstr(16) 177 | ts = str(int(time.time() * 1000)) 178 | bsjduuid = base64Encode(jduuid) 179 | area = base64Encode('%s_%s_%s_%s' % ( 180 | random.randint(1, 10000), random.randint(1, 10000), random.randint(1, 10000), random.randint(1, 10000))) 181 | d_model = random.choice(['Mi11Ultra', 'Mi11', 'Mi10']) 182 | d_model = base64Encode(d_model) 183 | return '{"hdid":"JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=","ts":%s,"ridx":-1,"cipher":{"area":"%s","d_model":"%s","wifiBssid":"dW5hbw93bq==","osVersion":"CJS=","d_brand":"WQvrb21f","screen":"CtS1DIenCNqm","uuid":"%s","aid":"%s","openudid":"%s"},"ciphertype":5,"version":"1.2.0","appname":"com.jingdong.app.mall"}' % ( 184 | int(ts) - random.randint(100, 1000), area, d_model, bsjduuid, bsjduuid, bsjduuid), jduuid, ts 185 | 186 | def get_sign(functionId, body, client : str="android", clientVersion : str='11.2.8',jduuid : str='') -> dict: 187 | if isinstance(body,dict): 188 | d=body 189 | body=json.dumps(body) 190 | else: 191 | d=json.loads(body) 192 | 193 | if "eid" in d: 194 | eid=d["eid"] 195 | else: 196 | eid=randomeid() 197 | 198 | ep, suid, st = get_ep(jduuid) 199 | sv = random.choice(["102", "111", "120"]) 200 | all_arg = "functionId=%s&body=%s&uuid=%s&client=%s&clientVersion=%s&st=%s&sv=%s" % (functionId, body, suid, client, clientVersion, st, sv) 201 | back_bytes = sign_core(str.encode(all_arg)) 202 | sign = hashlib.md5(base64.b64encode(back_bytes)).hexdigest() 203 | #convertUrl='body=%s&clientVersion=%s&client=%s&sdkVersion=31&lang=zh_CN&harmonyOs=0&networkType=wifi&oaid=%s&eid=%s&ef=1&ep=%s&st=%s&sign=%s&sv=%s' % (body, clientVersion, client, suid, eid, urllib.parse.quote(ep), st, sign, sv) 204 | convertUrl='body=%s&clientVersion=%s&client=%s&sdkVersion=31&lang=zh_CN&harmonyOs=0&networkType=wifi&oaid=%s&ef=1&ep=%s&st=%s&sign=%s&sv=%s' % (body, clientVersion, client, suid, urllib.parse.quote(ep), st, sign, sv) 205 | return convertUrl 206 | 207 | def get_sign_diy(pin): 208 | url = signapi 209 | body_content = {"url": "https://plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html"} 210 | data_json = { 211 | 'fn': 'genToken', 212 | 'body': json.dumps(body_content) 213 | } 214 | headers_json = {"Content-Type": "application/json"} 215 | 216 | # 尝试发送 JSON 数据 217 | try: 218 | response = requests.post(url=url, headers=headers_json, json=data_json, verify=False) 219 | response.raise_for_status() 220 | sign = response.json() 221 | if 'body' not in sign: 222 | raise ValueError("JSON 响应中不含 'body' 字段") 223 | return sign['body'] 224 | except (requests.HTTPError, ValueError) as e: 225 | #printf(f"尝试发送 JSON 数据失败或响应中没有 'body': {e}") 226 | try: 227 | headers_form = {"Content-Type": "application/x-www-form-urlencoded"} 228 | data_form = { 229 | 'functionId': 'genToken', 230 | 'body': json.dumps(body_content) 231 | } 232 | response = requests.post(url=url, headers=headers_form, data=data_form, verify=False) 233 | response.raise_for_status() 234 | sign = response.json()['data'] 235 | # 再次检查响应中是否包含 'body' 字段 236 | if 'body' not in sign: 237 | raise ValueError("表单响应中不含 'body' 字段") 238 | return sign['convertUrl'] 239 | except Exception as e2: 240 | printf(f"尝试获取 {unquote(pin)} 的签名时出错:\n{e2}") 241 | return sign 242 | 243 | def getcookie_wskey(key): 244 | proxys = proxy_url 245 | if os.environ.get("WSKEY_PROXY_URL") is not None: 246 | proxys = get_proxy_api(proxy_url) 247 | 248 | body = "body=%7B%22to%22%3A%22https%3A//plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html%22%7D" 249 | pin = findall("pin=([^;]*);", key)[0] 250 | 251 | for num in range(0,5): 252 | sign = get_sign("genToken",{"url": "https://plogin.m.jd.com/jd-mlogin/static/html/appjmp_blank.html"},"android","11.2.8") 253 | #sign = get_sign_diy(pin) 254 | if not sign: 255 | continue 256 | url = f"http://api.m.jd.com/client.action?functionId=genToken&{sign}" 257 | headers = { 258 | "cookie": key, 259 | 'user-agent': UserAgent, 260 | 'accept-language': 'zh-Hans-CN;q=1, en-CN;q=0.9', 261 | 'content-type': 'application/x-www-form-urlencoded;' 262 | } 263 | try: 264 | token = post(url=url, headers=headers, data=body, verify=False, proxies={"http": proxys, "https": proxys}).json() 265 | token=token['tokenKey'] 266 | except Exception as error: 267 | printf(f"【警告】{unquote(pin)}在获取token时失败,等待5秒后重试") 268 | time.sleep(5) 269 | if num == 4: 270 | printf(f"【错误】{unquote(pin)}在获取token时:\n{error}") 271 | return pin, "False" 272 | randomuserAgent() 273 | if os.environ.get("WSKEY_PROXY_URL") is not None: 274 | proxys = get_proxy_api(proxy_url) 275 | continue 276 | 277 | if token!="xxx": 278 | break 279 | else: 280 | printf(f"【警告】{unquote(pin)}在获取token时失败,等待5秒后重试") 281 | time.sleep(5) 282 | randomuserAgent() 283 | if os.environ.get("WSKEY_PROXY_URL") is not None: 284 | proxys = get_proxy_api(proxy_url) 285 | 286 | if token=="xxx": 287 | printf(f"【错误】{unquote(pin)}在获取token时失败,跳过") 288 | return "Error" 289 | 290 | for num in range(0, 5): 291 | url = 'https://un.m.jd.com/cgi-bin/app/appjmp' 292 | params = { 293 | 'tokenKey': token, 294 | 'to': 'https://plogin.m.jd.com/cgi-bin/m/thirdapp_auth_page', 295 | 'client_type': 'android', 296 | 'appid': 879, 297 | 'appup_type': 1, 298 | } 299 | try: 300 | res = get(url=url, params=params, verify=False, 301 | allow_redirects=False, proxies={"http": proxys, "https": proxys}).cookies.get_dict() 302 | except Exception as error: 303 | printf(f"【警告】{unquote(pin)}在获取cookie时失败,等待5秒后重试") 304 | time.sleep(5) 305 | if num == 4: 306 | # 最后一次重试时输出错误消息并返回 "Error" 307 | printf(f"【错误】{unquote(pin)}在获取cookie时:\n{error}") 308 | return "Error" 309 | randomuserAgent() 310 | if os.environ.get("WSKEY_PROXY_URL") is not None: 311 | proxys = get_proxy_api(proxy_url) 312 | continue 313 | 314 | try: 315 | if "app_open" in res['pt_key']: 316 | cookie = f"pt_key={res['pt_key']};pt_pin={res['pt_pin']};" 317 | return cookie 318 | else: 319 | return ("Error:"+str(res)) 320 | except Exception as error: 321 | printf(f"【错误】{unquote(pin)}在获取cookie时:\n{str(res)}") 322 | return "Error" 323 | 324 | def wskey_getwskey(): 325 | possible_paths = ['/wskey/config/account.json', '/jd/config/account.json'] 326 | 327 | for wskey_file in possible_paths: 328 | if os.path.isfile(wskey_file): 329 | with open(wskey_file, 'r') as f: 330 | data = json.load(f) 331 | 332 | json_data = [] 333 | for item in data: 334 | # 跳过空的 pt_pin 或 ws_key 335 | if not item['pt_pin'] or not item['ws_key']: 336 | continue 337 | pt_pin = item['pt_pin'] 338 | ws_key = item['ws_key'] 339 | remarks = item['remarks'][0] if item['remarks'] else '' 340 | json_item = f"pin={pt_pin};wskey={ws_key};" 341 | json_data.append((json_item, remarks)) 342 | return json_data 343 | return [] 344 | 345 | def wskey_subcookie(cookie, token): 346 | url = 'http://127.0.0.1:5678/openApi/updateCookie' 347 | headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ', 'api-token': f'{token}'} 348 | data = { 349 | "cookie": cookie 350 | } 351 | res = post(url, data=json.dumps(data), headers=headers).json() 352 | return res 353 | 354 | def subcookie(pt_pin, cookie, token): 355 | if True: 356 | reamrk="" 357 | if token!="": 358 | strptpin=pt_pin 359 | if re.search('%', strptpin): 360 | strptpin = unquote(strptpin, 'utf-8') 361 | url = 'http://127.0.0.1:5600/api/envs' 362 | headers = {'Authorization': f'Bearer {token}'} 363 | body = { 364 | 'searchValue': pt_pin, 365 | 'Authorization': f'Bearer {token}' 366 | } 367 | datas = get(url, params=body, headers=headers).json()['data'] 368 | old = False 369 | isline=True 370 | for data in datas: 371 | if "pt_key" in data['value']: 372 | try: 373 | body = {"name": "JD_COOKIE", "value": cookie, "_id": data['_id']} 374 | except: 375 | body = {"name": "JD_COOKIE", "value": cookie, "id": data['id']} 376 | isline=False 377 | old = True 378 | try: 379 | reamrk=data['remarks'] 380 | except: 381 | reamrk="" 382 | 383 | if reamrk!="" and not reamrk is None: 384 | strptpin=strptpin+"("+reamrk.split("@@")[0]+")" 385 | 386 | if old: 387 | put(url, json=body, headers=headers) 388 | url = 'http://127.0.0.1:5600/api/envs/enable' 389 | if isline: 390 | body = [body['_id']] 391 | else: 392 | body = [body['id']] 393 | put(url, json=body, headers=headers) 394 | printf(f"更新成功:{strptpin}") 395 | else: 396 | body = [{"value": cookie, "name": "JD_COOKIE"}] 397 | post(url, json=body, headers=headers) 398 | printf(f"新增成功:{strptpin}") 399 | 400 | def getRemark(pt_pin,token): 401 | reamrk="" 402 | if re.search('%', pt_pin): 403 | strreturn=unquote(pt_pin, 'utf-8') 404 | else: 405 | strreturn=pt_pin 406 | 407 | if token!="": 408 | url = 'http://127.0.0.1:5600/api/envs' 409 | headers = {'Authorization': f'Bearer {token}'} 410 | body = { 411 | 'searchValue': pt_pin, 412 | 'Authorization': f'Bearer {token}' 413 | } 414 | datas = get(url, params=body, headers=headers).json()['data'] 415 | for data in datas: 416 | if "pt_key" in data['value']: 417 | try: 418 | reamrk=data['remarks'] 419 | break 420 | except: 421 | pass 422 | if not reamrk is None and reamrk!="": 423 | strreturn=strreturn+"("+reamrk.split("@@")[0]+")" 424 | 425 | return strreturn 426 | 427 | def main(): 428 | printf("版本: 20230602") 429 | printf("说明: 如果用Wxpusher通知需配置WP_APP_TOKEN_ONE和WP_APP_MAIN_UID,其中WP_APP_MAIN_UID是你的Wxpusher UID") 430 | printf("隧道型代理池接口:export WSKEY_PROXY_TUNNRL='http://127.0.0.1:123456'") 431 | printf("拉取型代理API接口(数据格式:txt;提取数量:每次一个):export WSKEY_PROXY_URL='http://xxx.com/apiUrl'") 432 | printf("没有代理可以自行注册,比如携趣,巨量,每日免费1000IP,完全够用") 433 | printf("====================================") 434 | config="" 435 | envtype="" 436 | global proxy_url 437 | proxy_url=os.environ.get("WSKEY_PROXY_URL") or os.environ.get("WSKEY_PROXY_TUNNRL") or None 438 | iswxpusher=False 439 | counttime=0 440 | 441 | if os.path.exists("/ql/config/auth.json"): 442 | config="/ql/config/auth.json" 443 | envtype="ql" 444 | 445 | if os.path.exists("/ql/data/config/auth.json"): 446 | config="/ql/data/config/auth.json" 447 | envtype="ql" 448 | 449 | if os.path.exists("/jd/config/auth.json"): 450 | config="/jd/config/auth.json" 451 | envtype="wskey" 452 | 453 | 454 | if os.path.exists("/wskey/config/auth.json"): 455 | config="/wskey/config/auth.json" 456 | envtype="wskey" 457 | 458 | if os.path.exists("/ql/data/db/keyv.sqlite"): 459 | config="/ql/data/db/keyv.sqlite" 460 | envtype="ql_latest" 461 | 462 | if config=="": 463 | printf(f"无法判断使用环境,退出脚本!") 464 | return 465 | try: 466 | if os.environ.get("WP_APP_TOKEN_ONE")==None or os.environ.get("WP_APP_MAIN_UID")==None: 467 | printf('没有配置Wxpusher相关变量,将调用sendNotify.py发送通知') 468 | else: 469 | if os.environ.get("WP_APP_TOKEN_ONE")=="" or os.environ.get("WP_APP_MAIN_UID")=="": 470 | printf('没有配置Wxpusher相关变量,将调用sendNotify.py发送通知') 471 | else: 472 | printf('检测到已配置Wxpusher相关变量,将使用Wxpusher发送通知') 473 | iswxpusher=True 474 | except: 475 | iswxpusher=False 476 | 477 | if proxy_url is None: 478 | printf("没有配置代理,无法使用代理!\n请配置环境变量WSKEY_PROXY_TUNNRL或WSKEY_PROXY_URL\n") 479 | printf("====================================") 480 | else: 481 | printf(f"已配置代理: {proxy_url}\n") 482 | 483 | resurt="" 484 | resurt1="" 485 | resurt2="" 486 | summary="" 487 | 488 | if envtype == "ql": 489 | with open(config, "r", encoding="utf-8") as f1: 490 | token = json.load(f1)['token'] 491 | url = 'http://127.0.0.1:5600/api/envs' 492 | headers = {'Authorization': f'Bearer {token}'} 493 | body = { 494 | 'searchValue': 'JD_WSCK', 495 | 'Authorization': f'Bearer {token}' 496 | } 497 | datas = get(url, params=body, headers=headers).json()['data'] 498 | elif envtype == "wskey": 499 | with open(config, "r", encoding="utf-8") as f1: 500 | #token = json.load(f1)['token'] 501 | data = json.load(f1) 502 | token = data.get('openApiToken', '') 503 | url = 'http://127.0.0.1:5678/openApi/count' 504 | headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ', 'api-token': f'{token}'} 505 | datas = get(url, headers=headers).json()["data"]["accountCount"] 506 | elif envtype == "ql_latest": 507 | with open(config, "r", encoding="latin1") as f1: 508 | content = f1.read() 509 | matches = re.search(r'token":"([^"]+)"', content) 510 | try: 511 | token = matches.group(1) 512 | except Exception as e: 513 | sys.exit(0) 514 | url = 'http://127.0.0.1:5600/api/envs' 515 | headers = {'Authorization': f'Bearer {token}'} 516 | body = { 517 | 'searchValue': 'JD_WSCK', 518 | 'Authorization': f'Bearer {token}' 519 | } 520 | datas = get(url, params=body, headers=headers).json()['data'] 521 | # printf(f"token:{token}") 522 | # printf(f"datas:{datas}") 523 | 524 | 525 | if datas > 0 if isinstance(datas, int) else len(datas) > 0: 526 | printf("\n===============开始转换JD_WSCK==============") 527 | else: 528 | printf("\n错误:没有需要转换的JD_WSCK,退出脚本!") 529 | return 530 | 531 | if envtype in ('ql','ql_latest'): 532 | for data in datas: 533 | randomuserAgent() 534 | if data['status']!=0: 535 | continue 536 | key = data['value'] 537 | pin = re.findall(r'(pin=([^; ]+)(?=;?))',key)[0][1] 538 | cookie = getcookie_wskey(key) 539 | if "app_open" in cookie: 540 | #printf("转换成功:"cookie) 541 | orgpin = cookie.split(";")[1].split("=")[1] 542 | subcookie(orgpin, cookie, token) 543 | newpin=getRemark(orgpin,token) 544 | resurt1=resurt1+f"转换成功:{newpin}\n" 545 | else: 546 | newpin=getRemark(pin,token) 547 | if "fake_" in cookie: 548 | message = f"pin为{newpin}的wskey过期了!" 549 | printf(message) 550 | url = 'http://127.0.0.1:5600/api/envs/disable' 551 | try: 552 | body = [data['_id']] 553 | except: 554 | body = [data['id']] 555 | put(url, json=body, headers=headers) 556 | printf(f"禁用成功:{newpin}") 557 | resurt2=resurt2+f"wskey已禁用:{newpin}\n" 558 | else: 559 | message = f"转换失败:{newpin}" 560 | resurt2=resurt2+f"转换失败:{newpin}\n" 561 | 562 | elif envtype == "wskey": 563 | wslist = wskey_getwskey() 564 | #printf(f"wslist:\n{wslist}") 565 | for ws,remark in wslist: 566 | randomuserAgent() 567 | pin = re.findall(r'(pin=([^; ]+)(?=;?))',ws)[0][1] 568 | printf(f"当前转换的pin:\n{pin}") 569 | cookie = getcookie_wskey(ws) 570 | printf(f"转换后的cookie:\n{cookie}\n") 571 | 572 | if "app_open" in cookie: 573 | #printf("转换成功:"cookie) 574 | res = wskey_subcookie(cookie, token) 575 | resurt1=resurt1+f"转换成功:{remark}@{pin}" 576 | if res["code"] == 1: 577 | resurt1=resurt1+f",面板同步成功! ✅\n" 578 | else: 579 | resurt1=resurt1+f",面板同步失败,token错误或者请求失败。 ❌\n" 580 | else: 581 | if "fake_" in cookie: 582 | message = f"{remark}@{pin},wskeyk可能过期了! ❌\n" 583 | printf(message) 584 | resurt2=resurt2+f"{remark}@{pin},wskeyk可能过期了! ❌\n" 585 | else: 586 | message = f"{remark}@{pin},转换失败! ❌" 587 | printf(message) 588 | resurt2=resurt2+f"{remark}@{pin},转换失败! ❌\n" 589 | 590 | 591 | if resurt2!="": 592 | resurt="👇👇👇👇👇转换异常👇👇👇👇👇\n"+resurt2+"\n" 593 | summary="部分CK转换异常" 594 | 595 | if resurt1!="": 596 | resurt=resurt+"👇👇👇👇👇转换成功👇👇👇👇👇\n"+resurt1 597 | if summary=="": 598 | summary="全部转换成功" 599 | 600 | if iswxpusher: 601 | send_notification("JD_WSCK转换结果",resurt,summary) 602 | else: 603 | if hadsend: 604 | send("JD_WSCK转换结果",resurt) 605 | else: 606 | printf("没有启用通知!") 607 | else: 608 | if resurt1!="": 609 | resurt=resurt+"👇👇👇👇👇转换成功👇👇👇👇👇\n"+resurt1 610 | 611 | if iswxpusher: 612 | send_notification("JD_WSCK转换结果",resurt,summary) 613 | else: 614 | if hadsend: 615 | send("JD_WSCK转换结果",resurt) 616 | else: 617 | printf("没有启用通知!") 618 | 619 | printf("\n===============转换结果==============\n") 620 | printf(resurt) 621 | 622 | if __name__ == '__main__': 623 | main() -------------------------------------------------------------------------------- /ql.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const got = require('got'); 4 | require('dotenv').config(); 5 | const { readFile } = require('fs/promises'); 6 | const fs = require('fs'); 7 | 8 | let authFile = fs.existsSync('/ql/data/db/keyv.sqlite') ? '/ql/data/db/keyv.sqlite' : ''; 9 | authFile = fs.existsSync('/ql/data/config/auth.json') && "/ql/data/config/auth.json" || fs.existsSync('/ql/config/auth.json') && "/ql/config/auth.json" || authFile; 10 | const api = got.extend({ 11 | prefixUrl: 'http://127.0.0.1:5600', 12 | retry: { limit: 0 }, 13 | }); 14 | 15 | async function getToken() { 16 | try{ 17 | const authConfig = JSON.parse(await readFile(authFile)); 18 | return authConfig.token; 19 | }catch (e) { 20 | const authConfig = (await readFile(authFile)).toString(); 21 | return authConfig.match(/"token":"(.*?)"/)[1]; 22 | } 23 | 24 | } 25 | 26 | module.exports.getEnvs = async () => { 27 | const token = await getToken(); 28 | const body = await api({ 29 | url: 'api/envs', 30 | searchParams: { 31 | searchValue: 'JD_COOKIE', 32 | t: Date.now(), 33 | }, 34 | headers: { 35 | Accept: 'application/json', 36 | authorization: `Bearer ${token}`, 37 | }, 38 | }).json(); 39 | return body.data; 40 | }; 41 | 42 | module.exports.getEnvsCount = async () => { 43 | const data = await this.getEnvs(); 44 | return data.length; 45 | }; 46 | 47 | module.exports.addEnv = async (cookie, remarks) => { 48 | const token = await getToken(); 49 | const body = await api({ 50 | method: 'post', 51 | url: 'api/envs', 52 | params: { t: Date.now() }, 53 | json: [{ 54 | name: 'JD_COOKIE', 55 | value: cookie, 56 | remarks, 57 | }], 58 | headers: { 59 | Accept: 'application/json', 60 | authorization: `Bearer ${token}`, 61 | 'Content-Type': 'application/json;charset=UTF-8', 62 | }, 63 | }).json(); 64 | return body; 65 | }; 66 | 67 | module.exports.updateEnv = async (cookie, eid, remarks) => { 68 | const token = await getToken(); 69 | const body = await api({ 70 | method: 'put', 71 | url: 'api/envs', 72 | params: { t: Date.now() }, 73 | json: { 74 | name: 'JD_COOKIE', 75 | value: cookie, 76 | _id: eid, 77 | remarks, 78 | }, 79 | headers: { 80 | Accept: 'application/json', 81 | authorization: `Bearer ${token}`, 82 | 'Content-Type': 'application/json;charset=UTF-8', 83 | }, 84 | }).json(); 85 | return body; 86 | }; 87 | 88 | module.exports.updateEnv11 = async (cookie, eid, remarks) => { 89 | const token = await getToken(); 90 | const body = await api({ 91 | method: 'put', 92 | url: 'api/envs', 93 | params: { t: Date.now() }, 94 | json: { 95 | name: 'JD_COOKIE', 96 | value: cookie, 97 | id: eid, 98 | remarks, 99 | }, 100 | headers: { 101 | Accept: 'application/json', 102 | authorization: `Bearer ${token}`, 103 | 'Content-Type': 'application/json;charset=UTF-8', 104 | }, 105 | }).json(); 106 | return body; 107 | }; 108 | 109 | module.exports.DisableCk = async (eid) => { 110 | const token = await getToken(); 111 | const body = await api({ 112 | method: 'put', 113 | url: 'api/envs/disable', 114 | params: { t: Date.now() }, 115 | body: JSON.stringify([eid]), 116 | headers: { 117 | Accept: 'application/json', 118 | authorization: `Bearer ${token}`, 119 | 'Content-Type': 'application/json;charset=UTF-8', 120 | }, 121 | }).json(); 122 | return body; 123 | }; 124 | 125 | module.exports.EnableCk = async (eid) => { 126 | const token = await getToken(); 127 | const body = await api({ 128 | method: 'put', 129 | url: 'api/envs/enable', 130 | params: { t: Date.now() }, 131 | body: JSON.stringify([eid]), 132 | headers: { 133 | Accept: 'application/json', 134 | authorization: `Bearer ${token}`, 135 | 'Content-Type': 'application/json;charset=UTF-8', 136 | }, 137 | }).json(); 138 | return body; 139 | }; 140 | 141 | module.exports.getstatus = async(eid) => { 142 | const envs = await this.getEnvs(); 143 | var tempid = 0; 144 | for (let i = 0; i < envs.length; i++) { 145 | tempid = 0; 146 | if (envs[i]._id) { 147 | tempid = envs[i]._id; 148 | } 149 | if (envs[i].id) { 150 | tempid = envs[i].id; 151 | } 152 | if (tempid == eid) { 153 | return envs[i].status; 154 | } 155 | } 156 | return 99; 157 | }; 158 | 159 | module.exports.getEnvById = async(eid) => { 160 | const envs = await this.getEnvs(); 161 | var tempid = 0; 162 | for (let i = 0; i < envs.length; i++) { 163 | tempid = 0; 164 | if (envs[i]._id) { 165 | tempid = envs[i]._id; 166 | } 167 | if (envs[i].id) { 168 | tempid = envs[i].id; 169 | } 170 | if (tempid == eid) { 171 | return envs[i].value; 172 | } 173 | } 174 | return ""; 175 | }; 176 | 177 | module.exports.getEnvByPtPin = async (Ptpin) => { 178 | const envs = await this.getEnvs(); 179 | for (let i = 0; i < envs.length; i++) { 180 | var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]); 181 | if(tempptpin==Ptpin){ 182 | return envs[i]; 183 | } 184 | } 185 | return ""; 186 | }; 187 | 188 | module.exports.delEnv = async (eid) => { 189 | const token = await getToken(); 190 | const body = await api({ 191 | method: 'delete', 192 | url: 'api/envs', 193 | params: { t: Date.now() }, 194 | body: JSON.stringify([eid]), 195 | headers: { 196 | Accept: 'application/json', 197 | authorization: `Bearer ${token}`, 198 | 'Content-Type': 'application/json;charset=UTF-8', 199 | }, 200 | }).json(); 201 | return body; 202 | }; -------------------------------------------------------------------------------- /sendNotify.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # _*_ coding:utf-8 _*_ 3 | 4 | from curses.ascii import FS 5 | import sys 6 | import os, re 7 | import requests 8 | import json 9 | import time 10 | import hmac 11 | import hashlib 12 | import base64 13 | import urllib.parse 14 | from requests.adapters import HTTPAdapter 15 | from urllib3.util import Retry 16 | 17 | cur_path = os.path.abspath(os.path.dirname(__file__)) 18 | root_path = os.path.split(cur_path)[0] 19 | sys.path.append(root_path) 20 | 21 | # 通知服务 22 | BARK = '' # bark服务,自行搜索; secrets可填; 23 | BARK_PUSH='' # bark自建服务器,要填完整链接,结尾的/不要 24 | PUSH_KEY = '' # Server酱的PUSH_KEY; secrets可填 25 | TG_BOT_TOKEN = '' # tg机器人的TG_BOT_TOKEN; secrets可填1407203283:AAG9rt-6RDaaX0HBLZQq0laNOh898iFYaRQ 26 | TG_USER_ID = '' # tg机器人的TG_USER_ID; secrets可填 1434078534 27 | TG_API_HOST='' # tg 代理api 28 | TG_PROXY_IP = '' # tg机器人的TG_PROXY_IP; secrets可填 29 | TG_PROXY_PORT = '' # tg机器人的TG_PROXY_PORT; secrets可填 30 | DD_BOT_TOKEN = '' # 钉钉机器人的DD_BOT_TOKEN; secrets可填 31 | DD_BOT_SECRET = '' # 钉钉机器人的DD_BOT_SECRET; secrets可填 32 | QQ_SKEY = '' # qq机器人的QQ_SKEY; secrets可填 33 | QQ_MODE = '' # qq机器人的QQ_MODE; secrets可填 34 | QYWX_AM = '' # 企业微信 35 | QYWX_KEY = '' # 企业微信BOT 36 | PUSH_PLUS_TOKEN = '' # 微信推送Plus+ 37 | FS_KEY = '' #飞书群BOT 38 | 39 | notify_mode = [] 40 | 41 | message_info = '''''' 42 | 43 | # GitHub action运行需要填写对应的secrets 44 | if "BARK" in os.environ and os.environ["BARK"]: 45 | BARK = os.environ["BARK"] 46 | if "BARK_PUSH" in os.environ and os.environ["BARK_PUSH"]: 47 | BARK_PUSH = os.environ["BARK_PUSH"] 48 | if "PUSH_KEY" in os.environ and os.environ["PUSH_KEY"]: 49 | PUSH_KEY = os.environ["PUSH_KEY"] 50 | if "TG_BOT_TOKEN" in os.environ and os.environ["TG_BOT_TOKEN"] and "TG_USER_ID" in os.environ and os.environ["TG_USER_ID"]: 51 | TG_BOT_TOKEN = os.environ["TG_BOT_TOKEN"] 52 | TG_USER_ID = os.environ["TG_USER_ID"] 53 | if "TG_API_HOST" in os.environ and os.environ["TG_API_HOST"]: 54 | TG_API_HOST = os.environ["TG_API_HOST"] 55 | if "DD_BOT_TOKEN" in os.environ and os.environ["DD_BOT_TOKEN"] and "DD_BOT_SECRET" in os.environ and os.environ["DD_BOT_SECRET"]: 56 | DD_BOT_TOKEN = os.environ["DD_BOT_TOKEN"] 57 | DD_BOT_SECRET = os.environ["DD_BOT_SECRET"] 58 | if "QQ_SKEY" in os.environ and os.environ["QQ_SKEY"] and "QQ_MODE" in os.environ and os.environ["QQ_MODE"]: 59 | QQ_SKEY = os.environ["QQ_SKEY"] 60 | QQ_MODE = os.environ["QQ_MODE"] 61 | # 获取pushplus+ PUSH_PLUS_TOKEN 62 | if "PUSH_PLUS_TOKEN" in os.environ: 63 | if len(os.environ["PUSH_PLUS_TOKEN"]) > 1: 64 | PUSH_PLUS_TOKEN = os.environ["PUSH_PLUS_TOKEN"] 65 | # print("已获取并使用Env环境 PUSH_PLUS_TOKEN") 66 | # 获取企业微信应用推送 QYWX_AM 67 | if "QYWX_AM" in os.environ: 68 | if len(os.environ["QYWX_AM"]) > 1: 69 | QYWX_AM = os.environ["QYWX_AM"] 70 | 71 | 72 | if "QYWX_KEY" in os.environ: 73 | if len(os.environ["QYWX_KEY"]) > 1: 74 | QYWX_KEY = os.environ["QYWX_KEY"] 75 | # print("已获取并使用Env环境 QYWX_AM") 76 | 77 | #接入飞书webhook推送 78 | if "FS_KEY" in os.environ: 79 | if len(os.environ["FS_KEY"]) > 1: 80 | FS_KEY = os.environ["FS_KEY"] 81 | 82 | 83 | if BARK: 84 | notify_mode.append('bark') 85 | # print("BARK 推送打开") 86 | if BARK_PUSH: 87 | notify_mode.append('bark') 88 | # print("BARK 推送打开") 89 | if PUSH_KEY: 90 | notify_mode.append('sc_key') 91 | # print("Server酱 推送打开") 92 | if TG_BOT_TOKEN and TG_USER_ID: 93 | notify_mode.append('telegram_bot') 94 | # print("Telegram 推送打开") 95 | if DD_BOT_TOKEN and DD_BOT_SECRET: 96 | notify_mode.append('dingding_bot') 97 | # print("钉钉机器人 推送打开") 98 | if QQ_SKEY and QQ_MODE: 99 | notify_mode.append('coolpush_bot') 100 | # print("QQ机器人 推送打开") 101 | 102 | if PUSH_PLUS_TOKEN: 103 | notify_mode.append('pushplus_bot') 104 | # print("微信推送Plus机器人 推送打开") 105 | if QYWX_AM: 106 | notify_mode.append('wecom_app') 107 | # print("企业微信机器人 推送打开") 108 | 109 | if QYWX_KEY: 110 | notify_mode.append('wecom_key') 111 | # print("企业微信机器人 推送打开") 112 | 113 | if FS_KEY: 114 | notify_mode.append('fs_key') 115 | # print("飞书机器人 推送打开") 116 | 117 | def message(str_msg): 118 | global message_info 119 | print(str_msg) 120 | message_info = "{}\n{}".format(message_info, str_msg) 121 | sys.stdout.flush() 122 | 123 | def bark(title, content): 124 | print("\n") 125 | if BARK: 126 | try: 127 | response = requests.get( 128 | f"""https://api.day.app/{BARK}/{title}/{urllib.parse.quote_plus(content)}""").json() 129 | if response['code'] == 200: 130 | print('推送成功!') 131 | else: 132 | print('推送失败!') 133 | except: 134 | print('推送失败!') 135 | if BARK_PUSH: 136 | try: 137 | response = requests.get( 138 | f"""{BARK_PUSH}/{title}/{urllib.parse.quote_plus(content)}""").json() 139 | if response['code'] == 200: 140 | print('推送成功!') 141 | else: 142 | print('推送失败!') 143 | except: 144 | print('推送失败!') 145 | print("bark服务启动") 146 | if BARK=='' and BARK_PUSH=='': 147 | print("bark服务的bark_token未设置!!\n取消推送") 148 | return 149 | 150 | def serverJ(title, content): 151 | print("\n") 152 | if not PUSH_KEY: 153 | print("server酱服务的PUSH_KEY未设置!!\n取消推送") 154 | return 155 | print("serverJ服务启动") 156 | data = { 157 | "text": title, 158 | "desp": content.replace("\n", "\n\n") 159 | } 160 | response = requests.post(f"https://sc.ftqq.com/{PUSH_KEY}.send", data=data).json() 161 | if response['errno'] == 0: 162 | print('推送成功!') 163 | else: 164 | print('推送失败!') 165 | 166 | # tg通知 167 | def telegram_bot(title, content): 168 | try: 169 | print("\n") 170 | bot_token = TG_BOT_TOKEN 171 | user_id = TG_USER_ID 172 | if not bot_token or not user_id: 173 | print("tg服务的bot_token或者user_id未设置!!\n取消推送") 174 | return 175 | print("tg服务启动") 176 | if TG_API_HOST: 177 | if 'http' in TG_API_HOST: 178 | url = f"{TG_API_HOST}/bot{TG_BOT_TOKEN}/sendMessage" 179 | else: 180 | url = f"https://{TG_API_HOST}/bot{TG_BOT_TOKEN}/sendMessage" 181 | else: 182 | url = f"https://api.telegram.org/bot{TG_BOT_TOKEN}/sendMessage" 183 | 184 | headers = {'Content-Type': 'application/x-www-form-urlencoded'} 185 | payload = {'chat_id': str(TG_USER_ID), 'text': f'{title}\n\n{content}', 'disable_web_page_preview': 'true'} 186 | proxies = None 187 | if TG_PROXY_IP and TG_PROXY_PORT: 188 | proxyStr = "http://{}:{}".format(TG_PROXY_IP, TG_PROXY_PORT) 189 | proxies = {"http": proxyStr, "https": proxyStr} 190 | try: 191 | response = requests.post(url=url, headers=headers, params=payload, proxies=proxies).json() 192 | except: 193 | print('推送失败!') 194 | if response['ok']: 195 | print('推送成功!') 196 | else: 197 | print('推送失败!') 198 | except Exception as e: 199 | print(e) 200 | 201 | def dingding_bot(title, content): 202 | timestamp = str(round(time.time() * 1000)) # 时间戳 203 | secret_enc = DD_BOT_SECRET.encode('utf-8') 204 | string_to_sign = '{}\n{}'.format(timestamp, DD_BOT_SECRET) 205 | string_to_sign_enc = string_to_sign.encode('utf-8') 206 | hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() 207 | sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) # 签名 208 | print('开始使用 钉钉机器人 推送消息...', end='') 209 | url = f'https://oapi.dingtalk.com/robot/send?access_token={DD_BOT_TOKEN}×tamp={timestamp}&sign={sign}' 210 | headers = {'Content-Type': 'application/json;charset=utf-8'} 211 | data = { 212 | 'msgtype': 'text', 213 | 'text': {'content': f'{title}\n\n{content}'} 214 | } 215 | response = requests.post(url=url, data=json.dumps(data), headers=headers, timeout=15).json() 216 | if not response['errcode']: 217 | print('推送成功!') 218 | else: 219 | print('推送失败!') 220 | 221 | def coolpush_bot(title, content): 222 | print("\n") 223 | if not QQ_SKEY or not QQ_MODE: 224 | print("qq服务的QQ_SKEY或者QQ_MODE未设置!!\n取消推送") 225 | return 226 | print("qq服务启动") 227 | url=f"https://qmsg.zendee.cn/{QQ_MODE}/{QQ_SKEY}" 228 | payload = {'msg': f"{title}\n\n{content}".encode('utf-8')} 229 | response = requests.post(url=url, params=payload).json() 230 | if response['code'] == 0: 231 | print('推送成功!') 232 | else: 233 | print('推送失败!') 234 | # push推送 235 | def pushplus_bot(title, content): 236 | try: 237 | print("\n") 238 | if not PUSH_PLUS_TOKEN: 239 | print("PUSHPLUS服务的token未设置!!\n取消推送") 240 | return 241 | print("PUSHPLUS服务启动") 242 | url = 'http://www.pushplus.plus/send' 243 | data = { 244 | "token": PUSH_PLUS_TOKEN, 245 | "title": title, 246 | "content": content 247 | } 248 | body = json.dumps(data).encode(encoding='utf-8') 249 | headers = {'Content-Type': 'application/json'} 250 | response = requests.post(url=url, data=body, headers=headers).json() 251 | if response['code'] == 200: 252 | print('推送成功!') 253 | else: 254 | print('推送失败!') 255 | except Exception as e: 256 | print(e) 257 | 258 | 259 | def wecom_key(title, content): 260 | print("\n") 261 | if not QYWX_KEY: 262 | print("QYWX_KEY未设置!!\n取消推送") 263 | return 264 | print("QYWX_KEY服务启动") 265 | print("content"+content) 266 | headers = {'Content-Type': 'application/json'} 267 | data = { 268 | "msgtype":"text", 269 | "text":{ 270 | "content":title+"\n"+content.replace("\n", "\n\n") 271 | } 272 | } 273 | 274 | print(f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={QYWX_KEY}") 275 | response = requests.post(f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={QYWX_KEY}", json=data,headers=headers).json() 276 | print(response) 277 | 278 | # 飞书机器人推送 279 | def fs_key(title, content): 280 | print("\n") 281 | if not FS_KEY: 282 | print("FS_KEY未设置!!\n取消推送") 283 | return 284 | print("FS_KEY服务启动") 285 | print("content"+content) 286 | headers = {'Content-Type': 'application/json'} 287 | data = { 288 | "msg_type":"text", 289 | "content":{ 290 | "text":title+"\n"+content.replace("\n", "\n\n") 291 | } 292 | } 293 | 294 | print(f"https://open.feishu.cn/open-apis/bot/v2/hook/{FS_KEY}") 295 | response = requests.post(f"https://open.feishu.cn/open-apis/bot/v2/hook/{FS_KEY}", json=data,headers=headers).json() 296 | print(response) 297 | 298 | 299 | # 企业微信 APP 推送 300 | def wecom_app(title, content): 301 | try: 302 | if not QYWX_AM: 303 | print("QYWX_AM 并未设置!!\n取消推送") 304 | return 305 | QYWX_AM_AY = re.split(',', QYWX_AM) 306 | if 4 < len(QYWX_AM_AY) > 5: 307 | print("QYWX_AM 设置错误!!\n取消推送") 308 | return 309 | corpid = QYWX_AM_AY[0] 310 | corpsecret = QYWX_AM_AY[1] 311 | touser = QYWX_AM_AY[2] 312 | agentid = QYWX_AM_AY[3] 313 | try: 314 | media_id = QYWX_AM_AY[4] 315 | except: 316 | media_id = '' 317 | wx = WeCom(corpid, corpsecret, agentid) 318 | # 如果没有配置 media_id 默认就以 text 方式发送 319 | if not media_id: 320 | message = title + '\n\n' + content 321 | response = wx.send_text(message, touser) 322 | else: 323 | response = wx.send_mpnews(title, content, media_id, touser) 324 | if response == 'ok': 325 | print('推送成功!') 326 | else: 327 | print('推送失败!错误信息如下:\n', response) 328 | except Exception as e: 329 | print(e) 330 | 331 | class WeCom: 332 | def __init__(self, corpid, corpsecret, agentid): 333 | self.CORPID = corpid 334 | self.CORPSECRET = corpsecret 335 | self.AGENTID = agentid 336 | 337 | def get_access_token(self): 338 | url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken' 339 | values = {'corpid': self.CORPID, 340 | 'corpsecret': self.CORPSECRET, 341 | } 342 | req = requests.post(url, params=values) 343 | data = json.loads(req.text) 344 | return data["access_token"] 345 | 346 | def send_text(self, message, touser="@all"): 347 | send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.get_access_token() 348 | send_values = { 349 | "touser": touser, 350 | "msgtype": "text", 351 | "agentid": self.AGENTID, 352 | "text": { 353 | "content": message 354 | }, 355 | "safe": "0" 356 | } 357 | send_msges = (bytes(json.dumps(send_values), 'utf-8')) 358 | respone = requests.post(send_url, send_msges) 359 | respone = respone.json() 360 | return respone["errmsg"] 361 | 362 | def send_mpnews(self, title, message, media_id, touser="@all"): 363 | send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.get_access_token() 364 | send_values = { 365 | "touser": touser, 366 | "msgtype": "mpnews", 367 | "agentid": self.AGENTID, 368 | "mpnews": { 369 | "articles": [ 370 | { 371 | "title": title, 372 | "thumb_media_id": media_id, 373 | "author": "Author", 374 | "content_source_url": "", 375 | "content": message.replace('\n', '
'), 376 | "digest": message 377 | } 378 | ] 379 | } 380 | } 381 | send_msges = (bytes(json.dumps(send_values), 'utf-8')) 382 | respone = requests.post(send_url, send_msges) 383 | respone = respone.json() 384 | return respone["errmsg"] 385 | 386 | def send(title, content): 387 | """ 388 | 使用 bark, telegram bot, dingding bot, server, feishuJ 发送手机推送 389 | :param title: 390 | :param content: 391 | :return: 392 | """ 393 | 394 | for i in notify_mode: 395 | if i == 'bark': 396 | if BARK or BARK_PUSH: 397 | bark(title=title, content=content) 398 | else: 399 | print('未启用 bark') 400 | continue 401 | if i == 'sc_key': 402 | if PUSH_KEY: 403 | serverJ(title=title, content=content) 404 | else: 405 | print('未启用 Server酱') 406 | continue 407 | elif i == 'dingding_bot': 408 | if DD_BOT_TOKEN and DD_BOT_SECRET: 409 | dingding_bot(title=title, content=content) 410 | else: 411 | print('未启用 钉钉机器人') 412 | continue 413 | elif i == 'telegram_bot': 414 | if TG_BOT_TOKEN and TG_USER_ID: 415 | telegram_bot(title=title, content=content) 416 | else: 417 | print('未启用 telegram机器人') 418 | continue 419 | elif i == 'coolpush_bot': 420 | if QQ_SKEY and QQ_MODE: 421 | coolpush_bot(title=title, content=content) 422 | else: 423 | print('未启用 QQ机器人') 424 | continue 425 | elif i == 'pushplus_bot': 426 | if PUSH_PLUS_TOKEN: 427 | pushplus_bot(title=title, content=content) 428 | else: 429 | print('未启用 PUSHPLUS机器人') 430 | continue 431 | elif i == 'wecom_app': 432 | if QYWX_AM: 433 | wecom_app(title=title, content=content) 434 | else: 435 | print('未启用企业微信应用消息推送') 436 | continue 437 | elif i == 'wecom_key': 438 | if QYWX_KEY: 439 | 440 | for i in range(int(len(content)/2000)+1): 441 | wecom_key(title=title, content=content[i*2000:(i+1)*2000]) 442 | else: 443 | print('未启用企业微信应用消息推送') 444 | continue 445 | elif i == 'fs_key': 446 | if FS_KEY: 447 | fs_key(title=title, content=content) 448 | else: 449 | print('未启用飞书机器人消息推送') 450 | continue 451 | else: 452 | print('此类推送方式不存在') 453 | 454 | 455 | def main(): 456 | send('title', 'content') 457 | 458 | 459 | if __name__ == '__main__': 460 | main() -------------------------------------------------------------------------------- /utils/Rebels_jdCommon.js: -------------------------------------------------------------------------------- 1 | //此文件主要用来应对全局sendNotify差异导致依赖缺失问题 2 | //此文件主要用来应对全局sendNotify差异导致依赖缺失问题 3 | module.exports.genUA = function (ua=''){ 4 | return 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.49(0x1800312d) NetType/4G Language/zh_CN' 5 | } 6 | -------------------------------------------------------------------------------- /utils/baseCookie.js: -------------------------------------------------------------------------------- 1 | function setBaseCookie() { 2 | var cookie = []; 3 | 4 | function genUuid() { 5 | return new Date().getTime() + '' + parseInt(2147483647 * Math.random()); 6 | } 7 | 8 | function setCookie(e, t, i) { 9 | if (e) { 10 | var n = ''; 11 | if (i) { 12 | var a = new Date(); 13 | a.setTime(a.getTime() + i), (n = ';expires=' + a.toGMTString()); 14 | } 15 | document.cookie = e + '=' + t + n + ';path=/;domain=jd.com;'; 16 | } 17 | } 18 | 19 | function setJdv(e, t) { 20 | var i = isPrey(10) && (!e || e.length > 400) ? t + '|direct|-|none|-|' + new Date().getTime() : e; 21 | setCookie('__jdv', i, 1296000000); 22 | } 23 | 24 | function isPrey(e) { 25 | if (e >= 100) return !0; 26 | var t = uuid, 27 | r = t.substr(t.length - 2); 28 | return !!r && 1 * r < e; 29 | } 30 | 31 | var r = 122270672, 32 | i = genUuid(), 33 | s = parseInt(new Date().getTime() / 1e3); 34 | var uuid = i; 35 | 36 | setCookie('__jda', [r, i, s, s, s, 1].join('.'), 15552000000); 37 | setCookie('__jdb', [r, 1, i + '|' + 1, s].join('.'), 1800000); 38 | var j = encodeURIComponent([r, 'direct', '-', 'none', '-', new Date().getTime()].join('|')); 39 | setJdv(j, r); 40 | setCookie('__jdc', r); 41 | setCookie('mba_muid', encodeURI(i)); 42 | 43 | return cookie.join(''); 44 | } 45 | 46 | module.exports.setBaseCookie = setBaseCookie; -------------------------------------------------------------------------------- /utils/proenv/proecy.js: -------------------------------------------------------------------------------- 1 | function KsXcff(){}var FjC_oHp=Object['defineProperty'],WIc4UO,raFbxhl,rhTXpm0,fng0d4F,mZNHMw,wr8KPs,i07IrYp,xoZfVEG,Qhp6lXX,g527Gu9,vEki5fs,JQZZ8b,t0wJsib,O1GDvo2,FerNkj,tp02ba;function xStUEf(KsXcff){return WIc4UO[KsXcff>-0x29?KsXcff-0x5c:KsXcff>-0x29?KsXcff+0x38:KsXcff+0x5b]}WIc4UO=_sJl7g();var _9Q12Y4=[],idrfyMZ=['u<,1]Blm','>6w"7','|+`ngA(p^KNk[KI51O$n_a6#Chv#AtCw$5n$]Rb!phGH++=f+gu1u!Xt(_|sY:xM,vfwzJ{i`ZG]u52*Zh9)}o846_o`/`.HP+5AunS!CQ*cZtsM.(i*7zt1#YZm7x|"piq.3g5jajy?Yz<$ZcvUx|MK5#gpf$X_@Y7AbJW8?%^0?oq>Mp#D=WfdETBqp"pQrjREw_awtN32','gK,l;FP=M5Q~P?VIJf_7th^{AbMcNQxAD)|DB"vang:9ANL}hx6/03.gKerCA{5taci/^UBgxy}.ROyAh2#`{b%P%&yS:>ub]b<]m:d7zz?S;.6vVgDto~*J;|?=4$%15WB05bP>Ne75>lb=>/.XoCxN','1t+7Vv0u;J3U8','#|5XI#R','tf;[b','9WBO}6)%|pvgP','DAO_09>N','9cb:%vTQ`Jlk!','ll@y','@_t;r%R','oo4#eQ#N^|','|+D"[9C4gDk{4}','ns?fo(;U=','#sQ"3@2','vop8rZ6|OKi','wt]lGt2','|+Tg.~','/pa"','Bb:.xN;@[i*LBX4BF)4"b<{uWD#aa+@)0?1q`PuwCfQE"/G=(,}PqN.uX.|MUw[x|pWL[vz|^"*T.zu^Le2[W)~vjxVsGXUvEho.t_2','x}B~9P$.)8fJm6mOOhQ`ip[1&>9MyH0j"1gxs&o>k#*Isx}[=sH.@FRfM*dg|0ZQE5tHs]6`+",~x7J"fr,6mO|+HgU8N$1`%:t6bsr%=HMOSvG`+Ht6{>DCOKU]/c/Gq~b+$"=qn(o@p^yg.~','R!X"_@bbb}{/JgA)+s:.0Qv`X.kS>ZLjBJU*;Jv`qKnXG^/)t"8LSE88Y:CLy;;^lps*Y*7HSKsP&vu)4b*P7GM#.A%D6^HgF1ymcof@IfdEb6u)J1JzR$B`>f8&.}C)c"BZ:l}n*D`hPQvgF1!m;J0Q)KhcPv+jEBltf8&bXt?_VBN]_o=Km+',xStUEf(-0x59),'[}d*ukpBOoe:BG>SO_iFW~iNcpeFyu_Z$7#%;h2(}#ds4_U_apy@)BKTReeMuMgohMrRKY7*0zOM^"N_4Q@ixwx|G','AsIQUoGY4hG[76*kpMKMZNt^:Jy,&E_f*qhrECzVPEJaj$Uih.nNEzq8MMs`"cCbh/`N[!.UxuglDCg]*`Y"(m$~g%&"_pQcRx$JSBW!R8@9ht}(MsYRR4nu9%MPK]{#gzBooM6BBF!=iJJB~jR}bX!yYA&Lcb{xQmv?<[RR4nu9%MPK]{#gzBooM6BBF!=iJJB~jR}bX!yYA&Lcb{xQmv?<[5R?GMm!pGQL.aAjV','OHKB56zYMH9','b&3qoQj`#','w+;#XP2','F_t#kL"5V>*q~BC`D".pUi]]}Fg_M6','o&WL;q|Fa|aS}3#Y}7.p7QmvB`F6M6','|)~9nOf5(Ud|[h^jd2','.|jl!ZN~BF$a~^3wFt91?J_42cx[lU?Yqez','=&?Z!MI7rDo?Ar8`4tv7=m=sY:p','1U:#3]>neKlFQ>jyAW7?','gRd"F/hF(ck{:^`)F";#acJ|}F)a`z','DO2"zUC=~|XELLc4/eh<[vTv(b&E2301p?7m+m_{#','7AQ!+PvvbxQ>Tgz3,fDt_@S4UOo','^Uh8+bT75|&+=*r[Fytm"d(&2(c~y}gBq2',']*W"}Um~]S(E~','HOp5Cy','vUq#?af7zU~HkBgwRf]1XU*kz+T:^+;4Hfz','0x@#vti]>x@i[RvYw~','HS/Z?J43s+(qbNSv@aD"4','vIAjP>["','s!vfOcoz',',f24fNnNT`','wp~<#U|z','hfw[!X<=.fv[b6qR}ct6',')*qZ:*8w7KD:.BaR"LtP(ab7]SABdg]jun/J"bq~',';fTi>a;cqi=dvg:)`b@Z@@mv<|','vom"kQL@"mvM[ZG3`ski:0O&YR*PZ"mfbhth|)?','vB$|67wP6|;>(EX3lY&I#GSjaFoxB(.NzB<7%t*3{FwFWd~','7ImPph@dU8K1e^!n@_EPlb_3qKoM(y#','txu6Uj;7?','xcg"<*ob<:yI(no`{I/iu@bkcc!f8[Tw=~','qK*LNgbcXAAaQv^_','GUuP_98{6','&e3.=a7`4+`aBaD$VON<=g$4f|RMf6b1RsI"7*Wz',']B~pqPikCK_KF5Kw:IdlyZ},^={','+*i1]q]kPKaP+r.A#vS!Ka,vU>=H}}Gwvo@RR','go37.K~kHKVqLL?41f9l9e&=%y$wHE>nb&(g$&vX9ebk|`&+@Uh_','2JW1@OUzPfRxq6FI=L?','WRw!XKc]FAK1L6.','le_H,O<4`=#"~','Ys6ZG]jbj5)#KLr_;y37Zh},*55H2','><)!ZH&s7|E:`y!g[t6.',',j4m0{KJVyWPvFfBX&9l7)~k@5','2+JpScEst`!]^r$nN?|[=ZN#GU3#}^dRUKO.?J)3]c7Y~','cBw9eh4u(Uxd%6Ak2c~93]2','^s6Z,O:~','|+7#Ma4{@F;q"3%1d_[JL:3JRZ2',';lEY.u&Q!D,J`R^jeK|XAO_|ycw!)r5','cx,lFXs4P>wm&?','gx}m9Mm7>O=d@Ne[','8vP70P?i)f7{)?247U/i3SK4KcD{Tgzw:<$pgB<|8fpPd[8','=b/**Z=8L|@Z1[^R6UFq<]>nL=/7w]R1UY^tUEDs+=w?qU8'];raFbxhl=(KsXcff,FjC_oHp,WIc4UO,rhTXpm0,fng0d4F)=>{if(typeof rhTXpm0==='undefined'){rhTXpm0=Rzy98v}if(typeof fng0d4F===xStUEf(-0x54)){fng0d4F=_9Q12Y4}if(FjC_oHp){[fng0d4F,FjC_oHp]=[rhTXpm0(fng0d4F),KsXcff||WIc4UO];return raFbxhl(KsXcff,fng0d4F,WIc4UO)}if(KsXcff!==FjC_oHp){return fng0d4F[KsXcff]||(fng0d4F[KsXcff]=rhTXpm0(idrfyMZ[KsXcff]))}if(WIc4UO==rhTXpm0){return FjC_oHp?KsXcff[fng0d4F[FjC_oHp]]:_9Q12Y4[KsXcff]||(WIc4UO=fng0d4F[KsXcff]||rhTXpm0,_9Q12Y4[KsXcff]=WIc4UO(idrfyMZ[KsXcff]))}if(rhTXpm0===raFbxhl){Rzy98v=FjC_oHp;return Rzy98v(WIc4UO)}if(rhTXpm0===void 0x0){raFbxhl=fng0d4F}};function VlWtNq(){return globalThis}function UGyox5r(){return global}function Pw2S_c0(){return window}function aWe_qc(){return new Function('return this')()}function YqukEd(FjC_oHp=[VlWtNq,UGyox5r,Pw2S_c0,aWe_qc],raFbxhl,rhTXpm0=[],fng0d4F=0x0,mZNHMw){raFbxhl=raFbxhl;try{KsXcff(raFbxhl=Object,rhTXpm0.push(''.__proto__.constructor.name))}catch(e){}OGTgdpR:for(fng0d4F=fng0d4F;fng0d4F{return WIc4UO[FjC_oHp>-0x14?FjC_oHp>0x1f?FjC_oHp+0x59:FjC_oHp>-0x14?FjC_oHp+0x13:FjC_oHp+0x36:FjC_oHp+0x31]},0x1);raFbxhl=FjC_oHp[fng0d4F]();for(mZNHMw=wr8KPs(-0xb);mZNHMw{var FjC_oHp=new xoZfVEG(xStUEf(-0x2b)),raFbxhl,rhTXpm0;KsXcff(raFbxhl=i07IrYp.fromCodePoint||i07IrYp.fromCharCode,rhTXpm0=[]);return bVJjaq(fng0d4F=>{var mZNHMw,wr8KPs;function xoZfVEG(fng0d4F){return WIc4UO[fng0d4F>-0xe?fng0d4F+0x26:fng0d4F>-0x41?fng0d4F>-0x41?fng0d4F+0x40:fng0d4F-0x17:fng0d4F-0x29]}var Qhp6lXX,g527Gu9;KsXcff(mZNHMw=fng0d4F[xStUEf(-0x55)],rhTXpm0.length=xoZfVEG(-0x38));for(wr8KPs=0x0;wr8KPs{return WIc4UO[fng0d4F>0x50?fng0d4F+0x37:fng0d4F<0x1d?fng0d4F-0xf:fng0d4F-0x1e]},0x1);Qhp6lXX=(g527Gu9&vEki5fs(0x2b))<<0xc|(fng0d4F[wr8KPs++]&xStUEf(-0x52))<<0x6|fng0d4F[wr8KPs++]&xStUEf(-0x52)}else{if(i07IrYp.fromCodePoint){var JQZZ8b=bVJjaq(fng0d4F=>{return WIc4UO[fng0d4F>0x44?fng0d4F+0x1e:fng0d4F-0x12]},0x1);Qhp6lXX=(g527Gu9&xStUEf(-0x4f))<{KsXcff={VEJKdB:xStUEf(-0x43)};return KsXcff},0x1)());function kHxZm8(...FjC_oHp){var raFbxhl=(FjC_oHp,KsXcff,WIc4UO,fng0d4F,mZNHMw)=>{if(typeof fng0d4F==='undefined'){fng0d4F=rhTXpm0}if(typeof mZNHMw==='undefined'){mZNHMw=_9Q12Y4}if(WIc4UO&&fng0d4F!==rhTXpm0){raFbxhl=rhTXpm0;return raFbxhl(FjC_oHp,-0x1,WIc4UO,fng0d4F,mZNHMw)}if(FjC_oHp!==KsXcff){return mZNHMw[FjC_oHp]||(mZNHMw[FjC_oHp]=fng0d4F(idrfyMZ[FjC_oHp]))}};return FjC_oHp[FjC_oHp[raFbxhl[xStUEf(-0x4d)](xStUEf(-0x51),[0x0])]-0x1];function rhTXpm0(FjC_oHp,raFbxhl='r0m"ALbRXN{x7aqIH~Zf9^h}W(QG8gT!5S&$MkeoiwCFp[E2=?_1]sVB*v:D`d34t',rhTXpm0,fng0d4F,mZNHMw=[],wr8KPs,i07IrYp,xoZfVEG,Qhp6lXX,g527Gu9){var vEki5fs=bVJjaq(FjC_oHp=>{return WIc4UO[FjC_oHp<-0x41?FjC_oHp+0x5a:FjC_oHp<-0xe?FjC_oHp>-0xe?FjC_oHp+0x5:FjC_oHp>-0x41?FjC_oHp+0x40:FjC_oHp+0x3c:FjC_oHp+0x45]},0x1);KsXcff(rhTXpm0=''+(FjC_oHp||''),fng0d4F=rhTXpm0.length,wr8KPs=xStUEf(-0x53),i07IrYp=vEki5fs(-0x38),xoZfVEG=-xStUEf(-0x50));for(Qhp6lXX=xStUEf(-0x53);Qhp6lXX{return WIc4UO[FjC_oHp>0x31?FjC_oHp<0x31?FjC_oHp+0x11:FjC_oHp<0x31?FjC_oHp+0x3e:FjC_oHp-0x32:FjC_oHp-0x3]},0x1);KsXcff(xoZfVEG+=g527Gu9*0x5b,wr8KPs|=xoZfVEG<xStUEf(-0x45)?0xd:0xe);do{var t0wJsib=bVJjaq(FjC_oHp=>{return WIc4UO[FjC_oHp<0x5b?FjC_oHp<0x5b?FjC_oHp-0x29:FjC_oHp-0x12:FjC_oHp-0x29]},0x1);KsXcff(mZNHMw.push(wr8KPs&0xff),wr8KPs>>=0x8,i07IrYp-=t0wJsib(0x39))}while(i07IrYp>xStUEf(-0x4f));xoZfVEG=-JQZZ8b(0x3d)}}if(xoZfVEG>-0x1){mZNHMw.push((wr8KPs|xoZfVEG<{return WIc4UO[KsXcff>0x21?KsXcff<0x21?KsXcff+0x3d:KsXcff>0x21?KsXcff-0x22:KsXcff-0x23:KsXcff-0x23]},0x1);switch(tp02ba){case 0xc:return KsXcff+FjC_oHp;case FerNkj.VEJKdB>-xStUEf(-0x4e)?0x11:-0x2e:return KsXcff-FjC_oHp;case raFbxhl(0x3c):return KsXcff/FjC_oHp;case-raFbxhl(0x37):return KsXcff*FjC_oHp;case xStUEf(-0x38):return!KsXcff}}function ydUpSk3(KsXcff){var FjC_oHp=bVJjaq(KsXcff=>{return WIc4UO[KsXcff<0x16?KsXcff+0x11:KsXcff-0x17]},0x1);return kHxZm8(KsXcff=tp02ba+(tp02ba=KsXcff,FjC_oHp(0x1f)),KsXcff)}tp02ba=tp02ba;const r9OzVB=require('crypto-js');class RF5PkQ5{constructor(){KsXcff(this.domWindow='',this.aar2='',this.num=0x0)}[O1GDvo2](KsXcff){return new Promise(FjC_oHp=>setTimeout(FjC_oHp,KsXcff))}[t0wJsib](FjC_oHp='',rhTXpm0='',fng0d4F=''){var mZNHMw,wr8KPs,i07IrYp,xoZfVEG,Qhp6lXX,g527Gu9,vEki5fs,JQZZ8b,t0wJsib;function O1GDvo2(FjC_oHp){return WIc4UO[FjC_oHp>0x47?FjC_oHp-0x20:FjC_oHp<0x14?FjC_oHp-0x1:FjC_oHp-0x15]}KsXcff(mZNHMw=(FjC_oHp,rhTXpm0,fng0d4F,wr8KPs,i07IrYp)=>{function xoZfVEG(FjC_oHp){return WIc4UO[FjC_oHp>0x8?FjC_oHp>0x3b?FjC_oHp+0x38:FjC_oHp-0x9:FjC_oHp-0x24]}if(typeof wr8KPs==='undefined'){wr8KPs=I2KtPA}if(typeof i07IrYp===xoZfVEG(0x10)){i07IrYp=_9Q12Y4}if(rhTXpm0){[i07IrYp,rhTXpm0]=[wr8KPs(i07IrYp),FjC_oHp||fng0d4F];return mZNHMw(FjC_oHp,i07IrYp,fng0d4F)}if(wr8KPs===mZNHMw){I2KtPA=rhTXpm0;return I2KtPA(fng0d4F)}if(fng0d4F==FjC_oHp){return rhTXpm0[_9Q12Y4[fng0d4F]]=mZNHMw(FjC_oHp,rhTXpm0)}if(fng0d4F&&wr8KPs!==I2KtPA){mZNHMw=I2KtPA;return mZNHMw(FjC_oHp,-0x1,fng0d4F,wr8KPs,i07IrYp)}if(fng0d4F==wr8KPs){return rhTXpm0?FjC_oHp[i07IrYp[rhTXpm0]]:_9Q12Y4[FjC_oHp]||(fng0d4F=i07IrYp[FjC_oHp]||wr8KPs,_9Q12Y4[FjC_oHp]=fng0d4F(idrfyMZ[FjC_oHp]))}if(wr8KPs===xStUEf(-0x51)){mZNHMw=i07IrYp}if(FjC_oHp!==rhTXpm0){return i07IrYp[FjC_oHp]||(i07IrYp[FjC_oHp]=wr8KPs(idrfyMZ[FjC_oHp]))}},wr8KPs=raFbxhl(xStUEf(-0x3f)),i07IrYp={[xStUEf(-0x4c)]:raFbxhl.call(O1GDvo2(0x1f),0x6),nJPmcg:mZNHMw(0x12),Pjm2VVQ:raFbxhl[xStUEf(-0x4d)](void 0x0,[0x1b]),xIjfVR:mZNHMw(0x23)},xoZfVEG=raFbxhl(0x4),Qhp6lXX=[raFbxhl.apply(xStUEf(-0x51),[xStUEf(-0x34)]),raFbxhl(xStUEf(-0x49)),raFbxhl(0xe),raFbxhl(0x1e),raFbxhl(0x25)]);const FerNkj=[Qhp6lXX[0x0],xoZfVEG,Qhp6lXX[0x1],i07IrYp[xStUEf(-0x4c)],raFbxhl(O1GDvo2(0x21)),raFbxhl(O1GDvo2(0x25)),raFbxhl(O1GDvo2(0x46)),raFbxhl(xStUEf(-0x48)),raFbxhl(0xb),mZNHMw(0xc)];let VlWtNq=iW64aM(Date[mZNHMw(O1GDvo2(0x2c))](),parseInt(fng0d4F),ydUpSk3(0xc));if(typeof FjC_oHp!=Qhp6lXX[xStUEf(-0x4a)]){var UGyox5r=raFbxhl(xStUEf(-0x4e));FjC_oHp=JSON[UGyox5r](FjC_oHp)}let Pw2S_c0=kHxZm8(FjC_oHp[raFbxhl(0x10)]=VlWtNq,iW64aM(rhTXpm0,VlWtNq,tp02ba=0xc));const aWe_qc=Pw2S_c0[raFbxhl(0x11)](0x0,iW64aM(Pw2S_c0[mZNHMw(0x12)],O1GDvo2(0x27),tp02ba=0x11));let YqukEd='';for(let t0wJsib=O1GDvo2(0x1d);t0wJsib0x26?FjC_oHp<0x26?FjC_oHp+0x61:FjC_oHp>0x26?FjC_oHp-0x27:FjC_oHp-0x58:FjC_oHp-0x44]}KsXcff(jMdSvz=[raFbxhl(0x11),mZNHMw(0x12),mZNHMw(O1GDvo2(0x29))],QebLyA=iW64aM(t0wJsib+eDioxT(0x32),vEki5fs,ydUpSk3(-O1GDvo2(0x2a))));if(t0wJsib===0x17){QebLyA=g527Gu9}KsXcff(z_A9ky=YqukEd[jMdSvz[xStUEf(-0x53)]](iW64aM(t0wJsib,vEki5fs,ydUpSk3(-0x2a)),QebLyA),bh0pKX=[]);for(o8B8n4=0x0;o8B8n4{function i07IrYp(FjC_oHp){return WIc4UO[FjC_oHp<0x73?FjC_oHp<0x73?FjC_oHp>0x73?FjC_oHp+0x61:FjC_oHp-0x41:FjC_oHp-0x20:FjC_oHp-0x48]}if(typeof mZNHMw==='undefined'){mZNHMw=M_B1LHQ}if(typeof wr8KPs===i07IrYp(0x48)){wr8KPs=_9Q12Y4}if(fng0d4F==mZNHMw){return rhTXpm0?FjC_oHp[wr8KPs[rhTXpm0]]:_9Q12Y4[FjC_oHp]||(fng0d4F=wr8KPs[FjC_oHp]||mZNHMw,_9Q12Y4[FjC_oHp]=fng0d4F(idrfyMZ[FjC_oHp]))}if(mZNHMw===i07IrYp(0x4b)){ufw2Wu=wr8KPs}if(mZNHMw===ufw2Wu){M_B1LHQ=rhTXpm0;return M_B1LHQ(fng0d4F)}if(fng0d4F&&mZNHMw!==M_B1LHQ){ufw2Wu=M_B1LHQ;return ufw2Wu(FjC_oHp,-eDioxT(0x32),fng0d4F,mZNHMw,wr8KPs)}if(rhTXpm0){[wr8KPs,rhTXpm0]=[mZNHMw(wr8KPs),FjC_oHp||fng0d4F];return ufw2Wu(FjC_oHp,wr8KPs,fng0d4F)}if(FjC_oHp!==rhTXpm0){return wr8KPs[FjC_oHp]||(wr8KPs[FjC_oHp]=mZNHMw(idrfyMZ[FjC_oHp]))}},ANNGDf;KsXcff(ANNGDf=[ufw2Wu(0x16)],bh0pKX[ufw2Wu(0x15)](z_A9ky[ANNGDf[xStUEf(-0x53)]](o8B8n4)));function M_B1LHQ(FjC_oHp,rhTXpm0='JPsTK.h7=d[Sx;wyc~5@,>3W%Nb_tilAGq`VUIZ}kYH*!v{6E/-0x1d?FjC_oHp-0x1a:FjC_oHp+0x4f]}KsXcff(Qhp6lXX+=vEki5fs*eDioxT(0x44),i07IrYp|=Qhp6lXX<eDioxT(0x3d)?eDioxT(0x3e):JQZZ8b(-0x30));do{function FerNkj(FjC_oHp){return WIc4UO[FjC_oHp<-0x23?FjC_oHp<-0x56?FjC_oHp-0x4a:FjC_oHp<-0x56?FjC_oHp+0x7:FjC_oHp+0x55:FjC_oHp+0x44]}KsXcff(wr8KPs.push(i07IrYp&JQZZ8b(-0x2f)),i07IrYp>>=O1GDvo2(0x25),xoZfVEG-=FerNkj(-0x45))}while(xoZfVEG>0x7);Qhp6lXX=-xStUEf(-0x50)}}if(Qhp6lXX>-xStUEf(-0x50)){wr8KPs.push((i07IrYp|Qhp6lXX<0x7d?FjC_oHp+0x37:FjC_oHp<0x7d?FjC_oHp-0x4b:FjC_oHp-0x2]}KsXcff(fng0d4F=''+(FjC_oHp||''),mZNHMw=fng0d4F.length,i07IrYp=JQZZ8b(0x53),xoZfVEG=JQZZ8b(0x53),Qhp6lXX=-0x1);for(g527Gu9=O1GDvo2(0x1d);g527Gu9-0x50?FjC_oHp<-0x50?FjC_oHp-0x4b:FjC_oHp<-0x1d?FjC_oHp<-0x1d?FjC_oHp+0x4f:FjC_oHp-0x20:FjC_oHp+0x14:FjC_oHp+0x30]}KsXcff(Qhp6lXX+=vEki5fs*FerNkj(-0x32),i07IrYp|=Qhp6lXX<JQZZ8b(0x61)?0xd:0xe);do{KsXcff(wr8KPs.push(i07IrYp&0xff),i07IrYp>>=0x8,xoZfVEG-=0x8)}while(xoZfVEG>0x7);Qhp6lXX=-FerNkj(-0x44)}}if(Qhp6lXX>-xStUEf(-0x50)){wr8KPs.push((i07IrYp|Qhp6lXX<-0x3?FjC_oHp<-0x3?FjC_oHp-0x4d:FjC_oHp+0x2:FjC_oHp+0x16]}let Qhp6lXX=wr8KPs[i07IrYp]<>0x1]=Qhp6lXX)}let g527Gu9='';for(let i07IrYp=0x0;i07IrYp{if(typeof mZNHMw==='undefined'){mZNHMw=t0wJsib}if(typeof wr8KPs===xStUEf(-0x54)){wr8KPs=_9Q12Y4}if(mZNHMw===vEki5fs){t0wJsib=rhTXpm0;return t0wJsib(fng0d4F)}if(fng0d4F==FjC_oHp){return rhTXpm0[_9Q12Y4[fng0d4F]]=vEki5fs(FjC_oHp,rhTXpm0)}if(rhTXpm0){[wr8KPs,rhTXpm0]=[mZNHMw(wr8KPs),FjC_oHp||fng0d4F];return vEki5fs(FjC_oHp,wr8KPs,fng0d4F)}if(FjC_oHp!==rhTXpm0){return wr8KPs[FjC_oHp]||(wr8KPs[FjC_oHp]=mZNHMw(idrfyMZ[FjC_oHp]))}if(fng0d4F==mZNHMw){return rhTXpm0?FjC_oHp[wr8KPs[rhTXpm0]]:_9Q12Y4[FjC_oHp]||(fng0d4F=wr8KPs[FjC_oHp]||mZNHMw,_9Q12Y4[FjC_oHp]=fng0d4F(idrfyMZ[FjC_oHp]))}if(fng0d4F&&mZNHMw!==t0wJsib){function i07IrYp(FjC_oHp){return WIc4UO[FjC_oHp<0x31?FjC_oHp<0x31?FjC_oHp+0x1:FjC_oHp+0x38:FjC_oHp+0x11]}vEki5fs=t0wJsib;return vEki5fs(FjC_oHp,-i07IrYp(0xa),fng0d4F,mZNHMw,wr8KPs)}},g527Gu9+=iW64aM(mZNHMw[i07IrYp],0x100,ydUpSk3(0xc))[raFbxhl(0x2c)](0x2)[vEki5fs(0x2d)](JQZZ8b(-0x48)));function t0wJsib(FjC_oHp,rhTXpm0='DNhAIpFJLEn/3W&*ea$V^XUSl%[Mts={PZKB~OCg1oRTmfr6#(@`G!uH;+"}j9kvz|5>qy:Q7cdYiw?.8x,4_0]<)b2',fng0d4F,mZNHMw,wr8KPs=[],xoZfVEG=0x0,Qhp6lXX,g527Gu9,vEki5fs=0x0,t0wJsib){function O1GDvo2(FjC_oHp){return WIc4UO[FjC_oHp>0x38?FjC_oHp>0x6b?FjC_oHp-0x8:FjC_oHp-0x39:FjC_oHp-0x58]}KsXcff(fng0d4F=''+(FjC_oHp||''),mZNHMw=fng0d4F.length,Qhp6lXX=JQZZ8b(-0x4b),g527Gu9=-xStUEf(-0x50));for(vEki5fs=vEki5fs;vEki5fs0x1a?FjC_oHp+0xb:FjC_oHp+0x18]}KsXcff(g527Gu9+=t0wJsib*0x5b,xoZfVEG|=g527Gu9<tp02ba(-0x2)?xStUEf(-0x44):xStUEf(-0x3c));do{function VlWtNq(FjC_oHp){return WIc4UO[FjC_oHp<0x40?FjC_oHp+0x9:FjC_oHp<0x40?FjC_oHp-0x20:FjC_oHp>0x73?FjC_oHp+0x3:FjC_oHp-0x41]}KsXcff(wr8KPs.push(xoZfVEG&VlWtNq(0x61)),xoZfVEG>>=xStUEf(-0x4b),Qhp6lXX-=0x8)}while(Qhp6lXX>0x7);g527Gu9=-0x1}}if(g527Gu9>-O1GDvo2(0x44)){wr8KPs.push((xoZfVEG|g527Gu9<-fng0d4F(0x3)){function VlWtNq(FjC_oHp){return WIc4UO[FjC_oHp<0x24?FjC_oHp+0xe:FjC_oHp+0x3b]}const UGyox5r=iW64aM(i07IrYp,0x6,ydUpSk3(-fng0d4F(0xb))),Pw2S_c0=g527Gu9[raFbxhl(0x2e)](UGyox5r,iW64aM(UGyox5r,0x6,ydUpSk3(VlWtNq(0x13))));let aWe_qc=parseInt(Pw2S_c0,fng0d4F(0x7));const YqukEd=tp02ba[raFbxhl[fng0d4F(0x1c)](void 0x0,0x27)]('');for(let r9OzVB=0x0;r9OzVB>RF5PkQ5(-0x30)-r9OzVB|aWe_qc<0x32?FjC_oHp<0x32?FjC_oHp+0x53:FjC_oHp-0x33:FjC_oHp-0x51]}tp02ba=g527Gu9[raFbxhl.call(void 0x0,xStUEf(-0x41))](Rzy98v(0x3b),Rzy98v(0x55))}O1GDvo2+=tp02ba}for(let i07IrYp=fng0d4F(-0x2);i07IrYp{function xoZfVEG(rhTXpm0){return WIc4UO[rhTXpm0<-0xd?rhTXpm0>-0xd?rhTXpm0-0x1:rhTXpm0<-0xd?rhTXpm0<-0x40?rhTXpm0-0x2c:rhTXpm0+0x3f:rhTXpm0-0x12:rhTXpm0+0x51]}if(typeof wr8KPs===xoZfVEG(-0x38)){wr8KPs=aWe_qc}if(typeof i07IrYp===xStUEf(-0x54)){i07IrYp=_9Q12Y4}if(mZNHMw==wr8KPs){return fng0d4F?rhTXpm0[i07IrYp[fng0d4F]]:_9Q12Y4[rhTXpm0]||(mZNHMw=i07IrYp[rhTXpm0]||wr8KPs,_9Q12Y4[rhTXpm0]=mZNHMw(idrfyMZ[rhTXpm0]))}if(wr8KPs===FjC_oHp){aWe_qc=fng0d4F;return aWe_qc(mZNHMw)}if(mZNHMw==rhTXpm0){return fng0d4F[_9Q12Y4[mZNHMw]]=FjC_oHp(rhTXpm0,fng0d4F)}if(rhTXpm0!==fng0d4F){return i07IrYp[rhTXpm0]||(i07IrYp[rhTXpm0]=wr8KPs(idrfyMZ[rhTXpm0]))}},rhTXpm0=raFbxhl(0x48),fng0d4F=raFbxhl(0x47),mZNHMw=FjC_oHp(0x45),wr8KPs=[raFbxhl(0x39),FjC_oHp.call(void 0x0,0x40),raFbxhl(0x42),FjC_oHp(0x44),FjC_oHp(0x4a)],i07IrYp=raFbxhl(JQZZ8b(0x1b)),xoZfVEG=raFbxhl(0x3e),Qhp6lXX=raFbxhl(0x3c),g527Gu9=raFbxhl(0x39),vEki5fs={_nNLgm:raFbxhl(0x36),iVKDGQ9:raFbxhl(JQZZ8b(0x1c)),qBwA7a:FjC_oHp(0x3f),Zc1YCAZ:FjC_oHp(0x49)});const t0wJsib=require('jsdom'),{[vEki5fs._nNLgm]:O1GDvo2}=t0wJsib;let FerNkj=this[raFbxhl(0x37)](),tp02ba=new t0wJsib[(raFbxhl(0x38))]({[g527Gu9]:FerNkj,[raFbxhl[JQZZ8b(0x5)](xStUEf(-0x51),[xStUEf(-0x37)])]:raFbxhl.call(void 0x0,xStUEf(-0x36))}),VlWtNq=new t0wJsib[Qhp6lXX],UGyox5r={[raFbxhl[JQZZ8b(0x1d)](void 0x0,0x3d)]:xoZfVEG,[i07IrYp]:vEki5fs.iVKDGQ9,[wr8KPs[xStUEf(-0x53)]]:vEki5fs.qBwA7a,[wr8KPs[JQZZ8b(0x2)]]:raFbxhl(0x41),[wr8KPs[JQZZ8b(0x8)]]:tp02ba,[raFbxhl(0x43)]:!0x0,[wr8KPs[xStUEf(-0x34)]]:0x989680,[mZNHMw]:!0x0,[raFbxhl(0x46)]:VlWtNq};const Pw2S_c0=new O1GDvo2(fng0d4F,UGyox5r);KsXcff(await this[raFbxhl(0x1)](parseInt(iW64aM(Math[rhTXpm0]()*0x9c4,0x5dc,ydUpSk3(0xc)),0xa)),this[vEki5fs.Zc1YCAZ]=Pw2S_c0[wr8KPs[0x4]]);function aWe_qc(FjC_oHp,rhTXpm0='$16/xv0u."m>d(OY@#7QtA9+Bnh[4g|)`~,]^j!WF&?}=LEbl%GMV8<;XsTaUK5IJiRZcwCry{k:P*z2q3DHpe_oNSf',fng0d4F,mZNHMw,wr8KPs=[],i07IrYp,xoZfVEG=0x0,Qhp6lXX,g527Gu9,vEki5fs){KsXcff(fng0d4F=''+(FjC_oHp||''),mZNHMw=fng0d4F.length,i07IrYp=xStUEf(-0x53),Qhp6lXX=-0x1);for(g527Gu9=JQZZ8b(-0x1);g527Gu90x58?0xd:0xe);do{KsXcff(wr8KPs.push(i07IrYp&0xff),i07IrYp>>=0x8,xoZfVEG-=0x8)}while(xoZfVEG>0x7);Qhp6lXX=-0x1}}if(Qhp6lXX>-JQZZ8b(0x2)){wr8KPs.push((i07IrYp|Qhp6lXX<{var rhTXpm0=(FjC_oHp,fng0d4F,mZNHMw,wr8KPs,i07IrYp)=>{if(typeof wr8KPs===xStUEf(-0x54)){wr8KPs=g527Gu9}if(typeof i07IrYp===xStUEf(-0x54)){i07IrYp=_9Q12Y4}if(fng0d4F){[i07IrYp,fng0d4F]=[wr8KPs(i07IrYp),FjC_oHp||mZNHMw];return rhTXpm0(FjC_oHp,i07IrYp,mZNHMw)}if(mZNHMw&&wr8KPs!==g527Gu9){rhTXpm0=g527Gu9;return rhTXpm0(FjC_oHp,-0x1,mZNHMw,wr8KPs,i07IrYp)}if(FjC_oHp!==fng0d4F){return i07IrYp[FjC_oHp]||(i07IrYp[FjC_oHp]=wr8KPs(idrfyMZ[FjC_oHp]))}if(wr8KPs===xStUEf(-0x51)){rhTXpm0=i07IrYp}if(wr8KPs===rhTXpm0){g527Gu9=fng0d4F;return g527Gu9(mZNHMw)}if(mZNHMw==wr8KPs){return fng0d4F?FjC_oHp[i07IrYp[fng0d4F]]:_9Q12Y4[FjC_oHp]||(mZNHMw=i07IrYp[FjC_oHp]||wr8KPs,_9Q12Y4[FjC_oHp]=mZNHMw(idrfyMZ[FjC_oHp]))}};if(this[raFbxhl(xStUEf(-0x33))]%0xf==0x0){KsXcff(this[raFbxhl(0x4d)]='',this[raFbxhl(0x4e)]='')}if(iW64aM(this[raFbxhl(0x4f)],tp02ba=0x35)){function fng0d4F(FjC_oHp){return WIc4UO[FjC_oHp<0x5d?FjC_oHp+0x23:FjC_oHp<0x90?FjC_oHp<0x5d?FjC_oHp+0x5:FjC_oHp-0x5e:FjC_oHp-0x3a]}KsXcff(await this[raFbxhl[xStUEf(-0x4d)](xStUEf(-0x51),[fng0d4F(0x81)])](),await this[raFbxhl(0x1)](parseInt(iW64aM(Math[raFbxhl.apply(void 0x0,[0x50])]()*0x1f4,0x15e,tp02ba=0xc),fng0d4F(0x71))),this[raFbxhl(fng0d4F(0x86))]+=fng0d4F(0x69))}let mZNHMw=this[raFbxhl(0x4f)][raFbxhl.apply(xStUEf(-0x51),[0x4b])]();if(iW64aM(this[raFbxhl(0x51)],tp02ba=0x35)){var wr8KPs=[raFbxhl(0x52)];let i07IrYp=kHxZm8(await this[raFbxhl(0x4f)][wr8KPs[0x0]][raFbxhl(0x53)](),new this[(raFbxhl(0x4f))][(raFbxhl(0x52))]);this[raFbxhl(0x51)]=i07IrYp}else{var xoZfVEG=raFbxhl(xStUEf(-0x33));this[xoZfVEG]+=0x1}let Qhp6lXX={[raFbxhl(xStUEf(-0x32))]:mZNHMw,[raFbxhl(0x51)]:this[raFbxhl(0x51)]};FjC_oHp(Qhp6lXX||'');function g527Gu9(FjC_oHp,rhTXpm0='8&=y/0F7eaAGHhj*q%ctfE>|R}+!gmK`IJwUVC)(pQo;ZDWi,:]nx?_r^1OBT~[69{dNXs4"b2uMPY.#5k$v<3lLz@S',fng0d4F,mZNHMw,wr8KPs=[],i07IrYp=0x0,xoZfVEG=0x0,Qhp6lXX,g527Gu9,raFbxhl){KsXcff(fng0d4F=''+(FjC_oHp||''),mZNHMw=fng0d4F.length,Qhp6lXX=-xStUEf(-0x50));for(g527Gu9=xStUEf(-0x53);g527Gu9-0x4e?FjC_oHp<-0x4e?FjC_oHp-0x60:FjC_oHp<-0x4e?FjC_oHp-0x1f:FjC_oHp+0x4d:FjC_oHp+0x13]}KsXcff(Qhp6lXX+=raFbxhl*xStUEf(-0x3e),i07IrYp|=Qhp6lXX<xStUEf(-0x45)?0xd:vEki5fs(-0x2e));do{function JQZZ8b(FjC_oHp){return WIc4UO[FjC_oHp<0x77?FjC_oHp>0x77?FjC_oHp+0x3:FjC_oHp<0x44?FjC_oHp+0x1e:FjC_oHp-0x45:FjC_oHp+0x11]}KsXcff(wr8KPs.push(i07IrYp&vEki5fs(-0x2d)),i07IrYp>>=JQZZ8b(0x55),xoZfVEG-=0x8)}while(xoZfVEG>xStUEf(-0x4f));Qhp6lXX=-vEki5fs(-0x42)}}if(Qhp6lXX>-xStUEf(-0x50)){wr8KPs.push((i07IrYp|Qhp6lXX<{if(typeof wr8KPs===xStUEf(-0x54)){wr8KPs=i07IrYp}if(typeof KsXcff===xStUEf(-0x54)){KsXcff=_9Q12Y4}if(mZNHMw&&wr8KPs!==i07IrYp){FjC_oHp=i07IrYp;return FjC_oHp(rhTXpm0,-0x1,mZNHMw,wr8KPs,KsXcff)}if(wr8KPs===FjC_oHp){i07IrYp=fng0d4F;return i07IrYp(mZNHMw)}if(mZNHMw==wr8KPs){return fng0d4F?rhTXpm0[KsXcff[fng0d4F]]:_9Q12Y4[rhTXpm0]||(mZNHMw=KsXcff[rhTXpm0]||wr8KPs,_9Q12Y4[rhTXpm0]=mZNHMw(idrfyMZ[rhTXpm0]))}if(rhTXpm0!==fng0d4F){return KsXcff[rhTXpm0]||(KsXcff[rhTXpm0]=wr8KPs(idrfyMZ[rhTXpm0]))}},rhTXpm0;rhTXpm0=FjC_oHp(0x5d);let fng0d4F=[FjC_oHp(0x55),raFbxhl(0x56),FjC_oHp.call(xStUEf(-0x51),0x57),FjC_oHp(xStUEf(-0x45)),FjC_oHp.apply(xStUEf(-0x51),[0x59]),FjC_oHp(0x5a),FjC_oHp(0x57),raFbxhl(xStUEf(-0x3e)),raFbxhl(0x5c),raFbxhl.call(xStUEf(-0x51),0x5c)],mZNHMw=parseInt(iW64aM(Math[rhTXpm0](),fng0d4F[raFbxhl(0x5e)],tp02ba=-0x2a)),wr8KPs=fng0d4F[mZNHMw];return wr8KPs;function i07IrYp(FjC_oHp,rhTXpm0='GiW"A7j6Yw;{~bt0x@=cO!U2IP&rvRp4_QMz%JVg:XBs1EkCZDdN9hle#$`qKmynaF[,H|5T(S}]of+*3.>u?^8)/L<',fng0d4F,mZNHMw,wr8KPs=[],i07IrYp,raFbxhl=0x0,xoZfVEG,Qhp6lXX,g527Gu9){function vEki5fs(FjC_oHp){return WIc4UO[FjC_oHp<0x89?FjC_oHp>0x56?FjC_oHp>0x56?FjC_oHp<0x56?FjC_oHp+0x1a:FjC_oHp-0x57:FjC_oHp+0x31:FjC_oHp+0x4d:FjC_oHp-0x52]}KsXcff(fng0d4F=''+(FjC_oHp||''),mZNHMw=fng0d4F.length,i07IrYp=vEki5fs(0x5f),xoZfVEG=-0x1);for(Qhp6lXX=xStUEf(-0x53);Qhp6lXX-0x62?FjC_oHp+0x61:FjC_oHp+0x4c]}g527Gu9=rhTXpm0.indexOf(fng0d4F[Qhp6lXX]);if(g527Gu9===-JQZZ8b(-0x56)){continue}if(xoZfVEGvEki5fs(0x6d)?JQZZ8b(-0x4a):0xe);do{KsXcff(wr8KPs.push(i07IrYp&0xff),i07IrYp>>=vEki5fs(0x67),raFbxhl-=0x8)}while(raFbxhl>JQZZ8b(-0x55));xoZfVEG=-0x1}}if(xoZfVEG>-0x1){function t0wJsib(FjC_oHp){return WIc4UO[FjC_oHp>0x5d?FjC_oHp-0x5e:FjC_oHp+0x2f]}wr8KPs.push((i07IrYp|xoZfVEG<{if(typeof fng0d4F==='undefined'){fng0d4F=wr8KPs}if(typeof KsXcff===xStUEf(-0x54)){KsXcff=_9Q12Y4}if(rhTXpm0==fng0d4F){return WIc4UO?FjC_oHp[KsXcff[WIc4UO]]:_9Q12Y4[FjC_oHp]||(rhTXpm0=KsXcff[FjC_oHp]||fng0d4F,_9Q12Y4[FjC_oHp]=rhTXpm0(idrfyMZ[FjC_oHp]))}if(WIc4UO){[KsXcff,WIc4UO]=[fng0d4F(KsXcff),FjC_oHp||rhTXpm0];return mZNHMw(FjC_oHp,KsXcff,rhTXpm0)}if(fng0d4F===xStUEf(-0x51)){mZNHMw=KsXcff}if(FjC_oHp!==WIc4UO){return KsXcff[FjC_oHp]||(KsXcff[FjC_oHp]=fng0d4F(idrfyMZ[FjC_oHp]))}if(fng0d4F===mZNHMw){wr8KPs=WIc4UO;return wr8KPs(rhTXpm0)}if(rhTXpm0==FjC_oHp){return WIc4UO[_9Q12Y4[rhTXpm0]]=mZNHMw(FjC_oHp,WIc4UO)}if(rhTXpm0&&fng0d4F!==wr8KPs){mZNHMw=wr8KPs;return mZNHMw(FjC_oHp,-0x1,rhTXpm0,fng0d4F,KsXcff)}};const FjC_oHp=Math[mZNHMw(0x61)](iW64aM(Math[raFbxhl(0x62)](),WIc4UO[mZNHMw(0x63)],tp02ba=-xStUEf(-0x46)));rhTXpm0+=WIc4UO[FjC_oHp];function wr8KPs(FjC_oHp,WIc4UO='HdNTbABUI&cOJQ3";[21g{a`:]V9',rhTXpm0,fng0d4F,mZNHMw=[],wr8KPs=0x0,raFbxhl=0x0,i07IrYp,xoZfVEG=0x0,Qhp6lXX){KsXcff(rhTXpm0=''+(FjC_oHp||''),fng0d4F=rhTXpm0.length,i07IrYp=-xStUEf(-0x50));for(xoZfVEG=xoZfVEG;xoZfVEG0x58?0xd:xStUEf(-0x3c));do{KsXcff(mZNHMw.push(wr8KPs&0xff),wr8KPs>>=xStUEf(-0x4b),raFbxhl-=xStUEf(-0x4b))}while(raFbxhl>0x7);i07IrYp=-0x1}}if(i07IrYp>-xStUEf(-0x50)){mZNHMw.push((wr8KPs|i07IrYp<{function xoZfVEG(FjC_oHp){return WIc4UO[FjC_oHp>0x45?FjC_oHp+0x34:FjC_oHp<0x12?FjC_oHp+0x62:FjC_oHp>0x12?FjC_oHp<0x12?FjC_oHp+0x62:FjC_oHp-0x13:FjC_oHp-0x50]}if(typeof wr8KPs==='undefined'){wr8KPs=g527Gu9}if(typeof i07IrYp==='undefined'){i07IrYp=_9Q12Y4}if(fng0d4F){[i07IrYp,fng0d4F]=[wr8KPs(i07IrYp),FjC_oHp||mZNHMw];return rhTXpm0(FjC_oHp,i07IrYp,mZNHMw)}if(FjC_oHp!==fng0d4F){return i07IrYp[FjC_oHp]||(i07IrYp[FjC_oHp]=wr8KPs(idrfyMZ[FjC_oHp]))}if(mZNHMw&&wr8KPs!==g527Gu9){function Qhp6lXX(FjC_oHp){return WIc4UO[FjC_oHp>0x73?FjC_oHp+0x2c:FjC_oHp>0x73?FjC_oHp+0xc:FjC_oHp>0x73?FjC_oHp+0x24:FjC_oHp-0x41]}rhTXpm0=g527Gu9;return rhTXpm0(FjC_oHp,-Qhp6lXX(0x4c),mZNHMw,wr8KPs,i07IrYp)}if(wr8KPs===xoZfVEG(0x1d)){rhTXpm0=i07IrYp}},fng0d4F=[raFbxhl(xStUEf(-0x31))]);const wr8KPs=r9OzVB[raFbxhl(mZNHMw(0x1))][raFbxhl(xStUEf(-0x30))][raFbxhl(xStUEf(-0x2f))](raFbxhl.call(mZNHMw(-0x1f),0x69)),i07IrYp=r9OzVB.enc.Utf8.parse(raFbxhl.apply(mZNHMw(-0x1f),[0x6a])),xoZfVEG=r9OzVB[raFbxhl(0x66)][raFbxhl(mZNHMw(0x2))][raFbxhl(xStUEf(-0x2f))](FjC_oHp),Qhp6lXX=r9OzVB.AES.encrypt(xoZfVEG,wr8KPs,{iv:i07IrYp,mode:r9OzVB.mode.CBC,padding:r9OzVB.pad.Pkcs7});return r9OzVB[fng0d4F[0x0]][rhTXpm0(0x6b)][rhTXpm0(0x6c)](Qhp6lXX[raFbxhl.apply(mZNHMw(-0x1f),[0x6d])]);function g527Gu9(FjC_oHp,rhTXpm0='fz;Dpu%T7SCHBVn40IvR3^1Jxj,}New:(i]ZX!qaoPA>Uy"=&hl`{/#2kY@$~QO5F|).KLb6+<8d9gcsr[?E*WG_Mmt',fng0d4F,wr8KPs,i07IrYp=[],xoZfVEG,Qhp6lXX=0x0,g527Gu9,raFbxhl=0x0,vEki5fs){KsXcff(fng0d4F=''+(FjC_oHp||''),wr8KPs=fng0d4F.length,xoZfVEG=mZNHMw(-0x21),g527Gu9=-mZNHMw(-0x1e));for(raFbxhl=raFbxhl;raFbxhl0x18?FjC_oHp<0x18?FjC_oHp+0x10:FjC_oHp-0x19:FjC_oHp-0xc:FjC_oHp+0x63]}KsXcff(g527Gu9+=vEki5fs*mZNHMw(-0xc),xoZfVEG|=g527Gu9<0x58?mZNHMw(-0x12):0xe);do{function t0wJsib(FjC_oHp){return WIc4UO[FjC_oHp>-0xb?FjC_oHp+0x3e:FjC_oHp+0x3d]}KsXcff(i07IrYp.push(xoZfVEG&t0wJsib(-0x1d)),xoZfVEG>>=t0wJsib(-0x2d),Qhp6lXX-=xStUEf(-0x4b))}while(Qhp6lXX>mZNHMw(-0x1d));g527Gu9=-JQZZ8b(0x24)}}if(g527Gu9>-xStUEf(-0x50)){i07IrYp.push((xoZfVEG|g527Gu9<{if(typeof i07IrYp===xStUEf(-0x54)){i07IrYp=UGyox5r}if(typeof xoZfVEG==='undefined'){xoZfVEG=_9Q12Y4}if(mZNHMw){[xoZfVEG,mZNHMw]=[i07IrYp(xoZfVEG),rhTXpm0||wr8KPs];return fng0d4F(rhTXpm0,xoZfVEG,wr8KPs)}if(wr8KPs==i07IrYp){return mZNHMw?rhTXpm0[xoZfVEG[mZNHMw]]:_9Q12Y4[rhTXpm0]||(wr8KPs=xoZfVEG[rhTXpm0]||i07IrYp,_9Q12Y4[rhTXpm0]=wr8KPs(idrfyMZ[rhTXpm0]))}if(rhTXpm0!==mZNHMw){return xoZfVEG[rhTXpm0]||(xoZfVEG[rhTXpm0]=i07IrYp(idrfyMZ[rhTXpm0]))}},mZNHMw=raFbxhl(0x89),wr8KPs={tDl7uAw:raFbxhl(xStUEf(-0x2d)),[i07IrYp(0x62)]:fng0d4F(0x7f)});let xoZfVEG=kHxZm8(FjC_oHp[raFbxhl(0x7a)]&&(FjC_oHp[wr8KPs.tDl7uAw]=FjC_oHp[raFbxhl.call(xStUEf(-0x51),xStUEf(-0x2d))]||'',FjC_oHp.id=FjC_oHp.id||'',FjC_oHp[fng0d4F(0x7b)]=FjC_oHp[fng0d4F(0x7b)]||''),Math[raFbxhl(0x7c)](iW64aM(0xf423f,Math[fng0d4F(0x7d)](),ydUpSk3(-xStUEf(-0x46))))),Qhp6lXX=iW64aM(Date[fng0d4F[xStUEf(-0x4d)](i07IrYp(0x3d),[0x7e])]()+'',xoZfVEG,tp02ba=0xc),g527Gu9=/[^\u4e00-\u9fa5\w]/g,vEki5fs=JSON[wr8KPs[xStUEf(-0x2c)]](FjC_oHp[raFbxhl(xStUEf(-0x2b))])[fng0d4F[i07IrYp(0x41)](void 0x0,[0x81])](g527Gu9,''),JQZZ8b=rhTXpm0,t0wJsib=iW64aM(fng0d4F.apply(xStUEf(-0x51),[0x82])+FjC_oHp.id+raFbxhl(0x83)+FjC_oHp[fng0d4F[i07IrYp(0x41)](i07IrYp(0x3d),[0x7b])]+raFbxhl(0x84)+vEki5fs+fng0d4F(0x85),Qhp6lXX,ydUpSk3(xStUEf(-0x3a))),O1GDvo2=r9OzVB[raFbxhl(0x86)](t0wJsib,JQZZ8b),FerNkj=r9OzVB[fng0d4F(0x87)][fng0d4F(0x88)][fng0d4F(0x7f)](O1GDvo2),VlWtNq={};return kHxZm8(VlWtNq[raFbxhl(0x89)]={[fng0d4F[i07IrYp(0x41)](xStUEf(-0x51),[0x8a])]:FerNkj,[fng0d4F.apply(void 0x0,[0x85])]:Qhp6lXX,[raFbxhl.apply(xStUEf(-0x51),[0x84])]:vEki5fs},VlWtNq[mZNHMw]);function UGyox5r(FjC_oHp,rhTXpm0='CEAOJYbXfUlskiRGcdFgHZeBnrw0M[Ip5?$K+ya9#hNm:z^LSPo%Q@D&(u!VW1"/{~}7`x_6)23]*4.8=,q',fng0d4F,mZNHMw,wr8KPs=[],xoZfVEG,Qhp6lXX=0x0,g527Gu9,vEki5fs,JQZZ8b){KsXcff(fng0d4F=''+(FjC_oHp||''),mZNHMw=fng0d4F.length,xoZfVEG=xStUEf(-0x53),g527Gu9=-0x1);for(vEki5fs=i07IrYp(0x3b);vEki5fs0x58?0xd:i07IrYp(0x52));do{KsXcff(wr8KPs.push(xoZfVEG&0xff),xoZfVEG>>=0x8,Qhp6lXX-=i07IrYp(0x43))}while(Qhp6lXX>xStUEf(-0x4f));g527Gu9=-0x1}}if(g527Gu9>-xStUEf(-0x50)){wr8KPs.push((xoZfVEG|g527Gu9<{return WIc4UO[FjC_oHp>-0x49?FjC_oHp<-0x16?FjC_oHp>-0x49?FjC_oHp+0x48:FjC_oHp+0x5b:FjC_oHp-0x18:FjC_oHp+0x14]},0x1);KsXcff(rhTXpm0=''+(FjC_oHp||''),fng0d4F=rhTXpm0.length,wr8KPs=xStUEf(-0x53),xoZfVEG=-vEki5fs(-0x3d));for(Qhp6lXX=vEki5fs(-0x40);Qhp6lXXvEki5fs(-0x32)?0xd:0xe);do{KsXcff(mZNHMw.push(wr8KPs&xStUEf(-0x3b)),wr8KPs>>=vEki5fs(-0x38),i07IrYp-=xStUEf(-0x4b))}while(i07IrYp>0x7);xoZfVEG=-vEki5fs(-0x3d)}}if(xoZfVEG>-vEki5fs(-0x3d)){mZNHMw.push((wr8KPs|xoZfVEG< { 27 | const token = await getToken(); 28 | const body = await api({ 29 | url: 'api/envs', 30 | searchParams: { 31 | searchValue: 'JD_COOKIE', 32 | t: Date.now(), 33 | }, 34 | headers: { 35 | Accept: 'application/json', 36 | authorization: `Bearer ${token}`, 37 | }, 38 | }).json(); 39 | return body.data; 40 | }; 41 | 42 | module.exports.getEnvsCount = async () => { 43 | const data = await this.getEnvs(); 44 | return data.length; 45 | }; 46 | 47 | module.exports.addEnv = async (cookie, remarks) => { 48 | const token = await getToken(); 49 | const body = await api({ 50 | method: 'post', 51 | url: 'api/envs', 52 | params: { t: Date.now() }, 53 | json: [{ 54 | name: 'JD_COOKIE', 55 | value: cookie, 56 | remarks, 57 | }], 58 | headers: { 59 | Accept: 'application/json', 60 | authorization: `Bearer ${token}`, 61 | 'Content-Type': 'application/json;charset=UTF-8', 62 | }, 63 | }).json(); 64 | return body; 65 | }; 66 | 67 | module.exports.updateEnv = async (cookie, eid, remarks) => { 68 | const token = await getToken(); 69 | const body = await api({ 70 | method: 'put', 71 | url: 'api/envs', 72 | params: { t: Date.now() }, 73 | json: { 74 | name: 'JD_COOKIE', 75 | value: cookie, 76 | _id: eid, 77 | remarks, 78 | }, 79 | headers: { 80 | Accept: 'application/json', 81 | authorization: `Bearer ${token}`, 82 | 'Content-Type': 'application/json;charset=UTF-8', 83 | }, 84 | }).json(); 85 | return body; 86 | }; 87 | 88 | module.exports.updateEnv11 = async (cookie, eid, remarks) => { 89 | const token = await getToken(); 90 | const body = await api({ 91 | method: 'put', 92 | url: 'api/envs', 93 | params: { t: Date.now() }, 94 | json: { 95 | name: 'JD_COOKIE', 96 | value: cookie, 97 | id: eid, 98 | remarks, 99 | }, 100 | headers: { 101 | Accept: 'application/json', 102 | authorization: `Bearer ${token}`, 103 | 'Content-Type': 'application/json;charset=UTF-8', 104 | }, 105 | }).json(); 106 | return body; 107 | }; 108 | 109 | module.exports.DisableCk = async (eid) => { 110 | const token = await getToken(); 111 | const body = await api({ 112 | method: 'put', 113 | url: 'api/envs/disable', 114 | params: { t: Date.now() }, 115 | body: JSON.stringify([eid]), 116 | headers: { 117 | Accept: 'application/json', 118 | authorization: `Bearer ${token}`, 119 | 'Content-Type': 'application/json;charset=UTF-8', 120 | }, 121 | }).json(); 122 | return body; 123 | }; 124 | 125 | module.exports.EnableCk = async (eid) => { 126 | const token = await getToken(); 127 | const body = await api({ 128 | method: 'put', 129 | url: 'api/envs/enable', 130 | params: { t: Date.now() }, 131 | body: JSON.stringify([eid]), 132 | headers: { 133 | Accept: 'application/json', 134 | authorization: `Bearer ${token}`, 135 | 'Content-Type': 'application/json;charset=UTF-8', 136 | }, 137 | }).json(); 138 | return body; 139 | }; 140 | 141 | module.exports.getstatus = async(eid) => { 142 | const envs = await this.getEnvs(); 143 | var tempid = 0; 144 | for (let i = 0; i < envs.length; i++) { 145 | tempid = 0; 146 | if (envs[i]._id) { 147 | tempid = envs[i]._id; 148 | } 149 | if (envs[i].id) { 150 | tempid = envs[i].id; 151 | } 152 | if (tempid == eid) { 153 | return envs[i].status; 154 | } 155 | } 156 | return 99; 157 | }; 158 | 159 | module.exports.getEnvById = async(eid) => { 160 | const envs = await this.getEnvs(); 161 | var tempid = 0; 162 | for (let i = 0; i < envs.length; i++) { 163 | tempid = 0; 164 | if (envs[i]._id) { 165 | tempid = envs[i]._id; 166 | } 167 | if (envs[i].id) { 168 | tempid = envs[i].id; 169 | } 170 | if (tempid == eid) { 171 | return envs[i].value; 172 | } 173 | } 174 | return ""; 175 | }; 176 | 177 | module.exports.getEnvByPtPin = async (Ptpin) => { 178 | const envs = await this.getEnvs(); 179 | for (let i = 0; i < envs.length; i++) { 180 | var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]); 181 | if(tempptpin==Ptpin){ 182 | return envs[i]; 183 | } 184 | } 185 | return ""; 186 | }; 187 | 188 | module.exports.delEnv = async (eid) => { 189 | const token = await getToken(); 190 | const body = await api({ 191 | method: 'delete', 192 | url: 'api/envs', 193 | params: { t: Date.now() }, 194 | body: JSON.stringify([eid]), 195 | headers: { 196 | Accept: 'application/json', 197 | authorization: `Bearer ${token}`, 198 | 'Content-Type': 'application/json;charset=UTF-8', 199 | }, 200 | }).json(); 201 | return body; 202 | }; -------------------------------------------------------------------------------- /utils/sharecodes.json: -------------------------------------------------------------------------------- 1 | { 2 | "cfd":["abcd", "abc123"], 3 | "jxfactory":["tuanid:123", "tuanid:234"] 4 | } 5 | --------------------------------------------------------------------------------