@lensmcp/nest-instrumentation 1.25.5 → 1.25.6

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.
@@ -1,3 +1,3 @@
1
- "use strict";var Y=Object.defineProperty;var u=(t,e)=>Y(t,"name",{value:e,configurable:!0});var Z=Object.defineProperty,a=u((t,e)=>Z(t,"name",{value:e,configurable:!0}),"d");import{__decorate as V}from"tslib";import{Injectable as ee}from"@nestjs/common";import{Observable as G}from"rxjs";import{catchError as te,tap as re}from"rxjs/operators";import{fingerprint as k,headlessFlowId as se,headlessFlowsEnabled as oe,isProbePath as ne,requestFacts as ae,responseFacts as ie,shapeOf as L,ulid as h}from"@lensmcp/core";import{activeMemoryOptions as de,onFlowStart as ue,onFlowSettled as ce}from"@lensmcp/memory-tracker";import{LENSMCP_CONTEXT_STORAGE as fe}from"./context.js";import{attachContextEnd as pe}from"./context-end.js";import{activeOptions as v}from"./state.js";let j=class{static{u(this,"C")}static{a(this,"TraceInterceptor")}intercept(t,e){const s=v();if(!s.trace.requests)return e.handle();const d=t.switchToHttp(),r=d.getRequest(),o=d.getResponse(),n=w(r.headers?.["x-request-id"])??h(),c=w(r.headers?.["x-lensmcp-flow-id"]),f=w(r.headers?.["x-internal-token"])!==void 0,l=c??(!f&&oe()&&!ne(r.url)?se(n):void 0),i={sessionId:s.sessionId,requestId:n,parentRequestId:w(r.headers?.["x-lensmcp-parent-request-id"]),flowId:l,originNodeId:w(r.headers?.["x-lensmcp-origin-node-id"]),traceparent:w(r.headers?.traceparent),dbCallCount:0},p=(r.method??"GET").toUpperCase(),m=r.route?.path??r.url??"<unknown>",b=t.getClass?.()?.name,N=t.getHandler?.()?.name,q=Date.now();l&&!c&&X(i,p,m,q);const O=s.memory.mode!=="off";O&&ue(n);const D=a(()=>{if(!O)return;const I=de()?.settleMs??1e3;setTimeout(()=>ce(n,i.flowId),I).unref?.()},"settleAndCheck"),K=pe(i);let C;typeof o?.once=="function"&&me()&&o.once("finish",()=>U(s.projectName,i,p,m,r,o,C));let M=!1,E=typeof o?.once!="function";const P=a(()=>{M&&E&&K()},"endIfOver");if(!E){const I=a(()=>{E=!0,P()},"responseOut");o.once?.("finish",I),o.once?.("close",I)}return new G(I=>{let A;return fe.run(i,()=>{A=e.handle().pipe(re({next:a(g=>{C??={value:g},I.next(g)},"next"),complete:a(()=>{x(s.projectName,i,p,m,o.statusCode??200,q),S(i,b,N,q,"ok"),D(),I.complete()},"complete")}),te(g=>{const F=g?.getResponse?.();F!==void 0&&(C??={value:F});const H=R(g);if(H!==void 0||typeof o.once!="function")x(s.projectName,i,p,m,H??T(o),q,g);else{let _=!1;const B=a(Q=>{if(_)return;_=!0;const W=Q&&o.statusCode&&o.statusCode>=400?o.statusCode:T(o);x(s.projectName,i,p,m,W,q,g)},"settle");o.once("finish",()=>B(!0)),o.once("close",()=>B(!1))}return S(i,b,N,q,"error"),D(),I.error(g),new G})).subscribe()}),()=>{A?.unsubscribe(),M=!0,P()}})}};j=V([ee()],j);export{j as TraceInterceptor};const $=new Map,le=6e4,me=a(()=>process.env.LENSMCP_HTTP_SHAPES!=="0","shapesOn");function U(t,e,s,d,r,o,n){try{const c=o.statusCode??200,f=`${s} ${d} ${Math.floor(c/100)}`,l=Date.now();if(l-($.get(f)??0)<le)return;$.set(f,l),$.size>2e3&&$.delete($.keys().next().value);const i=r.headers??{},p=r.body!==void 0&&r.body!==null&&typeof r.body=="object"&&!Buffer.isBuffer(r.body)?L(r.body):void 0,m=n&&n.value!==void 0&&typeof n.value=="object"&&n.value!==null&&!Buffer.isBuffer(n.value)&&typeof n.value.pipe!="function"?L(n.value):void 0,b={id:h(),sessionId:e.sessionId,timestamp:l,source:"nestjs",category:"backend",severity:"info",context:{sessionId:e.sessionId,flowId:e.flowId,requestId:e.requestId},fingerprint:k({kind:"http-exchange",identity:f}),title:`${s} ${d} \u2192 ${c} (its shape)`,raw:{kind:"http-exchange",method:s,route:d,status:c,request:{...ae(i,r.query,r.params),...p?{body:p}:{}},response:{...ie(o.getHeaders?.()??{},typeof i.origin=="string"?i.origin:void 0),...m?{body:m}:{}}}};y(b,t),v().emit(b)}catch{}}u(U,"fe"),a(U,"recordExchange");function R(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}u(R,"G"),a(R,"ownStatus");const Ie=new Set(["TypeError","ReferenceError","SyntaxError","RangeError","EvalError","URIError"]);export function requestOutcome(t,e){return e instanceof Error&&Ie.has(e.name)&&R(e)===void 0?"fault":t<400?"ok":t<500?"refused":t===500?"fault":"declared"}u(requestOutcome,"requestOutcome"),a(requestOutcome,"requestOutcome");function z(t){return t==="ok"?"info":t==="refused"?"warning":"error"}u(z,"pe"),a(z,"severityOf");function T(t){return t.statusCode&&t.statusCode>=400?t.statusCode:500}u(T,"L"),a(T,"inferStatus");function w(t){if(typeof t=="string")return t;if(Array.isArray(t)&&typeof t[0]=="string")return t[0]}u(w,"h"),a(w,"stringHeader");function X(t,e,s,d){const r=v(),o=`request:${e} ${s}`,n={id:h(),sessionId:t.sessionId,timestamp:d,source:"nestjs",category:"backend",severity:"info",context:{sessionId:t.sessionId,flowId:t.flowId,requestId:t.requestId,originType:"request",originNodeId:o},fingerprint:k({kind:"flow-origin",identity:`${e}:${s}`}),title:`${e} ${s}`,raw:{kind:"flow-origin",originNodeId:o,method:e,route:s}};y(n,r.projectName),r.emit(n)}u(X,"le"),a(X,"emitRequestOrigin");function S(t,e,s,d,r){if(!e||!s)return;const o=v(),n=Date.now()-d,c=`${e}.${s}`,f={id:h(),sessionId:t.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:r==="error"?"error":"info",context:{sessionId:t.sessionId,flowId:t.flowId,requestId:t.requestId},fingerprint:k({kind:"method-call",identity:c}),title:`${c} (${n}ms)${r==="error"?" \u2717":""}`,raw:{kind:"span",span:{name:c,role:"controller",flowId:t.flowId,requestId:t.requestId,startTime:d,endTime:Date.now(),durationMs:n,status:r}}};y(f,v().projectName),o.emit(f)}u(S,"U"),a(S,"emitControllerSpan");function J(t){if(!(t instanceof Error))return{message:String(t)};const e=t.stack?t.stack.split(`
1
+ "use strict";var Z=Object.defineProperty;var u=(t,e)=>Z(t,"name",{value:e,configurable:!0});var V=Object.defineProperty,a=u((t,e)=>V(t,"name",{value:e,configurable:!0}),"d");import{__decorate as ee}from"tslib";import{Injectable as te}from"@nestjs/common";import{Observable as L}from"rxjs";import{catchError as se,tap as oe}from"rxjs/operators";import{fingerprint as k,headlessFlowId as re,headlessFlowsEnabled as ne,isProbePath as ae,requestFacts as ie,responseFacts as de,shapeOf as U,ulid as q}from"@lensmcp/core";import{activeMemoryOptions as ue,onFlowStart as ce,onFlowSettled as fe}from"@lensmcp/memory-tracker";import{LENSMCP_CONTEXT_STORAGE as pe}from"./context.js";import{attachContextEnd as le}from"./context-end.js";import{activeOptions as v}from"./state.js";const me=Symbol.for("lensmcp.exchangeId");let j=class{static{u(this,"S")}static{a(this,"TraceInterceptor")}intercept(t,e){const o=v();if(!o.trace.requests)return e.handle();const d=t.switchToHttp(),s=d.getRequest(),r=d.getResponse(),n=h(s.headers?.["x-request-id"])??q(),c=h(s.headers?.["x-lensmcp-flow-id"]),f=h(s.headers?.["x-internal-token"])!==void 0,l=c??(!f&&ne()&&!ae(s.url)?re(n):void 0),i={sessionId:o.sessionId,requestId:n,parentRequestId:h(s.headers?.["x-lensmcp-parent-request-id"]),flowId:l,originNodeId:h(s.headers?.["x-lensmcp-origin-node-id"]),traceparent:h(s.headers?.traceparent),dbCallCount:0},m=s[me],p=(s.method??"GET").toUpperCase(),I=s.route?.path??s.url??"<unknown>",N=t.getClass?.()?.name,O=t.getHandler?.()?.name,y=Date.now();l&&!c&&J(i,p,I,y);const D=o.memory.mode!=="off";D&&ce(n);const M=a(()=>{if(!D)return;const g=ue()?.settleMs??1e3;setTimeout(()=>fe(n,i.flowId),g).unref?.()},"settleAndCheck"),Q=le(i);let C;typeof r?.once=="function"&&ge()&&r.once("finish",()=>z(o.projectName,i,p,I,s,r,C));let P=!1,E=typeof r?.once!="function";const A=a(()=>{P&&E&&Q()},"endIfOver");if(!E){const g=a(()=>{E=!0,A()},"responseOut");r.once?.("finish",g),r.once?.("close",g)}return new L(g=>{let F;return pe.run(i,()=>{F=e.handle().pipe(oe({next:a(w=>{C??={value:w},g.next(w)},"next"),complete:a(()=>{x(o.projectName,i,p,I,r.statusCode??200,y,void 0,m),T(i,N,O,y,"ok"),M(),g.complete()},"complete")}),se(w=>{const H=w?.getResponse?.();H!==void 0&&(C??={value:H});const _=R(w);if(_!==void 0||typeof r.once!="function")x(o.projectName,i,p,I,_??S(r),y,w,m);else{let B=!1;const G=a(W=>{if(B)return;B=!0;const Y=W&&r.statusCode&&r.statusCode>=400?r.statusCode:S(r);x(o.projectName,i,p,I,Y,y,w,m)},"settle");r.once("finish",()=>G(!0)),r.once("close",()=>G(!1))}return T(i,N,O,y,"error"),M(),g.error(w),new L})).subscribe()}),()=>{F?.unsubscribe(),P=!0,A()}})}};j=ee([te()],j);export{j as TraceInterceptor};const $=new Map,Ie=6e4,ge=a(()=>process.env.LENSMCP_HTTP_SHAPES!=="0","shapesOn");function z(t,e,o,d,s,r,n){try{const c=r.statusCode??200,f=`${o} ${d} ${Math.floor(c/100)}`,l=Date.now();if(l-($.get(f)??0)<Ie)return;$.set(f,l),$.size>2e3&&$.delete($.keys().next().value);const i=s.headers??{},m=s.body!==void 0&&s.body!==null&&typeof s.body=="object"&&!Buffer.isBuffer(s.body)?U(s.body):void 0,p=n&&n.value!==void 0&&typeof n.value=="object"&&n.value!==null&&!Buffer.isBuffer(n.value)&&typeof n.value.pipe!="function"?U(n.value):void 0,I={id:q(),sessionId:e.sessionId,timestamp:l,source:"nestjs",category:"backend",severity:"info",context:{sessionId:e.sessionId,flowId:e.flowId,requestId:e.requestId},fingerprint:k({kind:"http-exchange",identity:f}),title:`${o} ${d} \u2192 ${c} (its shape)`,raw:{kind:"http-exchange",method:o,route:d,status:c,request:{...ie(i,s.query,s.params),...m?{body:m}:{}},response:{...de(r.getHeaders?.()??{},typeof i.origin=="string"?i.origin:void 0),...p?{body:p}:{}}}};b(I,t),v().emit(I)}catch{}}u(z,"pe"),a(z,"recordExchange");function R(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}u(R,"L"),a(R,"ownStatus");const we=new Set(["TypeError","ReferenceError","SyntaxError","RangeError","EvalError","URIError"]);export function requestOutcome(t,e){return e instanceof Error&&we.has(e.name)&&R(e)===void 0?"fault":t<400?"ok":t<500?"refused":t===500?"fault":"declared"}u(requestOutcome,"requestOutcome"),a(requestOutcome,"requestOutcome");function X(t){return t==="ok"?"info":t==="refused"?"warning":"error"}u(X,"me"),a(X,"severityOf");function S(t){return t.statusCode&&t.statusCode>=400?t.statusCode:500}u(S,"U"),a(S,"inferStatus");function h(t){if(typeof t=="string")return t;if(Array.isArray(t)&&typeof t[0]=="string")return t[0]}u(h,"h"),a(h,"stringHeader");function J(t,e,o,d){const s=v(),r=`request:${e} ${o}`,n={id:q(),sessionId:t.sessionId,timestamp:d,source:"nestjs",category:"backend",severity:"info",context:{sessionId:t.sessionId,flowId:t.flowId,requestId:t.requestId,originType:"request",originNodeId:r},fingerprint:k({kind:"flow-origin",identity:`${e}:${o}`}),title:`${e} ${o}`,raw:{kind:"flow-origin",originNodeId:r,method:e,route:o}};b(n,s.projectName),s.emit(n)}u(J,"Ie"),a(J,"emitRequestOrigin");function T(t,e,o,d,s){if(!e||!o)return;const r=v(),n=Date.now()-d,c=`${e}.${o}`,f={id:q(),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:k({kind:"method-call",identity:c}),title:`${c} (${n}ms)${s==="error"?" \u2717":""}`,raw:{kind:"span",span:{name:c,role:"controller",flowId:t.flowId,requestId:t.requestId,startTime:d,endTime:Date.now(),durationMs:n,status:s}}};b(f,v().projectName),r.emit(f)}u(T,"X"),a(T,"emitControllerSpan");function K(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}:{}}}u(J,"me"),a(J,"errorDetail");function y(t,e){if(!e)return;const s=t.raw;s&&s.project===void 0&&(s.project=e)}u(y,"$"),a(y,"stampProject");function x(t,e,s,d,r,o,n){const c=v(),f=Date.now()-o,l=requestOutcome(r,n),i={id:h(),sessionId:e.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:z(l),context:{sessionId:e.sessionId,flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},originNodeId:e.originNodeId,traceparent:e.traceparent},fingerprint:k({kind:"server-request",identity:`${s}:${d}:${Math.floor(r/100)}xx`}),title:`${s} ${d} \u2192 ${r} (${f}ms)`,message:n instanceof Error?n.message:void 0,raw:{kind:"server-request",request:{method:s,route:d,status:r,outcome:l,durationMs:f,startedAt:o,endedAt:Date.now(),flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},...n?{error:J(n)}:{}}}},p={...i,id:h(),raw:{kind:"span",span:{name:`nest.request ${s} ${d}`,traceId:e.traceparent,flowId:e.flowId,requestId:e.requestId,startTime:o,endTime:Date.now(),durationMs:f,status:l==="ok"?"ok":"error"}}};y(i,t),y(p,t),c.emit(i),c.emit(p)}u(x,"S"),a(x,"emitRequest");
3
+ `):void 0;return{...t.name?{name:t.name}:{},message:t.message,...e?{stack:e}:{}}}u(K,"ye"),a(K,"errorDetail");function b(t,e){if(!e)return;const o=t.raw;o&&o.project===void 0&&(o.project=e)}u(b,"$"),a(b,"stampProject");function x(t,e,o,d,s,r,n,c){const f=v(),l=Date.now()-r,i=requestOutcome(s,n),m={id:q(),sessionId:e.sessionId,timestamp:Date.now(),source:"nestjs",category:"backend",severity:X(i),context:{sessionId:e.sessionId,flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},originNodeId:e.originNodeId,traceparent:e.traceparent},fingerprint:k({kind:"server-request",identity:`${o}:${d}:${Math.floor(s/100)}xx`}),title:`${o} ${d} \u2192 ${s} (${l}ms)`,message:n instanceof Error?n.message:void 0,raw:{kind:"server-request",request:{method:o,route:d,status:s,outcome:i,durationMs:l,startedAt:r,endedAt:Date.now(),flowId:e.flowId,requestId:e.requestId,...e.parentRequestId?{parentRequestId:e.parentRequestId}:{},...typeof c=="string"?{exchangeId:c}:{},...n?{error:K(n)}:{}}}},p={...m,id:q(),raw:{kind:"span",span:{name:`nest.request ${o} ${d}`,traceId:e.traceparent,flowId:e.flowId,requestId:e.requestId,startTime:r,endTime:Date.now(),durationMs:l,status:i==="ok"?"ok":"error"}}};b(m,t),b(p,t),f.emit(m),f.emit(p)}u(x,"O"),a(x,"emitRequest");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lensmcp/nest-instrumentation",
3
- "version": "1.25.5",
3
+ "version": "1.25.6",
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.25.5",
18
- "@lensmcp/memory-tracker": "1.25.5",
19
- "@lensmcp/protocol-types": "1.25.5",
17
+ "@lensmcp/core": "1.25.6",
18
+ "@lensmcp/memory-tracker": "1.25.6",
19
+ "@lensmcp/protocol-types": "1.25.6",
20
20
  "tslib": "^2.3.0"
21
21
  },
22
22
  "peerDependencies": {