{"version":3,"sources":["jsdelivr-header.js","/npm/wechat-mp-hack@1.1.10/lib/index.js"],"names":[],"mappings":"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","file":"/npm/wechat-mp-hack@1.1.10/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/wechat-mp-hack@1.1.10/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nconst fs_1 = require(\"fs\");\nconst path_1 = require(\"path\");\nconst events_1 = require(\"events\");\nconst crypto_1 = require(\"crypto\");\nconst request_1 = __importDefault(require(\"request\"));\nconst request_2 = __importDefault(require(\"./util/request\"));\nconst config_1 = __importDefault(require(\"./util/config\"));\nconst log_1 = __importDefault(require(\"./util/log\"));\nconst index_1 = require(\"./decorators/index\");\nconst cache_1 = __importDefault(require(\"./util/cache\"));\nclass Wechat extends events_1.EventEmitter {\n    constructor(username, pwd) {\n        super();\n        this.username = username;\n        this.pwd = crypto_1.createHash('md5')\n            .update(pwd.substr(0, 16))\n            .digest('hex');\n        this.islogin = false;\n        this.cache = new cache_1.default('wechat');\n        this.data = this.cache._data;\n    }\n    startlogin(imgcode = '') {\n        return request_2.default({\n            url: `${config_1.default.api.bizlogin}?action=startlogin`,\n            form: {\n                username: this.username,\n                pwd: this.pwd,\n                imgcode: imgcode,\n                f: 'json',\n            },\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return this.login_qrcode();\n            }\n            else {\n                if (body.base_resp.ret === 200008) {\n                    this.login_vcode();\n                }\n                throw body;\n            }\n        });\n    }\n    login_vcode() {\n        return new Promise((resolve, reject) => {\n            let filename = 'verifycode.png';\n            let writeStream = fs_1.createWriteStream(filename);\n            request_2.default.get(`${config_1.default.api.verifycode}?username=${this.username}&r=${Date.now()}`)\n                .pipe(writeStream)\n                .on('error', reject);\n            writeStream.on('finish', () => {\n                this.emit('vcode', filename);\n                resolve(filename);\n            });\n        });\n    }\n    login_qrcode() {\n        return new Promise((resolve, reject) => {\n            let filename = 'qrcode-login.png';\n            let writeStream = fs_1.createWriteStream(filename);\n            request_2.default.get(`${config_1.default.api.loginqrcode}?action=getqrcode&param=4300`)\n                .pipe(writeStream)\n                .on('error', reject);\n            writeStream.on('finish', () => {\n                this.emit('scan.login', filename);\n                log_1.default.info('请扫描二维码确认登录！');\n                resolve(filename);\n            });\n        });\n    }\n    checkLogin() {\n        const chklogin = (resolve, reject) => {\n            request_2.default.getJSON(`${config_1.default.api.loginqrcode}?action=ask&random=${Math.random()}`)\n                .then((body) => {\n                if (body.status === 1) {\n                    resolve(body);\n                }\n                else {\n                    setTimeout(() => {\n                        chklogin(resolve, reject);\n                    }, 3000);\n                }\n            })\n                .catch(reject);\n        };\n        return new Promise(chklogin);\n    }\n    doLogin() {\n        let loginAction = (resolve, reject) => {\n            request_2.default({\n                url: `${config_1.default.api.bizlogin}?action=login`,\n                form: {\n                    f: 'json',\n                    ajax: 1,\n                    random: Math.random(),\n                },\n            }).then((body) => {\n                let token = null;\n                if (body.base_resp.ret === 0 && (token = body.redirect_url.match(/token=(\\d+)/))) {\n                    this.data.token = token[1];\n                    log_1.default.info('登录成功，token=' + this.data.token);\n                    resolve(token[1]);\n                }\n                else if (body.base_resp.ret === -1) {\n                    loginAction(resolve, reject);\n                }\n                else {\n                    reject(body);\n                }\n            });\n        };\n        return new Promise(loginAction);\n    }\n    _wechatData() {\n        return new Promise((resolve, reject) => {\n            request_2.default.get(`${config_1.default.api.masssendpage}?t=mass/send&token=${this.data.token}`, (e, r, body) => {\n                if (e) {\n                    reject(e);\n                }\n                else {\n                    const ticketMatch = body.match(/ticket:\"([\\s\\S]*?)\"/);\n                    const userNameMatch = body.match(/user_name:\"([\\s\\S]*?)\"/);\n                    const massProtectMatch = body.match(/\"protect_status\":(\\d+)/);\n                    const operationMatch = body.match(/operation_seq:\\s*\"(\\d+)\"/);\n                    if (ticketMatch && userNameMatch) {\n                        this.data.ticket = ticketMatch[1];\n                        this.data.user_name = userNameMatch[1];\n                        if (operationMatch) {\n                            this.data.operation_seq = operationMatch[1];\n                        }\n                        if (massProtectMatch && (2 & massProtectMatch[1]) === 2) {\n                            this.data.mass_protect = 1;\n                        }\n                        this.islogin = true;\n                        resolve(this.data);\n                        this.cache._data = this.data;\n                        this.cache._save();\n                    }\n                    else {\n                        reject('解析wxdata失败');\n                    }\n                }\n            });\n        });\n    }\n    loginstep() {\n        return this.checkLogin().then(() => this.doLogin().then(() => this._wechatData()));\n    }\n    loginchk() {\n        return new Promise((resolve, reject) => {\n            if (this.islogin) {\n                resolve(this.data);\n            }\n            else if (this.data.token) {\n                const req = request_2.default.get(config_1.default.baseurl, (error, response, body) => {\n                    if (error) {\n                        reject(error);\n                    }\n                    else {\n                        const redirects = req._redirect.redirects;\n                        if (redirects && redirects.length) {\n                            const redirectUri = redirects[redirects.length - 1].redirectUri;\n                            if (/token=(\\d+)/.test(redirectUri)) {\n                                this.islogin = true;\n                                resolve(this.data);\n                            }\n                            else {\n                                reject();\n                            }\n                        }\n                        else {\n                            reject();\n                        }\n                    }\n                });\n            }\n            else {\n                reject();\n            }\n        });\n    }\n    login(imgcode) {\n        return new Promise((resolve, reject) => {\n            this.loginchk()\n                .then(resolve)\n                .catch(() => {\n                this.startlogin(imgcode)\n                    .then(() => {\n                    this.loginstep()\n                        .then(resolve)\n                        .catch(reject);\n                })\n                    .catch(reject);\n            });\n        });\n    }\n    appmsg(type = 10, begin = 0, count = 10) {\n        return request_2.default.getJSON(`${config_1.default.api.appmsg}?begin=${begin}&count=${count}&type=${type}&token=${this.data.token}&action=${type === 15 ? 'list_video' : 'list_card'}`).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body.app_msg_info.item;\n            }\n            else {\n                throw body.base_resp.err_msg;\n            }\n        });\n    }\n    filepage(type = 2, begin = 0, count = 10, group_id = 0) {\n        return request_2.default.getJSON(`${config_1.default.api.filepage}?begin=${begin}&count=${count}&type=${type}&token=${this.data.token}&group_id=${group_id}`).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body.page_info.file_item;\n            }\n            else {\n                throw body.base_resp.err_msg;\n            }\n        });\n    }\n    operate_appmsg(news, appMsgId) {\n        return new Promise((resolve, reject) => {\n            let uploadImgs = [];\n            let postNews = news.filter(item => {\n                let hasThumb = !!item.thumb;\n                if (hasThumb) {\n                    uploadImgs.push(item.thumb);\n                }\n                return hasThumb;\n            });\n            if (uploadImgs.length) {\n                this.parseNewsList(postNews)\n                    .then(newsObj => {\n                    this._operate_appmsg(newsObj, postNews.length, appMsgId)\n                        .then(resolve)\n                        .catch(reject);\n                })\n                    .catch(reject);\n            }\n            else {\n                reject('至少有一篇新闻具有图片');\n            }\n        });\n    }\n    del_appmsg(appMsgId) {\n        return request_2.default({\n            url: `${config_1.default.api.operate_appmsg}?t=ajax-response&sub=del`,\n            headers: {\n                Referer: `${config_1.default.api.appmsg}?begin=0&count=10&t=media/appmsg_list&type=10&action=list&lang=zh_CN&token=${this.data.token}`,\n            },\n            form: {\n                AppMsgId: appMsgId,\n                token: this.data.token,\n                f: 'json',\n                ajax: 1,\n            },\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body;\n            }\n            else {\n                let msg = log_1.default.msg(body.base_resp.ret);\n                log_1.default.error(msg);\n                body.msg = msg;\n                throw body;\n            }\n        });\n    }\n    parseNewsList(newsList) {\n        return Promise.all(newsList.map((item, index) => this.parseNews(item, index))).then(paramArr => {\n            return Object.assign.apply(Object, paramArr);\n        });\n    }\n    parseNews(news, index) {\n        let pattern = /<img[^>]+src=['\"]([^'\"]+)['\"]+/g;\n        let promiseArr = [];\n        let imgs = [];\n        let temp = null;\n        while ((temp = pattern.exec(news.html)) !== null && imgs.indexOf(temp[1]) === -1 && !this.isLocalDomain(temp[1])) {\n            promiseArr.push(this.uploadimg2cdn(temp[1]));\n            imgs.push(temp[1]);\n        }\n        promiseArr.push(this.uploadimg2cdn(news.thumb));\n        return Promise.all(promiseArr).then(urls => {\n            imgs.forEach((imgurl, i) => {\n                news.html = news.html.replace(new RegExp(imgurl, 'gi'), urls[i]);\n            });\n            news.cdn_url = urls[urls.length - 1];\n            return this._newsToMpParam(news, index);\n        });\n    }\n    isLocalDomain(url) {\n        let localReg = [\n            /^http(s)?:\\/\\/mmbiz\\.qpic\\.cn([\\/?].*)*$/i,\n            /^http(s)?:\\/\\/mmbiz\\.qlogo\\.cn([\\/?].*)*$/i,\n            /^http(s)?:\\/\\/m\\.qpic\\.cn([\\/?].*)*$/i,\n            /^http(s)?:\\/\\/mmsns\\.qpic\\.cn([\\/?].*)*$/i,\n            /^http(s)?:\\/\\/mp\\.weixin\\.qq\\.com([\\/?].*)*$/i,\n            /^http(s)?:\\/\\/(a|b)(\\d)+\\.photo\\.store\\.qq\\.com([\\/?].*)*$/i,\n        ];\n        return localReg.some(pattern => pattern.test(url));\n    }\n    _operate_appmsg(wechatNews, count, appMsgId) {\n        const params = {\n            token: this.data.token,\n            f: 'json',\n            ajax: 1,\n            random: Math.random(),\n        };\n        if (appMsgId) {\n            params.AppMsgId = appMsgId;\n        }\n        if (count) {\n            params.count = count;\n            Object.assign(params, wechatNews);\n        }\n        else {\n            params.count = wechatNews.length;\n            Object.assign(params, this._transformToMpParam(wechatNews));\n        }\n        return request_2.default({\n            url: `${config_1.default.api.operate_appmsg}?t=ajax-response&sub=${appMsgId ? 'update' : 'create'}&type=10&token=${this.data.token}`,\n            headers: {\n                Referer: `${config_1.default.api.appmsg}?t=media/appmsg_edit&action=edit&type=10&isMul=1&isNew=1&token=${this.data.token}`,\n            },\n            form: params,\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body.appMsgId;\n            }\n            else {\n                let msg = log_1.default.msg(body.base_resp.ret);\n                log_1.default.error(msg);\n                body.msg = msg;\n                throw body;\n            }\n        });\n    }\n    _transformToMpParam(arr) {\n        let obj = {};\n        arr.forEach((item, index) => {\n            Object.assign(obj, this._newsToMpParam(item, index));\n        });\n        return obj;\n    }\n    _newsToMpParam(item, index) {\n        const obj = {};\n        obj[`title${index}`] = item.title;\n        obj[`content${index}`] = item.html;\n        obj[`digest${index}`] = item.description;\n        obj[`fileid${index}`] = item.fileid || '';\n        obj[`cdn_url${index}`] = item.cdn_url;\n        obj[`digest${index}`] = item.description;\n        obj[`sourceurl${index}`] = item.url;\n        obj[`show_cover_pic${index}`] = 0;\n        obj[`need_open_comment${index}`] = 1;\n        obj[`music_id${index}`] = '';\n        obj[`video_id${index}`] = '';\n        obj[`shortvideofileid${index}`] = '';\n        obj[`copyright_type${index}`] = '';\n        obj[`only_fans_can_comment${index}`] = '';\n        obj[`fee${index}`] = '';\n        obj[`voteid${index}`] = '';\n        obj[`voteismlt${index}`] = '';\n        obj[`ad_id${index}`] = '';\n        return obj;\n    }\n    batchUpload(imgurls) {\n        return Promise.all(imgurls.map(imgurl => this.filetransfer(imgurl)));\n    }\n    filetransfer(imgurl) {\n        return new Promise((resolve, reject) => {\n            const filename = path_1.join(config_1.default.upload, Date.now() + '.png');\n            const writeStream = fs_1.createWriteStream(filename);\n            request_1.default(imgurl)\n                .pipe(writeStream)\n                .on('error', reject);\n            writeStream.on('finish', () => this.localUpload(filename)\n                .then(resolve)\n                .catch(reject));\n        });\n    }\n    localUpload(filepath) {\n        return request_2.default({\n            url: `${config_1.default.api.filetransfer}?action=upload_material&f=json&scene=1&writetype=doublewrite&groupid=1&ticket_id=${this.data.user_name}&ticket=${this.data.ticket}&svr_time=${Math.floor(Date.now() / 1000)}&seq=1&token=${this.data.token}`,\n            headers: {\n                Referer: `${config_1.default.api.filepage}?type=2&begin=0&count=12&t=media/img_list&token=${this.data.token}`,\n            },\n            formData: {\n                file: fs_1.createReadStream(filepath),\n            },\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return {\n                    fileid: body.content,\n                    cdn_url: body.cdn_url,\n                };\n            }\n            else {\n                throw body;\n            }\n        });\n    }\n    uploadimg2cdn(imgurl) {\n        return request_2.default({\n            url: `${config_1.default.api.uploadimg2cdn}?token=${this.data.token}`,\n            form: {\n                imgurl: imgurl,\n                t: 'ajax-editor-upload-img',\n            },\n        }).then((body) => {\n            if (body.errcode === 0) {\n                return body.url;\n            }\n            else {\n                throw body;\n            }\n        });\n    }\n    masssend(appmsgid, groupid = -1, send_time = 0, type = 10) {\n        const params = {\n            type: type,\n            groupid: groupid,\n            send_time: send_time,\n        };\n        if (type === 10) {\n            params.appmsgid = appmsgid;\n        }\n        else if (type === 1) {\n            params.content = appmsgid;\n        }\n        else {\n            params.fileid = appmsgid;\n        }\n        if (this.data.mass_protect) {\n            return new Promise((resolve, reject) => {\n                this.getticket()\n                    .then(body => {\n                    this.getuuid(body.ticket)\n                        .then(uuid => {\n                        this.checkuuid(uuid, body.ticket, body.operation_seq)\n                            .then((res) => {\n                            params.operation_seq = body.operation_seq;\n                            params.code = res.code;\n                            this.safesend(params)\n                                .then(resolve)\n                                .catch(reject);\n                        })\n                            .catch(reject);\n                    })\n                        .catch(reject);\n                })\n                    .catch(reject);\n            });\n        }\n        else {\n            params.operation_seq = this.data.operation_seq;\n            return this.safesend(params);\n        }\n    }\n    preview_post(appmsgid, itemidx = 1) {\n        return request_2.default.getJSON(`${config_1.default.api.appmsg}?action=get_temp_url&appmsgid=${appmsgid}&itemidx=${itemidx}&token=${this.data.token}`).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body.temp_url;\n            }\n            else {\n                throw body;\n            }\n        });\n    }\n    preview_appmsg(username, content, type = 10) {\n        const params = {\n            token: this.data.token,\n            f: 'json',\n            ajax: 1,\n            random: Math.random(),\n            type: type,\n            preusername: username,\n            is_preview: 1,\n        };\n        if (type === 10) {\n            params.appmsgid = content;\n        }\n        else if (type === 1) {\n            params.content = content;\n        }\n        else {\n            params.fileid = content;\n        }\n        return request_2.default({\n            url: `${config_1.default.api.operate_appmsg}?t=ajax-appmsg-preview&token=${this.data.token}&sub=preview&type=${type}`,\n            form: params,\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body;\n            }\n            else {\n                let msg = log_1.default.msg(body.base_resp.ret);\n                body.base_resp.err_msg = msg;\n                body.msg = msg;\n                throw body;\n            }\n        });\n    }\n    getticket() {\n        log_1.default.info('获取群发ticket');\n        return request_2.default({\n            url: `${config_1.default.api.safeassistant}?1=1&token=${this.data.token}`,\n            form: {\n                token: this.data.token,\n                f: 'json',\n                ajax: 1,\n                random: Math.random(),\n                action: 'get_ticket',\n            },\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                log_1.default.info('群发ticket获取成功');\n                return {\n                    ticket: body.ticket,\n                    operation_seq: body.operation_seq,\n                };\n            }\n            else {\n                log_1.default.info('群发ticket获取失败');\n                throw body;\n            }\n        });\n    }\n    getuuid(ticket) {\n        return request_2.default({\n            url: `${config_1.default.api.safeqrconnect}?1=1&token=${this.data.token}`,\n            form: {\n                token: this.data.token,\n                f: 'json',\n                ajax: 1,\n                random: Math.random(),\n                state: 0,\n                login_type: 'safe_center',\n                type: 'json',\n                ticket: ticket,\n            },\n        }).then((body) => {\n            if (body.uuid) {\n                log_1.default.info('成功获取uuid');\n                return body.uuid;\n            }\n            else {\n                throw body;\n            }\n        });\n    }\n    checkuuid(uuid, ticket, operation_seq) {\n        let douuid = (resolve, reject) => {\n            request_2.default({\n                url: `${config_1.default.api.safeuuid}?timespam=${Date.now()}&token=${this.data.token}`,\n                form: {\n                    token: this.data.token,\n                    f: 'json',\n                    ajax: 1,\n                    random: Math.random(),\n                    uuid: uuid,\n                    action: 'json',\n                    type: 'json',\n                },\n            })\n                .then((body) => {\n                if (body.errcode == 405) {\n                    log_1.default.info('成功扫描群发认证二维码！');\n                    resolve(body);\n                }\n                else {\n                    setTimeout(() => {\n                        douuid(resolve, reject);\n                    }, 3000);\n                }\n            })\n                .catch(reject);\n        };\n        return new Promise((resolve, reject) => {\n            let filename = 'qrcode-safe.png';\n            let writeStream = fs_1.createWriteStream(filename);\n            request_2.default.get(`${config_1.default.api.safeqrcode}?action=check&type=msgs&ticket=${ticket}&uuid=${uuid}&msgid=${operation_seq}`)\n                .pipe(writeStream)\n                .on('error', reject);\n            writeStream.on('finish', () => {\n                this.emit('scan.send', filename);\n                log_1.default.info('请扫描群发认证二维码！');\n                douuid(resolve, reject);\n            });\n        });\n    }\n    copyright(appmsgid, type = 10) {\n        const check = first => {\n            return request_2.default({\n                url: `${config_1.default.api.masssend}?action=get_appmsg_copyright_stat&token=${this.data.token}`,\n                form: {\n                    token: this.data.token,\n                    f: 'json',\n                    ajax: 1,\n                    first_check: first,\n                    appmsgid: appmsgid,\n                    type: type,\n                },\n            });\n        };\n        return check(1).then(() => check(0));\n    }\n    safesend(params) {\n        return params.appmsgid ? this.copyright(params.appmsgid).then(() => this._real_send(params)) : this._real_send(params);\n    }\n    _real_send(params) {\n        return request_2.default({\n            url: `${config_1.default.api.masssend}?t=ajax-response&token=${this.data.token}${params.send_time ? '&action=time_send' : ''}`,\n            form: Object.assign({\n                token: this.data.token,\n                f: 'json',\n                ajax: 1,\n                random: Math.random(),\n                smart_product: 0,\n                cardlimit: 1,\n                sex: 0,\n                synctxweibo: 0,\n                direct_send: 1,\n                req_id: this._getid(32),\n                req_time: Date.now(),\n            }, params),\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body;\n            }\n            else {\n                log_1.default.error(body);\n                throw body;\n            }\n        });\n    }\n    cancel_time_send(msgid) {\n        return request_2.default({\n            url: `${config_1.default.api.masssendpage}?action=cancel_time_send&token=${this.data.token}`,\n            form: {\n                id: msgid,\n                token: this.data.token,\n                f: 'json',\n                ajax: 1,\n            },\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body;\n            }\n            else {\n                log_1.default.error(body);\n                throw body;\n            }\n        });\n    }\n    timesend_list() {\n        return request_2.default.getJSON(`${config_1.default.api.home}?t=home/index&token=${this.data.token}`).then((body) => {\n            if (body.base_resp.ret === 0) {\n                let msgs = JSON.parse(body.timesend_msg);\n                return msgs.sent_list;\n            }\n            else {\n                log_1.default.error(body);\n                throw body;\n            }\n        });\n    }\n    singlesend(tofakeid, msg, replyId = '') {\n        return request_2.default({\n            url: `${config_1.default.api.singlesend}?t=ajax-response&f=json&token=${this.data.token}`,\n            form: {\n                token: this.data.token,\n                f: 'json',\n                ajax: 1,\n                random: Math.random(),\n                type: 1,\n                content: msg,\n                tofakeid: tofakeid,\n                quickReplyId: replyId,\n                imgcode: '',\n            },\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body;\n            }\n            else {\n                log_1.default.error(body);\n                throw body;\n            }\n        });\n    }\n    message(count, day = 0) {\n        let url = `${config_1.default.api.message}?t=message/list&f=json&filtertype=0&filterivrmsg=0&filterspammsg=0&count=${count}&token=${this.data.token}`;\n        url += day === 'star' ? '&action=star' : `&day=${day}`;\n        return request_2.default.getJSON(url).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return JSON.parse(body.msg_items);\n            }\n            else {\n                throw body.base_resp.err_msg;\n            }\n        });\n    }\n    user_list() {\n        return request_2.default.getJSON(`${config_1.default.api.userlist}?action=get_all_data&lang=zh_CN&f=json&token=${this.data.token}`).then((body) => {\n            if (body.base_resp.ret === 0) {\n                let userlist = body.user_list.user_info_list;\n                userlist.map(user => {\n                    if (user.user_head_img && user.user_head_img.endsWith('/64')) {\n                        user.user_head_img = user.user_head_img.replace(/64$/, '0');\n                    }\n                    return user;\n                });\n                this.cache.set('userlist', userlist);\n                return userlist;\n            }\n            else {\n                throw body.base_resp.err_msg;\n            }\n        });\n    }\n    user_info(user_openid) {\n        const userlist = this.cache.get('userlist');\n        if (userlist && userlist.length) {\n            let user = userlist.find(user => user.user_openid === user_openid);\n            return user ? Promise.resolve(user) : this._remote_find(user_openid);\n        }\n        else {\n            return this._remote_find(user_openid);\n        }\n    }\n    _remote_find(user_openid) {\n        return this.user_list().then(users => {\n            return users.find(user => user.user_openid === user_openid);\n        });\n    }\n    user_info_detail(user_openid) {\n        return request_2.default({\n            url: `${config_1.default.api.userlist}?action=get_fans_info`,\n            form: {\n                token: this.data.token,\n                user_openid: user_openid,\n            },\n        }).then((body) => {\n            if (body.base_resp.ret === 0) {\n                return body.user_list.user_info_list[0];\n            }\n            else {\n                throw body.base_resp.err_msg;\n            }\n        });\n    }\n    _getid(len) {\n        let id = '';\n        let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n        for (let i = 0; i < len; i++) {\n            id += str.charAt(Math.floor(Math.random() * str.length));\n        }\n        return id;\n    }\n    qrdecode(url) {\n        return new Promise((resolve, reject) => {\n            const formData = {};\n            if (/^https?:\\/\\//.test(url)) {\n                formData.url = url;\n            }\n            else {\n                try {\n                    formData.qrcode = fs_1.createReadStream(url);\n                }\n                catch (error) {\n                    reject(error);\n                }\n            }\n            request_1.default({\n                method: 'POST',\n                url: 'http://tool.oschina.net/action/qrcode/decode',\n                headers: {\n                    Host: 'tool.oschina.net',\n                    Referer: 'http://tool.oschina.net/qr?type=2',\n                    Origin: 'http://tool.oschina.net',\n                    'User-Agent': config_1.default.userAgent,\n                    'Upgrade-Insecure-Requests': 1,\n                },\n                json: true,\n                formData: formData,\n            }, (e, r, body) => {\n                e ? reject(e) : resolve(body[0]);\n            });\n        });\n    }\n}\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object, Object, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"appmsg\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object, Object, Object, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"filepage\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"operate_appmsg\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Number]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"del_appmsg\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"batchUpload\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"filetransfer\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"localUpload\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"uploadimg2cdn\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object, Object, Object, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"masssend\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"preview_post\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object, Object, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"preview_appmsg\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"cancel_time_send\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", []),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"timesend_list\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object, Object, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"singlesend\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Number, Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"message\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", []),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"user_list\", null);\n__decorate([\n    index_1.login,\n    __metadata(\"design:type\", Function),\n    __metadata(\"design:paramtypes\", [Object]),\n    __metadata(\"design:returntype\", void 0)\n], Wechat.prototype, \"user_info_detail\", null);\nprocess.on('unhandledRejection', error => {\n    log_1.default.error(error);\n});\nmodule.exports = Wechat;\n"]}