Unignored dist/ so yarn/npm can install from git URL without needing to build locally. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
100 lines
3.1 KiB
JavaScript
100 lines
3.1 KiB
JavaScript
/**
|
|
* HTTP transport for sending events to the server
|
|
*/
|
|
export class Transport {
|
|
constructor(parsedDsn, apiBaseUrl, debug = false) {
|
|
this.apiBaseUrl = apiBaseUrl;
|
|
this.publicKey = parsedDsn.publicKey;
|
|
this.debug = debug;
|
|
}
|
|
/**
|
|
* Send an event to the server
|
|
*/
|
|
async send(event) {
|
|
const url = `${this.apiBaseUrl}/api/v1/events`;
|
|
try {
|
|
const response = await fetch(url, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-Public-Key': this.publicKey,
|
|
},
|
|
body: JSON.stringify(this.serializeEvent(event)),
|
|
});
|
|
if (!response.ok) {
|
|
const errorText = await response.text();
|
|
if (this.debug) {
|
|
console.error('[IronTelemetry] Failed to send event:', response.status, errorText);
|
|
}
|
|
return {
|
|
success: false,
|
|
error: `HTTP ${response.status}: ${errorText}`,
|
|
};
|
|
}
|
|
const result = await response.json();
|
|
if (this.debug) {
|
|
console.log('[IronTelemetry] Event sent successfully:', event.eventId);
|
|
}
|
|
return {
|
|
success: true,
|
|
eventId: result.eventId ?? event.eventId,
|
|
};
|
|
}
|
|
catch (error) {
|
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
if (this.debug) {
|
|
console.error('[IronTelemetry] Failed to send event:', errorMessage);
|
|
}
|
|
return {
|
|
success: false,
|
|
error: errorMessage,
|
|
};
|
|
}
|
|
}
|
|
/**
|
|
* Check if the server is reachable
|
|
*/
|
|
async isOnline() {
|
|
try {
|
|
const response = await fetch(`${this.apiBaseUrl}/api/v1/health`, {
|
|
method: 'GET',
|
|
headers: {
|
|
'X-Public-Key': this.publicKey,
|
|
},
|
|
});
|
|
return response.ok;
|
|
}
|
|
catch {
|
|
return false;
|
|
}
|
|
}
|
|
/**
|
|
* Serialize an event for sending
|
|
*/
|
|
serializeEvent(event) {
|
|
return {
|
|
eventId: event.eventId,
|
|
timestamp: event.timestamp.toISOString(),
|
|
level: event.level,
|
|
message: event.message,
|
|
exception: event.exception,
|
|
user: event.user,
|
|
tags: event.tags,
|
|
extra: event.extra,
|
|
breadcrumbs: event.breadcrumbs.map((b) => ({
|
|
...b,
|
|
timestamp: b.timestamp.toISOString(),
|
|
})),
|
|
journey: event.journey
|
|
? {
|
|
...event.journey,
|
|
startedAt: event.journey.startedAt.toISOString(),
|
|
}
|
|
: undefined,
|
|
environment: event.environment,
|
|
appVersion: event.appVersion,
|
|
platform: event.platform,
|
|
};
|
|
}
|
|
}
|
|
//# sourceMappingURL=transport.js.map
|