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