googleapis / google-api-nodejs-client

Google's officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included.
https://googleapis.dev/nodejs/googleapis/latest/
Apache License 2.0
11.34k stars 1.92k forks source link

"Precondition check failed" with gmail client + oauth2 #3532

Open jamiedavenport opened 1 month ago

jamiedavenport commented 1 month ago

I've setup Google OAuth with Lucia and storing the refresh token in the database.

I've tried to create a gmail client like so, using the stored refresh token:

export async function createGmailClient(refreshToken: string) {
  const auth = new google.auth.OAuth2(clientId, clientSecret, redirectUri);
  auth.setCredentials({ refresh_token: refreshToken });

  return google.gmail({ version: "v1", auth });
}

And then listing messages like so:

const messages = await client.users.messages.list({
      userId: "me",
    });

But I'm getting a 400 - Precondition check failed. error which is strange to see since most reports talk about this error with service accounts.

I'm assuming that I've setup the OAuth2 client incorrectly but the error messages aren't very helpful. Any help here would be hugely appreciated.

rnuyts commented 2 weeks ago

Hi @jamiedavenport,

We have the same issue with the Ruby Gmail Client and also using OAuth authentication.

When we try to send an email for one of our users, we have this "Precondition check failed" error. For the other users (using other Google Workspace accounts), it works perfectly.

And we don't know why it happens for this specific user...