@lensmcp/cluster 1.25.16 → 1.25.18

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.
Files changed (131) hide show
  1. package/basic-ssl.js +1 -1
  2. package/build-host.js +1 -1
  3. package/build-scope-patterns.js +1 -1
  4. package/bundle-parent.js +1 -1
  5. package/checkout-cache.js +1 -1
  6. package/create-webpack-dev.js +1 -1
  7. package/create-webpack-prod.js +1 -1
  8. package/dev-devtool.js +1 -1
  9. package/devserver-notifier.js +1 -1
  10. package/devserver-transport.js +1 -1
  11. package/error-stack-release.js +1 -1
  12. package/executors/build/build.impl.js +1 -1
  13. package/executors/gateway/body-stall.js +1 -1
  14. package/executors/gateway/canonical-path.js +1 -1
  15. package/executors/gateway/client-ip.js +1 -1
  16. package/executors/gateway/gateway-errors.js +1 -1
  17. package/executors/gateway/gateway.impl.js +1 -1
  18. package/executors/gateway/gateway.lib.js +1 -1
  19. package/executors/gateway/health-check.js +1 -1
  20. package/executors/gateway/jwks-verify.d.ts +37 -2
  21. package/executors/gateway/jwks-verify.js +1 -1
  22. package/executors/gateway/jwt-claims.js +1 -1
  23. package/executors/gateway/main.prod-gateway.js +2 -2
  24. package/executors/gateway/main.rollout.js +4 -4
  25. package/executors/gateway/manifest.js +1 -1
  26. package/executors/gateway/metrics.js +1 -1
  27. package/executors/gateway/otel-tracing.js +1 -1
  28. package/executors/gateway/prod-config.js +1 -1
  29. package/executors/gateway/prod-gateway.lib.js +1 -1
  30. package/executors/gateway/prod-runtime/access-log.js +1 -1
  31. package/executors/gateway/prod-runtime/app.js +1 -1
  32. package/executors/gateway/prod-runtime/auth.js +1 -1
  33. package/executors/gateway/prod-runtime/body-stall.js +1 -1
  34. package/executors/gateway/prod-runtime/cors.js +1 -1
  35. package/executors/gateway/prod-runtime/edge.js +1 -1
  36. package/executors/gateway/prod-runtime/handler.js +1 -1
  37. package/executors/gateway/prod-runtime/hooks.js +1 -1
  38. package/executors/gateway/prod-runtime/observability.js +1 -1
  39. package/executors/gateway/prod-runtime/rollout.js +1 -1
  40. package/executors/gateway/prod-runtime/routing.js +1 -1
  41. package/executors/gateway/prod-runtime/server.js +1 -1
  42. package/executors/gateway/prod-runtime/trust.js +1 -1
  43. package/executors/gateway/prod-runtime/upgrade.js +7 -7
  44. package/executors/gateway/prod-runtime/upstream.js +1 -1
  45. package/executors/gateway/providers-prod.js +1 -1
  46. package/executors/gateway/rate-limit.js +2 -2
  47. package/executors/gateway/registry-source.js +1 -1
  48. package/executors/gateway/rollout-ops.js +2 -2
  49. package/executors/gateway/runtime/act.js +1 -1
  50. package/executors/gateway/runtime/auth.js +1 -1
  51. package/executors/gateway/runtime/chooser.js +12 -12
  52. package/executors/gateway/runtime/control.js +2 -2
  53. package/executors/gateway/runtime/dev-auth.js +1 -1
  54. package/executors/gateway/runtime/discovery.js +1 -1
  55. package/executors/gateway/runtime/edge.d.ts +7 -0
  56. package/executors/gateway/runtime/edge.js +1 -1
  57. package/executors/gateway/runtime/guest-graph.js +2 -2
  58. package/executors/gateway/runtime/guest-replay.js +2 -2
  59. package/executors/gateway/runtime/handler.js +1 -1
  60. package/executors/gateway/runtime/hmr-reload.js +1 -1
  61. package/executors/gateway/runtime/hooks.js +1 -1
  62. package/executors/gateway/runtime/instance.js +2 -2
  63. package/executors/gateway/runtime/lens-children.js +1 -1
  64. package/executors/gateway/runtime/lifecycle.js +3 -3
  65. package/executors/gateway/runtime/observability.js +2 -2
  66. package/executors/gateway/runtime/own-log.js +4 -4
  67. package/executors/gateway/runtime/pod-env.js +2 -2
  68. package/executors/gateway/runtime/pod-output.js +1 -1
  69. package/executors/gateway/runtime/pod-probe.js +1 -1
  70. package/executors/gateway/runtime/process-names.js +1 -1
  71. package/executors/gateway/runtime/project-graph-store.js +1 -1
  72. package/executors/gateway/runtime/proxy.js +1 -1
  73. package/executors/gateway/runtime/registration-guards.js +1 -1
  74. package/executors/gateway/runtime/route-registry.js +1 -1
  75. package/executors/gateway/runtime/scope.js +1 -1
  76. package/executors/gateway/runtime/serve-launch.js +3 -3
  77. package/executors/gateway/runtime/server.d.ts +39 -2
  78. package/executors/gateway/runtime/server.js +2 -2
  79. package/executors/gateway/runtime/service-keys.js +1 -1
  80. package/executors/gateway/runtime/shared-build.js +4 -4
  81. package/executors/gateway/runtime/source-poller.js +1 -1
  82. package/executors/gateway/runtime/types.js +1 -1
  83. package/executors/gateway/runtime/upgrade.js +1 -1
  84. package/executors/gateway/runtime/workspace-log.js +1 -1
  85. package/executors/gateway/runtime/workspace-middleware.js +1 -1
  86. package/executors/gateway/runtime/workspace-registry.js +1 -1
  87. package/executors/gateway/ssrf-guard.js +1 -1
  88. package/executors/serve/serve.impl.js +1 -1
  89. package/executors/trust/hostname.js +1 -1
  90. package/executors/trust/trust.impl.js +3 -3
  91. package/exit-reason.js +2 -2
  92. package/fork-ts-check-reporter.js +1 -1
  93. package/gateway.js +1 -1
  94. package/gc-notice.js +1 -1
  95. package/graph-snapshot.js +1 -1
  96. package/handoff-retire.js +1 -1
  97. package/heap-snapshot.js +1 -1
  98. package/hot-swap-registries.js +1 -1
  99. package/index.js +1 -1
  100. package/inspector-secret.js +1 -1
  101. package/main.devserver.js +11 -11
  102. package/notice-generation.js +1 -1
  103. package/package.json +4 -4
  104. package/perf/heavy-barrel-import.js +1 -1
  105. package/perf/perf-config.js +1 -1
  106. package/perf/perf-rule-events.js +2 -2
  107. package/perf/perf-rules-analysis.js +1 -1
  108. package/perf/perf-rules-plugin.js +1 -1
  109. package/perf/source-scan.js +5 -5
  110. package/perf/workspace-libraries.js +2 -2
  111. package/pod-memory-events.js +2 -2
  112. package/pod-memory.js +1 -1
  113. package/pod-sock.js +1 -1
  114. package/process-name.js +1 -1
  115. package/redis-disconnect-fix.js +1 -1
  116. package/schema-first-instance.js +1 -1
  117. package/serve-runner.js +1 -1
  118. package/service-build-events.js +1 -1
  119. package/shared-build/attach.js +2 -2
  120. package/shared-build/host.js +3 -3
  121. package/shared-build/protocol.js +1 -1
  122. package/shared-build/shared-compilation.js +3 -3
  123. package/shared-build/signature.js +1 -1
  124. package/stdio-guard.js +1 -1
  125. package/swap-mode.js +1 -1
  126. package/swap-recycle.js +1 -1
  127. package/tsgo-check-plugin.js +4 -4
  128. package/typecheck-bus.js +3 -3
  129. package/typecheck-queue.js +1 -1
  130. package/worker-supervisor.js +2 -2
  131. package/workspace-paths.js +1 -1
