@morsehq-dev/sdk 0.5.0-rc.6 → 0.5.1-rc.1

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.
Files changed (104) hide show
  1. package/README.md +11 -10
  2. package/dist/anthropic/index.cjs +11 -11
  3. package/dist/anthropic/index.js +4 -4
  4. package/dist/anthropic-agent-sdk/index.cjs +40 -40
  5. package/dist/anthropic-agent-sdk/index.js +6 -6
  6. package/dist/browser/anthropic/index.cjs +11 -11
  7. package/dist/browser/anthropic/index.js +4 -4
  8. package/dist/browser/anthropic-agent-sdk/index.cjs +40 -40
  9. package/dist/browser/anthropic-agent-sdk/index.js +6 -6
  10. package/dist/browser/{chunk-PHE4P3DN.js → chunk-5IMBYZUB.js} +3 -3
  11. package/dist/browser/{chunk-PHE4P3DN.js.map → chunk-5IMBYZUB.js.map} +1 -1
  12. package/dist/browser/{chunk-MIHCAKQ2.js → chunk-7G266PKE.js} +32 -9
  13. package/dist/browser/chunk-7G266PKE.js.map +1 -0
  14. package/dist/browser/{chunk-FDWPKINR.js → chunk-AX6NEG6X.js} +4 -4
  15. package/dist/browser/{chunk-FDWPKINR.js.map → chunk-AX6NEG6X.js.map} +1 -1
  16. package/dist/browser/{chunk-ZAISDHUV.cjs → chunk-E6WORBIU.cjs} +5 -5
  17. package/dist/browser/{chunk-ZAISDHUV.cjs.map → chunk-E6WORBIU.cjs.map} +1 -1
  18. package/dist/{chunk-B3WEUUUK.cjs → browser/chunk-FYIQARMI.cjs} +7 -7
  19. package/dist/browser/{chunk-NK6D2G5O.cjs.map → chunk-FYIQARMI.cjs.map} +1 -1
  20. package/dist/browser/{chunk-WG45SF7N.cjs → chunk-HJTUPXNE.cjs} +31 -8
  21. package/dist/browser/chunk-HJTUPXNE.cjs.map +1 -0
  22. package/dist/browser/{chunk-TGN4FEKB.cjs → chunk-HNOHWDK3.cjs} +12 -12
  23. package/dist/browser/{chunk-TGN4FEKB.cjs.map → chunk-HNOHWDK3.cjs.map} +1 -1
  24. package/dist/{chunk-LEDIWC2M.js → browser/chunk-PIZVCAW7.js} +4 -4
  25. package/dist/browser/{chunk-TIZ5QRK2.js.map → chunk-PIZVCAW7.js.map} +1 -1
  26. package/dist/browser/{chunk-2LZCQD3J.js → chunk-RDNSY73W.js} +3 -3
  27. package/dist/browser/{chunk-2LZCQD3J.js.map → chunk-RDNSY73W.js.map} +1 -1
  28. package/dist/browser/{chunk-IXCAR4UA.js → chunk-TIMAH323.js} +3 -3
  29. package/dist/browser/{chunk-IXCAR4UA.js.map → chunk-TIMAH323.js.map} +1 -1
  30. package/dist/browser/{chunk-JNF26SQM.js → chunk-VSHCKROM.js} +5 -5
  31. package/dist/browser/{chunk-JNF26SQM.js.map → chunk-VSHCKROM.js.map} +1 -1
  32. package/dist/browser/{chunk-PNUCUOUA.cjs → chunk-YXCWAU36.cjs} +15 -15
  33. package/dist/browser/{chunk-PNUCUOUA.cjs.map → chunk-YXCWAU36.cjs.map} +1 -1
  34. package/dist/browser/{chunk-6YPVIGD2.cjs → chunk-Z26QGUMP.cjs} +6 -6
  35. package/dist/browser/{chunk-6YPVIGD2.cjs.map → chunk-Z26QGUMP.cjs.map} +1 -1
  36. package/dist/browser/{chunk-DQ4JWHYH.cjs → chunk-ZOOYJTDT.cjs} +18 -18
  37. package/dist/browser/{chunk-DQ4JWHYH.cjs.map → chunk-ZOOYJTDT.cjs.map} +1 -1
  38. package/dist/browser/index.cjs +189 -124
  39. package/dist/browser/index.cjs.map +1 -1
  40. package/dist/browser/index.js +111 -46
  41. package/dist/browser/index.js.map +1 -1
  42. package/dist/browser/integrations/pino.cjs +4 -4
  43. package/dist/browser/integrations/pino.js +3 -3
  44. package/dist/browser/langchain/index.cjs +17 -17
  45. package/dist/browser/langchain/index.js +2 -2
  46. package/dist/browser/langgraph/index.cjs +27 -27
  47. package/dist/browser/langgraph/index.js +5 -5
  48. package/dist/browser/openai/index.cjs +11 -11
  49. package/dist/browser/openai/index.js +2 -2
  50. package/dist/browser/openai-agents/index.cjs +34 -34
  51. package/dist/browser/openai-agents/index.js +4 -4
  52. package/dist/browser/vercel-ai/index.cjs +14 -14
  53. package/dist/browser/vercel-ai/index.js +3 -3
  54. package/dist/{browser/chunk-NK6D2G5O.cjs → chunk-2UFTRWUS.cjs} +7 -7
  55. package/dist/{chunk-B3WEUUUK.cjs.map → chunk-2UFTRWUS.cjs.map} +1 -1
  56. package/dist/{chunk-DK3RX7RS.js → chunk-4WUG3RMJ.js} +4 -4
  57. package/dist/{chunk-DK3RX7RS.js.map → chunk-4WUG3RMJ.js.map} +1 -1
  58. package/dist/{chunk-QTATKDEI.js → chunk-5MJS5ECA.js} +3 -3
  59. package/dist/{chunk-QTATKDEI.js.map → chunk-5MJS5ECA.js.map} +1 -1
  60. package/dist/{chunk-Z2AYPTB2.js → chunk-62FWHZXN.js} +5 -5
  61. package/dist/{chunk-Z2AYPTB2.js.map → chunk-62FWHZXN.js.map} +1 -1
  62. package/dist/{browser/chunk-TIZ5QRK2.js → chunk-FHQGPQFR.js} +4 -4
  63. package/dist/{chunk-LEDIWC2M.js.map → chunk-FHQGPQFR.js.map} +1 -1
  64. package/dist/{chunk-AT3YR5SP.cjs → chunk-GATTHW3X.cjs} +5 -5
  65. package/dist/{chunk-AT3YR5SP.cjs.map → chunk-GATTHW3X.cjs.map} +1 -1
  66. package/dist/{chunk-T5UFHQLZ.js → chunk-GQVNZPRF.js} +3 -3
  67. package/dist/{chunk-T5UFHQLZ.js.map → chunk-GQVNZPRF.js.map} +1 -1
  68. package/dist/{chunk-4QY5O46P.cjs → chunk-HCN6Z56N.cjs} +18 -18
  69. package/dist/{chunk-4QY5O46P.cjs.map → chunk-HCN6Z56N.cjs.map} +1 -1
  70. package/dist/{chunk-K4FHTOBB.cjs → chunk-KALB7HJ5.cjs} +12 -12
  71. package/dist/{chunk-K4FHTOBB.cjs.map → chunk-KALB7HJ5.cjs.map} +1 -1
  72. package/dist/{chunk-TEWSIQ6E.cjs → chunk-QLJAATBR.cjs} +6 -6
  73. package/dist/{chunk-TEWSIQ6E.cjs.map → chunk-QLJAATBR.cjs.map} +1 -1
  74. package/dist/{chunk-ZFZTJXIO.cjs → chunk-XBI4AMCW.cjs} +15 -15
  75. package/dist/{chunk-ZFZTJXIO.cjs.map → chunk-XBI4AMCW.cjs.map} +1 -1
  76. package/dist/{chunk-5YJXFU5U.js → chunk-YGKEP2GY.js} +32 -9
  77. package/dist/chunk-YGKEP2GY.js.map +1 -0
  78. package/dist/{chunk-2GWOF5JM.js → chunk-ZMRXUZ5L.js} +3 -3
  79. package/dist/{chunk-2GWOF5JM.js.map → chunk-ZMRXUZ5L.js.map} +1 -1
  80. package/dist/{chunk-UV5FUVNK.cjs → chunk-ZTBAMSCC.cjs} +31 -8
  81. package/dist/chunk-ZTBAMSCC.cjs.map +1 -0
  82. package/dist/index.cjs +196 -131
  83. package/dist/index.cjs.map +1 -1
  84. package/dist/index.d.cts +11 -0
  85. package/dist/index.d.ts +11 -0
  86. package/dist/index.js +112 -47
  87. package/dist/index.js.map +1 -1
  88. package/dist/integrations/pino.cjs +4 -4
  89. package/dist/integrations/pino.js +3 -3
  90. package/dist/langchain/index.cjs +17 -17
  91. package/dist/langchain/index.js +2 -2
  92. package/dist/langgraph/index.cjs +27 -27
  93. package/dist/langgraph/index.js +5 -5
  94. package/dist/openai/index.cjs +11 -11
  95. package/dist/openai/index.js +2 -2
  96. package/dist/openai-agents/index.cjs +34 -34
  97. package/dist/openai-agents/index.js +4 -4
  98. package/dist/vercel-ai/index.cjs +14 -14
  99. package/dist/vercel-ai/index.js +3 -3
  100. package/package.json +1 -1
  101. package/dist/browser/chunk-MIHCAKQ2.js.map +0 -1
  102. package/dist/browser/chunk-WG45SF7N.cjs.map +0 -1
  103. package/dist/chunk-5YJXFU5U.js.map +0 -1
  104. package/dist/chunk-UV5FUVNK.cjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import { instrumentAnthropic } from './chunk-Z2AYPTB2.js';
