@lensmcp/node-instrumentation 1.25.17 → 1.25.21

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/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var s=Object.defineProperty;var o=(t,r)=>s(t,"name",{value:r,configurable:!0});var n=Object.defineProperty,e=o((t,r)=>n(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.resetActiveWorkForTests=exports.installActiveWorkProbe=exports.beginActiveWork=exports.activeWorkSnapshot=exports.installLensmcpNodeInstrumentation=exports.installChildAppBridge=exports.nestTap=exports.bullmqTap=exports.redisTap=exports.pgTap=exports.tapExec=exports.tapFs=exports.stopEventLoopTapForTests=exports.tapEventLoop=exports.EXCHANGE_ID=exports.resetIngressTapForTests=exports.tapIngress=exports.resetEgressTapForTests=exports.tapEgress=exports.installRequireHook=exports.createEventFloodGuard=exports.installCustomEmit=exports.EMIT_CUSTOM=exports.lensEmitCustom=exports.maybeRotateEventFile=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=exports.EVENT_FILE=exports.PROJECT=exports.isLensWriting=exports.lensEmit=void 0;var emit_1=require("./lib/emit");Object.defineProperty(exports,"lensEmit",{enumerable:!0,get:e(function(){return emit_1.lensEmit},"get")}),Object.defineProperty(exports,"isLensWriting",{enumerable:!0,get:e(function(){return emit_1.isLensWriting},"get")}),Object.defineProperty(exports,"PROJECT",{enumerable:!0,get:e(function(){return emit_1.PROJECT},"get")}),Object.defineProperty(exports,"EVENT_FILE",{enumerable:!0,get:e(function(){return emit_1.EVENT_FILE},"get")}),Object.defineProperty(exports,"EVENT_MAX_BYTES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_BYTES},"get")}),Object.defineProperty(exports,"EVENT_MAX_FILES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_FILES},"get")}),Object.defineProperty(exports,"maybeRotateEventFile",{enumerable:!0,get:e(function(){return emit_1.maybeRotateEventFile},"get")});var emit_custom_1=require("./lib/emit-custom");Object.defineProperty(exports,"lensEmitCustom",{enumerable:!0,get:e(function(){return emit_custom_1.lensEmitCustom},"get")}),Object.defineProperty(exports,"EMIT_CUSTOM",{enumerable:!0,get:e(function(){return emit_custom_1.EMIT_CUSTOM},"get")}),Object.defineProperty(exports,"installCustomEmit",{enumerable:!0,get:e(function(){return emit_custom_1.installCustomEmit},"get")});var flood_guard_1=require("./lib/flood-guard");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return flood_guard_1.createEventFloodGuard},"get")});var require_hook_1=require("./lib/require-hook");Object.defineProperty(exports,"installRequireHook",{enumerable:!0,get:e(function(){return require_hook_1.installRequireHook},"get")});var tap_egress_1=require("./lib/tap-egress");Object.defineProperty(exports,"tapEgress",{enumerable:!0,get:e(function(){return tap_egress_1.tapEgress},"get")}),Object.defineProperty(exports,"resetEgressTapForTests",{enumerable:!0,get:e(function(){return tap_egress_1.resetEgressTapForTests},"get")});var tap_ingress_1=require("./lib/tap-ingress");Object.defineProperty(exports,"tapIngress",{enumerable:!0,get:e(function(){return tap_ingress_1.tapIngress},"get")}),Object.defineProperty(exports,"resetIngressTapForTests",{enumerable:!0,get:e(function(){return tap_ingress_1.resetIngressTapForTests},"get")}),Object.defineProperty(exports,"EXCHANGE_ID",{enumerable:!0,get:e(function(){return tap_ingress_1.EXCHANGE_ID},"get")});var tap_event_loop_1=require("./lib/tap-event-loop");Object.defineProperty(exports,"tapEventLoop",{enumerable:!0,get:e(function(){return tap_event_loop_1.tapEventLoop},"get")}),Object.defineProperty(exports,"stopEventLoopTapForTests",{enumerable:!0,get:e(function(){return tap_event_loop_1.stopEventLoopTapForTests},"get")});var tap_fs_1=require("./lib/tap-fs");Object.defineProperty(exports,"tapFs",{enumerable:!0,get:e(function(){return tap_fs_1.tapFs},"get")});var tap_exec_1=require("./lib/tap-exec");Object.defineProperty(exports,"tapExec",{enumerable:!0,get:e(function(){return tap_exec_1.tapExec},"get")});var tap_pg_1=require("./lib/tap-pg");Object.defineProperty(exports,"pgTap",{enumerable:!0,get:e(function(){return tap_pg_1.pgTap},"get")});var tap_redis_1=require("./lib/tap-redis");Object.defineProperty(exports,"redisTap",{enumerable:!0,get:e(function(){return tap_redis_1.redisTap},"get")});var tap_bullmq_1=require("./lib/tap-bullmq");Object.defineProperty(exports,"bullmqTap",{enumerable:!0,get:e(function(){return tap_bullmq_1.bullmqTap},"get")});var tap_nest_1=require("./lib/tap-nest");Object.defineProperty(exports,"nestTap",{enumerable:!0,get:e(function(){return tap_nest_1.nestTap},"get")}),Object.defineProperty(exports,"installChildAppBridge",{enumerable:!0,get:e(function(){return tap_nest_1.installChildAppBridge},"get")});var install_1=require("./lib/install");Object.defineProperty(exports,"installLensmcpNodeInstrumentation",{enumerable:!0,get:e(function(){return install_1.installLensmcpNodeInstrumentation},"get")});var active_work_1=require("./lib/active-work");Object.defineProperty(exports,"activeWorkSnapshot",{enumerable:!0,get:e(function(){return active_work_1.activeWorkSnapshot},"get")}),Object.defineProperty(exports,"beginActiveWork",{enumerable:!0,get:e(function(){return active_work_1.beginActiveWork},"get")}),Object.defineProperty(exports,"installActiveWorkProbe",{enumerable:!0,get:e(function(){return active_work_1.installActiveWorkProbe},"get")}),Object.defineProperty(exports,"resetActiveWorkForTests",{enumerable:!0,get:e(function(){return active_work_1.resetActiveWorkForTests},"get")});
1
+ "use strict";var p=Object.defineProperty;var i=(t,r)=>p(t,"name",{value:r,configurable:!0});var s=Object.defineProperty,o=i((t,r)=>s(t,"name",{value:r,configurable:!0}),"o"),n=Object.defineProperty,e=o((t,r)=>n(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.resetActiveWorkForTests=exports.installActiveWorkProbe=exports.beginActiveWork=exports.activeWorkSnapshot=exports.installLensmcpNodeInstrumentation=exports.installChildAppBridge=exports.nestTap=exports.bullmqTap=exports.redisTap=exports.pgTap=exports.tapExec=exports.tapFs=exports.stopEventLoopTapForTests=exports.tapEventLoop=exports.EXCHANGE_ID=exports.resetIngressTapForTests=exports.tapIngress=exports.resetEgressTapForTests=exports.tapEgress=exports.installRequireHook=exports.createEventFloodGuard=exports.installCustomEmit=exports.EMIT_CUSTOM=exports.lensEmitCustom=exports.maybeRotateEventFile=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=exports.EVENT_FILE=exports.PROJECT=exports.isLensWriting=exports.lensEmit=void 0;var emit_1=require("./lib/emit");Object.defineProperty(exports,"lensEmit",{enumerable:!0,get:e(function(){return emit_1.lensEmit},"get")}),Object.defineProperty(exports,"isLensWriting",{enumerable:!0,get:e(function(){return emit_1.isLensWriting},"get")}),Object.defineProperty(exports,"PROJECT",{enumerable:!0,get:e(function(){return emit_1.PROJECT},"get")}),Object.defineProperty(exports,"EVENT_FILE",{enumerable:!0,get:e(function(){return emit_1.EVENT_FILE},"get")}),Object.defineProperty(exports,"EVENT_MAX_BYTES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_BYTES},"get")}),Object.defineProperty(exports,"EVENT_MAX_FILES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_FILES},"get")}),Object.defineProperty(exports,"maybeRotateEventFile",{enumerable:!0,get:e(function(){return emit_1.maybeRotateEventFile},"get")});var emit_custom_1=require("./lib/emit-custom");Object.defineProperty(exports,"lensEmitCustom",{enumerable:!0,get:e(function(){return emit_custom_1.lensEmitCustom},"get")}),Object.defineProperty(exports,"EMIT_CUSTOM",{enumerable:!0,get:e(function(){return emit_custom_1.EMIT_CUSTOM},"get")}),Object.defineProperty(exports,"installCustomEmit",{enumerable:!0,get:e(function(){return emit_custom_1.installCustomEmit},"get")});var flood_guard_1=require("./lib/flood-guard");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return flood_guard_1.createEventFloodGuard},"get")});var require_hook_1=require("./lib/require-hook");Object.defineProperty(exports,"installRequireHook",{enumerable:!0,get:e(function(){return require_hook_1.installRequireHook},"get")});var tap_egress_1=require("./lib/tap-egress");Object.defineProperty(exports,"tapEgress",{enumerable:!0,get:e(function(){return tap_egress_1.tapEgress},"get")}),Object.defineProperty(exports,"resetEgressTapForTests",{enumerable:!0,get:e(function(){return tap_egress_1.resetEgressTapForTests},"get")});var tap_ingress_1=require("./lib/tap-ingress");Object.defineProperty(exports,"tapIngress",{enumerable:!0,get:e(function(){return tap_ingress_1.tapIngress},"get")}),Object.defineProperty(exports,"resetIngressTapForTests",{enumerable:!0,get:e(function(){return tap_ingress_1.resetIngressTapForTests},"get")}),Object.defineProperty(exports,"EXCHANGE_ID",{enumerable:!0,get:e(function(){return tap_ingress_1.EXCHANGE_ID},"get")});var tap_event_loop_1=require("./lib/tap-event-loop");Object.defineProperty(exports,"tapEventLoop",{enumerable:!0,get:e(function(){return tap_event_loop_1.tapEventLoop},"get")}),Object.defineProperty(exports,"stopEventLoopTapForTests",{enumerable:!0,get:e(function(){return tap_event_loop_1.stopEventLoopTapForTests},"get")});var tap_fs_1=require("./lib/tap-fs");Object.defineProperty(exports,"tapFs",{enumerable:!0,get:e(function(){return tap_fs_1.tapFs},"get")});var tap_exec_1=require("./lib/tap-exec");Object.defineProperty(exports,"tapExec",{enumerable:!0,get:e(function(){return tap_exec_1.tapExec},"get")});var tap_pg_1=require("./lib/tap-pg");Object.defineProperty(exports,"pgTap",{enumerable:!0,get:e(function(){return tap_pg_1.pgTap},"get")});var tap_redis_1=require("./lib/tap-redis");Object.defineProperty(exports,"redisTap",{enumerable:!0,get:e(function(){return tap_redis_1.redisTap},"get")});var tap_bullmq_1=require("./lib/tap-bullmq");Object.defineProperty(exports,"bullmqTap",{enumerable:!0,get:e(function(){return tap_bullmq_1.bullmqTap},"get")});var tap_nest_1=require("./lib/tap-nest");Object.defineProperty(exports,"nestTap",{enumerable:!0,get:e(function(){return tap_nest_1.nestTap},"get")}),Object.defineProperty(exports,"installChildAppBridge",{enumerable:!0,get:e(function(){return tap_nest_1.installChildAppBridge},"get")});var install_1=require("./lib/install");Object.defineProperty(exports,"installLensmcpNodeInstrumentation",{enumerable:!0,get:e(function(){return install_1.installLensmcpNodeInstrumentation},"get")});var active_work_1=require("./lib/active-work");Object.defineProperty(exports,"activeWorkSnapshot",{enumerable:!0,get:e(function(){return active_work_1.activeWorkSnapshot},"get")}),Object.defineProperty(exports,"beginActiveWork",{enumerable:!0,get:e(function(){return active_work_1.beginActiveWork},"get")}),Object.defineProperty(exports,"installActiveWorkProbe",{enumerable:!0,get:e(function(){return active_work_1.installActiveWorkProbe},"get")}),Object.defineProperty(exports,"resetActiveWorkForTests",{enumerable:!0,get:e(function(){return active_work_1.resetActiveWorkForTests},"get")});
@@ -1 +1 @@
1
- "use strict";var a=Object.defineProperty;var o=(t,e)=>a(t,"name",{value:e,configurable:!0});var i=Object.defineProperty,n=o((t,e)=>i(t,"name",{value:e,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.beginActiveWorkGeneration=beginActiveWorkGeneration,exports.activeWorkGeneration=activeWorkGeneration,exports.beginActiveWork=beginActiveWork,exports.activeWorkSnapshot=activeWorkSnapshot,exports.installActiveWorkProbe=installActiveWorkProbe,exports.resetActiveWorkForTests=resetActiveWorkForTests;const GLOBAL_KEY="__lensmcpActiveWork",running=new Set;let currentGeneration=0;function beginActiveWorkGeneration(){return++currentGeneration}o(beginActiveWorkGeneration,"beginActiveWorkGeneration"),n(beginActiveWorkGeneration,"beginActiveWorkGeneration");function activeWorkGeneration(){return currentGeneration}o(activeWorkGeneration,"activeWorkGeneration"),n(activeWorkGeneration,"activeWorkGeneration");function beginActiveWork(t){const e={at:Date.now(),...t===void 0?{}:{gen:t}};running.add(e);let r=!1;return()=>{r||(r=!0,running.delete(e))}}o(beginActiveWork,"beginActiveWork"),n(beginActiveWork,"beginActiveWork");function activeWorkSnapshot(t){let e,r=0;for(const c of running)t!==void 0&&c.gen!==void 0&&c.gen!==t||(r+=1,(e===void 0||c.at<e)&&(e=c.at));return{count:r,...e===void 0?{}:{oldestStartedAt:e}}}o(activeWorkSnapshot,"activeWorkSnapshot"),n(activeWorkSnapshot,"activeWorkSnapshot");function installActiveWorkProbe(){globalThis[GLOBAL_KEY]=activeWorkSnapshot,globalThis.__lensmcpBeginWorkGeneration=beginActiveWorkGeneration}o(installActiveWorkProbe,"installActiveWorkProbe"),n(installActiveWorkProbe,"installActiveWorkProbe");function resetActiveWorkForTests(){running.clear(),currentGeneration=0}o(resetActiveWorkForTests,"resetActiveWorkForTests"),n(resetActiveWorkForTests,"resetActiveWorkForTests");
1
+ "use strict";var v=Object.defineProperty;var r=(t,e)=>v(t,"name",{value:e,configurable:!0});var a=Object.defineProperty,o=r((t,e)=>a(t,"name",{value:e,configurable:!0}),"o"),i=Object.defineProperty,n=o((t,e)=>i(t,"name",{value:e,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.beginActiveWorkGeneration=beginActiveWorkGeneration,exports.activeWorkGeneration=activeWorkGeneration,exports.beginActiveWork=beginActiveWork,exports.activeWorkSnapshot=activeWorkSnapshot,exports.installActiveWorkProbe=installActiveWorkProbe,exports.resetActiveWorkForTests=resetActiveWorkForTests;const GLOBAL_KEY="__lensmcpActiveWork",running=new Set;let currentGeneration=0;function beginActiveWorkGeneration(){return++currentGeneration}r(beginActiveWorkGeneration,"beginActiveWorkGeneration"),o(beginActiveWorkGeneration,"beginActiveWorkGeneration"),n(beginActiveWorkGeneration,"beginActiveWorkGeneration");function activeWorkGeneration(){return currentGeneration}r(activeWorkGeneration,"activeWorkGeneration"),o(activeWorkGeneration,"activeWorkGeneration"),n(activeWorkGeneration,"activeWorkGeneration");function beginActiveWork(t){const e={at:Date.now(),...t===void 0?{}:{gen:t}};running.add(e);let c=!1;return()=>{c||(c=!0,running.delete(e))}}r(beginActiveWork,"beginActiveWork"),o(beginActiveWork,"beginActiveWork"),n(beginActiveWork,"beginActiveWork");function activeWorkSnapshot(t){let e,c=0;for(const s of running)t!==void 0&&s.gen!==void 0&&s.gen!==t||(c+=1,(e===void 0||s.at<e)&&(e=s.at));return{count:c,...e===void 0?{}:{oldestStartedAt:e}}}r(activeWorkSnapshot,"activeWorkSnapshot"),o(activeWorkSnapshot,"activeWorkSnapshot"),n(activeWorkSnapshot,"activeWorkSnapshot");function installActiveWorkProbe(){globalThis[GLOBAL_KEY]=activeWorkSnapshot,globalThis.__lensmcpBeginWorkGeneration=beginActiveWorkGeneration}r(installActiveWorkProbe,"installActiveWorkProbe"),o(installActiveWorkProbe,"installActiveWorkProbe"),n(installActiveWorkProbe,"installActiveWorkProbe");function resetActiveWorkForTests(){running.clear(),currentGeneration=0}r(resetActiveWorkForTests,"resetActiveWorkForTests"),o(resetActiveWorkForTests,"resetActiveWorkForTests"),n(resetActiveWorkForTests,"resetActiveWorkForTests");
@@ -1,16 +1,16 @@
1
- "use strict";var j=Object.defineProperty;var d=(t,e)=>j(t,"name",{value:e,configurable:!0});var M=Object.defineProperty,u=d((t,e)=>M(t,"name",{value:e,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseExtraHosts=parseExtraHosts,exports.matchTarget=matchTarget,exports.flattenContent=flattenContent,exports.normalizeRequest=normalizeRequest,exports.mapUsage=mapUsage,exports.normalizeResponse=normalizeResponse,exports.createStreamAccumulator=createStreamAccumulator;const isObj=u(t=>typeof t=="object"&&t!==null&&!Array.isArray(t),"isObj"),asArr=u(t=>Array.isArray(t)?t:[],"asArr"),asStr=u(t=>typeof t=="string"?t:void 0,"asStr"),asNum=u(t=>typeof t=="number"&&Number.isFinite(t)?t:void 0,"asNum"),MAX_ACCUMULATED_CHARS=512*1024,MAX_EVENT_BUFFER_CHARS=1024*1024,MAX_BLOCK_JSON_CHARS=2e3,KNOWN_HOSTS=[{test:/^api\.openai\.com$/i,provider:"openai"},{test:/\.openai\.azure\.com$/i,provider:"openai"},{test:/^api\.anthropic\.com$/i,provider:"anthropic"}],authorityOf=u(t=>t.trim().toLowerCase().replace(/^[a-z][a-z0-9+.-]*:\/\//,"").replace(/[/?#].*$/,""),"authorityOf");function parseExtraHosts(t){const e=new Map;for(const o of(t??"").split(",")){const a=o.lastIndexOf("=");if(a===-1)continue;const n=authorityOf(o.slice(0,a)),r=o.slice(a+1).trim().toLowerCase();n&&(r==="openai"||r==="anthropic")&&e.set(n,r)}return e}d(parseExtraHosts,"parseExtraHosts"),u(parseExtraHosts,"parseExtraHosts");function apiFor(t,e){const o=e.replace(/\/+$/,"").toLowerCase();if(t==="anthropic")return o.endsWith("/messages")?"messages":void 0;if(o.endsWith("/chat/completions"))return"chat";if(o.endsWith("/responses"))return"responses";if(o.endsWith("/embeddings"))return"embeddings"}d(apiFor,"apiFor"),u(apiFor,"apiFor");function matchTarget(t,e,o,a){const n=t.toLowerCase(),r=a.get(e?`${n}:${e}`:n)??a.get(n)??KNOWN_HOSTS.find(p=>p.test.test(n))?.provider;if(!r)return;const c=apiFor(r,o);return c?{provider:r,api:c}:void 0}d(matchTarget,"matchTarget"),u(matchTarget,"matchTarget");function jsonText(t,e=MAX_BLOCK_JSON_CHARS){try{const o=JSON.stringify(t);return o===void 0?"":o.length>e?`${o.slice(0,e)}\u2026`:o}catch{return""}}d(jsonText,"jsonText"),u(jsonText,"jsonText");const argsText=u(t=>typeof t=="string"?t:t==null?void 0:jsonText(t,8192),"argsText");function flattenContent(t){if(t==null)return"";if(typeof t=="string")return t;if(!Array.isArray(t))return jsonText(t);const e=[];for(const o of t){if(typeof o=="string"){e.push(o);continue}if(!isObj(o))continue;const a=asStr(o.type)??"";switch(a){case"text":case"input_text":case"output_text":e.push(asStr(o.text)??"");break;case"refusal":e.push(`[refusal] ${asStr(o.refusal)??""}`);break;case"image_url":case"image":case"input_image":e.push("[image]");break;case"input_audio":case"audio":e.push("[audio]");break;case"file":case"input_file":case"document":e.push("[file]");break;case"tool_use":e.push(`[tool_use ${asStr(o.name)??""} ${jsonText(o.input)}]`);break;case"tool_result":e.push(`[tool_result ${flattenContent(o.content)}]`);break;case"thinking":e.push(`[thinking] ${asStr(o.thinking)??""}`);break;case"redacted_thinking":e.push("[redacted_thinking]");break;default:e.push(asStr(o.text)??`[${a||"part"}]`)}}return e.filter(o=>o!=="").join(`
2
- `)}d(flattenContent,"flattenContent"),u(flattenContent,"flattenContent");const SCALAR_PARAMS={chat:["temperature","top_p","max_tokens","max_completion_tokens","n","seed","presence_penalty","frequency_penalty","tool_choice","reasoning_effort","service_tier"],responses:["temperature","top_p","max_output_tokens","tool_choice","parallel_tool_calls","service_tier"],messages:["max_tokens","temperature","top_p","top_k"],embeddings:["dimensions","encoding_format"]};function scalarParams(t,e){const o={};for(const p of SCALAR_PARAMS[e]){const _=t[p];(typeof _=="string"||typeof _=="number"||typeof _=="boolean")&&(o[p]=_)}const a=t.reasoning;isObj(a)&&typeof a.effort=="string"&&(o.reasoning_effort=a.effort);const n=t.thinking;isObj(n)&&(typeof n.type=="string"&&(o.thinking=n.type),typeof n.budget_tokens=="number"&&(o.thinking_budget_tokens=n.budget_tokens));const r=t.response_format;isObj(r)&&typeof r.type=="string"&&(o.response_format=r.type);const c=t.tool_choice;return isObj(c)&&typeof c.type=="string"&&(o.tool_choice=c.type),o}d(scalarParams,"scalarParams"),u(scalarParams,"scalarParams");function toolsOf(t){const e=[];for(const o of asArr(t.tools)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:void 0,n=asStr(a?.name)??asStr(o.name)??asStr(o.type);if(!n)continue;const r=asStr(a?.description)??asStr(o.description);e.push(r?{name:n,description:r}:{name:n})}return e}d(toolsOf,"toolsOf"),u(toolsOf,"toolsOf");function chatMessage(t){let e=flattenContent(t.content);for(const o of asArr(t.tool_calls)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:{};e+=`${e?`
3
- `:""}[tool_call ${asStr(a.name)??""} ${asStr(a.arguments)??""}]`}return{role:asStr(t.role)??"unknown",content:e}}d(chatMessage,"chatMessage"),u(chatMessage,"chatMessage");function responsesInput(t){if(typeof t=="string")return[{role:"user",content:t}];const e=[];for(const o of asArr(t)){if(!isObj(o))continue;const a=asStr(o.type);a==="function_call_output"?e.push({role:"tool",content:flattenContent(o.output)}):a==="function_call"?e.push({role:"assistant",content:`[tool_call ${asStr(o.name)??""} ${asStr(o.arguments)??""}]`}):e.push({role:asStr(o.role)??a??"user",content:flattenContent(o.content)})}return e}d(responsesInput,"responsesInput"),u(responsesInput,"responsesInput");function normalizeRequest(t,e){const o={messages:[],tools:[],params:{},stream:!1};if(!isObj(e))return o;const a={...o,...asStr(e.model)?{model:asStr(e.model)}:{},stream:e.stream===!0,params:scalarParams(e,t.api),tools:toolsOf(e)};switch(t.api){case"chat":a.messages=asArr(e.messages).filter(isObj).map(chatMessage);break;case"responses":{const n=asStr(e.instructions);n&&(a.system=n),a.messages=responsesInput(e.input);break}case"messages":{const n=e.system,r=typeof n=="string"?n:flattenContent(n);r&&(a.system=r),a.messages=asArr(e.messages).filter(isObj).map(c=>({role:asStr(c.role)??"unknown",content:flattenContent(c.content)}));break}case"embeddings":{const n=e.input;a.inputCount=Array.isArray(n)?n.length:n===void 0?0:1;break}}return a}d(normalizeRequest,"normalizeRequest"),u(normalizeRequest,"normalizeRequest");function mapUsage(t,e=!0){if(!isObj(t))return{};const o=isObj(t.prompt_tokens_details)?t.prompt_tokens_details:isObj(t.input_tokens_details)?t.input_tokens_details:{},a=isObj(t.completion_tokens_details)?t.completion_tokens_details:isObj(t.output_tokens_details)?t.output_tokens_details:{},n={},r=asNum(t.prompt_tokens)??asNum(t.input_tokens),c=asNum(t.completion_tokens)??asNum(t.output_tokens),p=asNum(o.cached_tokens)??asNum(t.cache_read_input_tokens),_=asNum(a.reasoning_tokens);r!==void 0&&(n.promptTokens=r),c!==void 0&&(n.completionTokens=c),p!==void 0&&(n.cachedTokens=p),_!==void 0&&(n.reasoningTokens=_);const f=asNum(t.total_tokens);return f!==void 0?n.totalTokens=f:e&&r!==void 0&&c!==void 0&&(n.totalTokens=r+c),n}d(mapUsage,"mapUsage"),u(mapUsage,"mapUsage");const withTotal=u(t=>t.totalTokens===void 0&&t.promptTokens!==void 0&&t.completionTokens!==void 0?{...t,totalTokens:t.promptTokens+t.completionTokens}:t,"withTotal");function errorMessage(t){const e=t.error;if(typeof e=="string")return e;if(isObj(e))return asStr(e.message)??asStr(e.type)??asStr(e.code)}d(errorMessage,"errorMessage"),u(errorMessage,"errorMessage");function normalizeResponse(t,e){const o={completion:"",toolCalls:[],usage:{}};if(!isObj(e))return o;const a=asStr(e.id),n=asStr(e.model);a&&(o.id=a),n&&(o.model=n);const r=errorMessage(e);switch(r&&(o.error=r),o.usage=mapUsage(e.usage),t.api){case"chat":{const c=asArr(e.choices).find(isObj),p=c&&isObj(c.message)?c.message:void 0;if(p){o.completion=flattenContent(p.content);const f=asStr(p.refusal);f&&(o.completion+=`${o.completion?`
4
- `:""}[refusal] ${f}`);const h=asStr(p.reasoning_content)??asStr(p.reasoning);h&&(o.reasoning=h);for(const k of asArr(p.tool_calls)){if(!isObj(k))continue;const y=isObj(k.function)?k.function:{},b=argsText(y.arguments);o.toolCalls.push({...asStr(k.id)?{id:asStr(k.id)}:{},name:asStr(y.name)??"tool",...b!==void 0?{arguments:b}:{}})}const m=isObj(p.function_call)?p.function_call:void 0;if(m){const k=argsText(m.arguments);o.toolCalls.push({name:asStr(m.name)??"tool",...k!==void 0?{arguments:k}:{}})}}const _=asStr(c?.finish_reason);_&&(o.finishReason=_);break}case"responses":{const c=[],p=[];for(const m of asArr(e.output)){if(!isObj(m))continue;const k=asStr(m.type);if(k==="message")c.push(flattenContent(m.content));else if(k==="function_call")o.toolCalls.push({...asStr(m.call_id)??asStr(m.id)?{id:asStr(m.call_id)??asStr(m.id)}:{},name:asStr(m.name)??"tool",...asStr(m.arguments)!==void 0?{arguments:asStr(m.arguments)}:{}});else if(k==="reasoning")for(const y of asArr(m.summary))isObj(y)&&asStr(y.text)&&p.push(asStr(y.text))}o.completion=c.filter(Boolean).join(`
1
+ "use strict";var z=Object.defineProperty;var _=(t,e)=>z(t,"name",{value:e,configurable:!0});var j=Object.defineProperty,d=_((t,e)=>j(t,"name",{value:e,configurable:!0}),"d"),M=Object.defineProperty,u=d((t,e)=>M(t,"name",{value:e,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseExtraHosts=parseExtraHosts,exports.matchTarget=matchTarget,exports.flattenContent=flattenContent,exports.normalizeRequest=normalizeRequest,exports.mapUsage=mapUsage,exports.normalizeResponse=normalizeResponse,exports.createStreamAccumulator=createStreamAccumulator;const isObj=u(t=>typeof t=="object"&&t!==null&&!Array.isArray(t),"isObj"),asArr=u(t=>Array.isArray(t)?t:[],"asArr"),asStr=u(t=>typeof t=="string"?t:void 0,"asStr"),asNum=u(t=>typeof t=="number"&&Number.isFinite(t)?t:void 0,"asNum"),MAX_ACCUMULATED_CHARS=512*1024,MAX_EVENT_BUFFER_CHARS=1024*1024,MAX_BLOCK_JSON_CHARS=2e3,KNOWN_HOSTS=[{test:/^api\.openai\.com$/i,provider:"openai"},{test:/\.openai\.azure\.com$/i,provider:"openai"},{test:/^api\.anthropic\.com$/i,provider:"anthropic"}],authorityOf=u(t=>t.trim().toLowerCase().replace(/^[a-z][a-z0-9+.-]*:\/\//,"").replace(/[/?#].*$/,""),"authorityOf");function parseExtraHosts(t){const e=new Map;for(const o of(t??"").split(",")){const a=o.lastIndexOf("=");if(a===-1)continue;const n=authorityOf(o.slice(0,a)),i=o.slice(a+1).trim().toLowerCase();n&&(i==="openai"||i==="anthropic")&&e.set(n,i)}return e}_(parseExtraHosts,"parseExtraHosts"),d(parseExtraHosts,"parseExtraHosts"),u(parseExtraHosts,"parseExtraHosts");function apiFor(t,e){const o=e.replace(/\/+$/,"").toLowerCase();if(t==="anthropic")return o.endsWith("/messages")?"messages":void 0;if(o.endsWith("/chat/completions"))return"chat";if(o.endsWith("/responses"))return"responses";if(o.endsWith("/embeddings"))return"embeddings"}_(apiFor,"apiFor"),d(apiFor,"apiFor"),u(apiFor,"apiFor");function matchTarget(t,e,o,a){const n=t.toLowerCase(),i=a.get(e?`${n}:${e}`:n)??a.get(n)??KNOWN_HOSTS.find(p=>p.test.test(n))?.provider;if(!i)return;const c=apiFor(i,o);return c?{provider:i,api:c}:void 0}_(matchTarget,"matchTarget"),d(matchTarget,"matchTarget"),u(matchTarget,"matchTarget");function jsonText(t,e=MAX_BLOCK_JSON_CHARS){try{const o=JSON.stringify(t);return o===void 0?"":o.length>e?`${o.slice(0,e)}\u2026`:o}catch{return""}}_(jsonText,"jsonText"),d(jsonText,"jsonText"),u(jsonText,"jsonText");const argsText=u(t=>typeof t=="string"?t:t==null?void 0:jsonText(t,8192),"argsText");function flattenContent(t){if(t==null)return"";if(typeof t=="string")return t;if(!Array.isArray(t))return jsonText(t);const e=[];for(const o of t){if(typeof o=="string"){e.push(o);continue}if(!isObj(o))continue;const a=asStr(o.type)??"";switch(a){case"text":case"input_text":case"output_text":e.push(asStr(o.text)??"");break;case"refusal":e.push(`[refusal] ${asStr(o.refusal)??""}`);break;case"image_url":case"image":case"input_image":e.push("[image]");break;case"input_audio":case"audio":e.push("[audio]");break;case"file":case"input_file":case"document":e.push("[file]");break;case"tool_use":e.push(`[tool_use ${asStr(o.name)??""} ${jsonText(o.input)}]`);break;case"tool_result":e.push(`[tool_result ${flattenContent(o.content)}]`);break;case"thinking":e.push(`[thinking] ${asStr(o.thinking)??""}`);break;case"redacted_thinking":e.push("[redacted_thinking]");break;default:e.push(asStr(o.text)??`[${a||"part"}]`)}}return e.filter(o=>o!=="").join(`
2
+ `)}_(flattenContent,"flattenContent"),d(flattenContent,"flattenContent"),u(flattenContent,"flattenContent");const SCALAR_PARAMS={chat:["temperature","top_p","max_tokens","max_completion_tokens","n","seed","presence_penalty","frequency_penalty","tool_choice","reasoning_effort","service_tier"],responses:["temperature","top_p","max_output_tokens","tool_choice","parallel_tool_calls","service_tier"],messages:["max_tokens","temperature","top_p","top_k"],embeddings:["dimensions","encoding_format"]};function scalarParams(t,e){const o={};for(const p of SCALAR_PARAMS[e]){const h=t[p];(typeof h=="string"||typeof h=="number"||typeof h=="boolean")&&(o[p]=h)}const a=t.reasoning;isObj(a)&&typeof a.effort=="string"&&(o.reasoning_effort=a.effort);const n=t.thinking;isObj(n)&&(typeof n.type=="string"&&(o.thinking=n.type),typeof n.budget_tokens=="number"&&(o.thinking_budget_tokens=n.budget_tokens));const i=t.response_format;isObj(i)&&typeof i.type=="string"&&(o.response_format=i.type);const c=t.tool_choice;return isObj(c)&&typeof c.type=="string"&&(o.tool_choice=c.type),o}_(scalarParams,"scalarParams"),d(scalarParams,"scalarParams"),u(scalarParams,"scalarParams");function toolsOf(t){const e=[];for(const o of asArr(t.tools)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:void 0,n=asStr(a?.name)??asStr(o.name)??asStr(o.type);if(!n)continue;const i=asStr(a?.description)??asStr(o.description);e.push(i?{name:n,description:i}:{name:n})}return e}_(toolsOf,"toolsOf"),d(toolsOf,"toolsOf"),u(toolsOf,"toolsOf");function chatMessage(t){let e=flattenContent(t.content);for(const o of asArr(t.tool_calls)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:{};e+=`${e?`
3
+ `:""}[tool_call ${asStr(a.name)??""} ${asStr(a.arguments)??""}]`}return{role:asStr(t.role)??"unknown",content:e}}_(chatMessage,"chatMessage"),d(chatMessage,"chatMessage"),u(chatMessage,"chatMessage");function responsesInput(t){if(typeof t=="string")return[{role:"user",content:t}];const e=[];for(const o of asArr(t)){if(!isObj(o))continue;const a=asStr(o.type);a==="function_call_output"?e.push({role:"tool",content:flattenContent(o.output)}):a==="function_call"?e.push({role:"assistant",content:`[tool_call ${asStr(o.name)??""} ${asStr(o.arguments)??""}]`}):e.push({role:asStr(o.role)??a??"user",content:flattenContent(o.content)})}return e}_(responsesInput,"responsesInput"),d(responsesInput,"responsesInput"),u(responsesInput,"responsesInput");function normalizeRequest(t,e){const o={messages:[],tools:[],params:{},stream:!1};if(!isObj(e))return o;const a={...o,...asStr(e.model)?{model:asStr(e.model)}:{},stream:e.stream===!0,params:scalarParams(e,t.api),tools:toolsOf(e)};switch(t.api){case"chat":a.messages=asArr(e.messages).filter(isObj).map(chatMessage);break;case"responses":{const n=asStr(e.instructions);n&&(a.system=n),a.messages=responsesInput(e.input);break}case"messages":{const n=e.system,i=typeof n=="string"?n:flattenContent(n);i&&(a.system=i),a.messages=asArr(e.messages).filter(isObj).map(c=>({role:asStr(c.role)??"unknown",content:flattenContent(c.content)}));break}case"embeddings":{const n=e.input;a.inputCount=Array.isArray(n)?n.length:n===void 0?0:1;break}}return a}_(normalizeRequest,"normalizeRequest"),d(normalizeRequest,"normalizeRequest"),u(normalizeRequest,"normalizeRequest");function mapUsage(t,e=!0){if(!isObj(t))return{};const o=isObj(t.prompt_tokens_details)?t.prompt_tokens_details:isObj(t.input_tokens_details)?t.input_tokens_details:{},a=isObj(t.completion_tokens_details)?t.completion_tokens_details:isObj(t.output_tokens_details)?t.output_tokens_details:{},n={},i=asNum(t.prompt_tokens)??asNum(t.input_tokens),c=asNum(t.completion_tokens)??asNum(t.output_tokens),p=asNum(o.cached_tokens)??asNum(t.cache_read_input_tokens),h=asNum(a.reasoning_tokens);i!==void 0&&(n.promptTokens=i),c!==void 0&&(n.completionTokens=c),p!==void 0&&(n.cachedTokens=p),h!==void 0&&(n.reasoningTokens=h);const m=asNum(t.total_tokens);return m!==void 0?n.totalTokens=m:e&&i!==void 0&&c!==void 0&&(n.totalTokens=i+c),n}_(mapUsage,"mapUsage"),d(mapUsage,"mapUsage"),u(mapUsage,"mapUsage");const withTotal=u(t=>t.totalTokens===void 0&&t.promptTokens!==void 0&&t.completionTokens!==void 0?{...t,totalTokens:t.promptTokens+t.completionTokens}:t,"withTotal");function errorMessage(t){const e=t.error;if(typeof e=="string")return e;if(isObj(e))return asStr(e.message)??asStr(e.type)??asStr(e.code)}_(errorMessage,"errorMessage"),d(errorMessage,"errorMessage"),u(errorMessage,"errorMessage");function normalizeResponse(t,e){const o={completion:"",toolCalls:[],usage:{}};if(!isObj(e))return o;const a=asStr(e.id),n=asStr(e.model);a&&(o.id=a),n&&(o.model=n);const i=errorMessage(e);switch(i&&(o.error=i),o.usage=mapUsage(e.usage),t.api){case"chat":{const c=asArr(e.choices).find(isObj),p=c&&isObj(c.message)?c.message:void 0;if(p){o.completion=flattenContent(p.content);const m=asStr(p.refusal);m&&(o.completion+=`${o.completion?`
4
+ `:""}[refusal] ${m}`);const k=asStr(p.reasoning_content)??asStr(p.reasoning);k&&(o.reasoning=k);for(const y of asArr(p.tool_calls)){if(!isObj(y))continue;const v=isObj(y.function)?y.function:{},C=argsText(v.arguments);o.toolCalls.push({...asStr(y.id)?{id:asStr(y.id)}:{},name:asStr(v.name)??"tool",...C!==void 0?{arguments:C}:{}})}const f=isObj(p.function_call)?p.function_call:void 0;if(f){const y=argsText(f.arguments);o.toolCalls.push({name:asStr(f.name)??"tool",...y!==void 0?{arguments:y}:{}})}}const h=asStr(c?.finish_reason);h&&(o.finishReason=h);break}case"responses":{const c=[],p=[];for(const f of asArr(e.output)){if(!isObj(f))continue;const y=asStr(f.type);if(y==="message")c.push(flattenContent(f.content));else if(y==="function_call")o.toolCalls.push({...asStr(f.call_id)??asStr(f.id)?{id:asStr(f.call_id)??asStr(f.id)}:{},name:asStr(f.name)??"tool",...asStr(f.arguments)!==void 0?{arguments:asStr(f.arguments)}:{}});else if(y==="reasoning")for(const v of asArr(f.summary))isObj(v)&&asStr(v.text)&&p.push(asStr(v.text))}o.completion=c.filter(Boolean).join(`
5
5
  `),p.length&&(o.reasoning=p.join(`
6
- `));const _=isObj(e.incomplete_details)?asStr(e.incomplete_details.reason):void 0,f=asStr(e.status),h=_??f;h&&(o.finishReason=h),!o.error&&isObj(e.error)&&(o.error=errorMessage(e));break}case"messages":{const c=[],p=[];for(const f of asArr(e.content)){if(!isObj(f))continue;const h=asStr(f.type);h==="text"?c.push(asStr(f.text)??""):h==="thinking"?p.push(asStr(f.thinking)??""):(h==="tool_use"||h==="server_tool_use"||h==="mcp_tool_use")&&o.toolCalls.push({...asStr(f.id)?{id:asStr(f.id)}:{},name:asStr(f.name)??"tool",arguments:jsonText(f.input)})}o.completion=c.filter(Boolean).join(`
6
+ `));const h=isObj(e.incomplete_details)?asStr(e.incomplete_details.reason):void 0,m=asStr(e.status),k=h??m;k&&(o.finishReason=k),!o.error&&isObj(e.error)&&(o.error=errorMessage(e));break}case"messages":{const c=[],p=[];for(const m of asArr(e.content)){if(!isObj(m))continue;const k=asStr(m.type);k==="text"?c.push(asStr(m.text)??""):k==="thinking"?p.push(asStr(m.thinking)??""):(k==="tool_use"||k==="server_tool_use"||k==="mcp_tool_use")&&o.toolCalls.push({...asStr(m.id)?{id:asStr(m.id)}:{},name:asStr(m.name)??"tool",arguments:jsonText(m.input)})}o.completion=c.filter(Boolean).join(`
7
7
  `),p.length&&(o.reasoning=p.filter(Boolean).join(`
8
- `));const _=asStr(e.stop_reason);_&&(o.finishReason=_);break}case"embeddings":o.vectorCount=asArr(e.data).length;break}return o}d(normalizeResponse,"normalizeResponse"),u(normalizeResponse,"normalizeResponse");function createStreamAccumulator(t){let e="",o=0,a,n,r="",c="",p="",_,f={},h,m;const k=new Map,y=u((i,s)=>{s&&(i==="text"?r.length<MAX_ACCUMULATED_CHARS&&(r+=s):i==="reasoning"?c.length<MAX_ACCUMULATED_CHARS&&(c+=s):p.length<MAX_ACCUMULATED_CHARS&&(p+=s))},"append"),b=u(i=>{let s=k.get(i);return s||(s={name:"",args:""},k.set(i,s)),s},"tool");function $(i){const s=asArr(i.choices).find(isObj),g=s&&isObj(s.delta)?s.delta:void 0;if(g){y("text",asStr(g.content)??""),y("refusal",asStr(g.refusal)??""),y("reasoning",asStr(g.reasoning_content)??asStr(g.reasoning)??"");const x=isObj(g.function_call)?g.function_call:void 0;if(x){const v=b(-1);asStr(x.name)&&(v.name+=asStr(x.name)),asStr(x.arguments)&&(v.args+=asStr(x.arguments))}for(const v of asArr(g.tool_calls)){if(!isObj(v))continue;const T=b(asNum(v.index)??0);asStr(v.id)&&(T.id=asStr(v.id));const C=isObj(v.function)?v.function:{};asStr(C.name)&&(T.name+=asStr(C.name)),asStr(C.arguments)&&(T.args+=asStr(C.arguments))}}const l=asStr(s?.finish_reason);l&&(_=l),isObj(i.usage)&&(f={...f,...mapUsage(i.usage,!1)})}d($,"R"),u($,"onChat");function O(i){const s=asStr(i.type)??"";s==="response.output_text.delta"?y("text",asStr(i.delta)??""):s==="response.completed"||s==="response.incomplete"||s==="response.failed"?m=normalizeResponse(t,i.response):s==="error"&&(h=asStr(i.message)??h)}d(O,"O"),u(O,"onResponses");function R(i){const s=asStr(i.type)??"",g=asNum(i.index)??0;if(s==="message_start"){const l=isObj(i.message)?i.message:{};a=asStr(l.id)??a,n=asStr(l.model)??n,f={...f,...mapUsage(l.usage,!1)}}else if(s==="content_block_start"){const l=isObj(i.content_block)?i.content_block:{};if(asStr(l.type)==="tool_use"||asStr(l.type)==="server_tool_use"||asStr(l.type)==="mcp_tool_use"){const x=b(g);x.id=asStr(l.id),x.name=asStr(l.name)??"tool"}else asStr(l.type)==="text"&&y("text",asStr(l.text)??"")}else if(s==="content_block_delta"){const l=isObj(i.delta)?i.delta:{},x=asStr(l.type);x==="text_delta"?y("text",asStr(l.text)??""):x==="thinking_delta"?y("reasoning",asStr(l.thinking)??""):x==="input_json_delta"&&(b(g).args+=asStr(l.partial_json)??"")}else if(s==="message_delta"){const l=isObj(i.delta)?i.delta:{};asStr(l.stop_reason)&&(_=asStr(l.stop_reason)),f={...f,...mapUsage(i.usage,!1)}}else s==="error"&&(h=errorMessage(i)??h)}d(R,"S"),u(R,"onAnthropic");function S(i){o+=1,a=asStr(i.id)??a,n=asStr(i.model)??n,t.api==="messages"?R(i):t.api==="responses"?O(i):$(i);const s=t.api==="messages"?void 0:errorMessage(i);s&&(h=s)}d(S,"b"),u(S,"onEvent");function A(i){const s=[];for(const l of i.split(`
8
+ `));const h=asStr(e.stop_reason);h&&(o.finishReason=h);break}case"embeddings":o.vectorCount=asArr(e.data).length;break}return o}_(normalizeResponse,"normalizeResponse"),d(normalizeResponse,"normalizeResponse"),u(normalizeResponse,"normalizeResponse");function createStreamAccumulator(t){let e="",o=0,a,n,i="",c="",p="",h,m={},k,f;const y=new Map,v=u((r,s)=>{s&&(r==="text"?i.length<MAX_ACCUMULATED_CHARS&&(i+=s):r==="reasoning"?c.length<MAX_ACCUMULATED_CHARS&&(c+=s):p.length<MAX_ACCUMULATED_CHARS&&(p+=s))},"append"),C=u(r=>{let s=y.get(r);return s||(s={name:"",args:""},y.set(r,s)),s},"tool");function $(r){const s=asArr(r.choices).find(isObj),g=s&&isObj(s.delta)?s.delta:void 0;if(g){v("text",asStr(g.content)??""),v("refusal",asStr(g.refusal)??""),v("reasoning",asStr(g.reasoning_content)??asStr(g.reasoning)??"");const x=isObj(g.function_call)?g.function_call:void 0;if(x){const b=C(-1);asStr(x.name)&&(b.name+=asStr(x.name)),asStr(x.arguments)&&(b.args+=asStr(x.arguments))}for(const b of asArr(g.tool_calls)){if(!isObj(b))continue;const w=C(asNum(b.index)??0);asStr(b.id)&&(w.id=asStr(b.id));const T=isObj(b.function)?b.function:{};asStr(T.name)&&(w.name+=asStr(T.name)),asStr(T.arguments)&&(w.args+=asStr(T.arguments))}}const l=asStr(s?.finish_reason);l&&(h=l),isObj(r.usage)&&(m={...m,...mapUsage(r.usage,!1)})}_($,"$"),d($,"R"),u($,"onChat");function O(r){const s=asStr(r.type)??"";s==="response.output_text.delta"?v("text",asStr(r.delta)??""):s==="response.completed"||s==="response.incomplete"||s==="response.failed"?f=normalizeResponse(t,r.response):s==="error"&&(k=asStr(r.message)??k)}_(O,"O"),d(O,"O"),u(O,"onResponses");function R(r){const s=asStr(r.type)??"",g=asNum(r.index)??0;if(s==="message_start"){const l=isObj(r.message)?r.message:{};a=asStr(l.id)??a,n=asStr(l.model)??n,m={...m,...mapUsage(l.usage,!1)}}else if(s==="content_block_start"){const l=isObj(r.content_block)?r.content_block:{};if(asStr(l.type)==="tool_use"||asStr(l.type)==="server_tool_use"||asStr(l.type)==="mcp_tool_use"){const x=C(g);x.id=asStr(l.id),x.name=asStr(l.name)??"tool"}else asStr(l.type)==="text"&&v("text",asStr(l.text)??"")}else if(s==="content_block_delta"){const l=isObj(r.delta)?r.delta:{},x=asStr(l.type);x==="text_delta"?v("text",asStr(l.text)??""):x==="thinking_delta"?v("reasoning",asStr(l.thinking)??""):x==="input_json_delta"&&(C(g).args+=asStr(l.partial_json)??"")}else if(s==="message_delta"){const l=isObj(r.delta)?r.delta:{};asStr(l.stop_reason)&&(h=asStr(l.stop_reason)),m={...m,...mapUsage(r.usage,!1)}}else s==="error"&&(k=errorMessage(r)??k)}_(R,"R"),d(R,"S"),u(R,"onAnthropic");function S(r){o+=1,a=asStr(r.id)??a,n=asStr(r.model)??n,t.api==="messages"?R(r):t.api==="responses"?O(r):$(r);const s=t.api==="messages"?void 0:errorMessage(r);s&&(k=s)}_(S,"S"),d(S,"b"),u(S,"onEvent");function A(r){const s=[];for(const l of r.split(`
9
9
  `))l.startsWith("data:")&&s.push(l.slice(5).replace(/^ /,""));if(!s.length)return;const g=s.join(`
10
- `);if(g!=="[DONE]")try{const l=JSON.parse(g);isObj(l)&&S(l)}catch{}}return d(A,"$"),u(A,"parseEvent"),{push(i){e=(e+i).replace(/\r\n/g,`
10
+ `);if(g!=="[DONE]")try{const l=JSON.parse(g);isObj(l)&&S(l)}catch{}}return _(A,"A"),d(A,"$"),u(A,"parseEvent"),{push(r){e=(e+r).replace(/\r\n/g,`
11
11
  `);let s=e.indexOf(`
12
12
 
13
13
  `);for(;s!==-1;)A(e.slice(0,s)),e=e.slice(s+2),s=e.indexOf(`
14
14
 
15
- `);e.length>MAX_EVENT_BUFFER_CHARS&&(e="")},end(){e.trim()&&A(e),e="";const i=[...k.entries()].sort((g,l)=>g[0]-l[0]).map(([,g])=>({...g.id?{id:g.id}:{},name:g.name||"tool",...g.args?{arguments:g.args}:{}})),s={...a?{id:a}:{},...n?{model:n}:{},completion:p?`${r}${r?`
16
- `:""}[refusal] ${p}`:r,...c?{reasoning:c}:{},toolCalls:i,..._?{finishReason:_}:{},usage:withTotal(f),...h?{error:h}:{}};return m?{...s,...m,completion:m.completion||s.completion,toolCalls:m.toolCalls.length?m.toolCalls:s.toolCalls,usage:{...s.usage,...m.usage}}:s},get eventCount(){return o}}}d(createStreamAccumulator,"createStreamAccumulator"),u(createStreamAccumulator,"createStreamAccumulator");
15
+ `);e.length>MAX_EVENT_BUFFER_CHARS&&(e="")},end(){e.trim()&&A(e),e="";const r=[...y.entries()].sort((g,l)=>g[0]-l[0]).map(([,g])=>({...g.id?{id:g.id}:{},name:g.name||"tool",...g.args?{arguments:g.args}:{}})),s={...a?{id:a}:{},...n?{model:n}:{},completion:p?`${i}${i?`
16
+ `:""}[refusal] ${p}`:i,...c?{reasoning:c}:{},toolCalls:r,...h?{finishReason:h}:{},usage:withTotal(m),...k?{error:k}:{}};return f?{...s,...f,completion:f.completion||s.completion,toolCalls:f.toolCalls.length?f.toolCalls:s.toolCalls,usage:{...s.usage,...f.usage}}:s},get eventCount(){return o}}}_(createStreamAccumulator,"createStreamAccumulator"),d(createStreamAccumulator,"createStreamAccumulator"),u(createStreamAccumulator,"createStreamAccumulator");
package/lib/ai-store.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { type AiCallContent } from '@lensmcp/core/ai-content';
2
- export declare function redactAiText(text: string): string;
2
+ import { redactSecretText } from '@lensmcp/core/redact';
3
+ /** The secret shapes a prompt is liable to quote — one rule with the other side files (`@lensmcp/core/redact`). */
4
+ export declare const redactAiText: typeof redactSecretText;
3
5
  /** Time-ordered so a lexical sort is a chronological one; matches `isAiCallId`. */
4
6
  export declare function newAiCallId(): string;
5
7
  /** Shrink until the serialised record fits the per-call budget. Never returns something over it. */
package/lib/ai-store.js CHANGED
@@ -1 +1 @@
1
- "use strict";var p=Object.defineProperty;var u=(e,n)=>p(e,"name",{value:n,configurable:!0});var f=Object.defineProperty,i=u((e,n)=>f(e,"name",{value:n,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.redactAiText=redactAiText,exports.newAiCallId=newAiCallId,exports.fitAiContent=fitAiContent,exports.removeAiContent=removeAiContent,exports.writeAiContent=writeAiContent;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),ai_content_1=require("@lensmcp/core/ai-content"),redact_1=require("@lensmcp/core/redact"),emit_1=require("./emit"),mkdirSync=nodeFs.mkdirSync,writeFileSync=nodeFs.writeFileSync,renameSync=nodeFs.renameSync,readdirSync=nodeFs.readdirSync,unlinkSync=nodeFs.unlinkSync,AI_SECRET_PATTERNS=[/\bsk-(?:ant-|proj-|live-|test-)?[A-Za-z0-9_-]{20,}/g,/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,/\bgh[pousr]_[A-Za-z0-9]{30,}/g,/\bxox[abprs]-[A-Za-z0-9-]{10,}/g,/\bAIza[0-9A-Za-z_-]{35}\b/g],PEM_BEGIN="-----BEGIN ",PEM_UNTERMINATED_BODY_CHARS=4096;function redactPrivateKeys(e){if(!e.includes("PRIVATE KEY-----"))return e;let n="",t=0,r=!1;for(;;){const o=e.indexOf(PEM_BEGIN,t);if(o===-1)break;const s=e.indexOf("-----",o+PEM_BEGIN.length);if(s===-1)break;const d=e.slice(o+PEM_BEGIN.length,s);if(!/^[A-Z ]{0,30}PRIVATE KEY$/.test(d)){n+=e.slice(t,s+5),t=s+5;continue}n+=e.slice(t,o);const c=r?-1:e.indexOf("-----END ",s+5);let l;if(c===-1)r=!0,l=Math.min(e.length,s+5+PEM_UNTERMINATED_BODY_CHARS);else{const a=e.indexOf("-----",c+9);l=a===-1?e.length:a+5}n+=redact_1.REDACTED,t=l}return n+e.slice(t)}u(redactPrivateKeys,"redactPrivateKeys"),i(redactPrivateKeys,"redactPrivateKeys");const JSON_PAIR_RE=/"([A-Za-z0-9_.-]{1,64})"\s*:\s*"((?:[^"\\]|\\.){1,8192})"/g,ASSIGNMENT_RE=/\b([A-Za-z][A-Za-z0-9_-]{1,40})(\s*[:=]\s*)([^\s"'`,;&)}\]]{8,200})/g,CREDENTIAL_NAME_RE=/(token|secret|pass(?:word|wd)?|pwd|api[-_]?key|apikey|credential|authorization|bearer)/i;function redactStructured(e){return e.replace(JSON_PAIR_RE,(n,t)=>(0,redact_1.isSecretParam)(t)?`"${t}": "${redact_1.REDACTED}"`:n).replace(ASSIGNMENT_RE,(n,t,r)=>CREDENTIAL_NAME_RE.test(t)&&(0,redact_1.isSecretParam)(t)?`${t}${r}${redact_1.REDACTED}`:n)}u(redactStructured,"redactStructured"),i(redactStructured,"redactStructured");function redactAiText(e){let n=redactStructured((0,redact_1.redactText)(redactPrivateKeys(e)));for(const t of AI_SECRET_PATTERNS)n=n.replace(t,redact_1.REDACTED);return n}u(redactAiText,"redactAiText"),i(redactAiText,"redactAiText");const intEnv=i((e,n,t,r)=>{const o=Number(process.env[e]);return Number.isFinite(o)&&o>=t&&o<=r?Math.floor(o):n},"intEnv"),maxFieldChars=i(()=>intEnv("LENSMCP_AI_MAX_CHARS",32*1024,256,4*1024*1024),"maxFieldChars"),maxFileBytes=i(()=>intEnv("LENSMCP_AI_MAX_BYTES",256*1024,4*1024,16*1024*1024),"maxFileBytes"),maxFiles=i(()=>intEnv("LENSMCP_AI_MAX_FILES",200,1,1e4),"maxFiles");function newAiCallId(){const e=Date.now().toString(36).padStart(9,"0"),n=Math.random().toString(36).slice(2,8).padEnd(6,"0");return`ai_${e}${n}`}u(newAiCallId,"newAiCallId"),i(newAiCallId,"newAiCallId");const PRE_CLIP_FACTOR=4,MAX_MESSAGES=400;function sanitize(e,n){const t={cut:e.truncated===!0},r=i((s,d=n)=>{if(s===void 0)return;const c=d*PRE_CLIP_FACTOR;let l=s;return l.length>c&&(t.cut=!0,l=l.slice(0,c)),redactAiText(l)},"clean"),o={...e,request:{...e.request,...e.request.system!==void 0?{system:r(e.request.system)}:{},messages:e.request.messages.slice(0,MAX_MESSAGES*4).map(s=>({role:s.role,content:r(s.content)})),...e.request.tools?{tools:e.request.tools.map(s=>({name:r(s.name,200),...s.description?{description:r(s.description,512)}:{}}))}:{}},...e.response?{response:{...e.response,...e.response.completion!==void 0?{completion:r(e.response.completion)}:{},...e.response.reasoning!==void 0?{reasoning:r(e.response.reasoning)}:{},...e.response.error!==void 0?{error:r(e.response.error,2048)}:{},...e.response.toolCalls?{toolCalls:e.response.toolCalls.map(s=>({...s.id?{id:s.id}:{},name:r(s.name,200),...s.arguments!==void 0?{arguments:r(s.arguments,8192)}:{}}))}:{}}}:{}};return e.request.messages.length>MAX_MESSAGES*4&&(t.cut=!0),t.cut&&(o.truncated=!0),o}u(sanitize,"sanitize"),i(sanitize,"sanitize");function clipTo(e,n,t){const r={cut:e.truncated===!0},o=i((a,m=n)=>{if(a!==void 0)return a.length>m&&(r.cut=!0),(0,redact_1.clip)(a,m)},"c"),s=e.request.messages;let d=s;if(s.length>t){const a=Math.min(2,t);d=[...s.slice(0,a),...s.slice(s.length-(t-a))],r.cut=!0}const c=e.response,l={...e,request:{...e.request,...e.request.system!==void 0?{system:o(e.request.system)}:{},messages:d.map(a=>({role:a.role,content:o(a.content)}))},...c?{response:{...c,...c.completion!==void 0?{completion:o(c.completion)}:{},...c.reasoning!==void 0?{reasoning:o(c.reasoning)}:{},...c.toolCalls?{toolCalls:c.toolCalls.map(a=>({...a,...a.arguments!==void 0?{arguments:o(a.arguments,Math.min(n,8192))}:{}}))}:{}}}:{}};return r.cut?l.truncated=!0:delete l.truncated,l}u(clipTo,"clipTo"),i(clipTo,"clipTo");function fitAiContent(e){const n=maxFileBytes();let t=maxFieldChars(),r=MAX_MESSAGES;const o=sanitize(e,t);let s=clipTo(o,t,r),d=JSON.stringify(s);for(;d.length>n&&(t>256||r>2);)t>256?t=Math.max(256,Math.floor(t/2)):r=Math.max(2,Math.floor(r/2)),s=clipTo(o,t,r),d=JSON.stringify(s);return{json:d,content:s}}u(fitAiContent,"fitAiContent"),i(fitAiContent,"fitAiContent");let writes=0;function prune(e){try{const n=readdirSync(e).filter(r=>/^ai_[0-9a-z]+\.json$/.test(r)).sort(),t=n.length-maxFiles();for(let r=0;r<t;r+=1)try{unlinkSync(`${e}/${n[r]}`)}catch{}}catch{}}u(prune,"prune"),i(prune,"prune");function removeAiContent(e){try{unlinkSync((0,ai_content_1.aiContentFile)(emit_1.EVENT_FILE,e))}catch{}}u(removeAiContent,"removeAiContent"),i(removeAiContent,"removeAiContent");function writeAiContent(e){try{const n=(0,ai_content_1.aiContentDir)(emit_1.EVENT_FILE);mkdirSync(n,{recursive:!0,mode:448});const{json:t,content:r}=fitAiContent(e),o=`${n}/${e.id}.json`;return writeFileSync(`${o}.tmp`,t,{mode:384}),renameSync(`${o}.tmp`,o),writes+=1,(writes===1||writes%20===0)&&prune(n),{id:e.id,truncated:r.truncated===!0}}catch{return}}u(writeAiContent,"writeAiContent"),i(writeAiContent,"writeAiContent");
1
+ "use strict";var A=Object.defineProperty;var u=(e,r)=>A(e,"name",{value:r,configurable:!0});var g=Object.defineProperty,l=u((e,r)=>g(e,"name",{value:r,configurable:!0}),"l"),m=Object.defineProperty,i=l((e,r)=>m(e,"name",{value:r,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.redactAiText=void 0,exports.newAiCallId=newAiCallId,exports.fitAiContent=fitAiContent,exports.removeAiContent=removeAiContent,exports.writeAiContent=writeAiContent;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),ai_content_1=require("@lensmcp/core/ai-content"),redact_1=require("@lensmcp/core/redact"),emit_1=require("./emit"),mkdirSync=nodeFs.mkdirSync,writeFileSync=nodeFs.writeFileSync,renameSync=nodeFs.renameSync,readdirSync=nodeFs.readdirSync,unlinkSync=nodeFs.unlinkSync;exports.redactAiText=redact_1.redactSecretText;const intEnv=i((e,r,o,t)=>{const s=Number(process.env[e]);return Number.isFinite(s)&&s>=o&&s<=t?Math.floor(s):r},"intEnv"),maxFieldChars=i(()=>intEnv("LENSMCP_AI_MAX_CHARS",32*1024,256,4*1024*1024),"maxFieldChars"),maxFileBytes=i(()=>intEnv("LENSMCP_AI_MAX_BYTES",256*1024,4*1024,16*1024*1024),"maxFileBytes"),maxFiles=i(()=>intEnv("LENSMCP_AI_MAX_FILES",200,1,1e4),"maxFiles");function newAiCallId(){const e=Date.now().toString(36).padStart(9,"0"),r=Math.random().toString(36).slice(2,8).padEnd(6,"0");return`ai_${e}${r}`}u(newAiCallId,"newAiCallId"),l(newAiCallId,"newAiCallId"),i(newAiCallId,"newAiCallId");const PRE_CLIP_FACTOR=4,MAX_MESSAGES=400;function sanitize(e,r){const o={cut:e.truncated===!0},t=i((n,d=r)=>{if(n===void 0)return;const c=d*PRE_CLIP_FACTOR;let p=n;return p.length>c&&(o.cut=!0,p=p.slice(0,c)),(0,exports.redactAiText)(p)},"clean"),s={...e,request:{...e.request,...e.request.system!==void 0?{system:t(e.request.system)}:{},messages:e.request.messages.slice(0,MAX_MESSAGES*4).map(n=>({role:n.role,content:t(n.content)})),...e.request.tools?{tools:e.request.tools.map(n=>({name:t(n.name,200),...n.description?{description:t(n.description,512)}:{}}))}:{}},...e.response?{response:{...e.response,...e.response.completion!==void 0?{completion:t(e.response.completion)}:{},...e.response.reasoning!==void 0?{reasoning:t(e.response.reasoning)}:{},...e.response.error!==void 0?{error:t(e.response.error,2048)}:{},...e.response.toolCalls?{toolCalls:e.response.toolCalls.map(n=>({...n.id?{id:n.id}:{},name:t(n.name,200),...n.arguments!==void 0?{arguments:t(n.arguments,8192)}:{}}))}:{}}}:{}};return e.request.messages.length>MAX_MESSAGES*4&&(o.cut=!0),o.cut&&(s.truncated=!0),s}u(sanitize,"sanitize"),l(sanitize,"sanitize"),i(sanitize,"sanitize");function clipTo(e,r,o){const t={cut:e.truncated===!0},s=i((a,C=r)=>{if(a!==void 0)return a.length>C&&(t.cut=!0),(0,redact_1.clip)(a,C)},"c"),n=e.request.messages;let d=n;if(n.length>o){const a=Math.min(2,o);d=[...n.slice(0,a),...n.slice(n.length-(o-a))],t.cut=!0}const c=e.response,p={...e,request:{...e.request,...e.request.system!==void 0?{system:s(e.request.system)}:{},messages:d.map(a=>({role:a.role,content:s(a.content)}))},...c?{response:{...c,...c.completion!==void 0?{completion:s(c.completion)}:{},...c.reasoning!==void 0?{reasoning:s(c.reasoning)}:{},...c.toolCalls?{toolCalls:c.toolCalls.map(a=>({...a,...a.arguments!==void 0?{arguments:s(a.arguments,Math.min(r,8192))}:{}}))}:{}}}:{}};return t.cut?p.truncated=!0:delete p.truncated,p}u(clipTo,"clipTo"),l(clipTo,"clipTo"),i(clipTo,"clipTo");function fitAiContent(e){const r=maxFileBytes();let o=maxFieldChars(),t=MAX_MESSAGES;const s=sanitize(e,o);let n=clipTo(s,o,t),d=JSON.stringify(n);for(;d.length>r&&(o>256||t>2);)o>256?o=Math.max(256,Math.floor(o/2)):t=Math.max(2,Math.floor(t/2)),n=clipTo(s,o,t),d=JSON.stringify(n);return{json:d,content:n}}u(fitAiContent,"fitAiContent"),l(fitAiContent,"fitAiContent"),i(fitAiContent,"fitAiContent");let writes=0;function prune(e){try{const r=readdirSync(e).filter(t=>/^ai_[0-9a-z]+\.json$/.test(t)).sort(),o=r.length-maxFiles();for(let t=0;t<o;t+=1)try{unlinkSync(`${e}/${r[t]}`)}catch{}}catch{}}u(prune,"prune"),l(prune,"prune"),i(prune,"prune");function removeAiContent(e){try{unlinkSync((0,ai_content_1.aiContentFile)(emit_1.EVENT_FILE,e))}catch{}}u(removeAiContent,"removeAiContent"),l(removeAiContent,"removeAiContent"),i(removeAiContent,"removeAiContent");function writeAiContent(e){try{const r=(0,ai_content_1.aiContentDir)(emit_1.EVENT_FILE);mkdirSync(r,{recursive:!0,mode:448});const{json:o,content:t}=fitAiContent(e),s=`${r}/${e.id}.json`;return writeFileSync(`${s}.tmp`,o,{mode:384}),renameSync(`${s}.tmp`,s),writes+=1,(writes===1||writes%20===0)&&prune(r),{id:e.id,truncated:t.truncated===!0}}catch{return}}u(writeAiContent,"writeAiContent"),l(writeAiContent,"writeAiContent"),i(writeAiContent,"writeAiContent");
package/lib/callsite.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var a=(s,e)=>l(s,"name",{value:e,configurable:!0});var f=Object.defineProperty,c=a((s,e)=>f(s,"name",{value:e,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.SiteSampler=exports.siteKey=exports.FRAMES_KEPT=void 0,exports.captureSite=captureSite,exports.parseFrame=parseFrame,exports.appSite=appSite;const node_path_1=require("node:path"),node_url_1=require("node:url"),CAPTURE_LIMIT=40;exports.FRAMES_KEPT=3;const OFF=process.env.LENSMCP_CALLSITES==="0",OWN=__dirname,CWD=process.cwd();function captureSite(){if(OFF)return;const s={},e=Error.stackTraceLimit;try{Error.stackTraceLimit=CAPTURE_LIMIT,Error.captureStackTrace(s,captureSite)}catch{return}finally{try{Error.stackTraceLimit=e}catch{}}return s}a(captureSite,"captureSite"),c(captureSite,"captureSite");const FRAME=/^\s*at (?:async )?(?:(.+?) \((.+)\)|(.+))$/,LOCATION=/^(.*):(\d+):(\d+)$/;function parseFrame(s,e=CWD,n=OWN){const i=FRAME.exec(s);if(!i)return;const t=i[2]??i[3]??"";if(t.startsWith("eval at ")||t.includes("<anonymous>"))return;const o=LOCATION.exec(t);if(!o)return;let r=o[1];if(r.startsWith("file://"))try{r=(0,node_url_1.fileURLToPath)(r)}catch{return}if(!(0,node_path_1.isAbsolute)(r)||r.includes(`${node_path_1.sep}node_modules${node_path_1.sep}`)||r===n||r.startsWith(n+node_path_1.sep))return;const u=functionName(i[1]);return{file:r.startsWith(e+node_path_1.sep)?(0,node_path_1.relative)(e,r):r,line:Number(o[2]),column:Number(o[3]),...u?{fn:u}:{}}}a(parseFrame,"parseFrame"),c(parseFrame,"parseFrame");function functionName(s){if(!s)return;let e=s.replace(/^new /,"");const n=/ \[as ([^\]]+)\]$/.exec(e);if(n&&(e=/(?:^|\.)(?:eval|<anonymous>)$/.test(e.slice(0,n.index))?n[1]:e.slice(0,n.index)),!(e==="eval"||e.includes("<anonymous>")||e==="Object.eval"))return e}a(functionName,"functionName"),c(functionName,"functionName");function appSite(s,e=CWD,n=OWN){const i=s?.stack;if(!i)return;const t=[];for(const o of i.split(`
2
- `).slice(1)){const r=parseFrame(o,e,n);if(r&&(t.push(r),t.length>=exports.FRAMES_KEPT))break}if(t.length)return{frames:t,mapped:process.sourceMapsEnabled===!0}}a(appSite,"appSite"),c(appSite,"appSite");const siteKey=c(s=>`${s.frames[0].file}:${s.frames[0].line}`,"siteKey");exports.siteKey=siteKey;const FIRST_RUNS=5,EVERY=20,RESEND_MS=10*6e4,MAX_KEYS=2e3,MAX_SITES_PER_KEY=20;class SiteSampler{static{a(this,"SiteSampler")}static{c(this,"SiteSampler")}constructor(e={}){this.opts=e,this.keys=new Map}site(e,n,i={}){if(!n&&!i.fallback)return;let t=this.keys.get(e);if(t||(t={runs:0,sent:new Map},this.keys.set(e,t),this.keys.size>MAX_KEYS&&this.keys.delete(this.keys.keys().next().value)),t.runs+=1,!i.force&&t.runs>FIRST_RUNS&&t.runs%EVERY!==0)return;const o=appSite(n,this.opts.cwd,this.opts.own)??appSite(i.fallback,this.opts.cwd,this.opts.own);if(!o)return;const r=(this.opts.now??Date.now)(),u=(0,exports.siteKey)(o),p=t.sent.get(u);if(!(!i.force&&p!==void 0&&r-p<RESEND_MS))return t.sent.delete(u),t.sent.set(u,r),t.sent.size>MAX_SITES_PER_KEY&&t.sent.delete(t.sent.keys().next().value),o}}exports.SiteSampler=SiteSampler;
1
+ "use strict";var m=Object.defineProperty;var u=(s,e)=>m(s,"name",{value:e,configurable:!0});var l=Object.defineProperty,a=u((s,e)=>l(s,"name",{value:e,configurable:!0}),"a"),f=Object.defineProperty,c=a((s,e)=>f(s,"name",{value:e,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.SiteSampler=exports.siteKey=exports.FRAMES_KEPT=void 0,exports.captureSite=captureSite,exports.parseFrame=parseFrame,exports.appSite=appSite;const node_path_1=require("node:path"),node_url_1=require("node:url"),CAPTURE_LIMIT=40;exports.FRAMES_KEPT=3;const OFF=process.env.LENSMCP_CALLSITES==="0",OWN=__dirname,CWD=process.cwd();function captureSite(){if(OFF)return;const s={},e=Error.stackTraceLimit;try{Error.stackTraceLimit=CAPTURE_LIMIT,Error.captureStackTrace(s,captureSite)}catch{return}finally{try{Error.stackTraceLimit=e}catch{}}return s}u(captureSite,"captureSite"),a(captureSite,"captureSite"),c(captureSite,"captureSite");const FRAME=/^\s*at (?:async )?(?:(.+?) \((.+)\)|(.+))$/,LOCATION=/^(.*):(\d+):(\d+)$/;function parseFrame(s,e=CWD,n=OWN){const i=FRAME.exec(s);if(!i)return;const t=i[2]??i[3]??"";if(t.startsWith("eval at ")||t.includes("<anonymous>"))return;const o=LOCATION.exec(t);if(!o)return;let r=o[1];if(r.startsWith("file://"))try{r=(0,node_url_1.fileURLToPath)(r)}catch{return}if(!(0,node_path_1.isAbsolute)(r)||r.includes(`${node_path_1.sep}node_modules${node_path_1.sep}`)||r===n||r.startsWith(n+node_path_1.sep))return;const p=functionName(i[1]);return{file:r.startsWith(e+node_path_1.sep)?(0,node_path_1.relative)(e,r):r,line:Number(o[2]),column:Number(o[3]),...p?{fn:p}:{}}}u(parseFrame,"parseFrame"),a(parseFrame,"parseFrame"),c(parseFrame,"parseFrame");function functionName(s){if(!s)return;let e=s.replace(/^new /,"");const n=/ \[as ([^\]]+)\]$/.exec(e);if(n&&(e=/(?:^|\.)(?:eval|<anonymous>)$/.test(e.slice(0,n.index))?n[1]:e.slice(0,n.index)),!(e==="eval"||e.includes("<anonymous>")||e==="Object.eval"))return e}u(functionName,"functionName"),a(functionName,"functionName"),c(functionName,"functionName");function appSite(s,e=CWD,n=OWN){const i=s?.stack;if(!i)return;const t=[];for(const o of i.split(`
2
+ `).slice(1)){const r=parseFrame(o,e,n);if(r&&(t.push(r),t.length>=exports.FRAMES_KEPT))break}if(t.length)return{frames:t,mapped:process.sourceMapsEnabled===!0}}u(appSite,"appSite"),a(appSite,"appSite"),c(appSite,"appSite");const siteKey=c(s=>`${s.frames[0].file}:${s.frames[0].line}`,"siteKey");exports.siteKey=siteKey;const FIRST_RUNS=5,EVERY=20,RESEND_MS=10*6e4,MAX_KEYS=2e3,MAX_SITES_PER_KEY=20;class SiteSampler{static{u(this,"SiteSampler")}static{a(this,"SiteSampler")}static{c(this,"SiteSampler")}constructor(e={}){this.opts=e,this.keys=new Map}site(e,n,i={}){if(!n&&!i.fallback)return;let t=this.keys.get(e);if(t||(t={runs:0,sent:new Map},this.keys.set(e,t),this.keys.size>MAX_KEYS&&this.keys.delete(this.keys.keys().next().value)),t.runs+=1,!i.force&&t.runs>FIRST_RUNS&&t.runs%EVERY!==0)return;const o=appSite(n,this.opts.cwd,this.opts.own)??appSite(i.fallback,this.opts.cwd,this.opts.own);if(!o)return;const r=(this.opts.now??Date.now)(),p=(0,exports.siteKey)(o),S=t.sent.get(p);if(!(!i.force&&S!==void 0&&r-S<RESEND_MS))return t.sent.delete(p),t.sent.set(p,r),t.sent.size>MAX_SITES_PER_KEY&&t.sent.delete(t.sent.keys().next().value),o}}exports.SiteSampler=SiteSampler;
@@ -1,4 +1,9 @@
1
1
  export declare const captureFile: () => string;
2
2
  /** Whether Settings › Features asks for AI providers' bodies to be kept, as of at most 5 s ago. */
3
3
  export declare function aiBodiesAsked(now?: number): boolean;
4
+ /**
5
+ * Whether every value of a SQL run is kept beside the bus (`{ "sql": "off" }` turns it off; on otherwise — the owner's
6
+ * D8). `LENSMCP_SQL_VALUES=0` in a service's env turns it off there.
7
+ */
8
+ export declare function sqlValuesAsked(now?: number, env?: Record<string, string | undefined>): boolean;
4
9
  export declare function resetCaptureFileForTests(): void;
@@ -1 +1 @@
1
- "use strict";var o=Object.defineProperty;var a=(e,t)=>o(e,"name",{value:t,configurable:!0});var i=Object.defineProperty,r=a((e,t)=>i(e,"name",{value:t,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.captureFile=void 0,exports.aiBodiesAsked=aiBodiesAsked,exports.resetCaptureFileForTests=resetCaptureFileForTests;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_path_1=require("node:path"),emit_1=require("./emit"),statSync=nodeFs.statSync,readFileSync=nodeFs.readFileSync,EVERY_MS=5e3;let last;const captureFile=r(()=>(0,node_path_1.join)((0,node_path_1.dirname)(emit_1.EVENT_FILE),"capture.json"),"captureFile");exports.captureFile=captureFile;function aiBodiesAsked(e=Date.now()){if(last&&e-last.at<EVERY_MS)return last.ai;let t=-1;try{t=statSync((0,exports.captureFile)()).mtimeMs}catch{return last={at:e,mtimeMs:-1,ai:!1},!1}if(last&&last.mtimeMs===t)return last={...last,at:e},last.ai;let s=!1;try{s=JSON.parse(readFileSync((0,exports.captureFile)(),"utf8")).ai==="content"}catch{}return last={at:e,mtimeMs:t,ai:s},s}a(aiBodiesAsked,"aiBodiesAsked"),r(aiBodiesAsked,"aiBodiesAsked");function resetCaptureFileForTests(){last=void 0}a(resetCaptureFileForTests,"resetCaptureFileForTests"),r(resetCaptureFileForTests,"resetCaptureFileForTests");
1
+ "use strict";var c=Object.defineProperty;var a=(e,t)=>c(e,"name",{value:t,configurable:!0});var u=Object.defineProperty,i=a((e,t)=>u(e,"name",{value:t,configurable:!0}),"i"),n=Object.defineProperty,r=i((e,t)=>n(e,"name",{value:t,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.captureFile=void 0,exports.aiBodiesAsked=aiBodiesAsked,exports.sqlValuesAsked=sqlValuesAsked,exports.resetCaptureFileForTests=resetCaptureFileForTests;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_path_1=require("node:path"),emit_1=require("./emit"),statSync=nodeFs.statSync,readFileSync=nodeFs.readFileSync,EVERY_MS=5e3;let last;const captureFile=r(()=>(0,node_path_1.join)((0,node_path_1.dirname)(emit_1.EVENT_FILE),"capture.json"),"captureFile");exports.captureFile=captureFile;function asked(e){if(last&&e-last.at<EVERY_MS)return last;let t;try{t=statSync((0,exports.captureFile)()).mtimeMs}catch{return last={at:e,mtimeMs:-1,ai:!1,sql:!0},last}if(last&&last.mtimeMs===t)return last={...last,at:e},last;let s=!1,o=!0;try{const l=JSON.parse(readFileSync((0,exports.captureFile)(),"utf8"));s=l.ai==="content",o=l.sql!=="off"}catch{}return last={at:e,mtimeMs:t,ai:s,sql:o},last}a(asked,"asked"),i(asked,"asked"),r(asked,"asked");function aiBodiesAsked(e=Date.now()){return asked(e).ai}a(aiBodiesAsked,"aiBodiesAsked"),i(aiBodiesAsked,"aiBodiesAsked"),r(aiBodiesAsked,"aiBodiesAsked");function sqlValuesAsked(e=Date.now(),t=process.env){const s=t.LENSMCP_SQL_VALUES?.trim().toLowerCase();return s==="0"||s==="off"||s==="false"?!1:asked(e).sql}a(sqlValuesAsked,"sqlValuesAsked"),i(sqlValuesAsked,"sqlValuesAsked"),r(sqlValuesAsked,"sqlValuesAsked");function resetCaptureFileForTests(){last=void 0}a(resetCaptureFileForTests,"resetCaptureFileForTests"),i(resetCaptureFileForTests,"resetCaptureFileForTests"),r(resetCaptureFileForTests,"resetCaptureFileForTests");
@@ -1 +1 @@
1
- "use strict";var O=Object.defineProperty;var d=(t,e)=>O(t,"name",{value:e,configurable:!0});var C=Object.defineProperty,c=d((t,e)=>C(t,"name",{value:e,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.EMIT_CUSTOM=void 0,exports.emitCustomHere=emitCustomHere,exports.installCustomEmit=installCustomEmit,exports.lensEmitCustom=lensEmitCustom;const protocol_types_1=require("@lensmcp/protocol-types"),emit_1=require("./emit"),flood_guard_1=require("./flood-guard"),flow_context_1=require("./flow-context");exports.EMIT_CUSTOM=Symbol.for("lensmcp.emitCustom");const ITEM_MAX=200,ERROR_MAX=500,NAME_RE=/^[^\u0000-\u001f\u007f]{1,100}$/,customGuard=(0,flood_guard_1.createEventFloodGuard)({burst:30,perSec:5}),CHANNEL_BUCKETS_PER_SOURCE=protocol_types_1.TRAFFIC_PUSH_CHANNELS,CHANNEL_BUCKETS_MAX=1e3,channelBuckets=new Map;let channelBucketCount=0;function trafficBucket(t,e,o,f){const s=`custom:${emit_1.PROJECT}:traffic:${t}:${e}`,r=channelBuckets.get(t);return r?.has(o)?`${s}:${o}`:(r?.size??0)<CHANNEL_BUCKETS_PER_SOURCE&&channelBucketCount<CHANNEL_BUCKETS_MAX?(r?r.add(o):channelBuckets.set(t,new Set([o])),channelBucketCount++,`${s}:${o}`):(say(channelBucketCount>=CHANNEL_BUCKETS_MAX?`${f}: ${CHANNEL_BUCKETS_MAX} channels already have a flood bucket in this process \u2014 this source's further channels share one`:`${f}: more than ${CHANNEL_BUCKETS_PER_SOURCE} channels \u2014 its further channels share one flood bucket (is a channel minted per message?)`),s)}d(trafficBucket,"trafficBucket"),c(trafficBucket,"trafficBucket");const SAID_MAX=50,said=new Set;function refuse(t){return say(`${t} \u2014 not written`),!1}d(refuse,"refuse"),c(refuse,"refuse");function say(t){try{if(said.has(t)||said.size>=SAID_MAX)return;said.add(t);const e=said.size===SAID_MAX?" (further problems with lensEmitCustom are not said)":"";console.warn(`[lensmcp] lensEmitCustom: ${t}${e}`)}catch{}}d(say,"say"),c(say,"say");function shown(t){return typeof t=="string"?JSON.stringify(t.length>40?`${t.slice(0,39)}\u2026`:t):t===null?"null":typeof t}d(shown,"shown"),c(shown,"shown");const isObj=c(t=>typeof t=="object"&&t!==null&&!Array.isArray(t),"isObj"),cut=c((t,e)=>t.length>e?`${t.slice(0,e-1)}\u2026`:t,"cut");function idText(t,e){const o=typeof t=="string"?t:typeof t=="number"&&Number.isFinite(t)||typeof t=="bigint"?String(t):void 0;return o?cut(o,e):void 0}d(idText,"idText"),c(idText,"idText");function errorText(t){const e=typeof t=="string"?t:t instanceof Error?t.message:void 0;return e?cut(e,ERROR_MAX):void 0}d(errorText,"errorText"),c(errorText,"errorText");const oneLine=c((t,e)=>cut(t.replace(/\s+/g," ").trim(),e),"oneLine"),text=c((t,e)=>typeof t=="string"&&t?cut(t,e):void 0,"text");function summary(t,e,o){return`${[t,...e.filter(f=>f!==!1)].join(", ")}${o?` \u2014 ${oneLine(o,120)}`:""}`}d(summary,"summary"),c(summary,"summary");const sized=c(t=>`${String(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")} byte${t===1?"":"s"}`,"sized");function emitCustomHere(t){try{if(!isObj(t))return refuse(`the event is ${shown(t)}, not { kind, name, event }`);const e=t.kind;if(!protocol_types_1.SOURCE_KINDS_READ.includes(e))return refuse(`kind ${shown(e)} is not a source kind (${protocol_types_1.SOURCE_KINDS_READ.join(", ")})`);const o=e,f=t.name;if(typeof f!="string"||!f.trim()||!NAME_RE.test(f))return refuse(`${o} name ${shown(f)} is not 1\u2013100 characters without control characters (the declared source's name)`);const s=`${o} ${JSON.stringify(f)}`,r=t.event,S=protocol_types_1.SOURCE_PUSH_EVENTS[o];if(typeof r!="string"||!S.includes(r))return refuse(`${s}: event ${shown(r)} is not a ${o} event (${S.join(", ")})`);const u={kind:"source-event",provenance:protocol_types_1.SOURCE_PROVENANCE,sourceKind:o,name:f,event:r};let $="info",p=r,_=`custom:${emit_1.PROJECT}:${o}:${f}:${r}`;if(o==="queue"){const i=idText(t.item,ITEM_MAX),n=idText(t.group,ITEM_MAX),a=errorText(t.error);i&&(u.item=i),n&&(u.group=n),a&&(u.error=a),r==="failed"&&($="warning"),p=summary(`${r}${i?` ${oneLine(i,80)}`:""}${n?` \xB7 ${oneLine(n,80)}`:""}`,[],a)}else if(o==="loop"){if(r==="run-end"){const i=t.outcome;if(!isOutcome(o,i))return refuse(`${s}: outcome ${shown(i)} is not a run outcome (${protocol_types_1.SOURCE_PUSH_OUTCOMES.loop.join(", ")})`);const n=count(t.items,s,"items",!1),a=count(t.durationMs,s,"durationMs",!0),l=errorText(t.error);i!==void 0&&(u.outcome=i),n!==void 0&&(u.items=n),a!==void 0&&(u.durationMs=a),l&&(u.error=l),i==="failed"&&($="warning"),p=summary(i?`${r} ${i}`:r,[n!==void 0&&`${n} item${n===1?"":"s"}`,a!==void 0&&`${a} ms`],l)}}else if(o==="store"){const i=idText(t.object,ITEM_MAX),n=idText(t.group,ITEM_MAX),a=r==="write"?count(t.bytes,s,"bytes",!1):void 0,l=count(t.durationMs,s,"durationMs",!0),m=errorText(t.error);i&&(u.object=i),n&&(u.group=n),a!==void 0&&(u.bytes=a),l!==void 0&&(u.durationMs=l),m&&(u.error=m),r==="error"&&($="warning"),p=summary(`${r}${i?` ${oneLine(i,80)}`:""}${n?` \xB7 ${oneLine(n,80)}`:""}`,[a!==void 0&&sized(a),l!==void 0&&`${l} ms`],m)}else{const i=t.channel;if(typeof i!="string"||!i.trim())return refuse(`${s}: channel ${shown(i)} is not a channel \u2014 every traffic event says its channel (the snapshot channel's key)`);const n=t.outcome;if(!isOutcome(o,n))return refuse(`${s}: outcome ${shown(n)} is not a message outcome (${protocol_types_1.SOURCE_PUSH_OUTCOMES.traffic.join(", ")})`);const a=cut(i,ITEM_MAX),l=text(t.counterpart,ITEM_MAX),m=count(t.durationMs,s,"durationMs",!0),y=count(t.bytes,s,"bytes",!1),v=idText(t.correlation,ITEM_MAX),h=errorText(t.error);u.channel=a,l&&(u.counterpart=l),n!==void 0&&(u.outcome=n),m!==void 0&&(u.durationMs=m),y!==void 0&&(u.bytes=y),v&&(u.correlation=v),h&&(u.error=h),(n==="failed"||n==="rate-limited")&&($="warning");const g=l?` ${r==="inbound"?"\u2190":"\u2192"} ${oneLine(l,80)}`:"";p=summary(`${r} ${oneLine(a,80)}${g}${n?` ${n}`:""}`,[y!==void 0&&sized(y),m!==void 0&&`${m} ms`],h),_=trafficBucket(f,r,a,s)}const E=(0,flow_context_1.flowContext)();return(0,emit_1.lensEmitOutcome)(protocol_types_1.CUSTOM_EVENT_SOURCE,$,`${o} ${emit_1.PROJECT}/${f} (reported): ${p}`,u,_,E?{flowId:E.flowId,requestId:E.requestId,runId:E.runId}:void 0,"backend",customGuard)==="written"}catch{return!1}}d(emitCustomHere,"emitCustomHere"),c(emitCustomHere,"emitCustomHere");function isOutcome(t,e){return e===void 0||typeof e=="string"&&protocol_types_1.SOURCE_PUSH_OUTCOMES[t].includes(e)}d(isOutcome,"isOutcome"),c(isOutcome,"isOutcome");function count(t,e,o,f){if(t===void 0)return;const s=typeof t=="number"&&f&&Number.isFinite(t)?Math.round(t):t;if(typeof s=="number"&&Number.isSafeInteger(s)&&s>=0)return s;say(`${e}: ${o} ${typeof t=="number"?String(t):shown(t)} is not a count \u2014 written without it`)}d(count,"count"),c(count,"count");function installCustomEmit(){try{const t=globalThis;if(typeof t[exports.EMIT_CUSTOM]=="function")return!1;const e=emitCustomHere;return t[exports.EMIT_CUSTOM]=e,!0}catch{return!1}}d(installCustomEmit,"installCustomEmit"),c(installCustomEmit,"installCustomEmit");function lensEmitCustom(t){try{const e=globalThis[exports.EMIT_CUSTOM];return typeof e=="function"?e(t)===!0:!1}catch{return!1}}d(lensEmitCustom,"lensEmitCustom"),c(lensEmitCustom,"lensEmitCustom");
1
+ "use strict";var M=Object.defineProperty;var l=(e,t)=>M(e,"name",{value:t,configurable:!0});var O=Object.defineProperty,d=l((e,t)=>O(e,"name",{value:t,configurable:!0}),"d"),C=Object.defineProperty,c=d((e,t)=>C(e,"name",{value:t,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.EMIT_CUSTOM=void 0,exports.emitCustomHere=emitCustomHere,exports.installCustomEmit=installCustomEmit,exports.lensEmitCustom=lensEmitCustom;const protocol_types_1=require("@lensmcp/protocol-types"),emit_1=require("./emit"),flood_guard_1=require("./flood-guard"),flow_context_1=require("./flow-context");exports.EMIT_CUSTOM=Symbol.for("lensmcp.emitCustom");const ITEM_MAX=200,ERROR_MAX=500,NAME_RE=/^[^\u0000-\u001f\u007f]{1,100}$/,customGuard=(0,flood_guard_1.createEventFloodGuard)({burst:30,perSec:5}),CHANNEL_BUCKETS_PER_SOURCE=protocol_types_1.TRAFFIC_PUSH_CHANNELS,CHANNEL_BUCKETS_MAX=1e3,channelBuckets=new Map;let channelBucketCount=0;function trafficBucket(e,t,n,m){const s=`custom:${emit_1.PROJECT}:traffic:${e}:${t}`,r=channelBuckets.get(e);return r?.has(n)?`${s}:${n}`:(r?.size??0)<CHANNEL_BUCKETS_PER_SOURCE&&channelBucketCount<CHANNEL_BUCKETS_MAX?(r?r.add(n):channelBuckets.set(e,new Set([n])),channelBucketCount++,`${s}:${n}`):(say(channelBucketCount>=CHANNEL_BUCKETS_MAX?`${m}: ${CHANNEL_BUCKETS_MAX} channels already have a flood bucket in this process \u2014 this source's further channels share one`:`${m}: more than ${CHANNEL_BUCKETS_PER_SOURCE} channels \u2014 its further channels share one flood bucket (is a channel minted per message?)`),s)}l(trafficBucket,"trafficBucket"),d(trafficBucket,"trafficBucket"),c(trafficBucket,"trafficBucket");const SAID_MAX=50,said=new Set;function refuse(e){return say(`${e} \u2014 not written`),!1}l(refuse,"refuse"),d(refuse,"refuse"),c(refuse,"refuse");function say(e){try{if(said.has(e)||said.size>=SAID_MAX)return;said.add(e);const t=said.size===SAID_MAX?" (further problems with lensEmitCustom are not said)":"";console.warn(`[lensmcp] lensEmitCustom: ${e}${t}`)}catch{}}l(say,"say"),d(say,"say"),c(say,"say");function shown(e){return typeof e=="string"?JSON.stringify(e.length>40?`${e.slice(0,39)}\u2026`:e):e===null?"null":typeof e}l(shown,"shown"),d(shown,"shown"),c(shown,"shown");const isObj=c(e=>typeof e=="object"&&e!==null&&!Array.isArray(e),"isObj"),cut=c((e,t)=>e.length>t?`${e.slice(0,t-1)}\u2026`:e,"cut");function idText(e,t){const n=typeof e=="string"?e:typeof e=="number"&&Number.isFinite(e)||typeof e=="bigint"?String(e):void 0;return n?cut(n,t):void 0}l(idText,"idText"),d(idText,"idText"),c(idText,"idText");function errorText(e){const t=typeof e=="string"?e:e instanceof Error?e.message:void 0;return t?cut(t,ERROR_MAX):void 0}l(errorText,"errorText"),d(errorText,"errorText"),c(errorText,"errorText");const oneLine=c((e,t)=>cut(e.replace(/\s+/g," ").trim(),t),"oneLine"),text=c((e,t)=>typeof e=="string"&&e?cut(e,t):void 0,"text");function summary(e,t,n){return`${[e,...t.filter(m=>m!==!1)].join(", ")}${n?` \u2014 ${oneLine(n,120)}`:""}`}l(summary,"summary"),d(summary,"summary"),c(summary,"summary");const sized=c(e=>`${String(e).replace(/\B(?=(\d{3})+(?!\d))/g,",")} byte${e===1?"":"s"}`,"sized");function emitCustomHere(e){try{if(!isObj(e))return refuse(`the event is ${shown(e)}, not { kind, name, event }`);const t=e.kind;if(!protocol_types_1.SOURCE_KINDS_READ.includes(t))return refuse(`kind ${shown(t)} is not a source kind (${protocol_types_1.SOURCE_KINDS_READ.join(", ")})`);const n=t,m=e.name;if(typeof m!="string"||!m.trim()||!NAME_RE.test(m))return refuse(`${n} name ${shown(m)} is not 1\u2013100 characters without control characters (the declared source's name)`);const s=`${n} ${JSON.stringify(m)}`,r=e.event,S=protocol_types_1.SOURCE_PUSH_EVENTS[n];if(typeof r!="string"||!S.includes(r))return refuse(`${s}: event ${shown(r)} is not a ${n} event (${S.join(", ")})`);const u={kind:"source-event",provenance:protocol_types_1.SOURCE_PROVENANCE,sourceKind:n,name:m,event:r};let p="info",E=r,_=`custom:${emit_1.PROJECT}:${n}:${m}:${r}`;if(n==="queue"){const i=idText(e.item,ITEM_MAX),o=idText(e.group,ITEM_MAX),a=errorText(e.error);i&&(u.item=i),o&&(u.group=o),a&&(u.error=a),r==="failed"&&(p="warning"),E=summary(`${r}${i?` ${oneLine(i,80)}`:""}${o?` \xB7 ${oneLine(o,80)}`:""}`,[],a)}else if(n==="loop"){if(r==="run-end"){const i=e.outcome;if(!isOutcome(n,i))return refuse(`${s}: outcome ${shown(i)} is not a run outcome (${protocol_types_1.SOURCE_PUSH_OUTCOMES.loop.join(", ")})`);const o=count(e.items,s,"items",!1),a=count(e.durationMs,s,"durationMs",!0),f=errorText(e.error);i!==void 0&&(u.outcome=i),o!==void 0&&(u.items=o),a!==void 0&&(u.durationMs=a),f&&(u.error=f),i==="failed"&&(p="warning"),E=summary(i?`${r} ${i}`:r,[o!==void 0&&`${o} item${o===1?"":"s"}`,a!==void 0&&`${a} ms`],f)}}else if(n==="store"){const i=idText(e.object,ITEM_MAX),o=idText(e.group,ITEM_MAX),a=r==="write"?count(e.bytes,s,"bytes",!1):void 0,f=count(e.durationMs,s,"durationMs",!0),$=errorText(e.error);i&&(u.object=i),o&&(u.group=o),a!==void 0&&(u.bytes=a),f!==void 0&&(u.durationMs=f),$&&(u.error=$),r==="error"&&(p="warning"),E=summary(`${r}${i?` ${oneLine(i,80)}`:""}${o?` \xB7 ${oneLine(o,80)}`:""}`,[a!==void 0&&sized(a),f!==void 0&&`${f} ms`],$)}else{const i=e.channel;if(typeof i!="string"||!i.trim())return refuse(`${s}: channel ${shown(i)} is not a channel \u2014 every traffic event says its channel (the snapshot channel's key)`);const o=e.outcome;if(!isOutcome(n,o))return refuse(`${s}: outcome ${shown(o)} is not a message outcome (${protocol_types_1.SOURCE_PUSH_OUTCOMES.traffic.join(", ")})`);const a=cut(i,ITEM_MAX),f=text(e.counterpart,ITEM_MAX),$=count(e.durationMs,s,"durationMs",!0),h=count(e.bytes,s,"bytes",!1),g=idText(e.correlation,ITEM_MAX),v=errorText(e.error);u.channel=a,f&&(u.counterpart=f),o!==void 0&&(u.outcome=o),$!==void 0&&(u.durationMs=$),h!==void 0&&(u.bytes=h),g&&(u.correlation=g),v&&(u.error=v),(o==="failed"||o==="rate-limited")&&(p="warning");const b=f?` ${r==="inbound"?"\u2190":"\u2192"} ${oneLine(f,80)}`:"";E=summary(`${r} ${oneLine(a,80)}${b}${o?` ${o}`:""}`,[h!==void 0&&sized(h),$!==void 0&&`${$} ms`],v),_=trafficBucket(m,r,a,s)}const y=(0,flow_context_1.flowContext)();return(0,emit_1.lensEmitOutcome)(protocol_types_1.CUSTOM_EVENT_SOURCE,p,`${n} ${emit_1.PROJECT}/${m} (reported): ${E}`,u,_,y?{flowId:y.flowId,requestId:y.requestId,runId:y.runId}:void 0,"backend",customGuard)==="written"}catch{return!1}}l(emitCustomHere,"emitCustomHere"),d(emitCustomHere,"emitCustomHere"),c(emitCustomHere,"emitCustomHere");function isOutcome(e,t){return t===void 0||typeof t=="string"&&protocol_types_1.SOURCE_PUSH_OUTCOMES[e].includes(t)}l(isOutcome,"isOutcome"),d(isOutcome,"isOutcome"),c(isOutcome,"isOutcome");function count(e,t,n,m){if(e===void 0)return;const s=typeof e=="number"&&m&&Number.isFinite(e)?Math.round(e):e;if(typeof s=="number"&&Number.isSafeInteger(s)&&s>=0)return s;say(`${t}: ${n} ${typeof e=="number"?String(e):shown(e)} is not a count \u2014 written without it`)}l(count,"count"),d(count,"count"),c(count,"count");function installCustomEmit(){try{const e=globalThis;if(typeof e[exports.EMIT_CUSTOM]=="function")return!1;const t=emitCustomHere;return e[exports.EMIT_CUSTOM]=t,!0}catch{return!1}}l(installCustomEmit,"installCustomEmit"),d(installCustomEmit,"installCustomEmit"),c(installCustomEmit,"installCustomEmit");function lensEmitCustom(e){try{const t=globalThis[exports.EMIT_CUSTOM];return typeof t=="function"?t(e)===!0:!1}catch{return!1}}l(lensEmitCustom,"lensEmitCustom"),d(lensEmitCustom,"lensEmitCustom"),c(lensEmitCustom,"lensEmitCustom");
package/lib/emit.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var m=Object.defineProperty;var p=(r,s)=>m(r,"name",{value:s,configurable:!0});var a=Object.defineProperty,i=p((r,s)=>a(r,"name",{value:s,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.EVENT_FILE=exports.PROJECT=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=void 0,exports.maybeRotateEventFile=maybeRotateEventFile,exports.isLensWriting=isLensWriting,exports.lensEmit=lensEmit,exports.lensEmitOutcome=lensEmitOutcome,exports.lensLog=lensLog;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_path_1=require("node:path"),bus_rotation_1=require("@lensmcp/core/bus-rotation"),flood_guard_1=require("./flood-guard"),flow_context_1=require("./flow-context"),appendFileSync=nodeFs.appendFileSync,mkdirSync=nodeFs.mkdirSync,statSync=nodeFs.statSync,renameSync=nodeFs.renameSync,unlinkSync=nodeFs.unlinkSync,openSync=nodeFs.openSync,closeSync=nodeFs.closeSync,BUS_CAPS=(0,bus_rotation_1.busCapsFromEnv)();exports.EVENT_MAX_BYTES=BUS_CAPS.maxBytes,exports.EVENT_MAX_FILES=BUS_CAPS.maxFiles;const rotators=new Map,BUS_FS={statSync,renameSync,unlinkSync,openSync,closeSync};function maybeRotateEventFile(r,s,e){if(e!==void 0){const n=e.maxBytes??exports.EVENT_MAX_BYTES,t=e.maxFiles??exports.EVENT_MAX_FILES;(0,bus_rotation_1.createBusRotator)(r,{maxBytes:n,maxFiles:t,fs:BUS_FS,checkEveryBytes:0})(s);return}let o=rotators.get(r);o||(o=(0,bus_rotation_1.createBusRotator)(r,{maxBytes:exports.EVENT_MAX_BYTES,maxFiles:exports.EVENT_MAX_FILES,fs:BUS_FS}),rotators.set(r,o)),o(s)}p(maybeRotateEventFile,"maybeRotateEventFile"),i(maybeRotateEventFile,"maybeRotateEventFile"),exports.PROJECT=process.env.LENSMCP_PROJECT||process.env.SERVICE_NAME||"app",exports.EVENT_FILE=process.env.LENSMCP_EVENT_FILE||`${process.cwd()}/.lensmcp/events.jsonl`;let writing=!1,dirReady=!1;const emitGuard=(0,flood_guard_1.createEventFloodGuard)({burst:30,perSec:5}),logGuard=(0,flood_guard_1.createEventFloodGuard)({burst:120,perSec:20});function isLensWriting(){return writing}p(isLensWriting,"isLensWriting"),i(isLensWriting,"isLensWriting");function lensEmit(r,s,e,o,n,t,c="cluster"){return lensEmitOutcome(r,s,e,o,n,t,c)==="written"}p(lensEmit,"lensEmit"),i(lensEmit,"lensEmit");function lensEmitOutcome(r,s,e,o,n,t,c="cluster",l=emitGuard){try{writing=!0;const E=n??`${r}:${String(o.name??r)}`,d=l.admit(E);if(!d.ok)return"suppressed";dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const u=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:r,category:c,severity:s,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{},...t?.runId?{runId:t.runId}:{},...t?.originNodeId?{originNodeId:t.originNodeId}:{},...t?.originType?{originType:t.originType}:{}},fingerprint:E,title:e,raw:{project:exports.PROJECT,...o,...d.suppressed>0?{floodSuppressed:d.suppressed}:{}}})+`
2
- `;return maybeRotateEventFile(exports.EVENT_FILE,u.length),appendFileSync(exports.EVENT_FILE,u),"written"}catch{return"failed"}finally{writing=!1}}p(lensEmitOutcome,"lensEmitOutcome"),i(lensEmitOutcome,"lensEmitOutcome");function lensLog(r,s,e){try{writing=!0;const o=e?.bucket!==void 0?`log:${exports.PROJECT}:${e.bucket}`:r==="error"||r==="fatal"?`log:error:${exports.PROJECT}`:`log:${exports.PROJECT}`,n=e?.bucket!==void 0?{ok:!0,suppressed:e.suppressed??0}:logGuard.admit(o);if(!n.ok)return!1;dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const t=(0,flow_context_1.flowContext)(),c=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:"nestjs",category:"runtime",severity:r,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{},...t?.runId?{runId:t.runId}:{}},fingerprint:o,title:s,raw:{project:exports.PROJECT,kind:"log",...e?.stack?{request:{error:{message:s,stack:e.stack}}}:{},...e?.text?{text:e.text}:{},...e?.continues?{continues:!0}:{},...e?.stream?{stream:e.stream}:{},...e?.level?{level:e.level}:{},...e?.logger?{logger:e.logger}:{},...n.suppressed>0?{floodSuppressed:n.suppressed}:{}}})+`
3
- `;return maybeRotateEventFile(exports.EVENT_FILE,c.length),appendFileSync(exports.EVENT_FILE,c),!0}catch{return!1}finally{writing=!1}}p(lensLog,"lensLog"),i(lensLog,"lensLog");
1
+ "use strict";var x=Object.defineProperty;var c=(r,s)=>x(r,"name",{value:s,configurable:!0});var m=Object.defineProperty,p=c((r,s)=>m(r,"name",{value:s,configurable:!0}),"p"),a=Object.defineProperty,i=p((r,s)=>a(r,"name",{value:s,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.EVENT_FILE=exports.PROJECT=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=void 0,exports.maybeRotateEventFile=maybeRotateEventFile,exports.isLensWriting=isLensWriting,exports.lensEmit=lensEmit,exports.lensEmitOutcome=lensEmitOutcome,exports.lensLog=lensLog;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_path_1=require("node:path"),bus_rotation_1=require("@lensmcp/core/bus-rotation"),flood_guard_1=require("./flood-guard"),flow_context_1=require("./flow-context"),appendFileSync=nodeFs.appendFileSync,mkdirSync=nodeFs.mkdirSync,statSync=nodeFs.statSync,renameSync=nodeFs.renameSync,unlinkSync=nodeFs.unlinkSync,openSync=nodeFs.openSync,closeSync=nodeFs.closeSync,BUS_CAPS=(0,bus_rotation_1.busCapsFromEnv)();exports.EVENT_MAX_BYTES=BUS_CAPS.maxBytes,exports.EVENT_MAX_FILES=BUS_CAPS.maxFiles;const rotators=new Map,BUS_FS={statSync,renameSync,unlinkSync,openSync,closeSync};function maybeRotateEventFile(r,s,e){if(e!==void 0){const n=e.maxBytes??exports.EVENT_MAX_BYTES,t=e.maxFiles??exports.EVENT_MAX_FILES;(0,bus_rotation_1.createBusRotator)(r,{maxBytes:n,maxFiles:t,fs:BUS_FS,checkEveryBytes:0})(s);return}let o=rotators.get(r);o||(o=(0,bus_rotation_1.createBusRotator)(r,{maxBytes:exports.EVENT_MAX_BYTES,maxFiles:exports.EVENT_MAX_FILES,fs:BUS_FS}),rotators.set(r,o)),o(s)}c(maybeRotateEventFile,"maybeRotateEventFile"),p(maybeRotateEventFile,"maybeRotateEventFile"),i(maybeRotateEventFile,"maybeRotateEventFile"),exports.PROJECT=process.env.LENSMCP_PROJECT||process.env.SERVICE_NAME||"app",exports.EVENT_FILE=process.env.LENSMCP_EVENT_FILE||`${process.cwd()}/.lensmcp/events.jsonl`;let writing=!1,dirReady=!1;const emitGuard=(0,flood_guard_1.createEventFloodGuard)({burst:30,perSec:5}),logGuard=(0,flood_guard_1.createEventFloodGuard)({burst:120,perSec:20});function isLensWriting(){return writing}c(isLensWriting,"isLensWriting"),p(isLensWriting,"isLensWriting"),i(isLensWriting,"isLensWriting");function lensEmit(r,s,e,o,n,t,d="cluster"){return lensEmitOutcome(r,s,e,o,n,t,d)==="written"}c(lensEmit,"lensEmit"),p(lensEmit,"lensEmit"),i(lensEmit,"lensEmit");function lensEmitOutcome(r,s,e,o,n,t,d="cluster",g=emitGuard){try{writing=!0;const l=n??`${r}:${String(o.name??r)}`,E=g.admit(l);if(!E.ok)return"suppressed";dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const u=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:r,category:d,severity:s,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{},...t?.runId?{runId:t.runId}:{},...t?.originNodeId?{originNodeId:t.originNodeId}:{},...t?.originType?{originType:t.originType}:{}},fingerprint:l,title:e,raw:{project:exports.PROJECT,...o,...E.suppressed>0?{floodSuppressed:E.suppressed}:{}}})+`
2
+ `;return maybeRotateEventFile(exports.EVENT_FILE,u.length),appendFileSync(exports.EVENT_FILE,u),"written"}catch{return"failed"}finally{writing=!1}}c(lensEmitOutcome,"lensEmitOutcome"),p(lensEmitOutcome,"lensEmitOutcome"),i(lensEmitOutcome,"lensEmitOutcome");function lensLog(r,s,e){try{writing=!0;const o=e?.bucket!==void 0?`log:${exports.PROJECT}:${e.bucket}`:r==="error"||r==="fatal"?`log:error:${exports.PROJECT}`:`log:${exports.PROJECT}`,n=e?.bucket!==void 0?{ok:!0,suppressed:e.suppressed??0}:logGuard.admit(o);if(!n.ok)return!1;dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const t=(0,flow_context_1.flowContext)(),d=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:"nestjs",category:"runtime",severity:r,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{},...t?.runId?{runId:t.runId}:{}},fingerprint:o,title:s,raw:{project:exports.PROJECT,kind:"log",...e?.stack?{request:{error:{message:s,stack:e.stack}}}:{},...e?.text?{text:e.text}:{},...e?.continues?{continues:!0}:{},...e?.stream?{stream:e.stream}:{},...e?.level?{level:e.level}:{},...e?.logger?{logger:e.logger}:{},...n.suppressed>0?{floodSuppressed:n.suppressed}:{}}})+`
3
+ `;return maybeRotateEventFile(exports.EVENT_FILE,d.length),appendFileSync(exports.EVENT_FILE,d),!0}catch{return!1}finally{writing=!1}}c(lensLog,"lensLog"),p(lensLog,"lensLog"),i(lensLog,"lensLog");
@@ -1 +1 @@
1
- "use strict";var n=Object.defineProperty;var a=(r,t)=>n(r,"name",{value:t,configurable:!0});var o=Object.defineProperty,e=a((r,t)=>o(r,"name",{value:t,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEventFloodGuard=void 0;var protocol_types_1=require("@lensmcp/protocol-types");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return protocol_types_1.createEventFloodGuard},"get")});
1
+ "use strict";var u=Object.defineProperty;var c=(r,t)=>u(r,"name",{value:t,configurable:!0});var n=Object.defineProperty,a=c((r,t)=>n(r,"name",{value:t,configurable:!0}),"a"),o=Object.defineProperty,e=a((r,t)=>o(r,"name",{value:t,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEventFloodGuard=void 0;var protocol_types_1=require("@lensmcp/protocol-types");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return protocol_types_1.createEventFloodGuard},"get")});
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var o=(e,t)=>d(e,"name",{value:t,configurable:!0});var l=Object.defineProperty,n=o((e,t)=>l(e,"name",{value:t,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.CONTEXT_END=void 0,exports.flowContextStatus=flowContextStatus,exports.resetFlowContextForTests=resetFlowContextForTests,exports.isRequireEsmError=isRequireEsmError,exports.isModuleNotFoundError=isModuleNotFoundError,exports.primeFlowContext=primeFlowContext,exports.attachContextEnd=attachContextEnd,exports.contextEndOf=contextEndOf,exports.runInFlowContext=runInFlowContext,exports.liveFlowContext=liveFlowContext,exports.flowContext=flowContext;let getCtx=null,runWith=null,status={state:"not-primed"},warned=!1;function flowContextStatus(){return status}o(flowContextStatus,"flowContextStatus"),n(flowContextStatus,"flowContextStatus");function resetFlowContextForTests(){getCtx=null,runWith=null,status={state:"not-primed"},warned=!1}o(resetFlowContextForTests,"resetFlowContextForTests"),n(resetFlowContextForTests,"resetFlowContextForTests");function isRequireEsmError(e){const t=e?.code;return t==="ERR_REQUIRE_ESM"||t==="ERR_REQUIRE_ASYNC_MODULE"}o(isRequireEsmError,"isRequireEsmError"),n(isRequireEsmError,"isRequireEsmError");function isModuleNotFoundError(e){const t=e;return t?.code!=="MODULE_NOT_FOUND"&&t?.code!=="ERR_MODULE_NOT_FOUND"?!1:String(t?.message??"").includes("@lensmcp/nest-instrumentation")}o(isModuleNotFoundError,"isModuleNotFoundError"),n(isModuleNotFoundError,"isModuleNotFoundError");function requireNestInstrumentation(){return require("@lensmcp/nest-instrumentation")}o(requireNestInstrumentation,"requireNestInstrumentation"),n(requireNestInstrumentation,"requireNestInstrumentation");function primeFlowContext(e=requireNestInstrumentation){try{const t=e();getCtx=t.currentLensmcpContext,runWith=t.runInLensmcpContext,status={state:"ready"}}catch(t){if(getCtx=null,runWith=null,isModuleNotFoundError(t)){status={state:"absent"};return}const r=t instanceof Error?t.message:String(t);if(status=isRequireEsmError(t)?{state:"runtime-too-old",detail:r}:{state:"failed",detail:r},!warned){warned=!0;const s=status.state==="runtime-too-old"?`this Node (${process.version}) cannot require an ESM package; @lensmcp/node-instrumentation needs >=20.19`:r;console.warn(`[lensmcp] flow correlation is OFF \u2014 could not load @lensmcp/nest-instrumentation: ${s}`)}}}o(primeFlowContext,"primeFlowContext"),n(primeFlowContext,"primeFlowContext"),exports.CONTEXT_END=Symbol.for("lensmcp.contextEnd");function attachContextEnd(e){let t=!1;const r=[],s={get ended(){return t},onEnd(u){t?runEndListener(u):r.push(u)}};return Object.defineProperty(e,exports.CONTEXT_END,{value:s}),()=>{if(!t){t=!0;for(const u of r.splice(0))runEndListener(u)}}}o(attachContextEnd,"attachContextEnd"),n(attachContextEnd,"attachContextEnd");function runEndListener(e){try{e()}catch{}}o(runEndListener,"runEndListener"),n(runEndListener,"runEndListener");function contextEndOf(e){const t=e?.[exports.CONTEXT_END];return t&&typeof t.onEnd=="function"?t:void 0}o(contextEndOf,"contextEndOf"),n(contextEndOf,"contextEndOf");function runInFlowContext(e,t){if(!runWith)return t();const r={sessionId:"pending",requestId:e.requestId,...e.flowId?{flowId:e.flowId}:{}},s=attachContextEnd(r);let u;try{u=runWith(r,t)}catch{return s(),t()}const i=u;return i&&typeof i.then=="function"?i.then(c=>(s(),c),c=>{throw s(),c}):(s(),u)}o(runInFlowContext,"runInFlowContext"),n(runInFlowContext,"runInFlowContext");function liveFlowContext(){try{return getCtx?.()}catch{return}}o(liveFlowContext,"liveFlowContext"),n(liveFlowContext,"liveFlowContext");function flowContext(){const e=liveFlowContext();if(e)return{...e.flowId?{flowId:e.flowId}:{},...e.requestId?{requestId:e.requestId}:{},...e.runId?{runId:e.runId}:{},...e.originNodeId?{originNodeId:e.originNodeId}:{}}}o(flowContext,"flowContext"),n(flowContext,"flowContext");
1
+ "use strict";var f=Object.defineProperty;var r=(e,t)=>f(e,"name",{value:t,configurable:!0});var d=Object.defineProperty,o=r((e,t)=>d(e,"name",{value:t,configurable:!0}),"o"),l=Object.defineProperty,n=o((e,t)=>l(e,"name",{value:t,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.CONTEXT_END=void 0,exports.flowContextStatus=flowContextStatus,exports.resetFlowContextForTests=resetFlowContextForTests,exports.isRequireEsmError=isRequireEsmError,exports.isModuleNotFoundError=isModuleNotFoundError,exports.primeFlowContext=primeFlowContext,exports.attachContextEnd=attachContextEnd,exports.contextEndOf=contextEndOf,exports.runInFlowContext=runInFlowContext,exports.liveFlowContext=liveFlowContext,exports.flowContext=flowContext;let getCtx=null,runWith=null,status={state:"not-primed"},warned=!1;function flowContextStatus(){return status}r(flowContextStatus,"flowContextStatus"),o(flowContextStatus,"flowContextStatus"),n(flowContextStatus,"flowContextStatus");function resetFlowContextForTests(){getCtx=null,runWith=null,status={state:"not-primed"},warned=!1}r(resetFlowContextForTests,"resetFlowContextForTests"),o(resetFlowContextForTests,"resetFlowContextForTests"),n(resetFlowContextForTests,"resetFlowContextForTests");function isRequireEsmError(e){const t=e?.code;return t==="ERR_REQUIRE_ESM"||t==="ERR_REQUIRE_ASYNC_MODULE"}r(isRequireEsmError,"isRequireEsmError"),o(isRequireEsmError,"isRequireEsmError"),n(isRequireEsmError,"isRequireEsmError");function isModuleNotFoundError(e){const t=e;return t?.code!=="MODULE_NOT_FOUND"&&t?.code!=="ERR_MODULE_NOT_FOUND"?!1:String(t?.message??"").includes("@lensmcp/nest-instrumentation")}r(isModuleNotFoundError,"isModuleNotFoundError"),o(isModuleNotFoundError,"isModuleNotFoundError"),n(isModuleNotFoundError,"isModuleNotFoundError");function requireNestInstrumentation(){return require("@lensmcp/nest-instrumentation")}r(requireNestInstrumentation,"requireNestInstrumentation"),o(requireNestInstrumentation,"requireNestInstrumentation"),n(requireNestInstrumentation,"requireNestInstrumentation");function primeFlowContext(e=requireNestInstrumentation){try{const t=e();getCtx=t.currentLensmcpContext,runWith=t.runInLensmcpContext,status={state:"ready"}}catch(t){if(getCtx=null,runWith=null,isModuleNotFoundError(t)){status={state:"absent"};return}const s=t instanceof Error?t.message:String(t);if(status=isRequireEsmError(t)?{state:"runtime-too-old",detail:s}:{state:"failed",detail:s},!warned){warned=!0;const u=status.state==="runtime-too-old"?`this Node (${process.version}) cannot require an ESM package; @lensmcp/node-instrumentation needs >=20.19`:s;console.warn(`[lensmcp] flow correlation is OFF \u2014 could not load @lensmcp/nest-instrumentation: ${u}`)}}}r(primeFlowContext,"primeFlowContext"),o(primeFlowContext,"primeFlowContext"),n(primeFlowContext,"primeFlowContext"),exports.CONTEXT_END=Symbol.for("lensmcp.contextEnd");function attachContextEnd(e){let t=!1;const s=[],u={get ended(){return t},onEnd(i){t?runEndListener(i):s.push(i)}};return Object.defineProperty(e,exports.CONTEXT_END,{value:u}),()=>{if(!t){t=!0;for(const i of s.splice(0))runEndListener(i)}}}r(attachContextEnd,"attachContextEnd"),o(attachContextEnd,"attachContextEnd"),n(attachContextEnd,"attachContextEnd");function runEndListener(e){try{e()}catch{}}r(runEndListener,"runEndListener"),o(runEndListener,"runEndListener"),n(runEndListener,"runEndListener");function contextEndOf(e){const t=e?.[exports.CONTEXT_END];return t&&typeof t.onEnd=="function"?t:void 0}r(contextEndOf,"contextEndOf"),o(contextEndOf,"contextEndOf"),n(contextEndOf,"contextEndOf");function runInFlowContext(e,t){if(!runWith)return t();const s={sessionId:"pending",requestId:e.requestId,...e.flowId?{flowId:e.flowId}:{}},u=attachContextEnd(s);let i;try{i=runWith(s,t)}catch{return u(),t()}const c=i;return c&&typeof c.then=="function"?c.then(a=>(u(),a),a=>{throw u(),a}):(u(),i)}r(runInFlowContext,"runInFlowContext"),o(runInFlowContext,"runInFlowContext"),n(runInFlowContext,"runInFlowContext");function liveFlowContext(){try{return getCtx?.()}catch{return}}r(liveFlowContext,"liveFlowContext"),o(liveFlowContext,"liveFlowContext"),n(liveFlowContext,"liveFlowContext");function flowContext(){const e=liveFlowContext();if(e)return{...e.flowId?{flowId:e.flowId}:{},...e.requestId?{requestId:e.requestId}:{},...e.runId?{runId:e.runId}:{},...e.originNodeId?{originNodeId:e.originNodeId}:{}}}r(flowContext,"flowContext"),o(flowContext,"flowContext"),n(flowContext,"flowContext");
@@ -2,6 +2,10 @@ import type { HttpExchange, HttpExchangeBody } from '@lensmcp/core/http-exchange
2
2
  import { type HttpCaptureMode } from './http-store';
3
3
  type FetchInput = Parameters<typeof fetch>[0];
4
4
  type FetchInit = Parameters<typeof fetch>[1];
5
+ /** A response is read for at most this long; the `http` path also writes the exchange of one nobody reads by then. */
6
+ export declare const MAX_STREAM_MS: number;
7
+ /** Headers as name/value pairs, whatever holds them: a `Headers`, an array of pairs, or a plain object (`http`'s). */
8
+ export declare const headerPairs: (h: unknown) => Array<[string, string]>;
5
9
  export interface RequestSide {
6
10
  headers: Array<[string, string]>;
7
11
  contentType: string;
@@ -13,11 +17,75 @@ export interface RequestSide {
13
17
  }
14
18
  /** The request's headers and body, taken BEFORE the call. A stream or FormData is not read — it would be consumed. */
15
19
  export declare function takeRequest(input: FetchInput, init: FetchInit, bodies: boolean): RequestSide;
20
+ /** A chunk as `http` passes it — a `Buffer`, or a string once the reader set an encoding — as bytes. */
21
+ export declare function chunkBytes(chunk: unknown, encoding?: unknown): Uint8Array | undefined;
22
+ /**
23
+ * A request's body as the caller writes it (`write` / `end` on an `http.ClientRequest`): up to 2 MB of its bytes, and
24
+ * how many there were in all. `keep: false` (an AI provider's call, its bodies not asked for) only counts them.
25
+ */
26
+ export declare class WrittenBody {
27
+ private readonly keep;
28
+ private readonly chunks;
29
+ private read;
30
+ size: number;
31
+ constructor(keep: boolean);
32
+ take(chunk: unknown, encoding?: unknown): void;
33
+ /** Every byte of it was read. */
34
+ get whole(): boolean;
35
+ bytes(): Buffer;
36
+ }
37
+ /** A compressed body, unpacked when it is small enough to (tap-ingress.ts does the same for an answer it served). */
38
+ export declare function unpacked(encoding: string, bytes: Uint8Array): Buffer | undefined;
39
+ /**
40
+ * The request side of a call made with `http.request`: the headers it sent (`getHeaders()`) and its body as written —
41
+ * unpacked if the caller compressed it, else said to be encoded. Kept by `requestPart`, as a `fetch`'s is.
42
+ */
43
+ export declare function writtenRequest(headers: unknown, body: WrittenBody | undefined): RequestSide;
16
44
  export interface ResponseRead {
17
45
  body?: HttpExchangeBody;
18
46
  stream?: NonNullable<HttpExchange['response']['stream']>;
19
47
  endedAt: number;
20
48
  }
49
+ /**
50
+ * A response's body as it arrives, chunk by chunk — fed by a clone's reader (`readResponse`) or by the response's own
51
+ * `data` events (the `http` path). An AI provider's stream keeps each event's name, time and size, never its data; its
52
+ * body is not kept at all. A compressed body (`encoding` — only the `http` path sees one: `fetch` hands over decoded
53
+ * bytes) is kept as it came and unpacked at the end; its stream events, if it was one, are not timed.
54
+ */
55
+ export declare class ResponseSink {
56
+ private readonly contentType;
57
+ private readonly startedAt;
58
+ private readonly opts;
59
+ private total;
60
+ private readonly kept;
61
+ private keptBytes;
62
+ private readonly hash;
63
+ private hashing;
64
+ private readonly sse;
65
+ /** Still read event by event — not once it turned out to be a runaway body. */
66
+ private parsing;
67
+ private readonly encoding;
68
+ private readonly events;
69
+ private eventTotal;
70
+ private eventData;
71
+ private firstEventMs;
72
+ private cut;
73
+ private pendingText;
74
+ private readonly decoder;
75
+ constructor(contentType: string, startedAt: number, opts: {
76
+ ai: boolean;
77
+ paths: string[];
78
+ encoding?: string;
79
+ });
80
+ /** Bytes seen so far, kept or not. */
81
+ get size(): number;
82
+ private take;
83
+ /** One chunk, as it arrived. False once the read has run past its 5 minutes: it is cut, and keeps nothing more. */
84
+ push(value: Uint8Array): boolean;
85
+ private inTime;
86
+ /** What was kept. `broken`: the caller or the network cut the body short — keep what arrived, and say so. */
87
+ finish(broken?: boolean, endedAt?: number): ResponseRead;
88
+ }
21
89
  /**
22
90
  * Read the response from its clone. MUST be called synchronously after `res.clone()` (see above). An AI provider's
23
91
  * stream keeps each event's name, time and size, never its data; its body is not kept at all.
@@ -1,2 +1,2 @@
1
- "use strict";var q=Object.defineProperty;var g=(e,r)=>q(e,"name",{value:r,configurable:!0});var k=Object.defineProperty,l=g((e,r)=>k(e,"name",{value:r,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.takeRequest=takeRequest,exports.readResponse=readResponse,exports.requestPart=requestPart;const node_crypto_1=require("node:crypto"),ai_store_1=require("./ai-store"),http_store_1=require("./http-store"),MAX_EVENTS=2e3,MAX_EVENT_DATA=4*1024,MAX_STREAM_KEPT=256*1024,MAX_STREAM_MS=300*1e3,MAX_HASH_BYTES=1024*1024,pairs=l(e=>{try{if(!e)return[];if(typeof e.forEach=="function"&&typeof e.get=="function"){const r=[];return e.forEach((o,n)=>r.push([n,o])),r}return Array.isArray(e)?e.map(([r,o])=>[String(r),String(o)]):Object.entries(e).map(([r,o])=>[r,Array.isArray(o)?o.join(", "):String(o)])}catch{return[]}},"pairs");function takeRequest(e,r,o){const n=typeof e=="object"&&e!==null&&!(e instanceof URL)?e:void 0,i=[...pairs(n?.headers),...pairs(r?.headers)],c=i.find(([s])=>s.toLowerCase()==="content-type")?.[1]??"",a={headers:i,contentType:c};if(!o)return a;const t=r?.body,d=l(s=>new TextEncoder().encode(s),"enc");if(typeof t=="string")return{...a,bytes:d(t),size:Buffer.byteLength(t)};if(t instanceof URLSearchParams)return{...a,contentType:c||"application/x-www-form-urlencoded",bytes:d(t.toString())};if(t instanceof ArrayBuffer)return{...a,bytes:new Uint8Array(t),size:t.byteLength};if(ArrayBuffer.isView(t))return{...a,bytes:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),size:t.byteLength};if(typeof Blob<"u"&&t instanceof Blob)return{...a,size:t.size,...t.size<=http_store_1.MAX_KEPT_BYTES*32?{pending:t.arrayBuffer().then(s=>new Uint8Array(s)).catch(()=>{})}:{}};if(typeof FormData<"u"&&t instanceof FormData)return{...a,omitted:"form-data"};if(t!=null)return{...a,omitted:"stream"};if(n&&!n.bodyUsed&&n.body)try{return{...a,pending:n.clone().arrayBuffer().then(s=>new Uint8Array(s)).catch(()=>{})}}catch{return a}return a}g(takeRequest,"takeRequest"),l(takeRequest,"takeRequest");function sseEvent(e){let r="message";const o=[];for(const n of e.split(/\r?\n/)){if(!n||n.startsWith(":"))continue;const i=n.indexOf(":"),c=i<0?n:n.slice(0,i),a=i<0?"":n.slice(i+1).replace(/^ /,"");c==="event"?r=a||"message":c==="data"&&o.push(a)}return o.length||r!=="message"?{event:r,data:o.join(`
2
- `)}:void 0}g(sseEvent,"sseEvent"),l(sseEvent,"sseEvent");function readResponse(e,r,o,n){const i=(()=>{try{return e.headers.get("content-type")??""}catch{return""}})(),c=Number((()=>{try{return e.headers.get("content-length")??""}catch{return""}})()),a=r.body;if(!a)return Promise.resolve({endedAt:Date.now(),...Number.isFinite(c)&&c===0?{}:{}});const t=a.getReader(),d=/text\/event-stream/i.test(i);return(async()=>{let s=0;const m=[];let f=0;const E=(0,node_crypto_1.createHash)("sha256");let v=!/json|^text\/|xml|form/i.test(i);const T=[];let L=0,x=0,_,A=!1,y="";const z=new TextDecoder,B=l(p=>{const u=sseEvent(p);if(!u)return;L++;const h=Date.now()-o;if(_??=h,T.length>=MAX_EVENTS||x>=MAX_STREAM_KEPT){A=!0;return}const b=n.ai?void 0:(0,ai_store_1.redactAiText)(u.data).slice(0,MAX_EVENT_DATA);b&&(x+=b.length),T.push({atMs:h,event:u.event,bytes:Buffer.byteLength(p),...b!==void 0?{data:b}:{}})},"take");try{for(;;){const{done:p,value:u}=await t.read();if(p)break;if(s+=u.byteLength,d){y+=z.decode(u,{stream:!0});let h;for(;(h=y.search(/\r?\n\r?\n/))>=0;){const b=/\r?\n\r?\n/.exec(y.slice(h));B(y.slice(0,h)),y=y.slice(h+b[0].length)}}else n.ai||(f<http_store_1.MAX_KEPT_BYTES*32&&(m.push(u),f+=u.byteLength),v&&(s<=MAX_HASH_BYTES?E.update(u):v=!1));if(Date.now()-o>MAX_STREAM_MS){A=!0,await t.cancel().catch(()=>{});break}}d&&y.trim()&&B(y)}catch{A=!0}const w=Date.now();if(d)return{endedAt:w,stream:{protocol:"sse",..._!==void 0?{firstEventMs:_}:{},events:T,bytes:s,total:L,...A?{cut:!0}:{}}};if(n.ai)return{endedAt:w,body:{contentType:i.split(";")[0].trim(),size:s,kept:0,truncated:!1,omitted:"ai"}};const M=new Uint8Array(f);let S=0;for(const p of m)M.set(p,S),S+=p.byteLength;const R=v&&s<=MAX_HASH_BYTES?E.digest("hex"):void 0;return{endedAt:w,body:(0,http_store_1.keepBody)(i,M,s,n.paths,R)}})()}g(readResponse,"readResponse"),l(readResponse,"readResponse");async function requestPart(e,r,o,n,i,c){const{headers:a,redacted:t}=(0,http_store_1.redactHeaders)(e.headers);c.push(...t);const d=o==="bodies"&&r.length>1?(0,http_store_1.redactQuery)(r):[];let s;if(o==="bodies"){const m=e.contentType.split(";")[0].trim().toLowerCase();if(n)s={contentType:m,size:e.size??e.bytes?.byteLength??0,kept:0,truncated:!1,omitted:"ai"};else if(e.omitted)s={contentType:m,size:e.size??0,kept:0,truncated:!1,omitted:e.omitted};else{const f=e.bytes??await e.pending;f&&f.byteLength&&(s=(0,http_store_1.keepBody)(e.contentType,f,e.size??f.byteLength,i))}}return{headers:a,...d.length?{query:d}:{},...s?{body:s}:{}}}g(requestPart,"requestPart"),l(requestPart,"requestPart");
1
+ "use strict";var b=Object.defineProperty;var f=(e,t)=>b(e,"name",{value:t,configurable:!0});var g=Object.defineProperty,u=f((e,t)=>g(e,"name",{value:t,configurable:!0}),"u"),p=Object.defineProperty,c=u((e,t)=>p(e,"name",{value:t,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResponseSink=exports.WrittenBody=exports.headerPairs=exports.MAX_STREAM_MS=void 0,exports.takeRequest=takeRequest,exports.chunkBytes=chunkBytes,exports.unpacked=unpacked,exports.writtenRequest=writtenRequest,exports.readResponse=readResponse,exports.requestPart=requestPart;const tslib_1=require("tslib"),node_crypto_1=require("node:crypto"),zlib=tslib_1.__importStar(require("node:zlib")),ai_store_1=require("./ai-store"),http_store_1=require("./http-store"),MAX_EVENTS=2e3,MAX_EVENT_DATA=4*1024,MAX_STREAM_KEPT=256*1024;exports.MAX_STREAM_MS=300*1e3;const MAX_HASH_BYTES=1024*1024,MAX_READ=http_store_1.MAX_KEPT_BYTES*32,headerPairs=c(e=>{try{if(!e)return[];if(typeof e.forEach=="function"&&typeof e.get=="function"){const t=[];return e.forEach((n,s)=>t.push([s,n])),t}return Array.isArray(e)?e.map(([t,n])=>[String(t),String(n)]):Object.entries(e).map(([t,n])=>[t,Array.isArray(n)?n.join(", "):String(n)])}catch{return[]}},"headerPairs");exports.headerPairs=headerPairs;function takeRequest(e,t,n){const s=typeof e=="object"&&e!==null&&!(e instanceof URL)?e:void 0,o=[...(0,exports.headerPairs)(s?.headers),...(0,exports.headerPairs)(t?.headers)],a=o.find(([h])=>h.toLowerCase()==="content-type")?.[1]??"",r={headers:o,contentType:a};if(!n)return r;const i=t?.body,d=c(h=>new TextEncoder().encode(h),"enc");if(typeof i=="string")return{...r,bytes:d(i),size:Buffer.byteLength(i)};if(i instanceof URLSearchParams)return{...r,contentType:a||"application/x-www-form-urlencoded",bytes:d(i.toString())};if(i instanceof ArrayBuffer)return{...r,bytes:new Uint8Array(i),size:i.byteLength};if(ArrayBuffer.isView(i))return{...r,bytes:new Uint8Array(i.buffer,i.byteOffset,i.byteLength),size:i.byteLength};if(typeof Blob<"u"&&i instanceof Blob)return{...r,size:i.size,...i.size<=MAX_READ?{pending:i.arrayBuffer().then(h=>new Uint8Array(h)).catch(()=>{})}:{}};if(typeof FormData<"u"&&i instanceof FormData)return{...r,omitted:"form-data"};if(i!=null)return{...r,omitted:"stream"};if(s&&!s.bodyUsed&&s.body)try{return{...r,pending:s.clone().arrayBuffer().then(h=>new Uint8Array(h)).catch(()=>{})}}catch{return r}return r}f(takeRequest,"takeRequest"),u(takeRequest,"takeRequest"),c(takeRequest,"takeRequest");function chunkBytes(e,t){if(e instanceof Uint8Array)return e;if(typeof e=="string")return Buffer.from(e,typeof t=="string"&&Buffer.isEncoding(t)?t:"utf8")}f(chunkBytes,"chunkBytes"),u(chunkBytes,"chunkBytes"),c(chunkBytes,"chunkBytes");class WrittenBody{static{f(this,"WrittenBody")}static{u(this,"WrittenBody")}static{c(this,"WrittenBody")}constructor(t){this.keep=t,this.chunks=[],this.read=0,this.size=0}take(t,n){if(t==null||typeof t=="function")return;const s=chunkBytes(t,n);s&&(this.size+=s.byteLength,this.keep&&this.read<MAX_READ&&(this.chunks.push(s),this.read+=s.byteLength))}get whole(){return this.read>=this.size}bytes(){return Buffer.concat(this.chunks)}}exports.WrittenBody=WrittenBody;function unpacked(e,t){try{if(e==="gzip"||e==="x-gzip")return zlib.gunzipSync(t,{maxOutputLength:MAX_READ});if(e==="br")return zlib.brotliDecompressSync(t,{maxOutputLength:MAX_READ});if(e==="deflate")return zlib.inflateSync(t,{maxOutputLength:MAX_READ})}catch{return}}f(unpacked,"unpacked"),u(unpacked,"unpacked"),c(unpacked,"unpacked");const encodingOf=c(e=>{const t=(e??"").trim().toLowerCase();return t==="identity"?"":t},"encodingOf");function writtenRequest(e,t){const n=(0,exports.headerPairs)(e),s=c(i=>n.find(([d])=>d.toLowerCase()===i)?.[1],"header"),o={headers:n,contentType:s("content-type")??""};if(!t||!t.size)return o;const a=encodingOf(s("content-encoding"));if(!a)return{...o,bytes:t.bytes(),size:t.size};const r=t.whole?unpacked(a,t.bytes()):void 0;return r?{...o,bytes:r,size:r.length}:{...o,size:t.size,omitted:"encoded"}}f(writtenRequest,"writtenRequest"),u(writtenRequest,"writtenRequest"),c(writtenRequest,"writtenRequest");function sseEvent(e){let t="message";const n=[];for(const s of e.split(/\r?\n/)){if(!s||s.startsWith(":"))continue;const o=s.indexOf(":"),a=o<0?s:s.slice(0,o),r=o<0?"":s.slice(o+1).replace(/^ /,"");a==="event"?t=r||"message":a==="data"&&n.push(r)}return n.length||t!=="message"?{event:t,data:n.join(`
2
+ `)}:void 0}f(sseEvent,"sseEvent"),u(sseEvent,"sseEvent"),c(sseEvent,"sseEvent");class ResponseSink{static{f(this,"ResponseSink")}static{u(this,"ResponseSink")}static{c(this,"ResponseSink")}constructor(t,n,s){this.contentType=t,this.startedAt=n,this.opts=s,this.total=0,this.kept=[],this.keptBytes=0,this.hash=(0,node_crypto_1.createHash)("sha256"),this.events=[],this.eventTotal=0,this.eventData=0,this.cut=!1,this.pendingText="",this.decoder=new TextDecoder,this.encoding=encodingOf(s.encoding),this.sse=!this.encoding&&/text\/event-stream/i.test(t),this.parsing=this.sse,this.hashing=!/json|^text\/|xml|form/i.test(t)}get size(){return this.total}take(t){const n=sseEvent(t);if(!n)return;this.eventTotal++;const s=Date.now()-this.startedAt;if(this.firstEventMs??=s,this.events.length>=MAX_EVENTS||this.eventData>=MAX_STREAM_KEPT){this.cut=!0;return}const o=this.opts.ai?void 0:(0,ai_store_1.redactAiText)(n.data).slice(0,MAX_EVENT_DATA);o&&(this.eventData+=o.length),this.events.push({atMs:s,event:n.event,bytes:Buffer.byteLength(t),...o!==void 0?{data:o}:{}})}push(t){if(this.total+=t.byteLength,this.sse){if(!this.parsing)return this.inTime();this.pendingText+=this.decoder.decode(t,{stream:!0});let n;for(;(n=this.pendingText.search(/\r?\n\r?\n/))>=0;){const s=/\r?\n\r?\n/.exec(this.pendingText.slice(n));this.take(this.pendingText.slice(0,n)),this.pendingText=this.pendingText.slice(n+s[0].length)}this.pendingText.length>MAX_READ&&(this.pendingText="",this.parsing=!1,this.cut=!0)}else this.opts.ai||(this.keptBytes<MAX_READ&&(this.kept.push(t),this.keptBytes+=t.byteLength),this.hashing&&!this.encoding&&(this.total<=MAX_HASH_BYTES?this.hash.update(t):this.hashing=!1));return this.inTime()}inTime(){return Date.now()-this.startedAt<=exports.MAX_STREAM_MS?!0:(this.cut=!0,!1)}finish(t=!1,n=Date.now()){t?this.cut=!0:this.parsing&&this.pendingText.trim()&&this.take(this.pendingText);const s=this.total,o=this.contentType.split(";")[0].trim();if(this.sse)return{endedAt:n,stream:{protocol:"sse",...this.firstEventMs!==void 0?{firstEventMs:this.firstEventMs}:{},events:this.events,bytes:s,total:this.eventTotal,...this.cut?{cut:!0}:{}}};if(this.opts.ai)return{endedAt:n,body:{contentType:o,size:s,kept:0,truncated:!1,omitted:"ai"}};const a=Buffer.concat(this.kept);if(this.encoding){const i=s<=MAX_READ?unpacked(this.encoding,a):void 0;if(!i)return{endedAt:n,body:{contentType:o.toLowerCase(),size:s,kept:0,truncated:!1,omitted:"encoded"}};const d=this.hashing&&i.length<=MAX_HASH_BYTES?(0,node_crypto_1.createHash)("sha256").update(i).digest("hex"):void 0;return{endedAt:n,body:(0,http_store_1.keepBody)(this.contentType,i,i.length,this.opts.paths,d)}}const r=this.hashing&&s<=MAX_HASH_BYTES?this.hash.digest("hex"):void 0;return{endedAt:n,body:(0,http_store_1.keepBody)(this.contentType,a,s,this.opts.paths,r)}}}exports.ResponseSink=ResponseSink;function readResponse(e,t,n,s){const o=(()=>{try{return e.headers.get("content-type")??""}catch{return""}})(),a=t.body;if(!a)return Promise.resolve({endedAt:Date.now()});const r=a.getReader(),i=new ResponseSink(o,n,s);return(async()=>{try{for(;;){const{done:d,value:h}=await r.read();if(d)break;if(!i.push(h)){await r.cancel().catch(()=>{});break}}}catch{return i.finish(!0)}return i.finish()})()}f(readResponse,"readResponse"),u(readResponse,"readResponse"),c(readResponse,"readResponse");async function requestPart(e,t,n,s,o,a){const{headers:r,redacted:i}=(0,http_store_1.redactHeaders)(e.headers);a.push(...i);const d=n==="bodies"&&t.length>1?(0,http_store_1.redactQuery)(t):[];let h;if(n==="bodies"){const l=e.contentType.split(";")[0].trim().toLowerCase();if(s)h={contentType:l,size:e.size??e.bytes?.byteLength??0,kept:0,truncated:!1,omitted:"ai"};else if(e.omitted)h={contentType:l,size:e.size??0,kept:0,truncated:!1,omitted:e.omitted};else{const y=e.bytes??await e.pending;y&&y.byteLength&&(h=(0,http_store_1.keepBody)(e.contentType,y,e.size??y.byteLength,o))}}return{headers:r,...d.length?{query:d}:{},...h?{body:h}:{}}}f(requestPart,"requestPart"),u(requestPart,"requestPart"),c(requestPart,"requestPart");
package/lib/http-store.js CHANGED
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var u=(e,t)=>d(e,"name",{value:t,configurable:!0});var f=Object.defineProperty,i=u((e,t)=>f(e,"name",{value:t,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.exchangeTime=exports.DEFAULT_HTTP_MAX_AGE_MS=exports.DEFAULT_HTTP_MAX_FILES=exports.newExchangeId=exports.MAX_KEPT_BYTES=exports.REMOVED=void 0,exports.httpCaptureMode=httpCaptureMode,exports.redactHeaders=redactHeaders,exports.redactQuery=redactQuery,exports.keepBody=keepBody,exports.pruneHttpExchanges=pruneHttpExchanges,exports.writeHttpExchange=writeHttpExchange;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_crypto_1=require("node:crypto"),http_exchange_1=require("@lensmcp/core/http-exchange"),redact_1=require("@lensmcp/core/redact"),ai_store_1=require("./ai-store"),emit_1=require("./emit"),mkdirSync=nodeFs.mkdirSync,writeFileSync=nodeFs.writeFileSync,renameSync=nodeFs.renameSync,readdirSync=nodeFs.readdirSync,unlinkSync=nodeFs.unlinkSync;function httpCaptureMode(e=process.env){const t=(e.LENSMCP_HTTP_CAPTURE??"").trim().toLowerCase();return t==="off"||t==="0"||t==="false"||t==="none"?"off":t==="headers"?"headers":"bodies"}u(httpCaptureMode,"httpCaptureMode"),i(httpCaptureMode,"httpCaptureMode"),exports.REMOVED="\u2022\u2022\u2022\u2022 redacted",exports.MAX_KEPT_BYTES=64*1024;const MAX_PARSE_BYTES=2*1024*1024,newExchangeId=i(()=>`hx_${Date.now().toString(36)}${(0,node_crypto_1.randomBytes)(5).toString("hex")}`,"newExchangeId");exports.newExchangeId=newExchangeId;const CREDENTIAL_HEADERS=/^(authorization|proxy-authorization|cookie|set-cookie|x-api-key|api-key|openai-organization|openai-project|x-internal-token|x-amz-security-token)$|-api-key$|-token$|-secret$/i,CREDENTIAL_FIELD=/pass(word|wd)?|secret|token|api[-_]?key|authorization|credential|cookie|signature/i;function jwtClaims(e){const t=e.split(".");if(t.length===3)try{const r=JSON.parse(Buffer.from(t[1].replace(/-/g,"+").replace(/_/g,"/"),"base64").toString("utf8"));return`JWT \xB7 ${["iss","aud","sub","exp"].filter(n=>r[n]!==void 0).map(n=>`${n}=${n==="exp"&&typeof r[n]=="number"?new Date(r[n]*1e3).toISOString():String(r[n]).slice(0,80)}`).join(" \xB7 ")||"no claims"} \xB7 ${exports.REMOVED.split(" ")[0]} signature`}catch{return}}u(jwtClaims,"jwtClaims"),i(jwtClaims,"jwtClaims");function redactHeaders(e){const t=[],r=[];for(const[n,a]of e){const o=n.toLowerCase();if(CREDENTIAL_HEADERS.test(o)||(0,redact_1.isSecretParam)(o)){r.push(o);const s=/^bearer\s+(\S+)$/i.exec(a.trim()),c=s?jwtClaims(s[1]):void 0,p=/^(\w+)\s+\S/.exec(a.trim())?.[1];t.push([o,c?`Bearer ${c}`:p&&o.endsWith("authorization")?`${p} ${exports.REMOVED}`:exports.REMOVED])}else t.push([o,(0,ai_store_1.redactAiText)(a).slice(0,2048)])}return{headers:t,redacted:r}}u(redactHeaders,"redactHeaders"),i(redactHeaders,"redactHeaders");function redactQuery(e){const t=[];try{for(const[r,n]of new URLSearchParams(e))t.push([r,(0,redact_1.isSecretParam)(r)||CREDENTIAL_FIELD.test(r)?exports.REMOVED:(0,ai_store_1.redactAiText)(n).slice(0,1024)])}catch{}return t.slice(0,100)}u(redactQuery,"redactQuery"),i(redactQuery,"redactQuery");function redactJson(e,t,r,n=0){if(n>32||e===null||typeof e!="object")return typeof e=="string"?(0,ai_store_1.redactAiText)(e):e;if(Array.isArray(e))return e.map((o,s)=>redactJson(o,`${t}[${s}]`,r,n+1));const a={};for(const[o,s]of Object.entries(e)){const c=t?`${t}.${o}`:o,p=typeof s=="number"&&/tokens/i.test(o);CREDENTIAL_FIELD.test(o)&&s!==null&&typeof s!="object"&&!p?(a[o]=exports.REMOVED,r.length<50&&r.push(c)):a[o]=redactJson(s,c,r,n+1)}return a}u(redactJson,"redactJson"),i(redactJson,"redactJson");const textual=i(e=>/json|^text\/|x-www-form-urlencoded|xml|javascript|graphql|event-stream/i.test(e)||e==="","textual");function keepBody(e,t,r,n,a){const o=e.split(";")[0].trim().toLowerCase();if(!textual(o))return{contentType:o||"application/octet-stream",size:r,kept:0,truncated:!1,omitted:"binary",...a?{sha256:a}:{}};const s=t.byteLength>=r&&r<=MAX_PARSE_BYTES,c=Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString("utf8");let p;if(s&&/json/.test(o))try{p=JSON.stringify(redactJson(JSON.parse(c),"",n))}catch{p=(0,ai_store_1.redactAiText)(c)}else s&&/x-www-form-urlencoded/.test(o)?p=new URLSearchParams(redactQuery(c)).toString():p=(0,ai_store_1.redactAiText)(c);const x=Buffer.byteLength(p)>exports.MAX_KEPT_BYTES?Buffer.from(p).subarray(0,exports.MAX_KEPT_BYTES).toString("utf8"):p;return{contentType:o,size:r,kept:Buffer.byteLength(x),text:x,truncated:r>t.byteLength||x.length<p.length}}u(keepBody,"keepBody"),i(keepBody,"keepBody"),exports.DEFAULT_HTTP_MAX_FILES=1e4,exports.DEFAULT_HTTP_MAX_AGE_MS=1440*6e4;const PRUNE_EVERY_MS=3e4,maxFiles=i(()=>{const e=Number(process.env.LENSMCP_HTTP_MAX_FILES);return Number.isInteger(e)&&e>=10?e:exports.DEFAULT_HTTP_MAX_FILES},"maxFiles"),maxAgeMs=i(()=>{const e=Number(process.env.LENSMCP_HTTP_MAX_AGE_MS);return Number.isFinite(e)&&e>=6e4?e:exports.DEFAULT_HTTP_MAX_AGE_MS},"maxAgeMs"),exchangeTime=i(e=>{const t=/^hx_([0-9a-z]{8})/.exec(e),r=t?parseInt(t[1],36):NaN;return Number.isFinite(r)?r:void 0},"exchangeTime");exports.exchangeTime=exchangeTime;const lastPrune=new Map;function pruneHttpExchanges(e,t=Date.now()){let r=0;try{const n=readdirSync(e).filter(s=>/^hx_[0-9a-z]+\.json$/.test(s)).sort(),a=n.length-maxFiles(),o=t-maxAgeMs();for(let s=0;s<n.length;s+=1){const c=(0,exports.exchangeTime)(n[s]);if(s>=a&&(c===void 0||c>=o))break;try{unlinkSync(`${e}/${n[s]}`),r+=1}catch{}}}catch{}return r}u(pruneHttpExchanges,"pruneHttpExchanges"),i(pruneHttpExchanges,"pruneHttpExchanges");function writeHttpExchange(e){try{const t=(0,http_exchange_1.exchangePlace)(e),r=(0,http_exchange_1.httpExchangeDir)(emit_1.EVENT_FILE,t);mkdirSync(r,{recursive:!0,mode:448});const n=(0,http_exchange_1.httpExchangeFile)(emit_1.EVENT_FILE,e.id,t);writeFileSync(`${n}.tmp`,JSON.stringify(e),{mode:384}),renameSync(`${n}.tmp`,n);const a=Date.now();return a-(lastPrune.get(t)??0)>=PRUNE_EVERY_MS&&(lastPrune.set(t,a),pruneHttpExchanges(r,a)),!0}catch{return!1}}u(writeHttpExchange,"writeHttpExchange"),i(writeHttpExchange,"writeHttpExchange");
1
+ "use strict";var h=Object.defineProperty;var x=(e,t)=>h(e,"name",{value:t,configurable:!0});var d=Object.defineProperty,u=x((e,t)=>d(e,"name",{value:t,configurable:!0}),"u"),f=Object.defineProperty,i=u((e,t)=>f(e,"name",{value:t,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.exchangeTime=exports.DEFAULT_HTTP_MAX_AGE_MS=exports.DEFAULT_HTTP_MAX_FILES=exports.newExchangeId=exports.MAX_KEPT_BYTES=exports.REMOVED=void 0,exports.httpCaptureMode=httpCaptureMode,exports.redactHeaders=redactHeaders,exports.redactQuery=redactQuery,exports.keepBody=keepBody,exports.pruneHttpExchanges=pruneHttpExchanges,exports.writeHttpExchange=writeHttpExchange;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_crypto_1=require("node:crypto"),http_exchange_1=require("@lensmcp/core/http-exchange"),redact_1=require("@lensmcp/core/redact"),ai_store_1=require("./ai-store"),emit_1=require("./emit"),mkdirSync=nodeFs.mkdirSync,writeFileSync=nodeFs.writeFileSync,renameSync=nodeFs.renameSync,readdirSync=nodeFs.readdirSync,unlinkSync=nodeFs.unlinkSync;function httpCaptureMode(e=process.env){const t=(e.LENSMCP_HTTP_CAPTURE??"").trim().toLowerCase();return t==="off"||t==="0"||t==="false"||t==="none"?"off":t==="headers"?"headers":"bodies"}x(httpCaptureMode,"httpCaptureMode"),u(httpCaptureMode,"httpCaptureMode"),i(httpCaptureMode,"httpCaptureMode"),exports.REMOVED="\u2022\u2022\u2022\u2022 redacted",exports.MAX_KEPT_BYTES=64*1024;const MAX_PARSE_BYTES=2*1024*1024,newExchangeId=i(()=>`hx_${Date.now().toString(36)}${(0,node_crypto_1.randomBytes)(5).toString("hex")}`,"newExchangeId");exports.newExchangeId=newExchangeId;const CREDENTIAL_HEADERS=/^(authorization|proxy-authorization|cookie|set-cookie|x-api-key|api-key|openai-organization|openai-project|x-internal-token|x-amz-security-token)$|-api-key$|-token$|-secret$/i,CREDENTIAL_FIELD=/pass(word|wd)?|secret|token|api[-_]?key|authorization|credential|cookie|signature/i;function jwtClaims(e){const t=e.split(".");if(t.length===3)try{const r=JSON.parse(Buffer.from(t[1].replace(/-/g,"+").replace(/_/g,"/"),"base64").toString("utf8"));return`JWT \xB7 ${["iss","aud","sub","exp"].filter(n=>r[n]!==void 0).map(n=>`${n}=${n==="exp"&&typeof r[n]=="number"?new Date(r[n]*1e3).toISOString():String(r[n]).slice(0,80)}`).join(" \xB7 ")||"no claims"} \xB7 ${exports.REMOVED.split(" ")[0]} signature`}catch{return}}x(jwtClaims,"jwtClaims"),u(jwtClaims,"jwtClaims"),i(jwtClaims,"jwtClaims");function redactHeaders(e){const t=[],r=[];for(const[n,a]of e){const o=n.toLowerCase();if(CREDENTIAL_HEADERS.test(o)||(0,redact_1.isSecretParam)(o)){r.push(o);const s=/^bearer\s+(\S+)$/i.exec(a.trim()),c=s?jwtClaims(s[1]):void 0,p=/^(\w+)\s+\S/.exec(a.trim())?.[1];t.push([o,c?`Bearer ${c}`:p&&o.endsWith("authorization")?`${p} ${exports.REMOVED}`:exports.REMOVED])}else t.push([o,(0,ai_store_1.redactAiText)(a).slice(0,2048)])}return{headers:t,redacted:r}}x(redactHeaders,"redactHeaders"),u(redactHeaders,"redactHeaders"),i(redactHeaders,"redactHeaders");function redactQuery(e){const t=[];try{for(const[r,n]of new URLSearchParams(e))t.push([r,(0,redact_1.isSecretParam)(r)||CREDENTIAL_FIELD.test(r)?exports.REMOVED:(0,ai_store_1.redactAiText)(n).slice(0,1024)])}catch{}return t.slice(0,100)}x(redactQuery,"redactQuery"),u(redactQuery,"redactQuery"),i(redactQuery,"redactQuery");function redactJson(e,t,r,n=0){if(n>32||e===null||typeof e!="object")return typeof e=="string"?(0,ai_store_1.redactAiText)(e):e;if(Array.isArray(e))return e.map((o,s)=>redactJson(o,`${t}[${s}]`,r,n+1));const a={};for(const[o,s]of Object.entries(e)){const c=t?`${t}.${o}`:o,p=typeof s=="number"&&/tokens/i.test(o);CREDENTIAL_FIELD.test(o)&&s!==null&&typeof s!="object"&&!p?(a[o]=exports.REMOVED,r.length<50&&r.push(c)):a[o]=redactJson(s,c,r,n+1)}return a}x(redactJson,"redactJson"),u(redactJson,"redactJson"),i(redactJson,"redactJson");const textual=i(e=>/json|^text\/|x-www-form-urlencoded|xml|javascript|graphql|event-stream/i.test(e)||e==="","textual");function keepBody(e,t,r,n,a){const o=e.split(";")[0].trim().toLowerCase();if(!textual(o))return{contentType:o||"application/octet-stream",size:r,kept:0,truncated:!1,omitted:"binary",...a?{sha256:a}:{}};const s=t.byteLength>=r&&r<=MAX_PARSE_BYTES,c=Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString("utf8");let p;if(s&&/json/.test(o))try{p=JSON.stringify(redactJson(JSON.parse(c),"",n))}catch{p=(0,ai_store_1.redactAiText)(c)}else s&&/x-www-form-urlencoded/.test(o)?p=new URLSearchParams(redactQuery(c)).toString():p=(0,ai_store_1.redactAiText)(c);const E=Buffer.byteLength(p)>exports.MAX_KEPT_BYTES?Buffer.from(p).subarray(0,exports.MAX_KEPT_BYTES).toString("utf8"):p;return{contentType:o,size:r,kept:Buffer.byteLength(E),text:E,truncated:r>t.byteLength||E.length<p.length}}x(keepBody,"keepBody"),u(keepBody,"keepBody"),i(keepBody,"keepBody"),exports.DEFAULT_HTTP_MAX_FILES=1e4,exports.DEFAULT_HTTP_MAX_AGE_MS=1440*6e4;const PRUNE_EVERY_MS=3e4,maxFiles=i(()=>{const e=Number(process.env.LENSMCP_HTTP_MAX_FILES);return Number.isInteger(e)&&e>=10?e:exports.DEFAULT_HTTP_MAX_FILES},"maxFiles"),maxAgeMs=i(()=>{const e=Number(process.env.LENSMCP_HTTP_MAX_AGE_MS);return Number.isFinite(e)&&e>=6e4?e:exports.DEFAULT_HTTP_MAX_AGE_MS},"maxAgeMs"),exchangeTime=i(e=>{const t=/^hx_([0-9a-z]{8})/.exec(e),r=t?parseInt(t[1],36):NaN;return Number.isFinite(r)?r:void 0},"exchangeTime");exports.exchangeTime=exchangeTime;const lastPrune=new Map;function pruneHttpExchanges(e,t=Date.now()){let r=0;try{const n=readdirSync(e).filter(s=>/^hx_[0-9a-z]+\.json$/.test(s)).sort(),a=n.length-maxFiles(),o=t-maxAgeMs();for(let s=0;s<n.length;s+=1){const c=(0,exports.exchangeTime)(n[s]);if(s>=a&&(c===void 0||c>=o))break;try{unlinkSync(`${e}/${n[s]}`),r+=1}catch{}}}catch{}return r}x(pruneHttpExchanges,"pruneHttpExchanges"),u(pruneHttpExchanges,"pruneHttpExchanges"),i(pruneHttpExchanges,"pruneHttpExchanges");function writeHttpExchange(e){try{const t=(0,http_exchange_1.exchangePlace)(e),r=(0,http_exchange_1.httpExchangeDir)(emit_1.EVENT_FILE,t);mkdirSync(r,{recursive:!0,mode:448});const n=(0,http_exchange_1.httpExchangeFile)(emit_1.EVENT_FILE,e.id,t);writeFileSync(`${n}.tmp`,JSON.stringify(e),{mode:384}),renameSync(`${n}.tmp`,n);const a=Date.now();return a-(lastPrune.get(t)??0)>=PRUNE_EVERY_MS&&(lastPrune.set(t,a),pruneHttpExchanges(r,a)),!0}catch{return!1}}x(writeHttpExchange,"writeHttpExchange"),u(writeHttpExchange,"writeHttpExchange"),i(writeHttpExchange,"writeHttpExchange");
package/lib/install.js CHANGED
@@ -1 +1 @@
1
- "use strict";var p=Object.defineProperty;var a=(t,r)=>p(t,"name",{value:r,configurable:!0});var s=Object.defineProperty,e=a((t,r)=>s(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installLensmcpNodeInstrumentation=installLensmcpNodeInstrumentation;const require_hook_1=require("./require-hook"),flow_context_1=require("./flow-context"),emit_custom_1=require("./emit-custom"),tap_egress_1=require("./tap-egress"),tap_ai_1=require("./tap-ai"),tap_fs_1=require("./tap-fs"),tap_exec_1=require("./tap-exec"),tap_pg_1=require("./tap-pg"),tap_redis_1=require("./tap-redis"),active_work_1=require("./active-work"),tap_bullmq_1=require("./tap-bullmq"),tap_nest_1=require("./tap-nest"),tap_nest_logger_1=require("./tap-nest-logger"),tap_event_loop_1=require("./tap-event-loop"),tap_ingress_1=require("./tap-ingress"),tap_stdout_1=require("./tap-stdout");function installLensmcpNodeInstrumentation(){const t=globalThis;if(!t.__lensmcpNodeInstrumented&&(t.__lensmcpNodeInstrumented=!0,process.env.LENSMCP_AUTO!=="0")){try{(0,active_work_1.installActiveWorkProbe)()}catch{}try{(0,flow_context_1.primeFlowContext)()}catch{}try{(0,emit_custom_1.installCustomEmit)()}catch{}try{(0,tap_egress_1.tapEgress)()}catch{}try{(0,tap_ingress_1.tapIngress)()}catch{}try{(0,tap_ai_1.tapAi)()}catch{}try{(0,tap_fs_1.tapFs)()}catch{}try{(0,tap_exec_1.tapExec)()}catch{}try{(0,tap_stdout_1.tapStdout)()}catch{}try{(0,tap_event_loop_1.tapEventLoop)()}catch{}try{(0,require_hook_1.installRequireHook)({pg:tap_pg_1.pgTap,ioredis:tap_redis_1.redisTap,bullmq:tap_bullmq_1.bullmqTap,"@nestjs/core":tap_nest_1.nestTap,"@nestjs/common":tap_nest_logger_1.nestLoggerTap})}catch{}try{(0,tap_nest_1.installChildAppBridge)()}catch{}}}a(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation"),e(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation");
1
+ "use strict";var i=Object.defineProperty;var n=(t,r)=>i(t,"name",{value:r,configurable:!0});var p=Object.defineProperty,a=n((t,r)=>p(t,"name",{value:r,configurable:!0}),"a"),s=Object.defineProperty,e=a((t,r)=>s(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installLensmcpNodeInstrumentation=installLensmcpNodeInstrumentation;const require_hook_1=require("./require-hook"),flow_context_1=require("./flow-context"),emit_custom_1=require("./emit-custom"),tap_egress_1=require("./tap-egress"),tap_ai_1=require("./tap-ai"),tap_fs_1=require("./tap-fs"),tap_exec_1=require("./tap-exec"),tap_pg_1=require("./tap-pg"),tap_redis_1=require("./tap-redis"),active_work_1=require("./active-work"),tap_bullmq_1=require("./tap-bullmq"),tap_nest_1=require("./tap-nest"),tap_nest_logger_1=require("./tap-nest-logger"),tap_event_loop_1=require("./tap-event-loop"),tap_ingress_1=require("./tap-ingress"),tap_stdout_1=require("./tap-stdout");function installLensmcpNodeInstrumentation(){const t=globalThis;if(!t.__lensmcpNodeInstrumented&&(t.__lensmcpNodeInstrumented=!0,process.env.LENSMCP_AUTO!=="0")){try{(0,active_work_1.installActiveWorkProbe)()}catch{}try{(0,flow_context_1.primeFlowContext)()}catch{}try{(0,emit_custom_1.installCustomEmit)()}catch{}try{(0,tap_egress_1.tapEgress)()}catch{}try{(0,tap_ingress_1.tapIngress)()}catch{}try{(0,tap_ai_1.tapAi)()}catch{}try{(0,tap_fs_1.tapFs)()}catch{}try{(0,tap_exec_1.tapExec)()}catch{}try{(0,tap_stdout_1.tapStdout)()}catch{}try{(0,tap_event_loop_1.tapEventLoop)()}catch{}try{(0,require_hook_1.installRequireHook)({pg:tap_pg_1.pgTap,ioredis:tap_redis_1.redisTap,bullmq:tap_bullmq_1.bullmqTap,"@nestjs/core":tap_nest_1.nestTap,"@nestjs/common":tap_nest_logger_1.nestLoggerTap})}catch{}try{(0,tap_nest_1.installChildAppBridge)()}catch{}}}n(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation"),a(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation"),e(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation");
@@ -1 +1 @@
1
- "use strict";var l=Object.defineProperty;var s=(e,n)=>l(e,"name",{value:n,configurable:!0});var a=Object.defineProperty,r=s((e,n)=>a(e,"name",{value:n,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installRequireHook=installRequireHook;const tapped=new Set;function runTap(e,n,u){try{n(u)!==!1&&tapped.add(e)}catch{tapped.add(e)}}s(runTap,"runTap"),r(runTap,"runTap");function installRequireHook(e){const n=require("node:module"),u=n._load;n._load=function(t,...c){const i=u.call(this,t,...c),o=e[t];return o&&!tapped.has(t)&&runTap(t,o,i),i};for(const t of Object.keys(e)){if(tapped.has(t))continue;const c=e[t];if(c)try{const i=require.resolve(t),o=require.cache[i];o&&runTap(t,c,o.exports)}catch{}}}s(installRequireHook,"installRequireHook"),r(installRequireHook,"installRequireHook");
1
+ "use strict";var f=Object.defineProperty;var u=(e,o)=>f(e,"name",{value:o,configurable:!0});var l=Object.defineProperty,s=u((e,o)=>l(e,"name",{value:o,configurable:!0}),"s"),a=Object.defineProperty,r=s((e,o)=>a(e,"name",{value:o,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installRequireHook=installRequireHook;const tapped=new Set;function runTap(e,o,d){try{o(d)!==!1&&tapped.add(e)}catch{tapped.add(e)}}u(runTap,"runTap"),s(runTap,"runTap"),r(runTap,"runTap");function installRequireHook(e){const o=require("node:module"),d=o._load;o._load=function(n,...i){const c=d.call(this,n,...i),t=e[n];return t&&!tapped.has(n)&&runTap(n,t,c),c};for(const n of Object.keys(e)){if(tapped.has(n))continue;const i=e[n];if(i)try{const c=require.resolve(n),t=require.cache[c];t&&runTap(n,i,t.exports)}catch{}}}u(installRequireHook,"installRequireHook"),s(installRequireHook,"installRequireHook"),r(installRequireHook,"installRequireHook");