#!/usr/bin/env node
import axios from 'axios';
import * as readline from 'readline';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function question(query) {
return new Promise(resolve => rl.question(query, resolve));
}
async function testConnection() {
console.log('\n🔍 Opus API Connection Test\n');
const apiKey = await question('Enter your Opus API Service Key: ');
const workflowId = await question('Enter a Workflow ID to test (or press Enter to skip): ');
if (!apiKey || apiKey.trim() === '') {
console.error('❌ API key is required!');
process.exit(1);
}
const axiosInstance = axios.create({
baseURL: 'https://operator.opus.com',
headers: {
'x-service-key': apiKey.trim(),
'Content-Type': 'application/json',
},
});
console.log('\n⏳ Testing connection to Opus API...\n');
try {
if (workflowId && workflowId.trim() !== '') {
const response = await axiosInstance.get(`/workflow/${workflowId.trim()}`);
console.log('✅ Connection successful!');
console.log(`\n📋 Workflow: ${response.data.name}`);
console.log(`📝 Description: ${response.data.description}`);
console.log(`🔄 Active: ${response.data.active}`);
if (response.data.jobPayloadSchema) {
const inputCount = Object.keys(response.data.jobPayloadSchema).length;
console.log(`📥 Required Inputs: ${inputCount}`);
console.log('\n🔑 Input Fields:');
for (const [key, value] of Object.entries(response.data.jobPayloadSchema)) {
console.log(` - ${value.display_name} (${value.type})${value.is_nullable ? ' [optional]' : ' [required]'}`);
}
}
} else {
console.log('⚠️ No workflow ID provided. Skipping workflow test.');
console.log('✅ To test fully, run again with a valid workflow ID.');
}
} catch (error) {
if (error.response) {
if (error.response.status === 404 && workflowId) {
console.log('\n⚠️ Workflow not found, but authentication is valid!');
console.log('✅ API key is working correctly.');
} else if (error.response.status === 401 || error.response.status === 403) {
console.error('\n❌ Authentication failed!');
console.error('Please check your API key.');
} else {
console.error('\n❌ API Error:', error.response.status);
console.error('Message:', error.response.data?.message || error.message);
}
} else {
console.error('\n❌ Error:', error.message);
}
}
console.log('\n✨ Test complete!\n');
rl.close();
}
testConnection().catch(error => {
console.error('❌ Test failed:', error.message);
process.exit(1);
});