import config from '../config' import { request_get } from '../request' import {zipObject} from 'lodash' import {md5} from 'js-md5' import { cookieJar } from '../cookie' const { ali1688_api_key, ali1688_host, ali1688_jsv, ali1688_token_api, ali1688_v } = config class Token { cookies: Record = {} getCookies: () => Promise constructor(options) { this.getCookies = options?.getCookies } get token_url() { return `https://${ali1688_host}/h5/${ali1688_token_api.toLowerCase()}/${ali1688_v}/` } get t() { return Math.floor(Date.now() / 1000) } get_sign(data, t, token) { const text = `${token}&${t}&${ali1688_api_key}&${data}` const sign_str = md5(text) return sign_str } get_token_params() { return { jsv: ali1688_jsv, appKey: ali1688_api_key, t: this.t, api: ali1688_token_api, v: ali1688_v, type: 'json', dataType: 'jsonp', callback: 'mtopjsonp1', preventFallback: true, data: {}, } } token_headers() { const headers: any = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', } headers.authority = 'h5api.m.1688.com' headers.Referer = 'https://www.1688.com/' return headers } async token_request() { const params = this.get_token_params() await request_get(this.token_url, params, this.token_headers()) if(this.getCookies) { this.cookies = await this.getCookies() }else { const cookies = cookieJar.toJSON().cookies this.cookies = zipObject(cookies.map(item => item.key),cookies.map(item => item.value)) } } get token() { if (!this.cookies || !this.cookies._m_h5_tk) { throw new Error('cookie not found _m_h5_tk') } const cookie_list = this.cookies._m_h5_tk.split('_') if (cookie_list.length < 2) { throw new Error('cookie _m_h5_tk not found \'_\' ') } const token = cookie_list[0] return token } } export default Token