const axios = require('axios');
async function testSaolaPaginationFix() {
console.log('đź§Ş Testing SAOLA pagination fix (divisionId = 0 should NOT have commonParams)...\n');
// Login first
const loginResponse = await axios.post('https://cognito-idp.us-east-1.amazonaws.com/', {
AuthFlow: 'USER_PASSWORD_AUTH',
ClientId: '7i82cnpt469rcd93fif1glhnkm',
AuthParameters: {
USERNAME: 'david+saola@umbrellacost.com',
PASSWORD: process.env.UMBRELLA_PASSWORD || 'YourPasswordHere'
}
}, {
headers: {
'X-Amz-Target': 'AWSCognitoIdentityProviderService.InitiateAuth',
'Content-Type': 'application/x-amz-json-1.1'
}
});
const idToken = loginResponse.data.AuthenticationResult.IdToken;
const userKey = '8bd39ae4-ebea-4426-bd22-07349dd8b962'; // SAOLA userKey
const requestBody = {
filters: {
status_filter: "potential_savings",
is_open: true,
user_status: {
done: false,
excluded: false
},
open_recs_creation_date: {
from: "2024-10-02",
to: "2025-10-02"
},
closed_and_done_recs_dates: {
last_update_date: {
from: "2024-10-02",
to: "2025-10-02"
}
},
cost_mode: "UNBLENDED"
},
sort: [{
by: "savings",
order: "desc"
}],
page_size: 100,
pagination_token: null
};
console.log('đź“‹ Request body:', JSON.stringify(requestBody, null, 2));
let allRecommendations = [];
let paginationToken = null;
let pageCount = 0;
do {
const pageRequestBody = {
...requestBody,
pagination_token: paginationToken
};
console.log(`\nđź“„ Fetching page ${pageCount + 1}...`);
// Test WITHOUT commonParams (correct for direct customers)
const response = await axios.post('https://api.umbrellacost.io/api/v2/recommendations/list', pageRequestBody, {
headers: {
'Authorization': idToken,
'apikey': `${userKey}:9350:0`,
'Content-Type': 'application/json'
// NO commonParams header - this is correct for divisionId = 0
},
timeout: 30000
});
const pageData = response.data.page || [];
allRecommendations.push(...pageData);
paginationToken = response.data.pagination_token;
pageCount++;
console.log(` âś… Page ${pageCount}: ${pageData.length} recommendations`);
console.log(` đź”— Next token: ${paginationToken ? 'YES (has more pages)' : 'NO (last page)'}`);
if (pageCount > 20) {
console.log(' ⚠️ Safety limit reached (20 pages)');
break;
}
} while (paginationToken);
console.log(`\n📊 FINAL RESULTS:`);
console.log(` Total pages fetched: ${pageCount}`);
console.log(` Total recommendations: ${allRecommendations.length}`);
console.log(` Expected: More than 100 if pagination is working`);
if (allRecommendations.length === 100) {
console.log(`\n❌ PAGINATION NOT WORKING - Only got 100 results`);
} else {
console.log(`\nâś… PAGINATION WORKING - Got ${allRecommendations.length} results`);
}
// Show savings breakdown
const totalSavings = allRecommendations.reduce((sum, rec) => sum + (rec.annualSavings?.unblended || 0), 0);
console.log(` Total potential savings: $${totalSavings.toFixed(2)}`);
}
testSaolaPaginationFix().catch(console.error);