2
- export { MAX_SEGMENT_CONTENT_BYTES, extractAnthropicSegments, instrumentAnthropic, isAnthropicWrapped, uninstallAnthropic, wrapAnthropic } from './chunk-Z2AYPTB2.js';
3
- import { _setEnsureInitialized } from './chunk-DK3RX7RS.js';
4
- export { log } from './chunk-DK3RX7RS.js';
5
- import './chunk-2GWOF5JM.js';
6
- import { absorbErrorsSync, absorbErrorsAsync } from './chunk-QTATKDEI.js';
1
+ import { instrumentAnthropic } from './chunk-62FWHZXN.js';
2
+ export { MAX_SEGMENT_CONTENT_BYTES, extractAnthropicSegments, instrumentAnthropic, isAnthropicWrapped, uninstallAnthropic, wrapAnthropic } from './chunk-62FWHZXN.js';
3
+ import { _setEnsureInitialized } from './chunk-4WUG3RMJ.js';
4
+ export { log } from './chunk-4WUG3RMJ.js';
5
+ import './chunk-ZMRXUZ5L.js';
6
+ import { absorbErrorsSync, absorbErrorsAsync } from './chunk-5MJS5ECA.js';
7
7
  import './chunk-XTKMUJWI.js';
8
8
  import './chunk-4JPZV2VZ.js';