package/basic-ssl.js CHANGED
@@ -1 +1 @@
1
- "use strict";var f=Object.defineProperty;var c=(e,r)=>f(e,"name",{value:r,configurable:!0});var p=Object.defineProperty,a=c((e,r)=>p(e,"name",{value:r,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.CA_CERT_FILE=void 0,exports.caDir=caDir,exports.caCertPath=caCertPath,exports.getCertificateSync=getCertificateSync,exports.ensureCaSync=ensureCaSync;const tslib_1=require("tslib"),crypto=tslib_1.__importStar(require("node:crypto")),fs=tslib_1.__importStar(require("node:fs")),os=tslib_1.__importStar(require("node:os")),path=tslib_1.__importStar(require("node:path")),LEAF_MAX_AGE_MS=600*60*60*1e3,CA_TTL_DAYS=3650,CA_MIN_REMAINING_MS=720*60*60*1e3;exports.CA_CERT_FILE="lensmcp-local-ca.crt";const LEGACY_CA_CERT_FILE="davnx-local-ca.crt",CA_KEY_FILE="_ca-key.pem";function caDir(){const e=process.env.LENSMCP_HOME||os.homedir();return path.join(e,".lensmcp","ca")}c(caDir,"caDir"),a(caDir,"caDir");function caCertPath(){return path.join(caDir(),exports.CA_CERT_FILE)}c(caCertPath,"caCertPath"),a(caCertPath,"caCertPath");function getCertificateSync(e,r="lensmcp.dev",t=[]){const n=require("node-forge");fs.mkdirSync(e,{recursive:!0});const l=loadOrCreateCa(n,e),o=n.pki.certificateToPem(l.cert),i=crypto.createHash("sha256").update([r,...[...t].sort()].join("|")).digest("hex").slice(0,12),s=path.join(e,`_leaf-${i}.pem`);try{const u=fs.statSync(s);if(Date.now()-u.ctimeMs<LEAF_MAX_AGE_MS){const m=fs.readFileSync(s,"utf8");if(m.includes(o))return m}}catch{}const y=createLeafCertificate(n,l,r,t);fs.writeFileSync(s,y);for(const u of fs.readdirSync(e))if(/^_leaf-.*\.pem$/.test(u)&&u!==`_leaf-${i}.pem`||/^_cert.*\.pem$/.test(u)||/-dev\.crt$/.test(u)||u===LEGACY_CA_CERT_FILE)try{fs.unlinkSync(path.join(e,u))}catch{}return y}c(getCertificateSync,"getCertificateSync"),a(getCertificateSync,"getCertificateSync");function ensureCaSync(e){const r=require("node-forge");return loadOrCreateCa(r,e),caCertPath()}c(ensureCaSync,"ensureCaSync"),a(ensureCaSync,"ensureCaSync");function readCaPair(e,r){try{const t=r.pki.certificateFromPem(fs.readFileSync(path.join(e,exports.CA_CERT_FILE),"utf8")),n=r.pki.privateKeyFromPem(fs.readFileSync(path.join(e,CA_KEY_FILE),"utf8"));if(t.validity.notAfter.getTime()-Date.now()>CA_MIN_REMAINING_MS)return{cert:t,key:n}}catch{}}c(readCaPair,"readCaPair"),a(readCaPair,"readCaPair");function loadOrCreateCa(e,r){const t=caDir();fs.mkdirSync(t,{recursive:!0});const n=readCaPair(t,e);if(n)return n;for(const i of[CA_KEY_FILE,exports.CA_CERT_FILE])try{fs.unlinkSync(path.join(t,i))}catch{}const l=r&&r!==t?readCaPair(r,e):void 0,o=l??mintCa(e);try{fs.writeFileSync(path.join(t,CA_KEY_FILE),e.pki.privateKeyToPem(o.key),{mode:384,flag:"wx"})}catch(i){if(i.code!=="EEXIST")throw i;const s=spinReadCaPair(t,e);if(s)return s;throw new Error(`machine dev CA at ${t} is claimed but unreadable \u2014 remove the directory and retry`,{cause:i})}return fs.writeFileSync(path.join(t,exports.CA_CERT_FILE),e.pki.certificateToPem(o.cert)),l&&console.log(`[ssl] promoted the existing workspace dev CA to the machine store (${t}) \u2014 keychain trust carries over.`),o}c(loadOrCreateCa,"loadOrCreateCa"),a(loadOrCreateCa,"loadOrCreateCa");function spinReadCaPair(e,r){const t=Date.now()+2e3;for(;;){const n=readCaPair(e,r);if(n||Date.now()>=t)return n;Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25)}}c(spinReadCaPair,"spinReadCaPair"),a(spinReadCaPair,"spinReadCaPair");function mintCa(e){const r=e.pki.rsa.generateKeyPair(2048),t=e.pki.createCertificate();t.publicKey=r.publicKey,t.serialNumber=`00${Date.now().toString(16)}`,t.validity.notBefore=new Date(Date.now()-1440*60*1e3),t.validity.notAfter=new Date,t.validity.notAfter.setDate(t.validity.notAfter.getDate()+CA_TTL_DAYS);const n=[{name:"commonName",value:"lensmcp local dev CA"},{name:"organizationName",value:"lensmcp"},{shortName:"OU",value:"dev"}];return t.setSubject(n),t.setIssuer(n),t.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),t.sign(r.privateKey,e.md.sha256.create()),{cert:t,key:r.privateKey}}c(mintCa,"mintCa"),a(mintCa,"mintCa");function createLeafCertificate(e,r,t,n,l=30){const o=e.pki.rsa.generateKeyPair(2048),i=e.pki.createCertificate();i.publicKey=o.publicKey,i.serialNumber=`00${Date.now().toString(16)}`,i.validity.notBefore=new Date(Date.now()-1440*60*1e3),i.validity.notAfter=new Date,i.validity.notAfter.setDate(i.validity.notAfter.getDate()+l),i.setSubject([{name:"commonName",value:t},{name:"organizationName",value:"lensmcp"},{shortName:"OU",value:"dev"}]),i.setIssuer(r.cert.subject.attributes);const s=[{type:2,value:"localhost"},{type:2,value:"*.localhost"},{type:7,ip:"127.0.0.1"},{type:7,ip:"::1"},...[...new Set(n)].filter(y=>y&&y!=="localhost").map(y=>({type:2,value:y}))];return i.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:s},{name:"subjectKeyIdentifier"}]),i.sign(r.key,e.md.sha256.create()),e.pki.privateKeyToPem(o.privateKey)+e.pki.certificateToPem(i)+e.pki.certificateToPem(r.cert)}c(createLeafCertificate,"createLeafCertificate"),a(createLeafCertificate,"createLeafCertificate");
1
+ "use strict";var C=Object.defineProperty;var o=(e,r)=>C(e,"name",{value:r,configurable:!0});var f=Object.defineProperty,c=o((e,r)=>f(e,"name",{value:r,configurable:!0}),"c"),p=Object.defineProperty,a=c((e,r)=>p(e,"name",{value:r,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.CA_CERT_FILE=void 0,exports.caDir=caDir,exports.caCertPath=caCertPath,exports.getCertificateSync=getCertificateSync,exports.ensureCaSync=ensureCaSync;const tslib_1=require("tslib"),crypto=tslib_1.__importStar(require("node:crypto")),fs=tslib_1.__importStar(require("node:fs")),os=tslib_1.__importStar(require("node:os")),path=tslib_1.__importStar(require("node:path")),LEAF_MAX_AGE_MS=600*60*60*1e3,CA_TTL_DAYS=3650,CA_MIN_REMAINING_MS=720*60*60*1e3;exports.CA_CERT_FILE="lensmcp-local-ca.crt";const LEGACY_CA_CERT_FILE="davnx-local-ca.crt",CA_KEY_FILE="_ca-key.pem";function caDir(){const e=process.env.LENSMCP_HOME||os.homedir();return path.join(e,".lensmcp","ca")}o(caDir,"caDir"),c(caDir,"caDir"),a(caDir,"caDir");function caCertPath(){return path.join(caDir(),exports.CA_CERT_FILE)}o(caCertPath,"caCertPath"),c(caCertPath,"caCertPath"),a(caCertPath,"caCertPath");function getCertificateSync(e,r="lensmcp.dev",t=[]){const n=require("node-forge");fs.mkdirSync(e,{recursive:!0});const m=loadOrCreateCa(n,e),s=n.pki.certificateToPem(m.cert),i=crypto.createHash("sha256").update([r,...[...t].sort()].join("|")).digest("hex").slice(0,12),u=path.join(e,`_leaf-${i}.pem`);try{const l=fs.statSync(u);if(Date.now()-l.ctimeMs<LEAF_MAX_AGE_MS){const d=fs.readFileSync(u,"utf8");if(d.includes(s))return d}}catch{}const y=createLeafCertificate(n,m,r,t);fs.writeFileSync(u,y);for(const l of fs.readdirSync(e))if(/^_leaf-.*\.pem$/.test(l)&&l!==`_leaf-${i}.pem`||/^_cert.*\.pem$/.test(l)||/-dev\.crt$/.test(l)||l===LEGACY_CA_CERT_FILE)try{fs.unlinkSync(path.join(e,l))}catch{}return y}o(getCertificateSync,"getCertificateSync"),c(getCertificateSync,"getCertificateSync"),a(getCertificateSync,"getCertificateSync");function ensureCaSync(e){const r=require("node-forge");return loadOrCreateCa(r,e),caCertPath()}o(ensureCaSync,"ensureCaSync"),c(ensureCaSync,"ensureCaSync"),a(ensureCaSync,"ensureCaSync");function readCaPair(e,r){try{const t=r.pki.certificateFromPem(fs.readFileSync(path.join(e,exports.CA_CERT_FILE),"utf8")),n=r.pki.privateKeyFromPem(fs.readFileSync(path.join(e,CA_KEY_FILE),"utf8"));if(t.validity.notAfter.getTime()-Date.now()>CA_MIN_REMAINING_MS)return{cert:t,key:n}}catch{}}o(readCaPair,"readCaPair"),c(readCaPair,"readCaPair"),a(readCaPair,"readCaPair");function loadOrCreateCa(e,r){const t=caDir();fs.mkdirSync(t,{recursive:!0});const n=readCaPair(t,e);if(n)return n;for(const i of[CA_KEY_FILE,exports.CA_CERT_FILE])try{fs.unlinkSync(path.join(t,i))}catch{}const m=r&&r!==t?readCaPair(r,e):void 0,s=m??mintCa(e);try{fs.writeFileSync(path.join(t,CA_KEY_FILE),e.pki.privateKeyToPem(s.key),{mode:384,flag:"wx"})}catch(i){if(i.code!=="EEXIST")throw i;const u=spinReadCaPair(t,e);if(u)return u;throw new Error(`machine dev CA at ${t} is claimed but unreadable \u2014 remove the directory and retry`,{cause:i})}return fs.writeFileSync(path.join(t,exports.CA_CERT_FILE),e.pki.certificateToPem(s.cert)),m&&console.log(`[ssl] promoted the existing workspace dev CA to the machine store (${t}) \u2014 keychain trust carries over.`),s}o(loadOrCreateCa,"loadOrCreateCa"),c(loadOrCreateCa,"loadOrCreateCa"),a(loadOrCreateCa,"loadOrCreateCa");function spinReadCaPair(e,r){const t=Date.now()+2e3;for(;;){const n=readCaPair(e,r);if(n||Date.now()>=t)return n;Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25)}}o(spinReadCaPair,"spinReadCaPair"),c(spinReadCaPair,"spinReadCaPair"),a(spinReadCaPair,"spinReadCaPair");function mintCa(e){const r=e.pki.rsa.generateKeyPair(2048),t=e.pki.createCertificate();t.publicKey=r.publicKey,t.serialNumber=`00${Date.now().toString(16)}`,t.validity.notBefore=new Date(Date.now()-1440*60*1e3),t.validity.notAfter=new Date,t.validity.notAfter.setDate(t.validity.notAfter.getDate()+CA_TTL_DAYS);const n=[{name:"commonName",value:"lensmcp local dev CA"},{name:"organizationName",value:"lensmcp"},{shortName:"OU",value:"dev"}];return t.setSubject(n),t.setIssuer(n),t.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),t.sign(r.privateKey,e.md.sha256.create()),{cert:t,key:r.privateKey}}o(mintCa,"mintCa"),c(mintCa,"mintCa"),a(mintCa,"mintCa");function createLeafCertificate(e,r,t,n,m=30){const s=e.pki.rsa.generateKeyPair(2048),i=e.pki.createCertificate();i.publicKey=s.publicKey,i.serialNumber=`00${Date.now().toString(16)}`,i.validity.notBefore=new Date(Date.now()-1440*60*1e3),i.validity.notAfter=new Date,i.validity.notAfter.setDate(i.validity.notAfter.getDate()+m),i.setSubject([{name:"commonName",value:t},{name:"organizationName",value:"lensmcp"},{shortName:"OU",value:"dev"}]),i.setIssuer(r.cert.subject.attributes);const u=[{type:2,value:"localhost"},{type:2,value:"*.localhost"},{type:7,ip:"127.0.0.1"},{type:7,ip:"::1"},...[...new Set(n)].filter(y=>y&&y!=="localhost").map(y=>({type:2,value:y}))];return i.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:u},{name:"subjectKeyIdentifier"}]),i.sign(r.key,e.md.sha256.create()),e.pki.privateKeyToPem(s.privateKey)+e.pki.certificateToPem(i)+e.pki.certificateToPem(r.cert)}o(createLeafCertificate,"createLeafCertificate"),c(createLeafCertificate,"createLeafCertificate"),a(createLeafCertificate,"createLeafCertificate");
package/build-host.js CHANGED
@@ -1 +1 @@
1
- "use strict";var u=Object.defineProperty;var p=(s,t)=>u(s,"name",{value:t,configurable:!0});var d=Object.defineProperty,o=p((s,t)=>d(s,"name",{value:t,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0});const host_1=require("./shared-build/host"),protocol_1=require("./shared-build/protocol"),STOP_SIGNALS=["SIGTERM","SIGINT","SIGHUP"],GATEWAY_POLL_MS=5e3;function main(){const s=process.argv.find(e=>e.startsWith(protocol_1.BUILD_HOST_ROOT_FLAG))?.slice(protocol_1.BUILD_HOST_ROOT_FLAG.length);(!s||typeof process.send!="function")&&(console.error("[build-host] started without a workspace root or a gateway channel \u2014 only the dev gateway starts this process"),process.exit(1)),process.env.NODE_ENV="development";const t=o(e=>{if(process.connected)try{process.send(e,void 0,void 0,()=>{})}catch{}},"send"),n=Number(process.env.LENSMCP_BUILD_HOST_PAUSE_MS),c=new host_1.BuildHost({root:s,send:t,log:o(e=>console.log(e),"log"),...Number.isFinite(n)&&n>=0&&process.env.LENSMCP_BUILD_HOST_PAUSE_MS?{pauseMs:n}:{}});let i=!1;const a=o((e,l=0)=>{i||(i=!0,console.log(`stopping (${e})`),c.stop().finally(()=>process.exit(l)),setTimeout(()=>process.exit(l),8e3).unref())},"stop");for(const e of STOP_SIGNALS)process.on(e,()=>a(e));process.on("disconnect",()=>a("the gateway is gone"));const r=Number(process.env.LENSMCP_GATEWAY_PID??0);Number.isInteger(r)&&r>0&&setInterval(()=>{try{process.kill(r,0)}catch(e){e.code!=="EPERM"&&a(`gateway pid ${r} is gone`)}},GATEWAY_POLL_MS).unref(),process.on("message",e=>{i||!e||typeof e!="object"||(e.type==="join"?c.join(e.member,e.join):e.type==="leave"&&c.leave(e.member))}),t({type:"ready",pid:process.pid})}p(main,"main"),o(main,"main"),require.main===module&&main();
1
+ "use strict";var m=Object.defineProperty;var l=(s,t)=>m(s,"name",{value:t,configurable:!0});var u=Object.defineProperty,p=l((s,t)=>u(s,"name",{value:t,configurable:!0}),"p"),d=Object.defineProperty,o=p((s,t)=>d(s,"name",{value:t,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0});const host_1=require("./shared-build/host"),protocol_1=require("./shared-build/protocol"),STOP_SIGNALS=["SIGTERM","SIGINT","SIGHUP"],GATEWAY_POLL_MS=5e3;function main(){const s=process.argv.find(e=>e.startsWith(protocol_1.BUILD_HOST_ROOT_FLAG))?.slice(protocol_1.BUILD_HOST_ROOT_FLAG.length);(!s||typeof process.send!="function")&&(console.error("[build-host] started without a workspace root or a gateway channel \u2014 only the dev gateway starts this process"),process.exit(1)),process.env.NODE_ENV="development";const t=o(e=>{if(process.connected)try{process.send(e,void 0,void 0,()=>{})}catch{}},"send"),n=Number(process.env.LENSMCP_BUILD_HOST_PAUSE_MS),c=new host_1.BuildHost({root:s,send:t,log:o(e=>console.log(e),"log"),...Number.isFinite(n)&&n>=0&&process.env.LENSMCP_BUILD_HOST_PAUSE_MS?{pauseMs:n}:{}});let i=!1;const a=o((e,_=0)=>{i||(i=!0,console.log(`stopping (${e})`),c.stop().finally(()=>process.exit(_)),setTimeout(()=>process.exit(_),8e3).unref())},"stop");for(const e of STOP_SIGNALS)process.on(e,()=>a(e));process.on("disconnect",()=>a("the gateway is gone"));const r=Number(process.env.LENSMCP_GATEWAY_PID??0);Number.isInteger(r)&&r>0&&setInterval(()=>{try{process.kill(r,0)}catch(e){e.code!=="EPERM"&&a(`gateway pid ${r} is gone`)}},GATEWAY_POLL_MS).unref(),process.on("message",e=>{i||!e||typeof e!="object"||(e.type==="join"?c.join(e.member,e.join):e.type==="leave"&&c.leave(e.member))}),t({type:"ready",pid:process.pid})}l(main,"main"),p(main,"main"),o(main,"main"),require.main===module&&main();
@@ -1 +1 @@
1
- "use strict";var l=Object.defineProperty;var i=(n,s)=>l(n,"name",{value:s,configurable:!0});var a=Object.defineProperty,u=i((n,s)=>a(n,"name",{value:s,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildScopePatterns=buildScopePatterns;function buildScopePatterns(n){const s=[],p=[],r=[];for(const e of n){if(!e)continue;const o=e.match(/^\/(.+)\/([gimsuy]*)$/);if(o){const t=o[2].replace("g",""),c=new RegExp(o[1],t);s.push(c),r.push(c)}else if(e.includes("/")){const t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");s.push(new RegExp(`^${t}`)),p.push(e)}else if(e.startsWith("@")){const t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");s.push(new RegExp(`^${t}/`)),p.push(e.endsWith("/")?e:`${e}/`)}else{const t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=new RegExp(`^${t}(/|$)`);s.push(c),r.push(c)}}return{allowlistPatterns:s,scopePrefixes:p,scopePatterns:r}}i(buildScopePatterns,"buildScopePatterns"),u(buildScopePatterns,"buildScopePatterns");
1
+ "use strict";var $=Object.defineProperty;var f=(s,e)=>$(s,"name",{value:e,configurable:!0});var l=Object.defineProperty,i=f((s,e)=>l(s,"name",{value:e,configurable:!0}),"i"),a=Object.defineProperty,u=i((s,e)=>a(s,"name",{value:e,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildScopePatterns=buildScopePatterns;function buildScopePatterns(s){const e=[],c=[],p=[];for(const t of s){if(!t)continue;const o=t.match(/^\/(.+)\/([gimsuy]*)$/);if(o){const n=o[2].replace("g",""),r=new RegExp(o[1],n);e.push(r),p.push(r)}else if(t.includes("/")){const n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push(new RegExp(`^${n}`)),c.push(t)}else if(t.startsWith("@")){const n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push(new RegExp(`^${n}/`)),c.push(t.endsWith("/")?t:`${t}/`)}else{const n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`^${n}(/|$)`);e.push(r),p.push(r)}}return{allowlistPatterns:e,scopePrefixes:c,scopePatterns:p}}f(buildScopePatterns,"buildScopePatterns"),i(buildScopePatterns,"buildScopePatterns"),u(buildScopePatterns,"buildScopePatterns");
package/bundle-parent.js CHANGED
@@ -1 +1 @@
1
- "use strict";var l=Object.defineProperty;var o=(e,t)=>l(e,"name",{value:t,configurable:!0});var d=Object.defineProperty,n=o((e,t)=>d(e,"name",{value:t,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadParentFor=loadParentFor,exports.routeBundleRequires=routeBundleRequires;const tslib_1=require("tslib"),nodeModule=tslib_1.__importStar(require("node:module")),path=tslib_1.__importStar(require("node:path")),ModuleCtor=nodeModule.Module,standIns=new Map,isStandIn=new WeakSet;let wrapped=!1;function standInFor(e){const t=standIns.get(e);if(t)return t;const r=new ModuleCtor(e,null);return r.filename=e,r.paths=ModuleCtor._nodeModulePaths(path.dirname(e)),r.loaded=!0,standIns.set(e,r),isStandIn.add(r),r}o(standInFor,"standInFor"),n(standInFor,"standInFor");function loadParentFor(e){if(!e||typeof e!="object"||isStandIn.has(e))return e;const t=e.filename;return typeof t=="string"?standIns.get(t)??e:e}o(loadParentFor,"loadParentFor"),n(loadParentFor,"loadParentFor");function routeBundleRequires(...e){for(const r of e)standInFor(r);if(wrapped)return;wrapped=!0;const t=ModuleCtor._load;ModuleCtor._load=n(function(r,a,...u){return t.call(this,r,loadParentFor(a),...u)},"lensmcpBundleParent")}o(routeBundleRequires,"routeBundleRequires"),n(routeBundleRequires,"routeBundleRequires");
1
+ "use strict";var i=Object.defineProperty;var a=(e,t)=>i(e,"name",{value:t,configurable:!0});var l=Object.defineProperty,o=a((e,t)=>l(e,"name",{value:t,configurable:!0}),"o"),d=Object.defineProperty,n=o((e,t)=>d(e,"name",{value:t,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadParentFor=loadParentFor,exports.routeBundleRequires=routeBundleRequires;const tslib_1=require("tslib"),nodeModule=tslib_1.__importStar(require("node:module")),path=tslib_1.__importStar(require("node:path")),ModuleCtor=nodeModule.Module,standIns=new Map,isStandIn=new WeakSet;let wrapped=!1;function standInFor(e){const t=standIns.get(e);if(t)return t;const r=new ModuleCtor(e,null);return r.filename=e,r.paths=ModuleCtor._nodeModulePaths(path.dirname(e)),r.loaded=!0,standIns.set(e,r),isStandIn.add(r),r}a(standInFor,"standInFor"),o(standInFor,"standInFor"),n(standInFor,"standInFor");function loadParentFor(e){if(!e||typeof e!="object"||isStandIn.has(e))return e;const t=e.filename;return typeof t=="string"?standIns.get(t)??e:e}a(loadParentFor,"loadParentFor"),o(loadParentFor,"loadParentFor"),n(loadParentFor,"loadParentFor");function routeBundleRequires(...e){for(const r of e)standInFor(r);if(wrapped)return;wrapped=!0;const t=ModuleCtor._load;ModuleCtor._load=n(function(r,u,...s){return t.call(this,r,loadParentFor(u),...s)},"lensmcpBundleParent")}a(routeBundleRequires,"routeBundleRequires"),o(routeBundleRequires,"routeBundleRequires"),n(routeBundleRequires,"routeBundleRequires");
package/checkout-cache.js CHANGED
@@ -1 +1 @@
1
- "use strict";var a=Object.defineProperty;var t=(e,r)=>a(e,"name",{value:r,configurable:!0});var u=Object.defineProperty,o=t((e,r)=>u(e,"name",{value:r,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0}),exports.ownsNodeModules=ownsNodeModules,exports.checkoutCacheDir=checkoutCacheDir;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path"));function ownsNodeModules(e){let r;try{r=fs.realpathSync(e)}catch{return!0}const n=path.join(r,"node_modules");for(const[s,i]of[[path.join(e,"node_modules"),n],[path.join(e,"node_modules",".cache"),path.join(n,".cache")]]){let c;try{c=fs.realpathSync(s)}catch{continue}if(c!==i)return!1}return!0}t(ownsNodeModules,"ownsNodeModules"),o(ownsNodeModules,"ownsNodeModules");function checkoutCacheDir(e,r){return ownsNodeModules(e)?path.join(e,"node_modules",".cache",r):path.join(e,".lensmcp","cache",r)}t(checkoutCacheDir,"checkoutCacheDir"),o(checkoutCacheDir,"checkoutCacheDir");
1
+ "use strict";var l=Object.defineProperty;var c=(e,r)=>l(e,"name",{value:r,configurable:!0});var a=Object.defineProperty,t=c((e,r)=>a(e,"name",{value:r,configurable:!0}),"t"),u=Object.defineProperty,o=t((e,r)=>u(e,"name",{value:r,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0}),exports.ownsNodeModules=ownsNodeModules,exports.checkoutCacheDir=checkoutCacheDir;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path"));function ownsNodeModules(e){let r;try{r=fs.realpathSync(e)}catch{return!0}const n=path.join(r,"node_modules");for(const[s,d]of[[path.join(e,"node_modules"),n],[path.join(e,"node_modules",".cache"),path.join(n,".cache")]]){let i;try{i=fs.realpathSync(s)}catch{continue}if(i!==d)return!1}return!0}c(ownsNodeModules,"ownsNodeModules"),t(ownsNodeModules,"ownsNodeModules"),o(ownsNodeModules,"ownsNodeModules");function checkoutCacheDir(e,r){return ownsNodeModules(e)?path.join(e,"node_modules",".cache",r):path.join(e,".lensmcp","cache",r)}c(checkoutCacheDir,"checkoutCacheDir"),t(checkoutCacheDir,"checkoutCacheDir"),o(checkoutCacheDir,"checkoutCacheDir");
@@ -1 +1 @@
1
- "use strict";var T=Object.defineProperty;var p=(r,e)=>T(r,"name",{value:e,configurable:!0});var O=Object.defineProperty,c=p((r,e)=>O(r,"name",{value:e,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DevBuildFinalizePlugin=exports.DevServerReloadPlugin=exports.devserverControlSock=exports.DevserverNotifier=void 0,exports.devCacheOptions=devCacheOptions,exports.devModuleFilename=devModuleFilename,exports.createDevWebpackConfig=createDevWebpackConfig;const tslib_1=require("tslib"),app_plugin_1=require("@nx/webpack/app-plugin"),node_crypto_1=require("node:crypto"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),webpack_node_externals_1=tslib_1.__importDefault(require("webpack-node-externals")),build_scope_patterns_1=require("./build-scope-patterns"),checkout_cache_1=require("./checkout-cache"),dev_devtool_1=require("./dev-devtool"),tsgo_check_plugin_1=require("./tsgo-check-plugin"),fork_ts_check_reporter_1=require("./fork-ts-check-reporter"),perf_rules_plugin_1=require("./perf/perf-rules-plugin"),devserver_notifier_1=require("./devserver-notifier"),workspace_paths_1=require("./workspace-paths");var devserver_notifier_2=require("./devserver-notifier");Object.defineProperty(exports,"DevserverNotifier",{enumerable:!0,get:c(function(){return devserver_notifier_2.DevserverNotifier},"get")}),Object.defineProperty(exports,"devserverControlSock",{enumerable:!0,get:c(function(){return devserver_notifier_2.devserverControlSock},"get")});const webpack=require("webpack");class DevServerReloadPlugin{static{p(this,"DevServerReloadPlugin")}static{c(this,"DevServerReloadPlugin")}constructor(e,n=!1,a,o=Number(process.env.LENSMCP_GATEWAY_PID??0)>0){this.notifier=new devserver_notifier_1.DevserverNotifier(e,n,a,o)}snapshot(){return this.notifier.snapshot()}apply(e){const n="DevServerReloadPlugin";let a=!1;e.hooks.watchRun?.tap(n,o=>{const s=[...o?.modifiedFiles??[],...o?.removedFiles??[]].filter(i=>typeof i=="string");if(!a){const i=o?.watchFileSystem?.watcher;i&&typeof i.on=="function"&&(a=!0,i.on("error",l=>this.notifier.degrade(`watcher error: ${l?.message??String(l)}`)))}this.notifier.watchRun(s)}),e.hooks.watchClose?.tap(n,()=>this.notifier.degrade("watch closed")),e.hooks.failed?.tap(n,o=>this.notifier.degrade(`compiler failed: ${o?.message??String(o)}`)),e.hooks.done.tap(n,async o=>{if(o.hasErrors()){this.notifier.failed();return}await this.notifier.built()})}}exports.DevServerReloadPlugin=DevServerReloadPlugin;const DEV_CACHE_MEMORY_GENERATIONS=5,DEV_CACHE_MAX_AGE_MS=10080*60*1e3,LOCKFILES=["yarn.lock","package-lock.json","pnpm-lock.yaml","bun.lock"];function clusterVersion(){for(const r of[path.join(__dirname,"package.json"),path.join(__dirname,"..","package.json")])try{const e=JSON.parse(fs.readFileSync(r,"utf8"));if(e.name==="@lensmcp/cluster"&&e.version)return e.version}catch{}return"unknown"}p(clusterVersion,"clusterVersion"),c(clusterVersion,"clusterVersion");function devCacheOptions(r,e){const{appName:n,appRoot:a,workspaceRoot:o,tsConfig:s,webpackConfigPath:i}=r,l=clusterVersion(),_=JSON.stringify({lensmcp:l,devtool:e,buildLibsFromSource:r.buildLibsFromSource??!0,orgScopes:r.orgScopes??[],bundlePackages:r.bundlePackages??[],nodeExternalsConfig:r.nodeExternalsConfig??null}),f=c(g=>g.filter(d=>fs.existsSync(d)),"existing"),k=(0,workspace_paths_1.readWorkspacePaths)(s,o)?.configFiles??[path.resolve(o,s)],v={lensmcp:[__filename],lockfile:f(LOCKFILES.map(g=>path.join(o,g))),tsconfig:f([...new Set([...k,path.join(o,"tsconfig.base.json")])])};return i&&(v.overrides=[path.resolve(a,i)]),{type:"filesystem",cacheDirectory:(0,checkout_cache_1.checkoutCacheDir)(o,"lensmcp-webpack"),name:n.replace(/[^\w.-]+/g,"_"),version:`${l}-${(0,node_crypto_1.createHash)("sha256").update(_).digest("hex").slice(0,16)}`,buildDependencies:v,maxMemoryGenerations:DEV_CACHE_MEMORY_GENERATIONS,maxAge:DEV_CACHE_MAX_AGE_MS}}p(devCacheOptions,"devCacheOptions"),c(devCacheOptions,"devCacheOptions");function devModuleFilename(r){const e=r.absoluteResourcePath;return path.isAbsolute(e)?`file://${e}`:e}p(devModuleFilename,"devModuleFilename"),c(devModuleFilename,"devModuleFilename");class DevBuildFinalizePlugin{static{p(this,"DevBuildFinalizePlugin")}static{c(this,"DevBuildFinalizePlugin")}constructor(e){this.options=e}apply(e){const{cache:n}=this.options;e.options.cache={...n,buildDependencies:{...n.buildDependencies}},e.options.context&&(e.context=e.options.context);const a=e.options.resolve?.plugins??[];if(a.some(o=>o instanceof workspace_paths_1.WorkspacePathsResolverPlugin)){const o=new Set(a);e.hooks.afterPlugins.tap("DevBuildFinalizePlugin",()=>{const s=e.options.resolve;s.plugins=s.plugins.filter(i=>o.has(i)||i?.constructor?.name!=="TsconfigPathsPlugin")})}if(this.options.tsSourceMaps)for(const o of e.options.module?.rules??[])typeof o?.loader!="string"||!/[\\/]ts-loader[\\/]/.test(o.loader)||(o.options={...o.options,compilerOptions:{...o.options?.compilerOptions,sourceMap:!0,inlineSourceMap:!1}})}}exports.DevBuildFinalizePlugin=DevBuildFinalizePlugin;function createDevWebpackConfig(r){const{appRoot:e,outputDir:n,main:a,tsConfig:o,workspaceRoot:s,assets:i=[],port:l,memoryLimit:_=8192,buildLibsFromSource:f=!0,orgScopes:k=[],bundlePackages:v=[],additionalEntryPoints:g=[],nodeExternalsConfig:d,webpackConfigPath:b}=r,{allowlistPatterns:y,scopePrefixes:x,scopePatterns:M}=(0,build_scope_patterns_1.buildScopePatterns)(k),C=process.env.LENSMCP_TYPECHECK,S=C==="tsgo"?(0,tsgo_check_plugin_1.resolveTsgoBin)(s,process.env.LENSMCP_TSGO_BIN):null;if(C==="tsgo"&&!S){const t=`${tsgo_check_plugin_1.TSGO_MISSING_CAUSE}. Fell back to fork-ts-checker, which reports to the console only \u2014 so typecheck:// has no producer for this project until it is fixed`;console.warn(`[serve] ${r.appName}: LENSMCP_TYPECHECK=tsgo but ${t}.`),(0,tsgo_check_plugin_1.reportTsgoUnavailable)({appName:r.appName,tsConfig:o,workspaceRoot:s,detail:t})}const w=!!S,P=(0,dev_devtool_1.resolveDevDevtool)(r.devtool);P.rejected&&console.warn(`[serve] ${r.appName}: '${P.rejected}' (devtool / ${dev_devtool_1.DEV_DEVTOOL_ENV}) is not a webpack devtool \u2014 building with '${dev_devtool_1.DEFAULT_DEV_DEVTOOL}'.`);const h=P.devtool,E=f?(0,workspace_paths_1.readWorkspacePaths)(o,s):null,D=v.map(t=>new RegExp(`^${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(/|$)`)),R=[/webpack\/hot\/poll\?100/,...y,...D,...d?.allowlist||[]],N={output:{path:n,...process.env.NODE_ENV!=="production"&&{devtoolModuleFilenameTemplate:devModuleFilename},clean:!0},externals:[(0,webpack_node_externals_1.default)({allowlist:R,additionalModuleDirs:d?.additionalModuleDirs||[],...d?.importType&&{importType:d.importType}}),({request:t},m)=>{if(t&&path.isAbsolute(t)&&t.startsWith(s)&&!t.includes("node_modules")||t&&(t.startsWith(path.join(s,"apps"))||t.startsWith(path.join(s,"libs")))||t&&x.some(u=>t.startsWith(u))||t&&M.some(u=>u.test(t))||t&&D.some(u=>u.test(t)))return m();if(t&&!(t.startsWith("./")||t.startsWith(".."))){const u=t.startsWith("@")?t.split("/").slice(0,2).join("/"):t.split("/")[0];return fs.existsSync(path.join(s,"node_modules",u))?m(null,`commonjs ${t}`):m()}return m()}],mode:"development",devtool:h,...(0,workspace_paths_1.hasPathMappings)(E)&&{resolve:{plugins:[new workspace_paths_1.WorkspacePathsResolverPlugin(E)]}},plugins:[new webpack.HotModuleReplacementPlugin,new app_plugin_1.NxAppWebpackPlugin({target:"node22",compiler:"tsc",main:a,additionalEntryPoints:g,verbose:!0,sourceMap:h,mergeExternals:!0,externalDependencies:[],memoryLimit:_,tsConfig:o,assets:i,optimization:!1,progress:!1,outputHashing:"none",generatePackageJson:!1,watchDependencies:!0,typeCheckOptions:process.env.LENSMCP_TYPECHECK==="off"||w?!1:{async:!0},buildLibsFromSource:f}),new DevBuildFinalizePlugin({cache:devCacheOptions(r,h),tsSourceMaps:(0,dev_devtool_1.bundleCarriesSourceMaps)(h)}),new DevServerReloadPlugin(l,r.httpsReload===!0,(0,devserver_notifier_1.devserverControlSock)(r.serviceName)),new perf_rules_plugin_1.PerfRulesPlugin({project:process.env.LENSMCP_PROJECT||r.appName,workspaceRoot:s,tsConfig:o}),...w?[new tsgo_check_plugin_1.TsgoCheckPlugin({appName:r.appName,tsConfig:o,workspaceRoot:s,...process.env.LENSMCP_TSGO_BIN?{binPath:process.env.LENSMCP_TSGO_BIN}:{}})]:process.env.LENSMCP_TYPECHECK==="off"?[]:[new fork_ts_check_reporter_1.ForkTsCheckReporterPlugin({appName:r.appName,tsConfig:o,workspaceRoot:s})]],snapshot:{managedPaths:[/^(.+?[\\/])?node_modules[\\/]/]},watch:!0,watchOptions:{ignored:["**/*.env.template","**/config.template.json","**/*.md","**/dist/**","**/migrations/**"]}};if(b){const t=require(path.resolve(e,b));return(t.default||t)(N)}return N}p(createDevWebpackConfig,"createDevWebpackConfig"),c(createDevWebpackConfig,"createDevWebpackConfig");
1
+ "use strict";var j=Object.defineProperty;var l=(t,e)=>j(t,"name",{value:e,configurable:!0});var T=Object.defineProperty,p=l((t,e)=>T(t,"name",{value:e,configurable:!0}),"p"),O=Object.defineProperty,c=p((t,e)=>O(t,"name",{value:e,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DevBuildFinalizePlugin=exports.DevServerReloadPlugin=exports.devserverControlSock=exports.DevserverNotifier=void 0,exports.devCacheOptions=devCacheOptions,exports.devModuleFilename=devModuleFilename,exports.createDevWebpackConfig=createDevWebpackConfig;const tslib_1=require("tslib"),app_plugin_1=require("@nx/webpack/app-plugin"),node_crypto_1=require("node:crypto"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),webpack_node_externals_1=tslib_1.__importDefault(require("webpack-node-externals")),build_scope_patterns_1=require("./build-scope-patterns"),checkout_cache_1=require("./checkout-cache"),dev_devtool_1=require("./dev-devtool"),tsgo_check_plugin_1=require("./tsgo-check-plugin"),fork_ts_check_reporter_1=require("./fork-ts-check-reporter"),perf_rules_plugin_1=require("./perf/perf-rules-plugin"),devserver_notifier_1=require("./devserver-notifier"),workspace_paths_1=require("./workspace-paths");var devserver_notifier_2=require("./devserver-notifier");Object.defineProperty(exports,"DevserverNotifier",{enumerable:!0,get:c(function(){return devserver_notifier_2.DevserverNotifier},"get")}),Object.defineProperty(exports,"devserverControlSock",{enumerable:!0,get:c(function(){return devserver_notifier_2.devserverControlSock},"get")});const webpack=require("webpack");class DevServerReloadPlugin{static{l(this,"DevServerReloadPlugin")}static{p(this,"DevServerReloadPlugin")}static{c(this,"DevServerReloadPlugin")}constructor(e,i=!1,a,o=Number(process.env.LENSMCP_GATEWAY_PID??0)>0){this.notifier=new devserver_notifier_1.DevserverNotifier(e,i,a,o)}snapshot(){return this.notifier.snapshot()}apply(e){const i="DevServerReloadPlugin";let a=!1;e.hooks.watchRun?.tap(i,o=>{const r=[...o?.modifiedFiles??[],...o?.removedFiles??[]].filter(n=>typeof n=="string");if(!a){const n=o?.watchFileSystem?.watcher;n&&typeof n.on=="function"&&(a=!0,n.on("error",u=>this.notifier.degrade(`watcher error: ${u?.message??String(u)}`)))}this.notifier.watchRun(r)}),e.hooks.watchClose?.tap(i,()=>this.notifier.degrade("watch closed")),e.hooks.failed?.tap(i,o=>this.notifier.degrade(`compiler failed: ${o?.message??String(o)}`)),e.hooks.done.tap(i,async o=>{if(o.hasErrors()){this.notifier.failed();return}await this.notifier.built()})}}exports.DevServerReloadPlugin=DevServerReloadPlugin;const DEV_CACHE_MEMORY_GENERATIONS=5,DEV_CACHE_MAX_AGE_MS=10080*60*1e3,LOCKFILES=["yarn.lock","package-lock.json","pnpm-lock.yaml","bun.lock"];function clusterVersion(){for(const t of[path.join(__dirname,"package.json"),path.join(__dirname,"..","package.json")])try{const e=JSON.parse(fs.readFileSync(t,"utf8"));if(e.name==="@lensmcp/cluster"&&e.version)return e.version}catch{}return"unknown"}l(clusterVersion,"clusterVersion"),p(clusterVersion,"clusterVersion"),c(clusterVersion,"clusterVersion");function devCacheOptions(t,e){const{appName:i,appRoot:a,workspaceRoot:o,tsConfig:r,webpackConfigPath:n}=t,u=clusterVersion(),k=JSON.stringify({lensmcp:u,devtool:e,buildLibsFromSource:t.buildLibsFromSource??!0,orgScopes:t.orgScopes??[],bundlePackages:t.bundlePackages??[],nodeExternalsConfig:t.nodeExternalsConfig??null}),g=c(f=>f.filter(v=>fs.existsSync(v)),"existing"),P=(0,workspace_paths_1.readWorkspacePaths)(r,o)?.configFiles??[path.resolve(o,r)],h={lensmcp:[__filename],lockfile:g(LOCKFILES.map(f=>path.join(o,f))),tsconfig:g([...new Set([...P,path.join(o,"tsconfig.base.json")])])};return n&&(h.overrides=[path.resolve(a,n)]),{type:"filesystem",cacheDirectory:(0,checkout_cache_1.checkoutCacheDir)(o,"lensmcp-webpack"),name:i.replace(/[^\w.-]+/g,"_"),version:`${u}-${(0,node_crypto_1.createHash)("sha256").update(k).digest("hex").slice(0,16)}`,buildDependencies:h,maxMemoryGenerations:DEV_CACHE_MEMORY_GENERATIONS,maxAge:DEV_CACHE_MAX_AGE_MS}}l(devCacheOptions,"devCacheOptions"),p(devCacheOptions,"devCacheOptions"),c(devCacheOptions,"devCacheOptions");function devModuleFilename(t){const e=t.absoluteResourcePath;return path.isAbsolute(e)?`file://${e}`:e}l(devModuleFilename,"devModuleFilename"),p(devModuleFilename,"devModuleFilename"),c(devModuleFilename,"devModuleFilename");class DevBuildFinalizePlugin{static{l(this,"DevBuildFinalizePlugin")}static{p(this,"DevBuildFinalizePlugin")}static{c(this,"DevBuildFinalizePlugin")}constructor(e){this.options=e}apply(e){const{cache:i}=this.options;e.options.cache={...i,buildDependencies:{...i.buildDependencies}},e.options.context&&(e.context=e.options.context);const a=e.options.resolve?.plugins??[];if(a.some(o=>o instanceof workspace_paths_1.WorkspacePathsResolverPlugin)){const o=new Set(a);e.hooks.afterPlugins.tap("DevBuildFinalizePlugin",()=>{const r=e.options.resolve;r.plugins=r.plugins.filter(n=>o.has(n)||n?.constructor?.name!=="TsconfigPathsPlugin")})}if(this.options.tsSourceMaps)for(const o of e.options.module?.rules??[])typeof o?.loader!="string"||!/[\\/]ts-loader[\\/]/.test(o.loader)||(o.options={...o.options,compilerOptions:{...o.options?.compilerOptions,sourceMap:!0,inlineSourceMap:!1}})}}exports.DevBuildFinalizePlugin=DevBuildFinalizePlugin;function createDevWebpackConfig(t){const{appRoot:e,outputDir:i,main:a,tsConfig:o,workspaceRoot:r,assets:n=[],port:u,memoryLimit:k=8192,buildLibsFromSource:g=!0,orgScopes:P=[],bundlePackages:h=[],additionalEntryPoints:f=[],nodeExternalsConfig:v,webpackConfigPath:C}=t,{allowlistPatterns:x,scopePrefixes:M,scopePatterns:R}=(0,build_scope_patterns_1.buildScopePatterns)(P),S=process.env.LENSMCP_TYPECHECK,w=S==="tsgo"?(0,tsgo_check_plugin_1.resolveTsgoBin)(r,process.env.LENSMCP_TSGO_BIN):null;if(S==="tsgo"&&!w){const s=`${tsgo_check_plugin_1.TSGO_MISSING_CAUSE}. Fell back to fork-ts-checker, which reports to the console only \u2014 so typecheck:// has no producer for this project until it is fixed`;console.warn(`[serve] ${t.appName}: LENSMCP_TYPECHECK=tsgo but ${s}.`),(0,tsgo_check_plugin_1.reportTsgoUnavailable)({appName:t.appName,tsConfig:o,workspaceRoot:r,detail:s})}const E=!!w,b=(0,dev_devtool_1.resolveDevDevtool)(t.devtool);b.rejected&&console.warn(`[serve] ${t.appName}: '${b.rejected}' (devtool / ${dev_devtool_1.DEV_DEVTOOL_ENV}) is not a webpack devtool \u2014 building with '${dev_devtool_1.DEFAULT_DEV_DEVTOOL}'.`);const m=b.devtool,D=g?(0,workspace_paths_1.readWorkspacePaths)(o,r):null,N=h.map(s=>new RegExp(`^${s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(/|$)`)),F=[/webpack\/hot\/poll\?100/,...x,...N,...v?.allowlist||[]],y={output:{path:i,...process.env.NODE_ENV!=="production"&&{devtoolModuleFilenameTemplate:devModuleFilename},clean:!0},externals:[(0,webpack_node_externals_1.default)({allowlist:F,additionalModuleDirs:v?.additionalModuleDirs||[],...v?.importType&&{importType:v.importType}}),({request:s},_)=>{if(s&&path.isAbsolute(s)&&s.startsWith(r)&&!s.includes("node_modules")||s&&(s.startsWith(path.join(r,"apps"))||s.startsWith(path.join(r,"libs")))||s&&M.some(d=>s.startsWith(d))||s&&R.some(d=>d.test(s))||s&&N.some(d=>d.test(s)))return _();if(s&&!(s.startsWith("./")||s.startsWith(".."))){const d=s.startsWith("@")?s.split("/").slice(0,2).join("/"):s.split("/")[0];return fs.existsSync(path.join(r,"node_modules",d))?_(null,`commonjs ${s}`):_()}return _()}],mode:"development",devtool:m,...(0,workspace_paths_1.hasPathMappings)(D)&&{resolve:{plugins:[new workspace_paths_1.WorkspacePathsResolverPlugin(D)]}},plugins:[new webpack.HotModuleReplacementPlugin,new app_plugin_1.NxAppWebpackPlugin({target:"node22",compiler:"tsc",main:a,additionalEntryPoints:f,verbose:!0,sourceMap:m,mergeExternals:!0,externalDependencies:[],memoryLimit:k,tsConfig:o,assets:n,optimization:!1,progress:!1,outputHashing:"none",generatePackageJson:!1,watchDependencies:!0,typeCheckOptions:process.env.LENSMCP_TYPECHECK==="off"||E?!1:{async:!0},buildLibsFromSource:g}),new DevBuildFinalizePlugin({cache:devCacheOptions(t,m),tsSourceMaps:(0,dev_devtool_1.bundleCarriesSourceMaps)(m)}),new DevServerReloadPlugin(u,t.httpsReload===!0,(0,devserver_notifier_1.devserverControlSock)(t.serviceName)),new perf_rules_plugin_1.PerfRulesPlugin({project:process.env.LENSMCP_PROJECT||t.appName,workspaceRoot:r,tsConfig:o}),...E?[new tsgo_check_plugin_1.TsgoCheckPlugin({appName:t.appName,tsConfig:o,workspaceRoot:r,...process.env.LENSMCP_TSGO_BIN?{binPath:process.env.LENSMCP_TSGO_BIN}:{}})]:process.env.LENSMCP_TYPECHECK==="off"?[]:[new fork_ts_check_reporter_1.ForkTsCheckReporterPlugin({appName:t.appName,tsConfig:o,workspaceRoot:r})]],snapshot:{managedPaths:[/^(.+?[\\/])?node_modules[\\/]/]},watch:!0,watchOptions:{ignored:["**/*.env.template","**/config.template.json","**/*.md","**/dist/**","**/migrations/**"]}};if(C){const s=require(path.resolve(e,C));return(s.default||s)(y)}return y}l(createDevWebpackConfig,"createDevWebpackConfig"),p(createDevWebpackConfig,"createDevWebpackConfig"),c(createDevWebpackConfig,"createDevWebpackConfig");
@@ -1 +1 @@
1
- "use strict";var A=Object.defineProperty;var d=(o,n)=>A(o,"name",{value:n,configurable:!0});var F=Object.defineProperty,m=d((o,n)=>F(o,"name",{value:n,configurable:!0}),"m");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProdWebpackConfig=createProdWebpackConfig;const tslib_1=require("tslib"),app_plugin_1=require("@nx/webpack/app-plugin"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),glob_1=require("glob"),webpack_node_externals_1=tslib_1.__importDefault(require("webpack-node-externals")),build_scope_patterns_1=require("./build-scope-patterns");function createProdWebpackConfig(o){const{appRoot:n,outputDir:P,main:_,tsConfig:g,workspaceRoot:r,assets:k=[],additionalEntryPoints:x=[],runtimeDependencies:C=[],memoryLimit:b=8192,generatePackageJson:j=!0,buildLibsFromSource:f=!1,ormConfigPath:c,migrationsDir:W="./src/migrations",orgScopes:w=[],bundlePackages:S=[],nodeExternalsConfig:a,webpackConfigPath:h}=o,{allowlistPatterns:v,scopePrefixes:D,scopePatterns:q}=(0,build_scope_patterns_1.buildScopePatterns)(w),y=S.map(e=>new RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(/|$)`)),E=[...v,...y,...a?.allowlist||[]];let s;if(c!==void 0)s=c?path.join(n,c):null;else{const e=path.join(n,"./src/ormconfig.ts");s=fs.existsSync(e)?e:null}const $=s&&fs.existsSync(s),p=[],u={externals:[(0,webpack_node_externals_1.default)({allowlist:E,additionalModuleDirs:a?.additionalModuleDirs||[],...a?.importType&&{importType:a.importType}}),({request:e},i)=>{if(e&&path.isAbsolute(e)&&e.startsWith(r)&&!e.includes("node_modules")||e&&(e.startsWith(path.join(r,"apps"))||e.startsWith(path.join(r,"libs")))||e&&D.some(t=>e.startsWith(t))||e&&q.some(t=>t.test(e))||e&&y.some(t=>t.test(e)))return i();if(e&&!(e.startsWith("./")||e.startsWith(".."))){const t=e.startsWith("@")?e.split("/").slice(0,2).join("/"):e.split("/")[0];return fs.existsSync(path.join(r,"node_modules",t))?i(null,`commonjs ${e}`):i()}return i()}],output:{path:P,clean:!1},devtool:"inline-source-map",mode:"production",plugins:[new app_plugin_1.NxAppWebpackPlugin({target:"node22",compiler:"tsc",main:_,additionalEntryPoints:x,externalDependencies:[],mergeExternals:!0,memoryLimit:b,tsConfig:g,assets:k,namedChunks:!0,optimization:!0,outputHashing:"none",generatePackageJson:j,runtimeDependencies:C,buildLibsFromSource:f,typeCheckOptions:{async:!1},sourceMap:"inline-source-map",progress:!1})]};if(p.push(u),$&&s){const e=[],i=path.join(n,W,"*.ts");(0,glob_1.globSync)(i).forEach(l=>{const M=path.basename(l,".ts");e.push({entryName:`migrations/${M}`,entryPath:l})});const t="./"+path.relative(n,s),L={...u,output:{...u.output,filename:m(l=>l.runtime==="main"?"ormconfig.js":"[name].js","filename"),library:{type:"commonjs"},clean:!1},devtool:!1,plugins:[new app_plugin_1.NxAppWebpackPlugin({target:"node22",compiler:"tsc",main:t,externalDependencies:[],additionalEntryPoints:e,mergeExternals:!0,tsConfig:g,assets:[],namedChunks:!0,memoryLimit:b,optimization:!1,outputHashing:"none",generatePackageJson:!1,buildLibsFromSource:f,skipTypeChecking:!0,sourceMap:!1,progress:!process.env.CI})]};p.push(L)}if(h){const e=require(path.resolve(n,h)),i=e.default||e;return p.map(t=>i(t))}return p}d(createProdWebpackConfig,"createProdWebpackConfig"),m(createProdWebpackConfig,"createProdWebpackConfig");
1
+ "use strict";var T=Object.defineProperty;var g=(o,t)=>T(o,"name",{value:t,configurable:!0});var A=Object.defineProperty,d=g((o,t)=>A(o,"name",{value:t,configurable:!0}),"d"),F=Object.defineProperty,m=d((o,t)=>F(o,"name",{value:t,configurable:!0}),"m");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProdWebpackConfig=createProdWebpackConfig;const tslib_1=require("tslib"),app_plugin_1=require("@nx/webpack/app-plugin"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),glob_1=require("glob"),webpack_node_externals_1=tslib_1.__importDefault(require("webpack-node-externals")),build_scope_patterns_1=require("./build-scope-patterns");function createProdWebpackConfig(o){const{appRoot:t,outputDir:k,main:_,tsConfig:b,workspaceRoot:r,assets:x=[],additionalEntryPoints:C=[],runtimeDependencies:j=[],memoryLimit:f=8192,generatePackageJson:W=!0,buildLibsFromSource:h=!1,ormConfigPath:c,migrationsDir:v="./src/migrations",orgScopes:w=[],bundlePackages:S=[],nodeExternalsConfig:a,webpackConfigPath:y}=o,{allowlistPatterns:q,scopePrefixes:D,scopePatterns:E}=(0,build_scope_patterns_1.buildScopePatterns)(w),P=S.map(e=>new RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(/|$)`)),L=[...q,...P,...a?.allowlist||[]];let s;if(c!==void 0)s=c?path.join(t,c):null;else{const e=path.join(t,"./src/ormconfig.ts");s=fs.existsSync(e)?e:null}const $=s&&fs.existsSync(s),p=[],u={externals:[(0,webpack_node_externals_1.default)({allowlist:L,additionalModuleDirs:a?.additionalModuleDirs||[],...a?.importType&&{importType:a.importType}}),({request:e},i)=>{if(e&&path.isAbsolute(e)&&e.startsWith(r)&&!e.includes("node_modules")||e&&(e.startsWith(path.join(r,"apps"))||e.startsWith(path.join(r,"libs")))||e&&D.some(n=>e.startsWith(n))||e&&E.some(n=>n.test(e))||e&&P.some(n=>n.test(e)))return i();if(e&&!(e.startsWith("./")||e.startsWith(".."))){const n=e.startsWith("@")?e.split("/").slice(0,2).join("/"):e.split("/")[0];return fs.existsSync(path.join(r,"node_modules",n))?i(null,`commonjs ${e}`):i()}return i()}],output:{path:k,clean:!1},devtool:"inline-source-map",mode:"production",plugins:[new app_plugin_1.NxAppWebpackPlugin({target:"node22",compiler:"tsc",main:_,additionalEntryPoints:C,externalDependencies:[],mergeExternals:!0,memoryLimit:f,tsConfig:b,assets:x,namedChunks:!0,optimization:!0,outputHashing:"none",generatePackageJson:W,runtimeDependencies:j,buildLibsFromSource:h,typeCheckOptions:{async:!1},sourceMap:"inline-source-map",progress:!1})]};if(p.push(u),$&&s){const e=[],i=path.join(t,v,"*.ts");(0,glob_1.globSync)(i).forEach(l=>{const O=path.basename(l,".ts");e.push({entryName:`migrations/${O}`,entryPath:l})});const n="./"+path.relative(t,s),M={...u,output:{...u.output,filename:m(l=>l.runtime==="main"?"ormconfig.js":"[name].js","filename"),library:{type:"commonjs"},clean:!1},devtool:!1,plugins:[new app_plugin_1.NxAppWebpackPlugin({target:"node22",compiler:"tsc",main:n,externalDependencies:[],additionalEntryPoints:e,mergeExternals:!0,tsConfig:b,assets:[],namedChunks:!0,memoryLimit:f,optimization:!1,outputHashing:"none",generatePackageJson:!1,buildLibsFromSource:h,skipTypeChecking:!0,sourceMap:!1,progress:!process.env.CI})]};p.push(M)}if(y){const e=require(path.resolve(t,y)),i=e.default||e;return p.map(n=>i(n))}return p}g(createProdWebpackConfig,"createProdWebpackConfig"),d(createProdWebpackConfig,"createProdWebpackConfig"),m(createProdWebpackConfig,"createProdWebpackConfig");
package/dev-devtool.js CHANGED
@@ -1 +1 @@
1
- "use strict";var D=Object.defineProperty;var E=(e,o)=>D(e,"name",{value:o,configurable:!0});var t=Object.defineProperty,s=E((e,o)=>t(e,"name",{value:o,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEV_SOURCE_MAPS_ENV=exports.DEV_DEVTOOL_ENV=exports.DEFAULT_DEV_DEVTOOL=void 0,exports.resolveDevDevtool=resolveDevDevtool,exports.bundleCarriesSourceMaps=bundleCarriesSourceMaps,exports.sourceMapExecArgv=sourceMapExecArgv,exports.DEFAULT_DEV_DEVTOOL="eval",exports.DEV_DEVTOOL_ENV="LENSMCP_DEV_DEVTOOL",exports.DEV_SOURCE_MAPS_ENV="LENSMCP_DEV_SOURCE_MAPS";const DEVTOOL_PATTERN=/^(?:eval|(?:inline-|hidden-|eval-)?(?:nosources-)?(?:cheap-(?:module-)?)?source-map(?:-debugids)?)$/,NO_DEVTOOL=/^(?:false|off|none|0)$/i;function resolveDevDevtool(e,o=process.env){const r=e===!1?"false":(e??o[exports.DEV_DEVTOOL_ENV]??"").trim();return r?NO_DEVTOOL.test(r)?{devtool:!1}:DEVTOOL_PATTERN.test(r)?{devtool:r}:{devtool:exports.DEFAULT_DEV_DEVTOOL,rejected:r}:{devtool:exports.DEFAULT_DEV_DEVTOOL}}E(resolveDevDevtool,"resolveDevDevtool"),s(resolveDevDevtool,"resolveDevDevtool");function bundleCarriesSourceMaps(e){return typeof e=="string"&&e.includes("source-map")&&!e.startsWith("hidden-")}E(bundleCarriesSourceMaps,"bundleCarriesSourceMaps"),s(bundleCarriesSourceMaps,"bundleCarriesSourceMaps");function sourceMapExecArgv(e=process.env){return e[exports.DEV_SOURCE_MAPS_ENV]==="1"?["--enable-source-maps"]:[]}E(sourceMapExecArgv,"sourceMapExecArgv"),s(sourceMapExecArgv,"sourceMapExecArgv");
1
+ "use strict";var a=Object.defineProperty;var n=(e,r)=>a(e,"name",{value:r,configurable:!0});var D=Object.defineProperty,E=n((e,r)=>D(e,"name",{value:r,configurable:!0}),"E"),t=Object.defineProperty,s=E((e,r)=>t(e,"name",{value:r,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEV_SOURCE_MAPS_ENV=exports.DEV_DEVTOOL_ENV=exports.DEFAULT_DEV_DEVTOOL=void 0,exports.resolveDevDevtool=resolveDevDevtool,exports.bundleCarriesSourceMaps=bundleCarriesSourceMaps,exports.sourceMapExecArgv=sourceMapExecArgv,exports.DEFAULT_DEV_DEVTOOL="eval",exports.DEV_DEVTOOL_ENV="LENSMCP_DEV_DEVTOOL",exports.DEV_SOURCE_MAPS_ENV="LENSMCP_DEV_SOURCE_MAPS";const DEVTOOL_PATTERN=/^(?:eval|(?:inline-|hidden-|eval-)?(?:nosources-)?(?:cheap-(?:module-)?)?source-map(?:-debugids)?)$/,NO_DEVTOOL=/^(?:false|off|none|0)$/i;function resolveDevDevtool(e,r=process.env){const o=e===!1?"false":(e??r[exports.DEV_DEVTOOL_ENV]??"").trim();return o?NO_DEVTOOL.test(o)?{devtool:!1}:DEVTOOL_PATTERN.test(o)?{devtool:o}:{devtool:exports.DEFAULT_DEV_DEVTOOL,rejected:o}:{devtool:exports.DEFAULT_DEV_DEVTOOL}}n(resolveDevDevtool,"resolveDevDevtool"),E(resolveDevDevtool,"resolveDevDevtool"),s(resolveDevDevtool,"resolveDevDevtool");function bundleCarriesSourceMaps(e){return typeof e=="string"&&e.includes("source-map")&&!e.startsWith("hidden-")}n(bundleCarriesSourceMaps,"bundleCarriesSourceMaps"),E(bundleCarriesSourceMaps,"bundleCarriesSourceMaps"),s(bundleCarriesSourceMaps,"bundleCarriesSourceMaps");function sourceMapExecArgv(e=process.env){return e[exports.DEV_SOURCE_MAPS_ENV]==="1"?["--enable-source-maps"]:[]}n(sourceMapExecArgv,"sourceMapExecArgv"),E(sourceMapExecArgv,"sourceMapExecArgv"),s(sourceMapExecArgv,"sourceMapExecArgv");
@@ -1 +1 @@
1
- "use strict";var p=Object.defineProperty;var u=(r,t)=>p(r,"name",{value:t,configurable:!0});var m=Object.defineProperty,a=u((r,t)=>m(r,"name",{value:t,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DevserverNotifier=void 0,exports.devserverControlSock=devserverControlSock;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),os=tslib_1.__importStar(require("node:os")),path=tslib_1.__importStar(require("node:path")),notice_generation_1=require("./notice-generation");class DevserverNotifier{static{u(this,"DevserverNotifier")}static{a(this,"DevserverNotifier")}static{this.RECENT_PATH_CAP=32}static{this.BUILD_PATH_CAP=50}constructor(t,e=!1,s,d=Number(process.env.LENSMCP_GATEWAY_PID??0)>0,c=(0,notice_generation_1.generationFromEnv)()){this.testimony={schemaVersion:1,lastWatchRunAt:0,lastBuildAt:0,buildsSinceSpawn:0,degraded:!1,recentPaths:[]},this.managed=d,this.secure=e,this.base=`${e?"https":"http"}://localhost:${t}`,this.controlSock=s,this.generation=c}post(t,e){const s=JSON.stringify(e),d={"content-type":"application/json",...this.generation!==void 0?{[notice_generation_1.NOTICE_GENERATION_HEADER]:String(this.generation)}:{}},c=a((i,n,o)=>{if(i.statusCode!==409||this.generation===void 0){i.resume(),i.on("end",n);return}let h="";i.setEncoding("utf8"),i.on("data",l=>{h+=l}),i.on("end",()=>{let l;try{l=JSON.parse(h).generation}catch{}o(new notice_generation_1.NotThisGeneration(this.generation,l))})},"answered"),v=a(()=>new Promise((i,n)=>{const o=(this.secure?require("node:https"):require("node:http")).request(`${this.base}${t}`,{method:"POST",headers:d,rejectUnauthorized:!1},h=>c(h,i,n));o.on("error",n),o.end(s)}),"viaTcp"),g=this.controlSock;return!g||!fs.existsSync(g)?this.managed?Promise.reject(new Error("the devserver control socket is not up yet")):v():new Promise((i,n)=>{const o=require("node:http").request({socketPath:g,path:t,method:"POST",headers:d},h=>c(h,i,n));o.on("error",n),o.end(s)}).catch(i=>{if(this.managed||i instanceof notice_generation_1.NotThisGeneration)throw i;return v()})}snapshot(){return{...this.testimony,recentPaths:[...this.testimony.recentPaths]}}watchRun(t){if(this.testimony.lastWatchRunAt=Date.now(),t.length){const e=[...this.testimony.recentPaths,...t];this.testimony.recentPaths=e.slice(-DevserverNotifier.RECENT_PATH_CAP)}this.building??={startedAt:this.testimony.lastWatchRunAt,changed:new Set,more:0};for(const e of t)this.building.changed.has(e)||(this.building.changed.size>=DevserverNotifier.BUILD_PATH_CAP?this.building.more+=1:this.building.changed.add(e));this.testimony.building=this.buildAccount(),this.tellWatching()}buildAccount(){if(this.building)return{startedAt:this.building.startedAt,changedFiles:[...this.building.changed],...this.building.more>0?{moreChanged:this.building.more}:{}}}failed(){const t=this.buildAccount();this.building=void 0,delete this.testimony.building;const e=Date.now();this.testimony.lastFailedAt=e,this.post("/webpack/watching",{...this.testimony,...t?{failed:{...t,endedAt:e}}:{}}).catch(()=>{})}degrade(t){this.testimony.degraded=t,this.tellWatching()}tellWatching(){this.post("/webpack/watching",this.testimony).catch(()=>{})}async built(t=!0){this.testimony.lastBuildAt=Date.now(),this.testimony.buildsSinceSpawn+=1;const e=this.buildAccount();if(this.building=void 0,delete this.testimony.building,!t){this.tellWatching();return}try{await this.post("/webpack/reload",{watcher:this.testimony,...e?{build:{...e,endedAt:this.testimony.lastBuildAt}}:{}}),console.log("[DevServerReloadPlugin] notified devserver to reload")}catch(s){s instanceof notice_generation_1.NotThisGeneration?console.log(`[DevServerReloadPlugin] not this generation's devserver (${s.message}) \u2014 not reloaded; this generation's devserver loads the build when it starts`):console.log("[DevServerReloadPlugin] devserver not running yet")}}}exports.DevserverNotifier=DevserverNotifier;function devserverControlSock(r,t=process.env){const e=t.LENSMCP_SOCK_NS||t.LENSMCP_WS_KEY||"",s=e?path.join(os.tmpdir(),e,`${r}-devserver`):path.join(os.tmpdir(),`${r}-devserver`);return path.join(s,"parent.sock")}u(devserverControlSock,"devserverControlSock"),a(devserverControlSock,"devserverControlSock");
1
+ "use strict";var y=Object.defineProperty;var g=(n,e)=>y(n,"name",{value:e,configurable:!0});var p=Object.defineProperty,u=g((n,e)=>p(n,"name",{value:e,configurable:!0}),"u"),m=Object.defineProperty,a=u((n,e)=>m(n,"name",{value:e,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DevserverNotifier=void 0,exports.devserverControlSock=devserverControlSock;const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),os=tslib_1.__importStar(require("node:os")),path=tslib_1.__importStar(require("node:path")),notice_generation_1=require("./notice-generation");class DevserverNotifier{static{g(this,"DevserverNotifier")}static{u(this,"DevserverNotifier")}static{a(this,"DevserverNotifier")}static{this.RECENT_PATH_CAP=32}static{this.BUILD_PATH_CAP=50}constructor(e,t=!1,s,d=Number(process.env.LENSMCP_GATEWAY_PID??0)>0,c=(0,notice_generation_1.generationFromEnv)()){this.testimony={schemaVersion:1,lastWatchRunAt:0,lastBuildAt:0,buildsSinceSpawn:0,degraded:!1,recentPaths:[]},this.managed=d,this.secure=t,this.base=`${t?"https":"http"}://localhost:${e}`,this.controlSock=s,this.generation=c}post(e,t){const s=JSON.stringify(t),d={"content-type":"application/json",...this.generation!==void 0?{[notice_generation_1.NOTICE_GENERATION_HEADER]:String(this.generation)}:{}},c=a((i,o,r)=>{if(i.statusCode!==409||this.generation===void 0){i.resume(),i.on("end",o);return}let h="";i.setEncoding("utf8"),i.on("data",l=>{h+=l}),i.on("end",()=>{let l;try{l=JSON.parse(h).generation}catch{}r(new notice_generation_1.NotThisGeneration(this.generation,l))})},"answered"),b=a(()=>new Promise((i,o)=>{const r=(this.secure?require("node:https"):require("node:http")).request(`${this.base}${e}`,{method:"POST",headers:d,rejectUnauthorized:!1},h=>c(h,i,o));r.on("error",o),r.end(s)}),"viaTcp"),v=this.controlSock;return!v||!fs.existsSync(v)?this.managed?Promise.reject(new Error("the devserver control socket is not up yet")):b():new Promise((i,o)=>{const r=require("node:http").request({socketPath:v,path:e,method:"POST",headers:d},h=>c(h,i,o));r.on("error",o),r.end(s)}).catch(i=>{if(this.managed||i instanceof notice_generation_1.NotThisGeneration)throw i;return b()})}snapshot(){return{...this.testimony,recentPaths:[...this.testimony.recentPaths]}}watchRun(e){if(this.testimony.lastWatchRunAt=Date.now(),e.length){const t=[...this.testimony.recentPaths,...e];this.testimony.recentPaths=t.slice(-DevserverNotifier.RECENT_PATH_CAP)}this.building??={startedAt:this.testimony.lastWatchRunAt,changed:new Set,more:0};for(const t of e)this.building.changed.has(t)||(this.building.changed.size>=DevserverNotifier.BUILD_PATH_CAP?this.building.more+=1:this.building.changed.add(t));this.testimony.building=this.buildAccount(),this.tellWatching()}buildAccount(){if(this.building)return{startedAt:this.building.startedAt,changedFiles:[...this.building.changed],...this.building.more>0?{moreChanged:this.building.more}:{}}}failed(){const e=this.buildAccount();this.building=void 0,delete this.testimony.building;const t=Date.now();this.testimony.lastFailedAt=t,this.post("/webpack/watching",{...this.testimony,...e?{failed:{...e,endedAt:t}}:{}}).catch(()=>{})}degrade(e){this.testimony.degraded=e,this.tellWatching()}tellWatching(){this.post("/webpack/watching",this.testimony).catch(()=>{})}async built(e=!0){this.testimony.lastBuildAt=Date.now(),this.testimony.buildsSinceSpawn+=1;const t=this.buildAccount();if(this.building=void 0,delete this.testimony.building,!e){this.tellWatching();return}try{await this.post("/webpack/reload",{watcher:this.testimony,...t?{build:{...t,endedAt:this.testimony.lastBuildAt}}:{}}),console.log("[DevServerReloadPlugin] notified devserver to reload")}catch(s){s instanceof notice_generation_1.NotThisGeneration?console.log(`[DevServerReloadPlugin] not this generation's devserver (${s.message}) \u2014 not reloaded; this generation's devserver loads the build when it starts`):console.log("[DevServerReloadPlugin] devserver not running yet")}}}exports.DevserverNotifier=DevserverNotifier;function devserverControlSock(n,e=process.env){const t=e.LENSMCP_SOCK_NS||e.LENSMCP_WS_KEY||"",s=t?path.join(os.tmpdir(),t,`${n}-devserver`):path.join(os.tmpdir(),`${n}-devserver`);return path.join(s,"parent.sock")}g(devserverControlSock,"devserverControlSock"),u(devserverControlSock,"devserverControlSock"),a(devserverControlSock,"devserverControlSock");
@@ -1 +1 @@
1
- "use strict";var o=Object.defineProperty;var a=(e,r)=>o(e,"name",{value:r,configurable:!0});var n=Object.defineProperty,t=a((e,r)=>n(e,"name",{value:r,configurable:!0}),"t");Object.defineProperty(exports,"__esModule",{value:!0}),exports.isOwnerOnlyTransport=isOwnerOnlyTransport,exports.gatewayManaged=gatewayManaged,exports.mayDriveThePool=mayDriveThePool;function isOwnerOnlyTransport(e){try{return typeof e.socket?.server?.address?.()=="string"}catch{return!1}}a(isOwnerOnlyTransport,"isOwnerOnlyTransport"),t(isOwnerOnlyTransport,"isOwnerOnlyTransport");function gatewayManaged(e=process.env){return Number(e.LENSMCP_GATEWAY_PID??0)>0}a(gatewayManaged,"gatewayManaged"),t(gatewayManaged,"gatewayManaged");function mayDriveThePool(e,r=gatewayManaged()){return!r||isOwnerOnlyTransport(e)}a(mayDriveThePool,"mayDriveThePool"),t(mayDriveThePool,"mayDriveThePool");
1
+ "use strict";var i=Object.defineProperty;var s=(e,r)=>i(e,"name",{value:r,configurable:!0});var o=Object.defineProperty,a=s((e,r)=>o(e,"name",{value:r,configurable:!0}),"a"),n=Object.defineProperty,t=a((e,r)=>n(e,"name",{value:r,configurable:!0}),"t");Object.defineProperty(exports,"__esModule",{value:!0}),exports.isOwnerOnlyTransport=isOwnerOnlyTransport,exports.gatewayManaged=gatewayManaged,exports.mayDriveThePool=mayDriveThePool;function isOwnerOnlyTransport(e){try{return typeof e.socket?.server?.address?.()=="string"}catch{return!1}}s(isOwnerOnlyTransport,"isOwnerOnlyTransport"),a(isOwnerOnlyTransport,"isOwnerOnlyTransport"),t(isOwnerOnlyTransport,"isOwnerOnlyTransport");function gatewayManaged(e=process.env){return Number(e.LENSMCP_GATEWAY_PID??0)>0}s(gatewayManaged,"gatewayManaged"),a(gatewayManaged,"gatewayManaged"),t(gatewayManaged,"gatewayManaged");function mayDriveThePool(e,r=gatewayManaged()){return!r||isOwnerOnlyTransport(e)}s(mayDriveThePool,"mayDriveThePool"),a(mayDriveThePool,"mayDriveThePool"),t(mayDriveThePool,"mayDriveThePool");
@@ -1 +1 @@
1
- "use strict";var A=Object.defineProperty;var l=(t,r)=>A(t,"name",{value:r,configurable:!0});var k=Object.defineProperty,y=l((t,r)=>k(t,"name",{value:r,configurable:!0}),"y");Object.defineProperty(exports,"__esModule",{value:!0}),exports.errorFrameReleaseEnabled=errorFrameReleaseEnabled,exports.readStacksReachableFrom=readStacksReachableFrom,exports.createErrorFrameReleaser=createErrorFrameReleaser;const node_util_1=require("node:util");function errorFrameReleaseEnabled(t=process.env){const r=(t.LENSMCP_SWAP_RELEASE_ERROR_FRAMES??"").trim().toLowerCase();return!(r==="0"||r==="false"||r==="no"||r==="off")}l(errorFrameReleaseEnabled,"errorFrameReleaseEnabled"),y(errorFrameReleaseEnabled,"errorFrameReleaseEnabled");const BUILTINS=new Set([Object.prototype,Function.prototype,Array.prototype,Error.prototype,TypeError.prototype,RangeError.prototype,SyntaxError.prototype,ReferenceError.prototype,EvalError.prototype,URIError.prototype,AggregateError.prototype,Promise.prototype,Map.prototype,Set.prototype,WeakMap.prototype,WeakSet.prototype,RegExp.prototype,Date.prototype,Symbol.prototype,String.prototype,Number.prototype,Boolean.prototype,BigInt.prototype,Object,Function,Array,Error,Promise,Map,Set,Symbol,globalThis,process]),MAX_KEYS_PER_OBJECT=512,MAX_ARRAY_ITEMS=64,walkable=y(t=>typeof t=="object"&&t!==null||typeof t=="function","walkable");function readStacksReachableFrom(t,r={},p=new WeakSet){const f=r.maxDepth??5,u=r.maxPerRoot??4e3,E=r.maxNodes??4e5;let a=0,o=0;for(const n of t){if(a>=E)break;if(!walkable(n))continue;let S=0;const c=[[n,0]];for(let b=0;b<c.length&&S<u&&a<E;b++){const[e,R]=c[b];if(!(p.has(e)||BUILTINS.has(e))){p.add(e),a+=1,S+=1;try{if(node_util_1.types.isNativeError(e)){e.stack,o+=1;continue}if(node_util_1.types.isProxy(e)||node_util_1.types.isModuleNamespaceObject(e)||node_util_1.types.isPromise(e)||ArrayBuffer.isView(e)||node_util_1.types.isAnyArrayBuffer(e)||node_util_1.types.isMap(e)||node_util_1.types.isSet(e)||node_util_1.types.isWeakMap(e)||node_util_1.types.isWeakSet(e)||R>=f)continue;const m=Object.getPrototypeOf(e);if(walkable(m)&&c.push([m,R+1]),Array.isArray(e)){const i=Math.min(e.length,MAX_ARRAY_ITEMS);for(let s=0;s<i;s++){const d=e[s];walkable(d)&&c.push([d,R+1])}continue}const h=Reflect.ownKeys(e),g=Math.min(h.length,MAX_KEYS_PER_OBJECT);for(let i=0;i<g;i++){const s=Reflect.getOwnPropertyDescriptor(e,h[i]);s&&"value"in s&&walkable(s.value)&&c.push([s.value,R+1])}}catch{}}}}return{visited:a,errors:o}}l(readStacksReachableFrom,"readStacksReachableFrom"),y(readStacksReachableFrom,"readStacksReachableFrom");function createErrorFrameReleaser(t,r={}){const p=r.global??globalThis,f=new Set,u=new Set(Reflect.ownKeys(p)),E=new WeakSet;return()=>{const a=[];for(const o of Object.keys(t))if(!f.has(o)&&(f.add(o),!r.skip?.(o)))try{a.push(t[o]?.exports)}catch{}for(const o of Reflect.ownKeys(p)){if(u.has(o))continue;u.add(o);const n=Reflect.getOwnPropertyDescriptor(p,o);n&&"value"in n&&a.push(n.value)}return readStacksReachableFrom(a,r,E)}}l(createErrorFrameReleaser,"createErrorFrameReleaser"),y(createErrorFrameReleaser,"createErrorFrameReleaser");
1
+ "use strict";var F=Object.defineProperty;var f=(t,r)=>F(t,"name",{value:r,configurable:!0});var A=Object.defineProperty,l=f((t,r)=>A(t,"name",{value:r,configurable:!0}),"l"),k=Object.defineProperty,y=l((t,r)=>k(t,"name",{value:r,configurable:!0}),"y");Object.defineProperty(exports,"__esModule",{value:!0}),exports.errorFrameReleaseEnabled=errorFrameReleaseEnabled,exports.readStacksReachableFrom=readStacksReachableFrom,exports.createErrorFrameReleaser=createErrorFrameReleaser;const node_util_1=require("node:util");function errorFrameReleaseEnabled(t=process.env){const r=(t.LENSMCP_SWAP_RELEASE_ERROR_FRAMES??"").trim().toLowerCase();return!(r==="0"||r==="false"||r==="no"||r==="off")}f(errorFrameReleaseEnabled,"errorFrameReleaseEnabled"),l(errorFrameReleaseEnabled,"errorFrameReleaseEnabled"),y(errorFrameReleaseEnabled,"errorFrameReleaseEnabled");const BUILTINS=new Set([Object.prototype,Function.prototype,Array.prototype,Error.prototype,TypeError.prototype,RangeError.prototype,SyntaxError.prototype,ReferenceError.prototype,EvalError.prototype,URIError.prototype,AggregateError.prototype,Promise.prototype,Map.prototype,Set.prototype,WeakMap.prototype,WeakSet.prototype,RegExp.prototype,Date.prototype,Symbol.prototype,String.prototype,Number.prototype,Boolean.prototype,BigInt.prototype,Object,Function,Array,Error,Promise,Map,Set,Symbol,globalThis,process]),MAX_KEYS_PER_OBJECT=512,MAX_ARRAY_ITEMS=64,walkable=y(t=>typeof t=="object"&&t!==null||typeof t=="function","walkable");function readStacksReachableFrom(t,r={},p=new WeakSet){const u=r.maxDepth??5,E=r.maxPerRoot??4e3,R=r.maxNodes??4e5;let a=0,o=0;for(const n of t){if(a>=R)break;if(!walkable(n))continue;let S=0;const c=[[n,0]];for(let m=0;m<c.length&&S<E&&a<R;m++){const[e,b]=c[m];if(!(p.has(e)||BUILTINS.has(e))){p.add(e),a+=1,S+=1;try{if(node_util_1.types.isNativeError(e)){e.stack,o+=1;continue}if(node_util_1.types.isProxy(e)||node_util_1.types.isModuleNamespaceObject(e)||node_util_1.types.isPromise(e)||ArrayBuffer.isView(e)||node_util_1.types.isAnyArrayBuffer(e)||node_util_1.types.isMap(e)||node_util_1.types.isSet(e)||node_util_1.types.isWeakMap(e)||node_util_1.types.isWeakSet(e)||b>=u)continue;const d=Object.getPrototypeOf(e);if(walkable(d)&&c.push([d,b+1]),Array.isArray(e)){const i=Math.min(e.length,MAX_ARRAY_ITEMS);for(let s=0;s<i;s++){const g=e[s];walkable(g)&&c.push([g,b+1])}continue}const h=Reflect.ownKeys(e),v=Math.min(h.length,MAX_KEYS_PER_OBJECT);for(let i=0;i<v;i++){const s=Reflect.getOwnPropertyDescriptor(e,h[i]);s&&"value"in s&&walkable(s.value)&&c.push([s.value,b+1])}}catch{}}}}return{visited:a,errors:o}}f(readStacksReachableFrom,"readStacksReachableFrom"),l(readStacksReachableFrom,"readStacksReachableFrom"),y(readStacksReachableFrom,"readStacksReachableFrom");function createErrorFrameReleaser(t,r={}){const p=r.global??globalThis,u=new Set,E=new Set(Reflect.ownKeys(p)),R=new WeakSet;return()=>{const a=[];for(const o of Object.keys(t))if(!u.has(o)&&(u.add(o),!r.skip?.(o)))try{a.push(t[o]?.exports)}catch{}for(const o of Reflect.ownKeys(p)){if(E.has(o))continue;E.add(o);const n=Reflect.getOwnPropertyDescriptor(p,o);n&&"value"in n&&a.push(n.value)}return readStacksReachableFrom(a,r,R)}}f(createErrorFrameReleaser,"createErrorFrameReleaser"),l(createErrorFrameReleaser,"createErrorFrameReleaser"),y(createErrorFrameReleaser,"createErrorFrameReleaser");
@@ -1 +1 @@
1
- "use strict";var x=Object.defineProperty;var d=(e,o)=>x(e,"name",{value:o,configurable:!0});var _=Object.defineProperty,p=d((e,o)=>_(e,"name",{value:o,configurable:!0}),"p");Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),create_webpack_prod_1=require("../../create-webpack-prod"),webpack=require("webpack");async function*buildExecutor(e,o){process.env.NODE_ENV="production";const m=o.projectsConfigurations.projects[o.projectName],n=o.root,a=path.join(n,m.root),c=e.outputPath?path.join(n,e.outputPath):path.join(n,"dist",m.root),y=e.entryFile||"./src/deployments/service/main.ts",P=e.tsConfigFile||"./tsconfig.app.json",k=path.resolve(a,y),h=path.resolve(a,P),u=(0,create_webpack_prod_1.createProdWebpackConfig)({appName:o.projectName,appRoot:a,outputDir:c,main:k,tsConfig:h,assets:e.assets||[],additionalEntryPoints:[...(e.workers||[]).map(r=>({entryName:r.name,entryPath:r.entryPath})),...e.additionalEntryPoints||[]],runtimeDependencies:e.runtimeDependencies||[],memoryLimit:e.memoryLimit||8192,generatePackageJson:e.generatePackageJson!==!1,buildLibsFromSource:e.buildLibsFromSource||!1,ormConfigPath:e.ormConfigPath,migrationsDir:e.migrationsDir||"./src/migrations",workspaceRoot:n,orgScopes:e.orgScopes||[],bundlePackages:e.bundlePackages||[],nodeExternalsConfig:e.nodeExternalsConfig,webpackConfigPath:e.webpackConfigPath}),j=Array.isArray(u)?u:[u];for(const r of j){const{watch:l,...t}=r,s=webpack(t),i=await new Promise((w,C)=>{s.run((b,S)=>{if(b)return C(b);s.close(g=>{g&&console.error("[build] webpack close error:",g)}),w(S)})});if(console.info(i.toString(r.stats||{colors:!0,chunks:!1})),i.hasErrors()){yield{success:!1};return}}const f=e.workers||[];if(f.length>0){const{minify:r}=require("terser");for(const l of f){const t=path.join(c,`${l.name}.js`);if(fs.existsSync(t)){const s=fs.readFileSync(t,"utf-8"),i=await r(s,{keep_classnames:!0,sourceMap:{content:"inline",url:"inline"}});i.code&&(fs.writeFileSync(t,i.code),console.info(`[build] minified ${l.name}.js`))}}}yield{success:!0,outfile:path.join(c,"main.js")}}d(buildExecutor,"buildExecutor"),p(buildExecutor,"buildExecutor"),exports.default=buildExecutor,module.exports=buildExecutor,module.exports.default=buildExecutor;
1
+ "use strict";var S=Object.defineProperty;var m=(e,o)=>S(e,"name",{value:o,configurable:!0});var x=Object.defineProperty,d=m((e,o)=>x(e,"name",{value:o,configurable:!0}),"d"),_=Object.defineProperty,p=d((e,o)=>_(e,"name",{value:o,configurable:!0}),"p");Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),fs=tslib_1.__importStar(require("node:fs")),path=tslib_1.__importStar(require("node:path")),create_webpack_prod_1=require("../../create-webpack-prod"),webpack=require("webpack");async function*buildExecutor(e,o){process.env.NODE_ENV="production";const f=o.projectsConfigurations.projects[o.projectName],n=o.root,a=path.join(n,f.root),c=e.outputPath?path.join(n,e.outputPath):path.join(n,"dist",f.root),P=e.entryFile||"./src/deployments/service/main.ts",k=e.tsConfigFile||"./tsconfig.app.json",j=path.resolve(a,P),h=path.resolve(a,k),u=(0,create_webpack_prod_1.createProdWebpackConfig)({appName:o.projectName,appRoot:a,outputDir:c,main:j,tsConfig:h,assets:e.assets||[],additionalEntryPoints:[...(e.workers||[]).map(r=>({entryName:r.name,entryPath:r.entryPath})),...e.additionalEntryPoints||[]],runtimeDependencies:e.runtimeDependencies||[],memoryLimit:e.memoryLimit||8192,generatePackageJson:e.generatePackageJson!==!1,buildLibsFromSource:e.buildLibsFromSource||!1,ormConfigPath:e.ormConfigPath,migrationsDir:e.migrationsDir||"./src/migrations",workspaceRoot:n,orgScopes:e.orgScopes||[],bundlePackages:e.bundlePackages||[],nodeExternalsConfig:e.nodeExternalsConfig,webpackConfigPath:e.webpackConfigPath}),w=Array.isArray(u)?u:[u];for(const r of w){const{watch:l,...t}=r,s=webpack(t),i=await new Promise((v,C)=>{s.run((g,E)=>{if(g)return C(g);s.close(y=>{y&&console.error("[build] webpack close error:",y)}),v(E)})});if(console.info(i.toString(r.stats||{colors:!0,chunks:!1})),i.hasErrors()){yield{success:!1};return}}const b=e.workers||[];if(b.length>0){const{minify:r}=require("terser");for(const l of b){const t=path.join(c,`${l.name}.js`);if(fs.existsSync(t)){const s=fs.readFileSync(t,"utf-8"),i=await r(s,{keep_classnames:!0,sourceMap:{content:"inline",url:"inline"}});i.code&&(fs.writeFileSync(t,i.code),console.info(`[build] minified ${l.name}.js`))}}}yield{success:!0,outfile:path.join(c,"main.js")}}m(buildExecutor,"buildExecutor"),d(buildExecutor,"buildExecutor"),p(buildExecutor,"buildExecutor"),exports.default=buildExecutor,module.exports=buildExecutor,module.exports.default=buildExecutor;
@@ -1 +1 @@
1
- "use strict";var l=Object.defineProperty;var d=(s,o)=>l(s,"name",{value:o,configurable:!0});var u=Object.defineProperty,r=d((s,o)=>u(s,"name",{value:o,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.requestCarriesBody=requestCarriesBody,exports.requestBodyArriving=requestBodyArriving,exports.createBodyStallGuard=createBodyStallGuard;const OFF={arm:r(()=>{},"arm"),armResponse:r(()=>{},"armResponse"),stop:r(()=>{},"stop")};function requestCarriesBody(s){const o=s.headers["content-length"];return String(s.headers["transfer-encoding"]??"").toLowerCase().includes("chunked")||typeof o=="string"&&Number(o)>0}d(requestCarriesBody,"requestCarriesBody"),r(requestCarriesBody,"requestCarriesBody");function requestBodyArriving(s){return requestCarriesBody(s)&&!s.complete&&!s.destroyed}d(requestBodyArriving,"requestBodyArriving"),r(requestBodyArriving,"requestBodyArriving");function createBodyStallGuard(s){if(!Number.isFinite(s)||s<=0)return OFF;const o=new Map,c=new Map,y=Math.max(500,Math.min(s,5e3)),a=setInterval(r(()=>{if(o.size===0&&c.size===0)return;const e=Date.now();for(const[t,n]of o){if(t.complete||t.destroyed||!t.socket||t.socket.destroyed){o.delete(t);continue}const i=t.socket.bytesRead;if(i!==n.bytes){n.bytes=i,n.since=e;continue}e-n.since>=s&&(o.delete(t),t.socket.destroy())}for(const[t,n]of c){const i=t.socket;if(t.writableEnded||t.destroyed||!i||i.destroyed){c.delete(t);continue}if(i.writableLength===0){n.bytes=i.bytesWritten,n.since=e;continue}if(i.bytesWritten!==n.bytes){n.bytes=i.bytesWritten,n.since=e;continue}e-n.since>=s&&(c.delete(t),i.destroy())}},"tick"),y);return a.unref?.(),{arm(e){if(!requestCarriesBody(e)||e.complete||!e.socket)return;o.set(e,{bytes:e.socket.bytesRead,since:Date.now()});const t=r(()=>{o.delete(e)},"done");e.on("end",t),e.on("close",t),e.on("aborted",t)},armResponse(e){const t=e.socket;if(!t||e.writableEnded||e.destroyed)return;c.set(e,{bytes:t.bytesWritten,since:Date.now()});const n=r(()=>{c.delete(e)},"done");e.on("finish",n),e.on("close",n)},stop(){clearInterval(a),o.clear(),c.clear()}}}d(createBodyStallGuard,"createBodyStallGuard"),r(createBodyStallGuard,"createBodyStallGuard");
1
+ "use strict";var b=Object.defineProperty;var a=(n,o)=>b(n,"name",{value:o,configurable:!0});var l=Object.defineProperty,d=a((n,o)=>l(n,"name",{value:o,configurable:!0}),"d"),u=Object.defineProperty,r=d((n,o)=>u(n,"name",{value:o,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.requestCarriesBody=requestCarriesBody,exports.requestBodyArriving=requestBodyArriving,exports.createBodyStallGuard=createBodyStallGuard;const OFF={arm:r(()=>{},"arm"),armResponse:r(()=>{},"armResponse"),stop:r(()=>{},"stop")};function requestCarriesBody(n){const o=n.headers["content-length"];return String(n.headers["transfer-encoding"]??"").toLowerCase().includes("chunked")||typeof o=="string"&&Number(o)>0}a(requestCarriesBody,"requestCarriesBody"),d(requestCarriesBody,"requestCarriesBody"),r(requestCarriesBody,"requestCarriesBody");function requestBodyArriving(n){return requestCarriesBody(n)&&!n.complete&&!n.destroyed}a(requestBodyArriving,"requestBodyArriving"),d(requestBodyArriving,"requestBodyArriving"),r(requestBodyArriving,"requestBodyArriving");function createBodyStallGuard(n){if(!Number.isFinite(n)||n<=0)return OFF;const o=new Map,c=new Map,f=Math.max(500,Math.min(n,5e3)),y=setInterval(r(()=>{if(o.size===0&&c.size===0)return;const e=Date.now();for(const[t,s]of o){if(t.complete||t.destroyed||!t.socket||t.socket.destroyed){o.delete(t);continue}const i=t.socket.bytesRead;if(i!==s.bytes){s.bytes=i,s.since=e;continue}e-s.since>=n&&(o.delete(t),t.socket.destroy())}for(const[t,s]of c){const i=t.socket;if(t.writableEnded||t.destroyed||!i||i.destroyed){c.delete(t);continue}if(i.writableLength===0){s.bytes=i.bytesWritten,s.since=e;continue}if(i.bytesWritten!==s.bytes){s.bytes=i.bytesWritten,s.since=e;continue}e-s.since>=n&&(c.delete(t),i.destroy())}},"tick"),f);return y.unref?.(),{arm(e){if(!requestCarriesBody(e)||e.complete||!e.socket)return;o.set(e,{bytes:e.socket.bytesRead,since:Date.now()});const t=r(()=>{o.delete(e)},"done");e.on("end",t),e.on("close",t),e.on("aborted",t)},armResponse(e){const t=e.socket;if(!t||e.writableEnded||e.destroyed)return;c.set(e,{bytes:t.bytesWritten,since:Date.now()});const s=r(()=>{c.delete(e)},"done");e.on("finish",s),e.on("close",s)},stop(){clearInterval(y),o.clear(),c.clear()}}}a(createBodyStallGuard,"createBodyStallGuard"),d(createBodyStallGuard,"createBodyStallGuard"),r(createBodyStallGuard,"createBodyStallGuard");
@@ -1 +1 @@
1
- "use strict";var x=Object.defineProperty;var f=(e,t)=>x(e,"name",{value:t,configurable:!0});var u=Object.defineProperty,r=f((e,t)=>u(e,"name",{value:t,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.canonicalPath=exports.rememberRawTarget=exports.rawTargetOf=exports.RAW_TARGET=exports.canonicalize=exports.ENCODED_STRUCTURE=void 0,exports.ENCODED_STRUCTURE=/%2e|%2f|%5c|%00|\\/i;const NEEDS_NORMALIZE=/[%;#\\]|\/\/|(?:^|\/)\.{1,2}(?:\/|$)/,canonicalize=r(e=>{if(e.charCodeAt(0)!==47)return;const t=e.indexOf("?"),a=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t);if(a.indexOf("\0")!==-1)return;if(!NEEDS_NORMALIZE.test(a))return{path:a,policy:a,query:s};if(exports.ENCODED_STRUCTURE.test(a))return;const c=a.split("#")[0].split("/").map(n=>n.split(";")[0]),i=[],p=[];for(const n of c){let o;try{o=decodeURIComponent(n)}catch{return}if(o.indexOf("\0")!==-1)return;if(!(o===""||o===".")){if(o==="..")return;i.push(n),p.push(o)}}const l=c[c.length-1],T=i.length>0&&(l===""||l===".")?"/":"";return{path:"/"+i.join("/")+T,policy:"/"+p.join("/")+T,query:s}},"canonicalize");exports.canonicalize=canonicalize,exports.RAW_TARGET=Symbol.for("lensmcp.gateway.rawTarget");const rawTargetOf=r(e=>e[exports.RAW_TARGET],"rawTargetOf");exports.rawTargetOf=rawTargetOf;const rememberRawTarget=r((e,t)=>{e[exports.RAW_TARGET]=t},"rememberRawTarget");exports.rememberRawTarget=rememberRawTarget;const canonicalPath=r(e=>(0,exports.canonicalize)(e)?.policy,"canonicalPath");exports.canonicalPath=canonicalPath;
1
+ "use strict";var E=Object.defineProperty;var R=(e,t)=>E(e,"name",{value:t,configurable:!0});var x=Object.defineProperty,f=R((e,t)=>x(e,"name",{value:t,configurable:!0}),"f"),u=Object.defineProperty,r=f((e,t)=>u(e,"name",{value:t,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.canonicalPath=exports.rememberRawTarget=exports.rawTargetOf=exports.RAW_TARGET=exports.canonicalize=exports.ENCODED_STRUCTURE=void 0,exports.ENCODED_STRUCTURE=/%2e|%2f|%5c|%00|\\/i;const NEEDS_NORMALIZE=/[%;#\\]|\/\/|(?:^|\/)\.{1,2}(?:\/|$)/,canonicalize=r(e=>{if(e.charCodeAt(0)!==47)return;const t=e.indexOf("?"),a=t===-1?e:e.slice(0,t),s=t===-1?"":e.slice(t);if(a.indexOf("\0")!==-1)return;if(!NEEDS_NORMALIZE.test(a))return{path:a,policy:a,query:s};if(exports.ENCODED_STRUCTURE.test(a))return;const c=a.split("#")[0].split("/").map(n=>n.split(";")[0]),i=[],p=[];for(const n of c){let o;try{o=decodeURIComponent(n)}catch{return}if(o.indexOf("\0")!==-1)return;if(!(o===""||o===".")){if(o==="..")return;i.push(n),p.push(o)}}const l=c[c.length-1],T=i.length>0&&(l===""||l===".")?"/":"";return{path:"/"+i.join("/")+T,policy:"/"+p.join("/")+T,query:s}},"canonicalize");exports.canonicalize=canonicalize,exports.RAW_TARGET=Symbol.for("lensmcp.gateway.rawTarget");const rawTargetOf=r(e=>e[exports.RAW_TARGET],"rawTargetOf");exports.rawTargetOf=rawTargetOf;const rememberRawTarget=r((e,t)=>{e[exports.RAW_TARGET]=t},"rememberRawTarget");exports.rememberRawTarget=rememberRawTarget;const canonicalPath=r(e=>(0,exports.canonicalize)(e)?.policy,"canonicalPath");exports.canonicalPath=canonicalPath;
@@ -1 +1 @@
1
- "use strict";var u=Object.defineProperty;var f=(e,r)=>u(e,"name",{value:r,configurable:!0});var a=Object.defineProperty,o=f((e,r)=>a(e,"name",{value:r,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0}),exports.stripPort=exports.normalizePeer=void 0,exports.createClientIpResolver=createClientIpResolver,exports.clientIpOptionsFromEnv=clientIpOptionsFromEnv;const manifest_1=require("./manifest"),first=o(e=>{const r=Array.isArray(e)?e[0]:e;return typeof r=="string"&&r.length>0?r:void 0},"first"),normalizePeer=o(e=>e.startsWith("::ffff:")&&e.indexOf(":",7)===-1?e.slice(7):e,"normalizePeer");exports.normalizePeer=normalizePeer;const stripPort=o(e=>{if(e.startsWith("[")){const p=e.indexOf("]");return p===-1?e:e.slice(1,p)}const r=e.indexOf(":");return r!==-1&&e.indexOf(":",r+1)===-1?e.slice(0,r):e},"stripPort");exports.stripPort=stripPort;function createClientIpResolver(e={}){const r=e.clientIpHeader?.toLowerCase(),p=e.clientIpTrustedProxies??[],l=Math.max(0,Math.floor(e.trustProxyHops??0)),c=o(t=>{if(!t)return!1;const s=t.startsWith("::ffff:")?t.slice(7):t;return p.length===0?s==="127.0.0.1"||t==="::1":p.some(i=>(0,manifest_1.matchCidr)(s,i))},"peerTrusted"),d=o(t=>String(t.headers["x-forwarded-for"]??"").split(",").map(s=>s.trim()).filter(Boolean),"forwardedChain");return{clientIpOf:o((t,s)=>{if(r&&c(t.socket?.remoteAddress??void 0)){const i=first(t.headers[r]);if(i){const n=(0,exports.stripPort)(i.split(",")[0].trim());if(n)return n}}if(l>0){const i=d(t),n=i.length-l;if(n>=0&&i[n])return(0,exports.stripPort)(i[n])}return(0,exports.normalizePeer)(s)},"clientIpOf"),forwardedFor:o((t,s)=>{const i=(0,exports.normalizePeer)(s);if(l>0||r&&c(s)){const n=d(t);return n.length?`${n.join(", ")}, ${i}`:i}return i},"forwardedFor"),peerTrusted:c,trustProxyHops:l}}f(createClientIpResolver,"createClientIpResolver"),o(createClientIpResolver,"createClientIpResolver");function clientIpOptionsFromEnv(e=process.env){const r=Number(e.LENSMCP_TRUST_PROXY),p=String(e.LENSMCP_CLIENT_IP_TRUSTED_PROXIES??"").split(",").map(l=>l.trim()).filter(Boolean);return{...Number.isFinite(r)&&r>0?{trustProxyHops:Math.floor(r)}:{},...e.LENSMCP_CLIENT_IP_HEADER?{clientIpHeader:e.LENSMCP_CLIENT_IP_HEADER}:{},...p.length?{clientIpTrustedProxies:p}:{}}}f(clientIpOptionsFromEnv,"clientIpOptionsFromEnv"),o(clientIpOptionsFromEnv,"clientIpOptionsFromEnv");
1
+ "use strict";var m=Object.defineProperty;var c=(r,e)=>m(r,"name",{value:e,configurable:!0});var u=Object.defineProperty,f=c((r,e)=>u(r,"name",{value:e,configurable:!0}),"f"),a=Object.defineProperty,o=f((r,e)=>a(r,"name",{value:e,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0}),exports.stripPort=exports.normalizePeer=void 0,exports.createClientIpResolver=createClientIpResolver,exports.clientIpOptionsFromEnv=clientIpOptionsFromEnv;const manifest_1=require("./manifest"),first=o(r=>{const e=Array.isArray(r)?r[0]:r;return typeof e=="string"&&e.length>0?e:void 0},"first"),normalizePeer=o(r=>r.startsWith("::ffff:")&&r.indexOf(":",7)===-1?r.slice(7):r,"normalizePeer");exports.normalizePeer=normalizePeer;const stripPort=o(r=>{if(r.startsWith("[")){const p=r.indexOf("]");return p===-1?r:r.slice(1,p)}const e=r.indexOf(":");return e!==-1&&r.indexOf(":",e+1)===-1?r.slice(0,e):r},"stripPort");exports.stripPort=stripPort;function createClientIpResolver(r={}){const e=r.clientIpHeader?.toLowerCase(),p=r.clientIpTrustedProxies??[],l=Math.max(0,Math.floor(r.trustProxyHops??0)),d=o(t=>{if(!t)return!1;const n=t.startsWith("::ffff:")?t.slice(7):t;return p.length===0?n==="127.0.0.1"||t==="::1":p.some(i=>(0,manifest_1.matchCidr)(n,i))},"peerTrusted"),P=o(t=>String(t.headers["x-forwarded-for"]??"").split(",").map(n=>n.trim()).filter(Boolean),"forwardedChain");return{clientIpOf:o((t,n)=>{if(e&&d(t.socket?.remoteAddress??void 0)){const i=first(t.headers[e]);if(i){const s=(0,exports.stripPort)(i.split(",")[0].trim());if(s)return s}}if(l>0){const i=P(t),s=i.length-l;if(s>=0&&i[s])return(0,exports.stripPort)(i[s])}return(0,exports.normalizePeer)(n)},"clientIpOf"),forwardedFor:o((t,n)=>{const i=(0,exports.normalizePeer)(n);if(l>0||e&&d(n)){const s=P(t);return s.length?`${s.join(", ")}, ${i}`:i}return i},"forwardedFor"),peerTrusted:d,trustProxyHops:l}}c(createClientIpResolver,"createClientIpResolver"),f(createClientIpResolver,"createClientIpResolver"),o(createClientIpResolver,"createClientIpResolver");function clientIpOptionsFromEnv(r=process.env){const e=Number(r.LENSMCP_TRUST_PROXY),p=String(r.LENSMCP_CLIENT_IP_TRUSTED_PROXIES??"").split(",").map(l=>l.trim()).filter(Boolean);return{...Number.isFinite(e)&&e>0?{trustProxyHops:Math.floor(e)}:{},...r.LENSMCP_CLIENT_IP_HEADER?{clientIpHeader:r.LENSMCP_CLIENT_IP_HEADER}:{},...p.length?{clientIpTrustedProxies:p}:{}}}c(clientIpOptionsFromEnv,"clientIpOptionsFromEnv"),f(clientIpOptionsFromEnv,"clientIpOptionsFromEnv"),o(clientIpOptionsFromEnv,"clientIpOptionsFromEnv");
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var n=(e,t)=>d(e,"name",{value:t,configurable:!0});var s=Object.defineProperty,r=n((e,t)=>s(e,"name",{value:t,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.GATEWAY_ERROR_CONTENT_TYPE=exports.GATEWAY_ERROR_KEY=void 0,exports.ensureRequestId=ensureRequestId,exports.gatewayErrorBody=gatewayErrorBody,exports.GATEWAY_ERROR_KEY={bad_request:"gateway.badRequest",unauthorized:"gateway.unauthorized",forbidden:"gateway.forbidden",not_found:"gateway.notFound",rate_limited:"gateway.rateLimited",starting:"gateway.starting",unavailable:"gateway.unavailable",internal:"gateway.internal"};const headerValue=r(e=>typeof e=="string"&&e!==""?e:Array.isArray(e)?e[0]:void 0,"headerValue"),mintId=r(()=>Date.now().toString(36)+Math.random().toString(36).slice(2,12),"mintId");function ensureRequestId(e){const t=headerValue(e.headers["x-request-id"]);if(t)return t;const a=mintId();return e.headers["x-request-id"]=a,a}n(ensureRequestId,"ensureRequestId"),r(ensureRequestId,"ensureRequestId");function gatewayErrorBody(e,t,a,o,i){return JSON.stringify({...i??{},key:exports.GATEWAY_ERROR_KEY[t],status:e,traceId:a,...o?{message:o}:{}})}n(gatewayErrorBody,"gatewayErrorBody"),r(gatewayErrorBody,"gatewayErrorBody"),exports.GATEWAY_ERROR_CONTENT_TYPE="application/json; charset=utf-8";
1
+ "use strict";var y=Object.defineProperty;var o=(e,t)=>y(e,"name",{value:t,configurable:!0});var d=Object.defineProperty,n=o((e,t)=>d(e,"name",{value:t,configurable:!0}),"n"),s=Object.defineProperty,r=n((e,t)=>s(e,"name",{value:t,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.GATEWAY_ERROR_CONTENT_TYPE=exports.GATEWAY_ERROR_KEY=void 0,exports.ensureRequestId=ensureRequestId,exports.gatewayErrorBody=gatewayErrorBody,exports.GATEWAY_ERROR_KEY={bad_request:"gateway.badRequest",unauthorized:"gateway.unauthorized",forbidden:"gateway.forbidden",not_found:"gateway.notFound",rate_limited:"gateway.rateLimited",starting:"gateway.starting",unavailable:"gateway.unavailable",internal:"gateway.internal"};const headerValue=r(e=>typeof e=="string"&&e!==""?e:Array.isArray(e)?e[0]:void 0,"headerValue"),mintId=r(()=>Date.now().toString(36)+Math.random().toString(36).slice(2,12),"mintId");function ensureRequestId(e){const t=headerValue(e.headers["x-request-id"]);if(t)return t;const a=mintId();return e.headers["x-request-id"]=a,a}o(ensureRequestId,"ensureRequestId"),n(ensureRequestId,"ensureRequestId"),r(ensureRequestId,"ensureRequestId");function gatewayErrorBody(e,t,a,i,u){return JSON.stringify({...u??{},key:exports.GATEWAY_ERROR_KEY[t],status:e,traceId:a,...i?{message:i}:{}})}o(gatewayErrorBody,"gatewayErrorBody"),n(gatewayErrorBody,"gatewayErrorBody"),r(gatewayErrorBody,"gatewayErrorBody"),exports.GATEWAY_ERROR_CONTENT_TYPE="application/json; charset=utf-8";
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var p=(t,r)=>d(t,"name",{value:r,configurable:!0});var l=Object.defineProperty,n=p((t,r)=>l(t,"name",{value:r,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=gatewayExecutor;const gateway_lib_1=require("./gateway.lib"),project_graph_store_1=require("./runtime/project-graph-store"),server_1=require("./runtime/server");async function gatewayExecutor(t,r){process.on("uncaughtException",e=>{if((e.syscall==="read"||e.syscall==="write")&&server_1.BENIGN_SOCKET_ERRNOS.has(e.code??"")){console.warn(`[gateway] survived a stray socket ${e.syscall} error (${e.code}) \u2014 one connection dropped, the daemon lives`);return}console.error(e),process.exit(1)});let i;try{const e=(0,project_graph_store_1.createProjectGraphStore)(r.root,()=>(0,project_graph_store_1.computeProjectGraphInProcess)(r.root)),o=(await e.refresh())?.projectGraph,s=o?Object.fromEntries(Object.entries(o.dependencies).map(([c,a])=>[c,a.map(u=>u.target)])):void 0;i=await(0,gateway_lib_1.startGateway)(t,{...r,...s?{projectDependencies:s}:{},projectGraphStore:e})}catch(e){return console.error(e.message),{success:!1}}return new Promise(e=>{let o=!1;const s=n(c=>{if(o)return;o=!0;let a=!0;try{process.kill(process.ppid,0)}catch{a=!1}console.log(`[gateway] received ${c} (pid ${process.pid}, parent ${process.ppid} ${a?"alive":"gone \u2014 orphaned"}) \u2014 shutting down`),i.stop().then(()=>e({success:!0}))},"stop");process.on("SIGINT",()=>s("SIGINT")),process.on("SIGTERM",()=>s("SIGTERM"))})}p(gatewayExecutor,"gatewayExecutor"),n(gatewayExecutor,"gatewayExecutor"),module.exports=gatewayExecutor,module.exports.default=gatewayExecutor,module.exports.startGateway=gateway_lib_1.startGateway;
1
+ "use strict";var g=Object.defineProperty;var i=(t,r)=>g(t,"name",{value:r,configurable:!0});var d=Object.defineProperty,p=i((t,r)=>d(t,"name",{value:r,configurable:!0}),"p"),l=Object.defineProperty,n=p((t,r)=>l(t,"name",{value:r,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=gatewayExecutor;const gateway_lib_1=require("./gateway.lib"),project_graph_store_1=require("./runtime/project-graph-store"),server_1=require("./runtime/server");async function gatewayExecutor(t,r){process.on("uncaughtException",e=>{if((e.syscall==="read"||e.syscall==="write")&&server_1.BENIGN_SOCKET_ERRNOS.has(e.code??"")){console.warn(`[gateway] survived a stray socket ${e.syscall} error (${e.code}) \u2014 one connection dropped, the daemon lives`);return}console.error(e),process.exit(1)});let u;try{const e=(0,project_graph_store_1.createProjectGraphStore)(r.root,()=>(0,project_graph_store_1.computeProjectGraphInProcess)(r.root)),o=(await e.refresh())?.projectGraph,s=o?Object.fromEntries(Object.entries(o.dependencies).map(([c,a])=>[c,a.map(y=>y.target)])):void 0;u=await(0,gateway_lib_1.startGateway)(t,{...r,...s?{projectDependencies:s}:{},projectGraphStore:e})}catch(e){return console.error(e.message),{success:!1}}return new Promise(e=>{let o=!1;const s=n(c=>{if(o)return;o=!0;let a=!0;try{process.kill(process.ppid,0)}catch{a=!1}console.log(`[gateway] received ${c} (pid ${process.pid}, parent ${process.ppid} ${a?"alive":"gone \u2014 orphaned"}) \u2014 shutting down`),u.stop().then(()=>e({success:!0}))},"stop");process.on("SIGINT",()=>s("SIGINT")),process.on("SIGTERM",()=>s("SIGTERM"))})}i(gatewayExecutor,"gatewayExecutor"),p(gatewayExecutor,"gatewayExecutor"),n(gatewayExecutor,"gatewayExecutor"),module.exports=gatewayExecutor,module.exports.default=gatewayExecutor,module.exports.startGateway=gateway_lib_1.startGateway;
@@ -1 +1 @@
1
- "use strict";var s=Object.defineProperty;var n=(t,r)=>s(t,"name",{value:r,configurable:!0});var o=Object.defineProperty,e=n((t,r)=>o(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.projectSourceRoots=exports.discoverRoutes=exports.pickSock=exports.readLensScope=exports.deriveMcpHttpPort=exports.baseDomainOf=exports.stampIdentity=exports.verifyDevJwt=exports.startGateway=exports.hostMatches=void 0;var manifest_1=require("./manifest");Object.defineProperty(exports,"hostMatches",{enumerable:!0,get:e(function(){return manifest_1.hostMatches},"get")});var server_1=require("./runtime/server");Object.defineProperty(exports,"startGateway",{enumerable:!0,get:e(function(){return server_1.startGateway},"get")});var dev_auth_1=require("./runtime/dev-auth");Object.defineProperty(exports,"verifyDevJwt",{enumerable:!0,get:e(function(){return dev_auth_1.verifyDevJwt},"get")}),Object.defineProperty(exports,"stampIdentity",{enumerable:!0,get:e(function(){return dev_auth_1.stampIdentity},"get")});var scope_1=require("./runtime/scope");Object.defineProperty(exports,"baseDomainOf",{enumerable:!0,get:e(function(){return scope_1.baseDomainOf},"get")}),Object.defineProperty(exports,"deriveMcpHttpPort",{enumerable:!0,get:e(function(){return scope_1.deriveMcpHttpPort},"get")}),Object.defineProperty(exports,"readLensScope",{enumerable:!0,get:e(function(){return scope_1.readLensScope},"get")});var discovery_1=require("./runtime/discovery");Object.defineProperty(exports,"pickSock",{enumerable:!0,get:e(function(){return discovery_1.pickSock},"get")}),Object.defineProperty(exports,"discoverRoutes",{enumerable:!0,get:e(function(){return discovery_1.discoverRoutes},"get")}),Object.defineProperty(exports,"projectSourceRoots",{enumerable:!0,get:e(function(){return discovery_1.projectSourceRoots},"get")});
1
+ "use strict";var c=Object.defineProperty;var i=(t,r)=>c(t,"name",{value:r,configurable:!0});var s=Object.defineProperty,n=i((t,r)=>s(t,"name",{value:r,configurable:!0}),"n"),o=Object.defineProperty,e=n((t,r)=>o(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.projectSourceRoots=exports.discoverRoutes=exports.pickSock=exports.readLensScope=exports.deriveMcpHttpPort=exports.baseDomainOf=exports.stampIdentity=exports.verifyDevJwt=exports.startGateway=exports.hostMatches=void 0;var manifest_1=require("./manifest");Object.defineProperty(exports,"hostMatches",{enumerable:!0,get:e(function(){return manifest_1.hostMatches},"get")});var server_1=require("./runtime/server");Object.defineProperty(exports,"startGateway",{enumerable:!0,get:e(function(){return server_1.startGateway},"get")});var dev_auth_1=require("./runtime/dev-auth");Object.defineProperty(exports,"verifyDevJwt",{enumerable:!0,get:e(function(){return dev_auth_1.verifyDevJwt},"get")}),Object.defineProperty(exports,"stampIdentity",{enumerable:!0,get:e(function(){return dev_auth_1.stampIdentity},"get")});var scope_1=require("./runtime/scope");Object.defineProperty(exports,"baseDomainOf",{enumerable:!0,get:e(function(){return scope_1.baseDomainOf},"get")}),Object.defineProperty(exports,"deriveMcpHttpPort",{enumerable:!0,get:e(function(){return scope_1.deriveMcpHttpPort},"get")}),Object.defineProperty(exports,"readLensScope",{enumerable:!0,get:e(function(){return scope_1.readLensScope},"get")});var discovery_1=require("./runtime/discovery");Object.defineProperty(exports,"pickSock",{enumerable:!0,get:e(function(){return discovery_1.pickSock},"get")}),Object.defineProperty(exports,"discoverRoutes",{enumerable:!0,get:e(function(){return discovery_1.discoverRoutes},"get")}),Object.defineProperty(exports,"projectSourceRoots",{enumerable:!0,get:e(function(){return discovery_1.projectSourceRoots},"get")});
@@ -1 +1 @@
1
- "use strict";var g=Object.defineProperty;var c=(a,h)=>g(a,"name",{value:h,configurable:!0});var C=Object.defineProperty,n=c((a,h)=>C(a,"name",{value:h,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHealthChecker=createHealthChecker;function createHealthChecker(a={}){const h=a.path??"/healthz",f=a.intervalMs??5e3,y=a.timeoutMs??2e3,p=Math.max(1,a.unhealthyThreshold??2),u=Math.max(1,a.healthyThreshold??1),d=a.fetchImpl??globalThis.fetch,l=new Map;let r;const k=n(t=>t.replace(/\/+$/,"")+(h.startsWith("/")?h:"/"+h),"probeUrl"),m=n(async t=>{const e=l.get(t);if(!e)return;let s=!1;const i=new AbortController,b=setTimeout(()=>i.abort(),y);try{s=(await d(k(t),{method:"GET",signal:i.signal,redirect:"manual"})).status<500}catch{}finally{clearTimeout(b)}e.lastCheckedAt=Date.now(),s?(e.oks+=1,e.fails=0,!e.healthy&&e.oks>=u&&(e.healthy=!0,a.onChange?.(t,!0))):(e.fails+=1,e.oks=0,e.healthy&&e.fails>=p&&(e.healthy=!1,a.onChange?.(t,!1)))},"probe"),o=n(()=>Promise.allSettled([...l.keys()].map(m)).then(()=>{}),"probeOnce");return{track(t){const e=new Set(t);for(const s of t)l.has(s)||l.set(s,{healthy:!0,fails:0,oks:0,lastCheckedAt:null});for(const s of[...l.keys()])e.has(s)||l.delete(s)},isHealthy:n(t=>l.get(t)?.healthy??!0,"isHealthy"),snapshot:n(()=>[...l.entries()].map(([t,e])=>({url:t,healthy:e.healthy,fails:e.fails,lastCheckedAt:e.lastCheckedAt})),"snapshot"),probeOnce:o,start(){r||(r=setInterval(()=>{o()},f),r.unref?.(),o())},stop(){r&&clearInterval(r),r=void 0}}}c(createHealthChecker,"createHealthChecker"),n(createHealthChecker,"createHealthChecker");
1
+ "use strict";var H=Object.defineProperty;var i=(t,l)=>H(t,"name",{value:l,configurable:!0});var g=Object.defineProperty,c=i((t,l)=>g(t,"name",{value:l,configurable:!0}),"c"),C=Object.defineProperty,n=c((t,l)=>C(t,"name",{value:l,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHealthChecker=createHealthChecker;function createHealthChecker(t={}){const l=t.path??"/healthz",y=t.intervalMs??5e3,u=t.timeoutMs??2e3,p=Math.max(1,t.unhealthyThreshold??2),d=Math.max(1,t.healthyThreshold??1),k=t.fetchImpl??globalThis.fetch,s=new Map;let r;const m=n(a=>a.replace(/\/+$/,"")+(l.startsWith("/")?l:"/"+l),"probeUrl"),b=n(async a=>{const e=s.get(a);if(!e)return;let h=!1;const f=new AbortController,v=setTimeout(()=>f.abort(),u);try{h=(await k(m(a),{method:"GET",signal:f.signal,redirect:"manual"})).status<500}catch{}finally{clearTimeout(v)}e.lastCheckedAt=Date.now(),h?(e.oks+=1,e.fails=0,!e.healthy&&e.oks>=d&&(e.healthy=!0,t.onChange?.(a,!0))):(e.fails+=1,e.oks=0,e.healthy&&e.fails>=p&&(e.healthy=!1,t.onChange?.(a,!1)))},"probe"),o=n(()=>Promise.allSettled([...s.keys()].map(b)).then(()=>{}),"probeOnce");return{track(a){const e=new Set(a);for(const h of a)s.has(h)||s.set(h,{healthy:!0,fails:0,oks:0,lastCheckedAt:null});for(const h of[...s.keys()])e.has(h)||s.delete(h)},isHealthy:n(a=>s.get(a)?.healthy??!0,"isHealthy"),snapshot:n(()=>[...s.entries()].map(([a,e])=>({url:a,healthy:e.healthy,fails:e.fails,lastCheckedAt:e.lastCheckedAt})),"snapshot"),probeOnce:o,start(){r||(r=setInterval(()=>{o()},y),r.unref?.(),o())},stop(){r&&clearInterval(r),r=void 0}}}i(createHealthChecker,"createHealthChecker"),c(createHealthChecker,"createHealthChecker"),n(createHealthChecker,"createHealthChecker");
@@ -9,8 +9,12 @@ export interface JwksVerifierOptions {
9
9
  algorithms?: string[];
10
10
  /** Periodic JWKS refresh interval (ms). Default 600000 (10 min). */
11
11
  cacheMaxAgeMs?: number;
12
- /** Min interval between on-miss (unknown-kid) refreshes (ms). Default 30000. */
12
+ /** Min interval between on-miss (unknown-kid) refreshes (ms), counted from the moment the last one SETTLED. Default 30000. */
13
13
  missRefreshMs?: number;
14
+ /** How long `awaitKey` waits on the shared miss refresh before giving up (ms). Default 2000. */
15
+ missWaitMs?: number;
16
+ /** Bound on one JWKS fetch, body included (ms). Default 10000. */
17
+ fetchTimeoutMs?: number;
14
18
  /** Clock skew tolerance for exp/nbf (seconds). Default 60. */
15
19
  clockToleranceSec?: number;
16
20
  /** Injectable fetch (tests). Defaults to global fetch. */
@@ -24,4 +28,35 @@ export interface JwtVerifier {
24
28
  /** Stop the periodic refresh timer. */
25
29
  stop(): void;
26
30
  }
27
- export declare function createJwksVerifier(opts: JwksVerifierOptions): JwtVerifier;
31
+ /** The retry schedule of {@link JwksVerifier.warm}. */
32
+ export interface JwksWarmOptions {
33
+ /** Attempts before giving up — the miss and periodic refreshes take over from there. Default 8. */
34
+ attempts?: number;
35
+ /** The first retry delay (ms); it doubles on every attempt up to `maxDelayMs`. Default 1000. */
36
+ baseDelayMs?: number;
37
+ /** The ceiling on one retry delay (ms). Default 30000. */
38
+ maxDelayMs?: number;
39
+ /** Told about every failed attempt; `retryInMs` is undefined on the last one. Not called once stopped. */
40
+ onError?: (err: Error, attempt: number, retryInMs: number | undefined) => void;
41
+ }
42
+ /**
43
+ * What the JWKS verifier offers beyond the {@link JwtVerifier} an edge verifies with. A separate interface so a
44
+ * hand-built `JwtVerifier` (a spec's, an HS256 stand-in) stays one.
45
+ */
46
+ export interface JwksVerifier extends JwtVerifier {
47
+ /**
48
+ * Resolve once `verify(token)` can be answered from the key cache: at once when the token's key is cached, or when
49
+ * `verify` would refuse the token before any key lookup (not a JWS, an `alg` we do not accept); on a `kid` miss,
50
+ * when the ONE refresh every missing request shares settles, and never later than `missWaitMs`. Inside the miss
51
+ * cooldown with nothing in flight it resolves at once — a stream of tokens with made-up `kid`s costs neither a
52
+ * fetch nor a wait. True when the token's key is now cached. Never rejects.
53
+ */
54
+ awaitKey(token: string): Promise<boolean>;
55
+ /**
56
+ * Load the key set in the background, retrying with a capped exponential backoff until it lands or the attempts run
57
+ * out. For a boot whose IdP may not be up yet: it never throws, the caller never waits on it, and `stop()` cancels
58
+ * it. Resolves true once the keys are loaded, false when it gave up or was stopped.
59
+ */
60
+ warm(opts?: JwksWarmOptions): Promise<boolean>;
61
+ }
62
+ export declare function createJwksVerifier(opts: JwksVerifierOptions): JwksVerifier;
@@ -1 +1 @@
1
- "use strict";var m=Object.defineProperty;var d=(e,c)=>m(e,"name",{value:c,configurable:!0});var j=Object.defineProperty,s=d((e,c)=>j(e,"name",{value:c,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createJwksVerifier=createJwksVerifier;const node_crypto_1=require("node:crypto"),jwt_claims_js_1=require("./jwt-claims.js"),ALG_TO_HASH={RS256:"sha256",RS384:"sha384",RS512:"sha512"},b64urlJsonSafe=s(e=>JSON.parse(Buffer.from(e,"base64url").toString("utf8")),"b64urlJsonSafe");function createJwksVerifier(e){const c=(e.algorithms??["RS256"]).filter(r=>r in ALG_TO_HASH),k=e.cacheMaxAgeMs??6e5,p=e.missRefreshMs??3e4,w=e.clockToleranceSec??60,g=e.fetchImpl??globalThis.fetch,h=e.audience===void 0?void 0:Array.isArray(e.audience)?e.audience:[e.audience];let n=new Map,o,y=0;const v=s(async()=>{const r=await g(e.jwksUrl,{headers:{accept:"application/json"}});if(!r.ok)throw new Error(`JWKS ${e.jwksUrl} \u2192 HTTP ${r.status}`);const i=await r.json(),t=new Map;for(const a of i.keys??[])if(!(a.kty!=="RSA"||!a.n||!a.e)&&!(a.use&&a.use!=="sig"))try{const l=(0,node_crypto_1.createPublicKey)({key:a,format:"jwk"});t.set(a.kid??"__single__",l)}catch{}t.size>0&&(n=t)},"load"),u=s(()=>(o||(o=v().finally(()=>{o=void 0})),o),"refresh"),S=s(r=>{r-y<p||(y=r,u().catch(()=>{}))},"refreshOnMiss"),_=setInterval(()=>{u().catch(()=>{})},k);return _.unref?.(),{verify:s(r=>{const i=r.split(".");if(i.length!==3)return;let t;try{t=b64urlJsonSafe(i[0])}catch{return}if(!t.alg||!c.includes(t.alg))return;const a=t.kid!==void 0?n.get(t.kid):n.get("__single__")??(n.size===1?[...n.values()][0]:void 0);if(!a){S(Date.now());return}let l;try{l=(0,node_crypto_1.verify)(ALG_TO_HASH[t.alg],Buffer.from(`${i[0]}.${i[1]}`),a,Buffer.from(i[2],"base64url"))}catch{return}if(!l)return;let f;try{f=b64urlJsonSafe(i[1])}catch{return}if((0,jwt_claims_js_1.checkStandardClaims)(f,{...e.issuer?{issuer:e.issuer}:{},...h?{audience:h}:{},clockToleranceS:w}))return f},"verify"),refresh:u,stop:s(()=>clearInterval(_),"stop")}}d(createJwksVerifier,"createJwksVerifier"),s(createJwksVerifier,"createJwksVerifier");
1
+ "use strict";var V=Object.defineProperty;var v=(e,o)=>V(e,"name",{value:o,configurable:!0});var K=Object.defineProperty,p=v((e,o)=>K(e,"name",{value:o,configurable:!0}),"p"),J=Object.defineProperty,a=p((e,o)=>J(e,"name",{value:o,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createJwksVerifier=createJwksVerifier;const node_crypto_1=require("node:crypto"),jwt_claims_js_1=require("./jwt-claims.js"),ALG_TO_HASH={RS256:"sha256",RS384:"sha384",RS512:"sha512"},b64urlJsonSafe=a(e=>JSON.parse(Buffer.from(e,"base64url").toString("utf8")),"b64urlJsonSafe");function createJwksVerifier(e){const o=(e.algorithms??["RS256"]).filter(r=>r in ALG_TO_HASH),T=e.cacheMaxAgeMs??6e5,j=e.missRefreshMs??3e4,P=e.missWaitMs??2e3,k=e.fetchTimeoutMs??1e4,A=e.clockToleranceSec??60,R=e.fetchImpl??globalThis.fetch,g=e.audience===void 0?void 0:Array.isArray(e.audience)?e.audience:[e.audience];let l=new Map,f,d,_=0,w=!1;const h=new Map,$=a(async r=>{const t=await R(e.jwksUrl,{headers:{accept:"application/json"},signal:r});if(!t.ok)throw new Error(`JWKS ${e.jwksUrl} \u2192 HTTP ${t.status}`);const n=await t.json(),s=new Map;for(const i of n.keys??[])if(!(i.kty!=="RSA"||!i.n||!i.e)&&!(i.use&&i.use!=="sig"))try{const u=(0,node_crypto_1.createPublicKey)({key:i,format:"jwk"});s.set(i.kid??"__single__",u)}catch{}s.size>0&&(l=s)},"load"),m=a(()=>{if(!f){const r=new AbortController;f=new Promise((t,n)=>{const s=setTimeout(()=>{r.abort(),n(new Error(`JWKS ${e.jwksUrl} \u2192 no answer in ${k} ms`))},k);s.unref?.(),$(r.signal).then(()=>{clearTimeout(s),t()},i=>{clearTimeout(s),n(i)})}).finally(()=>{f=void 0})}return f},"refresh"),S=a(()=>{if(d)return d;if(!(!f&&Date.now()<_))return d=m().catch(()=>{}).finally(()=>{d=void 0,_=Date.now()+j}),d},"refreshOnMiss"),b=setInterval(()=>{m().catch(()=>{})},T);b.unref?.();const M=a(r=>{const t=r.split(".");if(t.length!==3)return;let n;try{n=b64urlJsonSafe(t[0])}catch{return}if(!(!n.alg||!o.includes(n.alg)))return{parts:t,header:n}},"parse"),y=a(r=>r.kid!==void 0?l.get(r.kid):l.get("__single__")??(l.size===1?[...l.values()][0]:void 0),"keyFor"),x=a(r=>{const t=M(r);if(!t)return;const{parts:n,header:s}=t,i=y(s);if(!i){S();return}let u;try{u=(0,node_crypto_1.verify)(ALG_TO_HASH[s.alg],Buffer.from(`${n[0]}.${n[1]}`),i,Buffer.from(n[2],"base64url"))}catch{return}if(!u)return;let c;try{c=b64urlJsonSafe(n[1])}catch{return}if((0,jwt_claims_js_1.checkStandardClaims)(c,{...e.issuer?{issuer:e.issuer}:{},...g?{audience:g}:{},clockToleranceS:A}))return c},"verify"),O=a(async r=>{const t=M(r);if(!t)return!1;if(y(t.header))return!0;const n=S();if(!n)return!1;let s;return await Promise.race([n,new Promise(i=>{s=setTimeout(i,P),s.unref?.()})]),clearTimeout(s),y(t.header)!==void 0},"awaitKey"),D=a(r=>new Promise(t=>{const n=setTimeout(()=>{h.delete(n),t()},r);n.unref?.(),h.set(n,t)}),"sleep");return{verify:x,refresh:m,awaitKey:O,warm:a(async(r={})=>{const t=Math.max(1,r.attempts??8),n=r.baseDelayMs??1e3,s=r.maxDelayMs??3e4;for(let i=1;!w;i++)try{return await m(),!0}catch(u){if(w)return!1;const c=i<t?Math.min(s,n*2**(i-1)):void 0;try{r.onError?.(u,i,c)}catch{}if(c===void 0)return!1;await D(c)}return!1},"warm"),stop:a(()=>{w=!0,clearInterval(b);for(const[r,t]of h)clearTimeout(r),t();h.clear()},"stop")}}v(createJwksVerifier,"createJwksVerifier"),p(createJwksVerifier,"createJwksVerifier"),a(createJwksVerifier,"createJwksVerifier");
@@ -1 +1 @@
1
- "use strict";var o=Object.defineProperty;var t=(e,n)=>o(e,"name",{value:n,configurable:!0});var c=Object.defineProperty,u=t((e,n)=>c(e,"name",{value:n,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEFAULT_CLOCK_TOLERANCE_S=void 0,exports.checkStandardClaims=checkStandardClaims,exports.DEFAULT_CLOCK_TOLERANCE_S=60;function checkStandardClaims(e,n){const s=n.clockToleranceS??exports.DEFAULT_CLOCK_TOLERANCE_S,a=Date.now()/1e3;if(typeof e.exp=="number"&&a>e.exp+s||typeof e.nbf=="number"&&a<e.nbf-s||n.issuer&&e.iss!==n.issuer)return!1;if(n.audience&&n.audience.length>0){const r=e.aud;if(!(Array.isArray(r)?r:[r]).some(i=>typeof i=="string"&&n.audience.includes(i)))return!1}return!0}t(checkStandardClaims,"checkStandardClaims"),u(checkStandardClaims,"checkStandardClaims");
1
+ "use strict";var f=Object.defineProperty;var n=(e,r)=>f(e,"name",{value:r,configurable:!0});var o=Object.defineProperty,t=n((e,r)=>o(e,"name",{value:r,configurable:!0}),"t"),c=Object.defineProperty,u=t((e,r)=>c(e,"name",{value:r,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEFAULT_CLOCK_TOLERANCE_S=void 0,exports.checkStandardClaims=checkStandardClaims,exports.DEFAULT_CLOCK_TOLERANCE_S=60;function checkStandardClaims(e,r){const s=r.clockToleranceS??exports.DEFAULT_CLOCK_TOLERANCE_S,i=Date.now()/1e3;if(typeof e.exp=="number"&&i>e.exp+s||typeof e.nbf=="number"&&i<e.nbf-s||r.issuer&&e.iss!==r.issuer)return!1;if(r.audience&&r.audience.length>0){const a=e.aud;if(!(Array.isArray(a)?a:[a]).some(d=>typeof d=="string"&&r.audience.includes(d)))return!1}return!0}n(checkStandardClaims,"checkStandardClaims"),t(checkStandardClaims,"checkStandardClaims"),u(checkStandardClaims,"checkStandardClaims");
@@ -1,2 +1,2 @@
1
- "use strict";var ce=Object.defineProperty;var R=(e,r)=>ce(e,"name",{value:r,configurable:!0});var ie=Object.defineProperty,a=R((e,r)=>ie(e,"name",{value:r,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),node_fs_1=require("node:fs"),node_crypto_1=require("node:crypto"),node_path_1=require("node:path"),node_os_1=require("node:os"),node_cluster_1=tslib_1.__importDefault(require("node:cluster")),prod_gateway_lib_1=require("./prod-gateway.lib"),jwt_claims_1=require("./jwt-claims"),jwks_verify_1=require("./jwks-verify"),otel_tracing_1=require("./otel-tracing"),health_check_1=require("./health-check"),rate_limit_1=require("./rate-limit"),metrics_1=require("./metrics"),edge_1=require("./prod-runtime/edge"),registry_source_1=require("./registry-source"),providers_prod_1=require("./providers-prod"),prod_config_1=require("./prod-config");function readJson(e,r){if(!e)return r;try{return JSON.parse((0,node_fs_1.readFileSync)(e,"utf8"))}catch(n){return console.error(`[gateway] could not read ${e}:`,n.message),r}}R(readJson,"readJson"),a(readJson,"readJson");function watchJsonFile(e,r,n=1e3){let u=-1;const _=setInterval(a(()=>{if(!(0,node_fs_1.existsSync)(e))return;let p;try{p=(0,node_fs_1.statSync)(e).mtimeMs}catch{return}if(p===u)return;let w;try{w=JSON.parse((0,node_fs_1.readFileSync)(e,"utf8"))}catch(g){console.error("[gateway] endpoints reload:",g.message);return}u=p,r(w)},"tick"),n);return _.unref?.(),()=>clearInterval(_)}R(watchJsonFile,"watchJsonFile"),a(watchJsonFile,"watchJsonFile");async function main(){const e=process.env,r=(0,prod_config_1.parseGatewayEnv)(e),n=r.ports;process.on("uncaughtException",s=>console.error("[gateway] uncaughtException:",s)),process.on("unhandledRejection",s=>console.error("[gateway] unhandledRejection:",s));const u=[];let _=!1;const p=a(async s=>{if(!_){_=!0,console.log(`[gateway] ${s} \u2014 draining\u2026`);for(const t of u)try{await t()}catch{}process.exit(0)}},"shutdown");for(const s of["SIGTERM","SIGINT"])process.on(s,()=>{p(s)});const w=e.LENSMCP_GW_REDIS_URL;let g,m,$,b;const O={};let f;if(w){const s=require("ioredis"),t=new s(w);f=t;const o=(0,registry_source_1.createRegistryProviders)((0,registry_source_1.redisRegistrySource)(t,e.LENSMCP_GW_REDIS_PREFIX?{prefix:e.LENSMCP_GW_REDIS_PREFIX}:{}),{onError:a(i=>console.error("[gateway] registry:",i instanceof Error?i.message:i),"onError")});await o.start(),g=o.manifests,m=o.pods,b=o,console.log(`[gateway] registry: Redis-backed, live (${g.list().length} service(s))`)}else{const s=e.LENSMCP_GW_MANIFESTS;s?g=(0,providers_prod_1.fileManifestProvider)(s,{onError:a(o=>console.error("[gateway] manifest:",o instanceof Error?o.message:o),"onError")}):(console.warn("[gateway] no LENSMCP_GW_MANIFESTS / LENSMCP_GW_REDIS_URL \u2014 starting with an EMPTY route table (all requests 404 until manifests arrive)."),g=(0,providers_prod_1.staticManifestProvider)([]));const t=e.LENSMCP_GW_ENDPOINTS;if(t){const o=a(E=>console.error("[gateway] endpoints:",E instanceof Error?E.message:E),"onEpError"),i=readJson(t,{}),c=Object.keys(i).length,l=(0,providers_prod_1.isRolloutShape)(i);m=l?(0,providers_prod_1.rolloutPodProvider)(i,{onError:o}):(0,providers_prod_1.endpointsPodProvider)(i,{onError:o}),console.log(c?`[gateway] endpoints: ${l?"ROLLOUT (weighted cohorts)":"flat"} \u2014 ${c} service(s)`:`[gateway] endpoints: ${(0,node_fs_1.existsSync)(t)?"present but empty/unreadable":"file not there yet"} \u2014 watching ${t}`),$=watchJsonFile(t,E=>{try{m?.update?.(E),O.current?.refreshUpstreams(),console.log("[gateway] endpoints reloaded")}catch(ae){console.error("[gateway] endpoints reload failed:",ae.message)}})}}const Z=readJson(e.LENSMCP_GW_KEYS,{}),A=e.LENSMCP_GW_TLS_KEY&&e.LENSMCP_GW_TLS_CERT?{key:(0,node_fs_1.readFileSync)(e.LENSMCP_GW_TLS_KEY),cert:(0,node_fs_1.readFileSync)(e.LENSMCP_GW_TLS_CERT)}:void 0,ee=r.jwt.presenceOnly,D=r.jwt.jwksUrl,M=r.jwt.secret,S=D?(0,jwks_verify_1.createJwksVerifier)({jwksUrl:D,...r.jwt.issuer?{issuer:r.jwt.issuer}:{},...r.jwt.audience?{audience:r.jwt.audience}:{}}):void 0,re=a(s=>{if(!M)return;const t=s.split(".");if(t.length===3)try{if(JSON.parse(Buffer.from(t[0],"base64url").toString()).alg!=="HS256")return;const o=(0,node_crypto_1.createHmac)("sha256",M).update(t[0]+"."+t[1]).digest("base64url"),i=Buffer.from(t[2]),c=Buffer.from(o);if(i.length!==c.length||!(0,node_crypto_1.timingSafeEqual)(i,c))return;const l=JSON.parse(Buffer.from(t[1],"base64url").toString());return(0,jwt_claims_1.checkStandardClaims)(l,{...r.jwt.issuer?{issuer:r.jwt.issuer}:{},...r.jwt.audience?.length?{audience:r.jwt.audience}:{}})?l:void 0}catch{return}},"hs256"),F=a(s=>{const t=String(s.headers.authorization??"");if(!t.startsWith("Bearer "))return;const o=t.slice(7);return S?S.verify(o):re(o)},"bearerClaims"),j=S||M?F:void 0,te=a((s,t)=>{if(s==="jwt"){if(S||M){if(!F(t))throw new Error("invalid or missing token");return}if(!ee)throw new Error("jwt route but no verifier configured (set LENSMCP_GW_JWKS_URL or LENSMCP_GW_JWT_SECRET)");if(!String(t.headers.authorization??"").startsWith("Bearer "))throw new Error("missing bearer token")}},"authenticate"),{attributeHeaders:q,trustProxyHops:se,trustProxyIp:U,uidHeader:x,cookie:J}=r,y=e.LENSMCP_EVENT_FILE,H=y?(()=>{try{return require("@lensmcp/node-instrumentation")}catch{return}})():void 0,K=H?.createEventFloodGuard({burst:30,perSec:5});let B=!1;const I=y?s=>{try{const t=K?K.admit(String(s.fingerprint??"")):{ok:!0,suppressed:0};if(!t.ok)return;B||((0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(y),{recursive:!0}),B=!0);const o=s.raw,i=JSON.stringify(t.suppressed>0?{...s,raw:{...o,floodSuppressed:t.suppressed}}:s)+`
2
- `;H?.maybeRotateEventFile(y,i.length),(0,node_fs_1.appendFileSync)(y,i)}catch{}}:void 0;if(S)try{await S.refresh(),console.log("[gateway] JWKS loaded")}catch(s){console.error("[gateway] initial JWKS load failed (will retry in background):",s.message)}const{accessLog:oe,clientIpHeader:z,clientIpTrustedProxies:X,undici:d}=r;if(r.mtlsFromRedis&&f){const s=e.LENSMCP_GW_REDIS_PREFIX??"lensmcp:gw",[t,o,i]=await f.mget(`${s}:mtls:cert`,`${s}:mtls:key`,`${s}:mtls:ca`);t&&(d.cert=t),o&&(d.key=o),i&&(d.ca=i),(t||o)&&console.log("[gateway] mTLS materials loaded from Redis")}else e.LENSMCP_GW_MTLS_CERT&&(d.cert=(0,node_fs_1.readFileSync)(e.LENSMCP_GW_MTLS_CERT)),e.LENSMCP_GW_MTLS_KEY&&(d.key=(0,node_fs_1.readFileSync)(e.LENSMCP_GW_MTLS_KEY)),e.LENSMCP_GW_MTLS_CA&&(d.ca=(0,node_fs_1.readFileSync)(e.LENSMCP_GW_MTLS_CA));(0,prod_config_1.finalizeUpstreamTls)(d).autoEnabled&&console.log("[gateway] upstream TLS verification ENABLED (a CA is configured; set LENSMCP_GW_UPSTREAM_TLS_VERIFY=0 to opt out)"),(0,prod_config_1.finalizeUpstreamH2)(d,e)&&console.log(`[gateway] mTLS to upstreams ON over ${d.allowH2?"h2":"h1.1"} (server validation ${d.rejectUnauthorized?"enabled":"OFF"})`);const{upstreamRetries:C,server:Y}=r,T=(0,otel_tracing_1.setupTracing)({...e.OTEL_SERVICE_NAME?{serviceName:e.OTEL_SERVICE_NAME}:{},...e.LENSMCP_GW_OTEL_SAMPLE?{sampleRatio:Number(e.LENSMCP_GW_OTEL_SAMPLE)}:{}});T&&console.log(`[gateway] OTLP tracing on \u2192 ${(0,edge_1.safeUrl)(e.OTEL_EXPORTER_OTLP_ENDPOINT)}`);const{statusEnabled:P,statusToken:L}=r,V=(0,node_os_1.hostname)(),ne=r.statusTtlSec,Q=f,k=P&&Q?s=>{for(const t of s)Q.set(`status:${t.service}:${V}`,JSON.stringify({...t,instance:V,at:Date.now()}),"EX",ne).catch(()=>{})}:void 0;P&&!L&&console.warn("[gateway] LENSMCP_GW_STATUS=1 but no LENSMCP_GW_STATUS_TOKEN \u2014 /statusz stays DISABLED (404) until a token is set (fail-closed). The Redis status:* fan-out still runs."),P&&console.log(`[gateway] status on \u2014 /statusz${L?"":" (endpoint disabled: no token)"}${k?" + Redis status:* fan-out":""}`);const v=r.health?(0,health_check_1.createHealthChecker)(r.health):void 0;v&&console.log(`[gateway] active health-checking on (path ${r.health?.path??"/healthz"})`);let h,G;if(r.rateLimit){const{limit:s,windowMs:t,wantRedis:o,failClosed:i}=r.rateLimit;if(o){const c=r.rateLimit.dedicatedUrl;let l;if(c){const E=require("ioredis");G=new E(c),l=G}else f&&(l=f);l?(h=(0,rate_limit_1.createRedisRateLimiter)(l,{limit:s,windowMs:t,prefix:`${e.LENSMCP_GW_REDIS_PREFIX??"lensmcp:gw"}:rl:`,...r.rateLimit.timeoutMs!==void 0?{timeoutMs:r.rateLimit.timeoutMs}:{},...i?{failOpen:!1}:{},onFailure:a(E=>console.error(`[gateway] RATE LIMITER DEGRADED \u2014 Redis unusable (${E}). Requests are being ${i?"DENIED":"ALLOWED"} without a limit check. Check the ACL covers ${e.LENSMCP_GW_REDIS_PREFIX??"lensmcp:gw"}:rl:*`),"onFailure")}),console.log(`[gateway] rate limit on \u2014 ${s} req / ${t}ms GLOBAL (Redis: ${c?"dedicated":"shared registry"}, fail-${i?"closed":"open"}) per client IP`)):console.warn("[gateway] LENSMCP_GW_RATE_LIMIT_REDIS set but no Redis configured (set LENSMCP_GW_REDIS_URL or LENSMCP_GW_RATE_LIMIT_REDIS_URL) \u2014 falling back to PER-INSTANCE in-memory limiting.")}if(!h){const c=(0,prod_config_1.workerCount)(e),l=(0,prod_config_1.perWorkerLimit)(s,c);h=(0,rate_limit_1.createRateLimiter)({limit:l,windowMs:t}),console.log(`[gateway] rate limit on \u2014 ${s} req / ${t}ms per client IP (in-memory`+(c>1?`, ${l}/worker \xD7 ${c} workers`:", per-instance")+")")}}const W=r.metricsEnabled?(0,metrics_1.createProcessMetrics)():void 0;W&&console.log(`[gateway] process metrics on \u2014 /metricsz${L?" (token-gated)":" (DISABLED: needs LENSMCP_GW_STATUS_TOKEN)"}`);const N=await(0,prod_gateway_lib_1.startProdGateway)({...n.length?{ports:n}:{},manifests:g,...m?{pods:m}:{},serviceKeys:Z,authenticate:te,...A?{tls:A}:{},...I?{emit:I}:{},...j?{identify:j}:{},...q.length?{attributeHeaders:q}:{},...U?{trustProxyIp:U,trustProxyHops:se}:{},...J?{cookie:J}:{},...x?{uidHeader:x}:{},...oe?{accessLog:!0}:{},...z?{clientIpHeader:z}:{},...X.length?{clientIpTrustedProxies:X}:{},...T?{tracing:T}:{},...P?{statusEndpoint:!0}:{},...L?{statusToken:L}:{},...k?{onStatus:k}:{},...v?{healthChecker:v}:{},...h?{rateLimiter:h}:{},...W?{metrics:W}:{},...r.trafficFlushMs!==void 0?{trafficFlushMs:r.trafficFlushMs}:{},...C!==void 0&&Number.isFinite(C)?{upstreamRetries:C}:{},...Object.keys(d).length?{undici:d}:{},...Object.keys(Y).length?{server:Y}:{}});O.current=N,console.log(`[gateway] production gateway up on ${N.ports.join(", ")} (${N.routes().length} routes${I?", lens ON":""})`),u.push(()=>g.stop?.(),()=>$?.(),()=>b?.stop(),()=>G?.quit(),()=>S?.stop(),()=>N.stop(),()=>T?.shutdown())}R(main,"main"),a(main,"main");const WORKERS=(0,prod_config_1.workerCount)(process.env);if(WORKERS>1&&node_cluster_1.default.isPrimary){if(console.log(`[gateway] primary ${process.pid}: forking ${WORKERS} workers (one per core)\u2026`),process.env.LENSMCP_GW_RATE_LIMIT&&!(0,prod_config_1.redisLimiterConfigured)(process.env)){const n=process.env.LENSMCP_GW_RATE_LIMIT_REDIS==="1",u=Number(process.env.LENSMCP_GW_RATE_LIMIT),_=(0,prod_config_1.perWorkerLimit)(u,WORKERS);console.warn(`[gateway] WARNING: ${n?"LENSMCP_GW_RATE_LIMIT_REDIS=1 is set but no Redis URL is \u2014 each worker will fall back to":"using"} the in-memory rate limiter with ${WORKERS} workers. Each worker now enforces ${_} req/window so the total stays \u2248 ${u}; a single client's burst can still land unevenly across workers. Set ${n?"LENSMCP_GW_REDIS_URL (or LENSMCP_GW_RATE_LIMIT_REDIS_URL)":"LENSMCP_GW_RATE_LIMIT_REDIS=1 and a Redis URL"} for one shared global budget.`)}let e=!1;for(let n=0;n<WORKERS;n++)node_cluster_1.default.fork();node_cluster_1.default.on("exit",(n,u,_)=>{e||(console.warn(`[gateway] worker ${n.process.pid} exited (code=${u} sig=${_??""}) \u2014 respawning.`),node_cluster_1.default.fork())});const r=a(n=>{if(!e){e=!0,console.log(`[gateway] primary: ${n} \u2014 stopping ${Object.keys(node_cluster_1.default.workers??{}).length} workers\u2026`);for(const u of Object.values(node_cluster_1.default.workers??{}))try{u?.kill(n)}catch{}setTimeout(()=>process.exit(0),12e3).unref()}},"stopAll");process.on("SIGTERM",()=>r("SIGTERM")),process.on("SIGINT",()=>r("SIGINT"))}else main().catch(e=>{console.error("[gateway] FATAL: could not start \u2014",e instanceof Error?e.stack??e.message:e),process.exit(1)});
1
+ "use strict";var ue=Object.defineProperty;var M=(e,t)=>ue(e,"name",{value:t,configurable:!0});var ce=Object.defineProperty,R=M((e,t)=>ce(e,"name",{value:t,configurable:!0}),"R"),ie=Object.defineProperty,a=R((e,t)=>ie(e,"name",{value:t,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),node_fs_1=require("node:fs"),node_crypto_1=require("node:crypto"),node_path_1=require("node:path"),node_os_1=require("node:os"),node_cluster_1=tslib_1.__importDefault(require("node:cluster")),prod_gateway_lib_1=require("./prod-gateway.lib"),jwt_claims_1=require("./jwt-claims"),jwks_verify_1=require("./jwks-verify"),otel_tracing_1=require("./otel-tracing"),health_check_1=require("./health-check"),rate_limit_1=require("./rate-limit"),metrics_1=require("./metrics"),edge_1=require("./prod-runtime/edge"),registry_source_1=require("./registry-source"),providers_prod_1=require("./providers-prod"),prod_config_1=require("./prod-config");function readJson(e,t){if(!e)return t;try{return JSON.parse((0,node_fs_1.readFileSync)(e,"utf8"))}catch(n){return console.error(`[gateway] could not read ${e}:`,n.message),t}}M(readJson,"readJson"),R(readJson,"readJson"),a(readJson,"readJson");function watchJsonFile(e,t,n=1e3){let u=-1;const _=setInterval(a(()=>{if(!(0,node_fs_1.existsSync)(e))return;let p;try{p=(0,node_fs_1.statSync)(e).mtimeMs}catch{return}if(p===u)return;let w;try{w=JSON.parse((0,node_fs_1.readFileSync)(e,"utf8"))}catch(g){console.error("[gateway] endpoints reload:",g.message);return}u=p,t(w)},"tick"),n);return _.unref?.(),()=>clearInterval(_)}M(watchJsonFile,"watchJsonFile"),R(watchJsonFile,"watchJsonFile"),a(watchJsonFile,"watchJsonFile");async function main(){const e=process.env,t=(0,prod_config_1.parseGatewayEnv)(e),n=t.ports;process.on("uncaughtException",s=>console.error("[gateway] uncaughtException:",s)),process.on("unhandledRejection",s=>console.error("[gateway] unhandledRejection:",s));const u=[];let _=!1;const p=a(async s=>{if(!_){_=!0,console.log(`[gateway] ${s} \u2014 draining\u2026`);for(const r of u)try{await r()}catch{}process.exit(0)}},"shutdown");for(const s of["SIGTERM","SIGINT"])process.on(s,()=>{p(s)});const w=e.LENSMCP_GW_REDIS_URL;let g,m,$,O;const A={};let f;if(w){const s=require("ioredis"),r=new s(w);f=r;const o=(0,registry_source_1.createRegistryProviders)((0,registry_source_1.redisRegistrySource)(r,e.LENSMCP_GW_REDIS_PREFIX?{prefix:e.LENSMCP_GW_REDIS_PREFIX}:{}),{onError:a(i=>console.error("[gateway] registry:",i instanceof Error?i.message:i),"onError")});await o.start(),g=o.manifests,m=o.pods,O=o,console.log(`[gateway] registry: Redis-backed, live (${g.list().length} service(s))`)}else{const s=e.LENSMCP_GW_MANIFESTS;s?g=(0,providers_prod_1.fileManifestProvider)(s,{onError:a(o=>console.error("[gateway] manifest:",o instanceof Error?o.message:o),"onError")}):(console.warn("[gateway] no LENSMCP_GW_MANIFESTS / LENSMCP_GW_REDIS_URL \u2014 starting with an EMPTY route table (all requests 404 until manifests arrive)."),g=(0,providers_prod_1.staticManifestProvider)([]));const r=e.LENSMCP_GW_ENDPOINTS;if(r){const o=a(E=>console.error("[gateway] endpoints:",E instanceof Error?E.message:E),"onEpError"),i=readJson(r,{}),c=Object.keys(i).length,l=(0,providers_prod_1.isRolloutShape)(i);m=l?(0,providers_prod_1.rolloutPodProvider)(i,{onError:o}):(0,providers_prod_1.endpointsPodProvider)(i,{onError:o}),console.log(c?`[gateway] endpoints: ${l?"ROLLOUT (weighted cohorts)":"flat"} \u2014 ${c} service(s)`:`[gateway] endpoints: ${(0,node_fs_1.existsSync)(r)?"present but empty/unreadable":"file not there yet"} \u2014 watching ${r}`),$=watchJsonFile(r,E=>{try{m?.update?.(E),A.current?.refreshUpstreams(),console.log("[gateway] endpoints reloaded")}catch(le){console.error("[gateway] endpoints reload failed:",le.message)}})}}const ee=readJson(e.LENSMCP_GW_KEYS,{}),F=e.LENSMCP_GW_TLS_KEY&&e.LENSMCP_GW_TLS_CERT?{key:(0,node_fs_1.readFileSync)(e.LENSMCP_GW_TLS_KEY),cert:(0,node_fs_1.readFileSync)(e.LENSMCP_GW_TLS_CERT)}:void 0,te=t.jwt.presenceOnly,j=t.jwt.jwksUrl,T=t.jwt.secret,S=j?(0,jwks_verify_1.createJwksVerifier)({jwksUrl:j,...t.jwt.issuer?{issuer:t.jwt.issuer}:{},...t.jwt.audience?{audience:t.jwt.audience}:{}}):void 0,re=a(s=>{if(!T)return;const r=s.split(".");if(r.length===3)try{if(JSON.parse(Buffer.from(r[0],"base64url").toString()).alg!=="HS256")return;const o=(0,node_crypto_1.createHmac)("sha256",T).update(r[0]+"."+r[1]).digest("base64url"),i=Buffer.from(r[2]),c=Buffer.from(o);if(i.length!==c.length||!(0,node_crypto_1.timingSafeEqual)(i,c))return;const l=JSON.parse(Buffer.from(r[1],"base64url").toString());return(0,jwt_claims_1.checkStandardClaims)(l,{...t.jwt.issuer?{issuer:t.jwt.issuer}:{},...t.jwt.audience?.length?{audience:t.jwt.audience}:{}})?l:void 0}catch{return}},"hs256"),D=a(s=>{const r=String(s.headers.authorization??"");if(!r.startsWith("Bearer "))return;const o=r.slice(7);return S?S.verify(o):re(o)},"bearerClaims"),q=S||T?D:void 0,se=a((s,r)=>{if(s==="jwt"){if(S||T){if(!D(r))throw new Error("invalid or missing token");return}if(!te)throw new Error("jwt route but no verifier configured (set LENSMCP_GW_JWKS_URL or LENSMCP_GW_JWT_SECRET)");if(!String(r.headers.authorization??"").startsWith("Bearer "))throw new Error("missing bearer token")}},"authenticate"),{attributeHeaders:U,trustProxyHops:oe,trustProxyIp:x,uidHeader:J,cookie:H}=t,y=e.LENSMCP_EVENT_FILE,K=y?(()=>{try{return require("@lensmcp/node-instrumentation")}catch{return}})():void 0,B=K?.createEventFloodGuard({burst:30,perSec:5});let z=!1;const C=y?s=>{try{const r=B?B.admit(String(s.fingerprint??"")):{ok:!0,suppressed:0};if(!r.ok)return;z||((0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(y),{recursive:!0}),z=!0);const o=s.raw,i=JSON.stringify(r.suppressed>0?{...s,raw:{...o,floodSuppressed:r.suppressed}}:s)+`
2
+ `;K?.maybeRotateEventFile(y,i.length),(0,node_fs_1.appendFileSync)(y,i)}catch{}}:void 0;if(S)try{await S.refresh(),console.log("[gateway] JWKS loaded")}catch(s){console.error("[gateway] initial JWKS load failed (will retry in background):",s.message)}const{accessLog:ae,clientIpHeader:X,clientIpTrustedProxies:Y,undici:d}=t;if(t.mtlsFromRedis&&f){const s=e.LENSMCP_GW_REDIS_PREFIX??"lensmcp:gw",[r,o,i]=await f.mget(`${s}:mtls:cert`,`${s}:mtls:key`,`${s}:mtls:ca`);r&&(d.cert=r),o&&(d.key=o),i&&(d.ca=i),(r||o)&&console.log("[gateway] mTLS materials loaded from Redis")}else e.LENSMCP_GW_MTLS_CERT&&(d.cert=(0,node_fs_1.readFileSync)(e.LENSMCP_GW_MTLS_CERT)),e.LENSMCP_GW_MTLS_KEY&&(d.key=(0,node_fs_1.readFileSync)(e.LENSMCP_GW_MTLS_KEY)),e.LENSMCP_GW_MTLS_CA&&(d.ca=(0,node_fs_1.readFileSync)(e.LENSMCP_GW_MTLS_CA));(0,prod_config_1.finalizeUpstreamTls)(d).autoEnabled&&console.log("[gateway] upstream TLS verification ENABLED (a CA is configured; set LENSMCP_GW_UPSTREAM_TLS_VERIFY=0 to opt out)"),(0,prod_config_1.finalizeUpstreamH2)(d,e)&&console.log(`[gateway] mTLS to upstreams ON over ${d.allowH2?"h2":"h1.1"} (server validation ${d.rejectUnauthorized?"enabled":"OFF"})`);const{upstreamRetries:v,server:V}=t,P=(0,otel_tracing_1.setupTracing)({...e.OTEL_SERVICE_NAME?{serviceName:e.OTEL_SERVICE_NAME}:{},...e.LENSMCP_GW_OTEL_SAMPLE?{sampleRatio:Number(e.LENSMCP_GW_OTEL_SAMPLE)}:{}});P&&console.log(`[gateway] OTLP tracing on \u2192 ${(0,edge_1.safeUrl)(e.OTEL_EXPORTER_OTLP_ENDPOINT)}`);const{statusEnabled:N,statusToken:L}=t,Q=(0,node_os_1.hostname)(),ne=t.statusTtlSec,Z=f,k=N&&Z?s=>{for(const r of s)Z.set(`status:${r.service}:${Q}`,JSON.stringify({...r,instance:Q,at:Date.now()}),"EX",ne).catch(()=>{})}:void 0;N&&!L&&console.warn("[gateway] LENSMCP_GW_STATUS=1 but no LENSMCP_GW_STATUS_TOKEN \u2014 /statusz stays DISABLED (404) until a token is set (fail-closed). The Redis status:* fan-out still runs."),N&&console.log(`[gateway] status on \u2014 /statusz${L?"":" (endpoint disabled: no token)"}${k?" + Redis status:* fan-out":""}`);const G=t.health?(0,health_check_1.createHealthChecker)(t.health):void 0;G&&console.log(`[gateway] active health-checking on (path ${t.health?.path??"/healthz"})`);let h,W;if(t.rateLimit){const{limit:s,windowMs:r,wantRedis:o,failClosed:i}=t.rateLimit;if(o){const c=t.rateLimit.dedicatedUrl;let l;if(c){const E=require("ioredis");W=new E(c),l=W}else f&&(l=f);l?(h=(0,rate_limit_1.createRedisRateLimiter)(l,{limit:s,windowMs:r,prefix:`${e.LENSMCP_GW_REDIS_PREFIX??"lensmcp:gw"}:rl:`,...t.rateLimit.timeoutMs!==void 0?{timeoutMs:t.rateLimit.timeoutMs}:{},...i?{failOpen:!1}:{},onFailure:a(E=>console.error(`[gateway] RATE LIMITER DEGRADED \u2014 Redis unusable (${E}). Requests are being ${i?"DENIED":"ALLOWED"} without a limit check. Check the ACL covers ${e.LENSMCP_GW_REDIS_PREFIX??"lensmcp:gw"}:rl:*`),"onFailure")}),console.log(`[gateway] rate limit on \u2014 ${s} req / ${r}ms GLOBAL (Redis: ${c?"dedicated":"shared registry"}, fail-${i?"closed":"open"}) per client IP`)):console.warn("[gateway] LENSMCP_GW_RATE_LIMIT_REDIS set but no Redis configured (set LENSMCP_GW_REDIS_URL or LENSMCP_GW_RATE_LIMIT_REDIS_URL) \u2014 falling back to PER-INSTANCE in-memory limiting.")}if(!h){const c=(0,prod_config_1.workerCount)(e),l=(0,prod_config_1.perWorkerLimit)(s,c);h=(0,rate_limit_1.createRateLimiter)({limit:l,windowMs:r}),console.log(`[gateway] rate limit on \u2014 ${s} req / ${r}ms per client IP (in-memory`+(c>1?`, ${l}/worker \xD7 ${c} workers`:", per-instance")+")")}}const b=t.metricsEnabled?(0,metrics_1.createProcessMetrics)():void 0;b&&console.log(`[gateway] process metrics on \u2014 /metricsz${L?" (token-gated)":" (DISABLED: needs LENSMCP_GW_STATUS_TOKEN)"}`);const I=await(0,prod_gateway_lib_1.startProdGateway)({...n.length?{ports:n}:{},manifests:g,...m?{pods:m}:{},serviceKeys:ee,authenticate:se,...F?{tls:F}:{},...C?{emit:C}:{},...q?{identify:q}:{},...U.length?{attributeHeaders:U}:{},...x?{trustProxyIp:x,trustProxyHops:oe}:{},...H?{cookie:H}:{},...J?{uidHeader:J}:{},...ae?{accessLog:!0}:{},...X?{clientIpHeader:X}:{},...Y.length?{clientIpTrustedProxies:Y}:{},...P?{tracing:P}:{},...N?{statusEndpoint:!0}:{},...L?{statusToken:L}:{},...k?{onStatus:k}:{},...G?{healthChecker:G}:{},...h?{rateLimiter:h}:{},...b?{metrics:b}:{},...t.trafficFlushMs!==void 0?{trafficFlushMs:t.trafficFlushMs}:{},...v!==void 0&&Number.isFinite(v)?{upstreamRetries:v}:{},...Object.keys(d).length?{undici:d}:{},...Object.keys(V).length?{server:V}:{}});A.current=I,console.log(`[gateway] production gateway up on ${I.ports.join(", ")} (${I.routes().length} routes${C?", lens ON":""})`),u.push(()=>g.stop?.(),()=>$?.(),()=>O?.stop(),()=>W?.quit(),()=>S?.stop(),()=>I.stop(),()=>P?.shutdown())}M(main,"main"),R(main,"main"),a(main,"main");const WORKERS=(0,prod_config_1.workerCount)(process.env);if(WORKERS>1&&node_cluster_1.default.isPrimary){if(console.log(`[gateway] primary ${process.pid}: forking ${WORKERS} workers (one per core)\u2026`),process.env.LENSMCP_GW_RATE_LIMIT&&!(0,prod_config_1.redisLimiterConfigured)(process.env)){const n=process.env.LENSMCP_GW_RATE_LIMIT_REDIS==="1",u=Number(process.env.LENSMCP_GW_RATE_LIMIT),_=(0,prod_config_1.perWorkerLimit)(u,WORKERS);console.warn(`[gateway] WARNING: ${n?"LENSMCP_GW_RATE_LIMIT_REDIS=1 is set but no Redis URL is \u2014 each worker will fall back to":"using"} the in-memory rate limiter with ${WORKERS} workers. Each worker now enforces ${_} req/window so the total stays \u2248 ${u}; a single client's burst can still land unevenly across workers. Set ${n?"LENSMCP_GW_REDIS_URL (or LENSMCP_GW_RATE_LIMIT_REDIS_URL)":"LENSMCP_GW_RATE_LIMIT_REDIS=1 and a Redis URL"} for one shared global budget.`)}let e=!1;for(let n=0;n<WORKERS;n++)node_cluster_1.default.fork();node_cluster_1.default.on("exit",(n,u,_)=>{e||(console.warn(`[gateway] worker ${n.process.pid} exited (code=${u} sig=${_??""}) \u2014 respawning.`),node_cluster_1.default.fork())});const t=a(n=>{if(!e){e=!0,console.log(`[gateway] primary: ${n} \u2014 stopping ${Object.keys(node_cluster_1.default.workers??{}).length} workers\u2026`);for(const u of Object.values(node_cluster_1.default.workers??{}))try{u?.kill(n)}catch{}setTimeout(()=>process.exit(0),12e3).unref()}},"stopAll");process.on("SIGTERM",()=>t("SIGTERM")),process.on("SIGINT",()=>t("SIGINT"))}else main().catch(e=>{console.error("[gateway] FATAL: could not start \u2014",e instanceof Error?e.stack??e.message:e),process.exit(1)});
@@ -1,4 +1,4 @@
1
- "use strict";var p=Object.defineProperty;var l=(e,r)=>p(e,"name",{value:r,configurable:!0});var a=Object.defineProperty,i=l((e,r)=>a(e,"name",{value:r,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.runRollout=runRollout;const node_fs_1=require("node:fs"),rollout_ops_1=require("./rollout-ops"),registry_source_1=require("./registry-source"),USAGE=`lensmcp rollout \u2014 edit the gateway rollout config (file or Redis registry)
1
+ "use strict";var v=Object.defineProperty;var c=(e,r)=>v(e,"name",{value:r,configurable:!0});var p=Object.defineProperty,l=c((e,r)=>p(e,"name",{value:r,configurable:!0}),"l"),a=Object.defineProperty,i=l((e,r)=>a(e,"name",{value:r,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.runRollout=runRollout;const node_fs_1=require("node:fs"),rollout_ops_1=require("./rollout-ops"),registry_source_1=require("./registry-source"),USAGE=`lensmcp rollout \u2014 edit the gateway rollout config (file or Redis registry)
2
2
 
3
3
  Usage: <config.json> <command> [args]
4
4
  --redis <url> [--prefix <p>] <command> [args]
@@ -16,9 +16,9 @@ Commands:
16
16
  `)?e:e+`
17
17
  `),"out"),err=i(e=>process.stderr.write(e.endsWith(`
18
18
  `)?e:e+`
19
- `),"err");function extractFlag(e,r){const o=e.indexOf(r);return o<0?{rest:e}:{value:e[o+1],rest:[...e.slice(0,o),...e.slice(o+2)]}}l(extractFlag,"extractFlag"),i(extractFlag,"extractFlag");function runFile(e){const[r,...o]=e;if(!r||!o.length)return err(USAGE),2;let s;try{s=JSON.parse((0,node_fs_1.readFileSync)(r,"utf8"))}catch(t){return err(`cannot read ${r}: ${t.message}`),1}try{const t=(0,rollout_ops_1.parseRolloutCommand)(o);if(!t.op)return out((0,rollout_ops_1.summarizeRollout)(s,t.status)),0;const n=(0,rollout_ops_1.applyRolloutOp)(s,t.op);return(0,node_fs_1.writeFileSync)(`${r}.tmp`,JSON.stringify(n,null,2)+`
19
+ `),"err");function extractFlag(e,r){const o=e.indexOf(r);return o<0?{rest:e}:{value:e[o+1],rest:[...e.slice(0,o),...e.slice(o+2)]}}c(extractFlag,"extractFlag"),l(extractFlag,"extractFlag"),i(extractFlag,"extractFlag");function runFile(e){const[r,...o]=e;if(!r||!o.length)return err(USAGE),2;let s;try{s=JSON.parse((0,node_fs_1.readFileSync)(r,"utf8"))}catch(t){return err(`cannot read ${r}: ${t.message}`),1}try{const t=(0,rollout_ops_1.parseRolloutCommand)(o);if(!t.op)return out((0,rollout_ops_1.summarizeRollout)(s,t.status)),0;const n=(0,rollout_ops_1.applyRolloutOp)(s,t.op);return(0,node_fs_1.writeFileSync)(`${r}.tmp`,JSON.stringify(n,null,2)+`
20
20
  `),(0,node_fs_1.renameSync)(`${r}.tmp`,r),out(`\u2713 ${t.op.kind} ${t.op.service}
21
21
 
22
- ${(0,rollout_ops_1.summarizeRollout)(n,t.op.service)}`),0}catch(t){return err(`\u2717 ${t.message}`),1}}l(runFile,"runFile"),i(runFile,"runFile");async function runRedis(e,r,o){if(!o.length)return err(USAGE),2;let s;try{const t=require("ioredis");s=new t(e)}catch{return err('--redis needs the "ioredis" package installed (peer dep of @lensmcp/cluster)'),1}try{const{endpoints:t}=await(0,registry_source_1.redisRegistrySource)(s,{prefix:r}).read(),n=(0,rollout_ops_1.parseRolloutCommand)(o);if(!n.op)return out((0,rollout_ops_1.summarizeRollout)(t,n.status)),0;const c=(0,rollout_ops_1.applyRolloutOp)(t,n.op),u=n.op.service,d=c[u];return d===void 0?await s.del((0,registry_source_1.rolloutKey)(r,u)):await s.set((0,registry_source_1.rolloutKey)(r,u),JSON.stringify(d)),await s.publish((0,registry_source_1.changeChannel)(r),u),out(`\u2713 ${n.op.kind} ${u} \u2192 redis ${r} (published)
22
+ ${(0,rollout_ops_1.summarizeRollout)(n,t.op.service)}`),0}catch(t){return err(`\u2717 ${t.message}`),1}}c(runFile,"runFile"),l(runFile,"runFile"),i(runFile,"runFile");async function runRedis(e,r,o){if(!o.length)return err(USAGE),2;let s;try{const t=require("ioredis");s=new t(e)}catch{return err('--redis needs the "ioredis" package installed (peer dep of @lensmcp/cluster)'),1}try{const{endpoints:t}=await(0,registry_source_1.redisRegistrySource)(s,{prefix:r}).read(),n=(0,rollout_ops_1.parseRolloutCommand)(o);if(!n.op)return out((0,rollout_ops_1.summarizeRollout)(t,n.status)),0;const d=(0,rollout_ops_1.applyRolloutOp)(t,n.op),u=n.op.service,m=d[u];return m===void 0?await s.del((0,registry_source_1.rolloutKey)(r,u)):await s.set((0,registry_source_1.rolloutKey)(r,u),JSON.stringify(m)),await s.publish((0,registry_source_1.changeChannel)(r),u),out(`\u2713 ${n.op.kind} ${u} \u2192 redis ${r} (published)
23
23
 
24
- ${(0,rollout_ops_1.summarizeRollout)(c,u)}`),0}catch(t){return err(`\u2717 ${t.message}`),1}finally{try{await s.quit()}catch{}}}l(runRedis,"runRedis"),i(runRedis,"runRedis");async function runRollout(e){const r=extractFlag(e,"--redis"),o=extractFlag(r.rest,"--prefix");return r.value?runRedis(r.value,o.value??registry_source_1.DEFAULT_REGISTRY_PREFIX,o.rest):runFile(o.rest)}l(runRollout,"runRollout"),i(runRollout,"runRollout"),require.main===module&&runRollout(process.argv.slice(2)).then(e=>process.exit(e));
24
+ ${(0,rollout_ops_1.summarizeRollout)(d,u)}`),0}catch(t){return err(`\u2717 ${t.message}`),1}finally{try{await s.quit()}catch{}}}c(runRedis,"runRedis"),l(runRedis,"runRedis"),i(runRedis,"runRedis");async function runRollout(e){const r=extractFlag(e,"--redis"),o=extractFlag(r.rest,"--prefix");return r.value?runRedis(r.value,o.value??registry_source_1.DEFAULT_REGISTRY_PREFIX,o.rest):runFile(o.rest)}c(runRollout,"runRollout"),l(runRollout,"runRollout"),i(runRollout,"runRollout"),require.main===module&&runRollout(process.argv.slice(2)).then(e=>process.exit(e));