@spotlightjs/spotlight 2.10.0 → 2.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/overlay/assets/main.js +105 -107
- package/dist/spotlight.cjs +1 -1
- package/package.json +3 -3
package/dist/spotlight.cjs
CHANGED
|
@@ -42,5 +42,5 @@ Url: ${al(t)}`),!0)}function OY(t,e){return t.type||!e||!e.length?!1:CY(t).some(
|
|
|
42
42
|
`))n.write(`data:${_}
|
|
43
43
|
`)},l=t.subscribe(([p,_])=>{Ft.debug("\u{1F54A}\uFE0F sending to Spotlight"),n.write(`event:${p}${a}
|
|
44
44
|
`),u(_),n.write(`
|
|
45
|
-
`)});r.on("close",()=>{t.unsubscribe(l),n.end()})}else if(r.method==="POST"){Ft.debug("\u{1F4E9} Received event");let s=r,a=r.headers["content-encoding"];a==="gzip"?s=r.pipe((0,Df.createGunzip)()):a==="deflate"&&(s=r.pipe((0,Df.createInflate)()));let u=[];s.on("readable",()=>{let l;for(;(l=s.read())!==null;)u.push(l)}),s.on("end",()=>{var l,p;let _=Buffer.concat(u),f=(l=r.headers["content-type"])==null?void 0:l.split(";")[0].toLocaleLowerCase();if((p=i?.get("sentry_client"))!=null&&p.startsWith("sentry.javascript.browser")&&r.headers.origin&&(f="application/x-sentry-envelope"),f?t.put([f,_]):Ft.warn("No content type, skipping payload..."),process.env.SPOTLIGHT_CAPTURE||e){let E=new Date().getTime(),S=`${f?.replace(/[^a-z0-9]/gi,"_")||"no_content_type"}-${E}.txt`;e?e(_.toString("binary")):((0,ha.createWriteStream)(S).write(_),Ft.info(`\u{1F5C3}\uFE0F Saved data to ${S}`))}n.writeHead(200,{"Cache-Control":"no-cache",Connection:"keep-alive"}),n.end()})}else{kq(r,n);return}},vde=t=>function(e,r,n){let o=`${n||e.url}`;o==="/"&&(o="/src/index.html"),o=o.slice(1);let i=(0,mi.extname)(o),s="text/html";switch(i){case".js":s="text/javascript";break;case".css":s="text/css";break;case".json":s="application/json";break}Object.hasOwn(t,o)?(r.writeHead(200,{"Content-Type":s}),r.end(t[o])):Lf(e,r)};function Ide(t,e){e.writeHead(200,{"Content-Type":"text/plain",...Fq,...jq}),e.end("OK")}function Pde(t,e){t.method==="DELETE"?(e.writeHead(200,{"Content-Type":"text/plain"}),Mde(),e.end("Cleared")):kq(t,e)}function Cde(t=process.cwd()){return(e,r)=>{if(e.method!=="POST"){r.writeHead(405),r.end();return}let n="";e.on("data",o=>{n+=o}),e.on("end",()=>{let o=(0,mi.resolve)(t,n);Ft.debug(`Launching editor for ${o}`),(0,Gq.default)(o,(i,s)=>{Ft.error(`Failed to launch editor for ${i}: ${s}`)}),r.writeHead(204),r.end()})}}function qq(t){return Uf((e,r)=>{r.writeHead(t),r.end()},{name:`HTTP ${t}`,op:`sidecar.http.error.${t}`,attributes:{"http.response.status_code":t}})}var Lf=qq(404),kq=qq(405);function Nde(t,e,r,n,o){r&&!n&&(n={"/src/index.html":(0,ha.readFileSync)((0,mi.join)(r,"src/index.html")),"/assets/main.js":(0,ha.readFileSync)((0,mi.join)(r,"assets/main.js"))});let i=[[/^\/health$/,Ide],[/^\/clear$/,Su(Pde)],[/^\/stream$|^\/api\/\d+\/envelope\/?$/,Su(Ode(t,o))],[/^\/open$/,Su(Cde(r))],[RegExp(`^${pq}$`),Su(Tde)],[/^.+$/,n!=null?Su(vde(n)):Lf]],s=(0,xf.createServer)((l,p)=>{var _;let f=l.url;if(!f)return Lf(l,p);let E=l.headers.host||"localhost",{pathname:S,searchParams:T}=new URL(f,`http://${E}`),h=i.find(O=>O[0].test(S));return h?We({name:`HTTP ${l.method} ${S}`,op:`sidecar.http.${(_=l.method)==null?void 0:_.toLowerCase()}`,forceTransaction:!0,attributes:{"http.request.method":l.method,"http.request.url":f,"http.request.query":T.toString(),"server.address":E,"server.port":l.socket.localPort}},O=>{let I=Li();p.appendHeader("server-timing",[`sentryTrace;desc="${I["sentry-trace"]}"`,`baggage;desc="${I.baggage}"`,`sentrySpotlightPort;desc=${e}`].join(", "));let C=h[1](l,p,S,T);return O.setAttribute("http.response.status_code",p.statusCode),C}):Lf(l,p)});return s.on("error",a),s.listen(e,()=>{u(e,r)}),s;function a(l){"code"in l&&l.code==="EADDRINUSE"?(Ft.info(`Port ${e} in use, retrying...`),s.close(),xA=setTimeout(()=>{s.listen(e)},5e3)):$t(l)}function u(l,p){Ft.info(`Sidecar listening on ${l}`),p&&Ft.info(`You can open: http://localhost:${l} to see the Spotlight overlay directly`)}}var Ei,xA=null,Yq=new LA,yde=Uf(t=>{if(typeof t=="string"){let e=Number(t);return/^\d+$/.test(t)&&e>0&&e<=65535}return t>0&&t<=65535},{name:"isValidPort",op:"sidecar.server.portCheck"}),bde=Uf(t=>new Promise(e=>{Ft.info(`Checking if we are already running on port ${t}`);let r={hostname:"localhost",port:t,path:"/health",method:"GET",timeout:1e3,headers:{Connection:"close"}},n,o=(0,xf.get)(r,a=>{let u=a.headers["x-powered-by"];s(u==="spotlight-by-sentry")}),i=()=>!o.destroyed&&o.destroy(new Error("Request timed out."));function s(a){process.off("SIGINT",i),clearTimeout(n),e(a)}process.on("SIGINT",i),n=setTimeout(i,2e3),o.on("error",()=>{s(!1)}),o.end()}),{name:"isSidecarRunning",op:"sidecar.server.collideCheck"});function $q({port:t,logger:e,basePath:r,filesToServe:n,debug:o,incomingPayload:i}={}){let s=8969;e&&gde(e),(o||process.env.SPOTLIGHT_DEBUG)&&Ade(!0),t&&!yde(t)?(Ft.info("Please provide a valid port."),process.exit(1)):t&&(s=typeof t=="string"?Number(t):t),bde(s).then(a=>{a?Ft.info(`Sidecar is already running on port ${s}`):Ei||(Ei=Nde(Yq,s,r,n,i))})}function Mde(){Yq.clear()}var wq=!1,Wq=()=>{xA&&clearTimeout(xA),(wq||!Ei)&&(Ft.info("Bye."),process.exit(0)),Ei&&(wq=!0,Ft.info("Shutting down server gracefully..."),Ei.close(),Ei.closeAllConnections(),Ei.unref())};process.on("SIGINT",Wq);process.on("SIGTERM",Wq);var Kq=require("node:fs"),Xq=G(require("node:module"),1),UA=require("node:path"),zq=require("node:url"),Zq=require("node:zlib");c();cA({dsn:"https://51bcd92dba1128934afd1c5726c84442@o1.ingest.us.sentry.io/4508404727283713",environment:"development",release:"spotlight@2.10.
|
|
45
|
+
`)});r.on("close",()=>{t.unsubscribe(l),n.end()})}else if(r.method==="POST"){Ft.debug("\u{1F4E9} Received event");let s=r,a=r.headers["content-encoding"];a==="gzip"?s=r.pipe((0,Df.createGunzip)()):a==="deflate"&&(s=r.pipe((0,Df.createInflate)()));let u=[];s.on("readable",()=>{let l;for(;(l=s.read())!==null;)u.push(l)}),s.on("end",()=>{var l,p;let _=Buffer.concat(u),f=(l=r.headers["content-type"])==null?void 0:l.split(";")[0].toLocaleLowerCase();if((p=i?.get("sentry_client"))!=null&&p.startsWith("sentry.javascript.browser")&&r.headers.origin&&(f="application/x-sentry-envelope"),f?t.put([f,_]):Ft.warn("No content type, skipping payload..."),process.env.SPOTLIGHT_CAPTURE||e){let E=new Date().getTime(),S=`${f?.replace(/[^a-z0-9]/gi,"_")||"no_content_type"}-${E}.txt`;e?e(_.toString("binary")):((0,ha.createWriteStream)(S).write(_),Ft.info(`\u{1F5C3}\uFE0F Saved data to ${S}`))}n.writeHead(200,{"Cache-Control":"no-cache",Connection:"keep-alive"}),n.end()})}else{kq(r,n);return}},vde=t=>function(e,r,n){let o=`${n||e.url}`;o==="/"&&(o="/src/index.html"),o=o.slice(1);let i=(0,mi.extname)(o),s="text/html";switch(i){case".js":s="text/javascript";break;case".css":s="text/css";break;case".json":s="application/json";break}Object.hasOwn(t,o)?(r.writeHead(200,{"Content-Type":s}),r.end(t[o])):Lf(e,r)};function Ide(t,e){e.writeHead(200,{"Content-Type":"text/plain",...Fq,...jq}),e.end("OK")}function Pde(t,e){t.method==="DELETE"?(e.writeHead(200,{"Content-Type":"text/plain"}),Mde(),e.end("Cleared")):kq(t,e)}function Cde(t=process.cwd()){return(e,r)=>{if(e.method!=="POST"){r.writeHead(405),r.end();return}let n="";e.on("data",o=>{n+=o}),e.on("end",()=>{let o=(0,mi.resolve)(t,n);Ft.debug(`Launching editor for ${o}`),(0,Gq.default)(o,(i,s)=>{Ft.error(`Failed to launch editor for ${i}: ${s}`)}),r.writeHead(204),r.end()})}}function qq(t){return Uf((e,r)=>{r.writeHead(t),r.end()},{name:`HTTP ${t}`,op:`sidecar.http.error.${t}`,attributes:{"http.response.status_code":t}})}var Lf=qq(404),kq=qq(405);function Nde(t,e,r,n,o){r&&!n&&(n={"/src/index.html":(0,ha.readFileSync)((0,mi.join)(r,"src/index.html")),"/assets/main.js":(0,ha.readFileSync)((0,mi.join)(r,"assets/main.js"))});let i=[[/^\/health$/,Ide],[/^\/clear$/,Su(Pde)],[/^\/stream$|^\/api\/\d+\/envelope\/?$/,Su(Ode(t,o))],[/^\/open$/,Su(Cde(r))],[RegExp(`^${pq}$`),Su(Tde)],[/^.+$/,n!=null?Su(vde(n)):Lf]],s=(0,xf.createServer)((l,p)=>{var _;let f=l.url;if(!f)return Lf(l,p);let E=l.headers.host||"localhost",{pathname:S,searchParams:T}=new URL(f,`http://${E}`),h=i.find(O=>O[0].test(S));return h?We({name:`HTTP ${l.method} ${S}`,op:`sidecar.http.${(_=l.method)==null?void 0:_.toLowerCase()}`,forceTransaction:!0,attributes:{"http.request.method":l.method,"http.request.url":f,"http.request.query":T.toString(),"server.address":E,"server.port":l.socket.localPort}},O=>{let I=Li();p.appendHeader("server-timing",[`sentryTrace;desc="${I["sentry-trace"]}"`,`baggage;desc="${I.baggage}"`,`sentrySpotlightPort;desc=${e}`].join(", "));let C=h[1](l,p,S,T);return O.setAttribute("http.response.status_code",p.statusCode),C}):Lf(l,p)});return s.on("error",a),s.listen(e,()=>{u(e,r)}),s;function a(l){"code"in l&&l.code==="EADDRINUSE"?(Ft.info(`Port ${e} in use, retrying...`),s.close(),xA=setTimeout(()=>{s.listen(e)},5e3)):$t(l)}function u(l,p){Ft.info(`Sidecar listening on ${l}`),p&&Ft.info(`You can open: http://localhost:${l} to see the Spotlight overlay directly`)}}var Ei,xA=null,Yq=new LA,yde=Uf(t=>{if(typeof t=="string"){let e=Number(t);return/^\d+$/.test(t)&&e>0&&e<=65535}return t>0&&t<=65535},{name:"isValidPort",op:"sidecar.server.portCheck"}),bde=Uf(t=>new Promise(e=>{Ft.info(`Checking if we are already running on port ${t}`);let r={hostname:"localhost",port:t,path:"/health",method:"GET",timeout:1e3,headers:{Connection:"close"}},n,o=(0,xf.get)(r,a=>{let u=a.headers["x-powered-by"];s(u==="spotlight-by-sentry")}),i=()=>!o.destroyed&&o.destroy(new Error("Request timed out."));function s(a){process.off("SIGINT",i),clearTimeout(n),e(a)}process.on("SIGINT",i),n=setTimeout(i,2e3),o.on("error",()=>{s(!1)}),o.end()}),{name:"isSidecarRunning",op:"sidecar.server.collideCheck"});function $q({port:t,logger:e,basePath:r,filesToServe:n,debug:o,incomingPayload:i}={}){let s=8969;e&&gde(e),(o||process.env.SPOTLIGHT_DEBUG)&&Ade(!0),t&&!yde(t)?(Ft.info("Please provide a valid port."),process.exit(1)):t&&(s=typeof t=="string"?Number(t):t),bde(s).then(a=>{a?Ft.info(`Sidecar is already running on port ${s}`):Ei||(Ei=Nde(Yq,s,r,n,i))})}function Mde(){Yq.clear()}var wq=!1,Wq=()=>{xA&&clearTimeout(xA),(wq||!Ei)&&(Ft.info("Bye."),process.exit(0)),Ei&&(wq=!0,Ft.info("Shutting down server gracefully..."),Ei.close(),Ei.closeAllConnections(),Ei.unref())};process.on("SIGINT",Wq);process.on("SIGTERM",Wq);var Kq=require("node:fs"),Xq=G(require("node:module"),1),UA=require("node:path"),zq=require("node:url"),Zq=require("node:zlib");c();cA({dsn:"https://51bcd92dba1128934afd1c5726c84442@o1.ingest.us.sentry.io/4508404727283713",environment:"development",release:"spotlight@2.10.2",debug:!!process.env.SENTRY_DEBUG,tracesSampleRate:1,beforeSendTransaction:t=>(t.server_name=void 0,t),beforeSend:t=>{let e=t.exception?.values;if(!e)return t;for(let r of e)if(r.stacktrace)for(let n of r.stacktrace.frames){if(!n.filename)continue;let o=process.env.HOME||process.env.USERPROFILE;n.filename=n.filename?.replace(o,"~")}return t.server_name=void 0,t}});var Lde=Xq.default.createRequire(d),Tu=null;try{Tu=Lde("node:sea")}catch{Tu={isSea:()=>!1}}var xde=process.env.HOME||process.env.USERPROFILE;rl("CLI",{sea:Tu.isSea(),argv:process.argv.map(t=>t.replace(xde,"~"))});var Dde=(t,e={})=>(...r)=>We({name:t.name,attributes:{args:r},...e},()=>t(...r)),DA=Dde(Tu.isSea()?t=>Buffer.from(Tu.getRawAsset(t)):(()=>{let t=(0,UA.join)((0,zq.fileURLToPath)(d),"../../dist/overlay/");return e=>(0,Kq.readFileSync)((0,UA.join)(t,e))})(),{name:"readAsset",op:"cli.asset.read"});We({name:"Spotlight CLI",op:"cli"},()=>{We({name:"ASCII Art",op:"cli.art.ascii"},()=>{let t=process.stdout.columns;if(!process.stdout.isTTY||t<35)return;let e="",r=We({name:"Inflate ASCII Art Data",op:"cli.art.ascii.inflate"},()=>Uint8Array.from((0,Zq.inflateRawSync)(Buffer.from("bY7LCgMxFEK9L5MwDDSL9P//1DJMKGXowoUcUaFZOk8dU2Op9+qZVkYQoFsaEqA6PZxxma1AoMG+TiONTgcfAd741YxxVf8gCzCgWcYB7OSj9sjW7t2/eKxKAxkIYv8NqL3FpVY25CmjrBSuDw==","base64")))),n="\x1B[",o=`${n}38;5;`,i=`${o}96m`,s=`${o}61m`,a=`${n}1m`,u=`${n}0m`,l=`${u}
|
|
46
46
|
`,p=.22,_=0,f=0,E=0,S=26,T=0;for(let h of r)if(h===255)e+=l,_=f=0,E++===5&&(p=p/-3),S=Math.round(S*(1+p)),T=Math.round(Math.random()*18);else{for(;h-->=0&&f<t;)f<S-1?e+=i:f===S-1?e+=s:f===S+T&&(e+=`${u}${a}`),e+=_?f>=35?"#":"s":" ",f++;_=!_}e+=l,process.stdout.write(e)}),We({name:"Setup Sidecar",op:"cli.setup.sidecar"},()=>{let t=process.argv.length>=3?Number(process.argv[2]):void 0,e="manifest.json",r="src/index.html",n=process.cwd(),o=Object.create(null);We({name:"Setup Server Assets",op:"cli.setup.sidecar.assets"},()=>{let i=JSON.parse(DA(e));o[r]=DA(r);let s=Object.values(i);for(let a of s)o[a.file]=DA(a.file)}),$q({port:t,basePath:n,filesToServe:o})})});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spotlightjs/spotlight",
|
|
3
3
|
"description": "Spotlight - Sentry for development. Containing the overlay and the sidecar.",
|
|
4
|
-
"version": "2.10.
|
|
4
|
+
"version": "2.10.2",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"files": [
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"macho-unsign": "^2.0.6",
|
|
38
38
|
"portable-executable-signature": "^2.0.6",
|
|
39
39
|
"postject": "1.0.0-alpha.6",
|
|
40
|
-
"@spotlightjs/overlay": "2.
|
|
41
|
-
"@spotlightjs/sidecar": "1.11.
|
|
40
|
+
"@spotlightjs/overlay": "2.11.0",
|
|
41
|
+
"@spotlightjs/sidecar": "1.11.1"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/node": "^18.19.55",
|