Node.js Examples
JavaScript
Complete Node.js examples for integrating with the Magnetite API
Installation
First, install the required dependencies:
npm install axios dotenv
Basic Setup
Create a basic client for interacting with the Magnetite API:
// magnetite-client.js
const axios = require('axios');
require('dotenv').config();
class MagnetiteClient {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseURL = 'https://magnetite.ai/api';
this.client = axios.create({
baseURL: this.baseURL,
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json'
}
});
}
async generateLeadMagnet(data) {
try {
const response = await this.client.post('/projects/generate', data);
return response.data;
} catch (error) {
throw this.handleError(error);
}
}
async checkStatus(jobId) {
try {
const response = await this.client.get(`/generation/${jobId}/status`);
return response.data;
} catch (error) {
throw this.handleError(error);
}
}
async checkLeadStatus(leadId) {
try {
const response = await this.client.get(`/leads/${leadId}/job-status`);
return response.data;
} catch (error) {
throw this.handleError(error);
}
}
handleError(error) {
if (error.response) {
return new Error(`API Error: ${error.response.data.error?.message || error.response.statusText}`);
} else if (error.request) {
return new Error('Network Error: No response received from server');
} else {
return new Error(`Request Error: ${error.message}`);
}
}
}
module.exports = MagnetiteClient;
Environment Variables
Create a .env
file to store your API credentials:
# .env
MAGNETITE_API_KEY=sk_your_api_key_here
MAGNETITE_PROJECT_ID=your_project_id_here
Complete Examples
Basic Lead Magnet Generation
Simple example of generating a lead magnet
// basic-example.js
const MagnetiteClient = require('./magnetite-client');
async function basicExample() {
const client = new MagnetiteClient(process.env.MAGNETITE_API_KEY);
try {
const result = await client.generateLeadMagnet({
projectId: process.env.MAGNETITE_PROJECT_ID,
email: 'john.smith@example.com',
fullName: 'John Smith',
company: 'Acme Corp',
domain: 'acmecorp.com',
title: 'VP of Sales',
industry: 'SaaS'
});
console.log('Generation started:');
console.log('Lead ID:', result.leadId);
console.log('Job ID:', result.jobId);
console.log('Lead Magnet URL:', result.leadMagnetUrl);
return result;
} catch (error) {
console.error('Error generating lead magnet:', error.message);
throw error;
}
}
basicExample()
.then(() => console.log('Done!'))
.catch(console.error);
Generate and Wait for Completion
Poll the API until generation is complete
// wait-for-completion.js
const MagnetiteClient = require('./magnetite-client');
async function generateAndWait() {
const client = new MagnetiteClient(process.env.MAGNETITE_API_KEY);
try {
const generation = await client.generateLeadMagnet({
projectId: process.env.MAGNETITE_PROJECT_ID,
email: 'jane.doe@techcorp.com',
fullName: 'Jane Doe',
company: 'TechCorp Inc',
domain: 'techcorp.com',
title: 'Marketing Director',
industry: 'Technology',
companySize: '51-200'
});
console.log('Generation started with job ID:', generation.jobId);
console.log('Lead magnet will be available at:', generation.leadMagnetUrl);
const result = await pollUntilComplete(client, generation.jobId);
console.log('Generation completed!');
console.log('Final URL:', result.leadMagnetUrl);
console.log('Processing time:', result.processingTime + 's');
return result;
} catch (error) {
console.error('Error:', error.message);
throw error;
}
}
async function pollUntilComplete(client, jobId, maxAttempts = 30) {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
const status = await client.checkStatus(jobId);
console.log(`Attempt ${attempt}: ${status.status} (${status.progress}%)`);
if (status.status === 'completed') {
return status.result;
}
if (status.status === 'failed') {
throw new Error('Generation failed: ' + (status.error?.message || 'Unknown error'));
}
const delay = Math.min(2000 + (attempt * 1000), 10000);
console.log('Waiting ' + (delay / 1000) + 's before next check...');
await sleep(delay);
} catch (error) {
console.error('Polling error on attempt ' + attempt + ':', error.message);
if (attempt === maxAttempts) throw error;
await sleep(5000);
}
}
throw new Error('Generation did not complete within expected time');
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
generateAndWait()
.then(() => console.log('All done!'))
.catch(console.error);
Bulk Processing
Process multiple leads with rate limiting
// bulk-processing.js
const MagnetiteClient = require('./magnetite-client');
async function bulkProcessing() {
const client = new MagnetiteClient(process.env.MAGNETITE_API_KEY);
const leads = [
{
email: 'ceo@startup.com',
fullName: 'Sarah Johnson',
company: 'StartupCo',
domain: 'startup.com',
title: 'CEO'
},
{
email: 'director@bigcorp.com',
fullName: 'Michael Chen',
company: 'BigCorp Industries',
domain: 'bigcorp.com',
title: 'Sales Director'
}
];
const results = [];
const concurrencyLimit = 3;
console.log('Processing', leads.length, 'leads with concurrency limit of', concurrencyLimit);
for (let i = 0; i < leads.length; i += concurrencyLimit) {
const batch = leads.slice(i, i + concurrencyLimit);
console.log('Processing batch', Math.floor(i / concurrencyLimit) + 1, '(' + batch.length + ' leads)');
const batchPromises = batch.map(async (lead) => {
try {
const result = await client.generateLeadMagnet({
projectId: process.env.MAGNETITE_PROJECT_ID,
...lead
});
console.log('Started generation for', lead.email, '(Job:', result.jobId + ')');
return { lead, success: true, result };
} catch (error) {
console.error('Failed to start generation for', lead.email + ':', error.message);
return { lead, success: false, error: error.message };
}
});
const batchResults = await Promise.all(batchPromises);
results.push(...batchResults);
if (i + concurrencyLimit < leads.length) {
console.log('Waiting 10s before next batch...');
await sleep(10000);
}
}
const successful = results.filter(r => r.success);
const failed = results.filter(r => !r.success);
console.log('=== SUMMARY ===');
console.log('Total processed:', results.length);
console.log('Successful:', successful.length);
console.log('Failed:', failed.length);
return results;
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
bulkProcessing()
.then(() => console.log('Bulk processing complete!'))
.catch(console.error);
Next Steps
Explore more examples in different programming languages.