9
- import { init_env, init_otel_provider, init_redaction, init_diagnostics, init_tracing, init_spans, init_propagation, redactValue, generateTraceId, nowIso, SpanType, generateSpanId, buildTraceEntry, sendTrace, isDisabled, buildRedactionConfig, getApiKey, getFlushIntervalSeconds, setTransport, setRedactionConfig, setDiagnosticsClientConfig, isValidInternalSource, getInternalSource, setSource, getEngine, getMaxFieldBytes, getMaxBatchSize, getMaxQueueSize, getSampleRate, report, getEndpoint, DEFAULT_ENDPOINT, isAutoDetectDisabled, isDbCaptureEnabled, recordDrop, REASON_SHUTDOWN_DROP, REASON_QUEUE_FULL, setLevel, REASON_QUOTA_REJECTED, REASON_RETRY_EXHAUSTED, runSync, runAsync, setContext, startSpan, spanSync, spanAsync, flushOnce, _resetForTesting2, _resetForTesting, getLastTrace, getActiveTraceState } from './chunk-5YJXFU5U.js';
10
- export { W3C_TRACEPARENT_HEADER, extractTraceparent, formatTraceparent, injectIntoRequestInit, injectTraceparent } from './chunk-5YJXFU5U.js';
9
+ import { init_env, init_otel_provider, init_redaction, init_diagnostics, init_tracing, init_spans, init_propagation, redactValue, generateTraceId, nowIso, SpanType, generateSpanId, buildTraceEntry, sendTrace, isDisabled, buildRedactionConfig, getApiKey, getFlushIntervalSeconds, setTransport, setRedactionConfig, setDiagnosticsClientConfig, isValidInternalSource, getInternalSource, setSource, getEngine, getMaxFieldBytes, getMaxBatchSize, getMaxQueueSize, getSampleRate, report, getEndpoint, DEFAULT_ENDPOINT, isAutoDetectDisabled, isDbCaptureEnabled, recordDrop, REASON_SHUTDOWN_DROP, REASON_QUEUE_FULL, REASON_ENCODE_FAILED, REASON_RETRY_EXHAUSTED, setLevel, REASON_QUOTA_REJECTED, REASON_AUTH_REJECTED, REASON_ENDPOINT_REJECTED, REASON_SEND_FAILED, runSync, runAsync, setContext, startSpan, spanSync, spanAsync, flushOnce, _resetForTesting2, _resetForTesting, getLastTrace, getActiveTraceState } from './chunk-YGKEP2GY.js';
10
+ export { W3C_TRACEPARENT_HEADER, extractTraceparent, formatTraceparent, injectIntoRequestInit, injectTraceparent } from './chunk-YGKEP2GY.js';
11
11
  import { createRequire, Module } from 'module';
