39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
import fetch from 'node-fetch';
|
|
|
|
export class MetricsService {
|
|
constructor(apiKey, apiRevision) {
|
|
this.apiKey = apiKey;
|
|
this.apiRevision = apiRevision;
|
|
this.baseUrl = 'https://a.klaviyo.com/api';
|
|
}
|
|
async getMetrics() {
|
|
try {
|
|
const response = await fetch(`${this.baseUrl}/metrics/`, {
|
|
headers: {
|
|
'Authorization': `Klaviyo-API-Key ${this.apiKey}`,
|
|
'revision': this.apiRevision,
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json'
|
|
}
|
|
});
|
|
|
|
if (!response.ok) {
|
|
const errorData = await response.json();
|
|
console.error('[MetricsService] API Error:', errorData);
|
|
throw new Error(`Klaviyo API error: ${response.status} ${response.statusText}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
// Sort the results by name before returning
|
|
if (data.data) {
|
|
data.data.sort((a, b) => a.attributes.name.localeCompare(b.attributes.name));
|
|
}
|
|
|
|
return data;
|
|
} catch (error) {
|
|
console.error('[MetricsService] Error fetching metrics:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|