├── .github ├── pull.yml └── workflows │ ├── deploy_tencent_scf.yml │ └── syncGit.yml ├── .gitignore ├── Env.min.js ├── Fruit_ShareCache.json ├── JDJRValidator_Aaron.js ├── JDJRValidator_Pure.js ├── JDJRValidator_Smiek.js ├── JDSignValidator.js ├── JS_USER_AGENTS.js ├── LICENSE ├── MovementFaker.js ├── README.md ├── USER_AGENTS.js ├── accwait.py ├── backUp ├── GetJdCookie.md ├── GetJdCookie2.md ├── TG_PUSH.md ├── code.png ├── elecV2P.md ├── gitSync.md ├── iCloud.md ├── jd_city.js ├── jd_speed.js ├── jd_speed_redpocke.js.bak ├── reposync.md └── tencentscf.md ├── config.json ├── getJDCookie.js ├── githubAction.md ├── index.js ├── jdCookie.js ├── jdDreamFactoryShareCodes.js ├── jdFactoryShareCodes.js ├── jdFruitShareCodes.js ├── jdJxncShareCodes.js ├── jdPetShareCodes.js ├── jdPlantBeanShareCodes.js ├── jd_CheckCK.js ├── jd_EsportsManager.js ├── jd_GoldcoinToGift.js ├── jd_UnknownTask5.js ├── jd_babel_sign.js ├── jd_bean_change.js ├── jd_bean_home.js ├── jd_bean_sign.js ├── jd_beauty.js ├── jd_beauty_ex.js ├── jd_beauty_plant.py ├── jd_blueCoin.js ├── jd_btdraw.py ├── jd_car.js ├── jd_cash.js ├── jd_ccSign.js ├── jd_cfd.js ├── jd_cfd_hb.js ├── jd_cfd_loop.js ├── jd_cfd_mooncake.js ├── jd_cfd_pearl_ex.js ├── jd_cjzdgf.js ├── jd_cleancart.js ├── jd_club_lottery.js ├── jd_computer.js ├── jd_connoisseur.js ├── jd_dadoudou.js ├── jd_ddly.js ├── jd_dpqd.js ├── jd_dreamFactory.js ├── jd_dreamFactory_tuan.js ├── jd_duobao.js ├── jd_dwapp.js ├── jd_exchangejxbeans.js ├── jd_fan.js ├── jd_fanli.js ├── jd_freshgoods.js ├── jd_fruit.js ├── jd_get_share_code.js ├── jd_gold_creator.js ├── jd_gold_sign.js ├── jd_gyp.js ├── jd_haier.js ├── jd_half_redrain.js ├── jd_health.js ├── jd_health_plant.py ├── jd_jdfactory.js ├── jd_jdtj_winner.js ├── jd_jdzz.js ├── jd_jfcz.js ├── jd_jin_tie.js ├── jd_joy.js ├── jd_joy_feedPets.js ├── jd_joy_park.js ├── jd_joy_park_newtask.js ├── jd_joy_park_task.js ├── jd_joy_reward.js ├── jd_joy_run.js ├── jd_joy_steal.js ├── jd_joyjd_open.js ├── jd_jump.js ├── jd_jxdzz.js ├── jd_jxgckc.js ├── jd_jxlhb.js ├── jd_jxmc.js ├── jd_jxnc.js ├── jd_jxred.js ├── jd_kd.js ├── jd_kxcdz.js ├── jd_kyd.js ├── jd_live.js ├── jd_live_redrain.js ├── jd_ljd.js ├── jd_lol.js ├── jd_lotteryMachine.js ├── jd_lsj.js ├── jd_lxLottery.js ├── jd_m_sign.js ├── jd_mofang_ex.js ├── jd_mohe.js ├── jd_moneyTree.js ├── jd_moneyTree_help.js ├── jd_mpdzcar.js ├── jd_mpdzcar_game.js ├── jd_mpdzcar_help.js ├── jd_ms.js ├── jd_nh_sign.js ├── jd_nhs_red.js ├── jd_nhs_rp.js ├── jd_nhs_rpc.js ├── jd_nnfls.js ├── jd_nzmh.js ├── jd_opencardL67.js ├── jd_opencardL69.js ├── jd_opencardL73.js ├── jd_opencardL80.js ├── jd_pet.js ├── jd_pigPet.js ├── jd_plantBean.js ├── jd_plusLottery.js ├── jd_price.js ├── jd_productZ4Brand.js ├── jd_qjd.js ├── jd_qqxing.js ├── jd_rankingList.js ├── jd_red.js ├── jd_redPacket.js ├── jd_redrain.js ├── jd_redrain_half.js ├── jd_sddd.js ├── jd_selectionOfficer.js ├── jd_sevenDay.js ├── jd_sgmh.js ├── jd_shop.js ├── jd_signFree.js ├── jd_sign_graphics.js ├── jd_sign_graphics1.js ├── jd_sjjc.js ├── jd_sjnhj.js ├── jd_small_home.js ├── jd_speed_redpocke.js ├── jd_speed_sign.js ├── jd_speedcoupon.js ├── jd_star_shop.js ├── jd_superBrand.js ├── jd_superMarket.js ├── jd_super_redrain.js ├── jd_sxLottery.js ├── jd_syj.js ├── jd_task.json ├── jd_test.js ├── jd_tiger.js ├── jd_travel.js ├── jd_travel_shop.js ├── jd_try.js ├── jd_try_notify.py ├── jd_ttpt.js ├── jd_tyt.js ├── jd_unsubscriLive.js ├── jd_unsubscribe.js ├── jd_vivo.js ├── jd_wish.js ├── jd_wq_wxsign.js ├── jd_wsdlb.js ├── jd_wxgame.js ├── jd_wyw.js ├── jd_xfxd.js ├── jd_xinruimz.js ├── jd_xl.js ├── jd_xmf.js ├── jd_xqscjd.js ├── jd_xsqjd.js ├── jd_xtg.js ├── jd_xyc.js ├── jd_year.js ├── jd_yijia.js ├── jd_yqyl.js ├── jd_ys.js ├── jd_z_health_energy.js ├── jd_zdjr.js ├── jd_zhanianshou.js ├── jd_zjb.js ├── jd_zqfl.js ├── jd_zsign.js ├── jd_zzt.js ├── jx_sign.js ├── jx_sign_xd.js ├── jx_ttysq.js ├── package.json ├── ql.js ├── sendNotify.js ├── serverless.yml ├── sign_graphics_validate.js ├── sjys.py └── tencentscf.js /.github/pull.yml: -------------------------------------------------------------------------------- 1 | version: "1" 2 | rules: # Array of rules 3 | - base: main # Required. Target branch 4 | upstream: BlueskyClouds:main # Required. Must be in the same fork network. 5 | mergeMethod: hardreset # Optional, one of [none, merge, squash, rebase, hardreset], Default: none. 6 | mergeUnstable: true # Optional, merge pull request even when the mergeable_state is not clean. Default: false 7 | -------------------------------------------------------------------------------- /.github/workflows/syncGit.yml: -------------------------------------------------------------------------------- 1 | name: 获取最新脚本 2 | on: 3 | schedule: 4 | - cron: '5 */3 * * *' 5 | workflow_dispatch: 6 | watch: 7 | types: started 8 | repository_dispatch: 9 | types: sync-zero205-scripts 10 | jobs: 11 | repo-sync: 12 | env: 13 | PAT: ${{ secrets.PAT }} #此处PAT需要申请,教程详见:https://www.jianshu.com/p/bb82b3ad1d11 14 | dst_key: ${{ secrets.GITEE_PRIVATE_KEY }} # 我自己同步到gitee使用,其他人可忽略 15 | runs-on: ubuntu-latest 16 | if: github.event.repository.owner.id == github.event.sender.id 17 | steps: 18 | - uses: actions/checkout@v2 19 | with: 20 | persist-credentials: false 21 | 22 | - name: sync lukeys-scripts 23 | uses: repo-sync/github-sync@v2 24 | if: env.PAT 25 | with: 26 | source_repo: "https://github.com/lukesyy/jd_yun.git" 27 | source_branch: "main" 28 | destination_branch: "main" 29 | github_token: ${{ secrets.PAT }} 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /yarn.lock 3 | /.idea 4 | /.history 5 | /box.dat 6 | /CookieSet.json 7 | /jdCookie.js 8 | /logs 9 | /JD_DailyBonus.js 10 | /result.txt 11 | /.DS_Store 12 | jdCookie.js 13 | -------------------------------------------------------------------------------- /Env.min.js: -------------------------------------------------------------------------------- 1 | function Env(t,e){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,o)=>{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.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}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 o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"}};this.post(a,(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),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}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),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),h=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),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()?$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)))}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())$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",$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},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:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t))}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",o){const r=t=>{if(!t||!this.isLoon()&&this.isSurge())return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,r(o)):this.isQuanX()&&$notify(e,s,i,r(o)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}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("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} -------------------------------------------------------------------------------- /Fruit_ShareCache.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pt_pin": "jd_7a29508333328", 4 | "ShareCode": "9307e66da6fb4955b9c090262b070166" 5 | }, 6 | { 7 | "pt_pin": "jd_5733f446b38b0", 8 | "ShareCode": "d1cd85db7dcb404a8a7644c4ac7886a7" 9 | } 10 | ] -------------------------------------------------------------------------------- /JS_USER_AGENTS.js: -------------------------------------------------------------------------------- 1 | const USER_AGENTS = [] 2 | /** 3 | * 生成随机数字 4 | * @param {number} min 最小值(包含) 5 | * @param {number} max 最大值(不包含) 6 | */ 7 | function randomNumber(min = 0, max = 100) { 8 | return Math.min(Math.floor(min + Math.random() * (max - min)), max); 9 | } 10 | 11 | /** 12 | * 得到一个两数之间的随机整数,包括两个数在内 13 | * @param min 14 | * @param max 15 | * @returns {number} 16 | */ 17 | function getRandomIntInclusive(min, max) { 18 | min = Math.ceil(min); 19 | max = Math.floor(max); 20 | return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 21 | } 22 | /** 23 | * 生成随机 iPhoneID 24 | * @returns {string} 25 | */ 26 | function randPhoneId() { 27 | return Math.random().toString(36).slice(2, 10) + 28 | Math.random().toString(36).slice(2, 10) + 29 | Math.random().toString(36).slice(2, 10) + 30 | Math.random().toString(36).slice(2, 10) + 31 | Math.random().toString(36).slice(2, 10); 32 | } 33 | 34 | const USER_AGENT = `jdapp;iPhone;10.2.0;${Math.ceil(Math.random()*4+10)}.${Math.ceil(Math.random()*4)};${randPhoneId()};network/4g;model/iPhone11,8;addressid/1188016812;appBuild/167724;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS ${getRandomIntInclusive(11, 14)}_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`; 35 | 36 | module.exports = { 37 | USER_AGENT 38 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 luke 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MovementFaker.js: -------------------------------------------------------------------------------- 1 | const https = require('https'); 2 | const fs = require('fs').promises; 3 | const { R_OK } = require('fs').constants; 4 | const vm = require('vm'); 5 | const UA = require('./USER_AGENTS.js').USER_AGENT; 6 | 7 | const URL = 'https://wbbny.m.jd.com/babelDiy/Zeus/2rtpffK8wqNyPBH6wyUDuBKoAbCt/index.html'; 8 | // const REG_MODULE = /(\d+)\:function\(.*(?=smashUtils\.get_risk_result)/gm; 9 | const SYNTAX_MODULE = '!function(n){var r={};function o(e){if(r[e])'; 10 | const REG_SCRIPT = /