115 lines
3.4 KiB
JavaScript
Executable File
115 lines
3.4 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Test script for Omada API connection
|
|
* Tests authentication and basic API calls
|
|
*/
|
|
|
|
import { OmadaClient, SitesService, DevicesService } from './omada-api/dist/index.js';
|
|
import { readFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { homedir } from 'os';
|
|
|
|
// Load environment variables
|
|
const envPath = join(homedir(), '.env');
|
|
let envVars = {};
|
|
|
|
try {
|
|
const envFile = readFileSync(envPath, 'utf8');
|
|
envFile.split('\n').forEach(line => {
|
|
if (line.includes('=') && !line.trim().startsWith('#')) {
|
|
const [key, ...values] = line.split('=');
|
|
if (key && /^[A-Z_][A-Z0-9_]*$/.test(key.trim())) {
|
|
let value = values.join('=').trim();
|
|
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
(value.startsWith("'") && value.endsWith("'"))) {
|
|
value = value.slice(1, -1);
|
|
}
|
|
envVars[key.trim()] = value;
|
|
}
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('Error loading .env file:', error.message);
|
|
process.exit(1);
|
|
}
|
|
|
|
// Get configuration
|
|
const baseUrl = envVars.OMADA_CONTROLLER_URL;
|
|
const clientId = envVars.OMADA_API_KEY;
|
|
const clientSecret = envVars.OMADA_API_SECRET;
|
|
const siteId = envVars.OMADA_SITE_ID;
|
|
const verifySSL = envVars.OMADA_VERIFY_SSL !== 'false';
|
|
|
|
if (!baseUrl || !clientId || !clientSecret) {
|
|
console.error('Error: Missing required environment variables');
|
|
console.error('Required: OMADA_CONTROLLER_URL, OMADA_API_KEY, OMADA_API_SECRET');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('=== Omada API Connection Test ===\n');
|
|
console.log(`Controller URL: ${baseUrl}`);
|
|
console.log(`Site ID: ${siteId || 'auto-detect'}`);
|
|
console.log(`SSL Verification: ${verifySSL}\n`);
|
|
|
|
// Create client
|
|
const client = new OmadaClient({
|
|
baseUrl,
|
|
clientId,
|
|
clientSecret,
|
|
siteId,
|
|
verifySSL,
|
|
});
|
|
|
|
async function test() {
|
|
try {
|
|
console.log('1. Testing authentication...');
|
|
const auth = client.getAuth();
|
|
const token = await auth.getAccessToken();
|
|
console.log(' ✓ Authentication successful');
|
|
console.log(` Token: ${token.substring(0, 20)}...\n`);
|
|
|
|
console.log('2. Getting site information...');
|
|
const sitesService = new SitesService(client);
|
|
const sites = await sitesService.listSites();
|
|
console.log(` ✓ Found ${sites.length} site(s)`);
|
|
sites.forEach((site, index) => {
|
|
console.log(` Site ${index + 1}: ${site.name} (${site.id})`);
|
|
});
|
|
console.log('');
|
|
|
|
const effectiveSiteId = siteId || (await client.getSiteId());
|
|
console.log(`3. Using site ID: ${effectiveSiteId}\n`);
|
|
|
|
console.log('4. Listing devices...');
|
|
const devicesService = new DevicesService(client);
|
|
const devices = await devicesService.listDevices({ siteId: effectiveSiteId });
|
|
console.log(` ✓ Found ${devices.length} device(s)`);
|
|
|
|
if (devices.length > 0) {
|
|
console.log('\n Devices:');
|
|
devices.forEach((device, index) => {
|
|
console.log(` ${index + 1}. ${device.name} (${device.type}) - ${device.model}`);
|
|
console.log(` Status: ${device.status === 1 ? 'Online' : 'Offline'}`);
|
|
console.log(` IP: ${device.ip || 'N/A'}`);
|
|
});
|
|
} else {
|
|
console.log(' No devices found');
|
|
}
|
|
|
|
console.log('\n=== Test completed successfully! ===');
|
|
|
|
} catch (error) {
|
|
console.error('\n=== Test failed ===');
|
|
console.error('Error:', error.message);
|
|
if (error.stack) {
|
|
console.error('\nStack trace:');
|
|
console.error(error.stack);
|
|
}
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
test();
|
|
|