Merge pull request #13704 from Budibase/BUDI-8248/reduce-googleapi-calls
Reduce googleapi calls
This commit is contained in:
commit
f6ce6977ef
|
@ -1,4 +1,6 @@
|
|||
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
|
||||
export type ContextMap = {
|
||||
|
@ -12,4 +14,8 @@ export type ContextMap = {
|
|||
vm?: VM
|
||||
cleanup?: (() => void | Promise<void>)[]
|
||||
snippets?: Snippet[]
|
||||
googleSheets?: {
|
||||
oauthClient: OAuth2Client
|
||||
clients: Record<string, GoogleSpreadsheet>
|
||||
}
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
"dotenv": "8.2.0",
|
||||
"form-data": "4.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",
|
||||
"isolated-vm": "^4.7.2",
|
||||
"jimp": "0.22.10",
|
||||
|
|
|
@ -228,32 +228,53 @@ class GoogleSheetsIntegration implements DatasourcePlus {
|
|||
|
||||
private async connect() {
|
||||
try {
|
||||
await setupCreationAuth(this.config)
|
||||
const bbCtx = context.getCurrentContext()
|
||||
let oauthClient = bbCtx?.googleSheets?.oauthClient
|
||||
|
||||
// Initialise oAuth client
|
||||
const googleConfig = await configs.getGoogleDatasourceConfig()
|
||||
if (!googleConfig) {
|
||||
throw new HTTPError("Google config not found", 400)
|
||||
if (!oauthClient) {
|
||||
await setupCreationAuth(this.config)
|
||||
|
||||
// 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({
|
||||
clientId: googleConfig.clientID,
|
||||
clientSecret: googleConfig.clientSecret,
|
||||
})
|
||||
let client = bbCtx?.googleSheets?.clients[this.spreadsheetId]
|
||||
if (!client) {
|
||||
client = new GoogleSpreadsheet(this.spreadsheetId, oauthClient)
|
||||
await client.loadInfo()
|
||||
|
||||
const tokenResponse = await this.fetchAccessToken({
|
||||
client_id: googleConfig.clientID,
|
||||
client_secret: googleConfig.clientSecret,
|
||||
refresh_token: this.config.auth.refreshToken,
|
||||
})
|
||||
if (bbCtx?.googleSheets?.clients) {
|
||||
bbCtx.googleSheets.clients[this.spreadsheetId] = client
|
||||
}
|
||||
}
|
||||
|
||||
oauthClient.setCredentials({
|
||||
refresh_token: this.config.auth.refreshToken,
|
||||
access_token: tokenResponse.access_token,
|
||||
})
|
||||
|
||||
this.client = new GoogleSpreadsheet(this.spreadsheetId, oauthClient)
|
||||
await this.client.loadInfo()
|
||||
this.client = client
|
||||
} catch (err: any) {
|
||||
// this happens for xlsx imports
|
||||
if (err.message?.includes("operation is not supported")) {
|
||||
|
|
|
@ -11540,10 +11540,10 @@ google-p12-pem@^4.0.0:
|
|||
dependencies:
|
||||
node-forge "^1.3.1"
|
||||
|
||||
google-spreadsheet@4.1.2:
|
||||
"google-spreadsheet@npm:@budibase/google-spreadsheet@4.1.2":
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/google-spreadsheet/-/google-spreadsheet-4.1.2.tgz#92e30fdba7e0d78c55d50731528df7835d58bfee"
|
||||
integrity sha512-HFBweDAkOcyC2qO9kmWESKbNuOcn+R7UzZN/tj5LLNxVv8FHmg113u0Ow+yaKwwIOt/NnDtPLuptAhaxTs0FYw==
|
||||
resolved "https://registry.yarnpkg.com/@budibase/google-spreadsheet/-/google-spreadsheet-4.1.2.tgz#90548ccba2284b3042b08d2974ef3caeaf772ad9"
|
||||
integrity sha512-dxoY3rQGGnuNeZiXhNc9oYPduzU8xnIjWujFwNvaRRv3zWeUV7mj6HE2o/OJOeekPGt7o44B+w6DfkiaoteZgg==
|
||||
dependencies:
|
||||
axios "^1.4.0"
|
||||
lodash "^4.17.21"
|
||||
|
|
Loading…
Reference in New Issue