├── .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 |
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<Yktu!xb5DO_:(|}jK%V62^IF3qv]H{c+71$BaSh.LJ"e<*md9[~)U,@;Xoi#CMTwP0E?Wr',fng0d4F,mZNHMw,wr8KPs=[],i07IrYp,xoZfVEG,Qhp6lXX,g527Gu9,vEki5fs){function JQZZ8b(FjC_oHp){return WIc4UO[FjC_oHp<0x4a?FjC_oHp-0x15:FjC_oHp>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<=5y+^x|`A:WIwnR[174Y{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 |
--------------------------------------------------------------------------------