(filename, filesize, filetypeSimple, authToken, retryCount = 0, account)
| 70 | }) |
| 71 | return base |
| 72 | } |
| 73 | |
| 74 | const unwrapApiData = (response) => { |
| 75 | const payload = response?.data |
| 76 | return payload && payload.data && typeof payload.data === 'object' |
| 77 | ? payload.data |
| 78 | : payload |
| 79 | } |
| 80 | |
| 81 | /** |
| 82 | * 请求STS Token(带重试机制) |
| 83 | * @param {string} filename - 文件名 |
| 84 | * @param {number} filesize - 文件大小(字节) |
| 85 | * @param {string} filetypeSimple - 简化文件类型 |
| 86 | * @param {string} authToken - 认证Token |
| 87 | * @param {number} retryCount - 重试次数 |
| 88 | * @param {Object} [account] - 账户对象(用于解析账号级代理) |
| 89 | * @returns {Promise<Object>} STS Token响应数据 |
| 90 | */ |
| 91 | const requestStsToken = async (filename, filesize, filetypeSimple, authToken, retryCount = 0, account) => { |
| 92 | try { |
| 93 | // 参数验证 |
| 94 | if (!filename || !authToken) { |
| 95 | logger.error('文件名和认证Token不能为空', 'UPLOAD') |
| 96 | throw new Error('文件名和认证Token不能为空') |
| 97 | } |
| 98 | |
| 99 | if (!validateFileSize(filesize)) { |
| 100 | logger.error(`文件大小超出限制,最大允许 ${UPLOAD_CONFIG.maxFileSize / 1024 / 1024}MB`, 'UPLOAD') |
| 101 | throw new Error(`文件大小超出限制,最大允许 ${UPLOAD_CONFIG.maxFileSize / 1024 / 1024}MB`) |
| 102 | } |
| 103 | |
| 104 | const requestId = generateUUID() |
| 105 | const bearerToken = authToken.startsWith('Bearer ') ? authToken : `Bearer ${authToken}` |
| 106 | |
| 107 | // Antidetect: per-account fingerprint headers replace static UA |
| 108 | const baseHeaders = buildRequestHeaders(account, { |
| 109 | extra: { |
| 110 | 'Authorization': bearerToken, |
| 111 | 'x-request-id': requestId |
| 112 | } |
| 113 | }) |
| 114 | const headers = baseHeaders |
| 115 | |
| 116 | const payload = { |
| 117 | filename, |
| 118 | filesize, |
| 119 | filetype: filetypeSimple |
| 120 | } |
| 121 | |
| 122 | const requestConfig = { |
| 123 | headers, |
| 124 | timeout: UPLOAD_CONFIG.timeout |
| 125 | } |
| 126 | |
| 127 | applyProxyToAxiosConfig(requestConfig, account); |
| 128 | |
| 129 | logger.info(`请求STS Token: ${filename} (${filesize} bytes, ${filetypeSimple})`, 'UPLOAD', '🎫') |
no test coverage detected