JavaScript SDK

SynThera SDK for JavaScript

SynThera JavaScript SDK

The SynThera JavaScript SDK enables seamless integration of clinical AI capabilities into web applications, Node.js backends, and browser-based healthcare tools. Perfect for building modern healthcare applications with real-time clinical intelligence.

Quick Installation

npm install @synthera/sdk

Start building with our modern JavaScript SDK supporting both browser and Node.js environments.

Installation & Setup

Package Managers

NPM
npm install @synthera/sdk
Yarn
yarn add @synthera/sdk
PNPM
pnpm add @synthera/sdk

CDN Usage

Script Tag
<script src="https://cdn.synthera.health/sdk/v1/synthera.min.js"></script>
<script>
  const client = new SynThera({
    apiKey: 'your-api-key'
  });
</script>

Quick Start Example

import { SynTheraClient } from '@synthera/sdk';

// Initialize the client
const client = new SynTheraClient({
  apiKey: 'your-api-key-here',
  environment: 'production', // or 'sandbox'
  region: 'us-east-1'
});

// Example: Analyze patient data
async function analyzePatient() {
  try {
    const patientData = {
      demographics: {
        age: 65,
        gender: 'M',
        medicalHistory: ['hypertension', 'diabetes', 'smoking']
      },
      vitals: {
        bloodPressure: '160/95',
        heartRate: 92,
        respiratoryRate: 18,
        temperature: 99.2
      },
      chiefComplaint: 'Chest pain radiating to left arm'
    };
    
    const analysis = await client.clinical.analyze(patientData);
    
    console.log('Risk Assessment:', analysis.riskScore);
    console.log('Primary Diagnosis:', analysis.primaryDiagnosis);
    console.log('Recommendations:', analysis.recommendations);
    
    return analysis;
  } catch (error) {
    console.error('Analysis failed:', error);
  }
}

// Execute analysis
analyzePatient();

This example shows basic patient data analysis. The SDK supports Promise-based async operations and provides comprehensive error handling.

Clinical Intelligence

// Real-time clinical analysis const result = await client.clinical.analyze({ symptoms: ['shortness of breath', 'fatigue'], labs: { bnp: 850, troponin: 0.02 }, ecg: 'base64-encoded-ecg-data' }); // Access results console.log(result.diagnosis.primary); console.log(result.confidenceScore); console.log(result.urgencyLevel);

Voice Processing

// Real-time voice transcription const stream = await client.voice.startStreaming({ language: 'en-US', specialty: 'cardiology', realTime: true }); stream.onTranscription((text) => { console.log('Transcribed:', text); }); stream.onEntities((entities) => { console.log('Medical entities:', entities); });

Browser Integration

React Integration

import React, { useState, useEffect } from 'react';
import { SynTheraClient } from '@synthera/sdk';

const ClinicalAnalysis = () => {
  const [client, setClient] = useState(null);
  const [analysis, setAnalysis] = useState(null);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    const syntheraClient = new SynTheraClient({
      apiKey: process.env.REACT_APP_SYNTHERA_API_KEY,
      environment: 'production'
    });
    setClient(syntheraClient);
  }, []);

  const analyzePatient = async (patientData) => {
    setLoading(true);
    try {
      const result = await client.clinical.analyze(patientData);
      setAnalysis(result);
    } catch (error) {
      console.error('Analysis error:', error);
    } finally {
      setLoading(false);
    }
  };

  return (
    <div>
      {loading && <div>Analyzing patient data...</div>}
      {analysis && (
        <div>
          <h3>Analysis Results</h3>
          <p>Risk Score: {analysis.riskScore}</p>
          <p>Primary Diagnosis: {analysis.primaryDiagnosis}</p>
        </div>
      )}
    </div>
  );
};

export default ClinicalAnalysis;

Vue.js Integration

<template>
  <div>
    <button @click="analyzePatient" :disabled="loading">
      Analyze Patient
    </button>
    <div v-if="analysis">
      <h3>Analysis Results</h3>
      <p>Risk Score: {{ analysis.riskScore }}</p>
      <p>Diagnosis: {{ analysis.primaryDiagnosis }}</p>
    </div>
  </div>
</template>

<script>
import { SynTheraClient } from '@synthera/sdk';

export default {
  data() {
    return {
      client: null,
      analysis: null,
      loading: false
    };
  },
  mounted() {
    this.client = new SynTheraClient({
      apiKey: process.env.VUE_APP_SYNTHERA_API_KEY
    });
  },
  methods: {
    async analyzePatient() {
      this.loading = true;
      try {
        this.analysis = await this.client.clinical.analyze({
          /* patient data */
        });
      } catch (error) {
        console.error(error);
      } finally {
        this.loading = false;
      }
    }
  }
};
</script>

Node.js Server Integration

Express.js API

const express = require('express');
const { SynTheraClient } = require('@synthera/sdk');

const app = express();
app.use(express.json());

