@lensmcp/nest-instrumentation 1.19.0 → 1.20.0
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/provider-tracker.js +1 -1
- package/lib/state.js +1 -1
- package/lib/trace-interceptor.js +1 -1
- 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(()=>{})};const e=process.env.LENSMCP_UDS;if(e)return
|
|
3
|
-
`);e.length>1e4;)e.shift();if(n&&n.writable){
|
|
1
|
+
"use strict";var v=Object.defineProperty;var c=(r,e)=>v(r,"name",{value:e,configurable:!0});var S=Object.defineProperty,u=c((r,e)=>S(r,"name",{value:e,configurable:!0}),"c"),m=Object.defineProperty,s=u((r,e)=>m(r,"name",{value:e,configurable:!0}),"s");import{createSocket as y}from"node:dgram";import{connect as d}from"node:net";import{appendFile as E}from"node:fs/promises";export function defaultEventSink(){const r=process.env.LENSMCP_EVENT_FILE;if(r)return t=>{E(r,JSON.stringify(t)+`
|
|
2
|
+
`).catch(()=>{})};const e=process.env.LENSMCP_UDS;if(e)return l(e);const n=process.env.LENSMCP_IPC_SOCKET;if(n){const[t,o]=n.split(":");if(t&&o){const f=Number(o),i=y("udp4");return i.unref(),a=>{try{const p=Buffer.from(JSON.stringify(a));i.send(p,f,t,()=>{})}catch{}}}}return t=>{(t.severity==="error"||t.severity==="fatal")&&console.warn(`[lensmcp] ${t.severity}: ${t.title}`)}}c(defaultEventSink,"defaultEventSink"),u(defaultEventSink,"defaultEventSink"),s(defaultEventSink,"defaultEventSink");export function inMemorySink(){const r=[];return{sink:s(e=>r.push(e),"sink"),events:r}}c(inMemorySink,"inMemorySink"),u(inMemorySink,"inMemorySink"),s(inMemorySink,"inMemorySink");function l(r){const e=[];let n=null,t=!1;const o=s(()=>{if(!(!n||!n.writable))for(;e.length>0;)n.write(e.shift())},"flush"),f=s(()=>{if(t||n)return;t=!0;const i=d(r);i.on("connect",()=>{t=!1,n=i,o()}),i.on("drain",o),i.on("error",()=>{t=!1,n=null}),i.on("close",()=>{n=null}),i.unref()},"open");return f(),i=>{for(e.push(JSON.stringify(i)+`
|
|
3
|
+
`);e.length>1e4;)e.shift();if(n&&n.writable){o();return}if(n){try{n.destroy()}catch{}n=null}f()}}c(l,"u"),u(l,"d"),s(l,"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/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 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var j=Object.defineProperty;var m=(e,t)=>j(e,"name",{value:t,configurable:!0});var E=Object.defineProperty,g=m((e,t)=>E(e,"name",{value:t,configurable:!0}),"m"),M=Object.defineProperty,u=g((e,t)=>M(e,"name",{value:t,configurable:!0}),"p");import{__decorate as N}from"tslib";import{Injectable as O}from"@nestjs/common";import{Observable as x}from"rxjs";import{catchError as A,tap as R}from"rxjs/operators";import{fingerprint as D,ulid as h}from"@lensmcp/core";import{activeMemoryOptions as _,onFlowStart as H,onFlowSettled as P}from"@lensmcp/memory-tracker";import{LENSMCP_CONTEXT_STORAGE as F}from"./context.js";import{activeOptions as b}from"./state.js";let v=class{static{m(this,"C")}static{g(this,"$")}static{u(this,"TraceInterceptor")}intercept(e,t){const s=b();if(!s.trace.requests)return t.handle();const n=e.switchToHttp(),r=n.getRequest(),a=n.getResponse(),i=p(r.headers?.["x-request-id"])??h(),o={sessionId:s.sessionId,requestId:i,flowId:p(r.headers?.["x-lensmcp-flow-id"]),originNodeId:p(r.headers?.["x-lensmcp-origin-node-id"]),traceparent:p(r.headers?.traceparent),dbCallCount:0},c=(r.method??"GET").toUpperCase(),f=r.route?.path??r.url??"<unknown>",l=e.getClass?.()?.name,q=e.getHandler?.()?.name,y=Date.now(),T=s.memory.mode!=="off";T&&H(i);const k=u(()=>{if(!T)return;const I=_()?.settleMs??1e3;setTimeout(()=>P(i),I).unref?.()},"settleAndCheck");return new x(I=>{F.run(o,()=>{t.handle().pipe(R({next:u(w=>I.next(w),"next"),complete:u(()=>{$(s.projectName,o,c,f,a.statusCode??200,y),C(o,l,q,y,"ok"),k(),I.complete()},"complete")}),A(w=>{const d=w,S=typeof d?.getStatus=="function"?d.getStatus():typeof d?.status=="number"&&d.status>=100?d.status:typeof d?.statusCode=="number"&&d.statusCode>=100?d.statusCode:a.statusCode&&a.statusCode>=400?a.statusCode:500;return $(s.projectName,o,c,f,S,y,w),C(o,l,q,y,"error"),k(),I.error(w),new x})).subscribe()})})}};v=N([O()],v);export{v as TraceInterceptor};function p(e){if(typeof e=="string")return e;if(Array.isArray(e)&&typeof e[0]=="string")return e[0]}m(p,"w"),g(p,"q"),u(p,"stringHeader");function C(e,t,s,n,r){if(!t||!s)return;const a=b(),i=Date.now()-n,o=`${t}.${s}`;a.emit({id:h(),sessionId:e.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:r==="error"?"error":"info",context:{sessionId:e.sessionId,flowId:e.flowId,requestId:e.requestId},fingerprint:D({kind:"method-call",identity:o}),title:`${o} (${i}ms)${r==="error"?" \u2717":""}`,raw:{kind:"span",span:{name:o,role:"controller",flowId:e.flowId,requestId:e.requestId,startTime:n,endTime:Date.now(),durationMs:i,status:r}}})}m(C,"$"),g(C,"E"),u(C,"emitControllerSpan");function $(e,t,s,n,r,a,i){const o=b(),c=Date.now()-a,f=r>=500||i!==void 0,l={id:h(),sessionId:t.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:f?"error":"info",context:{sessionId:t.sessionId,flowId:t.flowId,requestId:t.requestId,originNodeId:t.originNodeId,traceparent:t.traceparent},fingerprint:D({kind:"server-request",identity:`${s}:${n}:${Math.floor(r/100)}xx`}),title:`${s} ${n} \u2192 ${r} (${c}ms)`,message:i instanceof Error?i.message:void 0,raw:{kind:"server-request",request:{method:s,route:n,status:r,durationMs:c,startedAt:a,endedAt:Date.now(),flowId:t.flowId,requestId:t.requestId}}},q={...l,id:h(),raw:{kind:"span",span:{name:`nest.request ${s} ${n}`,traceId:t.traceparent,flowId:t.flowId,requestId:t.requestId,startTime:a,endTime:Date.now(),durationMs:c,status:f?"error":"ok"}}};o.emit(l),o.emit(q)}m($,"b"),g($,"S"),u($,"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.
|
|
3
|
+
"version": "1.20.0",
|
|
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.
|
|
18
|
-
"@lensmcp/memory-tracker": "1.
|
|
19
|
-
"@lensmcp/protocol-types": "1.
|
|
17
|
+
"@lensmcp/core": "1.20.0",
|
|
18
|
+
"@lensmcp/memory-tracker": "1.20.0",
|
|
19
|
+
"@lensmcp/protocol-types": "1.20.0",
|
|
20
20
|
"tslib": "^2.3.0"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|