visionify-analytics-tracker
Version:
Track user session and page usage in apps
53 lines (52 loc) • 1.79 kB
JavaScript
// Shared function to send data with fallback logic
async function sendData(endpoint, payload, errorMessage, devMode) {
try {
const response = await fetch(endpoint, {
method: 'POST',
body: payload,
headers: {
'Content-Type': 'application/json',
},
keepalive: true,
});
if (!response.ok) {
const errorText = await response.text();
console.warn(`visionify-analytics-tracker: ${errorMessage}`, {
status: response.status,
statusText: response.statusText,
error: errorText
});
}
else if (devMode) {
console.log(`visionify-analytics-tracker: Successfully sent ${JSON.parse(payload).length} events`);
}
}
catch (err) {
console.warn(`visionify-analytics-tracker: ${errorMessage}`, err);
}
}
export async function sendEventBatch(events, endpoint, devMode) {
if (devMode) {
console.log('[visionify-analytics-tracker] sendEventBatch called with:', {
eventsLength: events.length,
endpoint,
devMode,
hasEndpoint: !!endpoint,
shouldSend: !(!endpoint || devMode)
});
}
if (!endpoint || devMode) {
if (devMode) {
console.log('[visionify-analytics-tracker][devMode][pageviews]', events);
}
return;
}
if (!Array.isArray(events) || events.length === 0) {
if (devMode) {
console.warn('[visionify-analytics-tracker] Attempted to send empty or invalid events array');
}
return;
}
const payload = JSON.stringify(events);
await sendData(endpoint, payload, 'failed to send batch', devMode);
}