The family:4 option on individual requests wasn't sufficient.
Node.js 18 needs dns.setDefaultResultOrder('ipv4first') called
at module load time to prevent IPv6 resolution attempts to
card.charter.com which is unreachable via IPv6 from this network.
70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* CARD API Connectivity Test
|
|
* Tests: token acquisition → teams list → sample asset lookup
|
|
*/
|
|
require('dns').setDefaultResultOrder('ipv4first');
|
|
require('dotenv').config({ path: require('path').join(__dirname, '..', '.env') });
|
|
|
|
const { isConfigured, missingVars, testConnection, getTeams } = require('../helpers/cardApi');
|
|
|
|
async function main() {
|
|
console.log('=== CARD API Connectivity Test ===');
|
|
console.log(`Timestamp: ${new Date().toISOString()}`);
|
|
console.log(`Target: ${process.env.CARD_API_URL}`);
|
|
console.log(`User: ${process.env.CARD_API_USER}`);
|
|
console.log(`TLS Skip: ${process.env.CARD_SKIP_TLS}`);
|
|
console.log('');
|
|
|
|
if (!isConfigured) {
|
|
console.error('FAIL: CARD API not configured. Missing:', missingVars.join(', '));
|
|
process.exit(1);
|
|
}
|
|
|
|
// Step 1: Token acquisition
|
|
console.log('1. Acquiring Bearer token...');
|
|
const connResult = await testConnection();
|
|
if (!connResult.ok) {
|
|
console.error(' FAIL:', connResult.error);
|
|
process.exit(1);
|
|
}
|
|
console.log(' OK — token acquired:', connResult.token);
|
|
|
|
// Step 2: List teams
|
|
console.log('2. Fetching teams (GET /api/v1/teams)...');
|
|
const teamsResult = await getTeams();
|
|
console.log(' Status:', teamsResult.status);
|
|
if (!teamsResult.ok) {
|
|
console.error(' FAIL:', teamsResult.body.substring(0, 300));
|
|
process.exit(1);
|
|
}
|
|
|
|
let teams;
|
|
try {
|
|
teams = JSON.parse(teamsResult.body);
|
|
} catch (e) {
|
|
console.error(' FAIL: Could not parse response:', teamsResult.body.substring(0, 200));
|
|
process.exit(1);
|
|
}
|
|
|
|
if (Array.isArray(teams)) {
|
|
console.log(` OK — ${teams.length} teams found`);
|
|
const sample = teams.slice(0, 8);
|
|
sample.forEach(t => {
|
|
const name = t.name || t.team_name || t.teamName || JSON.stringify(t).substring(0, 60);
|
|
console.log(` • ${name}`);
|
|
});
|
|
} else {
|
|
console.log(' Response structure:', Object.keys(teams).join(', '));
|
|
console.log(' Preview:', JSON.stringify(teams).substring(0, 200));
|
|
}
|
|
|
|
console.log('');
|
|
console.log('=== RESULT: PASS — CARD API is reachable and authenticated ===');
|
|
}
|
|
|
|
main().catch(err => {
|
|
console.error('ERROR:', err.message);
|
|
process.exit(1);
|
|
});
|