12
12
  import { PgInstrumentation } from '@opentelemetry/instrumentation-pg';
13
13
  import { MySQL2Instrumentation } from '@opentelemetry/instrumentation-mysql2';
@@ -285,8 +285,35 @@ init_redaction();
285
285
 
286
286
  // src/_internal/transport.ts
287
287
  init_diagnostics();
288
- var SDK_VERSION = "0.5.0-rc.6" ;
288
+ var SDK_VERSION = "0.5.1-rc.1" ;
289
289
  var RETRY_AFTER_CAP_SECONDS = 30;
290
+ var MAX_SEND_ATTEMPTS = 3;
291
+ var BACKOFF_BASE_MS = 500;
292
+ var BACKOFF_MAX_MS = 1e4;
293
+ var DEFAULT_FLUSH_TIMEOUT_MS = 1e4;
294
+ function backoffDelayMs(attempt) {
295
+ const base = Math.min(BACKOFF_MAX_MS, BACKOFF_BASE_MS * 2 ** (attempt - 1));
296
+ return base * (0.5 + Math.random());
297
+ }
298
+ function dropReasonFor(attempt, closed, deadline) {
299
+ if (closed) return REASON_SHUTDOWN_DROP;
300
+ if (attempt === 1 && Date.now() >= deadline) return REASON_SEND_FAILED;
301
+ return REASON_RETRY_EXHAUSTED;
302
+ }
303
+ function withDeadline(promise, deadline) {
304
+ const remaining = Math.max(0, deadline - Date.now());
305
+ let timer;
306
+ return Promise.race([
307
+ promise,
308
+ new Promise((_, reject) => {
309
+ timer = setTimeout(() => reject(new Error("morse: flush deadline exceeded")), remaining);
310
+ })
311
+ ]).finally(() => clearTimeout(timer));
312
+ }
313
+ function sleepUntil(ms, deadline) {
314
+ const remaining = Math.max(0, Math.min(ms, deadline - Date.now()));
315
+ return new Promise((resolve) => setTimeout(resolve, remaining));
316
+ }
290
317
  function parseRetryAfter(value) {
291
318
  if (!value) return null;
292
319
  const seconds = Number(value);
@@ -364,6 +391,7 @@ var BatchTransport = class {
364
391
  maxBatchSize;
365
392
  maxQueueSize;
366
393
  fetchTimeoutMs;
394
+ flushTimeoutMs;
367
395
  fetchImpl;
368
396
  queue = [];
369
397
  timer = null;
@@ -377,6 +405,7 @@ var BatchTransport = class {
377
405
  this.maxBatchSize = opts.maxBatchSize ?? 100;
378
406
  this.maxQueueSize = opts.maxQueueSize ?? 1e4;
379
407
  this.fetchTimeoutMs = opts.fetchTimeoutMs ?? 5e3;
408
+ this.flushTimeoutMs = opts.flushTimeoutMs ?? DEFAULT_FLUSH_TIMEOUT_MS;
380
409
  this.fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);
381
410
  const intervalMs = Math.max(50, Math.round(this.flushIntervalSeconds * 1e3));
382
411
  this.timer = setInterval(() => {
@@ -467,56 +496,92 @@ var BatchTransport = class {
467
496
  await this.post(deriveLogsEndpoint(this.endpoint), { logs: logEntries });
468
497
  }
469
498
  }
470
- async post(url, payload) {
471
- const controller = new AbortController();
472
- const timeoutId = setTimeout(() => controller.abort(), this.fetchTimeoutMs);
499
+ async post(url, payload, deadline = Date.now() + this.flushTimeoutMs) {
500
+ let body;
473
501
  try {
474
- const resp = await this.fetchImpl(url, {
475
- method: "POST",
476
- headers: {
477
- Authorization: `Bearer ${this.apiKey}`,
478
- "Content-Type": "application/json",
479
- "User-Agent": `morse-typescript/${SDK_VERSION}`
480
- },
481
- body: JSON.stringify(payload),
482
- signal: controller.signal
502
+ body = JSON.stringify(payload);
503
+ } catch (err) {
504
+ recordDrop(REASON_ENCODE_FAILED, categoryOf(payload), countPayloadEntries(payload));
505
+ report(err, {
506
+ fingerprint: "morse.transport.post.encode",
507
+ extra: { endpoint_host: hostnameOf(url), sdk_version: SDK_VERSION }
483
508
  });
484
- setLevel(resp.headers.get("X-Morse-Diagnostics"));
485
- const droppedCount = countPayloadEntries(payload);
486
- const droppedCategory = categoryOf(payload);
487
- if (resp.status === 429) {
488
- await recordQuotaState(resp);
489
- recordDrop(REASON_QUOTA_REJECTED, droppedCategory, droppedCount);
509
+ return;
510
+ }
511
+ const droppedCount = countPayloadEntries(payload);
512
+ const droppedCategory = categoryOf(payload);
513
+ for (let attempt = 1; attempt <= MAX_SEND_ATTEMPTS; attempt++) {
514
+ const lastAttempt = attempt >= MAX_SEND_ATTEMPTS;
515
+ const outOfTime = Date.now() >= deadline;
516
+ if (outOfTime && attempt > 1) {
517
+ recordDrop(REASON_RETRY_EXHAUSTED, droppedCategory, droppedCount);
518
+ return;
490
519
  }
491
- if (!resp.ok) {
520
+ const controller = new AbortController();
521
+ const timeoutId = setTimeout(() => controller.abort(), this.fetchTimeoutMs);
522
+ try {
523
+ const resp = await withDeadline(
524
+ this.fetchImpl(url, {
525
+ method: "POST",
526
+ headers: {
527
+ Authorization: `Bearer ${this.apiKey}`,
528
+ "Content-Type": "application/json",
529
+ "User-Agent": `morse-typescript/${SDK_VERSION}`
530
+ },
531
+ body,
532
+ signal: controller.signal
533
+ }),
534
+ deadline
535
+ );
536
+ setLevel(resp.headers.get("X-Morse-Diagnostics"));
537
+ if (resp.ok) return;
538
+ if (resp.status === 429) await recordQuotaState(resp);
492
539
  let bodySnippet = "";
493
540
  try {
494
- const text = await resp.text();
495
- bodySnippet = text.slice(0, 200);
541
+ bodySnippet = (await resp.text()).slice(0, 200);
496
542
  } catch {
497
543
  }
498
- if (resp.status !== 429) {
499
- recordDrop(REASON_RETRY_EXHAUSTED, droppedCategory, droppedCount);
500
- }
501
544
  report(new Error(`morse: batch POST returned ${resp.status} ${bodySnippet}`), {
502
545
  fingerprint: "morse.transport.post.non_2xx",
503
- extra: {
504
- endpoint_host: hostnameOf(url),
505
- sdk_version: SDK_VERSION
546
+ extra: { endpoint_host: hostnameOf(url), sdk_version: SDK_VERSION }
547
+ });
548
+ if (resp.status === 429) {
549
+ if (lastAttempt) {
550
+ recordDrop(REASON_QUOTA_REJECTED, droppedCategory, droppedCount);
551
+ return;
506
552
  }
553
+ const retryAfter = parseRetryAfter(resp.headers.get("Retry-After"));
554
+ await sleepUntil((retryAfter ?? 0) * 1e3 + backoffDelayMs(attempt), deadline);
555
+ continue;
556
+ }
557
+ if (resp.status < 500) {
558
+ recordDrop(
559
+ resp.status === 401 || resp.status === 403 ? REASON_AUTH_REJECTED : REASON_ENDPOINT_REJECTED,
560
+ droppedCategory,
561
+ droppedCount
562
+ );
563
+ return;
564
+ }
565
+ if (lastAttempt || this.closed || Date.now() >= deadline) {
566
+ recordDrop(dropReasonFor(attempt, this.closed, deadline), droppedCategory, droppedCount);
567
+ return;
568
+ }
569
+ await sleepUntil(backoffDelayMs(attempt), deadline);
570
+ continue;
571
+ } catch (err) {
572
+ report(err, {
573
+ fingerprint: "morse.transport.post.network",
574
+ extra: { endpoint_host: hostnameOf(url), sdk_version: SDK_VERSION }
507
575
  });
508
- }
509
- } catch (err) {
510
- recordDrop(REASON_RETRY_EXHAUSTED, categoryOf(payload), countPayloadEntries(payload));
511
- report(err, {
512
- fingerprint: "morse.transport.post.network",
513
- extra: {
514
- endpoint_host: hostnameOf(url),
515
- sdk_version: SDK_VERSION
576
+ if (lastAttempt || this.closed || Date.now() >= deadline) {
577
+ recordDrop(dropReasonFor(attempt, this.closed, deadline), droppedCategory, droppedCount);
578
+ return;
516
579
  }
517
- });
518
- } finally {
519
- clearTimeout(timeoutId);
580
+ await sleepUntil(backoffDelayMs(attempt), deadline);
581
+ continue;
582
+ } finally {
583
+ clearTimeout(timeoutId);
584
+ }
520
585
  }
521
586
  }
522
587
  };