@morsehq-dev/sdk 0.4.0-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.
- package/LICENSE +21 -0
- package/README.md +294 -0
- package/dist/anthropic/index.cjs +39 -0
- package/dist/anthropic/index.cjs.map +1 -0
- package/dist/anthropic/index.d.cts +213 -0
- package/dist/anthropic/index.d.ts +213 -0
- package/dist/anthropic/index.js +6 -0
- package/dist/anthropic/index.js.map +1 -0
- package/dist/anthropic-agent-sdk/index.cjs +744 -0
- package/dist/anthropic-agent-sdk/index.cjs.map +1 -0
- package/dist/anthropic-agent-sdk/index.d.cts +371 -0
- package/dist/anthropic-agent-sdk/index.d.ts +371 -0
- package/dist/anthropic-agent-sdk/index.js +735 -0
- package/dist/anthropic-agent-sdk/index.js.map +1 -0
- package/dist/browser/anthropic/index.cjs +39 -0
- package/dist/browser/anthropic/index.cjs.map +1 -0
- package/dist/browser/anthropic/index.js +6 -0
- package/dist/browser/anthropic/index.js.map +1 -0
- package/dist/browser/anthropic-agent-sdk/index.cjs +744 -0
- package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -0
- package/dist/browser/anthropic-agent-sdk/index.js +735 -0
- package/dist/browser/anthropic-agent-sdk/index.js.map +1 -0
- package/dist/browser/chunk-3643DC7K.cjs +365 -0
- package/dist/browser/chunk-3643DC7K.cjs.map +1 -0
- package/dist/browser/chunk-4FALQMOZ.js +232 -0
- package/dist/browser/chunk-4FALQMOZ.js.map +1 -0
- package/dist/browser/chunk-5J2QBK75.js +884 -0
- package/dist/browser/chunk-5J2QBK75.js.map +1 -0
- package/dist/browser/chunk-7MSXWGAH.js +53 -0
- package/dist/browser/chunk-7MSXWGAH.js.map +1 -0
- package/dist/browser/chunk-A24L5N5N.js +596 -0
- package/dist/browser/chunk-A24L5N5N.js.map +1 -0
- package/dist/browser/chunk-B7DEUDP6.cjs +177 -0
- package/dist/browser/chunk-B7DEUDP6.cjs.map +1 -0
- package/dist/browser/chunk-F6CJACNH.cjs +604 -0
- package/dist/browser/chunk-F6CJACNH.cjs.map +1 -0
- package/dist/browser/chunk-JBOYFQSB.js +412 -0
- package/dist/browser/chunk-JBOYFQSB.js.map +1 -0
- package/dist/browser/chunk-KRBADE6R.cjs +183 -0
- package/dist/browser/chunk-KRBADE6R.cjs.map +1 -0
- package/dist/browser/chunk-MCJYZH6W.cjs +415 -0
- package/dist/browser/chunk-MCJYZH6W.cjs.map +1 -0
- package/dist/browser/chunk-NQG2IAQS.js +178 -0
- package/dist/browser/chunk-NQG2IAQS.js.map +1 -0
- package/dist/browser/chunk-O4HG3OSK.cjs +929 -0
- package/dist/browser/chunk-O4HG3OSK.cjs.map +1 -0
- package/dist/browser/chunk-QWRQJO57.js +363 -0
- package/dist/browser/chunk-QWRQJO57.js.map +1 -0
- package/dist/browser/chunk-SWQOPFE4.cjs +234 -0
- package/dist/browser/chunk-SWQOPFE4.cjs.map +1 -0
- package/dist/browser/chunk-TYDG747E.js +171 -0
- package/dist/browser/chunk-TYDG747E.js.map +1 -0
- package/dist/browser/chunk-TZRSDDFP.cjs +56 -0
- package/dist/browser/chunk-TZRSDDFP.cjs.map +1 -0
- package/dist/browser/index.cjs +587 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.js +522 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/integrations/pino.cjs +89 -0
- package/dist/browser/integrations/pino.cjs.map +1 -0
- package/dist/browser/integrations/pino.js +86 -0
- package/dist/browser/integrations/pino.js.map +1 -0
- package/dist/browser/langchain/index.cjs +535 -0
- package/dist/browser/langchain/index.cjs.map +1 -0
- package/dist/browser/langchain/index.js +528 -0
- package/dist/browser/langchain/index.js.map +1 -0
- package/dist/browser/langgraph/index.cjs +377 -0
- package/dist/browser/langgraph/index.cjs.map +1 -0
- package/dist/browser/langgraph/index.js +371 -0
- package/dist/browser/langgraph/index.js.map +1 -0
- package/dist/browser/openai/index.cjs +125 -0
- package/dist/browser/openai/index.cjs.map +1 -0
- package/dist/browser/openai/index.js +122 -0
- package/dist/browser/openai/index.js.map +1 -0
- package/dist/browser/openai-agents/index.cjs +689 -0
- package/dist/browser/openai-agents/index.cjs.map +1 -0
- package/dist/browser/openai-agents/index.js +678 -0
- package/dist/browser/openai-agents/index.js.map +1 -0
- package/dist/browser/vercel-ai/index.cjs +233 -0
- package/dist/browser/vercel-ai/index.cjs.map +1 -0
- package/dist/browser/vercel-ai/index.js +231 -0
- package/dist/browser/vercel-ai/index.js.map +1 -0
- package/dist/chunk-4R4SHGOK.js +363 -0
- package/dist/chunk-4R4SHGOK.js.map +1 -0
- package/dist/chunk-7EO7MQBA.cjs +183 -0
- package/dist/chunk-7EO7MQBA.cjs.map +1 -0
- package/dist/chunk-7YCENA54.cjs +604 -0
- package/dist/chunk-7YCENA54.cjs.map +1 -0
- package/dist/chunk-CKFOGDUF.js +596 -0
- package/dist/chunk-CKFOGDUF.js.map +1 -0
- package/dist/chunk-FJUNILZT.cjs +1324 -0
- package/dist/chunk-FJUNILZT.cjs.map +1 -0
- package/dist/chunk-HDAFUKQ3.js +171 -0
- package/dist/chunk-HDAFUKQ3.js.map +1 -0
- package/dist/chunk-KBWPNIH4.cjs +234 -0
- package/dist/chunk-KBWPNIH4.cjs.map +1 -0
- package/dist/chunk-KJEO52QS.cjs +365 -0
- package/dist/chunk-KJEO52QS.cjs.map +1 -0
- package/dist/chunk-KZBCOZIQ.cjs +177 -0
- package/dist/chunk-KZBCOZIQ.cjs.map +1 -0
- package/dist/chunk-ME5JALGT.js +53 -0
- package/dist/chunk-ME5JALGT.js.map +1 -0
- package/dist/chunk-PVHDEPRE.cjs +56 -0
- package/dist/chunk-PVHDEPRE.cjs.map +1 -0
- package/dist/chunk-RTL23YOQ.js +178 -0
- package/dist/chunk-RTL23YOQ.js.map +1 -0
- package/dist/chunk-TQWI4UYO.js +1277 -0
- package/dist/chunk-TQWI4UYO.js.map +1 -0
- package/dist/chunk-VXDBDPDR.cjs +415 -0
- package/dist/chunk-VXDBDPDR.cjs.map +1 -0
- package/dist/chunk-XTKMUJWI.js +232 -0
- package/dist/chunk-XTKMUJWI.js.map +1 -0
- package/dist/chunk-ZKUGOWER.js +412 -0
- package/dist/chunk-ZKUGOWER.js.map +1 -0
- package/dist/index.cjs +843 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +464 -0
- package/dist/index.d.ts +464 -0
- package/dist/index.js +778 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/pino.cjs +89 -0
- package/dist/integrations/pino.cjs.map +1 -0
- package/dist/integrations/pino.d.cts +65 -0
- package/dist/integrations/pino.d.ts +65 -0
- package/dist/integrations/pino.js +86 -0
- package/dist/integrations/pino.js.map +1 -0
- package/dist/langchain/index.cjs +535 -0
- package/dist/langchain/index.cjs.map +1 -0
- package/dist/langchain/index.d.cts +265 -0
- package/dist/langchain/index.d.ts +265 -0
- package/dist/langchain/index.js +528 -0
- package/dist/langchain/index.js.map +1 -0
- package/dist/langgraph/index.cjs +377 -0
- package/dist/langgraph/index.cjs.map +1 -0
- package/dist/langgraph/index.d.cts +324 -0
- package/dist/langgraph/index.d.ts +324 -0
- package/dist/langgraph/index.js +371 -0
- package/dist/langgraph/index.js.map +1 -0
- package/dist/openai/index.cjs +125 -0
- package/dist/openai/index.cjs.map +1 -0
- package/dist/openai/index.d.cts +136 -0
- package/dist/openai/index.d.ts +136 -0
- package/dist/openai/index.js +122 -0
- package/dist/openai/index.js.map +1 -0
- package/dist/openai-agents/index.cjs +689 -0
- package/dist/openai-agents/index.cjs.map +1 -0
- package/dist/openai-agents/index.d.cts +502 -0
- package/dist/openai-agents/index.d.ts +502 -0
- package/dist/openai-agents/index.js +678 -0
- package/dist/openai-agents/index.js.map +1 -0
- package/dist/spans-DZtMuBvc.d.cts +73 -0
- package/dist/spans-DZtMuBvc.d.ts +73 -0
- package/dist/tracing-BYAqjT5Q.d.cts +114 -0
- package/dist/tracing-rz9cWQ8d.d.ts +114 -0
- package/dist/vercel-ai/index.cjs +233 -0
- package/dist/vercel-ai/index.cjs.map +1 -0
- package/dist/vercel-ai/index.d.cts +93 -0
- package/dist/vercel-ai/index.d.ts +93 -0
- package/dist/vercel-ai/index.js +231 -0
- package/dist/vercel-ai/index.js.map +1 -0
- package/package.json +182 -0
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkF6CJACNH_cjs = require('./chunk-F6CJACNH.cjs');
|
|
4
|
+
var chunkTZRSDDFP_cjs = require('./chunk-TZRSDDFP.cjs');
|
|
5
|
+
require('./chunk-SWQOPFE4.cjs');
|
|
6
|
+
var chunkKRBADE6R_cjs = require('./chunk-KRBADE6R.cjs');
|
|
7
|
+
var chunkO4HG3OSK_cjs = require('./chunk-O4HG3OSK.cjs');
|
|
8
|
+
|
|
9
|
+
// src/_internal/auto-detect.browser.ts
|
|
10
|
+
async function installAdapters() {
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// src/index.ts
|
|
14
|
+
chunkO4HG3OSK_cjs.init_env();
|
|
15
|
+
|
|
16
|
+
// src/_internal/db-capture.browser.ts
|
|
17
|
+
function maybeEnableDbCaptureFromEnv() {
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
chunkO4HG3OSK_cjs.init_otel_provider_browser();
|
|
22
|
+
chunkO4HG3OSK_cjs.init_redaction();
|
|
23
|
+
|
|
24
|
+
// src/_internal/transport.ts
|
|
25
|
+
var SDK_VERSION = "0.4.0-rc.1" ;
|
|
26
|
+
var RETRY_AFTER_CAP_SECONDS = 30;
|
|
27
|
+
function parseRetryAfter(value) {
|
|
28
|
+
if (!value) return null;
|
|
29
|
+
const seconds = Number(value);
|
|
30
|
+
if (!Number.isFinite(seconds) || seconds < 0) return null;
|
|
31
|
+
return Math.min(seconds, RETRY_AFTER_CAP_SECONDS);
|
|
32
|
+
}
|
|
33
|
+
var quotaState = null;
|
|
34
|
+
function getQuotaState() {
|
|
35
|
+
return quotaState ? { ...quotaState } : null;
|
|
36
|
+
}
|
|
37
|
+
function _resetQuotaStateForTesting() {
|
|
38
|
+
quotaState = null;
|
|
39
|
+
}
|
|
40
|
+
function asString(value) {
|
|
41
|
+
return typeof value === "string" ? value : void 0;
|
|
42
|
+
}
|
|
43
|
+
function asNumber(value) {
|
|
44
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
45
|
+
}
|
|
46
|
+
function numberFromHeader(raw) {
|
|
47
|
+
if (raw === null) return void 0;
|
|
48
|
+
const n = Number(raw);
|
|
49
|
+
return Number.isFinite(n) ? n : void 0;
|
|
50
|
+
}
|
|
51
|
+
async function recordQuotaState(resp) {
|
|
52
|
+
try {
|
|
53
|
+
const state = {
|
|
54
|
+
kind: "unknown",
|
|
55
|
+
status: 429,
|
|
56
|
+
receivedAt: Date.now() / 1e3
|
|
57
|
+
};
|
|
58
|
+
let data = null;
|
|
59
|
+
try {
|
|
60
|
+
data = await resp.clone().json();
|
|
61
|
+
} catch {
|
|
62
|
+
data = null;
|
|
63
|
+
}
|
|
64
|
+
if (data !== null && typeof data === "object") {
|
|
65
|
+
const body = data;
|
|
66
|
+
const err = body.error;
|
|
67
|
+
if (err === "event_limit_exceeded") {
|
|
68
|
+
state.kind = "event_limit";
|
|
69
|
+
state.message = asString(body.message);
|
|
70
|
+
state.currentCount = asNumber(body.current_count);
|
|
71
|
+
state.limitCount = asNumber(body.limit_count);
|
|
72
|
+
state.planId = asString(body.plan_id);
|
|
73
|
+
state.periodStart = asString(body.period_start);
|
|
74
|
+
state.upgradeUrl = asString(body.upgrade_url);
|
|
75
|
+
state.sampleRateUrl = asString(body.sample_rate_url);
|
|
76
|
+
} else if (err !== null && typeof err === "object" && err.code === "RATE_LIMIT_INGEST") {
|
|
77
|
+
const errObj = err;
|
|
78
|
+
const details = errObj.details !== null && typeof errObj.details === "object" ? errObj.details : {};
|
|
79
|
+
state.kind = "rate_limit";
|
|
80
|
+
state.message = asString(errObj.message);
|
|
81
|
+
state.limitCount = asNumber(details.limit);
|
|
82
|
+
state.planId = asString(details.plan);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const quotaLimit = numberFromHeader(resp.headers.get("X-Morse-Quota-Limit"));
|
|
86
|
+
if (quotaLimit !== void 0) state.quotaLimit = quotaLimit;
|
|
87
|
+
const quotaRemaining = numberFromHeader(resp.headers.get("X-Morse-Quota-Remaining"));
|
|
88
|
+
if (quotaRemaining !== void 0) state.quotaRemaining = quotaRemaining;
|
|
89
|
+
const quotaReset = numberFromHeader(resp.headers.get("X-Morse-Quota-Reset"));
|
|
90
|
+
if (quotaReset !== void 0) state.quotaReset = quotaReset;
|
|
91
|
+
const retryAfter = parseRetryAfter(resp.headers.get("Retry-After"));
|
|
92
|
+
if (retryAfter !== null) state.retryAfterSeconds = retryAfter;
|
|
93
|
+
quotaState = state;
|
|
94
|
+
} catch {
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
var BatchTransport = class {
|
|
98
|
+
endpoint;
|
|
99
|
+
apiKey;
|
|
100
|
+
flushIntervalSeconds;
|
|
101
|
+
maxBatchSize;
|
|
102
|
+
maxQueueSize;
|
|
103
|
+
fetchTimeoutMs;
|
|
104
|
+
fetchImpl;
|
|
105
|
+
queue = [];
|
|
106
|
+
timer = null;
|
|
107
|
+
flushing = false;
|
|
108
|
+
closed = false;
|
|
109
|
+
inflight = null;
|
|
110
|
+
constructor(opts) {
|
|
111
|
+
this.endpoint = opts.endpoint;
|
|
112
|
+
this.apiKey = opts.apiKey;
|
|
113
|
+
this.flushIntervalSeconds = opts.flushIntervalSeconds ?? 2;
|
|
114
|
+
this.maxBatchSize = opts.maxBatchSize ?? 100;
|
|
115
|
+
this.maxQueueSize = opts.maxQueueSize ?? 1e4;
|
|
116
|
+
this.fetchTimeoutMs = opts.fetchTimeoutMs ?? 5e3;
|
|
117
|
+
this.fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
118
|
+
const intervalMs = Math.max(50, Math.round(this.flushIntervalSeconds * 1e3));
|
|
119
|
+
this.timer = setInterval(() => {
|
|
120
|
+
void this.tick();
|
|
121
|
+
}, intervalMs);
|
|
122
|
+
const t = this.timer;
|
|
123
|
+
if (typeof t?.unref === "function") {
|
|
124
|
+
t.unref();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/** Enqueue an event. Non-blocking. Returns false if the queue is full. */
|
|
128
|
+
track(event) {
|
|
129
|
+
if (this.closed) return false;
|
|
130
|
+
if (this.queue.length >= this.maxQueueSize) return false;
|
|
131
|
+
this.queue.push(event);
|
|
132
|
+
if (this.queue.length >= this.maxBatchSize) {
|
|
133
|
+
void this.tick();
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
/** Block until all currently-queued events have been sent. */
|
|
138
|
+
async flush() {
|
|
139
|
+
while (this.queue.length > 0) {
|
|
140
|
+
await this.tick();
|
|
141
|
+
}
|
|
142
|
+
if (this.inflight) {
|
|
143
|
+
try {
|
|
144
|
+
await this.inflight;
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** Stop the background timer. After this call, `track()` is a no-op. */
|
|
150
|
+
async shutdown() {
|
|
151
|
+
if (this.closed) return;
|
|
152
|
+
this.closed = true;
|
|
153
|
+
if (this.timer !== null) {
|
|
154
|
+
clearInterval(this.timer);
|
|
155
|
+
this.timer = null;
|
|
156
|
+
}
|
|
157
|
+
await this.flush();
|
|
158
|
+
}
|
|
159
|
+
async tick() {
|
|
160
|
+
if (this.flushing) return;
|
|
161
|
+
if (this.queue.length === 0) return;
|
|
162
|
+
this.flushing = true;
|
|
163
|
+
try {
|
|
164
|
+
const batch = this.queue.splice(0, this.maxBatchSize);
|
|
165
|
+
this.inflight = this.sendBatch(batch);
|
|
166
|
+
await this.inflight;
|
|
167
|
+
this.inflight = null;
|
|
168
|
+
} finally {
|
|
169
|
+
this.flushing = false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async sendBatch(batch) {
|
|
173
|
+
const traceEntries = [];
|
|
174
|
+
const runEntries = [];
|
|
175
|
+
const logEntries = [];
|
|
176
|
+
for (const event of batch) {
|
|
177
|
+
if (typeof event === "object" && event !== null && "traces" in event) {
|
|
178
|
+
const e = event;
|
|
179
|
+
if (Array.isArray(e.traces)) {
|
|
180
|
+
traceEntries.push(...e.traces);
|
|
181
|
+
}
|
|
182
|
+
} else if (typeof event === "object" && event !== null && "logs" in event) {
|
|
183
|
+
const e = event;
|
|
184
|
+
if (Array.isArray(e.logs)) {
|
|
185
|
+
logEntries.push(...e.logs);
|
|
186
|
+
}
|
|
187
|
+
} else {
|
|
188
|
+
runEntries.push(event);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (traceEntries.length > 0) {
|
|
192
|
+
await this.post(this.endpoint, { traces: traceEntries });
|
|
193
|
+
}
|
|
194
|
+
if (runEntries.length > 0) {
|
|
195
|
+
await this.post(this.endpoint, { runs: runEntries });
|
|
196
|
+
}
|
|
197
|
+
if (logEntries.length > 0) {
|
|
198
|
+
await this.post(deriveLogsEndpoint(this.endpoint), { logs: logEntries });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async post(url, payload) {
|
|
202
|
+
const controller = new AbortController();
|
|
203
|
+
const timeoutId = setTimeout(() => controller.abort(), this.fetchTimeoutMs);
|
|
204
|
+
try {
|
|
205
|
+
const resp = await this.fetchImpl(url, {
|
|
206
|
+
method: "POST",
|
|
207
|
+
headers: {
|
|
208
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
209
|
+
"Content-Type": "application/json",
|
|
210
|
+
"User-Agent": `morse-typescript/${SDK_VERSION}`
|
|
211
|
+
},
|
|
212
|
+
body: JSON.stringify(payload),
|
|
213
|
+
signal: controller.signal
|
|
214
|
+
});
|
|
215
|
+
if (resp.status === 429) {
|
|
216
|
+
await recordQuotaState(resp);
|
|
217
|
+
}
|
|
218
|
+
if (!resp.ok) {
|
|
219
|
+
let bodySnippet = "";
|
|
220
|
+
try {
|
|
221
|
+
const text = await resp.text();
|
|
222
|
+
bodySnippet = text.slice(0, 200);
|
|
223
|
+
} catch {
|
|
224
|
+
}
|
|
225
|
+
chunkKRBADE6R_cjs.report(new Error(`morse: batch POST returned ${resp.status} ${bodySnippet}`), {
|
|
226
|
+
fingerprint: "morse.transport.post.non_2xx",
|
|
227
|
+
extra: {
|
|
228
|
+
endpoint_host: hostnameOf(url),
|
|
229
|
+
sdk_version: SDK_VERSION
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
} catch (err) {
|
|
234
|
+
chunkKRBADE6R_cjs.report(err, {
|
|
235
|
+
fingerprint: "morse.transport.post.network",
|
|
236
|
+
extra: {
|
|
237
|
+
endpoint_host: hostnameOf(url),
|
|
238
|
+
sdk_version: SDK_VERSION
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
} finally {
|
|
242
|
+
clearTimeout(timeoutId);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
function hostnameOf(url) {
|
|
247
|
+
try {
|
|
248
|
+
return new URL(url).host;
|
|
249
|
+
} catch {
|
|
250
|
+
return "<invalid>";
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function deriveLogsEndpoint(tracesEndpoint) {
|
|
254
|
+
try {
|
|
255
|
+
const u = new URL(tracesEndpoint);
|
|
256
|
+
u.pathname = "/api/v1/logs/ingest";
|
|
257
|
+
u.search = "";
|
|
258
|
+
u.hash = "";
|
|
259
|
+
return u.toString();
|
|
260
|
+
} catch {
|
|
261
|
+
return tracesEndpoint.replace(/\/api\/v1\/.*$/, "/api/v1/logs/ingest");
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// src/index.ts
|
|
266
|
+
chunkO4HG3OSK_cjs.init_tracing();
|
|
267
|
+
chunkO4HG3OSK_cjs.init_spans();
|
|
268
|
+
chunkO4HG3OSK_cjs.init_propagation();
|
|
269
|
+
var version = SDK_VERSION;
|
|
270
|
+
var singleton = null;
|
|
271
|
+
var transportFactory = (opts) => new BatchTransport(opts);
|
|
272
|
+
var noApiKeyWarningEmitted = false;
|
|
273
|
+
var lastLoggedEndpoint = null;
|
|
274
|
+
function logger(level, message) {
|
|
275
|
+
const out = level === "warn" ? console.warn : console.info;
|
|
276
|
+
out.call(console, message);
|
|
277
|
+
}
|
|
278
|
+
function logDestinationOnce(endpoint) {
|
|
279
|
+
if (endpoint === lastLoggedEndpoint) return;
|
|
280
|
+
lastLoggedEndpoint = endpoint;
|
|
281
|
+
logger(
|
|
282
|
+
"info",
|
|
283
|
+
`morse: Morse SDK initialized \u2014 sending to ${endpoint} (sdk version ${SDK_VERSION})`
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
function resolveEndpoint(explicit) {
|
|
287
|
+
if (explicit && explicit.length > 0) return explicit;
|
|
288
|
+
const fromEnv = chunkO4HG3OSK_cjs.getEndpoint();
|
|
289
|
+
if (fromEnv) return fromEnv;
|
|
290
|
+
return chunkO4HG3OSK_cjs.DEFAULT_ENDPOINT;
|
|
291
|
+
}
|
|
292
|
+
var OTLP_TRACES_PATH = "/api/v1/otlp/v1/traces";
|
|
293
|
+
function deriveOtlpEndpoint(tracesEndpoint) {
|
|
294
|
+
try {
|
|
295
|
+
const u = new URL(tracesEndpoint);
|
|
296
|
+
u.pathname = OTLP_TRACES_PATH;
|
|
297
|
+
u.search = "";
|
|
298
|
+
u.hash = "";
|
|
299
|
+
return u.toString();
|
|
300
|
+
} catch {
|
|
301
|
+
return tracesEndpoint.replace(/\/api\/v1\/.*$/, OTLP_TRACES_PATH);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
function buildSingleton(opts, redaction) {
|
|
305
|
+
if (chunkO4HG3OSK_cjs.isDisabled()) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
const apiKey = opts.apiKey ?? chunkO4HG3OSK_cjs.getApiKey();
|
|
309
|
+
if (!apiKey) {
|
|
310
|
+
if (!noApiKeyWarningEmitted) {
|
|
311
|
+
logger(
|
|
312
|
+
"warn",
|
|
313
|
+
"morse: not initialized \u2014 set MORSE_API_KEY or call morse.init({ apiKey }) (this warning prints once per process; SDK calls are silent no-ops)"
|
|
314
|
+
);
|
|
315
|
+
noApiKeyWarningEmitted = true;
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
const endpoint = resolveEndpoint(opts.endpoint);
|
|
320
|
+
const flushIntervalSeconds = opts.flushIntervalSeconds ?? chunkO4HG3OSK_cjs.getFlushIntervalSeconds();
|
|
321
|
+
const transport = transportFactory({ apiKey, endpoint, flushIntervalSeconds });
|
|
322
|
+
chunkO4HG3OSK_cjs.setTransport(transport);
|
|
323
|
+
chunkO4HG3OSK_cjs.setRedactionConfig(redaction);
|
|
324
|
+
const explicitSource = chunkO4HG3OSK_cjs.isValidInternalSource(opts.source) ? opts.source : void 0;
|
|
325
|
+
const resolvedSource = explicitSource ?? chunkO4HG3OSK_cjs.getInternalSource() ?? null;
|
|
326
|
+
chunkO4HG3OSK_cjs.setSource(resolvedSource);
|
|
327
|
+
logDestinationOnce(endpoint);
|
|
328
|
+
try {
|
|
329
|
+
chunkO4HG3OSK_cjs.getEngine().configure({
|
|
330
|
+
endpoint: deriveOtlpEndpoint(endpoint),
|
|
331
|
+
apiKey,
|
|
332
|
+
sampleRate: chunkO4HG3OSK_cjs.getSampleRate(),
|
|
333
|
+
scheduleDelayMillis: flushIntervalSeconds * 1e3,
|
|
334
|
+
maxQueueSize: chunkO4HG3OSK_cjs.getMaxQueueSize(),
|
|
335
|
+
maxExportBatchSize: chunkO4HG3OSK_cjs.getMaxBatchSize(),
|
|
336
|
+
maxFieldBytes: chunkO4HG3OSK_cjs.getMaxFieldBytes(),
|
|
337
|
+
// 10s (not the exporter's un-overridden 30s ceiling): a genuine
|
|
338
|
+
// network blip still gets several retries with backoff; a fully dead
|
|
339
|
+
// endpoint fails within a bounded, shutdown-friendly window instead
|
|
340
|
+
// of the library's full 30s ceiling. Mirrors the Python SDK.
|
|
341
|
+
timeoutMillis: 1e4,
|
|
342
|
+
redactionConfig: redaction
|
|
343
|
+
});
|
|
344
|
+
} catch (err) {
|
|
345
|
+
chunkKRBADE6R_cjs.report(err, { fingerprint: "morse.otel_provider.configure" });
|
|
346
|
+
}
|
|
347
|
+
void installAdapters().catch(() => {
|
|
348
|
+
});
|
|
349
|
+
try {
|
|
350
|
+
maybeEnableDbCaptureFromEnv();
|
|
351
|
+
} catch (err) {
|
|
352
|
+
chunkKRBADE6R_cjs.report(err, { fingerprint: "morse.db_capture.register" });
|
|
353
|
+
}
|
|
354
|
+
return { apiKey, endpoint, transport, redaction };
|
|
355
|
+
}
|
|
356
|
+
function ensureInitialized() {
|
|
357
|
+
if (chunkO4HG3OSK_cjs.isDisabled()) return null;
|
|
358
|
+
if (singleton !== null) return singleton;
|
|
359
|
+
singleton = buildSingleton({}, chunkO4HG3OSK_cjs.buildRedactionConfig());
|
|
360
|
+
return singleton;
|
|
361
|
+
}
|
|
362
|
+
chunkTZRSDDFP_cjs._setEnsureInitialized(() => {
|
|
363
|
+
ensureInitialized();
|
|
364
|
+
});
|
|
365
|
+
function init(options = {}) {
|
|
366
|
+
if (chunkO4HG3OSK_cjs.isDisabled()) {
|
|
367
|
+
logger("info", "morse: MORSE_DISABLED=1 \u2014 SDK is a no-op");
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const redaction = chunkO4HG3OSK_cjs.buildRedactionConfig(options.redaction);
|
|
371
|
+
try {
|
|
372
|
+
if (singleton !== null) {
|
|
373
|
+
void singleton.transport.shutdown();
|
|
374
|
+
singleton = null;
|
|
375
|
+
}
|
|
376
|
+
singleton = buildSingleton(options, redaction);
|
|
377
|
+
} catch (err) {
|
|
378
|
+
chunkKRBADE6R_cjs.report(err, { fingerprint: "morse.init" });
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
var track = chunkKRBADE6R_cjs.absorbErrorsSync(
|
|
382
|
+
(options) => {
|
|
383
|
+
const state = ensureInitialized();
|
|
384
|
+
if (!state) return;
|
|
385
|
+
const payload = {
|
|
386
|
+
agent_id: options.agentId,
|
|
387
|
+
...options.runData
|
|
388
|
+
};
|
|
389
|
+
const redacted = chunkO4HG3OSK_cjs.redactValue(payload, state.redaction);
|
|
390
|
+
state.transport.track(redacted);
|
|
391
|
+
},
|
|
392
|
+
{ fingerprint: "morse.track" }
|
|
393
|
+
);
|
|
394
|
+
var batchTrack = chunkKRBADE6R_cjs.absorbErrorsSync(
|
|
395
|
+
(runs) => {
|
|
396
|
+
const state = ensureInitialized();
|
|
397
|
+
if (!state) return;
|
|
398
|
+
for (const run2 of runs) {
|
|
399
|
+
const redacted = chunkO4HG3OSK_cjs.redactValue(run2, state.redaction);
|
|
400
|
+
state.transport.track(redacted);
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
{ fingerprint: "morse.batch_track" }
|
|
404
|
+
);
|
|
405
|
+
var record = chunkKRBADE6R_cjs.absorbErrorsSync(
|
|
406
|
+
(rec) => {
|
|
407
|
+
const state = ensureInitialized();
|
|
408
|
+
if (!state) return;
|
|
409
|
+
const traceId = chunkO4HG3OSK_cjs.generateTraceId();
|
|
410
|
+
const now = chunkO4HG3OSK_cjs.nowIso();
|
|
411
|
+
const resolvedStatus = rec.errorMessage ? "failed" : rec.status ?? "completed";
|
|
412
|
+
const span2 = {
|
|
413
|
+
trace_id: traceId,
|
|
414
|
+
span_id: chunkO4HG3OSK_cjs.generateSpanId(),
|
|
415
|
+
type: chunkO4HG3OSK_cjs.SpanType.AGENT,
|
|
416
|
+
name: rec.agent,
|
|
417
|
+
started_at: now,
|
|
418
|
+
ended_at: now,
|
|
419
|
+
status: resolvedStatus,
|
|
420
|
+
duration_ms: rec.durationMs,
|
|
421
|
+
model: rec.model,
|
|
422
|
+
input_tokens: rec.inputTokens,
|
|
423
|
+
output_tokens: rec.outputTokens,
|
|
424
|
+
total_tokens: rec.totalTokens,
|
|
425
|
+
cost_usd: rec.cost,
|
|
426
|
+
error_message: rec.errorMessage,
|
|
427
|
+
metadata: rec.metadata
|
|
428
|
+
};
|
|
429
|
+
const traceFields = {
|
|
430
|
+
trace_id: traceId,
|
|
431
|
+
agent: rec.agent,
|
|
432
|
+
status: resolvedStatus,
|
|
433
|
+
started_at: now,
|
|
434
|
+
ended_at: now,
|
|
435
|
+
duration_ms: rec.durationMs,
|
|
436
|
+
error_message: rec.errorMessage,
|
|
437
|
+
success: rec.success,
|
|
438
|
+
outcome: rec.outcome
|
|
439
|
+
};
|
|
440
|
+
const entry = chunkO4HG3OSK_cjs.buildTraceEntry(traceFields, [span2]);
|
|
441
|
+
const redacted = chunkO4HG3OSK_cjs.redactValue(entry, state.redaction);
|
|
442
|
+
chunkO4HG3OSK_cjs.sendTrace(redacted);
|
|
443
|
+
},
|
|
444
|
+
{ fingerprint: "morse.record" }
|
|
445
|
+
);
|
|
446
|
+
function run(nameOrOpts, fn) {
|
|
447
|
+
const opts = typeof nameOrOpts === "string" ? { agentName: nameOrOpts } : nameOrOpts;
|
|
448
|
+
ensureInitialized();
|
|
449
|
+
return chunkO4HG3OSK_cjs.runSync(opts, fn);
|
|
450
|
+
}
|
|
451
|
+
function runTraced(options, fn) {
|
|
452
|
+
ensureInitialized();
|
|
453
|
+
return chunkO4HG3OSK_cjs.runAsync(options, fn);
|
|
454
|
+
}
|
|
455
|
+
function setContext2(dims) {
|
|
456
|
+
chunkO4HG3OSK_cjs.setContext(dims);
|
|
457
|
+
}
|
|
458
|
+
function startSpan2(options) {
|
|
459
|
+
return chunkO4HG3OSK_cjs.startSpan(options);
|
|
460
|
+
}
|
|
461
|
+
function span(options, fn) {
|
|
462
|
+
return chunkO4HG3OSK_cjs.spanSync(options, fn);
|
|
463
|
+
}
|
|
464
|
+
function spanAsync2(options, fn) {
|
|
465
|
+
return chunkO4HG3OSK_cjs.spanAsync(options, fn);
|
|
466
|
+
}
|
|
467
|
+
var flush = chunkKRBADE6R_cjs.absorbErrorsAsync(
|
|
468
|
+
async () => {
|
|
469
|
+
if (singleton !== null) {
|
|
470
|
+
await singleton.transport.flush();
|
|
471
|
+
await chunkO4HG3OSK_cjs.getEngine().flush();
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
{ fingerprint: "morse.flush" }
|
|
475
|
+
);
|
|
476
|
+
var quotaState2 = chunkKRBADE6R_cjs.absorbErrorsSync(
|
|
477
|
+
() => {
|
|
478
|
+
if (singleton === null) return null;
|
|
479
|
+
return getQuotaState();
|
|
480
|
+
},
|
|
481
|
+
{ fingerprint: "morse.quota_state" }
|
|
482
|
+
);
|
|
483
|
+
var shutdown = chunkKRBADE6R_cjs.absorbErrorsAsync(
|
|
484
|
+
async () => {
|
|
485
|
+
if (singleton !== null) {
|
|
486
|
+
await singleton.transport.shutdown();
|
|
487
|
+
await chunkO4HG3OSK_cjs.getEngine().flush();
|
|
488
|
+
chunkO4HG3OSK_cjs.getEngine().shutdown();
|
|
489
|
+
singleton = null;
|
|
490
|
+
chunkO4HG3OSK_cjs.setTransport(null);
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
{ fingerprint: "morse.shutdown" }
|
|
494
|
+
);
|
|
495
|
+
function _resetForTesting4() {
|
|
496
|
+
if (singleton !== null) {
|
|
497
|
+
void singleton.transport.shutdown();
|
|
498
|
+
singleton = null;
|
|
499
|
+
chunkO4HG3OSK_cjs.setTransport(null);
|
|
500
|
+
}
|
|
501
|
+
chunkO4HG3OSK_cjs.getEngine().resetForTesting();
|
|
502
|
+
noApiKeyWarningEmitted = false;
|
|
503
|
+
lastLoggedEndpoint = null;
|
|
504
|
+
chunkO4HG3OSK_cjs.setSource(null);
|
|
505
|
+
chunkO4HG3OSK_cjs._resetForTesting();
|
|
506
|
+
chunkKRBADE6R_cjs._resetForTesting();
|
|
507
|
+
_resetQuotaStateForTesting();
|
|
508
|
+
transportFactory = (opts) => new BatchTransport(opts);
|
|
509
|
+
}
|
|
510
|
+
function _setTransportFactoryForTesting(factory) {
|
|
511
|
+
transportFactory = factory;
|
|
512
|
+
}
|
|
513
|
+
function _getLastTraceForTesting() {
|
|
514
|
+
return chunkO4HG3OSK_cjs.getLastTrace();
|
|
515
|
+
}
|
|
516
|
+
function _getActiveTraceStateForTesting() {
|
|
517
|
+
return chunkO4HG3OSK_cjs.getActiveTraceState();
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
Object.defineProperty(exports, "MAX_SEGMENT_CONTENT_BYTES", {
|
|
521
|
+
enumerable: true,
|
|
522
|
+
get: function () { return chunkF6CJACNH_cjs.MAX_SEGMENT_CONTENT_BYTES; }
|
|
523
|
+
});
|
|
524
|
+
Object.defineProperty(exports, "extractAnthropicSegments", {
|
|
525
|
+
enumerable: true,
|
|
526
|
+
get: function () { return chunkF6CJACNH_cjs.extractAnthropicSegments; }
|
|
527
|
+
});
|
|
528
|
+
Object.defineProperty(exports, "instrumentAnthropic", {
|
|
529
|
+
enumerable: true,
|
|
530
|
+
get: function () { return chunkF6CJACNH_cjs.instrumentAnthropic; }
|
|
531
|
+
});
|
|
532
|
+
Object.defineProperty(exports, "isAnthropicWrapped", {
|
|
533
|
+
enumerable: true,
|
|
534
|
+
get: function () { return chunkF6CJACNH_cjs.isAnthropicWrapped; }
|
|
535
|
+
});
|
|
536
|
+
Object.defineProperty(exports, "uninstallAnthropic", {
|
|
537
|
+
enumerable: true,
|
|
538
|
+
get: function () { return chunkF6CJACNH_cjs.uninstallAnthropic; }
|
|
539
|
+
});
|
|
540
|
+
Object.defineProperty(exports, "wrapAnthropic", {
|
|
541
|
+
enumerable: true,
|
|
542
|
+
get: function () { return chunkF6CJACNH_cjs.wrapAnthropic; }
|
|
543
|
+
});
|
|
544
|
+
Object.defineProperty(exports, "log", {
|
|
545
|
+
enumerable: true,
|
|
546
|
+
get: function () { return chunkTZRSDDFP_cjs.log; }
|
|
547
|
+
});
|
|
548
|
+
Object.defineProperty(exports, "W3C_TRACEPARENT_HEADER", {
|
|
549
|
+
enumerable: true,
|
|
550
|
+
get: function () { return chunkO4HG3OSK_cjs.W3C_TRACEPARENT_HEADER; }
|
|
551
|
+
});
|
|
552
|
+
Object.defineProperty(exports, "extractTraceparent", {
|
|
553
|
+
enumerable: true,
|
|
554
|
+
get: function () { return chunkO4HG3OSK_cjs.extractTraceparent; }
|
|
555
|
+
});
|
|
556
|
+
Object.defineProperty(exports, "formatTraceparent", {
|
|
557
|
+
enumerable: true,
|
|
558
|
+
get: function () { return chunkO4HG3OSK_cjs.formatTraceparent; }
|
|
559
|
+
});
|
|
560
|
+
Object.defineProperty(exports, "injectIntoRequestInit", {
|
|
561
|
+
enumerable: true,
|
|
562
|
+
get: function () { return chunkO4HG3OSK_cjs.injectIntoRequestInit; }
|
|
563
|
+
});
|
|
564
|
+
Object.defineProperty(exports, "injectTraceparent", {
|
|
565
|
+
enumerable: true,
|
|
566
|
+
get: function () { return chunkO4HG3OSK_cjs.injectTraceparent; }
|
|
567
|
+
});
|
|
568
|
+
exports._getActiveTraceStateForTesting = _getActiveTraceStateForTesting;
|
|
569
|
+
exports._getLastTraceForTesting = _getLastTraceForTesting;
|
|
570
|
+
exports._resetForTesting = _resetForTesting4;
|
|
571
|
+
exports._setTransportFactoryForTesting = _setTransportFactoryForTesting;
|
|
572
|
+
exports.batchTrack = batchTrack;
|
|
573
|
+
exports.flush = flush;
|
|
574
|
+
exports.init = init;
|
|
575
|
+
exports.quotaState = quotaState2;
|
|
576
|
+
exports.record = record;
|
|
577
|
+
exports.run = run;
|
|
578
|
+
exports.runTraced = runTraced;
|
|
579
|
+
exports.setContext = setContext2;
|
|
580
|
+
exports.shutdown = shutdown;
|
|
581
|
+
exports.span = span;
|
|
582
|
+
exports.spanAsync = spanAsync2;
|
|
583
|
+
exports.startSpan = startSpan2;
|
|
584
|
+
exports.track = track;
|
|
585
|
+
exports.version = version;
|
|
586
|
+
//# sourceMappingURL=index.cjs.map
|
|
587
|
+
//# sourceMappingURL=index.cjs.map
|