Merge pull request #13704 from Budibase/BUDI-8248/reduce-googleapi-calls

Reduce googleapi calls
This commit is contained in:
Adria Navarro 2024-05-17 15:36:22 +02:00 committed by GitHub
commit f6ce6977ef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 52 additions and 25 deletions

View File

@ -1,4 +1,6 @@
import { IdentityContext, Snippet, VM } from "@budibase/types" import { IdentityContext, Snippet, VM } from "@budibase/types"
import { OAuth2Client } from "google-auth-library"
import { GoogleSpreadsheet } from "google-spreadsheet"
// keep this out of Budibase types, don't want to expose context info // keep this out of Budibase types, don't want to expose context info
export type ContextMap = { export type ContextMap = {
@ -12,4 +14,8 @@ export type ContextMap = {
vm?: VM vm?: VM
cleanup?: (() => void | Promise<void>)[] cleanup?: (() => void | Promise<void>)[]
snippets?: Snippet[] snippets?: Snippet[]
googleSheets?: {
oauthClient: OAuth2Client
clients: Record<string, GoogleSpreadsheet>
}
} }

View File

@ -79,7 +79,7 @@
"dotenv": "8.2.0", "dotenv": "8.2.0",
"form-data": "4.0.0", "form-data": "4.0.0",
"global-agent": "3.0.0", "global-agent": "3.0.0",
"google-spreadsheet": "4.1.2", "google-spreadsheet": "npm:@budibase/google-spreadsheet@4.1.2",
"ioredis": "5.3.2", "ioredis": "5.3.2",
"isolated-vm": "^4.7.2", "isolated-vm": "^4.7.2",
"jimp": "0.22.10", "jimp": "0.22.10",

View File

@ -228,32 +228,53 @@ class GoogleSheetsIntegration implements DatasourcePlus {
private async connect() { private async connect() {
try { try {
await setupCreationAuth(this.config) const bbCtx = context.getCurrentContext()
let oauthClient = bbCtx?.googleSheets?.oauthClient
// Initialise oAuth client if (!oauthClient) {
const googleConfig = await configs.getGoogleDatasourceConfig() await setupCreationAuth(this.config)
if (!googleConfig) {
throw new HTTPError("Google config not found", 400) // Initialise oAuth client
const googleConfig = await configs.getGoogleDatasourceConfig()
if (!googleConfig) {
throw new HTTPError("Google config not found", 400)
}
oauthClient = new OAuth2Client({
clientId: googleConfig.clientID,
clientSecret: googleConfig.clientSecret,
})
const tokenResponse = await this.fetchAccessToken({
client_id: googleConfig.clientID,
client_secret: googleConfig.clientSecret,
refresh_token: this.config.auth.refreshToken,
})
oauthClient.setCredentials({
refresh_token: this.config.auth.refreshToken,
access_token: tokenResponse.access_token,
})
if (bbCtx && !bbCtx.googleSheets) {
bbCtx.googleSheets = {
oauthClient,
clients: {},
}
bbCtx.cleanup = bbCtx.cleanup || []
}
} }
const oauthClient = new OAuth2Client({ let client = bbCtx?.googleSheets?.clients[this.spreadsheetId]
clientId: googleConfig.clientID, if (!client) {
clientSecret: googleConfig.clientSecret, client = new GoogleSpreadsheet(this.spreadsheetId, oauthClient)
}) await client.loadInfo()
const tokenResponse = await this.fetchAccessToken({ if (bbCtx?.googleSheets?.clients) {
client_id: googleConfig.clientID, bbCtx.googleSheets.clients[this.spreadsheetId] = client
client_secret: googleConfig.clientSecret, }
refresh_token: this.config.auth.refreshToken, }
})
oauthClient.setCredentials({ this.client = client
refresh_token: this.config.auth.refreshToken,
access_token: tokenResponse.access_token,
})
this.client = new GoogleSpreadsheet(this.spreadsheetId, oauthClient)
await this.client.loadInfo()
} catch (err: any) { } catch (err: any) {
// this happens for xlsx imports // this happens for xlsx imports
if (err.message?.includes("operation is not supported")) { if (err.message?.includes("operation is not supported")) {

View File

@ -11540,10 +11540,10 @@ google-p12-pem@^4.0.0:
dependencies: dependencies:
node-forge "^1.3.1" node-forge "^1.3.1"
google-spreadsheet@4.1.2: "google-spreadsheet@npm:@budibase/google-spreadsheet@4.1.2":
version "4.1.2" version "4.1.2"
resolved "https://registry.yarnpkg.com/google-spreadsheet/-/google-spreadsheet-4.1.2.tgz#92e30fdba7e0d78c55d50731528df7835d58bfee" resolved "https://registry.yarnpkg.com/@budibase/google-spreadsheet/-/google-spreadsheet-4.1.2.tgz#90548ccba2284b3042b08d2974ef3caeaf772ad9"
integrity sha512-HFBweDAkOcyC2qO9kmWESKbNuOcn+R7UzZN/tj5LLNxVv8FHmg113u0Ow+yaKwwIOt/NnDtPLuptAhaxTs0FYw== integrity sha512-dxoY3rQGGnuNeZiXhNc9oYPduzU8xnIjWujFwNvaRRv3zWeUV7mj6HE2o/OJOeekPGt7o44B+w6DfkiaoteZgg==
dependencies: dependencies:
axios "^1.4.0" axios "^1.4.0"
lodash "^4.17.21" lodash "^4.17.21"