According to Google node sdk docs: "This library will automatically use a refresh token to obtain a new access token if it is about to expire.". But it's not happening in my case.
After an hour or so I'm getting 400 invalid_request
error.
Here's my implementation:
import { calendar_v3, google } from "googleapis";
const oauth2Client = new google.auth.OAuth2(
process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID,
process.env.GOOGLE_CLIENT_SECRET,
process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI
);
oauth2Client.setCredentials({
refresh_token: gRefToken,
access_token: gAccToken,
});
const calendar = google.calendar({
version: "v3",
auth: oauth2Client,
});
resCalEventsFromLastSync = await calendar.events.list({
calendarId: "primary",
timeMin: new Date().toISOString(),
timeMax,
singleEvents: true,
});
Full error I'm getting:
{
"response": {
"config": {
"method": "POST",
"url": "https://oauth2.googleapis.com/token",
"data": "refresh_token=1T_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
"headers": {
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "google-api-nodejs-client/7.3.0",
"x-goog-api-client": "gl-node/14.17.0 auth/7.3.0",
"Accept": "application/json"
},
"body": "refresh_token=1T_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
"responseType": "json"
},
"data": {
"error": "invalid_request",
"error_description": "Could not determine client ID from request."
},
"headers": {
"alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
"cache-control": "no-cache, no-store, max-age=0, must-revalidate",
"connection": "close",
"content-encoding": "gzip",
"content-type": "application/json; charset=utf-8",
"date": "Wed, 14 Jul 2021 21:29:59 GMT",
"expires": "Mon, 01 Jan 1990 00:00:00 GMT",
"pragma": "no-cache",
"server": "scaffolding on HTTPServer2",
"transfer-encoding": "chunked",
"vary": "Origin, X-Origin, Referer",
"x-content-type-options": "nosniff",
"x-frame-options": "SAMEORIGIN",
"x-xss-protection": "0"
},
"status": 400,
"statusText": "Bad Request",
"request": { "responseURL": "https://oauth2.googleapis.com/token" }
},
"config": {
"method": "POST",
"url": "https://oauth2.googleapis.com/token",
"data": "refresh_token=1%2F%9Ir67CtgIIoYZT_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
"headers": {
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "google-api-nodejs-client/7.3.0",
"x-goog-api-client": "gl-node/14.17.0 auth/7.3.0",
"Accept": "application/json"
},
"body": "refresh_token=1%2F%2F0gr67CtgIIoYZT_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
"responseType": "json"
},
"code": "400"
}
PS: My app is currently in unverified
state but note sure if that has something to do with it.