From 98069d711f763752e40ca74bdbe5928f5f0ccd50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Issue=E5=93=A5?= Date: Mon, 29 Jun 2020 21:16:54 +0800 Subject: [PATCH] handle get sa token error --- src/gd.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/gd.js b/src/gd.js index 83160c9..646b791 100644 --- a/src/gd.js +++ b/src/gd.js @@ -16,8 +16,9 @@ const FOLDER_TYPE = 'application/vnd.google-apps.folder' const { https_proxy } = process.env const axins = axios.create(https_proxy ? { httpsAgent: new HttpsProxyAgent(https_proxy) } : {}) -const sa_files = fs.readdirSync(path.join(__dirname, '../sa')).filter(v => v.endsWith('.json')) -let SA_TOKENS = sa_files.map(filename => { +const SA_FILES = fs.readdirSync(path.join(__dirname, '../sa')).filter(v => v.endsWith('.json')) + +let SA_TOKENS = SA_FILES.map(filename => { const gtoken = new GoogleToken({ keyFile: path.join(__dirname, '../sa', filename), scope: ['https://www.googleapis.com/auth/drive'] @@ -273,7 +274,20 @@ async function get_access_token () { } async function get_sa_token () { - const el = get_random_element(SA_TOKENS) + let tk + while (SA_TOKENS.length) { + tk = get_random_element(SA_TOKENS) + try { + return await real_get_sa_token(tk) + } catch (e) { + console.log(e) + SA_TOKENS = SA_TOKENS.filter(v => v.gtoken !== tk.gtoken) + } + } + throw new Error('没有可用的SA帐号') +} + +function real_get_sa_token (el) { const { value, expires, gtoken } = el // 把gtoken传递出去的原因是当某账号流量用尽时可以依此过滤 if (Date.now() < expires) return { access_token: value, gtoken }