'use client'; import { useState, useEffect } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { CheckCircle, XCircle, AlertCircle, RefreshCw, Copy, ExternalLink, FileText } from 'lucide-react'; interface HealthStatus { status: 'healthy' | 'error'; message: string; configuration?: { apiUrl: string; username: string; password: string; integrationCode: string; }; instructions?: string[]; apiResponse?: { status: number; statusText: string; error: string; }; possibleIssues?: string[]; } export default function SetupPage() { const [healthStatus, setHealthStatus] = useState(null); const [loading, setLoading] = useState(false); const [copied, setCopied] = useState(false); const checkHealth = async () => { setLoading(true); try { const response = await fetch('/api/health'); const data = await response.json(); setHealthStatus(data); } catch (error) { setHealthStatus({ status: 'error', message: 'Failed to check API health', instructions: ['Make sure the Next.js server is running'] }); } finally { setLoading(false); } }; useEffect(() => { checkHealth(); }, []); const copyEnvTemplate = () => { const template = `# Autotask API Configuration AUTOTASK_API_URL=https://webservices1.autotask.net/atservicesrest/v1.0 AUTOTASK_USERNAME=your-api-username@yourdomain.com AUTOTASK_SECRET=your-api-password AUTOTASK_API_INTEGRATION_CODE=your-tracking-code`; navigator.clipboard.writeText(template); setCopied(true); setTimeout(() => setCopied(false), 2000); }; const getStatusIcon = (status: string) => { if (status === 'configured') { return ; } return ; }; return (

Autotask API Setup & Diagnostics

Configure and test your Autotask API connection

{/* Health Status Card */}
API Connection Status Current status of your Autotask API configuration
{healthStatus && (
{/* Overall Status */}
{healthStatus.status === 'healthy' ? ( <> {healthStatus.message} ) : ( <> {healthStatus.message} )}
{/* Configuration Status */} {healthStatus.configuration && (

Configuration Status:

{getStatusIcon(healthStatus.configuration.apiUrl)} API URL
{getStatusIcon(healthStatus.configuration.username)} Username
{getStatusIcon(healthStatus.configuration.password)} Password
{getStatusIcon(healthStatus.configuration.integrationCode)} Integration Code
)} {/* API Response Error */} {healthStatus.apiResponse && (

API Response Error:

Status: {healthStatus.apiResponse.status} - {healthStatus.apiResponse.statusText}

{healthStatus.apiResponse.error && (

{healthStatus.apiResponse.error}

)}
)} {/* Possible Issues */} {healthStatus.possibleIssues && (

Possible Issues:

    {healthStatus.possibleIssues.map((issue, index) => (
  • {issue}
  • ))}
)} {/* Setup Instructions */} {healthStatus.instructions && (

Setup Instructions:

    {healthStatus.instructions.map((instruction, index) => (
  1. {instruction}
  2. ))}
)}
)}
{/* Environment Template Card */} Environment Variables Template Copy this template to create your .env.local file
                {`# Autotask API Configuration
AUTOTASK_API_URL=https://webservices1.autotask.net/atservicesrest/v1.0
AUTOTASK_USERNAME=your-api-username@yourdomain.com
AUTOTASK_SECRET=your-api-password
AUTOTASK_API_INTEGRATION_CODE=your-tracking-code`}
              

Save this as .env.local in the project root

Remember to restart the server after adding the file

{/* Resources Card */} Helpful Resources Documentation and guides for Autotask API integration {/* API Zone Information */} Autotask API Zones Make sure you're using the correct zone URL for your Autotask instance

North America

  • Zone 1: webservices1.autotask.net
  • Zone 2: webservices2.autotask.net
  • Zone 3: webservices3.autotask.net
  • Zone 4: webservices4.autotask.net

Other Regions

  • Zone 5: webservices5.autotask.net
  • Zone 6: webservices6.autotask.net
  • PRD: prde.autotask.net
  • IOC: ioce.autotask.net
); }