@lensmcp/nest-instrumentation 1.23.8 → 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 +1 -1
- package/lib/event-sink.js +3 -3
- package/lib/instrument.js +1 -1
- package/lib/lensmcp-app.js +1 -1
- package/lib/lensmcp.module.js +1 -1
- package/lib/next-hop.js +1 -1
- package/lib/provider-tracker.js +1 -1
- package/lib/state.js +1 -1
- package/lib/trace-interceptor.js +2 -2
- package/lib/trace-method.js +1 -1
- package/lib/trace-provider.js +1 -1
- package/package.json +4 -4
package/lib/context.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
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
|
|
2
|
-
`}catch{return}}
|
|
3
|
-
`);e.length>1e4;)e.shift();if(
|
|
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
|
|
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");
|
package/lib/lensmcp-app.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
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");
|
package/lib/lensmcp.module.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var t=(
|
|
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
|
|
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");
|
package/lib/provider-tracker.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
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
|
|
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");
|
package/lib/trace-interceptor.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var _=Object.defineProperty;var c=(t,e)=>_(t,"name",{value:e,configurable:!0});var H=Object.defineProperty,
|
|
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(
|
|
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");
|
package/lib/trace-method.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var s=Object.defineProperty;var
|
|
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");
|
package/lib/trace-provider.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var c=Object.defineProperty;var o=(r
|
|
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.
|
|
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.
|
|
18
|
-
"@lensmcp/memory-tracker": "1.23.
|
|
19
|
-
"@lensmcp/protocol-types": "1.23.
|
|
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": {
|