@lensmcp/cluster 1.18.11 → 1.18.14
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/basic-ssl.js +1 -1
- package/build-scope-patterns.js +1 -1
- package/create-webpack-dev.js +1 -1
- package/create-webpack-prod.js +1 -1
- package/executors/build/build.impl.js +1 -1
- package/executors/gateway/gateway-errors.js +1 -1
- package/executors/gateway/gateway.impl.js +1 -1
- package/executors/gateway/gateway.lib.js +1 -1
- package/executors/gateway/health-check.js +1 -1
- package/executors/gateway/jwks-verify.js +1 -1
- package/executors/gateway/main.prod-gateway.js +2 -2
- package/executors/gateway/main.rollout.js +4 -4
- package/executors/gateway/manifest.js +1 -1
- package/executors/gateway/metrics.js +1 -1
- package/executors/gateway/otel-tracing.js +1 -1
- package/executors/gateway/prod-gateway.lib.js +1 -1
- package/executors/gateway/prod-runtime/access-log.js +1 -1
- package/executors/gateway/prod-runtime/app.js +1 -1
- package/executors/gateway/prod-runtime/auth.js +1 -1
- package/executors/gateway/prod-runtime/cors.js +1 -1
- package/executors/gateway/prod-runtime/edge.js +1 -1
- package/executors/gateway/prod-runtime/handler.js +1 -1
- package/executors/gateway/prod-runtime/hooks.js +1 -1
- package/executors/gateway/prod-runtime/observability.js +1 -1
- package/executors/gateway/prod-runtime/rollout.js +1 -1
- package/executors/gateway/prod-runtime/routing.js +1 -1
- package/executors/gateway/prod-runtime/server.js +1 -1
- package/executors/gateway/prod-runtime/trust.js +1 -1
- package/executors/gateway/prod-runtime/upgrade.js +2 -2
- package/executors/gateway/prod-runtime/upstream.js +1 -1
- package/executors/gateway/providers-prod.js +1 -1
- package/executors/gateway/rate-limit.js +2 -2
- package/executors/gateway/registry-source.js +1 -1
- package/executors/gateway/rollout-ops.js +2 -2
- package/executors/gateway/runtime/auth.js +1 -1
- package/executors/gateway/runtime/chooser.js +7 -7
- package/executors/gateway/runtime/control.js +1 -1
- package/executors/gateway/runtime/dev-auth.js +1 -1
- package/executors/gateway/runtime/discovery.js +1 -1
- package/executors/gateway/runtime/edge.js +1 -1
- package/executors/gateway/runtime/handler.js +1 -1
- package/executors/gateway/runtime/hmr-reload.js +1 -1
- package/executors/gateway/runtime/hooks.js +1 -1
- package/executors/gateway/runtime/lens-children.d.ts +12 -0
- package/executors/gateway/runtime/lens-children.js +1 -1
- package/executors/gateway/runtime/lifecycle.d.ts +22 -0
- package/executors/gateway/runtime/lifecycle.js +3 -3
- package/executors/gateway/runtime/observability.js +2 -2
- package/executors/gateway/runtime/pod-env.js +2 -2
- package/executors/gateway/runtime/proxy.js +1 -1
- package/executors/gateway/runtime/route-registry.js +1 -1
- package/executors/gateway/runtime/scope.js +1 -1
- package/executors/gateway/runtime/server.js +2 -2
- package/executors/gateway/runtime/service-keys.js +1 -1
- package/executors/gateway/runtime/types.d.ts +9 -0
- package/executors/gateway/runtime/types.js +1 -1
- package/executors/gateway/runtime/upgrade.js +1 -1
- package/executors/gateway/runtime/workspace-registry.js +1 -1
- package/executors/gateway/ssrf-guard.js +1 -1
- package/executors/serve/serve.impl.js +1 -1
- package/executors/trust/trust.impl.js +3 -3
- package/gateway.js +1 -1
- package/index.js +1 -1
- package/main.devserver.js +5 -5
- package/package.json +4 -4
- package/tsgo-check-plugin.js +4 -4
- package/typecheck-bus.js +3 -3
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)){const w=
|
|
3
|
-
`)){if(/ERROR in |error TS\d+|Found \d+ error|Unhandled 'error' event|EADDRINUSE/.test(
|
|
1
|
+
"use strict";var O=Object.defineProperty;var v=(t,n)=>O(t,"name",{value:n,configurable:!0});var W=Object.defineProperty,E=v((t,n)=>W(t,"name",{value:n,configurable:!0}),"E"),I=Object.defineProperty,i=E((t,n)=>I(t,"name",{value:n,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.sourceSetSignature=sourceSetSignature,exports.sourceScopeDirs=sourceScopeDirs,exports.podRecycleReason=podRecycleReason,exports.lensFrontendStale=lensFrontendStale,exports.lensWatcherVerdict=lensWatcherVerdict,exports.lensChildWedged=lensChildWedged,exports.isPortConflictExit=isPortConflictExit,exports.createServiceLayer=createServiceLayer;const tslib_1=require("tslib"),node_child_process_1=require("node:child_process"),fs=tslib_1.__importStar(require("node:fs")),http=tslib_1.__importStar(require("node:http")),path=tslib_1.__importStar(require("node:path")),node_util_1=require("node:util"),discovery_1=require("./discovery"),scope_1=require("./scope"),pod_env_1=require("./pod-env"),types_1=require("./types");function eastWestEnv(t,n){const l={},d=t.serviceKeys[n];if(d&&(l.LENSMCP_SERVICE_KEY=d),t.https){const a=require("../../../basic-ssl").caCertPath();fs.existsSync(a)&&(l.NODE_EXTRA_CA_CERTS=a)}return l}v(eastWestEnv,"eastWestEnv"),E(eastWestEnv,"eastWestEnv"),i(eastWestEnv,"eastWestEnv");const sleep=i(t=>new Promise(n=>setTimeout(n,t)),"sleep"),SRC_EXCLUDE=new Set(["node_modules","dist","tmp","coverage","build","out","target"]),SRC_EXT=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".css",".scss",".sass",".less",".json",".html",".htm",".vue",".svelte",".mdx"]),SCAN_FILE_CAP=1e5;function fnv1a(t){let n=2166136261;for(let l=0;l<t.length;l+=1)n^=t.charCodeAt(l),n=Math.imul(n,16777619);return n>>>0}v(fnv1a,"fnv1a"),E(fnv1a,"fnv1a"),i(fnv1a,"fnv1a");const execFileP=(0,node_util_1.promisify)(node_child_process_1.execFile);async function gitIgnoredPaths(t){try{const{stdout:n}=await execFileP("git",["ls-files","--others","--directory","--ignored","--exclude-standard","-z"],{cwd:t,maxBuffer:33554432,timeout:1e4,windowsHide:!0});return new Set(n.split("\0").filter(Boolean))}catch{return new Set}}v(gitIgnoredPaths,"gitIgnoredPaths"),E(gitIgnoredPaths,"gitIgnoredPaths"),i(gitIgnoredPaths,"gitIgnoredPaths");async function sourceSetSignature(t,n,l){let d=0,a=0;const y=await gitIgnoredPaths(t),k=i(f=>path.relative(t,f).split(path.sep).join("/"),"rel"),S=i(async(f,A=!0)=>{if(d>SCAN_FILE_CAP)return;let x;try{x=await fs.promises.readdir(f,{withFileTypes:!0})}catch{return}for(const m of x){if(d>SCAN_FILE_CAP)return;const $=m.name,R=path.join(f,$);if(m.isDirectory()){if(!A||$.startsWith(".")||SRC_EXCLUDE.has($)||l?.has($)||$.endsWith("-devserver")||y.has(`${k(R)}/`))continue;await S(R)}else if(m.isFile()){const M=$.lastIndexOf(".");if(M<=0||!SRC_EXT.has($.slice(M))||y.has(k(R)))continue;d+=1,a^=fnv1a(R)}}},"walk");if(n&&n.length>0){await S(t,!1);for(const f of n)await S(f)}else await S(t);return`${d}:${(a>>>0).toString(36)}`}v(sourceSetSignature,"sourceSetSignature"),E(sourceSetSignature,"sourceSetSignature"),i(sourceSetSignature,"sourceSetSignature");function sourceScopeDirs(t,n,l,d,a){const y=i(f=>{const A=path.relative(t,f).split(path.sep).filter(Boolean);return A.length===0||A[0].startsWith("..")?"":A[0]},"bucketOf")(n);if(!y)return[];const k=new Set(l.filter(Boolean)),S=new Set([y]);for(const f of d)f.startsWith(".")||SRC_EXCLUDE.has(f)||a?.has(f)||f.endsWith("-devserver")||k.has(f)||S.add(f);return[...S].sort().map(f=>path.join(t,f))}v(sourceScopeDirs,"sourceScopeDirs"),E(sourceScopeDirs,"sourceScopeDirs"),i(sourceScopeDirs,"sourceScopeDirs");function podRecycleReason(t,n,l,d){return!t.proc||t.state!=="up"||t.spawnAt==null||t.inflight>0||n-t.lastUsed<d.settleMs||t.lastStaleRecycleAt!=null&&n-t.lastStaleRecycleAt<d.cooldownMs?null:l>0&&l-t.spawnAt>d.graceMs?"stale-source-set":d.maxAgeMs>0&&n-t.spawnAt>d.maxAgeMs?"max-age":null}v(podRecycleReason,"podRecycleReason"),E(podRecycleReason,"podRecycleReason"),i(podRecycleReason,"podRecycleReason");function lensFrontendStale(t,n,l,d,a){return!(d-n<a.cooldownMs||l<=0||l-t<=a.graceMs||d-l<a.settleMs)}v(lensFrontendStale,"lensFrontendStale"),E(lensFrontendStale,"lensFrontendStale"),i(lensFrontendStale,"lensFrontendStale");function lensWatcherVerdict(t,n,l){return t?t.lastFsSetEventAt>=n-l?"heard":"missed":"unknown"}v(lensWatcherVerdict,"lensWatcherVerdict"),E(lensWatcherVerdict,"lensWatcherVerdict"),i(lensWatcherVerdict,"lensWatcherVerdict");function lensChildWedged(t,n,l,d){const a=t.hasListened?d.graceMs:Math.max(d.graceMs,d.neverListenedGraceMs);return l-t.spawnedAt<a||l-n<d.cooldownMs||t.probeFails<Math.max(2,d.failureThreshold)?null:"wedged-no-listener"}v(lensChildWedged,"lensChildWedged"),E(lensChildWedged,"lensChildWedged"),i(lensChildWedged,"lensChildWedged");function isPortConflictExit(t,n){return t.signal||t.code===null||t.code===0||t.ranMs>n.fastFailMs?!1:t.portHeld}v(isPortConflictExit,"isPortConflictExit"),E(isPortConflictExit,"isPortConflictExit"),i(isPortConflictExit,"isPortConflictExit");function createServiceLayer(t,n){const{emit:l}=n,d=i(e=>e.wsKey===t.wsKey?void 0:path.join(e.root,".lensmcp","events.jsonl"),"serviceBus"),a=i((e,r,o,s,c)=>l(r,o,s,{wsKey:e.wsKey,...c},void 0,d(e)),"emitSvc"),y=i(e=>(e.scannedAt=0,(0,discovery_1.pickSock)(e,t.scanTtlMs)?e.socks.length:0),"scanNow"),k=i((e,r)=>{let o;try{o=(0,node_child_process_1.execFileSync)("ps",["ax","-ww","-o","pid=,pgid=,command="],{encoding:"utf8",timeout:5e3})}catch{return 0}const s=e.proc?.pid;let c=0;for(const p of o.split(`
|
|
2
|
+
`)){const w=p.match(/^\s*(\d+)\s+(\d+)\s+(.*)$/);if(!w)continue;const g=Number(w[1]),u=Number(w[2]),h=w[3];if(h.includes(`run ${r}`)&&/\bnx(\.js)?\b/.test(h)&&!(h.includes("/node_modules/nx/")&&!h.includes(e.root))&&!(g===process.pid||g===s)&&!(s!==void 0&&u===s)){try{process.kill(-u,"SIGKILL")}catch{try{process.kill(g,"SIGKILL")}catch{}}c+=1}}return c>0&&(console.log(`[gateway] ${r}: reaped ${c} stale runner tree(s) \u2014 a foreign generation held the nx task lock`),a(e,"warning",`stale-runner reap: ${e.project} (${c} foreign tree(s))`,`cluster-service:${e.project}`,{kind:"stale-runner-reap",project:e.project,reaped:c})),c},"reapForeignRunners"),S=i(e=>{if(t.stopped())return;const r=`${e.project}:${e.decl.serveTarget??"serve-hmr"}`,o=Math.max(1,e.decl.minPods??1);k(e,r),e.lockBlockedAt=void 0,console.log(`[gateway] starting ${r} (pods=${o})\u2026`),a(e,"info",`service starting: ${e.project} (${o} pod${o>1?"s":""})`,`cluster-service:${e.project}`,{kind:"service-starting",project:e.project,pods:o}),e.state="starting",e.spawnAt=Date.now();const s=path.join(e.root,"node_modules","nx","dist","bin","nx.js"),[c,p]=fs.existsSync(s)?[process.execPath,[s,"run",r,`--childCount=${o}`]]:["yarn",["nx","run",r,`--childCount=${o}`]],w=(0,node_child_process_1.spawn)(c,p,{cwd:e.root,detached:!0,env:{...(0,pod_env_1.podBaseEnv)(process.env,t.root,e.root),NX_DAEMON:"false",NX_ISOLATE_PLUGINS:"false",...e.wsKey?{LENSMCP_WS_KEY:e.wsKey}:{},LENSMCP_EVENT_FILE:e.wsKey===t.wsKey?t.eventFile:path.join(e.root,".lensmcp","events.jsonl"),LENSMCP_GATEWAY_PID:String(process.pid),...eastWestEnv(t,e.project)},stdio:["ignore","pipe","pipe"]});e.lastErrors=[],e.buildFailed=!1;const g=i(u=>{const h=u.toString();for(const j of h.split(`
|
|
3
|
+
`)){if(/ERROR in |error TS\d+|Found \d+ error|Unhandled 'error' event|EADDRINUSE/.test(j)){const _=j.replace(/\x1b\[[0-9;]*m/g,"").trim();e.lastErrors.push(_),e.lastErrors.length>12&&e.lastErrors.shift(),e.buildFailed=!0;const C=Date.now();(_!==e.lastErrorEmitSig||C-(e.lastErrorEmitAt??0)>=types_1.SERVICE_ERROR_THROTTLE_MS)&&(e.lastErrorEmitSig=_,e.lastErrorEmitAt=C,a(e,"error",`service error: ${e.project}`,`cluster-service:${e.project}`,{kind:"service-error",project:e.project,line:_}))}/No typescript errors found|webpack compiled successfully|Child#\d+ ready/.test(j)&&(e.buildFailed=!1),!e.lockBlockedAt&&/Waiting for .+ in another nx process/.test(j)&&(e.lockBlockedAt=Date.now(),console.log(`[gateway] ${r}: spawn blocked by a stale nx runner \u2014 breaking the lock + respawning`),a(e,"warning",`nx task lock: ${e.project} blocked by a stale runner \u2014 auto-breaking`,`cluster-service:${e.project}`,{kind:"nx-lock-break",project:e.project}),setTimeout(()=>{t.stopped()||!e.lockBlockedAt||(m(e,"parked on a foreign nx task lock \u2014 recycling",{announce:!1}),k(e,r),setTimeout(()=>{!t.stopped()&&!e.proc&&e.state==="down"&&S(e)},1500).unref?.())},250).unref?.())}},"sniff");w.stdout?.on("data",u=>{t.stopped()||(g(u),process.stdout.write(`[${e.project}] ${u}`))}),w.stderr?.on("data",u=>{t.stopped()||(g(u),process.stderr.write(`[${e.project}] ${u}`))}),w.on("exit",u=>{if(e.proc=void 0,e.state="down",t.stopped()||(console.log(`[gateway] ${r} exited (${u})`),a(e,u===0?"info":"warning",`service down: ${e.project} (exit ${u})`,`cluster-service:${e.project}`,{kind:"service-down",project:e.project,code:u}),u===0||e.buildFailed))return;const h=Date.now();if(e.restarts=(e.restarts??[]).filter(_=>h-_<types_1.SERVICE_RESTART_WINDOW_MS),e.restarts.length>=types_1.SERVICE_MAX_RESTARTS){a(e,"error",`service crash-looping: ${e.project} \u2014 ${types_1.SERVICE_MAX_RESTARTS}+ restarts/min, not auto-respawning (the next request retries)`,`cluster-service:${e.project}`,{kind:"service-crash-loop",project:e.project});return}e.restarts.push(h);const j=Math.min(8e3,500*2**(e.restarts.length-1));setTimeout(()=>{t.stopped()||e.proc||e.state!=="down"||(console.log(`[gateway] self-heal: respawning ${e.project} (restart ${e.restarts.length}/${types_1.SERVICE_MAX_RESTARTS})`),a(e,"info",`self-heal: respawning ${e.project}`,`cluster-service:${e.project}`,{kind:"service-respawn",project:e.project,attempt:e.restarts.length}),S(e))},j)}),e.proc=w},"spawnService"),f=i((e,r)=>{if(e.state==="up")return!1;e.state="up";const o=e.pool.socks.length;return a(e,"info",`service up: ${e.project} (${o} pods, ${r})`,`cluster-service:${e.project}`,{kind:"service-up",project:e.project,pods:o,adopted:r==="adopted"}),!0},"markUp"),A=i(async e=>{if(y(e.pool)>0)return f(e,"adopted"),!0;if(t.stopped())return!1;e.state!=="starting"&&!e.proc&&S(e);const r=Date.now()+t.startupTimeoutMs,o=Date.now()+12e3;for(;!t.stopped()&&Date.now()<r;){if(await sleep(Math.min(700,t.startupTimeoutMs/4)),e.buildFailed&&Date.now()>o)return!1;if(y(e.pool)>0){e.state="up",e.buildFailed=!1;const s=e.spawnAt?Date.now()-e.spawnAt:void 0;return console.log(`[gateway] ${e.project} up (${e.pool.socks.length} pods${s?`, cold start ${s}ms`:""})`),a(e,"info",`cold start: ${e.project} (${e.pool.socks.length} pods, ${s??"?"}ms)`,`cluster-service:${e.project}`,{kind:"cold-start",project:e.project,pods:e.pool.socks.length,durationMs:s}),!0}if(e.state==="down")return!1}return!1},"ensureUp"),x=i(e=>{const r=e.decl.maxPods??e.decl.minPods??1,o=e.pool.socks.length,s=e.decl.adminUrl??(e.decl.port?`http://localhost:${e.decl.port}`:void 0);if(!s||o===0||o>=r||e.inflight<=o||Date.now()-e.lastScaleAt<5e3)return;e.lastScaleAt=Date.now();const c=(s.startsWith("https")?require("node:https"):http).request(`${s}/webpack/scale`,{method:"POST",rejectUnauthorized:!1},p=>p.resume());c.on("error",()=>{}),c.end(JSON.stringify({pods:o+1})),console.log(`[gateway] autoscale ${e.project}: ${o} \u2192 ${o+1} pods (inflight ${e.inflight})`),a(e,"info",`autoscale: ${e.project} ${o} \u2192 ${o+1} pods`,`cluster-service:${e.project}`,{kind:"autoscale",project:e.project,from:o,to:o+1,inflight:e.inflight})},"scaleUp"),m=i((e,r,o)=>{if(!e.proc)return;console.log(`[gateway] ${e.project} ${r} \u2014 scaling to zero.`),o?.announce!==!1&&a(e,"info",`idle kill: ${e.project} (${r})`,`cluster-service:${e.project}`,{kind:"idle-kill",project:e.project,why:r});const s=e.proc;try{s.stdout?.removeAllListeners("data"),s.stderr?.removeAllListeners("data"),s.removeAllListeners("exit")}catch{}try{process.kill(-s.pid,"SIGTERM")}catch{try{s.kill("SIGTERM")}catch{}}e.proc=void 0,e.state="down",setTimeout(()=>{try{for(const c of fs.readdirSync(e.pool.dir)){if(!c.endsWith(".sock"))continue;const p=path.join(e.pool.dir,c);try{const w=Number(fs.readFileSync(`${p}.owner`,"utf8").trim());if(Number.isFinite(w)&&w>0)try{process.kill(w,0);continue}catch{}}catch{}try{fs.unlinkSync(p)}catch{}try{fs.unlinkSync(`${p}.owner`)}catch{}}}catch{}e.pool.socks=[],e.pool.scannedAt=0},1200).unref?.()},"killSpawned"),$=i(e=>{const r=Date.now();if(e.restarts=(e.restarts??[]).filter(o=>r-o<types_1.SERVICE_RESTART_WINDOW_MS),e.restarts.length>=types_1.SERVICE_MAX_RESTARTS){a(e,"error",`service crash-looping: ${e.project} \u2014 wedged ${types_1.SERVICE_MAX_RESTARTS}+\xD7/min, not auto-recycling (the next request retries)`,`cluster-service:${e.project}`,{kind:"service-crash-loop",project:e.project}),m(e,"wedged (crash-loop cap) \u2014 leaving down for the next request",{announce:!1});return}e.restarts.push(r),console.log(`[gateway] self-heal: recycling WEDGED ${e.project} (live parent, 0 live pods; ${e.restarts.length}/${types_1.SERVICE_MAX_RESTARTS})`),a(e,"warning",`self-heal: recycling wedged ${e.project} (0 live pods)`,`cluster-service:${e.project}`,{kind:"service-recycle",project:e.project,attempt:e.restarts.length}),m(e,"wedged: 0 live pods \u2014 recycling",{announce:!1}),setTimeout(()=>{!t.stopped()&&!e.proc&&e.state==="down"&&S(e)},1500).unref?.()},"recycleWedged"),R={maxAgeMs:types_1.POD_MAX_AGE_MS,graceMs:types_1.POD_STALE_GRACE_MS,settleMs:types_1.POD_RECYCLE_SETTLE_MS,cooldownMs:types_1.POD_STALE_RECYCLE_COOLDOWN_MS};let M;const T=new Map;let D=!1,b=0;const L=i(()=>{const e=t.projectRoots??{},r=new Set(t.services.map(s=>s.project));for(const s of t.routes)s.lens&&r.add(s.lens.project);const o=new Set;for(const s of r){const c=e[s];if(!c)continue;const p=path.relative(t.root,c).split(path.sep).filter(Boolean)[0];p&&!p.startsWith("..")&&o.add(p)}return[...o]},"managedBuckets"),P=i((e,r,o,s)=>{const c=t.projectRoots?.[e];if(!c)return;const p=sourceScopeDirs(t.root,c,o,r,s);return p.length>0?p:void 0},"scopeFor"),F=i(()=>{D||Date.now()-b<types_1.POD_STALE_SCAN_MS||(D=!0,b=Date.now(),(async()=>{const e=(0,scope_1.readSourceSetExclude)(t.root),r=await sourceSetSignature(t.root,void 0,e);if(M!==void 0&&r!==M&&(t.sourceSetChangedAt=Date.now(),l("info","source file set changed \u2014 stale pods recycle when idle","cluster-gateway",{kind:"source-set-changed"})),M=r,!t.projectRoots)return;let o;try{o=(await fs.promises.readdir(t.root,{withFileTypes:!0})).filter(g=>g.isDirectory()).map(g=>g.name)}catch{return}const s=L(),c=new Set(t.services.map(g=>g.project));for(const g of t.routes)g.lens&&c.add(g.lens.project);const p=new Map;for(const g of c){const u=P(g,o,s,e);if(!u)continue;const h=u.join("|"),j=p.get(h)??{dirs:u,projects:[]};j.projects.push(g),p.set(h,j)}const w=Date.now();for(const[g,{dirs:u,projects:h}]of p){const j=await sourceSetSignature(t.root,u,e),_=T.get(g);if(T.set(g,j),!(_===void 0||j===_)){t.sourceSetChangedFor??=new Map;for(const C of h)t.sourceSetChangedFor.set(C,w);l("info",`source file set changed in ${h.join(", ")}'s scope`,"cluster-gateway",{kind:"source-set-changed",scoped:!0,projects:h})}}})().catch(()=>{}).finally(()=>{D=!1}))},"maybeScanSourceSet"),N=i((e,r)=>{e.lastStaleRecycleAt=Date.now(),console.log(`[gateway] zombie recycle: ${e.project} (${r}) \u2014 stale fs view; fresh pod incoming`),a(e,"warning",`zombie recycle: ${e.project} (${r})`,`cluster-service:${e.project}`,{kind:"pod-recycle",project:e.project,reason:r});const o=!!e.decl.eager;m(e,`${r} \u2014 recycling stale pod`,{announce:!1}),o&&setTimeout(()=>{!t.stopped()&&!e.proc&&e.state==="down"&&S(e)},1500).unref?.()},"recyclePod");return{scanNow:y,spawnService:S,ensureUp:A,scaleUp:x,killSpawned:m,markUp:f,startSweeper:i(()=>{const e=setInterval(()=>{if(!t.stopped()){types_1.POD_RECYCLE_ENABLED&&F();for(const r of t.services){if(t.stopped()||!r.proc){r.wedgedSince=void 0;continue}const o=r.decl.idleKillSec;if(o&&r.inflight===0&&Date.now()-r.lastUsed>o*1e3){m(r,`idle ${o}s`),r.wedgedSince=void 0;continue}const s=r.state==="starting"&&r.spawnAt!==void 0&&Date.now()-r.spawnAt<t.startupTimeoutMs,c=y(r.pool)>0;if(c||s){if(r.wedgedSince=void 0,c&&f(r,"observed"),c&&!s&&types_1.POD_RECYCLE_ENABLED){const p=t.sourceSetChangedFor?.get(r.project)??t.sourceSetChangedAt??0,w=podRecycleReason(r,Date.now(),p,R);w&&N(r,w)}continue}r.wedgedSince??=Date.now(),Date.now()-r.wedgedSince>types_1.WEDGE_RECYCLE_GRACE_MS&&(r.wedgedSince=void 0,$(r))}}},t.sweepMs);return e.unref(),e},"startSweeper")}}v(createServiceLayer,"createServiceLayer"),E(createServiceLayer,"createServiceLayer"),i(createServiceLayer,"createServiceLayer");
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`;busHygiene?.maybeRotateEventFile(n,
|
|
1
|
+
"use strict";var O=Object.defineProperty;var g=(o,i)=>O(o,"name",{value:i,configurable:!0});var v=Object.defineProperty,f=g((o,i)=>v(o,"name",{value:i,configurable:!0}),"f"),_=Object.defineProperty,s=f((o,i)=>_(o,"name",{value:i,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.LENS_DASHBOARD_PROJECT=void 0,exports.createObservability=createObservability;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),redact_1=require("@lensmcp/core/redact"),busHygiene=(()=>{try{return require("@lensmcp/node-instrumentation")}catch{return}})();exports.LENS_DASHBOARD_PROJECT="(lens-dashboard)";const hdr=s(o=>typeof o=="string"&&o!==""?o:Array.isArray(o)?o[0]:void 0,"hdr");function createObservability(o,i){const p=s(()=>Date.now().toString(36)+Math.random().toString(36).slice(2,12),"eid"),m=busHygiene?.createEventFloodGuard({burst:30,perSec:5}),l=s((e,t,r,a,d,u)=>{const n=u??o;try{const h=m?m.admit(r):{ok:!0,suppressed:0};if(!h.ok)return;fs.mkdirSync(path.dirname(n),{recursive:!0});const y=a&&(0,redact_1.redactDeep)(a),b=JSON.stringify({id:p(),sessionId:"pending",timestamp:Date.now(),source:"gateway",category:"cluster",severity:e,context:(0,redact_1.redactDeep)({sessionId:"pending",...d}),fingerprint:r,title:(0,redact_1.safeTitle)(t),raw:h.suppressed>0?{...y,floodSuppressed:h.suppressed}:y})+`
|
|
2
|
+
`;busHygiene?.maybeRotateEventFile(n,b.length),fs.appendFileSync(n,b)}catch{}},"emit"),w=s(e=>{const t=hdr(e.headers["x-lensmcp-flow-id"]);let r=hdr(e.headers["x-request-id"]);if(!(!t&&!r&&!hdr(e.headers.traceparent)))return r||(r=p(),e.headers["x-request-id"]=r),{startedAt:Date.now(),method:(e.method??"GET").toUpperCase(),host:(e.headers.host||"").split(":")[0],url:e.url??"/",steps:[],...t?{flowId:t}:{},...r?{requestId:r}:{},...hdr(e.headers["x-lensmcp-origin-node-id"])?{originNodeId:hdr(e.headers["x-lensmcp-origin-node-id"])}:{}}},"beginTrace"),S=s((e,t,r)=>{e&&e.steps.push({step:t,atMs:Date.now()-e.startedAt,...r})},"traceStep"),D=s((e,t,r,a)=>{if(!e||e.done||(e.done=!0,t===exports.LENS_DASHBOARD_PROJECT&&r<500))return;const d=Date.now()-e.startedAt;l(r>=500?"error":"info",`gateway ${e.method} ${e.host}${e.url} \u2192 ${r} (${d}ms)`,`gateway-request:${t}`,{kind:"gateway-request",project:t,host:e.host,method:e.method,url:e.url,status:r,durationMs:d,startedAt:e.startedAt,steps:e.steps,...a},{...e.flowId?{flowId:e.flowId}:{},...e.requestId?{requestId:e.requestId}:{},...e.originNodeId?{originNodeId:e.originNodeId}:{}})},"finishTrace"),c=new Map;return{emit:l,eid:p,beginTrace:w,traceStep:S,finishTrace:D,recordEdge:s((e,t,r,a)=>{if(e.project===exports.LENS_DASHBOARD_PROJECT&&r<500&&r!==0)return;const d=e.host??"(default)",u=(a?a+"\u21D2":"")+d+"\u2192"+e.project,n=c.get(u)??{host:d,project:e.project,caller:a,count:0,totalMs:0,errors:0};n.count+=1,n.totalMs+=t,(r>=500||r===0)&&(n.errors+=1),c.set(u,n)},"recordEdge"),startEdgeFlusher:s(()=>{const e=setInterval(()=>{for(const t of c.values()){const r=Math.round(t.totalMs/t.count);l(t.errors?"warning":"info",`traffic ${t.host} \u2192 ${t.project}: ${t.count} req, ~${r}ms${t.errors?`, ${t.errors} errors`:""}`,`gateway-traffic:${t.host}->${t.project}`,{kind:"gateway-traffic",host:t.host,project:t.project,caller:t.caller,count:t.count,avgMs:r,errors:t.errors})}c.clear()},i.trafficFlushMs);return e.unref(),e},"startEdgeFlusher")}}g(createObservability,"createObservability"),f(createObservability,"createObservability"),s(createObservability,"createObservability");
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)){const
|
|
1
|
+
"use strict";var i=Object.defineProperty;var E=(t,e)=>i(t,"name",{value:e,configurable:!0});var p=Object.defineProperty,a=E((t,e)=>p(t,"name",{value:e,configurable:!0}),"a"),c=Object.defineProperty,s=a((t,e)=>c(t,"name",{value:e,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.FOREIGN_POD_ENV_DENYLIST=exports.WORKSPACE_DOTENV_FILES=void 0,exports.parseDotenvKeys=parseDotenvKeys,exports.workspaceDotenvKeys=workspaceDotenvKeys,exports.scrubEnv=scrubEnv,exports.podBaseEnv=podBaseEnv;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path"));exports.WORKSPACE_DOTENV_FILES=[".env",".env.local",".local.env"],exports.FOREIGN_POD_ENV_DENYLIST=["PG_URL","REDIS_URL","DATABASE_URL","POSTGRES_URL"];function parseDotenvKeys(t){const e=new Set;for(const o of t.split(`
|
|
2
|
+
`)){const r=o.trim();if(!r||r.startsWith("#"))continue;const n=r.match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/);n&&e.add(n[1])}return e}E(parseDotenvKeys,"parseDotenvKeys"),a(parseDotenvKeys,"parseDotenvKeys"),s(parseDotenvKeys,"parseDotenvKeys");function workspaceDotenvKeys(t){const e=new Set;for(const o of exports.WORKSPACE_DOTENV_FILES){let r;try{r=fs.readFileSync(path.join(t,o),"utf8")}catch{continue}for(const n of parseDotenvKeys(r))e.add(n)}return e}E(workspaceDotenvKeys,"workspaceDotenvKeys"),a(workspaceDotenvKeys,"workspaceDotenvKeys"),s(workspaceDotenvKeys,"workspaceDotenvKeys");function scrubEnv(t,e){const o={};for(const[r,n]of Object.entries(t))e.has(r)||exports.FOREIGN_POD_ENV_DENYLIST.includes(r)||(o[r]=n);return o}E(scrubEnv,"scrubEnv"),a(scrubEnv,"scrubEnv"),s(scrubEnv,"scrubEnv");function podBaseEnv(t,e,o){return path.resolve(o)===path.resolve(e)?t:scrubEnv(t,workspaceDotenvKeys(e))}E(podBaseEnv,"podBaseEnv"),a(podBaseEnv,"podBaseEnv"),s(podBaseEnv,"podBaseEnv");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var I=Object.defineProperty;var x=(p,i)=>I(p,"name",{value:i,configurable:!0});var q=Object.defineProperty,b=x((p,i)=>q(p,"name",{value:i,configurable:!0}),"b"),C=Object.defineProperty,s=b((p,i)=>C(p,"name",{value:i,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProxy=createProxy;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),http=tslib_1.__importStar(require("node:http")),path=tslib_1.__importStar(require("node:path")),discovery_1=require("./discovery"),edge_1=require("./edge"),types_1=require("./types");function isConnError(p){const i=p.code??"";return i==="ECONNREFUSED"||i==="ECONNRESET"||i==="ETIMEDOUT"||i==="EPIPE"||i==="EHOSTUNREACH"||i==="ENOENT"||/ECONNREFUSED|ECONNRESET|socket hang up|EPIPE/i.test(p.message)}x(isConnError,"isConnError"),b(isConnError,"isConnError"),s(isConnError,"isConnError");const HOP_BY_HOP=new Set(["connection","keep-alive","proxy-connection","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),httpProxy=require("http-proxy");function createProxy(p,i,w){const{recordEdge:N,finishTrace:A,traceStep:T}=i,$={keepAlive:!0,keepAliveMsecs:3e4,maxSockets:1024,maxFreeSockets:256},v=new http.Agent($),O=new(require("node:https")).Agent($),k=s(r=>typeof r=="string"&&r.startsWith("https:")?O:v,"agentForTarget"),P=httpProxy.createProxyServer({xfwd:!0,secure:!1,proxyTimeout:12e4,agent:v}),j=s((r,t,e)=>{const u=s(()=>{e()||r.destroyed||r.destroy()},"onEdgeClose");t.once("close",u),r.once("close",()=>t.removeListener("close",u))},"propagateEdgeCancel");P.on("proxyReq",(r,t,e)=>{j(r,e,()=>e.writableEnded)}),P.on("proxyRes",(r,t,e)=>{const u=t.__lensmcpPod;u&&(r.headers["x-lensmcp-pod"]=u),delete r.headers["x-powered-by"],r.headers.server="LensMCP",e&&j(r,e,()=>e.writableEnded)});const M=s((r,t,e,u)=>{const d={};for(const[o,h]of Object.entries(t.headers))h===void 0||o.startsWith(":")||HOP_BY_HOP.has(o)||(d[o]=h);const g=t.socket?.remoteAddress??"",f=t.headers["x-forwarded-for"];d["x-forwarded-for"]=f?`${String(f)}, ${g}`:g,d["x-forwarded-proto"]="https",d["x-forwarded-host"]||(d["x-forwarded-host"]=t.headers.host??"");let a=http,l;if(typeof r=="object")l={socketPath:r.socketPath,path:t.url,method:t.method,headers:d,agent:v};else{const o=new URL(r),h=o.protocol==="https:";a=h?require("node:https"):http,d.host=o.host,l={protocol:o.protocol,hostname:o.hostname,port:o.port||(h?443:80),path:t.url,method:t.method,headers:d,agent:k(r)}}const n=e;n.__lensmcpErrContained||(n.__lensmcpErrContained=!0,e.on("error",()=>{}));let c;const y=s(()=>{m.destroy()},"onReqError"),E=s(()=>{c&&!c.destroyed&&c.destroy()},"onEdgeClose"),_=s(()=>{t.removeListener("error",y),e.removeListener("close",E)},"detach"),m=a.request(l,o=>{if(c=o,u.onResponse(),e.headersSent||e.writableEnded||e.destroyed){o.destroy();return}const h={};for(const[S,D]of Object.entries(o.headers))D===void 0||HOP_BY_HOP.has(S)||(h[S]=D);delete h["x-powered-by"],h.server="LensMCP";const U=t.__lensmcpPod;U&&(h["x-lensmcp-pod"]=U);try{e.writeHead(o.statusCode??502,h)}catch(S){console.error("[gateway] h2 relay: bad response header, resetting stream:",S.message),o.destroy(),e.destroyed||e.destroy(S);return}o.pipe(e);const R=s(()=>{!e.writableEnded&&!e.destroyed&&e.destroy()},"abortEdge");o.once("error",R),o.once("close",R),e.on("close",E)});m.once("error",o=>u.onError(o)),m.once("close",_),t.on("error",y),t.method==="GET"||t.method==="HEAD"||t.method==="OPTIONS"?m.end():t.pipe(m)},"pipeUpstream"),H=s(async(r,t,e)=>{const u=t.__lensmcpTrace;if(r.pool){const a=r.svc;a&&(a.lastUsed=Date.now(),a.inflight+=1,e.on("close",()=>{a.inflight-=1,a.lastUsed=Date.now()}));let l=(0,discovery_1.pickSock)(r.pool,p.scanTtlMs);if(!l&&a&&(T(u,"cold-start",{project:r.project}),await w.ensureUp(a)&&(l=(0,discovery_1.pickSock)(r.pool,p.scanTtlMs))),a&&l&&w.markUp(a,"observed"),a&&w.scaleUp(a),!l){const _=a?.lastErrors?.length?` Service errors: ${a.lastErrors.join("; ")}`:"";(0,edge_1.sendError)(e,t,503,"unavailable",`Service ${r.project} is not reachable (no pods in ${r.pool.dir}).${_} The watcher recovers and the next request retries automatically.`);return}const n=path.basename(l,".sock");t.__lensmcpPod=n,T(u,"pod-select",{pod:n,pods:r.pool.socks.length,strategy:"round-robin"});let c=!1;const y=s(_=>{r.pool.socks=r.pool.socks.filter(m=>m!==l),r.pool.idx=-1;try{fs.unlinkSync(l)}catch{}console.error(`[gateway] pod ${n} of ${r.project}: ${_}`)},"evictPod"),E=setTimeout(()=>{c||e.headersSent||e.writableEnded||(c=!0,y(`no response within ${types_1.POD_RESPONSE_TIMEOUT_MS}ms (wedged socket) \u2014 evicted + respawning`),(0,edge_1.sendError)(e,t,502,"unavailable",`Pod ${n} of ${r.project} was unresponsive \u2014 evicted, retry.`))},types_1.POD_RESPONSE_TIMEOUT_MS);E.unref?.(),e.on("close",()=>clearTimeout(E)),M({socketPath:l},t,e,{onResponse:s(()=>{clearTimeout(E),c=!0},"onResponse"),onError:s(_=>{clearTimeout(E),!c&&(c=!0,y(_.message),(0,edge_1.sendError)(e,t,502,"unavailable",`Pod ${n} of ${r.project} unavailable \u2014 retry.`))},"onError")});return}const d=r.target,g=Date.now()+types_1.UPSTREAM_HEAL_WINDOW_MS,f=s(()=>{M(d,t,e,{onResponse:s(()=>{},"onResponse"),onError:s(a=>{if(isConnError(a)&&Date.now()<g&&!e.headersSent&&!e.writableEnded&&!e.destroyed){setTimeout(f,types_1.UPSTREAM_HEAL_STEP_MS).unref?.();return}if(e.headersSent||e.writableEnded||e.destroyed){e.destroyed||e.destroy();return}console.error(`[gateway] upstream ${r.project} (${String(d)}):`,a.message),(0,edge_1.sendError)(e,t,502,"unavailable",`Upstream ${r.project} unavailable.`)},"onError")})},"tryTcp");f()},"forwardNative");return{proxy:P,forward:s(async(r,t,e)=>{const u=Date.now(),d=t.__lensmcpTrace;if(e.on("close",()=>{N(r,Date.now()-u,e.statusCode??0,t.__lensmcpCaller),A(d,r.project,e.statusCode??0,{...t.__lensmcpPod?{pod:t.__lensmcpPod}:{},...t.__lensmcpCaller?{caller:t.__lensmcpCaller}:{}})}),r.prependPrefix&&!t.url?.startsWith(r.prependPrefix)&&(t.url=r.prependPrefix+(t.url??"/")),(t.httpVersionMajor??1)>=2){await H(r,t,e);return}if(r.pool){const n=r.svc;n&&(n.lastUsed=Date.now(),n.inflight+=1,e.on("close",()=>{n.inflight-=1,n.lastUsed=Date.now()}));let c=(0,discovery_1.pickSock)(r.pool,p.scanTtlMs);if(!c&&n&&(T(d,"cold-start",{project:r.project}),await w.ensureUp(n)&&(c=(0,discovery_1.pickSock)(r.pool,p.scanTtlMs))),n&&c&&w.markUp(n,"observed"),n&&w.scaleUp(n),!c){const o=n?.lastErrors?.length?` Service errors: ${n.lastErrors.join("; ")}`:"";(0,edge_1.sendError)(e,t,503,"unavailable",`Service ${r.project} is not reachable (no pods in ${r.pool.dir}).${o} The watcher recovers and the next request retries automatically.`);return}const y=path.basename(c,".sock");t.__lensmcpPod=y,T(d,"pod-select",{pod:y,pods:r.pool.socks.length,strategy:"round-robin"});let E=!1;const _=s(o=>{r.pool.socks=r.pool.socks.filter(h=>h!==c),r.pool.idx=-1;try{fs.unlinkSync(c)}catch{}console.error(`[gateway] pod ${y} of ${r.project}: ${o}`)},"evictPod"),m=setTimeout(()=>{E||e.headersSent||e.writableEnded||(E=!0,_(`no response within ${types_1.POD_RESPONSE_TIMEOUT_MS}ms (wedged socket) \u2014 evicted + respawning`),(0,edge_1.sendError)(e,t,502,"unavailable",`Pod ${y} of ${r.project} was unresponsive \u2014 evicted, retry.`))},types_1.POD_RESPONSE_TIMEOUT_MS);m.unref?.(),e.on("close",()=>clearTimeout(m)),P.web(t,e,{target:{socketPath:c},agent:v},o=>{clearTimeout(m),!E&&(E=!0,_(o.message),(0,edge_1.sendError)(e,t,502,"unavailable",`Pod ${y} of ${r.project} unavailable \u2014 retry.`))});return}const g=r.target,f={target:g,autoRewrite:typeof g=="string",changeOrigin:!0,agent:k(g)},a=Date.now()+types_1.UPSTREAM_HEAL_WINDOW_MS,l=s(()=>{P.web(t,e,f,n=>{if(isConnError(n)&&Date.now()<a&&!e.headersSent&&!e.writableEnded&&!e.destroyed){setTimeout(l,types_1.UPSTREAM_HEAL_STEP_MS).unref?.();return}e.destroyed||(console.error(`[gateway] upstream ${r.project} (${String(g)}):`,n.message),(0,edge_1.sendError)(e,t,502,"unavailable",`Upstream ${r.project} unavailable.`))})},"tryTcp");l()},"forward"),agentForTarget:k,destroyAgents:s(()=>{v.destroy(),O.destroy()},"destroyAgents"),closeProxy:s(()=>{try{P.close?.()}catch{}},"closeProxy")}}x(createProxy,"createProxy"),b(createProxy,"createProxy"),s(createProxy,"createProxy");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var g=Object.defineProperty;var a=(t,e)=>g(t,"name",{value:e,configurable:!0});var u=Object.defineProperty,n=a((t,e)=>u(t,"name",{value:e,configurable:!0}),"n"),i=Object.defineProperty,r=n((t,e)=>i(t,"name",{value:e,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.RouteRegistry=void 0,exports.rebuildRoutesInPlace=rebuildRoutesInPlace;const manifest_1=require("../manifest");class RouteRegistry{static{a(this,"RouteRegistry")}static{n(this,"RouteRegistry")}static{r(this,"RouteRegistry")}constructor(){this.fragments=new Map}register(e){this.fragments.set(e.wsKey,e)}unregister(e){const s=this.fragments.get(e);return this.fragments.delete(e),s}has(e){return this.fragments.has(e)}get(e){return this.fragments.get(e)}keys(){return[...this.fragments.keys()]}size(){return this.fragments.size}appendRoutes(e,s){const o=this.fragments.get(e);o&&o.routes.push(...s)}allServices(){return[...this.fragments.values()].flatMap(e=>e.services)}merged(){const e=[...this.fragments.values()].flatMap(s=>s.routes);return(0,manifest_1.sortBySpecificity)(e),e}}exports.RouteRegistry=RouteRegistry;function rebuildRoutesInPlace(t,e){const s=e.merged();t.length=0,t.push(...s)}a(rebuildRoutesInPlace,"rebuildRoutesInPlace"),n(rebuildRoutesInPlace,"rebuildRoutesInPlace"),r(rebuildRoutesInPlace,"rebuildRoutesInPlace");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var u=Object.defineProperty;var a=(e,t)=>u(e,"name",{value:t,configurable:!0});var p=Object.defineProperty,n=a((e,t)=>p(e,"name",{value:t,configurable:!0}),"n"),c=Object.defineProperty,s=n((e,t)=>c(e,"name",{value:t,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.baseDomainOf=baseDomainOf,exports.readLensScope=readLensScope,exports.deriveMcpHttpPort=deriveMcpHttpPort,exports.readSourceSetExclude=readSourceSetExclude,exports.lensKeyFrom=lensKeyFrom,exports.lensSlug=lensSlug;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path"));function baseDomainOf(e){const t=e.filter(o=>!!o&&!o.startsWith("*."));if(t.length===0)return"local";const r=t.reduce((o,l)=>l.length<o.length?l:o);if(t.every(o=>o===r||o.endsWith("."+r)))return r;const i=r.split(".");return i.slice(-Math.min(i.length,3)).join(".")}a(baseDomainOf,"baseDomainOf"),n(baseDomainOf,"baseDomainOf"),s(baseDomainOf,"baseDomainOf");const BASE_PORTS={dashboard:4321,mcpHttp:4500};function hashToRange(e,t){let r=2166136261;for(let i=0;i<e.length;i++)r^=e.charCodeAt(i),r=Math.imul(r,16777619);return Math.abs(r|0)%t}a(hashToRange,"hashToRange"),n(hashToRange,"hashToRange"),s(hashToRange,"hashToRange");function readLensScope(e){try{const r=JSON.parse(fs.readFileSync(path.join(e,".lensmcp","config.json"),"utf8"));if(r&&typeof r.key=="string")return{key:r.key,dashboardPort:r.ports?.dashboard??BASE_PORTS.dashboard,mcpHttpPort:r.ports?.mcpHttp??deriveMcpHttpPort(r.key),basePath:r.dashboardBasePath??"/"+r.key}}catch{}const t=lensKeyFrom(e);return{key:t,dashboardPort:BASE_PORTS.dashboard,mcpHttpPort:deriveMcpHttpPort(t),basePath:"/"+t}}a(readLensScope,"readLensScope"),n(readLensScope,"readLensScope"),s(readLensScope,"readLensScope");function deriveMcpHttpPort(e){return BASE_PORTS.mcpHttp+hashToRange(e,200)}a(deriveMcpHttpPort,"deriveMcpHttpPort"),n(deriveMcpHttpPort,"deriveMcpHttpPort"),s(deriveMcpHttpPort,"deriveMcpHttpPort");function readSourceSetExclude(e){try{const t=JSON.parse(fs.readFileSync(path.join(e,".lensmcp","config.json"),"utf8"))?.sourceSet?.exclude;if(Array.isArray(t))return new Set(t.filter(r=>typeof r=="string"&&r.length>0&&!r.includes("/")))}catch{}return new Set}a(readSourceSetExclude,"readSourceSetExclude"),n(readSourceSetExclude,"readSourceSetExclude"),s(readSourceSetExclude,"readSourceSetExclude");function lensKeyFrom(e){try{const t=JSON.parse(fs.readFileSync(path.join(e,"package.json"),"utf8"));if(t?.name)return lensSlug(t.name)}catch{}return lensSlug(path.basename(e))}a(lensKeyFrom,"lensKeyFrom"),n(lensKeyFrom,"lensKeyFrom"),s(lensKeyFrom,"lensKeyFrom");function lensSlug(e){return e.toLowerCase().replace(/^@[^/]+\//,"").replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")||"workspace"}a(lensSlug,"lensSlug"),n(lensSlug,"lensSlug"),s(lensSlug,"lensSlug");
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var te=Object.defineProperty;var S=(t,r)=>te(t,"name",{value:r,configurable:!0});var Z=Object.defineProperty,m=S((t,r)=>Z(t,"name",{value:r,configurable:!0}),"m"),X=Object.defineProperty,n=m((t,r)=>X(t,"name",{value:r,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.BENIGN_SOCKET_ERRNOS=void 0,exports.buildEdgeVerifierPool=buildEdgeVerifierPool,exports.classifyClientError=classifyClientError,exports.createClientErrorLogGate=createClientErrorLogGate,exports.startGateway=startGateway;const tslib_1=require("tslib"),http=tslib_1.__importStar(require("node:http")),path=tslib_1.__importStar(require("node:path")),discovery_1=require("./discovery"),scope_1=require("./scope"),route_registry_1=require("./route-registry"),control_1=require("./control"),workspace_registry_1=require("./workspace-registry"),service_keys_1=require("./service-keys"),observability_1=require("./observability"),lifecycle_1=require("./lifecycle"),lens_children_1=require("./lens-children"),proxy_1=require("./proxy"),auth_1=require("./auth"),hooks_1=require("./hooks"),handler_1=require("./handler"),upgrade_1=require("./upgrade"),jwks_verify_1=require("../jwks-verify"),types_1=require("./types");function insecureLocalFetch(t,r){return new Promise((y,h)=>{const w=(t.startsWith("https:")?require("node:https"):require("node:http")).request(t,{method:"GET",headers:r?.headers,rejectUnauthorized:!1},_=>{const l=[];_.on("data",u=>l.push(u)),_.on("end",()=>{const u=_.statusCode??0,a=Buffer.concat(l).toString("utf8");y({ok:u>=200&&u<300,status:u,json:n(async()=>JSON.parse(a),"json")})})});w.on("error",h),w.end()})}S(insecureLocalFetch,"insecureLocalFetch"),m(insecureLocalFetch,"insecureLocalFetch"),n(insecureLocalFetch,"insecureLocalFetch");function buildEdgeVerifierPool(t){const r=process.env.LENSMCP_GW_JWKS_URL,y=process.env.LENSMCP_GW_JWT_ISS,h=new Map;let w;const _=n((l,u)=>{console.log(`[gateway] edge JWT: verifying via JWKS ${l}${u}`);const a=(0,jwks_verify_1.createJwksVerifier)({jwksUrl:l,...y?{issuer:y}:{},fetchImpl:insecureLocalFetch});return a.refresh().catch(f=>console.warn("[gateway] edge JWKS warm failed (will retry):",f.message)),a},"make");return{for(l){if(r)return w??=_(r,"");const u=l.split(":")[0].toLowerCase();let a;for(const T of t()){const v=T.host;if(typeof v!="string"||!/^auth\./.test(v)||v.startsWith("internal."))continue;const d=v.slice(5);(u===d||u.endsWith(`.${d}`))&&(!a||d.length>a.length)&&(a=d)}if(!a)return;let f=h.get(a);return f||(f=_(`https://auth.${a}/jwks.json`,` (auto-derived for apex ${a})`),h.set(a,f)),f},stop(){w?.stop();for(const l of h.values())l.stop()}}}S(buildEdgeVerifierPool,"buildEdgeVerifierPool"),m(buildEdgeVerifierPool,"buildEdgeVerifierPool"),n(buildEdgeVerifierPool,"buildEdgeVerifierPool"),exports.BENIGN_SOCKET_ERRNOS=new Set(["ECONNRESET","EPIPE","ETIMEDOUT","ECONNABORTED","ECANCELED"]);function classifyClientError(t,r){return t&&exports.BENIGN_SOCKET_ERRNOS.has(t)?{status:null,report:!1,cause:"client-abort"}:t==="HPE_INVALID_EOF_STATE"?{status:null,report:!1,cause:"truncated-at-eof"}:t==="ERR_HTTP_REQUEST_TIMEOUT"?{status:408,report:!0,cause:"request-timeout"}:t==="HPE_HEADER_OVERFLOW"?{status:431,report:!0,cause:"header-overflow"}:t?.startsWith("HPE_")?{status:400,report:!0,cause:"parse-error"}:{status:400,report:!0,cause:t??r??"unknown"}}S(classifyClientError,"classifyClientError"),m(classifyClientError,"classifyClientError"),n(classifyClientError,"classifyClientError");const CLIENT_ERROR_REASON={400:"Bad Request",408:"Request Timeout",431:"Request Header Fields Too Large"};function createClientErrorLogGate(t=1e4){const r=new Map;return y=>{const h=Date.now(),w=r.get(y)??0;return h-w<t?!1:(r.set(y,h),!0)}}S(createClientErrorLogGate,"createClientErrorLogGate"),m(createClientErrorLogGate,"createClientErrorLogGate"),n(createClientErrorLogGate,"createClientErrorLogGate");function guardInboundSocket(t){t.on("error",r=>{exports.BENIGN_SOCKET_ERRNOS.has(r.code??"")||console.warn(`[gateway] inbound socket error (${r.code??r.message}) \u2014 dropping this connection only`),t.destroy()})}S(guardInboundSocket,"guardInboundSocket"),m(guardInboundSocket,"guardInboundSocket"),n(guardInboundSocket,"guardInboundSocket");async function startGateway(t,r){const y=t.https!==!1,h=t.ports?.length?t.ports:[443],w=t.scanTtlMs??1500,_=t.startupTimeoutMs??12e4,l=t.sweepMs??1e4,u=t.trafficFlushMs??5e3;let a=!1;const f=process.env.LENSMCP_EVENT_FILE??path.join(r.root,".lensmcp","events.jsonl"),T=(0,scope_1.readLensScope)(r.root).key,{routes:v,services:d}=(0,discovery_1.discoverRoutes)(r.root,r.projectsConfigurations?.projects??{},void 0,T);if(v.length===0)throw new Error("[gateway] no project declares a `cluster` field \u2014 nothing to route.");const j=new route_registry_1.RouteRegistry;j.register({wsKey:T,root:r.root,routes:v,services:d});const b=[];let I=n(()=>{},"refreshCert");const L=n(()=>{(0,route_registry_1.rebuildRoutesInPlace)(b,j),I()},"rebuildRoutes");L();const{serviceKeys:D,keyToProject:B}=(0,service_keys_1.loadServiceKeys)(r.root,d),E={root:r.root,wsKey:T,eventFile:f,routes:b,registry:j,rebuildRoutes:L,services:d,serviceKeys:D,keyToProject:B,scanTtlMs:w,startupTimeoutMs:_,sweepMs:l,trafficFlushMs:u,https:y,projectRoots:Object.fromEntries(Object.entries(r.projectsConfigurations?.projects??{}).map(([e,o])=>[e,path.resolve(r.root,o.root)])),stopped:n(()=>a,"stopped")},p=(0,observability_1.createObservability)(f,{trafficFlushMs:u}),J=createClientErrorLogGate(),P=(0,lifecycle_1.createServiceLayer)(E,p),C=(0,lens_children_1.createLensChildren)(E,p,t),A=new Map;let N;try{N=(0,control_1.startControlServer)({rt:E,killService:n((e,o)=>P.killSpawned(e,o),"killService"),onRegister:n(async e=>{const o=await C.hostWorkspaceDashboard(e),i=await C.hostWorkspaceApps(e);A.set(e.wsKey,()=>{o?.(),i()})},"onRegister"),onUnregister:n(e=>{A.get(e.wsKey)?.(),A.delete(e.wsKey)},"onUnregister")})}catch(e){console.warn("[gateway] control plane failed to start (multi-workspace register disabled):",e.message)}const $=(0,proxy_1.createProxy)(E,p,P),G=buildEdgeVerifierPool(()=>E.routes),W=(0,auth_1.createEdgeAuth)(E,p,G);let O;if(t.middleware){const e=require(path.resolve(r.root,t.middleware));O=e.default??e}const Y=n(e=>{if(O)try{O(e.req)}catch(o){p.traceStep(e.trace,"auth",{mode:"middleware",ok:!1,reason:o.message}),e.route&&p.finishTrace(e.trace,e.route.project,401),e.sendError(401,"unauthorized",`Gateway middleware rejected the request: ${o.message}`)}},"builtinMiddleware"),K=t.hooks??{},U=(0,hooks_1.createHooks)({...K,afterAuth:[Y,...K.afterAuth??[]]}),F=(0,handler_1.createHandler)({rt:E,obs:p,auth:W,proxy:$,hooks:U}),z=(0,upgrade_1.createUpgrade)({rt:E,auth:W,proxy:$,hooks:U}),Q=p.startEdgeFlusher(),ee=P.startSweeper();await C.bootSingletonsAndApps();for(const e of d)e.decl.eager&&P.ensureUp(e);let k,M,R;if(y){const e=require("../../../basic-ssl"),o=(0,service_keys_1.gatewayCacheDir)(r.root);R=n(()=>e.getCertificateSync(o,"gateway",E.routes.map(i=>i.host).filter(i=>!!i)),"mintCert"),k=R(),M=e.caCertPath()}const x=[],q=[];for(const e of h){const o=k?require("node:http2").createSecureServer({key:k,cert:k,allowHTTP1:!0,maxSessionMemory:512,settings:{maxConcurrentStreams:512},peerMaxConcurrentStreams:512},(i,s)=>F(i,s)):http.createServer(F);if(o.on("upgrade",z),o.on("error",i=>console.error(`[gateway] port ${e}: ${i.code}`)),o.on("connection",guardInboundSocket),o.on("secureConnection",guardInboundSocket),o.on("tlsClientError",(i,s)=>s.destroy()),o.on("clientError",(i,s)=>{const g=i,c=classifyClientError(g.code,g.message);if(c.report&&J(c.cause)){const H=s.remoteAddress??"unknown",V=c.status===null?"dropped":String(c.status);console.warn(`[gateway] inbound H1 clientError from ${H}: ${c.cause} (${g.code??g.message}${g.bytesParsed!==void 0?`, bytesParsed=${g.bytesParsed}`:""}) \u2192 ${V}. This status is the GATEWAY's, not the upstream service's.`),p.emit("warning",`inbound clientError: ${c.cause} \u2192 ${V}`,`gateway-client-error:${c.cause}`,{kind:"gateway-client-error",cause:c.cause,code:g.code??null,status:c.status,peer:H,bytesParsed:g.bytesParsed??null})}c.status!==null&&s.writable&&s.end(`HTTP/1.1 ${c.status} ${CLIENT_ERROR_REASON[c.status]}\r
|
|
2
2
|
\r
|
|
3
|
-
`),s.destroy()}),
|
|
3
|
+
`),s.destroy()}),o.keepAliveTimeout=types_1.GATEWAY_KEEPALIVE_TIMEOUT_MS,o.headersTimeout<types_1.GATEWAY_KEEPALIVE_TIMEOUT_MS+5e3&&(o.headersTimeout=types_1.GATEWAY_KEEPALIVE_TIMEOUT_MS+5e3),k!=null){const i=o;i.on("session",s=>{s.on("error",g=>{const c=g.code??g.message;console.warn(`[gateway] h2 session error (${c}) \u2014 dropping this session only`),s.destroyed||s.destroy()})}),i.on("sessionError",s=>{console.warn(`[gateway] h2 sessionError: ${s.code??s.message}`)})}await new Promise(i=>{o.listen(e,()=>{const s=o.address()?.port??e;q.push(s),console.log(`[gateway] Listening on ${k?"https":"http"}://localhost:${s}`),i()})}),x.push(o)}R&&(I=n(()=>{const e=R();for(const o of x)o.setSecureContext?.({key:e,cert:e})},"refreshCert")),console.log("[gateway] Routes:");for(const e of b){const o=e.pool?`pods@${e.pool.dir}`:e.target;console.log(`[gateway] ${e.host??"(default)"} \u2192 ${o}${e.prependPrefix?` (+${e.prependPrefix})`:""}${e.internal?" [internal: no middleware]":""} [${e.project}]`)}return M&&console.log(`[gateway] CA: ${M} \u2014 one-time setup via the trust executor.`),p.emit("info",`gateway up: ${b.length} routes on ${q.join("/")}`,"cluster-gateway",{kind:"gateway-up",ports:q,routes:b.map(e=>({host:e.host??"(default)",project:e.project,mode:e.pool?"pods":"tcp",internal:!!e.internal,prependPrefix:e.prependPrefix}))}),{ports:q,routes:b,services:d,stop:n(async()=>{if(!a){a=!0,clearInterval(Q),clearInterval(ee),p.emit("info","gateway down","cluster-gateway",{kind:"gateway-down"}),G.stop(),N?.close(),(0,workspace_registry_1.unregisterWorkspace)(T);for(const e of d)P.killSpawned(e,"gateway shutdown");await C.reapAll(),await Promise.all(x.map(e=>new Promise(o=>e.close(()=>o())))),$.closeProxy(),$.destroyAgents()}},"stop")}}S(startGateway,"startGateway"),m(startGateway,"startGateway"),n(startGateway,"startGateway");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var f=Object.defineProperty;var o=(e,r)=>f(e,"name",{value:r,configurable:!0});var d=Object.defineProperty,i=o((e,r)=>d(e,"name",{value:r,configurable:!0}),"i"),u=Object.defineProperty,c=i((e,r)=>u(e,"name",{value:r,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.gatewayCacheDir=gatewayCacheDir,exports.loadServiceKeys=loadServiceKeys;const tslib_1=require("tslib"),node_crypto_1=require("node:crypto"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path"));function gatewayCacheDir(e){return path.join(e,"node_modules",".cache","davnx-webpack")}o(gatewayCacheDir,"gatewayCacheDir"),i(gatewayCacheDir,"gatewayCacheDir"),c(gatewayCacheDir,"gatewayCacheDir");function loadServiceKeys(e,r){const n=gatewayCacheDir(e),s=path.join(n,"service-keys.json");let t={};try{t=JSON.parse(fs.readFileSync(s,"utf8"))}catch{}let y=!1;for(const a of r)t[a.project]||(t[a.project]=(0,node_crypto_1.randomBytes)(16).toString("hex"),y=!0);if(y)try{fs.mkdirSync(n,{recursive:!0}),fs.writeFileSync(s,JSON.stringify(t,null,2))}catch{}const l=new Map(Object.entries(t).map(([a,p])=>[p,a]));return{serviceKeys:t,keyToProject:l}}o(loadServiceKeys,"loadServiceKeys"),i(loadServiceKeys,"loadServiceKeys"),c(loadServiceKeys,"loadServiceKeys");
|
|
@@ -230,6 +230,15 @@ export declare const POD_STALE_RECYCLE_COOLDOWN_MS: number;
|
|
|
230
230
|
* sets `LENSMCP_POD_RECYCLE=0` to stop staleness churn still wants a wedged 502 healed. Set
|
|
231
231
|
* `LENSMCP_LENS_PROBE=0` to disable. Default ON (dev). */
|
|
232
232
|
export declare const LENS_PROBE_ENABLED: boolean;
|
|
233
|
+
/** WATCHER-TESTIMONY gate on the stale-source-set recycle. The staleness signal only proves a file was
|
|
234
|
+
* ADDED/REMOVED in the app's scope — never that the vite MISSED it, and its own chokidar almost never
|
|
235
|
+
* does. Kill-first therefore cost every open tab a full reload (goodbye HMR) on each add an agent session
|
|
236
|
+
* made — the dominant "every change reloads the page" complaint (foodguard 2026-08-13). With this ON, the
|
|
237
|
+
* lens sweeper first asks the pod's `/__lensmcp/watcher-health` (served by `@lensmcp/vite-plugin`): a
|
|
238
|
+
* watcher that HEARD the change clears the pod — no recycle, HMR intact; a demonstrably SILENT one
|
|
239
|
+
* recycles exactly as before; a pod without the endpoint (older plugin) keeps the legacy kill-first path.
|
|
240
|
+
* Set `LENSMCP_LENS_WATCHER_PROBE=0` to restore kill-first unconditionally. */
|
|
241
|
+
export declare const LENS_WATCHER_PROBE_ENABLED: boolean;
|
|
233
242
|
/** Spawn grace: a child is never probed (and so never recycled) until it has had this long to BIND its port
|
|
234
243
|
* — a cold vite/nx boot in a big monorepo takes many seconds, and killing a still-booting dev server would
|
|
235
244
|
* be a self-inflicted outage. Override `LENSMCP_LENS_PROBE_GRACE_MS`. Default 45s. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var C=Object.defineProperty;var e=(_,E)=>C(_,"name",{value:E,configurable:!0});var M=Object.defineProperty,R=e((_,E)=>M(_,"name",{value:E,configurable:!0}),"R"),O=Object.defineProperty,L=R((_,E)=>O(_,"name",{value:E,configurable:!0}),"L");Object.defineProperty(exports,"__esModule",{value:!0}),exports.GATEWAY_KEEPALIVE_TIMEOUT_MS=exports.LENS_RECYCLE_KILL_GRACE_MS=exports.LENS_PARKED_PORT_REPROBE_MS=exports.MAX_PORT_CONFLICT_RETRIES=exports.CHILD_START_FAIL_MS=exports.PORT_FREE_POLL_MS=exports.PORT_FREE_WAIT_MS=exports.LENS_PROBE_BOOT_GRACE_MS=exports.LENS_PROBE_COOLDOWN_MS=exports.LENS_PROBE_TIMEOUT_MS=exports.LENS_PROBE_FAILS=exports.LENS_PROBE_GRACE_MS=exports.LENS_WATCHER_PROBE_ENABLED=exports.LENS_PROBE_ENABLED=exports.POD_STALE_RECYCLE_COOLDOWN_MS=exports.POD_STALE_SCAN_MS=exports.POD_RECYCLE_SETTLE_MS=exports.POD_STALE_GRACE_MS=exports.POD_MAX_AGE_MS=exports.POD_RECYCLE_ENABLED=exports.WEDGE_RECYCLE_GRACE_MS=exports.POD_RESPONSE_TIMEOUT_MS=exports.UPSTREAM_HEAL_STEP_MS=exports.UPSTREAM_HEAL_WINDOW_MS=exports.SERVICE_RESTART_WINDOW_MS=exports.SERVICE_MAX_RESTARTS=exports.SERVICE_ERROR_THROTTLE_MS=void 0;function envInt(_,E,P=!1){const S=Number(process.env[_]);return!Number.isFinite(S)||S<0?E:S===0?P?0:E:S}e(envInt,"envInt"),R(envInt,"envInt"),L(envInt,"envInt"),exports.SERVICE_ERROR_THROTTLE_MS=5e3,exports.SERVICE_MAX_RESTARTS=5,exports.SERVICE_RESTART_WINDOW_MS=6e4,exports.UPSTREAM_HEAL_WINDOW_MS=8e3,exports.UPSTREAM_HEAL_STEP_MS=300,exports.POD_RESPONSE_TIMEOUT_MS=(()=>{const _=Number(process.env.LENSMCP_POD_RESPONSE_TIMEOUT_MS);return Number.isFinite(_)&&_>0?_:3e4})(),exports.WEDGE_RECYCLE_GRACE_MS=(()=>{const _=Number(process.env.LENSMCP_WEDGE_RECYCLE_GRACE_MS);return Number.isFinite(_)&&_>0?_:15e3})(),exports.POD_RECYCLE_ENABLED=process.env.LENSMCP_POD_RECYCLE!=="0",exports.POD_MAX_AGE_MS=envInt("LENSMCP_POD_MAX_AGE_MS",240*6e4,!0),exports.POD_STALE_GRACE_MS=envInt("LENSMCP_POD_STALE_GRACE_MS",1e4),exports.POD_RECYCLE_SETTLE_MS=envInt("LENSMCP_POD_RECYCLE_SETTLE_MS",8e3),exports.POD_STALE_SCAN_MS=envInt("LENSMCP_POD_STALE_SCAN_MS",3e4),exports.POD_STALE_RECYCLE_COOLDOWN_MS=envInt("LENSMCP_POD_STALE_RECYCLE_COOLDOWN_MS",6e4),exports.LENS_PROBE_ENABLED=process.env.LENSMCP_LENS_PROBE!=="0",exports.LENS_WATCHER_PROBE_ENABLED=process.env.LENSMCP_LENS_WATCHER_PROBE!=="0",exports.LENS_PROBE_GRACE_MS=envInt("LENSMCP_LENS_PROBE_GRACE_MS",45e3),exports.LENS_PROBE_FAILS=envInt("LENSMCP_LENS_PROBE_FAILS",2),exports.LENS_PROBE_TIMEOUT_MS=envInt("LENSMCP_LENS_PROBE_TIMEOUT_MS",1e3),exports.LENS_PROBE_COOLDOWN_MS=envInt("LENSMCP_LENS_PROBE_COOLDOWN_MS",3e4),exports.LENS_PROBE_BOOT_GRACE_MS=envInt("LENSMCP_LENS_PROBE_BOOT_GRACE_MS",24e4),exports.PORT_FREE_WAIT_MS=envInt("LENSMCP_PORT_FREE_WAIT_MS",1e4),exports.PORT_FREE_POLL_MS=envInt("LENSMCP_PORT_FREE_POLL_MS",250),exports.CHILD_START_FAIL_MS=envInt("LENSMCP_CHILD_START_FAIL_MS",1e4),exports.MAX_PORT_CONFLICT_RETRIES=envInt("LENSMCP_MAX_PORT_CONFLICT_RETRIES",5),exports.LENS_PARKED_PORT_REPROBE_MS=envInt("LENSMCP_PARKED_PORT_REPROBE_MS",3e5),exports.LENS_RECYCLE_KILL_GRACE_MS=envInt("LENSMCP_RECYCLE_KILL_GRACE_MS",5e3),exports.GATEWAY_KEEPALIVE_TIMEOUT_MS=envInt("LENSMCP_KEEPALIVE_TIMEOUT_MS",76e3);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var _=Object.defineProperty;var f=(s,n)=>_(s,"name",{value:n,configurable:!0});var m=Object.defineProperty,u=f((s,n)=>m(s,"name",{value:n,configurable:!0}),"u"),y=Object.defineProperty,a=u((s,n)=>y(s,"name",{value:n,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createUpgrade=createUpgrade;const manifest_1=require("../manifest"),discovery_1=require("./discovery"),edge_1=require("./edge"),hmr_reload_1=require("./hmr-reload");function createUpgrade(s){const{rt:n,auth:g,proxy:h,hooks:c}=s,v=a(r=>(0,manifest_1.matchRoute)(n.routes,(r.headers.host||"").split(":")[0],r.url??"/"),"match"),x=a(async(r,o,d)=>{for(const t of edge_1.GATEWAY_OWNED_HEADERS)delete r.headers[t];const e=v(r);if(!e){o.destroy();return}const i=c.upgradeContext(r,o,void 0);if(i.route=e,e.internal){const t=g.internal(r,e,void 0);if(!t.ok){o.destroy();return}i.caller=t.caller}else{const t=g.public(r,e,void 0);if(!t.ok){o.destroy();return}if(i.claims=t.claims,c.has("afterAuth")&&(await c.run("afterAuth",i),i.responded()))return}if(e.pool&&n.serviceKeys[e.project]&&(r.headers["x-internal-token"]=n.serviceKeys[e.project]),e.prependPrefix&&!r.url?.startsWith(e.prependPrefix)&&(r.url=e.prependPrefix+(r.url??"/")),c.has("onUpgrade")&&(await c.run("onUpgrade",i),i.responded()))return;const l=e.pool?(()=>{const t=(0,discovery_1.pickSock)(e.pool,n.scanTtlMs);return t?{socketPath:t}:void 0})():e.target;if(!l){o.destroy();return}if(e.lens){const t=String(r.headers["sec-websocket-protocol"]??"").split(",").map(p=>p.trim());(t.length===0||t.includes("vite-hmr")||t.every(p=>p===""))&&(0,hmr_reload_1.registerHmrClient)(n,e.lens.project,o)}h.proxy.ws(r,o,d,{target:l,changeOrigin:!e.pool,agent:h.agentForTarget(l)},()=>o.destroy())},"run");return(r,o,d)=>{o.on("error",()=>o.destroy()),x(r,o,d).catch(()=>o.destroy())}}f(createUpgrade,"createUpgrade"),u(createUpgrade,"createUpgrade"),a(createUpgrade,"createUpgrade");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var u=Object.defineProperty;var o=(r,e)=>u(r,"name",{value:e,configurable:!0});var p=Object.defineProperty,i=o((r,e)=>p(r,"name",{value:e,configurable:!0}),"i"),c=Object.defineProperty,s=i((r,e)=>c(r,"name",{value:e,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.processStamp=processStamp,exports.registryPath=registryPath,exports.readWorkspaces=readWorkspaces,exports.registerWorkspace=registerWorkspace,exports.unregisterWorkspace=unregisterWorkspace,exports.isWorkspaceLive=isWorkspaceLive;const tslib_1=require("tslib"),node_child_process_1=require("node:child_process"),fs=tslib_1.__importStar(require("node:fs")),os=tslib_1.__importStar(require("node:os")),path=tslib_1.__importStar(require("node:path"));function processStamp(r){if(!r||r<=0||process.platform==="win32")return"";try{return(0,node_child_process_1.execFileSync)("ps",["-p",String(r),"-o","lstart="],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()}catch{return""}}o(processStamp,"processStamp"),i(processStamp,"processStamp"),s(processStamp,"processStamp");function registryPath(){const r=process.env.LENSMCP_HOME||os.homedir();return path.join(r,".lensmcp","workspaces.json")}o(registryPath,"registryPath"),i(registryPath,"registryPath"),s(registryPath,"registryPath");function readWorkspaces(r=registryPath()){try{const e=JSON.parse(fs.readFileSync(r,"utf8"));return Array.isArray(e)?e.filter(t=>!!t&&typeof t.key=="string"&&typeof t.base=="string"):[]}catch{return[]}}o(readWorkspaces,"readWorkspaces"),i(readWorkspaces,"readWorkspaces"),s(readWorkspaces,"readWorkspaces");function writeWorkspaces(r,e=registryPath()){try{fs.mkdirSync(path.dirname(e),{recursive:!0}),fs.writeFileSync(e,JSON.stringify(r,null,2))}catch{}}o(writeWorkspaces,"writeWorkspaces"),i(writeWorkspaces,"writeWorkspaces"),s(writeWorkspaces,"writeWorkspaces");function registerWorkspace(r,e=registryPath()){const t=readWorkspaces(e).filter(n=>n.key!==r.key);t.push(r),t.sort((n,a)=>n.key.localeCompare(a.key)),writeWorkspaces(t,e)}o(registerWorkspace,"registerWorkspace"),i(registerWorkspace,"registerWorkspace"),s(registerWorkspace,"registerWorkspace");function unregisterWorkspace(r,e=registryPath()){writeWorkspaces(readWorkspaces(e).filter(t=>t.key!==r),e)}o(unregisterWorkspace,"unregisterWorkspace"),i(unregisterWorkspace,"unregisterWorkspace"),s(unregisterWorkspace,"unregisterWorkspace");function isWorkspaceLive(r){if(!r.pid||r.pid<=0)return!1;try{process.kill(r.pid,0)}catch(t){if(t.code!=="EPERM")return!1}if(!r.procStamp)return!0;const e=processStamp(r.pid);return e===""?!0:e===r.procStamp}o(isWorkspaceLive,"isWorkspaceLive"),i(isWorkspaceLive,"isWorkspaceLive"),s(isWorkspaceLive,"isWorkspaceLive");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var b=Object.defineProperty;var c=(e,t)=>b(e,"name",{value:t,configurable:!0});var h=Object.defineProperty,l=c((e,t)=>h(e,"name",{value:t,configurable:!0}),"l"),u=Object.defineProperty,i=l((e,t)=>u(e,"name",{value:t,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.SsrfBlockedError=void 0,exports.isBlockedAddress=isBlockedAddress,exports.assertFetchableUrl=assertFetchableUrl,exports.safeFetch=safeFetch,exports.pinnedLookup=pinnedLookup;const node_net_1=require("node:net"),promises_1=require("node:dns/promises");class SsrfBlockedError extends Error{static{c(this,"SsrfBlockedError")}static{l(this,"SsrfBlockedError")}static{i(this,"SsrfBlockedError")}constructor(t,o,r,s){super(`SSRF guard blocked ${o??"request"}: ${t}${r?` (${r})`:""}`,s!==void 0?{cause:s}:void 0),this.name="SsrfBlockedError",this.reason=t,this.url=o,this.address=r}}exports.SsrfBlockedError=SsrfBlockedError;function buildDefaultBlockList(){const e=new node_net_1.BlockList;return e.addSubnet("0.0.0.0",8,"ipv4"),e.addSubnet("10.0.0.0",8,"ipv4"),e.addSubnet("100.64.0.0",10,"ipv4"),e.addSubnet("127.0.0.0",8,"ipv4"),e.addSubnet("169.254.0.0",16,"ipv4"),e.addSubnet("172.16.0.0",12,"ipv4"),e.addSubnet("192.0.0.0",24,"ipv4"),e.addSubnet("192.168.0.0",16,"ipv4"),e.addSubnet("198.18.0.0",15,"ipv4"),e.addSubnet("240.0.0.0",4,"ipv4"),e.addAddress("::","ipv6"),e.addAddress("::1","ipv6"),e.addSubnet("fc00::",7,"ipv6"),e.addSubnet("fe80::",10,"ipv6"),e}c(buildDefaultBlockList,"buildDefaultBlockList"),l(buildDefaultBlockList,"buildDefaultBlockList"),i(buildDefaultBlockList,"buildDefaultBlockList");const DEFAULT_BLOCK_LIST=buildDefaultBlockList();function isBlockedAddress(e,t=DEFAULT_BLOCK_LIST){const o=(0,node_net_1.isIP)(e);return o===0?!0:t.check(e,o===6?"ipv6":"ipv4")}c(isBlockedAddress,"isBlockedAddress"),l(isBlockedAddress,"isBlockedAddress"),i(isBlockedAddress,"isBlockedAddress");const stripBrackets=i(e=>e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e,"stripBrackets"),defaultResolve=i(async e=>(await(0,promises_1.lookup)(e,{all:!0,verbatim:!0})).map(t=>t.address),"defaultResolve");async function assertFetchableUrl(e,t={}){const o=t.allowedProtocols??["http:","https:"];let r;try{r=new URL(e)}catch{throw new SsrfBlockedError("malformed-url",String(e))}if(!o.includes(r.protocol))throw new SsrfBlockedError(`scheme-not-allowed:${r.protocol}`,r.href);if(r.username!==""||r.password!=="")throw new SsrfBlockedError("embedded-credentials",r.href);const s=stripBrackets(r.hostname);if(s==="")throw new SsrfBlockedError("missing-host",r.href);if(t.allowPrivate)return{url:r,hostname:s,addresses:(0,node_net_1.isIP)(s)?[s]:[]};const d=t.blockList??DEFAULT_BLOCK_LIST;if((0,node_net_1.isIP)(s)!==0){if(isBlockedAddress(s,d))throw new SsrfBlockedError("blocked-address",r.href,s);return{url:r,hostname:s,addresses:[s]}}const f=t.resolve??defaultResolve;let a;try{a=await f(s)}catch(n){throw new SsrfBlockedError("dns-resolution-failed",r.href,void 0,n)}if(a.length===0)throw new SsrfBlockedError("dns-no-records",r.href);for(const n of a)if(isBlockedAddress(n,d))throw new SsrfBlockedError("blocked-resolved-address",r.href,n);return{url:r,hostname:s,addresses:a}}c(assertFetchableUrl,"assertFetchableUrl"),l(assertFetchableUrl,"assertFetchableUrl"),i(assertFetchableUrl,"assertFetchableUrl");async function safeFetch(e,t={},o={}){const r=o.fetchImpl??globalThis.fetch,s=o.maxRedirects??5;let d=e;for(let f=0;;f++){const{url:a}=await assertFetchableUrl(d,o),n=await r(a,{...t,redirect:"manual"}),p=n.headers.get("location");if(n.status>=300&&n.status<400&&p){if(f>=s)throw new SsrfBlockedError("too-many-redirects",a.href);d=new URL(p,a).href;continue}return n}}c(safeFetch,"safeFetch"),l(safeFetch,"safeFetch"),i(safeFetch,"safeFetch");function pinnedLookup(e){const t=e.map(o=>({address:o,family:(0,node_net_1.isIP)(o)===6?6:4}));return(o,r,s)=>{const d=typeof r=="function"?r:s,f=typeof r=="object"&&r!==null&&r.all===!0;if(t.length===0){d(new Error(`SSRF guard: no pinned address for ${o}`));return}f?d(null,t):d(null,t[0].address,t[0].family)}}c(pinnedLookup,"pinnedLookup"),l(pinnedLookup,"pinnedLookup"),i(pinnedLookup,"pinnedLookup");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var X=Object.defineProperty;var l=(e,t)=>X(e,"name",{value:t,configurable:!0});var Y=Object.defineProperty,a=l((e,t)=>Y(e,"name",{value:t,configurable:!0}),"a"),J=Object.defineProperty,c=a((e,t)=>J(e,"name",{value:t,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),path=tslib_1.__importStar(require("node:path")),fs=tslib_1.__importStar(require("node:fs")),node_child_process_1=require("node:child_process"),yaml=tslib_1.__importStar(require("js-yaml")),create_webpack_dev_1=require("../../create-webpack-dev"),webpack=require("webpack");async function*serveExecutor(e,t){process.env.NODE_ENV="development";const L=t.projectsConfigurations.projects[t.projectName],n=t.root,g=path.join(n,L.root),k=e.outputPath?path.join(n,e.outputPath):path.join(n,"dist",L.root),O=e.configEnv||"development",_=path.join(n,"config",`config.${O}.yaml`),y=3050;let i=y,p=t.projectName,h={};fs.existsSync(_)?(h=yaml.load(fs.readFileSync(_,"utf8")),i=Number(h.port)||i,p=h.serviceName||p):console.warn(`[serve] ${t.projectName}: no config file at ${_} \u2014 public devserver port defaults to ${y}. If another service also lacks its config, both bind ${y} \u2192 EADDRINUSE. Add config/config.${O}.yaml with a distinct \`port:\` (matching this project's cluster.port).`),e.serviceName&&(p=e.serviceName);const b=e.servePrefix??"",m=e.debugPort??(Number(process.env.LENSMCP_DEBUG_PORT)||void 0),u=e.logFile?path.resolve(n,e.logFile):process.env.LENSMCP_LOG_FILE||void 0;u&&(fs.mkdirSync(path.dirname(u),{recursive:!0}),fs.writeFileSync(u,""));let N,P;e.gateway?.middleware&&(N=path.resolve(g,e.gateway.middleware),P=JSON.stringify(h));const $=e.entryFile||"./src/deployments/service/main.ts",F=e.tsConfigFile||"./tsconfig.app.json",G=path.resolve(g,$),M=path.resolve(g,F),W=(e.workers||[]).map(r=>({entryName:r.name,entryPath:path.resolve(g,r.entryPath)})),R=(0,create_webpack_dev_1.createDevWebpackConfig)({appName:t.projectName,appRoot:g,outputDir:k,main:G,tsConfig:M,assets:e.assets||[],additionalEntryPoints:W,port:i,serviceName:p,memoryLimit:e.memoryLimit||8192,buildLibsFromSource:e.buildLibsFromSource!==!1,workspaceRoot:n,orgScopes:e.orgScopes||[],bundlePackages:e.bundlePackages||[],nodeExternalsConfig:e.nodeExternalsConfig,webpackConfigPath:e.webpackConfigPath,httpsReload:e.gateway?.https===!0});let s=null,w=!1;const x=path.join(__dirname,"../../main.devserver.js"),D=path.join(__dirname,"../../main.devserver.ts"),I=!fs.existsSync(x)&&fs.existsSync(D),T=I?D:x,U=path.join(k,"main.js");function d(){s&&!s.killed&&(s.kill("SIGTERM"),s=null)}l(d,"v"),a(d,"f"),c(d,"cleanup");const q=["SIGINT","SIGTERM","SIGHUP","SIGQUIT"].map(r=>{const o=c(()=>d(),"handler");return process.on(r,o),{sig:r,handler:o}});process.on("exit",d);function v(){if(!fs.existsSync(T)){console.error(`[serve] devserver script not found at ${T}`);return}const r=["--enable-source-maps"];I&&r.unshift("--require","@swc-node/register"),s=(0,node_child_process_1.fork)(T,{cwd:n,env:{...process.env,PORT:String(i),SERVICE_NAME:p,SERVE_PREFIX:b,LENSMCP_PROJECT:process.env.LENSMCP_PROJECT||t.projectName||p,LENSMCP_EVENT_FILE:process.env.LENSMCP_EVENT_FILE||path.join(n,".lensmcp","events.jsonl"),CHILD_COUNT:String(e.childCount||process.env.CHILD_COUNT||1),BUNDLE_PATH:U,...N&&{GATEWAY_MIDDLEWARE:N},...P&&{GATEWAY_CONFIG:P},...e.gateway?.routes?.length&&{GATEWAY_ROUTES:JSON.stringify(e.gateway.routes)},...e.gateway?.https&&{GATEWAY_HTTPS:"1"},...e.gateway?.extraPorts?.length&&{GATEWAY_EXTRA_PORTS:JSON.stringify(e.gateway.extraPorts)},...e.internalPort&&{INTERNAL_PORT:String(e.internalPort)},...m&&{LENSMCP_DEBUG_PORT:String(m)},...u&&{LENSMCP_LOG_FILE:u},...e.workers?.length&&{WORKERS:JSON.stringify(e.workers.map(o=>o.name))}},stdio:["inherit","inherit","inherit","ipc"],execArgv:r}),s.on("exit",(o,S)=>{s=null,!S&&(console.error(`[serve] devserver exited unexpectedly (code=${o}, signal=${S}) \u2014 respawning in 1.5s`),setTimeout(()=>{!s&&w&&v()},1500).unref?.())}),console.log(`[serve] Devserver started on port ${i} (service: ${p}${b?`, prefix: /${b}`:""})`),console.log(m?`[serve] Debug: pod inspectors on 127.0.0.1:${m}+ \u2014 click the "Debugger listening" link in the console, or attach WebStorm (Attach to Node.js/Chrome) to port ${m}`:`[serve] Debug on demand: POST http://localhost:${i}/webpack/debug (optionally ?port=<base>) opens pod inspectors without a restart`),u&&console.log(`[serve] Logs teed to ${u} \u2014 tail it in WebStorm via Run/Debug configuration \u2192 Logs tab`)}l(v,"g"),a(v,"v"),c(v,"startDevServer");function A(){if(!s||s.killed){console.log("[serve] Devserver not running, restarting..."),v();return}fetch(`http://localhost:${i}/webpack/reload`,{method:"POST",headers:{"content-type":"application/json"},body:"{}"}).then(()=>console.log("[serve] Notified devserver to reload")).catch(r=>{console.warn("[serve] Failed to notify devserver, restarting...",r.message),d(),v()})}l(A,"U"),a(A,"B"),c(A,"_notifyDevServerReload");const{watch:K,...H}=R,V=webpack(H);let E=null;const j=[];function f(r){if(E){const o=E;E=null,o(r)}else j.push(r)}l(f,"h"),a(f,"b"),c(f,"pushResult");function C(){return j.length>0?Promise.resolve(j.shift()):new Promise(r=>{E=r})}l(C,"D"),a(C,"W"),c(C,"waitForNext");const B=V.watch(R.watchOptions||{},(r,o)=>{if(r){console.error("[serve] Webpack error:",r),f({success:!1});return}const S=o.hasErrors();if(console.info(o.toString({colors:!0,chunks:!1,assets:!0})),S){f({success:!1});return}(!w||!s)&&(w=!0,v()),f({success:!0,baseUrl:`http://localhost:${i}`})});try{for(;;)yield await C()}finally{B.close(()=>{}),d(),q.forEach(({sig:r,handler:o})=>process.removeListener(r,o))}}l(serveExecutor,"serveExecutor"),a(serveExecutor,"serveExecutor"),c(serveExecutor,"serveExecutor"),exports.default=serveExecutor,module.exports=serveExecutor,module.exports.default=serveExecutor;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`).some(
|
|
1
|
+
"use strict";var w=Object.defineProperty;var h=(e,t)=>w(e,"name",{value:t,configurable:!0});var v=Object.defineProperty,p=h((e,t)=>v(e,"name",{value:t,configurable:!0}),"p"),m=Object.defineProperty,d=p((e,t)=>m(e,"name",{value:t,configurable:!0}),"d");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=trustExecutor,exports.collectHosts=collectHosts;const tslib_1=require("tslib"),node_child_process_1=require("node:child_process"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),basic_ssl_1=require("../../basic-ssl");async function trustExecutor(e,t){const o=path.join(t.root,"node_modules",".cache","davnx-webpack"),n=(0,basic_ssl_1.ensureCaSync)(o),u=process.env.LENSMCP_TRUST_HOSTS_ONLY==="1",a=collectHosts(e,t);if(a.length===0&&console.log("[trust] no concrete hostnames found (only wildcards?) \u2014 keychain step only."),process.platform!=="darwin"){console.log("[trust] non-macOS platform \u2014 do these manually:"),console.log(` \u2022 trust ${n} in your OS/browser store (Linux: update-ca-certificates / certutil)`);for(const s of a)console.log(` \u2022 /etc/hosts: "127.0.0.1 ${s}" and "::1 ${s}"`);return{success:!0}}const r=caSha256Fingerprint(n),f=u||r!==void 0&&(0,node_child_process_1.spawnSync)("security",["find-certificate","-a","-c","lensmcp local dev CA","-Z","/Library/Keychains/System.keychain"],{encoding:"utf8"}).stdout?.includes(r)===!0;if(u)console.log("[trust] hosts-only: a shared daemon serves TLS with its own CA \u2014 skipping the keychain step.");else if(f)console.log("[trust] CA already in the System keychain \u2014 skipping.");else{if(console.log(`[trust] adding CA to the System keychain (sudo will prompt): ${n}`),(0,node_child_process_1.spawnSync)("sudo",["security","add-trusted-cert","-d","-r","trustRoot","-k","/Library/Keychains/System.keychain",n],{stdio:"inherit"}).status!==0)return console.error("[trust] add-trusted-cert failed \u2014 rerun in a terminal so sudo can prompt."),{success:!1};console.log("[trust] CA trusted. Restart your browser once (it caches certificate verdicts).")}const c=fs.readFileSync("/etc/hosts","utf8"),i=d((s,y)=>c.split(`
|
|
2
|
+
`).some(b=>{const g=b.trim();if(g.startsWith("#"))return!1;const S=g.split(/\s+/);return S[0]===s&&S.slice(1).includes(y)}),"hasEntry"),l=[];for(const s of a)i("127.0.0.1",s)||l.push(`127.0.0.1 ${s}`),i("::1",s)||l.push(`::1 ${s}`);if(l.length===0)console.log("[trust] /etc/hosts already complete (both families for every hostname).");else{console.log(`[trust] appending to /etc/hosts (sudo):
|
|
3
3
|
${l.join(`
|
|
4
|
-
`)}`);const s=`printf '%s\\n' ${l.map(
|
|
4
|
+
`)}`);const s=`printf '%s\\n' ${l.map(y=>`'${y}'`).join(" ")} >> /etc/hosts`;if((0,node_child_process_1.spawnSync)("sudo",["sh","-c",s],{stdio:"inherit"}).status!==0)return console.error("[trust] /etc/hosts update failed."),{success:!1};(0,node_child_process_1.spawnSync)("sudo",["sh","-c","dscacheutil -flushcache; killall -HUP mDNSResponder"],{stdio:"inherit"})}if(!u){const s=(0,node_child_process_1.spawnSync)("security",["verify-cert","-c",n,"-p","basic"],{stdio:"ignore"});console.log(`[trust] CA trust check: ${s.status===0?"OK":"NOT TRUSTED YET (browser restart may be needed)"}`)}for(const s of a)console.log(`[trust] ${s} \u2192 https ready (hosts + cert SAN ride the gateway config)`);return{success:!0}}h(trustExecutor,"trustExecutor"),p(trustExecutor,"trustExecutor"),d(trustExecutor,"trustExecutor");function caSha256Fingerprint(e){const t=(0,node_child_process_1.spawnSync)("openssl",["x509","-in",e,"-noout","-fingerprint","-sha256"],{encoding:"utf8"});if(t.status!==0||!t.stdout)return;const o=t.stdout.split("=")[1]?.replaceAll(":","").trim().toUpperCase();return o&&/^[0-9A-F]{64}$/.test(o)?o:void 0}h(caSha256Fingerprint,"caSha256Fingerprint"),p(caSha256Fingerprint,"caSha256Fingerprint"),d(caSha256Fingerprint,"caSha256Fingerprint");function collectHosts(e,t){const o=[],n=t.projectName?t.projectsConfigurations?.projects[t.projectName]:void 0,u=e.serveTarget??"serve-hmr",a=n?.targets?.[u]?.options?.gateway?.routes??[];for(const r of a)r.host&&!r.host.includes("*")&&o.push(r.host);for(const r of Object.values(t.projectsConfigurations?.projects??{}))try{const f=JSON.parse(fs.readFileSync(path.join(t.root,r.root,"project.json"),"utf8")),c=f.cluster??f.davnx,i=c?.host;i&&!i.includes("*")&&(o.push(i),c?.service&&c.internalHost!==!1&&o.push(typeof c.internalHost=="string"?c.internalHost:`internal.${i}`))}catch{}return[...new Set([...o,"lensmcp.local",...e.hosts??[]])]}h(collectHosts,"collectHosts"),p(collectHosts,"collectHosts"),d(collectHosts,"collectHosts");
|
package/gateway.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var n=Object.defineProperty;var a=(r,t)=>n(r,"name",{value:t,configurable:!0});var s=Object.defineProperty,i=a((r,t)=>s(r,"name",{value:t,configurable:!0}),"i"),o=Object.defineProperty,e=i((r,t)=>o(r,"name",{value:t,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.manifestFromClusterDecl=exports.DEFAULT_REGISTRY_PREFIX=exports.redisRegistrySource=exports.createRegistryProviders=exports.endpointsPodProvider=exports.staticManifestProvider=exports.startProdGateway=void 0;var prod_gateway_lib_1=require("./executors/gateway/prod-gateway.lib");Object.defineProperty(exports,"startProdGateway",{enumerable:!0,get:e(function(){return prod_gateway_lib_1.startProdGateway},"get")});var providers_prod_1=require("./executors/gateway/providers-prod");Object.defineProperty(exports,"staticManifestProvider",{enumerable:!0,get:e(function(){return providers_prod_1.staticManifestProvider},"get")}),Object.defineProperty(exports,"endpointsPodProvider",{enumerable:!0,get:e(function(){return providers_prod_1.endpointsPodProvider},"get")});var registry_source_1=require("./executors/gateway/registry-source");Object.defineProperty(exports,"createRegistryProviders",{enumerable:!0,get:e(function(){return registry_source_1.createRegistryProviders},"get")}),Object.defineProperty(exports,"redisRegistrySource",{enumerable:!0,get:e(function(){return registry_source_1.redisRegistrySource},"get")}),Object.defineProperty(exports,"DEFAULT_REGISTRY_PREFIX",{enumerable:!0,get:e(function(){return registry_source_1.DEFAULT_REGISTRY_PREFIX},"get")});var manifest_1=require("./executors/gateway/manifest");Object.defineProperty(exports,"manifestFromClusterDecl",{enumerable:!0,get:e(function(){return manifest_1.manifestFromClusterDecl},"get")});
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var u=Object.defineProperty;var o=(t,r)=>u(t,"name",{value:r,configurable:!0});var p=Object.defineProperty,c=o((t,r)=>p(t,"name",{value:r,configurable:!0}),"c"),n=Object.defineProperty,e=c((t,r)=>n(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveEventFile=exports.publishTypecheckRun=exports.parseTscOutput=exports.parseTscDiagnosticLine=exports.buildTypecheckRunEvents=exports.appendTypecheckEvents=exports.createProdWebpackConfig=exports.createDevWebpackConfig=exports.buildScopePatterns=void 0;var build_scope_patterns_1=require("./build-scope-patterns");Object.defineProperty(exports,"buildScopePatterns",{enumerable:!0,get:e(function(){return build_scope_patterns_1.buildScopePatterns},"get")});var create_webpack_dev_1=require("./create-webpack-dev");Object.defineProperty(exports,"createDevWebpackConfig",{enumerable:!0,get:e(function(){return create_webpack_dev_1.createDevWebpackConfig},"get")});var create_webpack_prod_1=require("./create-webpack-prod");Object.defineProperty(exports,"createProdWebpackConfig",{enumerable:!0,get:e(function(){return create_webpack_prod_1.createProdWebpackConfig},"get")});var typecheck_bus_1=require("./typecheck-bus");Object.defineProperty(exports,"appendTypecheckEvents",{enumerable:!0,get:e(function(){return typecheck_bus_1.appendTypecheckEvents},"get")}),Object.defineProperty(exports,"buildTypecheckRunEvents",{enumerable:!0,get:e(function(){return typecheck_bus_1.buildTypecheckRunEvents},"get")}),Object.defineProperty(exports,"parseTscDiagnosticLine",{enumerable:!0,get:e(function(){return typecheck_bus_1.parseTscDiagnosticLine},"get")}),Object.defineProperty(exports,"parseTscOutput",{enumerable:!0,get:e(function(){return typecheck_bus_1.parseTscOutput},"get")}),Object.defineProperty(exports,"publishTypecheckRun",{enumerable:!0,get:e(function(){return typecheck_bus_1.publishTypecheckRun},"get")}),Object.defineProperty(exports,"resolveEventFile",{enumerable:!0,get:e(function(){return typecheck_bus_1.resolveEventFile},"get")});
|