neatlogs 1.1.2 → 1.1.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.d.ts CHANGED
@@ -590,6 +590,6 @@ declare function registerCrewaiTask(task: {
590
590
  * SDK version. Kept in sync with package.json by the `version:sync` script
591
591
  * (runs automatically on `prebuild`). Do not edit by hand — bump package.json.
592
592
  */
593
- declare const __version__ = "1.1.2";
593
+ declare const __version__ = "1.1.4";
594
594
 
595
595
  export { type CachedPrompt, type InitOptions, type MaskFunction, PromptApiError, PromptClient, PromptClientError, PromptHandle, type PromptMessage, PromptNotFoundError, PromptTemplate, Span, type SpanKind, type SpanOptions, type TraceOptions, UserPromptTemplate, __version__, bindTemplates, createPrompt, deletePrompt, fetchPrompt, flush, getMastraObservability, getPrompt, getSessionConfig, identify, init, isDebugEnabled, listPrompts, log, registerCrewaiTask, removeTag, saveAsVersion, shutdown, span, trace, updatePrompt };
package/dist/index.mjs CHANGED
@@ -2136,9 +2136,84 @@ function applyMask(spanData, globalMask) {
2136
2136
  }
2137
2137
  }
2138
2138
 
2139
- // src/prompt/template.ts
2139
+ // src/core/identity.ts
2140
2140
  import { AsyncLocalStorage } from "async_hooks";
2141
- var _promptStorage = new AsyncLocalStorage();
2141
+ var _GLOBAL_KEY = /* @__PURE__ */ Symbol.for("neatlogs.identity.storage");
2142
+ var _g = globalThis;
2143
+ var _storage = _g[_GLOBAL_KEY] ?? (_g[_GLOBAL_KEY] = new AsyncLocalStorage());
2144
+ function currentSessionId() {
2145
+ return _storage.getStore()?.sessionId;
2146
+ }
2147
+ function currentEndUserId() {
2148
+ return _storage.getStore()?.endUserId;
2149
+ }
2150
+ function currentEndUserMetadata() {
2151
+ return _storage.getStore()?.endUserMetadata;
2152
+ }
2153
+ function identify(opts, fn) {
2154
+ const prev = _storage.getStore();
2155
+ const next = { ...prev ?? {} };
2156
+ if (opts.sessionId !== void 0) next.sessionId = opts.sessionId;
2157
+ if (opts.endUserId !== void 0) next.endUserId = opts.endUserId;
2158
+ if (opts.endUserMetadata !== void 0) next.endUserMetadata = opts.endUserMetadata;
2159
+ return _storage.run(next, fn);
2160
+ }
2161
+
2162
+ // src/core/session.ts
2163
+ var logger4 = getLogger();
2164
+ var SESSION_ID_KEY = "neatlogs.session.id";
2165
+ function applySessionAttributes(span2, sessionId, isRoot = true) {
2166
+ const resolved = isRoot ? sessionId ?? currentSessionId() : sessionId;
2167
+ if (!resolved) return;
2168
+ if (!isRoot) {
2169
+ logger4.debug(
2170
+ "[session] Ignoring sessionId on a non-root span \u2014 declare it on the trace root (top-level trace()/span()) or identify()."
2171
+ );
2172
+ return;
2173
+ }
2174
+ span2.setAttribute(SESSION_ID_KEY, String(resolved));
2175
+ }
2176
+
2177
+ // src/core/end-user.ts
2178
+ import { trace as otelTrace, context as otelContext } from "@opentelemetry/api";
2179
+ var logger5 = getLogger();
2180
+ var END_USER_ID_KEY = "neatlogs.end_user.id";
2181
+ var END_USER_METADATA_KEY = "neatlogs.end_user.metadata";
2182
+ function normalizeEndUserMetadata(metadata) {
2183
+ if (metadata === void 0 || metadata === null) return void 0;
2184
+ if (typeof metadata === "string") return metadata || void 0;
2185
+ try {
2186
+ return JSON.stringify(metadata);
2187
+ } catch {
2188
+ return JSON.stringify(String(metadata));
2189
+ }
2190
+ }
2191
+ function isRootSpan() {
2192
+ const current = otelTrace.getSpan(otelContext.active());
2193
+ return !(current && current.isRecording());
2194
+ }
2195
+ function applyEndUserAttributes(span2, endUserId, endUserMetadata, isRoot = true) {
2196
+ const resolvedId = isRoot ? endUserId ?? currentEndUserId() : endUserId;
2197
+ const resolvedMeta = isRoot ? endUserMetadata ?? currentEndUserMetadata() : endUserMetadata;
2198
+ if (!resolvedId && !resolvedMeta) return;
2199
+ if (!isRoot) {
2200
+ logger5.debug(
2201
+ "[end_user] Ignoring endUserId/endUserMetadata on a non-root span \u2014 declare it on the trace root (top-level trace()/span()) or identify()."
2202
+ );
2203
+ return;
2204
+ }
2205
+ if (resolvedId) {
2206
+ span2.setAttribute(END_USER_ID_KEY, String(resolvedId));
2207
+ }
2208
+ const metaJson = normalizeEndUserMetadata(resolvedMeta);
2209
+ if (metaJson) {
2210
+ span2.setAttribute(END_USER_METADATA_KEY, metaJson);
2211
+ }
2212
+ }
2213
+
2214
+ // src/prompt/template.ts
2215
+ import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
2216
+ var _promptStorage = new AsyncLocalStorage2();
2142
2217
  var PromptContext = class {
2143
2218
  /**
2144
2219
  * Store system prompt template and variables in context.
@@ -2165,7 +2240,7 @@ var PromptContext = class {
2165
2240
  _promptStorage.enterWith(void 0);
2166
2241
  }
2167
2242
  };
2168
- var _userPromptStorage = new AsyncLocalStorage();
2243
+ var _userPromptStorage = new AsyncLocalStorage2();
2169
2244
  var UserPromptContext = class {
2170
2245
  /**
2171
2246
  * Store user prompt template and variables in context.
@@ -2297,83 +2372,6 @@ import {
2297
2372
  SpanStatusCode as SpanStatusCode2
2298
2373
  } from "@opentelemetry/api";
2299
2374
 
2300
- // src/core/end-user.ts
2301
- import { trace as otelTrace, context as otelContext } from "@opentelemetry/api";
2302
-
2303
- // src/core/identity.ts
2304
- import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
2305
- var _GLOBAL_KEY = /* @__PURE__ */ Symbol.for("neatlogs.identity.storage");
2306
- var _g = globalThis;
2307
- var _storage = _g[_GLOBAL_KEY] ?? (_g[_GLOBAL_KEY] = new AsyncLocalStorage2());
2308
- function currentSessionId() {
2309
- return _storage.getStore()?.sessionId;
2310
- }
2311
- function currentEndUserId() {
2312
- return _storage.getStore()?.endUserId;
2313
- }
2314
- function currentEndUserMetadata() {
2315
- return _storage.getStore()?.endUserMetadata;
2316
- }
2317
- function identify(opts, fn) {
2318
- const prev = _storage.getStore();
2319
- const next = { ...prev ?? {} };
2320
- if (opts.sessionId !== void 0) next.sessionId = opts.sessionId;
2321
- if (opts.endUserId !== void 0) next.endUserId = opts.endUserId;
2322
- if (opts.endUserMetadata !== void 0) next.endUserMetadata = opts.endUserMetadata;
2323
- return _storage.run(next, fn);
2324
- }
2325
-
2326
- // src/core/end-user.ts
2327
- var logger4 = getLogger();
2328
- var END_USER_ID_KEY = "neatlogs.end_user.id";
2329
- var END_USER_METADATA_KEY = "neatlogs.end_user.metadata";
2330
- function normalizeEndUserMetadata(metadata) {
2331
- if (metadata === void 0 || metadata === null) return void 0;
2332
- if (typeof metadata === "string") return metadata || void 0;
2333
- try {
2334
- return JSON.stringify(metadata);
2335
- } catch {
2336
- return JSON.stringify(String(metadata));
2337
- }
2338
- }
2339
- function isRootSpan() {
2340
- const current = otelTrace.getSpan(otelContext.active());
2341
- return !(current && current.isRecording());
2342
- }
2343
- function applyEndUserAttributes(span2, endUserId, endUserMetadata, isRoot = true) {
2344
- const resolvedId = isRoot ? endUserId ?? currentEndUserId() : endUserId;
2345
- const resolvedMeta = isRoot ? endUserMetadata ?? currentEndUserMetadata() : endUserMetadata;
2346
- if (!resolvedId && !resolvedMeta) return;
2347
- if (!isRoot) {
2348
- logger4.debug(
2349
- "[end_user] Ignoring endUserId/endUserMetadata on a non-root span \u2014 declare it on the trace root (top-level trace()/span()) or identify()."
2350
- );
2351
- return;
2352
- }
2353
- if (resolvedId) {
2354
- span2.setAttribute(END_USER_ID_KEY, String(resolvedId));
2355
- }
2356
- const metaJson = normalizeEndUserMetadata(resolvedMeta);
2357
- if (metaJson) {
2358
- span2.setAttribute(END_USER_METADATA_KEY, metaJson);
2359
- }
2360
- }
2361
-
2362
- // src/core/session.ts
2363
- var logger5 = getLogger();
2364
- var SESSION_ID_KEY = "neatlogs.session.id";
2365
- function applySessionAttributes(span2, sessionId, isRoot = true) {
2366
- const resolved = isRoot ? sessionId ?? currentSessionId() : sessionId;
2367
- if (!resolved) return;
2368
- if (!isRoot) {
2369
- logger5.debug(
2370
- "[session] Ignoring sessionId on a non-root span \u2014 declare it on the trace root (top-level trace()/span()) or identify()."
2371
- );
2372
- return;
2373
- }
2374
- span2.setAttribute(SESSION_ID_KEY, String(resolved));
2375
- }
2376
-
2377
2375
  // src/decorators/base.ts
2378
2376
  import { trace, SpanStatusCode } from "@opentelemetry/api";
2379
2377
  var logger6 = getLogger();
@@ -4351,6 +4349,10 @@ var NeatlogsSpanProcessor = class {
4351
4349
  onStart(span2, parentContext) {
4352
4350
  const startTime = performance.now();
4353
4351
  try {
4352
+ if (!span2.parentSpanId) {
4353
+ applySessionAttributes(span2, void 0, true);
4354
+ applyEndUserAttributes(span2, void 0, void 0, true);
4355
+ }
4354
4356
  const attrs = span2.attributes ?? {};
4355
4357
  const spanKind = attrs["openinference.span.kind"];
4356
4358
  const spanName = typeof span2.name === "string" ? span2.name : "";
@@ -5743,7 +5745,7 @@ async function removeTag(name, tag) {
5743
5745
  }
5744
5746
 
5745
5747
  // src/version.ts
5746
- var __version__ = "1.1.2";
5748
+ var __version__ = "1.1.4";
5747
5749
 
5748
5750
  // src/init.ts
5749
5751
  var logger13 = getLogger();