@lensmcp/nest-instrumentation 1.23.9 → 1.23.10

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/lib/context.js CHANGED
@@ -1 +1 @@
1
- "use strict";var o=Object.defineProperty;var t=(e,n)=>o(e,"name",{value:n,configurable:!0});var c=Object.defineProperty,r=t((e,n)=>c(e,"name",{value:n,configurable:!0}),"r");import{AsyncLocalStorage as u}from"node:async_hooks";export const LENSMCP_CONTEXT_STORAGE=new u;export function currentLensmcpContext(){return LENSMCP_CONTEXT_STORAGE.getStore()}t(currentLensmcpContext,"currentLensmcpContext"),r(currentLensmcpContext,"currentLensmcpContext");export function runInLensmcpContext(e,n){return LENSMCP_CONTEXT_STORAGE.run(e,n)}t(runInLensmcpContext,"runInLensmcpContext"),r(runInLensmcpContext,"runInLensmcpContext");
1
+ "use strict";var c=Object.defineProperty;var t=(e,n)=>c(e,"name",{value:n,configurable:!0});var u=Object.defineProperty,r=t((e,n)=>u(e,"name",{value:n,configurable:!0}),"t"),a=Object.defineProperty,o=r((e,n)=>a(e,"name",{value:n,configurable:!0}),"r");import{AsyncLocalStorage as p}from"node:async_hooks";export const LENSMCP_CONTEXT_STORAGE=new p;export function currentLensmcpContext(){return LENSMCP_CONTEXT_STORAGE.getStore()}t(currentLensmcpContext,"currentLensmcpContext"),r(currentLensmcpContext,"currentLensmcpContext"),o(currentLensmcpContext,"currentLensmcpContext");export function runInLensmcpContext(e,n){return LENSMCP_CONTEXT_STORAGE.run(e,n)}t(runInLensmcpContext,"runInLensmcpContext"),r(runInLensmcpContext,"runInLensmcpContext"),o(runInLensmcpContext,"runInLensmcpContext");
package/lib/event-sink.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var m=Object.defineProperty;var u=(n,e)=>m(n,"name",{value:e,configurable:!0});var d=Object.defineProperty,c=u((n,e)=>d(n,"name",{value:e,configurable:!0}),"s");import{createSocket as S}from"node:dgram";import{connect as v}from"node:net";import{appendFile as y}from"node:fs/promises";import{boundedClone as E,createEventFloodGuard as h,DEFAULT_RAW_BYTE_LIMIT as g}from"@lensmcp/protocol-types";import{maybeRotateEventFile as k}from"@lensmcp/protocol-types/bounded-writer";export function defaultEventSink(){const n=process.env.LENSMCP_EVENT_FILE;if(n){const r=h({burst:30,perSec:5});let i=Promise.resolve();return s=>{const o=r.admit(String(s.fingerprint??""));if(!o.ok)return;const a=f(s,o.suppressed);a&&(i=i.then(async()=>{k(n,a.length),await y(n,a).catch(()=>{})}))}}const e=process.env.LENSMCP_UDS;if(e)return l(e);const t=process.env.LENSMCP_IPC_SOCKET;if(t){const[r,i]=t.split(":");if(r&&i){const s=Number(i),o=S("udp4");return o.unref(),a=>{try{const p=Buffer.from(JSON.stringify(a));o.send(p,s,r,()=>{})}catch{}}}}return r=>{(r.severity==="error"||r.severity==="fatal")&&console.warn(`[lensmcp] ${r.severity}: ${r.title}`)}}u(defaultEventSink,"defaultEventSink"),c(defaultEventSink,"defaultEventSink");function f(n,e){try{const t=E(n.raw,{rawByteLimit:g}).value,r={...n,raw:t};return e>0&&(r.floodSuppressed=e),JSON.stringify(r)+`
2
- `}catch{return}}u(f,"E"),c(f,"serializeBounded");export function inMemorySink(){const n=[];return{sink:c(e=>n.push(e),"sink"),events:n}}u(inMemorySink,"inMemorySink"),c(inMemorySink,"inMemorySink");function l(n){const e=[];let t=null,r=!1;const i=c(()=>{if(!(!t||!t.writable))for(;e.length>0;)t.write(e.shift())},"flush"),s=c(()=>{if(r||t)return;r=!0;const o=v(n);o.on("connect",()=>{r=!1,t=o,i()}),o.on("drain",i),o.on("error",()=>{r=!1,t=null}),o.on("close",()=>{t=null}),o.unref()},"open");return s(),o=>{for(e.push(JSON.stringify(o)+`
3
- `);e.length>1e4;)e.shift();if(t&&t.writable){i();return}if(t){try{t.destroy()}catch{}t=null}s()}}u(l,"w"),c(l,"udsEventSink");
1
+ "use strict";var d=Object.defineProperty;var a=(t,e)=>d(t,"name",{value:e,configurable:!0});var v=Object.defineProperty,f=a((t,e)=>v(t,"name",{value:e,configurable:!0}),"u"),S=Object.defineProperty,c=f((t,e)=>S(t,"name",{value:e,configurable:!0}),"s");import{createSocket as y}from"node:dgram";import{connect as E}from"node:net";import{appendFile as h}from"node:fs/promises";import{boundedClone as k,createEventFloodGuard as g,DEFAULT_RAW_BYTE_LIMIT as b}from"@lensmcp/protocol-types";import{maybeRotateEventFile as w}from"@lensmcp/protocol-types/bounded-writer";export function defaultEventSink(){const t=process.env.LENSMCP_EVENT_FILE;if(t){const r=g({burst:30,perSec:5});let i=Promise.resolve();return s=>{const o=r.admit(String(s.fingerprint??""));if(!o.ok)return;const u=l(s,o.suppressed);u&&(i=i.then(async()=>{w(t,u.length),await h(t,u).catch(()=>{})}))}}const e=process.env.LENSMCP_UDS;if(e)return p(e);const n=process.env.LENSMCP_IPC_SOCKET;if(n){const[r,i]=n.split(":");if(r&&i){const s=Number(i),o=y("udp4");return o.unref(),u=>{try{const m=Buffer.from(JSON.stringify(u));o.send(m,s,r,()=>{})}catch{}}}}return r=>{(r.severity==="error"||r.severity==="fatal")&&console.warn(`[lensmcp] ${r.severity}: ${r.title}`)}}a(defaultEventSink,"defaultEventSink"),f(defaultEventSink,"defaultEventSink"),c(defaultEventSink,"defaultEventSink");function l(t,e){try{const n=k(t.raw,{rawByteLimit:b}).value,r={...t,raw:n};return e>0&&(r.floodSuppressed=e),JSON.stringify(r)+`
2
+ `}catch{return}}a(l,"f"),f(l,"E"),c(l,"serializeBounded");export function inMemorySink(){const t=[];return{sink:c(e=>t.push(e),"sink"),events:t}}a(inMemorySink,"inMemorySink"),f(inMemorySink,"inMemorySink"),c(inMemorySink,"inMemorySink");function p(t){const e=[];let n=null,r=!1;const i=c(()=>{if(!(!n||!n.writable))for(;e.length>0;)n.write(e.shift())},"flush"),s=c(()=>{if(r||n)return;r=!0;const o=E(t);o.on("connect",()=>{r=!1,n=o,i()}),o.on("drain",i),o.on("error",()=>{r=!1,n=null}),o.on("close",()=>{n=null}),o.unref()},"open");return s(),o=>{for(e.push(JSON.stringify(o)+`
3
+ `);e.length>1e4;)e.shift();if(n&&n.writable){i();return}if(n){try{n.destroy()}catch{}n=null}s()}}a(p,"l"),f(p,"w"),c(p,"udsEventSink");
package/lib/instrument.js CHANGED
@@ -1 +1 @@
1
- "use strict";var L=Object.defineProperty;var d=(e,o)=>L(e,"name",{value:o,configurable:!0});var v=Object.defineProperty,i=d((e,o)=>v(e,"name",{value:o,configurable:!0}),"i");import{fingerprint as m,ulid as y}from"@lensmcp/core";import{currentLensmcpContext as $}from"./context.js";import{activeOptions as E}from"./state.js";export const LENSMCP_TRACED=Symbol.for("@lensmcp/nest-instrumentation/traced"),LENSMCP_IGNORE=Symbol.for("@lensmcp/nest-instrumentation/ignore");export function LensmcpIgnore(){return((e,o)=>{if(o===void 0)e[LENSMCP_IGNORE]=!0;else{const l=e[o];typeof l=="function"&&(l[LENSMCP_IGNORE]=!0)}})}d(LensmcpIgnore,"LensmcpIgnore"),i(LensmcpIgnore,"LensmcpIgnore");export function isTraced(e){return typeof e=="function"&&!!e[LENSMCP_TRACED]}d(isTraced,"isTraced"),i(isTraced,"isTraced");export function isIgnored(e){return!!e&&(typeof e=="function"||typeof e=="object")&&!!e[LENSMCP_IGNORE]}d(isIgnored,"isIgnored"),i(isIgnored,"isIgnored");export function traceWrap(e,o,l={}){if(isTraced(e))return e;const p=l.db??!1,w=i(function(...f){let r;try{r=E()}catch{return e.apply(this,f)}if(!r.trace.services)return e.apply(this,f);const u=Date.now(),n=$(),q=n?.dbCallCount??0,k=n?.redisCallCount??0,D=n?.externalCallCount??0,C=i((t,s)=>{const a=Date.now()-u,I={id:y(),sessionId:r.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:t==="error"?"error":"info",context:{sessionId:r.sessionId,flowId:n?.flowId,requestId:n?.requestId},fingerprint:m({kind:"method-call",identity:o}),title:`${o} (${a}ms)${t==="error"?" \u2717":""}`,message:s instanceof Error?s.message:void 0,raw:{kind:"span",span:{name:o,flowId:n?.flowId,requestId:n?.requestId,startTime:u,endTime:Date.now(),durationMs:a,status:t}}};r.emit(I)},"emitSpan"),b=i(()=>{n&&(n.dbCallCount=(n.dbCallCount??0)+1),r.emit({id:y(),sessionId:r.sessionId,timestamp:Date.now(),source:"db",category:"db",severity:"info",context:{sessionId:r.sessionId,flowId:n?.flowId,requestId:n?.requestId},fingerprint:m({kind:"db-query",identity:o}),title:`query ${o}`,raw:{kind:"db-query",query:{signature:o}}})},"emitDbQuery"),g=i(()=>{if(p||!n)return;const t=(n.dbCallCount??0)-q,s=(n.redisCallCount??0)-k,a=(n.externalCallCount??0)-D;if(t<3&&s<3&&a<3)return;const I=Date.now()-u,c=[];t>=3&&c.push(`${t} DB calls`),s>=3&&c.push(`${s} redis calls`),a>=3&&c.push(`${a} external calls`),r.emit({id:y(),sessionId:r.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:"warning",context:{sessionId:r.sessionId,flowId:n.flowId,requestId:n.requestId},fingerprint:m({kind:"loop",identity:o}),title:`loop in ${o} (${c.join(", ")})`,raw:{kind:"loop",loop:{iterations:Math.max(t,s,a),durationMs:I,startedAt:u,dbCallsInsideLoop:t,redisCallsInsideLoop:s,externalCallsInsideLoop:a,awaitedOperationsInsideLoop:t+s+a}}})},"emitLoopIfNeeded"),x=i(()=>{p&&b(),C("ok"),g()},"onOk"),h=i(t=>{p&&b(),C("error",t),g()},"onErr");try{const t=e.apply(this,f);return t instanceof Promise?t.then(s=>(x(),s),s=>{throw h(s),s}):(x(),t)}catch(t){throw h(t),t}},"wrapped");return w[LENSMCP_TRACED]=!0,w}d(traceWrap,"traceWrap"),i(traceWrap,"traceWrap");
1
+ "use strict";var D=Object.defineProperty;var d=(e,r)=>D(e,"name",{value:r,configurable:!0});var $=Object.defineProperty,l=d((e,r)=>$(e,"name",{value:r,configurable:!0}),"d"),E=Object.defineProperty,i=l((e,r)=>E(e,"name",{value:r,configurable:!0}),"i");import{fingerprint as y,ulid as w}from"@lensmcp/core";import{currentLensmcpContext as j}from"./context.js";import{activeOptions as O}from"./state.js";export const LENSMCP_TRACED=Symbol.for("@lensmcp/nest-instrumentation/traced"),LENSMCP_IGNORE=Symbol.for("@lensmcp/nest-instrumentation/ignore");export function LensmcpIgnore(){return((e,r)=>{if(r===void 0)e[LENSMCP_IGNORE]=!0;else{const c=e[r];typeof c=="function"&&(c[LENSMCP_IGNORE]=!0)}})}d(LensmcpIgnore,"LensmcpIgnore"),l(LensmcpIgnore,"LensmcpIgnore"),i(LensmcpIgnore,"LensmcpIgnore");export function isTraced(e){return typeof e=="function"&&!!e[LENSMCP_TRACED]}d(isTraced,"isTraced"),l(isTraced,"isTraced"),i(isTraced,"isTraced");export function isIgnored(e){return!!e&&(typeof e=="function"||typeof e=="object")&&!!e[LENSMCP_IGNORE]}d(isIgnored,"isIgnored"),l(isIgnored,"isIgnored"),i(isIgnored,"isIgnored");export function traceWrap(e,r,c={}){if(isTraced(e))return e;const I=c.db??!1,C=i(function(...f){let o;try{o=O()}catch{return e.apply(this,f)}if(!o.trace.services)return e.apply(this,f);const u=Date.now(),n=j(),v=n?.dbCallCount??0,L=n?.redisCallCount??0,k=n?.externalCallCount??0,b=i((t,s)=>{const a=Date.now()-u,m={id:w(),sessionId:o.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:t==="error"?"error":"info",context:{sessionId:o.sessionId,flowId:n?.flowId,requestId:n?.requestId},fingerprint:y({kind:"method-call",identity:r}),title:`${r} (${a}ms)${t==="error"?" \u2717":""}`,message:s instanceof Error?s.message:void 0,raw:{kind:"span",span:{name:r,flowId:n?.flowId,requestId:n?.requestId,startTime:u,endTime:Date.now(),durationMs:a,status:t}}};o.emit(m)},"emitSpan"),g=i(()=>{n&&(n.dbCallCount=(n.dbCallCount??0)+1),o.emit({id:w(),sessionId:o.sessionId,timestamp:Date.now(),source:"db",category:"db",severity:"info",context:{sessionId:o.sessionId,flowId:n?.flowId,requestId:n?.requestId},fingerprint:y({kind:"db-query",identity:r}),title:`query ${r}`,raw:{kind:"db-query",query:{signature:r}}})},"emitDbQuery"),x=i(()=>{if(I||!n)return;const t=(n.dbCallCount??0)-v,s=(n.redisCallCount??0)-L,a=(n.externalCallCount??0)-k;if(t<3&&s<3&&a<3)return;const m=Date.now()-u,p=[];t>=3&&p.push(`${t} DB calls`),s>=3&&p.push(`${s} redis calls`),a>=3&&p.push(`${a} external calls`),o.emit({id:w(),sessionId:o.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:"warning",context:{sessionId:o.sessionId,flowId:n.flowId,requestId:n.requestId},fingerprint:y({kind:"loop",identity:r}),title:`loop in ${r} (${p.join(", ")})`,raw:{kind:"loop",loop:{iterations:Math.max(t,s,a),durationMs:m,startedAt:u,dbCallsInsideLoop:t,redisCallsInsideLoop:s,externalCallsInsideLoop:a,awaitedOperationsInsideLoop:t+s+a}}})},"emitLoopIfNeeded"),h=i(()=>{I&&g(),b("ok"),x()},"onOk"),q=i(t=>{I&&g(),b("error",t),x()},"onErr");try{const t=e.apply(this,f);return t instanceof Promise?t.then(s=>(h(),s),s=>{throw q(s),s}):(h(),t)}catch(t){throw q(t),t}},"wrapped");return C[LENSMCP_TRACED]=!0,C}d(traceWrap,"traceWrap"),l(traceWrap,"traceWrap"),i(traceWrap,"traceWrap");
@@ -1 +1 @@
1
- "use strict";var n=Object.defineProperty;var r=(e,t)=>n(e,"name",{value:t,configurable:!0});var i=Object.defineProperty,a=r((e,t)=>i(e,"name",{value:t,configurable:!0}),"m");import{__decorate as l}from"tslib";import{Module as u}from"@nestjs/common";import{NestFactory as d}from"@nestjs/core";import{LensmcpModule as f}from"./lensmcp.module.js";export async function createLensmcpNestApp(e,t={}){const{nestOptions:p,projectName:c,...s}=t,m=f.forRoot({projectName:c??process.env.LENSMCP_PROJECT??"app",...s,trace:{autoInstrumentMethods:!0,...s.trace},memory:{mode:"light",scope:"all",...s.memory}});let o=class{static{r(this,"e")}static{a(this,"LensmcpRootModule")}};return o=l([u({imports:[m,e]})],o),o[Symbol.for("lensmcp.wrappedRoot")]=!0,d.create(o,p)}r(createLensmcpNestApp,"createLensmcpNestApp"),a(createLensmcpNestApp,"createLensmcpNestApp");
1
+ "use strict";var i=Object.defineProperty;var r=(e,t)=>i(e,"name",{value:t,configurable:!0});var l=Object.defineProperty,a=r((e,t)=>l(e,"name",{value:t,configurable:!0}),"r"),u=Object.defineProperty,c=a((e,t)=>u(e,"name",{value:t,configurable:!0}),"m");import{__decorate as f}from"tslib";import{Module as d}from"@nestjs/common";import{NestFactory as y}from"@nestjs/core";import{LensmcpModule as N}from"./lensmcp.module.js";export async function createLensmcpNestApp(e,t={}){const{nestOptions:p,projectName:m,...s}=t,n=N.forRoot({projectName:m??process.env.LENSMCP_PROJECT??"app",...s,trace:{autoInstrumentMethods:!0,...s.trace},memory:{mode:"light",scope:"all",...s.memory}});let o=class{static{r(this,"o")}static{a(this,"e")}static{c(this,"LensmcpRootModule")}};return o=f([d({imports:[n,e]})],o),o[Symbol.for("lensmcp.wrappedRoot")]=!0,y.create(o,p)}r(createLensmcpNestApp,"createLensmcpNestApp"),a(createLensmcpNestApp,"createLensmcpNestApp"),c(createLensmcpNestApp,"createLensmcpNestApp");
@@ -1 +1 @@
1
- "use strict";var n=Object.defineProperty;var t=(r,e)=>n(r,"name",{value:e,configurable:!0});var a=Object.defineProperty,m=t((r,e)=>a(r,"name",{value:e,configurable:!0}),"t"),s;import{__decorate as c}from"tslib";import{Module as d}from"@nestjs/common";import{APP_INTERCEPTOR as p}from"@nestjs/core";import{configureMemoryTracker as f}from"@lensmcp/memory-tracker";import{TraceInterceptor as u}from"./trace-interceptor.js";import{LensmcpProviderTracker as l}from"./provider-tracker.js";import{setActiveOptions as I}from"./state.js";import{currentLensmcpContext as v}from"./context.js";let i=s=class{static{t(this,"s")}static{m(this,"LensmcpModule")}static forRoot(r){const e=I(r);return e.memory.mode!=="off"&&f({sessionId:e.sessionId,sink:e.emit,contextGetter:m(()=>{const o=v();if(o)return{sessionId:o.sessionId,flowId:o.flowId,requestId:o.requestId,originNodeId:o.originNodeId}},"contextGetter")}),{module:s,providers:[{provide:p,useClass:u},l],exports:[],global:!0}}};i=s=c([d({})],i);export{i as LensmcpModule};
1
+ "use strict";var n=Object.defineProperty;var t=(o,e)=>n(o,"name",{value:e,configurable:!0});var c=Object.defineProperty,a=t((o,e)=>c(o,"name",{value:e,configurable:!0}),"t"),d=Object.defineProperty,m=a((o,e)=>d(o,"name",{value:e,configurable:!0}),"t"),s;import{__decorate as p}from"tslib";import{Module as f}from"@nestjs/common";import{APP_INTERCEPTOR as u}from"@nestjs/core";import{configureMemoryTracker as l}from"@lensmcp/memory-tracker";import{TraceInterceptor as I}from"./trace-interceptor.js";import{LensmcpProviderTracker as v}from"./provider-tracker.js";import{setActiveOptions as g}from"./state.js";import{currentLensmcpContext as P}from"./context.js";let i=s=class{static{t(this,"s")}static{a(this,"s")}static{m(this,"LensmcpModule")}static forRoot(o){const e=g(o);return e.memory.mode!=="off"&&l({sessionId:e.sessionId,sink:e.emit,contextGetter:m(()=>{const r=P();if(r)return{sessionId:r.sessionId,flowId:r.flowId,requestId:r.requestId,originNodeId:r.originNodeId}},"contextGetter")}),{module:s,providers:[{provide:u,useClass:I},v],exports:[],global:!0}}};i=s=p([f({})],i);export{i as LensmcpModule};
package/lib/next-hop.js CHANGED
@@ -1 +1 @@
1
- "use strict";var p=Object.defineProperty;var n=(r,e)=>p(r,"name",{value:e,configurable:!0});var s=Object.defineProperty,u=n((r,e)=>s(r,"name",{value:e,configurable:!0}),"o");import{currentLensmcpContext as c}from"./context.js";export function nextHopHeaders(r={}){const e=c();if(!e)return{};const o=r.requestHeader??"x-request-id",d=r.parentHeader??"x-lensmcp-parent-request-id",a=r.flowHeader??"x-lensmcp-flow-id",i=r.originHeader??"x-lensmcp-origin-node-id",t={};return e.requestId&&(e.hopCount=(e.hopCount??0)+1,t[o]=`${e.requestId}.${e.hopCount}`,t[d]=e.requestId),e.flowId&&(t[a]=e.flowId),e.originNodeId&&(t[i]=e.originNodeId),e.traceparent&&(t.traceparent=e.traceparent),t}n(nextHopHeaders,"nextHopHeaders"),u(nextHopHeaders,"nextHopHeaders");
1
+ "use strict";var s=Object.defineProperty;var n=(r,e)=>s(r,"name",{value:e,configurable:!0});var u=Object.defineProperty,o=n((r,e)=>u(r,"name",{value:e,configurable:!0}),"n"),c=Object.defineProperty,f=o((r,e)=>c(r,"name",{value:e,configurable:!0}),"o");import{currentLensmcpContext as l}from"./context.js";export function nextHopHeaders(r={}){const e=l();if(!e)return{};const a=r.requestHeader??"x-request-id",d=r.parentHeader??"x-lensmcp-parent-request-id",i=r.flowHeader??"x-lensmcp-flow-id",p=r.originHeader??"x-lensmcp-origin-node-id",t={};return e.requestId&&(e.hopCount=(e.hopCount??0)+1,t[a]=`${e.requestId}.${e.hopCount}`,t[d]=e.requestId),e.flowId&&(t[i]=e.flowId),e.originNodeId&&(t[p]=e.originNodeId),e.traceparent&&(t.traceparent=e.traceparent),t}n(nextHopHeaders,"nextHopHeaders"),o(nextHopHeaders,"nextHopHeaders"),f(nextHopHeaders,"nextHopHeaders");
@@ -1 +1 @@
1
- "use strict";var N=Object.defineProperty;var f=(e,t)=>N(e,"name",{value:t,configurable:!0});var T=Object.defineProperty,u=f((e,t)=>T(e,"name",{value:t,configurable:!0}),"l");import{__decorate as k,__metadata as D}from"tslib";import{Injectable as L}from"@nestjs/common";import{ModuleRef as C}from"@nestjs/core";import{fingerprint as _,ulid as B}from"@lensmcp/core";import{trackContainer as Q}from"@lensmcp/memory-tracker";import{activeOptions as g,currentGeneration as O}from"./state.js";import{readTraceProvider as G}from"./trace-provider.js";import{traceWrap as S,isTraced as w,isIgnored as v}from"./instrument.js";const P=new Set(["constructor","onModuleInit","onApplicationBootstrap","onModuleDestroy","beforeApplicationShutdown","onApplicationShutdown"]),U={DataSource:new Set(["findMetadata","getMetadata","hasMetadata","getRepository","getTreeRepository","getMongoRepository","createQueryBuilder","createEntityManager","createQueryRunner","defaultReplicationModeForReads"]),EntityManager:new Set(["getRepository","getTreeRepository","getCustomRepository","createQueryBuilder"]),Reflector:new Set(["get","getAll","getAllAndOverride","getAllAndMerge"])};function h(e,t){let o=!0;try{o=g().trace.suppressNoiseMethods}catch{}return o?U[e]?.has(t)??!1:!1}f(h,"$"),u(h,"isNoiseMethod");const b=/^(_|Object|String|Number|Array|Promise|Function|RegExp|Map|Set)$/,j=Symbol.for("@lensmcp/nest-instrumentation/proto-wrapped");let I=class{static{f(this,"I")}static{u(this,"LensmcpProviderTracker")}constructor(e){this.moduleRef=e,this.active=new Map}onApplicationBootstrap(){const e=g(),t=O(),o=this.moduleRef.container;if(o?.getModules)for(const[,n]of o.getModules()){const c=n?.controllers;c&&typeof c.forEach=="function"&&c.forEach(r=>{const s=r?.instance;if(!s||typeof s!="object")return;const p=s.constructor,a=p?.name;if(!a||b.test(a))return;const l=`nest:controller:${a}`,d=`${a}#gen${t}#${M(`${a}:${t}`)}`;this.active.set(l,d),e.emit(y({logicalId:l,instanceId:d,generation:t,module:n?.metatype?.name,scope:m(r?.scope),lifecycle:"active"})),e.trace.autoInstrumentMethods&&p&&$(s,p,a)});const i=n?.providers;!i||typeof i.forEach!="function"||i.forEach(r=>{const s=r?.instance;if(m(r?.scope)!=="SINGLETON"){this.trackScopedProvider(r,n,t,e);return}if(!s||typeof s!="object")return;const p=s.constructor,a=p?.name;if(!a||b.test(a))return;const l=`nest:provider:${a}`,d=`${a}#gen${t}#${M(`${a}:${t}`)}`;if(this.active.set(l,d),e.emit(y({logicalId:l,instanceId:d,generation:t,module:n?.metatype?.name,scope:m(r?.scope),lifecycle:"active"})),e.memory.mode!=="off"){const A=G(p);(e.memory.scope==="all"||(A?.memory??!1))&&E(s,d)}e.trace.autoInstrumentMethods&&p&&$(s,p,a)})}}onModuleDestroy(){const e=g(),t=O();for(const[o,n]of this.active)e.emit(y({logicalId:o,instanceId:n,generation:t,lifecycle:"disposed"}))}trackScopedProvider(e,t,o,n){let c;if(typeof e?.metatype=="function"?c=e.metatype:e?.instance&&typeof e.instance=="object"&&(c=e.instance.constructor),typeof c!="function")return;const i=c;if(!i.prototype)return;const r=i.name;if(!r||b.test(r))return;const s=m(e?.scope),p=`nest:provider:${r}`,a=`${r}#gen${o}#${s.toLowerCase()}`;this.active.has(p)||this.active.set(p,a),n.emit(y({logicalId:p,instanceId:a,generation:o,module:t?.metatype?.name,scope:s,lifecycle:"active"})),n.trace.autoInstrumentMethods&&R(i,r)}};I=k([L(),D("design:paramtypes",[C])],I);export{I as LensmcpProviderTracker};function m(e){return e===1||e==="TRANSIENT"?"TRANSIENT":e===2||e==="REQUEST"?"REQUEST":"SINGLETON"}f(m,"g"),u(m,"scopeLabel");function y(e){const t=g();return{id:B(),sessionId:t.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:"info",context:{sessionId:t.sessionId},fingerprint:_({kind:"nest-provider",identity:e.logicalId}),title:`Nest provider ${e.logicalId} ${e.lifecycle}`,raw:{kind:"singleton-instance",provider:{...e,createdAt:Date.now()}}}}f(y,"h"),u(y,"makeProviderEvent");function M(e){let t=5381;for(let o=0;o<e.length;o++)t=(t<<5)+t+e.charCodeAt(o)|0;return(t>>>0).toString(16).slice(0,6)}f(M,"P"),u(M,"shortHash");function E(e,t){for(const o of Object.keys(e)){const n=e[o];(n instanceof Map||n instanceof Set||Array.isArray(n))&&Q({ownerInstanceId:t,fieldName:o,container:n})}}f(E,"Q"),u(E,"trackProviderContainers");function $(e,t,o){if(v(t))return;const n=Object.getPrototypeOf(e);if(!(!n||n===Object.prototype))for(const c of Object.getOwnPropertyNames(n)){if(P.has(c)||h(o,c))continue;const i=Object.getOwnPropertyDescriptor(n,c);if(!i||typeof i.value!="function"||i.get||i.set)continue;const r=i.value;if(w(r)||v(r))continue;const s=S(r,`${o}.${c}`);try{Object.defineProperty(e,c,{value:s,writable:!0,enumerable:!1,configurable:!0})}catch{}}}f($,"N"),u($,"autoInstrumentProviderMethods");function R(e,t){if(v(e))return;const o=e.prototype;if(!o||o===Object.prototype)return;const n=o;if(n[j])return;const c=[];for(const i of Object.getOwnPropertyNames(o)){if(P.has(i)||h(t,i))continue;const r=Object.getOwnPropertyDescriptor(o,i);if(!r||typeof r.value!="function"||r.get||r.set)continue;const s=r.value;if(w(s)||v(s))continue;const p=S(s,`${t}.${i}`);try{Object.defineProperty(o,i,{value:p,writable:!0,enumerable:!1,configurable:!0}),c.push(i)}catch{}}n[j]=!0,process.env.LENSMCP_DEBUG&&console.error(`[lensmcp] proto-wrapped ${t}: [${c.join(", ")}]`)}f(R,"U"),u(R,"autoInstrumentPrototypeMethods");
1
+ "use strict";var T=Object.defineProperty;var f=(e,t)=>T(e,"name",{value:t,configurable:!0});var k=Object.defineProperty,u=f((e,t)=>k(e,"name",{value:t,configurable:!0}),"f"),D=Object.defineProperty,l=u((e,t)=>D(e,"name",{value:t,configurable:!0}),"l");import{__decorate as L,__metadata as C}from"tslib";import{Injectable as Q}from"@nestjs/common";import{ModuleRef as _}from"@nestjs/core";import{fingerprint as B,ulid as G}from"@lensmcp/core";import{trackContainer as U}from"@lensmcp/memory-tracker";import{activeOptions as v,currentGeneration as w}from"./state.js";import{readTraceProvider as x}from"./trace-provider.js";import{traceWrap as j,isTraced as E,isIgnored as h}from"./instrument.js";const R=new Set(["constructor","onModuleInit","onApplicationBootstrap","onModuleDestroy","beforeApplicationShutdown","onApplicationShutdown"]),F={DataSource:new Set(["findMetadata","getMetadata","hasMetadata","getRepository","getTreeRepository","getMongoRepository","createQueryBuilder","createEntityManager","createQueryRunner","defaultReplicationModeForReads"]),EntityManager:new Set(["getRepository","getTreeRepository","getCustomRepository","createQueryBuilder"]),Reflector:new Set(["get","getAll","getAllAndOverride","getAllAndMerge"])};function b(e,t){let o=!0;try{o=v().trace.suppressNoiseMethods}catch{}return o?F[e]?.has(t)??!1:!1}f(b,"h"),u(b,"$"),l(b,"isNoiseMethod");const M=/^(_|Object|String|Number|Array|Promise|Function|RegExp|Map|Set)$/,N=Symbol.for("@lensmcp/nest-instrumentation/proto-wrapped");let O=class{static{f(this,"I")}static{u(this,"I")}static{l(this,"LensmcpProviderTracker")}constructor(e){this.moduleRef=e,this.active=new Map}onApplicationBootstrap(){const e=v(),t=w(),o=this.moduleRef.container;if(o?.getModules)for(const[,n]of o.getModules()){const s=n?.controllers;s&&typeof s.forEach=="function"&&s.forEach(r=>{const c=r?.instance;if(!c||typeof c!="object")return;const p=c.constructor,a=p?.name;if(!a||M.test(a))return;const g=`nest:controller:${a}`,d=`${a}#gen${t}#${I(`${a}:${t}`)}`;this.active.set(g,d),e.emit(y({logicalId:g,instanceId:d,generation:t,module:n?.metatype?.name,scope:m(r?.scope),lifecycle:"active"})),e.trace.autoInstrumentMethods&&p&&$(c,p,a)});const i=n?.providers;!i||typeof i.forEach!="function"||i.forEach(r=>{const c=r?.instance;if(m(r?.scope)!=="SINGLETON"){this.trackScopedProvider(r,n,t,e);return}if(!c||typeof c!="object")return;const p=c.constructor,a=p?.name;if(!a||M.test(a))return;const g=`nest:provider:${a}`,d=`${a}#gen${t}#${I(`${a}:${t}`)}`;if(this.active.set(g,d),e.emit(y({logicalId:g,instanceId:d,generation:t,module:n?.metatype?.name,scope:m(r?.scope),lifecycle:"active"})),e.memory.mode!=="off"){const A=x(p);(e.memory.scope==="all"||(A?.memory??!1))&&P(c,d)}e.trace.autoInstrumentMethods&&p&&$(c,p,a)})}}onModuleDestroy(){const e=v(),t=w();for(const[o,n]of this.active)e.emit(y({logicalId:o,instanceId:n,generation:t,lifecycle:"disposed"}))}trackScopedProvider(e,t,o,n){let s;if(typeof e?.metatype=="function"?s=e.metatype:e?.instance&&typeof e.instance=="object"&&(s=e.instance.constructor),typeof s!="function")return;const i=s;if(!i.prototype)return;const r=i.name;if(!r||M.test(r))return;const c=m(e?.scope),p=`nest:provider:${r}`,a=`${r}#gen${o}#${c.toLowerCase()}`;this.active.has(p)||this.active.set(p,a),n.emit(y({logicalId:p,instanceId:a,generation:o,module:t?.metatype?.name,scope:c,lifecycle:"active"})),n.trace.autoInstrumentMethods&&S(i,r)}};O=L([Q(),C("design:paramtypes",[_])],O);export{O as LensmcpProviderTracker};function m(e){return e===1||e==="TRANSIENT"?"TRANSIENT":e===2||e==="REQUEST"?"REQUEST":"SINGLETON"}f(m,"m"),u(m,"g"),l(m,"scopeLabel");function y(e){const t=v();return{id:G(),sessionId:t.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:"info",context:{sessionId:t.sessionId},fingerprint:B({kind:"nest-provider",identity:e.logicalId}),title:`Nest provider ${e.logicalId} ${e.lifecycle}`,raw:{kind:"singleton-instance",provider:{...e,createdAt:Date.now()}}}}f(y,"y"),u(y,"h"),l(y,"makeProviderEvent");function I(e){let t=5381;for(let o=0;o<e.length;o++)t=(t<<5)+t+e.charCodeAt(o)|0;return(t>>>0).toString(16).slice(0,6)}f(I,"M"),u(I,"P"),l(I,"shortHash");function P(e,t){for(const o of Object.keys(e)){const n=e[o];(n instanceof Map||n instanceof Set||Array.isArray(n))&&U({ownerInstanceId:t,fieldName:o,container:n})}}f(P,"E"),u(P,"Q"),l(P,"trackProviderContainers");function $(e,t,o){if(h(t))return;const n=Object.getPrototypeOf(e);if(!(!n||n===Object.prototype))for(const s of Object.getOwnPropertyNames(n)){if(R.has(s)||b(o,s))continue;const i=Object.getOwnPropertyDescriptor(n,s);if(!i||typeof i.value!="function"||i.get||i.set)continue;const r=i.value;if(E(r)||h(r))continue;const c=j(r,`${o}.${s}`);try{Object.defineProperty(e,s,{value:c,writable:!0,enumerable:!1,configurable:!0})}catch{}}}f($,"$"),u($,"N"),l($,"autoInstrumentProviderMethods");function S(e,t){if(h(e))return;const o=e.prototype;if(!o||o===Object.prototype)return;const n=o;if(n[N])return;const s=[];for(const i of Object.getOwnPropertyNames(o)){if(R.has(i)||b(t,i))continue;const r=Object.getOwnPropertyDescriptor(o,i);if(!r||typeof r.value!="function"||r.get||r.set)continue;const c=r.value;if(E(c)||h(c))continue;const p=j(c,`${t}.${i}`);try{Object.defineProperty(o,i,{value:p,writable:!0,enumerable:!1,configurable:!0}),s.push(i)}catch{}}n[N]=!0,process.env.LENSMCP_DEBUG&&console.error(`[lensmcp] proto-wrapped ${t}: [${s.join(", ")}]`)}f(S,"R"),u(S,"U"),l(S,"autoInstrumentPrototypeMethods");
package/lib/state.js CHANGED
@@ -1 +1 @@
1
- "use strict";var i=Object.defineProperty;var r=(e,t)=>i(e,"name",{value:t,configurable:!0});var c=Object.defineProperty,o=r((e,t)=>c(e,"name",{value:t,configurable:!0}),"t");import{ulid as u}from"@lensmcp/core";import{defaultEventSink as a}from"./event-sink.js";let s,n=0;export function setActiveOptions(e){const t={projectName:e.projectName,sessionId:e.sessionId??process.env.LENSMCP_SESSION_ID??u(),emit:e.emit??a(),trace:{requests:e.trace?.requests??!0,guards:e.trace?.guards??!0,controllers:e.trace?.controllers??!0,services:e.trace?.services??!0,db:e.trace?.db??!1,redis:e.trace?.redis??!1,queues:e.trace?.queues??!1,autoInstrumentMethods:e.trace?.autoInstrumentMethods??!1,suppressNoiseMethods:e.trace?.suppressNoiseMethods??!0},memory:{mode:e.memory?.mode??"off",scope:e.memory?.scope??"tagged"}};return s=t,n+=1,t}r(setActiveOptions,"setActiveOptions"),o(setActiveOptions,"setActiveOptions");export function activeOptions(){if(!s)throw new Error("@lensmcp/nest-instrumentation: LensmcpModule.forRoot(...) has not been registered. Did you forget to add it to your AppModule?");return s}r(activeOptions,"activeOptions"),o(activeOptions,"activeOptions");export function currentGeneration(){return n}r(currentGeneration,"currentGeneration"),o(currentGeneration,"currentGeneration");
1
+ "use strict";var c=Object.defineProperty;var r=(e,t)=>c(e,"name",{value:t,configurable:!0});var a=Object.defineProperty,o=r((e,t)=>a(e,"name",{value:t,configurable:!0}),"r"),u=Object.defineProperty,s=o((e,t)=>u(e,"name",{value:t,configurable:!0}),"t");import{ulid as p}from"@lensmcp/core";import{defaultEventSink as d}from"./event-sink.js";let n,i=0;export function setActiveOptions(e){const t={projectName:e.projectName,sessionId:e.sessionId??process.env.LENSMCP_SESSION_ID??p(),emit:e.emit??d(),trace:{requests:e.trace?.requests??!0,guards:e.trace?.guards??!0,controllers:e.trace?.controllers??!0,services:e.trace?.services??!0,db:e.trace?.db??!1,redis:e.trace?.redis??!1,queues:e.trace?.queues??!1,autoInstrumentMethods:e.trace?.autoInstrumentMethods??!1,suppressNoiseMethods:e.trace?.suppressNoiseMethods??!0},memory:{mode:e.memory?.mode??"off",scope:e.memory?.scope??"tagged"}};return n=t,i+=1,t}r(setActiveOptions,"setActiveOptions"),o(setActiveOptions,"setActiveOptions"),s(setActiveOptions,"setActiveOptions");export function activeOptions(){if(!n)throw new Error("@lensmcp/nest-instrumentation: LensmcpModule.forRoot(...) has not been registered. Did you forget to add it to your AppModule?");return n}r(activeOptions,"activeOptions"),o(activeOptions,"activeOptions"),s(activeOptions,"activeOptions");export function currentGeneration(){return i}r(currentGeneration,"currentGeneration"),o(currentGeneration,"currentGeneration"),s(currentGeneration,"currentGeneration");
@@ -1,3 +1,3 @@
1
- "use strict";var _=Object.defineProperty;var c=(t,e)=>_(t,"name",{value:e,configurable:!0});var H=Object.defineProperty,i=c((t,e)=>H(t,"name",{value:e,configurable:!0}),"a");import{__decorate as P}from"tslib";import{Injectable as F}from"@nestjs/common";import{Observable as D}from"rxjs";import{catchError as G,tap as L}from"rxjs/operators";import{fingerprint as N,ulid as g}from"@lensmcp/core";import{activeMemoryOptions as U,onFlowStart as X,onFlowSettled as z}from"@lensmcp/memory-tracker";import{LENSMCP_CONTEXT_STORAGE as B}from"./context.js";import{activeOptions as C}from"./state.js";let b=class{static{c(this,"C")}static{i(this,"TraceInterceptor")}intercept(t,e){const r=C();if(!r.trace.requests)return e.handle();const d=t.switchToHttp(),s=d.getRequest(),o=d.getResponse(),a=l(s.headers?.["x-request-id"])??g(),n={sessionId:r.sessionId,requestId:a,parentRequestId:l(s.headers?.["x-lensmcp-parent-request-id"]),flowId:l(s.headers?.["x-lensmcp-flow-id"]),originNodeId:l(s.headers?.["x-lensmcp-origin-node-id"]),traceparent:l(s.headers?.traceparent),dbCallCount:0},u=(s.method??"GET").toUpperCase(),m=s.route?.path??s.url??"<unknown>",f=t.getClass?.()?.name,I=t.getHandler?.()?.name,w=Date.now(),$=r.memory.mode!=="off";$&&X(a);const j=i(()=>{if(!$)return;const q=U()?.settleMs??1e3;setTimeout(()=>z(a,n.flowId),q).unref?.()},"settleAndCheck");return new D(q=>{let T;return B.run(n,()=>{T=e.handle().pipe(L({next:i(p=>q.next(p),"next"),complete:i(()=>{y(r.projectName,n,u,m,o.statusCode??200,w),v(n,f,I,w,"ok"),j(),q.complete()},"complete")}),G(p=>{const x=E(p);if(x!==void 0||typeof o.once!="function")y(r.projectName,n,u,m,x??k(o),w,p);else{let R=!1;const S=i(A=>{if(R)return;R=!0;const O=A&&o.statusCode&&o.statusCode>=400?o.statusCode:k(o);y(r.projectName,n,u,m,O,w,p)},"settle");o.once("finish",()=>S(!0)),o.once("close",()=>S(!1))}return v(n,f,I,w,"error"),j(),q.error(p),new D})).subscribe()}),()=>T?.unsubscribe()})}};b=P([F()],b);export{b as TraceInterceptor};function E(t){const e=t;if(typeof e?.getStatus=="function")return e.getStatus();if(typeof e?.status=="number"&&e.status>=100)return e.status;if(typeof e?.statusCode=="number"&&e.statusCode>=100)return e.statusCode}c(E,"z"),i(E,"ownStatus");function k(t){return t.statusCode&&t.statusCode>=400?t.statusCode:500}c(k,"M"),i(k,"inferStatus");function l(t){if(typeof t=="string")return t;if(Array.isArray(t)&&typeof t[0]=="string")return t[0]}c(l,"w"),i(l,"stringHeader");function v(t,e,r,d,s){if(!e||!r)return;const o=C(),a=Date.now()-d,n=`${e}.${r}`,u={id:g(),sessionId:t.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:s==="error"?"error":"info",context:{sessionId:t.sessionId,flowId:t.flowId,requestId:t.requestId},fingerprint:N({kind:"method-call",identity:n}),title:`${n} (${a}ms)${s==="error"?" \u2717":""}`,raw:{kind:"span",span:{name:n,role:"controller",flowId:t.flowId,requestId:t.requestId,startTime:d,endTime:Date.now(),durationMs:a,status:s}}};h(u,C().projectName),o.emit(u)}c(v,"N"),i(v,"emitControllerSpan");function M(t){if(!(t instanceof Error))return{message:String(t)};const e=t.stack?t.stack.split(`
1
+ "use strict";var _=Object.defineProperty;var c=(t,e)=>_(t,"name",{value:e,configurable:!0});var H=Object.defineProperty,m=c((t,e)=>H(t,"name",{value:e,configurable:!0}),"c"),F=Object.defineProperty,i=m((t,e)=>F(t,"name",{value:e,configurable:!0}),"a");import{__decorate as G}from"tslib";import{Injectable as z}from"@nestjs/common";import{Observable as E}from"rxjs";import{catchError as B,tap as L}from"rxjs/operators";import{fingerprint as O,ulid as y}from"@lensmcp/core";import{activeMemoryOptions as U,onFlowStart as X,onFlowSettled as J}from"@lensmcp/memory-tracker";import{LENSMCP_CONTEXT_STORAGE as K}from"./context.js";import{activeOptions as v}from"./state.js";let $=class{static{c(this,"b")}static{m(this,"C")}static{i(this,"TraceInterceptor")}intercept(t,e){const r=v();if(!r.trace.requests)return e.handle();const d=t.switchToHttp(),s=d.getRequest(),n=d.getResponse(),a=f(s.headers?.["x-request-id"])??y(),o={sessionId:r.sessionId,requestId:a,parentRequestId:f(s.headers?.["x-lensmcp-parent-request-id"]),flowId:f(s.headers?.["x-lensmcp-flow-id"]),originNodeId:f(s.headers?.["x-lensmcp-origin-node-id"]),traceparent:f(s.headers?.traceparent),dbCallCount:0},u=(s.method??"GET").toUpperCase(),p=s.route?.path??s.url??"<unknown>",l=t.getClass?.()?.name,w=t.getHandler?.()?.name,g=Date.now(),T=r.memory.mode!=="off";T&&X(a);const R=i(()=>{if(!T)return;const q=U()?.settleMs??1e3;setTimeout(()=>J(a,o.flowId),q).unref?.()},"settleAndCheck");return new E(q=>{let N;return K.run(o,()=>{N=e.handle().pipe(L({next:i(I=>q.next(I),"next"),complete:i(()=>{C(r.projectName,o,u,p,n.statusCode??200,g),k(o,l,w,g,"ok"),R(),q.complete()},"complete")}),B(I=>{const S=j(I);if(S!==void 0||typeof n.once!="function")C(r.projectName,o,u,p,S??b(n),g,I);else{let D=!1;const M=i(A=>{if(D)return;D=!0;const P=A&&n.statusCode&&n.statusCode>=400?n.statusCode:b(n);C(r.projectName,o,u,p,P,g,I)},"settle");n.once("finish",()=>M(!0)),n.once("close",()=>M(!1))}return k(o,l,w,g,"error"),R(),q.error(I),new E})).subscribe()}),()=>N?.unsubscribe()})}};$=G([z()],$);export{$ as TraceInterceptor};function j(t){const e=t;if(typeof e?.getStatus=="function")return e.getStatus();if(typeof e?.status=="number"&&e.status>=100)return e.status;if(typeof e?.statusCode=="number"&&e.statusCode>=100)return e.statusCode}c(j,"E"),m(j,"z"),i(j,"ownStatus");function b(t){return t.statusCode&&t.statusCode>=400?t.statusCode:500}c(b,"k"),m(b,"M"),i(b,"inferStatus");function f(t){if(typeof t=="string")return t;if(Array.isArray(t)&&typeof t[0]=="string")return t[0]}c(f,"l"),m(f,"w"),i(f,"stringHeader");function k(t,e,r,d,s){if(!e||!r)return;const n=v(),a=Date.now()-d,o=`${e}.${r}`,u={id:y(),sessionId:t.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:s==="error"?"error":"info",context:{sessionId:t.sessionId,flowId:t.flowId,requestId:t.requestId},fingerprint:O({kind:"method-call",identity:o}),title:`${o} (${a}ms)${s==="error"?" \u2717":""}`,raw:{kind:"span",span:{name:o,role:"controller",flowId:t.flowId,requestId:t.requestId,startTime:d,endTime:Date.now(),durationMs:a,status:s}}};h(u,v().projectName),n.emit(u)}c(k,"v"),m(k,"N"),i(k,"emitControllerSpan");function x(t){if(!(t instanceof Error))return{message:String(t)};const e=t.stack?t.stack.split(`
2
2
  `).slice(0,30).join(`
3
- `):void 0;return{...t.name?{name:t.name}:{},message:t.message,...e?{stack:e}:{}}}c(M,"B"),i(M,"errorDetail");function h(t,e){if(!e)return;const r=t.raw;r&&r.project===void 0&&(r.project=e)}c(h,"h"),i(h,"stampProject");function y(t,e,r,d,s,o,a){const n=C(),u=Date.now()-o,m=s>=500||a!==void 0,f={id:g(),sessionId:e.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:m?"error":"info",context:{sessionId:e.sessionId,flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},originNodeId:e.originNodeId,traceparent:e.traceparent},fingerprint:N({kind:"server-request",identity:`${r}:${d}:${Math.floor(s/100)}xx`}),title:`${r} ${d} \u2192 ${s} (${u}ms)`,message:a instanceof Error?a.message:void 0,raw:{kind:"server-request",request:{method:r,route:d,status:s,durationMs:u,startedAt:o,endedAt:Date.now(),flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},...a?{error:M(a)}:{}}}},I={...f,id:g(),raw:{kind:"span",span:{name:`nest.request ${r} ${d}`,traceId:e.traceparent,flowId:e.flowId,requestId:e.requestId,startTime:o,endTime:Date.now(),durationMs:u,status:m?"error":"ok"}}};h(f,t),h(I,t),n.emit(f),n.emit(I)}c(y,"k"),i(y,"emitRequest");
3
+ `):void 0;return{...t.name?{name:t.name}:{},message:t.message,...e?{stack:e}:{}}}c(x,"M"),m(x,"B"),i(x,"errorDetail");function h(t,e){if(!e)return;const r=t.raw;r&&r.project===void 0&&(r.project=e)}c(h,"h"),m(h,"h"),i(h,"stampProject");function C(t,e,r,d,s,n,a){const o=v(),u=Date.now()-n,p=s>=500||a!==void 0,l={id:y(),sessionId:e.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:p?"error":"info",context:{sessionId:e.sessionId,flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},originNodeId:e.originNodeId,traceparent:e.traceparent},fingerprint:O({kind:"server-request",identity:`${r}:${d}:${Math.floor(s/100)}xx`}),title:`${r} ${d} \u2192 ${s} (${u}ms)`,message:a instanceof Error?a.message:void 0,raw:{kind:"server-request",request:{method:r,route:d,status:s,durationMs:u,startedAt:n,endedAt:Date.now(),flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},...a?{error:x(a)}:{}}}},w={...l,id:y(),raw:{kind:"span",span:{name:`nest.request ${r} ${d}`,traceId:e.traceparent,flowId:e.flowId,requestId:e.requestId,startTime:n,endTime:Date.now(),durationMs:u,status:p?"error":"ok"}}};h(l,t),h(w,t),o.emit(l),o.emit(w)}c(C,"y"),m(C,"k"),i(C,"emitRequest");
@@ -1 +1 @@
1
- "use strict";var s=Object.defineProperty;var n=(e,t)=>s(e,"name",{value:t,configurable:!0});var f=Object.defineProperty,m=n((e,t)=>f(e,"name",{value:t,configurable:!0}),"u");import{traceWrap as p}from"./instrument.js";export function TraceMethod(e){const t=typeof e=="string"?{name:e}:e??{};return function(o,c,r){const a=r.value;if(typeof a!="function")return r;const u=o.constructor?.name??"Anonymous",i=t.name??`${u}.${String(c)}`;return r.value=p(a,i,{db:t.db}),r}}n(TraceMethod,"TraceMethod"),m(TraceMethod,"TraceMethod");
1
+ "use strict";var s=Object.defineProperty;var r=(e,t)=>s(e,"name",{value:t,configurable:!0});var m=Object.defineProperty,a=r((e,t)=>m(e,"name",{value:t,configurable:!0}),"n"),p=Object.defineProperty,d=a((e,t)=>p(e,"name",{value:t,configurable:!0}),"u");import{traceWrap as v}from"./instrument.js";export function TraceMethod(e){const t=typeof e=="string"?{name:e}:e??{};return function(c,u,n){const o=n.value;if(typeof o!="function")return n;const i=c.constructor?.name??"Anonymous",f=t.name??`${i}.${String(u)}`;return n.value=v(o,f,{db:t.db}),n}}r(TraceMethod,"TraceMethod"),a(TraceMethod,"TraceMethod"),d(TraceMethod,"TraceMethod");
@@ -1 +1 @@
1
- "use strict";var c=Object.defineProperty;var o=(r,e)=>c(r,"name",{value:e,configurable:!0});var i=Object.defineProperty,t=o((r,e)=>i(r,"name",{value:e,configurable:!0}),"n");const n=Symbol.for("@lensmcp/nest-instrumentation/trace-provider");export function TraceProvider(r={}){return e=>{e[n]={memory:r.memory??!0}}}o(TraceProvider,"TraceProvider"),t(TraceProvider,"TraceProvider");export function readTraceProvider(r){if(!(!r||typeof r!="function"&&typeof r!="object"))return r[n]}o(readTraceProvider,"readTraceProvider"),t(readTraceProvider,"readTraceProvider");
1
+ "use strict";var c=Object.defineProperty;var o=(e,r)=>c(e,"name",{value:r,configurable:!0});var i=Object.defineProperty,t=o((e,r)=>i(e,"name",{value:r,configurable:!0}),"o"),d=Object.defineProperty,n=t((e,r)=>d(e,"name",{value:r,configurable:!0}),"n");const a=Symbol.for("@lensmcp/nest-instrumentation/trace-provider");export function TraceProvider(e={}){return r=>{r[a]={memory:e.memory??!0}}}o(TraceProvider,"TraceProvider"),t(TraceProvider,"TraceProvider"),n(TraceProvider,"TraceProvider");export function readTraceProvider(e){if(!(!e||typeof e!="function"&&typeof e!="object"))return e[a]}o(readTraceProvider,"readTraceProvider"),t(readTraceProvider,"readTraceProvider"),n(readTraceProvider,"readTraceProvider");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lensmcp/nest-instrumentation",
3
- "version": "1.23.9",
3
+ "version": "1.23.10",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "module": "./index.js",
@@ -14,9 +14,9 @@
14
14
  }
15
15
  },
16
16
  "dependencies": {
17
- "@lensmcp/core": "1.23.9",
18
- "@lensmcp/memory-tracker": "1.23.9",
19
- "@lensmcp/protocol-types": "1.23.9",
17
+ "@lensmcp/core": "1.23.10",
18
+ "@lensmcp/memory-tracker": "1.23.10",
19
+ "@lensmcp/protocol-types": "1.23.10",
20
20
  "tslib": "^2.3.0"
21
21
  },
22
22
  "peerDependencies": {