#!/usr/bin/env node
const https = require('https');
async function makeHttpRequest(hostname, path, method = 'GET', headers = {}, postData = null) {
return new Promise((resolve, reject) => {
const options = {
hostname,
path,
method,
headers: {
'Content-Type': 'application/json',
'User-Agent': 'Debug-Test/1.0',
...headers
}
};
if (postData && method === 'POST') {
const data = JSON.stringify(postData);
options.headers['Content-Length'] = Buffer.byteLength(data);
}
const req = https.request(options, (res) => {
let responseBody = '';
res.on('data', (chunk) => responseBody += chunk);
res.on('end', () => {
try {
const parsedBody = responseBody ? JSON.parse(responseBody) : null;
resolve({
statusCode: res.statusCode,
headers: res.headers,
body: parsedBody,
rawBody: responseBody
});
} catch (error) {
resolve({
statusCode: res.statusCode,
headers: res.headers,
body: null,
rawBody: responseBody
});
}
});
});
req.on('error', (error) => reject(error));
req.setTimeout(10000, () => {
req.destroy();
reject(new Error('Request timeout'));
});
if (postData && method === 'POST') {
req.write(JSON.stringify(postData));
}
req.end();
});
}
async function testApiCall() {
console.log('๐งช Testing Simple API Call After Authentication');
console.log('================================================');
// First authenticate
console.log('๐ Authenticating...');
const authResponse = await makeHttpRequest(
'api.umbrellacost.io',
'/api/v1/users/signin',
'POST',
{},
{
username: 'david+saola@umbrellacost.com',
password: 'Dsamsung1!'
}
);
console.log('Auth status:', authResponse.statusCode);
console.log('Has jwtToken?', !!authResponse.body?.jwtToken);
if (!authResponse.body?.jwtToken) {
console.log('โ Authentication failed');
console.log('Auth response:', authResponse.rawBody.substring(0, 200));
return;
}
console.log('โ
Authentication successful');
const jwtToken = authResponse.body.jwtToken;
// Test a simple API call - /users endpoint
console.log('\n๐ Testing /users endpoint...');
try {
const userResponse = await makeHttpRequest(
'api.umbrellacost.io',
'/api/v1/users',
'GET',
{
'Authorization': jwtToken,
'Content-Type': 'application/json'
}
);
console.log('๐ฅ Users response status:', userResponse.statusCode);
console.log('๐ฅ Users response size:', userResponse.rawBody.length);
if (userResponse.statusCode === 200) {
console.log('โ
Users endpoint working!');
console.log('๐ฅ Users response preview:', userResponse.rawBody.substring(0, 200));
} else {
console.log('โ Users endpoint failed');
console.log('๐ฅ Users error:', userResponse.rawBody);
}
} catch (error) {
console.log('โ Users endpoint error:', error.message);
}
// Test budgets endpoint with simple parameters
console.log('\n๐ Testing /budgets/v2/i/ endpoint...');
try {
const budgetResponse = await makeHttpRequest(
'api.umbrellacost.io',
'/api/v1/budgets/v2/i/?only_metadata=true',
'GET',
{
'Authorization': jwtToken,
'Content-Type': 'application/json'
}
);
console.log('๐ฅ Budget response status:', budgetResponse.statusCode);
console.log('๐ฅ Budget response size:', budgetResponse.rawBody.length);
if (budgetResponse.statusCode === 200) {
console.log('โ
Budget endpoint working!');
console.log('๐ฅ Budget response preview:', budgetResponse.rawBody.substring(0, 200));
} else {
console.log('โ Budget endpoint failed');
console.log('๐ฅ Budget error:', budgetResponse.rawBody);
}
} catch (error) {
console.log('โ Budget endpoint error:', error.message);
}
// Test simple invoices endpoint
console.log('\n๐ Testing /invoices/caui endpoint with basic params...');
try {
const params = 'groupBy=none&periodGranLevel=month&costType=["cost","discount"]&isUnblended=true&startDate=2024-01-01&endDate=2024-01-31';
const invoiceResponse = await makeHttpRequest(
'api.umbrellacost.io',
`/api/v1/invoices/caui?${params}`,
'GET',
{
'Authorization': jwtToken,
'Content-Type': 'application/json'
}
);
console.log('๐ฅ Invoice response status:', invoiceResponse.statusCode);
console.log('๐ฅ Invoice response size:', invoiceResponse.rawBody.length);
if (invoiceResponse.statusCode === 200) {
console.log('โ
Invoice endpoint working!');
console.log('๐ฅ Invoice response preview:', invoiceResponse.rawBody.substring(0, 200));
} else {
console.log('โ Invoice endpoint failed');
console.log('๐ฅ Invoice error:', invoiceResponse.rawBody);
}
} catch (error) {
console.log('โ Invoice endpoint error:', error.message);
}
}
testApiCall().catch(console.error);