#!/usr/bin/env node
// Check available accounts using the accounts management endpoint
const axios = require('axios');
async function checkAccountsAnswer() {
console.log(`π CHECKING AVAILABLE ACCOUNTS ANSWER`);
console.log(`π€ Account: saola (david+saola@umbrellacost.com)`);
console.log(`β Question: "show me all available accounts"`);
console.log('β'.repeat(80));
try {
// Use the working dual authentication from the cost script
console.log('π Detecting user management system...');
let authHeaders;
try {
// Try Keycloak first
const keycloakResponse = await axios.post('https://api.umbrellacost.io/api/v1/authentication/token/generate', {
username: 'david+saola@umbrellacost.com',
password: 'Dsamsung1!'
});
authHeaders = {
'Authorization': `Bearer ${keycloakResponse.data.token}`,
'Content-Type': 'application/json'
};
console.log('β
Keycloak authentication successful');
} catch (keycloakError) {
console.log('π Keycloak failed, trying Cognito fallback...');
// Cognito fallback
const cognitoResponse = await axios.post('https://api.umbrellacost.io/api/v1/authentication/cognito', {
username: 'david+saola@umbrellacost.com',
password: 'Dsamsung1!'
});
if (cognitoResponse.status !== 200) {
throw new Error(`Cognito auth failed: ${cognitoResponse.status}`);
}
// Get user data to build Basic auth
const userResponse = await axios.get('https://api.umbrellacost.io/api/v1/users', {
headers: {
'Authorization': `Bearer ${cognitoResponse.data.token}`,
'Content-Type': 'application/json'
}
});
const userData = Array.isArray(userResponse.data) ? userResponse.data[0] : userResponse.data;
const apiKey = `${userData.userApiKey}:${userData.customerId}:${userData.currentAccountId}`;
authHeaders = {
'Authorization': `Basic ${Buffer.from(apiKey).toString('base64')}`,
'Content-Type': 'application/json'
};
console.log('β
Cognito authentication successful');
}
// Test /user-management/accounts endpoint for cloud accounts
console.log('\nπ Testing /user-management/accounts endpoint...');
const accountsResponse = await axios.get('https://api.umbrellacost.io/api/v1/user-management/accounts', {
headers: authHeaders
});
console.log('β
Accounts endpoint response:');
console.log(`π Status: ${accountsResponse.status}`);
console.log(`π Data type: ${Array.isArray(accountsResponse.data) ? 'Array' : typeof accountsResponse.data}`);
if (Array.isArray(accountsResponse.data)) {
console.log(`\nπ€ ANSWER: ${accountsResponse.data.length} cloud accounts available`);
// Show accounts with details
console.log('\nπ Available Accounts:');
accountsResponse.data.forEach((account, i) => {
const accountName = account.accountName || account.name || account.displayName || 'Unknown';
const accountId = account.accountId || account.id || 'N/A';
const provider = account.cloudProvider || account.provider || 'Unknown';
console.log(` ${i + 1}. ${accountName} (${accountId}) - ${provider}`);
});
} else if (accountsResponse.data) {
console.log('π€ ANSWER: Account data available');
console.log('π Data structure:', JSON.stringify(accountsResponse.data, null, 2).substring(0, 1000) + '...');
}
} catch (error) {
if (error.response) {
console.log(`β API Error: ${error.response.status} - ${error.response.data?.message || error.response.statusText}`);
if (error.response.data) {
console.log('π Error details:', JSON.stringify(error.response.data, null, 2).substring(0, 500));
}
} else {
console.log(`β Request Error: ${error.message}`);
}
}
}
checkAccountsAnswer().catch(console.error);