// import browser from 'webextension-polyfill' import { appSign } from './appSign' import { accessKey } from '~/logic/storage' export function revokeAccessKey() { accessKey.value = null } /** * 感謝這份專案給出的獲取accessKey的方法 * https://github.com/indefined/UserScripts/blob/42e20281d2e4d7bce16b5c8033b67ccb6ad312e9/bilibiliHome/bilibiliHome.user.js#L1149 */ // /** // * @deprecated // * @param t // * @param element // */ // export function grantAccessKey(t: any, element: HTMLButtonElement): void { // const originalInnerHTML = element.innerHTML // element.innerHTML = ` // Loading... // ` // element.style.pointerEvents = 'none' // element.disabled = true // const tip = t('auth.err_tip') // fetch( // 'https://passport.bilibili.com/login/app/third?appkey=5fd5a7d8bfd9b0e6' // + '&api=https%3A%2F%2Fwww.mcbbs.net%2Ftemplate%2Fmcbbs%2Fimage%2Fspecial_photo_bg.png&sign=04224646d1fea004e79606d3b038c84a', // { // method: 'GET', // credentials: 'include', // }, // ) // .then(res => res.json()) // .then((data) => { // if (data.code || !data.data) // throw { tip, msg: data.msg || data.message || data.code, data } // else if (!data.data.has_login) // throw { tip, msg: t('auth.plz_login_first'), data } // else if (!data.data.confirm_uri) // throw { tip, msg: t('auth.receive_verified_url_err'), data } // else return data.data.confirm_uri // }) // .then( // url => // browser.runtime // .sendMessage({ // contentScriptQuery: 'getAccessKey', // confirmUri: url, // }) // .then((res: { accessKey: string }) => { // accessKey.value = res.accessKey // return Promise.resolve() // }) // .catch((err: any) => { // // eslint-disable-next-line prefer-promise-reject-errors // return Promise.reject({ tip, msg: t('auth.failed_to_get_accesskey'), data: err }) // }), // ) // .catch((error) => { // element.innerHTML = originalInnerHTML // element.style.pointerEvents = 'auto' // element.disabled = false // alert(`${error.tip}: ${error.msg}`) // console.error(`${error.msg}: `, error.data) // }) // } // https://socialsisteryi.github.io/bilibili-API-collect/docs/misc/sign/APPKey.html#appkey export const TVAppKey = { appkey: '4409e2ce8ffd12b8', appsec: '59b43e04ad6965f34319062b478f83dd', } // https://github.com/magicdawn/bilibili-app-recommend/blob/e91722cc076fe65b98116fb0248236851ae6e1dc/src/utility/access-key/tv-qrcode/api.ts#L8 export function tvSignSearchParams(params: Record) { const sign = appSign(params, TVAppKey.appkey, TVAppKey.appsec) return new URLSearchParams({ ...params, sign, }) } export function getTvSign(params: Record) { return appSign(params, TVAppKey.appkey, TVAppKey.appsec) } export function pollTVLoginQRCode(authCode: string): Promise { const url = 'https://passport.bilibili.com/x/passport-tv-login/qrcode/poll' return new Promise((resolve, reject) => { fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', }, body: tvSignSearchParams({ appkey: TVAppKey.appkey, auth_code: authCode, local_id: '0', ts: '0', }), }) .then(response => response.json()) .then(data => resolve(data)) .catch(error => reject(error)) }) } export function getTVLoginQRCode(): Promise { const url = 'https://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' return new Promise((resolve, reject) => { fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', }, body: tvSignSearchParams({ appkey: TVAppKey.appkey, local_id: '0', ts: '0', }), }) .then(response => response.json()) .then(data => resolve(data)) .catch(error => reject(error)) }) }