// Initialize SynThera client
const syntheraClient = new SynTheraClient({
  apiKey: process.env.SYNTHERA_API_KEY,
  environment: 'production'
});

// Clinical analysis endpoint
app.post('/api/analyze-patient', async (req, res) => {
  try {
    const { patientData } = req.body;
    
    // Validate patient data
    const validation = await syntheraClient.utils.validateData(patientData);
    if (!validation.isValid) {
      return res.status(400).json({ error: validation.errors });
    }
    
    // Perform clinical analysis
    const analysis = await syntheraClient.clinical.analyze(patientData);
    
    res.json({
      success: true,
      analysis: {
        riskScore: analysis.riskScore,
        primaryDiagnosis: analysis.primaryDiagnosis,
        recommendations: analysis.recommendations,
        confidence: analysis.confidenceScore
      }
    });
  } catch (error) {
    console.error('Analysis error:', error);
    res.status(500).json({ 
      error: 'Clinical analysis failed',
      details: error.message 
    });
  }
});

// Voice transcription endpoint
app.post('/api/transcribe', async (req, res) => {
  try {
    const { audioData, specialty } = req.body;
    
    const transcription = await syntheraClient.voice.transcribe({
      audio: audioData,
      specialty: specialty,
      language: 'en-US'
    });
    
    res.json({
      success: true,
      transcription: transcription.text,
      entities: transcription.medicalEntities
    });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

API Reference

Clinical Module

client.clinical.analyze()
client.clinical.riskScore()
client.clinical.drugInteractions()
client.clinical.guidelines()

Voice Module

client.voice.transcribe()
client.voice.startStreaming()
client.voice.generateSOAP()
client.voice.extractEntities()

Imaging Module

client.imaging.analyze()
client.imaging.detectAnomalies()
client.imaging.measure()
client.imaging.compare()

Lab Module

client.lab.interpret()
client.lab.trends()
client.lab.referenceRanges()
client.lab.criticalValues()

FHIR Module

client.fhir.patient()
client.fhir.observation()
client.fhir.condition()
client.fhir.medication()

Utilities

client.utils.validateData()
client.utils.anonymize()
client.utils.exportReport()
client.utils.healthCheck()

Error Handling

import { 
  SynTheraClient, 
  SynTheraError, 
  AuthenticationError, 
  RateLimitError, 
  ValidationError 
} from '@synthera/sdk';

const client = new SynTheraClient({
  apiKey: 'your-api-key',
  // Enable automatic retries
  retryConfig: {
    maxRetries: 3,
    retryDelay: 1000
  }
});

async function robustAnalysis(patientData) {
  try {
    // Validate data locally first
    const validation = await client.utils.validateData(patientData);
    if (!validation.isValid) {
      throw new ValidationError('Invalid patient data', validation.errors);
    }
    
    const result = await client.clinical.analyze(patientData);
    return result;
    
  } catch (error) {
    if (error instanceof AuthenticationError) {
      console.error('Authentication failed - check API key');
      // Redirect to login or refresh token
      
    } else if (error instanceof RateLimitError) {
      console.warn(`Rate limit exceeded. Retry after ${error.retryAfter}ms`);
      // Implement exponential backoff
      setTimeout(() => robustAnalysis(patientData), error.retryAfter);
      
    } else if (error instanceof ValidationError) {
      console.error('Data validation failed:', error.details);
      // Show user-friendly validation errors
      
    } else if (error instanceof SynTheraError) {
      console.error('SynThera API error:', error.message);
      // Handle API-specific errors
      
    } else {
      console.error('Unexpected error:', error);
      // Handle other errors
    }
    
    throw error;
  }
}

TypeScript Support

The SynThera JavaScript SDK includes comprehensive TypeScript definitions for enhanced developer experience.

import { 
  SynTheraClient, 
  PatientData, 
  ClinicalAnalysis, 
  VoiceTranscription 
} from '@synthera/sdk';

interface CustomPatientData extends PatientData {
  customFields?: Record<string, any>;
}

const client: SynTheraClient = new SynTheraClient({
  apiKey: process.env.SYNTHERA_API_KEY!,
  environment: 'production'
});

async function analyzePatient(
  patientData: CustomPatientData
): Promise<ClinicalAnalysis> {
  const analysis = await client.clinical.analyze(patientData);
  
  // TypeScript provides full intellisense and type checking
  return {
    riskScore: analysis.riskScore,
    primaryDiagnosis: analysis.primaryDiagnosis,
    recommendations: analysis.recommendations,
    confidenceScore: analysis.confidenceScore
  };
}

// Voice transcription with types
async function transcribeAudio(
  audioFile: File
): Promise<VoiceTranscription> {
  const transcription = await client.voice.transcribe({
    audio: audioFile,
    language: 'en-US',
    specialty: 'cardiology'
  });
  
  return transcription;
}

Additional Resources

API Documentation

Complete REST API reference

NPM Package

Official JavaScript package

GitHub Repository

Source code and examples

Community Support

Get help from other developers