import { SplidClient } from 'splid-js'; import {google} from "googleapis"; const spreadsheetId = '1RxeQTnirJILgqXDuvI2RQt9vljn1Jz_JFCzVDRQviIg'; // Create a reusable sheets API client async function createSheetsClient() { const auth = new google.auth.GoogleAuth({ keyFile: 'epic-c381a-c7475e0b43cc.json', scopes: ['https://www.googleapis.com/auth/spreadsheets'], }); return google.sheets({ version: 'v4', auth }); } // Get data from Google Sheets async function getSheetData(spreadsheetId, range) { try { const sheets = await createSheetsClient(); const response = await sheets.spreadsheets.values.get({ spreadsheetId, range }); return response.data.values; } catch (err) { console.error('Error getting sheet data:', err); throw err; } } // Update data in Google Sheets async function updateSheetData(spreadsheetId, range, values) { try { const sheets = await createSheetsClient(); const response = await sheets.spreadsheets.values.update({ spreadsheetId, range, valueInputOption: 'USER_ENTERED', resource: { values }, }); return response.data; } catch (err) { console.error('Error updating sheet data:', err); throw err; } } async function getSplidData(splidCode) { const splid = new SplidClient(); const groupRes = await splid.group.getByInviteCode(splidCode); const groupId = groupRes.result.objectId; const groupInfo = await splid.groupInfo.getOneByGroup(groupId); const members = await splid.person.getAllByGroup(groupId); const expensesAndPayments = await splid.entry.getAllByGroup(groupId); const balance = SplidClient.getBalance( members, expensesAndPayments, groupInfo ); const suggestedPayments = SplidClient.getSuggestedPayments(balance); return balance; } async function resetTableData() { // Define a reasonable number of rows to clear/fill (adjust as needed) const rowCount = 100; // Create an array of arrays with "-" for each cell in columns E through L const dashData = Array(rowCount).fill().map(() => Array(9).fill("-")); try { await updateSheetData(spreadsheetId, 'Splidy!E2:M', dashData); } catch (err) { console.error('Error resetting table data:', err); throw err; } } async function main() { const splidCodes = await getSheetData(spreadsheetId, 'Splidy!C2:C'); const userTags = await getSheetData(spreadsheetId, 'Splidy!E1:M1'); console.log(splidCodes); await resetTableData(); for (const splidCode of splidCodes) { const splidCodeString = splidCode[0]; if (!splidCodeString) { continue; } console.log(`Processing Splid code: ${splidCodeString}`); const balance = await getSplidData(splidCodeString); console.log(balance); } } main().catch(console.error);