fix: improve auth and request handling

This commit is contained in:
2026-07-22 17:34:13 +01:00
parent 694cc55eaa
commit c4c470c073
2 changed files with 163 additions and 56 deletions
+31 -29
View File
@@ -45,35 +45,37 @@ function extractErrorMessage(data) {
function requestJson(urlString, headers = {}) {
return new Promise((resolve, reject) => {
const url = new URL(urlString);
const request = https.request(
url,
{
method: 'GET',
headers: Object.assign({Accept: 'application/json'}, headers),
},
response => {
let body = '';
response.setEncoding('utf8');
const requestOptions = {
protocol: url.protocol,
hostname: url.hostname,
port: url.port || 443,
method: 'GET',
path: `${url.pathname}${url.search}`,
headers: Object.assign({Accept: 'application/json'}, headers),
};
response.on('data', chunk => {
body += chunk;
});
const request = https.request(requestOptions, response => {
let body = '';
response.setEncoding('utf8');
response.on('end', () => {
const data = parseResponseBody(body);
response.on('data', chunk => {
body += chunk;
});
if (response.statusCode >= 200 && response.statusCode < 300) {
resolve({status: response.statusCode, headers: response.headers, data});
return;
}
response.on('end', () => {
const data = parseResponseBody(body);
const message = extractErrorMessage(data) || `Request failed with status ${response.statusCode}`;
const error = new Error(message);
error.response = {status: response.statusCode, headers: response.headers, data};
reject(error);
});
}
);
if (response.statusCode >= 200 && response.statusCode < 300) {
resolve({status: response.statusCode, headers: response.headers, data});
return;
}
const message = extractErrorMessage(data) || `Request failed with status ${response.statusCode}`;
const error = new Error(message);
error.response = {status: response.statusCode, headers: response.headers, data};
reject(error);
});
});
request.on('error', reject);
request.end();
@@ -96,15 +98,15 @@ async function requestSheetsJson(pathname, context, queryParams = {}) {
const headers = {};
if (context && context.authClient) {
if (typeof context.authClient.getRequestHeaders === 'function') {
const authHeaders = await context.authClient.getRequestHeaders(url.toString());
Object.assign(headers, authHeaders || {});
} else if (typeof context.authClient.getAccessToken === 'function') {
if (typeof context.authClient.getAccessToken === 'function') {
const token = await context.authClient.getAccessToken();
const accessToken = token && typeof token === 'object' ? token.token || token.access_token : token;
if (accessToken) {
headers.Authorization = `Bearer ${accessToken}`;
}
} else if (typeof context.authClient.getRequestHeaders === 'function') {
const authHeaders = await context.authClient.getRequestHeaders(url.toString());
Object.assign(headers, authHeaders || {});
}
}