feat: write data to sheet with oauth

This commit is contained in:
karishmas6
2024-10-17 21:22:34 +05:30
parent ce60e083e7
commit 00076272f6
2 changed files with 51 additions and 13 deletions

View File

@@ -68,32 +68,52 @@ export async function updateGoogleSheet(robotId: string, runId: string) {
}
};
export async function writeDataToSheet(fileName: string, spreadsheetId: string, range: string, data: any[]) {
export async function writeDataToSheet(robotId: string, spreadsheetId: string, data: any[]) {
try {
const integrationCredentialsPath = getIntegrationsFilePath(fileName);
const integrationCredentials = JSON.parse(fs.readFileSync(integrationCredentialsPath, 'utf-8'));;
const robot = await Robot.findOne({ where: { 'recording_meta.id': robotId } });
const auth = new google.auth.GoogleAuth({
credentials: {
client_email: integrationCredentials.credentials.client_email,
private_key: integrationCredentials.credentials.private_key,
},
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
if (!robot) {
throw new Error(`Robot not found for robotId: ${robotId}`);
}
if (!robot.google_access_token || !robot.google_refresh_token) {
throw new Error('Google Sheets access not configured for user');
}
const oauth2Client = new google.auth.OAuth2(
process.env.GOOGLE_CLIENT_ID,
process.env.GOOGLE_CLIENT_SECRET,
'http://localhost:3000'
);
oauth2Client.setCredentials({
access_token: robot.google_access_token,
refresh_token: robot.google_refresh_token,
});
const authToken = await auth.getClient();
const sheets = google.sheets({ version: 'v4', auth: authToken as any });
// Refresh the access token if needed
oauth2Client.on('tokens', async (tokens) => {
if (tokens.refresh_token) {
await robot.update({ google_refresh_token: tokens.refresh_token });
}
if (tokens.access_token) {
await robot.update({ google_access_token: tokens.access_token });
}
});
const sheets = google.sheets({ version: 'v4', auth: oauth2Client });
const resource = { values: data };
await sheets.spreadsheets.values.append({
spreadsheetId,
range,
range: 'Sheet1!A1',
valueInputOption: 'USER_ENTERED',
requestBody: resource,
});
logger.log(`info`, `Data written to Google Sheet: ${spreadsheetId}, Range: ${range}`);
logger.log(`info`, `Data written to Google Sheet: ${spreadsheetId}`);
} catch (error: any) {
logger.log(`error`, `Error writing data to Google Sheet: ${error.message}`);
throw error;

View File

@@ -0,0 +1,18 @@
{
"fileName": "Load More Test",
"spreadsheetId": "1lv1DV_Fs2pqRWje5Go9Lfi4qFRjaVH5a8-wOdduOLpM",
"range": "Sheet1!A1:B2",
"credentials": {
"type": "service_account",
"project_id": "maxun-test",
"private_key_id": "19ebcba7a1df27c872e9f4944f38c1636f31ab71",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC6JMuPu+4XvObD\npKcRjNqVb/oCgPLQ4EVVe7yr4u7w8RS5bsQ98ef9lSf4YFlBB8mv+iNqcLCpnW+0\nx/rY+GeuHuUsAzpmvqlBA3s6YnOW52bkNLQsPJfHZTSHOn0pO/5WwWwZkGNNpjY/\njhsqWDXG+CkXq5qAt/e6B2DlM1y3nhYVooguNujqhxKYT8GnS75utEDFpHxvcTN+\n/0dYTz/iDQcqbge2iHFiYbDGjacqecK9s9sbXchsFVLad/gf1Vjk40xYvbMRgzI0\nUJo5GRwa2QUzSCsZViG7VzoQ7pLxRBSl+6CR5n+UvSECGzJxKYgLhMdd40qP4JTl\nSn9TkjARAgMBAAECggEAJiKUq6lKQYW7Vzib264aOARdWXb2iBFyUu2LPUG8RxN0\n9fp57ODq8NpGeo2uq3J/gPSDnfJhVxaAhK51t07I2vTMaaRtqhAEl+OxMshpuvBE\ndZtQkEGHrNuQk+XJL5HxbO+qiGA63/Ud5w5jhVzWA6HitU08VYObFnsdgEdyBtHc\nbVtU02hgComkeaEzuj4fQUR6wOxZ+nlS6K8A9KObk2k+zYzWaoTpDq1pw4g8U0WL\nzAb9btSpEg130JiLAFrNhKzhqtKxU8/Iz9/YEXOmLlAHUSXb9R9yXg0hPLAoAGUL\nKhu6O/GEW8S4UQxMJp3tkMxPT/x7CDCCcXPjPHVKgwKBgQDa4OpjgcABXBfsi8JS\nFnO5PKjoAvlhB8FFlk8lTN/QlXmLfW22hwnlUunvopAfqVgHIj1KqLcqk0qugX8H\n372w/Fj/KC/seb2Z/xe3Yq/VqcWuAsoAfp856cxTISUXhn+OfFoBBirlGon0gMSl\noKpWi8NRjhdXeG6wkWZgZYGcGwKBgQDZtqA2Aqbn9VzVskvqYq0v1LVAFJFUpZTs\naXxYUMU4usuEKhYLWzBraCq+sQlrj9qQl1u6gMcNEZwcr65nlOonzJSq1Qum1kon\nZ+YSFsHnjoBJH9M7FoHfGuR7WKp089QLFW6h1KE85GZ7HMcbYNmQ/Zu5lqNxHqRN\nSn6RTg5PQwKBgQCdilPKiYJsuB+UJ8gXE4f55Rph3Hooh89pydVvsJRL6rqQVxhX\nz3yk7ffpfqWj1FzCzbc1/JfR8jBHyHdpcHZ1ZDyecwuDduCsbfphCYwsCsV5CRLi\nJkFvCsQBdZLgCvPW19Rkdk77lg2DygdAe5L/NhvAoLhWQh3RwuXgLk+KzwKBgQCA\n+D2qISIMkP5AnVF5dKERj5kbb9Oz6C7zaX2+t4JNm+JJ1cCfU5K4XcnMkwV4kYwx\nUWiGcBj6de8b0zqmo8GeeAOtu20elRzygQr6tj6B1JnMN60i+K9QohattxWrGHIJ\natXRyisF7muDDMYqQtI/oOyqIUGLFlLQcovNugaiDwKBgQCRHTfXCu4GyaXmW7du\n1liWLx2W7HWF8e7Lbfo4mw7dR/qaU+LtY+IGFviVmOWmfg5YkstSbnZnJ/h6TMMw\nLQUL4p/gtC+TEKtISU0BUei2T4URGfFNEXybZqD/PKc6FJs0hwolAuuK2AcnvZur\nAclfCbofvdN0owKnHhBFz4o7AA==\n-----END PRIVATE KEY-----\n",
"client_email": "maxun-test@maxun-test.iam.gserviceaccount.com",
"client_id": "112924857681130955230",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/maxun-test%40maxun-test.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
}