observa-sdk 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -305,6 +305,7 @@ var Observa = class {
305
305
  responseHeaders[key] = value;
306
306
  });
307
307
  const [stream1, stream2] = originalResponse.body.tee();
308
+ console.log(`[Observa] Starting captureStream for trace ${traceId}`);
308
309
  this.captureStream({
309
310
  stream: stream2,
310
311
  event,
@@ -315,6 +316,8 @@ var Observa = class {
315
316
  status: originalResponse.status,
316
317
  statusText: originalResponse.statusText,
317
318
  headers: responseHeaders
319
+ }).catch((err) => {
320
+ console.error("[Observa] captureStream promise rejected:", err);
318
321
  });
319
322
  return new Response(stream1, {
320
323
  headers: originalResponse.headers,
@@ -334,6 +337,7 @@ var Observa = class {
334
337
  statusText,
335
338
  headers
336
339
  } = args;
340
+ console.log(`[Observa] captureStream started for trace ${traceId}`);
337
341
  try {
338
342
  const reader = stream.getReader();
339
343
  const decoder = new TextDecoder();
@@ -416,9 +420,18 @@ var Observa = class {
416
420
  systemFingerprint: extracted.systemFingerprint ?? null,
417
421
  ...headers !== void 0 && { headers }
418
422
  };
423
+ console.log(`[Observa] Trace data prepared, calling sendTrace for ${traceId}, response length: ${fullResponse.length}`);
419
424
  await this.sendTrace(traceData);
425
+ console.log(`[Observa] sendTrace completed for ${traceId}`);
420
426
  } catch (err) {
421
427
  console.error("[Observa] Error capturing stream:", err);
428
+ if (err instanceof Error) {
429
+ console.error("[Observa] Error name:", err.name);
430
+ console.error("[Observa] Error message:", err.message);
431
+ if (err.stack) {
432
+ console.error("[Observa] Error stack:", err.stack);
433
+ }
434
+ }
422
435
  }
423
436
  }
424
437
  async sendTrace(trace) {
@@ -427,39 +440,51 @@ var Observa = class {
427
440
  }
428
441
  try {
429
442
  const url = `${this.apiUrl}/api/v1/traces/ingest`;
430
- console.log(`[Observa] Sending trace to: ${url}`);
431
- console.log(`[Observa] Trace ID: ${trace.traceId}`);
432
- console.log(`[Observa] Tenant: ${trace.tenantId}, Project: ${trace.projectId}`);
433
- console.log(`[Observa] API Key present: ${this.apiKey ? "Yes" : "No"} (length: ${this.apiKey?.length || 0})`);
434
- const response = await fetch(url, {
435
- method: "POST",
436
- headers: {
437
- Authorization: `Bearer ${this.apiKey}`,
438
- "Content-Type": "application/json"
439
- },
440
- body: JSON.stringify(trace)
441
- });
442
- console.log(`[Observa] Response status: ${response.status} ${response.statusText}`);
443
- if (!response.ok) {
444
- const errorText = await response.text().catch(() => "Unknown error");
445
- let errorJson;
446
- try {
447
- errorJson = JSON.parse(errorText);
448
- } catch {
449
- errorJson = { error: errorText };
443
+ console.log(`[Observa] Sending trace - URL: ${url}, TraceID: ${trace.traceId}, Tenant: ${trace.tenantId}, Project: ${trace.projectId}, APIKey: ${this.apiKey ? `Yes(${this.apiKey.length} chars)` : "No"}`);
444
+ const controller = new AbortController();
445
+ const timeoutId = setTimeout(() => controller.abort(), 1e4);
446
+ try {
447
+ const response = await fetch(url, {
448
+ method: "POST",
449
+ headers: {
450
+ Authorization: `Bearer ${this.apiKey}`,
451
+ "Content-Type": "application/json"
452
+ },
453
+ body: JSON.stringify(trace),
454
+ signal: controller.signal
455
+ });
456
+ clearTimeout(timeoutId);
457
+ console.log(`[Observa] Response status: ${response.status} ${response.statusText}`);
458
+ if (!response.ok) {
459
+ const errorText = await response.text().catch(() => "Unknown error");
460
+ let errorJson;
461
+ try {
462
+ errorJson = JSON.parse(errorText);
463
+ } catch {
464
+ errorJson = { error: errorText };
465
+ }
466
+ console.error(
467
+ `[Observa] Backend API error: ${response.status} ${response.statusText}`,
468
+ errorJson.error || errorText
469
+ );
470
+ } else {
471
+ console.log(`\u2705 [Observa] Trace sent successfully - Trace ID: ${trace.traceId}`);
450
472
  }
451
- console.error(
452
- `[Observa] Backend API error: ${response.status} ${response.statusText}`,
453
- errorJson.error || errorText
454
- );
455
- } else {
456
- console.log(`\u2705 [Observa] Trace sent successfully - Trace ID: ${trace.traceId}`);
473
+ } catch (fetchError) {
474
+ clearTimeout(timeoutId);
475
+ if (fetchError instanceof Error && fetchError.name === "AbortError") {
476
+ console.error("[Observa] Request timeout after 10 seconds");
477
+ }
478
+ throw fetchError;
457
479
  }
458
480
  } catch (error) {
459
481
  console.error("[Observa] Failed to send trace:", error);
460
482
  if (error instanceof Error) {
461
483
  console.error("[Observa] Error message:", error.message);
462
484
  console.error("[Observa] Error name:", error.name);
485
+ if (error.name === "AbortError") {
486
+ console.error("[Observa] Request timed out - check network connectivity and API URL");
487
+ }
463
488
  if (error.stack) {
464
489
  console.error("[Observa] Error stack:", error.stack);
465
490
  }
package/dist/index.js CHANGED
@@ -280,6 +280,7 @@ var Observa = class {
280
280
  responseHeaders[key] = value;
281
281
  });
282
282
  const [stream1, stream2] = originalResponse.body.tee();
283
+ console.log(`[Observa] Starting captureStream for trace ${traceId}`);
283
284
  this.captureStream({
284
285
  stream: stream2,
285
286
  event,
@@ -290,6 +291,8 @@ var Observa = class {
290
291
  status: originalResponse.status,
291
292
  statusText: originalResponse.statusText,
292
293
  headers: responseHeaders
294
+ }).catch((err) => {
295
+ console.error("[Observa] captureStream promise rejected:", err);
293
296
  });
294
297
  return new Response(stream1, {
295
298
  headers: originalResponse.headers,
@@ -309,6 +312,7 @@ var Observa = class {
309
312
  statusText,
310
313
  headers
311
314
  } = args;
315
+ console.log(`[Observa] captureStream started for trace ${traceId}`);
312
316
  try {
313
317
  const reader = stream.getReader();
314
318
  const decoder = new TextDecoder();
@@ -391,9 +395,18 @@ var Observa = class {
391
395
  systemFingerprint: extracted.systemFingerprint ?? null,
392
396
  ...headers !== void 0 && { headers }
393
397
  };
398
+ console.log(`[Observa] Trace data prepared, calling sendTrace for ${traceId}, response length: ${fullResponse.length}`);
394
399
  await this.sendTrace(traceData);
400
+ console.log(`[Observa] sendTrace completed for ${traceId}`);
395
401
  } catch (err) {
396
402
  console.error("[Observa] Error capturing stream:", err);
403
+ if (err instanceof Error) {
404
+ console.error("[Observa] Error name:", err.name);
405
+ console.error("[Observa] Error message:", err.message);
406
+ if (err.stack) {
407
+ console.error("[Observa] Error stack:", err.stack);
408
+ }
409
+ }
397
410
  }
398
411
  }
399
412
  async sendTrace(trace) {
@@ -402,39 +415,51 @@ var Observa = class {
402
415
  }
403
416
  try {
404
417
  const url = `${this.apiUrl}/api/v1/traces/ingest`;
405
- console.log(`[Observa] Sending trace to: ${url}`);
406
- console.log(`[Observa] Trace ID: ${trace.traceId}`);
407
- console.log(`[Observa] Tenant: ${trace.tenantId}, Project: ${trace.projectId}`);
408
- console.log(`[Observa] API Key present: ${this.apiKey ? "Yes" : "No"} (length: ${this.apiKey?.length || 0})`);
409
- const response = await fetch(url, {
410
- method: "POST",
411
- headers: {
412
- Authorization: `Bearer ${this.apiKey}`,
413
- "Content-Type": "application/json"
414
- },
415
- body: JSON.stringify(trace)
416
- });
417
- console.log(`[Observa] Response status: ${response.status} ${response.statusText}`);
418
- if (!response.ok) {
419
- const errorText = await response.text().catch(() => "Unknown error");
420
- let errorJson;
421
- try {
422
- errorJson = JSON.parse(errorText);
423
- } catch {
424
- errorJson = { error: errorText };
418
+ console.log(`[Observa] Sending trace - URL: ${url}, TraceID: ${trace.traceId}, Tenant: ${trace.tenantId}, Project: ${trace.projectId}, APIKey: ${this.apiKey ? `Yes(${this.apiKey.length} chars)` : "No"}`);
419
+ const controller = new AbortController();
420
+ const timeoutId = setTimeout(() => controller.abort(), 1e4);
421
+ try {
422
+ const response = await fetch(url, {
423
+ method: "POST",
424
+ headers: {
425
+ Authorization: `Bearer ${this.apiKey}`,
426
+ "Content-Type": "application/json"
427
+ },
428
+ body: JSON.stringify(trace),
429
+ signal: controller.signal
430
+ });
431
+ clearTimeout(timeoutId);
432
+ console.log(`[Observa] Response status: ${response.status} ${response.statusText}`);
433
+ if (!response.ok) {
434
+ const errorText = await response.text().catch(() => "Unknown error");
435
+ let errorJson;
436
+ try {
437
+ errorJson = JSON.parse(errorText);
438
+ } catch {
439
+ errorJson = { error: errorText };
440
+ }
441
+ console.error(
442
+ `[Observa] Backend API error: ${response.status} ${response.statusText}`,
443
+ errorJson.error || errorText
444
+ );
445
+ } else {
446
+ console.log(`\u2705 [Observa] Trace sent successfully - Trace ID: ${trace.traceId}`);
425
447
  }
426
- console.error(
427
- `[Observa] Backend API error: ${response.status} ${response.statusText}`,
428
- errorJson.error || errorText
429
- );
430
- } else {
431
- console.log(`\u2705 [Observa] Trace sent successfully - Trace ID: ${trace.traceId}`);
448
+ } catch (fetchError) {
449
+ clearTimeout(timeoutId);
450
+ if (fetchError instanceof Error && fetchError.name === "AbortError") {
451
+ console.error("[Observa] Request timeout after 10 seconds");
452
+ }
453
+ throw fetchError;
432
454
  }
433
455
  } catch (error) {
434
456
  console.error("[Observa] Failed to send trace:", error);
435
457
  if (error instanceof Error) {
436
458
  console.error("[Observa] Error message:", error.message);
437
459
  console.error("[Observa] Error name:", error.name);
460
+ if (error.name === "AbortError") {
461
+ console.error("[Observa] Request timed out - check network connectivity and API URL");
462
+ }
438
463
  if (error.stack) {
439
464
  console.error("[Observa] Error stack:", error.stack);
440
465
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "observa-sdk",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Enterprise-grade observability SDK for AI applications. Track and monitor LLM interactions with zero friction.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",