server-devtools 0.1.5 → 0.1.8

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 (102) hide show
  1. package/README.md +150 -6
  2. package/dist/dashboard/assets/alert-dialog-DOm6Ua9Q.js +1 -0
  3. package/dist/dashboard/assets/button-CXALLF_v.js +1 -0
  4. package/dist/dashboard/assets/index-9FEJIlQV.css +2 -0
  5. package/dist/dashboard/assets/index-B9G80X8M.js +10 -0
  6. package/dist/dashboard/assets/overview-page-CZhNooRx.js +53 -0
  7. package/dist/dashboard/assets/requests-page-DvONd75O.js +1 -0
  8. package/dist/dashboard/assets/rolldown-runtime-hePW80VL.js +1 -0
  9. package/dist/dashboard/assets/trace-details-page-Dze7uRsF.js +1 -0
  10. package/dist/dashboard/assets/with-selector-B8m4Ky1i.js +1 -0
  11. package/dist/dashboard/index.html +22 -2
  12. package/dist/src/config/index.d.ts +16 -0
  13. package/dist/src/config/index.d.ts.map +1 -1
  14. package/dist/src/config/index.js +31 -2
  15. package/dist/src/config/index.js.map +1 -1
  16. package/dist/src/core/repeated-database-queries/index.d.ts +32 -0
  17. package/dist/src/core/repeated-database-queries/index.d.ts.map +1 -0
  18. package/dist/src/core/repeated-database-queries/index.js +130 -0
  19. package/dist/src/core/repeated-database-queries/index.js.map +1 -0
  20. package/dist/src/core/repeated-database-queries/mongodb.d.ts +2 -0
  21. package/dist/src/core/repeated-database-queries/mongodb.d.ts.map +1 -0
  22. package/dist/src/core/repeated-database-queries/mongodb.js +43 -0
  23. package/dist/src/core/repeated-database-queries/mongodb.js.map +1 -0
  24. package/dist/src/core/repeated-database-queries/mysql.d.ts +2 -0
  25. package/dist/src/core/repeated-database-queries/mysql.d.ts.map +1 -0
  26. package/dist/src/core/repeated-database-queries/mysql.js +16 -0
  27. package/dist/src/core/repeated-database-queries/mysql.js.map +1 -0
  28. package/dist/src/core/repeated-database-queries/postgres.d.ts +2 -0
  29. package/dist/src/core/repeated-database-queries/postgres.d.ts.map +1 -0
  30. package/dist/src/core/repeated-database-queries/postgres.js +15 -0
  31. package/dist/src/core/repeated-database-queries/postgres.js.map +1 -0
  32. package/dist/src/core/repeated-database-queries/redis.d.ts +8 -0
  33. package/dist/src/core/repeated-database-queries/redis.d.ts.map +1 -0
  34. package/dist/src/core/repeated-database-queries/redis.js +91 -0
  35. package/dist/src/core/repeated-database-queries/redis.js.map +1 -0
  36. package/dist/src/core/repeated-database-queries/sql-template.d.ts +2 -0
  37. package/dist/src/core/repeated-database-queries/sql-template.d.ts.map +1 -0
  38. package/dist/src/core/repeated-database-queries/sql-template.js +12 -0
  39. package/dist/src/core/repeated-database-queries/sql-template.js.map +1 -0
  40. package/dist/src/core/slow-span.d.ts +5 -0
  41. package/dist/src/core/slow-span.d.ts.map +1 -0
  42. package/dist/src/core/slow-span.js +37 -0
  43. package/dist/src/core/slow-span.js.map +1 -0
  44. package/dist/src/dashboard/dashboard-server.d.ts +12 -1
  45. package/dist/src/dashboard/dashboard-server.d.ts.map +1 -1
  46. package/dist/src/dashboard/dashboard-server.js +344 -27
  47. package/dist/src/dashboard/dashboard-server.js.map +1 -1
  48. package/dist/src/index.d.ts +2 -1
  49. package/dist/src/index.d.ts.map +1 -1
  50. package/dist/src/index.js +35 -5
  51. package/dist/src/index.js.map +1 -1
  52. package/dist/src/instrumentation/exporter.d.ts +2 -1
  53. package/dist/src/instrumentation/exporter.d.ts.map +1 -1
  54. package/dist/src/instrumentation/exporter.js +3 -2
  55. package/dist/src/instrumentation/exporter.js.map +1 -1
  56. package/dist/src/instrumentation/instrumentation.d.ts +2 -1
  57. package/dist/src/instrumentation/instrumentation.d.ts.map +1 -1
  58. package/dist/src/instrumentation/instrumentation.js +4 -3
  59. package/dist/src/instrumentation/instrumentation.js.map +1 -1
  60. package/dist/src/instrumentation/outbound-http/outbound-http-capture.d.ts +8 -1
  61. package/dist/src/instrumentation/outbound-http/outbound-http-capture.d.ts.map +1 -1
  62. package/dist/src/instrumentation/outbound-http/outbound-http-capture.js +158 -32
  63. package/dist/src/instrumentation/outbound-http/outbound-http-capture.js.map +1 -1
  64. package/dist/src/instrumentation/span-mapper.d.ts +4 -0
  65. package/dist/src/instrumentation/span-mapper.d.ts.map +1 -1
  66. package/dist/src/instrumentation/span-mapper.js +25 -3
  67. package/dist/src/instrumentation/span-mapper.js.map +1 -1
  68. package/dist/src/security/auth.service.d.ts +6 -0
  69. package/dist/src/security/auth.service.d.ts.map +1 -1
  70. package/dist/src/security/auth.service.js +62 -4
  71. package/dist/src/security/auth.service.js.map +1 -1
  72. package/dist/src/security/redaction.service.d.ts +8 -0
  73. package/dist/src/security/redaction.service.d.ts.map +1 -0
  74. package/dist/src/security/redaction.service.js +35 -0
  75. package/dist/src/security/redaction.service.js.map +1 -0
  76. package/dist/src/storage/sqlite-storage.d.ts +11 -2
  77. package/dist/src/storage/sqlite-storage.d.ts.map +1 -1
  78. package/dist/src/storage/sqlite-storage.js +194 -13
  79. package/dist/src/storage/sqlite-storage.js.map +1 -1
  80. package/dist/src/types/dashboard.d.ts +25 -0
  81. package/dist/src/types/dashboard.d.ts.map +1 -1
  82. package/dist/src/types/index.d.ts +1 -0
  83. package/dist/src/types/index.d.ts.map +1 -1
  84. package/dist/src/types/index.js +1 -0
  85. package/dist/src/types/index.js.map +1 -1
  86. package/dist/src/types/misc.d.ts +5 -0
  87. package/dist/src/types/misc.d.ts.map +1 -1
  88. package/dist/src/types/outbound-http.d.ts +9 -0
  89. package/dist/src/types/outbound-http.d.ts.map +1 -0
  90. package/dist/src/types/outbound-http.js +3 -0
  91. package/dist/src/types/outbound-http.js.map +1 -0
  92. package/dist/src/utils/allowed-ips.d.ts +4 -0
  93. package/dist/src/utils/allowed-ips.d.ts.map +1 -0
  94. package/dist/src/utils/allowed-ips.js +34 -0
  95. package/dist/src/utils/allowed-ips.js.map +1 -0
  96. package/dist/src/utils/helpers.d.ts +2 -0
  97. package/dist/src/utils/helpers.d.ts.map +1 -0
  98. package/dist/src/utils/helpers.js +13 -0
  99. package/dist/src/utils/helpers.js.map +1 -0
  100. package/package.json +3 -2
  101. package/dist/dashboard/assets/index-BXbomG5W.js +0 -9
  102. package/dist/dashboard/assets/index-DYvJ5RTl.css +0 -2
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,A as n,B as r,C as i,D as a,F as o,K as s,N as c,P as l,Q as u,S as d,T as f,Y as p,_ as m,b as h,c as g,d as _,f as v,g as y,h as b,i as x,k as S,l as C,m as w,n as T,o as E,p as D,r as O,s as k,t as A,u as j,v as M,w as N}from"./button-CXALLF_v.js";import{$ as P,A as ee,B as F,C as I,D as L,E as R,F as z,G as te,H as B,I as ne,J as re,K as ie,L as ae,M as V,N as H,O as U,P as oe,Q as se,R as ce,S as W,T as le,U as ue,V as de,W as fe,X as pe,Y as G,Z as K,_ as me,at as he,b as ge,ct as _e,d as ve,et as ye,f as be,g as xe,h as Se,i as Ce,it as we,j as Te,k as Ee,l as De,lt as Oe,m as ke,n as Ae,nt as je,ot as Me,p as Ne,q as Pe,r as Fe,rt as Ie,st as Le,t as Re,tt as ze,u as Be,v as Ve,w as He,x as Ue,y as We,z as Ge}from"./alert-dialog-DOm6Ua9Q.js";import{S as Ke,_ as qe,a as Je,b as Ye,d as Xe,f as Ze,g as Qe,h as q,l as $e,n as J,o as et,p as tt,t as nt,u as rt,x as it,y as at}from"./index-B9G80X8M.js";import{n as ot}from"./with-selector-B8m4Ky1i.js";var st=o(`arrow-down-up`,[[`path`,{d:`m3 16 4 4 4-4`,key:`1co6wj`}],[`path`,{d:`M7 20V4`,key:`1yoxec`}],[`path`,{d:`m21 8-4-4-4 4`,key:`1c9v7m`}],[`path`,{d:`M17 4v16`,key:`7dpous`}]]),ct=o(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),lt=o(`funnel`,[[`path`,{d:`M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z`,key:`sc7q7i`}]]),ut=o(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),dt=o(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),ft=Math.min,pt=Math.max,mt=Math.round,ht=Math.floor,gt=e=>({x:e,y:e}),_t={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function vt(e,t,n){return pt(e,ft(t,n))}function yt(e,t){return typeof e==`function`?e(t):e}function Y(e){return e.split(`-`)[0]}function bt(e){return e.split(`-`)[1]}function xt(e){return e===`x`?`y`:`x`}function St(e){return e===`y`?`height`:`width`}function X(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function Ct(e){return xt(X(e))}function wt(e,t,n){n===void 0&&(n=!1);let r=bt(e),i=Ct(e),a=St(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=Nt(o)),[o,Nt(o)]}function Tt(e){let t=Nt(e);return[Et(e),t,Et(t)]}function Et(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var Dt=[`left`,`right`],Ot=[`right`,`left`],kt=[`top`,`bottom`],At=[`bottom`,`top`];function jt(e,t,n){switch(e){case`top`:case`bottom`:return n?t?Ot:Dt:t?Dt:Ot;case`left`:case`right`:return t?kt:At;default:return[]}}function Mt(e,t,n,r){let i=bt(e),a=jt(Y(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(Et)))),a}function Nt(e){let t=Y(e);return _t[t]+e.slice(t.length)}function Pt(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function Ft(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:Pt(e)}function It(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function Lt(e,t){return t!=null&&!se(t)?0:typeof e==`function`?e():e}function Rt(e,t,n){let r=Lt(e,n);return typeof r==`number`?r:r?.[t]}function zt(e){return typeof e==`function`?e():e}function Bt(e,t){return t||e===`click`||e===`mousedown`}function Vt(e){return e?.includes(`mouse`)&&e!==`mousedown`}var Z=e(t(),1);function Ht(e,t={}){let{enabled:n=!0,event:r=`click`,toggle:i=!0,ignoreMouse:a=!1,stickIfOpen:o=!0,touchOpenDelay:s=0,reason:c=rt}=t,l=`rootStore`in e?e.rootStore:e,u=l.context.dataRef,d=Z.useRef(void 0),f=Pe(),p=Ze(),m=Z.useMemo(()=>{function e(e,t,n,r){let i=J(c,t,n);e&&r===`touch`&&s>0?p.start(s,()=>{l.setOpen(!0,i)}):l.setOpen(e,i)}function t(e,t,n){let r=u.current.openEvent,a=l.select(`domReferenceElement`)!==t;return e&&a||!e||!i?!0:r&&o?!n(r.type):!1}return{onPointerDown(e){d.current=se(e.pointerType,!0)&&P(e.nativeEvent)?`virtual`:e.pointerType},onMouseDown(n){let i=d.current,o=n.nativeEvent,s=l.select(`open`);if(n.button!==0||r===`click`||se(i,!0)&&a)return;let c=t(s,n.currentTarget,e=>e===`click`||e===`mousedown`),u=Qe(o);if(Ie(u)){e(c,o,u,i);return}let p=n.currentTarget;f.request(()=>{e(c,o,p,i)})},onClick(n){if(r===`mousedown-only`)return;let i=d.current;if(r===`mousedown`&&i){d.current=void 0;return}se(i,!0)&&a||e(t(l.select(`open`),n.currentTarget,e=>e===`click`||e===`mousedown`||e===`keydown`||e===`keyup`),n.nativeEvent,n.currentTarget,i)},onKeyDown(){d.current=void 0}}},[u,r,a,c,l,o,i,f,p,s]);return Z.useMemo(()=>n?{reference:m}:S,[n,m])}function Ut(e,t,n){let{reference:r,floating:i}=e,a=X(t),o=Ct(t),s=St(o),c=Y(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=bt(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function Wt(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=yt(t,e),p=Ft(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=It(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=It(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var Gt=50,Kt=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:Wt},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=Ut(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<Gt&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=Ut(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},qt=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=yt(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=Y(r),_=X(o),v=Y(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[Nt(o)]:Tt(o)),x=p!==`none`;!d&&x&&b.push(...Mt(o,m,p,y));let S=[o,...b],C=await s.detectOverflow(t,h),w=[],T=i.flip?.overflows||[];if(l&&w.push(C[g]),u){let e=wt(r,a,y);w.push(C[e[0]],C[e[1]])}if(T=[...T,{placement:r,overflows:w}],!w.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(u!==`alignment`||_===X(t)||T.every(e=>X(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=X(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o}if(r!==n)return{reset:{placement:n}}}return{}}}},Jt=new Set([`left`,`top`]);async function Yt(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=Y(n),s=bt(n),c=X(n)===`y`,l=Jt.has(o)?-1:1,u=a&&c?-1:1,d=yt(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var Xt=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await Yt(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},Zt=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=yt(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=X(i),p=xt(f),m=u[p],h=u[f],g=(e,t)=>vt(t+d[e===`y`?`top`:`left`],t,t-d[e===`y`?`bottom`:`right`]);o&&(m=g(p,m)),s&&(h=g(f,h));let _=c.fn({...t,[p]:m,[f]:h});return{..._,data:{x:_.x-n,y:_.y-r,enabled:{[p]:o,[f]:s}}}}}},Qt=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=yt(e,t),u={x:n,y:r},d=X(i),f=xt(d),p=u[f],m=u[d],h=yt(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:h.mainAxis??0,crossAxis:h.crossAxis??0};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;p<t?p=t:p>n&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=Jt.has(Y(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);m<n?m=n:m>r&&(m=r)}return{[f]:p,[d]:m}}}},$t=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){let{placement:n,rects:r,platform:i,elements:a}=t,{apply:o=()=>{},...s}=yt(e,t),c=await i.detectOverflow(t,s),l=Y(n),u=bt(n),d=X(n)===`y`,{width:f,height:p}=r.floating,m,h;l===`top`||l===`bottom`?(m=l,h=u===(await(i.isRTL==null?void 0:i.isRTL(a.floating))?`start`:`end`)?`left`:`right`):(h=l,m=u===`end`?`top`:`bottom`);let g=p-c.top-c.bottom,_=f-c.left-c.right,v=ft(p-c[m],g),y=ft(f-c[h],_),b=t.middlewareData.shift,x=!b,S=v,C=y;b!=null&&b.enabled.x&&(C=_),b!=null&&b.enabled.y&&(S=g),x&&!u&&(d?C=f-2*pt(c.left,c.right):S=p-2*pt(c.top,c.bottom)),await o({...t,availableWidth:C,availableHeight:S});let w=await i.getDimensions(a.floating);return f!==w.width||p!==w.height?{reset:{rects:!0}}:{}}}};function en(e){let t=E(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=m(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=mt(n)!==a||mt(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function tn(e){return y(e)?e:e.contextElement}function nn(e){let t=tn(e);if(!m(t))return gt(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=en(t),o=(a?mt(n.width):n.width)/r,s=(a?mt(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var rn=gt(0);function an(e){let t=w(e);return!N()||!t.visualViewport?rn:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function on(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===w(e)}function sn(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=tn(e),o=gt(1);t&&(r?y(r)&&(o=nn(r)):o=nn(e));let s=on(a,n,r)?an(a):gt(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a&&r){let e=w(a),t=y(r)?w(r):r,n=e,i=C(n);for(;i&&t!==n;){let e=nn(i),t=i.getBoundingClientRect(),r=E(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=w(i),i=C(n)}}return It({width:u,height:d,x:c,y:l})}function cn(e,t){let n=_(e).scrollLeft;return t?t.left+n:sn(g(e)).left+n}function ln(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-cn(e,n),y:n.top+t.scrollTop}}function un(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e,o=a===`fixed`,s=g(r),c=t?i(t.floating):!1;if(r===s||c&&o)return n;let l={scrollLeft:0,scrollTop:0},u=gt(1),d=gt(0),f=m(r);if((f||!o)&&((j(r)!==`body`||h(s))&&(l=_(r)),f)){let e=sn(r);u=nn(r),d.x=e.x+r.clientLeft,d.y=e.y+r.clientTop}let p=s&&!f&&!o?ln(s,l):gt(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+d.x+p.x,y:n.y*u.y-l.scrollTop*u.y+d.y+p.y}}function dn(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function fn(e){let t=_(e),n=e.ownerDocument.body,r=pt(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=pt(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+cn(e),o=-t.scrollTop;return E(n).direction===`rtl`&&(a+=pt(e.clientWidth,n.clientWidth)-r),{width:r,height:i,x:a,y:o}}var pn=25;function mn(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=w(e),a=g(e),o=i.visualViewport,s=a.clientWidth,c=a.clientHeight,l=0,u=0;if(o){let e=!N()||t===`fixed`;r?e||(l=-o.offsetLeft,u=-o.offsetTop):(s=o.width,c=o.height,e&&(l=o.offsetLeft,u=o.offsetTop))}if(cn(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=pn&&(s-=o)}return{width:s,height:c,x:l,y:u}}function hn(e,t){let n=sn(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=nn(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function gn(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=mn(e,n,t);else if(t===`document`)r=fn(g(e));else if(y(t))r=hn(t,n);else{let n=an(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return It(r)}function _n(e,t){let n=t.get(e);if(n)return n;let r=v(e,[],!1).filter(e=>y(e)&&j(e)!==`body`),i=null,a=E(e).position===`fixed`,o=a?D(e):e;for(;y(o)&&!M(o);){let e=E(o),t=b(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=D(o)}return t.set(e,r),r}function vn(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e,o=[...n===`clippingAncestors`?i(t)?[]:_n(t,this._c):[].concat(n),r],s=gn(t,o[0],a),c=s.top,l=s.right,u=s.bottom,d=s.left;for(let e=1;e<o.length;e++){let n=gn(t,o[e],a);c=pt(n.top,c),l=ft(n.right,l),u=ft(n.bottom,u),d=pt(n.left,d)}return{width:l-d,height:u-c,x:d,y:c}}function yn(e){let{width:t,height:n}=en(e);return{width:t,height:n}}function bn(e,t,n){let r=m(t),i=g(t),a=n===`fixed`,o=sn(e,!0,a,t),s={scrollLeft:0,scrollTop:0},c=gt(0);if((r||!a)&&((j(t)!==`body`||h(i))&&(s=_(t)),r)){let e=sn(t,!0,a,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}!r&&i&&(c.x=cn(i));let l=i&&!r&&!a?ln(i,s):gt(0);return{x:o.left+s.scrollLeft-c.x-l.x,y:o.top+s.scrollTop-c.y-l.y,width:o.width,height:o.height}}function xn(e){return E(e).position===`static`}function Sn(e,t){if(!m(e)||E(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return g(e)===n&&(n=n.ownerDocument.body),n}function Cn(e,t){let n=w(e);if(i(e))return n;if(!m(e)){let t=D(e);for(;t&&!M(t);){if(y(t)&&!xn(t))return t;t=D(t)}return n}let r=Sn(e,t);for(;r&&d(r)&&xn(r);)r=Sn(r,t);return r&&M(r)&&xn(r)&&!b(r)?n:r||k(e)||n}var wn=async function(e){let t=this.getOffsetParent||Cn,n=this.getDimensions,r=await n(e.floating);return{reference:bn(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function Tn(e){return E(e).direction===`rtl`}var En={convertOffsetParentRelativeRectToViewportRelativeRect:un,getDocumentElement:g,getClippingRect:vn,getOffsetParent:Cn,getElementRects:wn,getClientRects:dn,getDimensions:yn,getScale:nn,isElement:y,isRTL:Tn};function Dn(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function On(e,t,n){let r=null,i,a=g(e);function o(){var e;clearTimeout(i),(e=r)==null||e.disconnect(),r=null}function s(n,c){n===void 0&&(n=!1),c===void 0&&(c=1),o();let l=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(n||t(),!f||!p)return;let m=ht(d),h=ht(a.clientWidth-(u+f)),g=ht(a.clientHeight-(d+p)),_=ht(u),v={rootMargin:-m+`px `+-h+`px `+-g+`px `+-_+`px`,threshold:pt(0,ft(1,c))||1},y=!0;function b(t){let n=t[0].intersectionRatio;if(!Dn(l,e.getBoundingClientRect()))return s();if(n!==c){if(!y)return s();n?s(!1,n):i=setTimeout(()=>{s(!1,1e-7)},1e3)}y=!1}try{r=new IntersectionObserver(b,{...v,root:a.ownerDocument})}catch{r=new IntersectionObserver(b,v)}r.observe(e)}let c=w(e),l=()=>s(n);return c.addEventListener(`resize`,l),s(!0),()=>{c.removeEventListener(`resize`,l),o()}}function kn(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=tn(e),u=i||a?[...l?v(l):[],...t?v(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?On(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?sn(e):null;c&&g();function g(){let t=sn(e);h&&!Dn(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var An=Xt,jn=Zt,Mn=qt,Nn=$t,Pn=Qt,Fn=(e,t,n)=>{let r=new Map,i=n??{},a={...En,...i.platform,_c:r};return Kt(e,t,{...i,platform:a})},In=e(u(),1),Ln=typeof document<`u`?Z.useLayoutEffect:function(){};function Rn(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e==`function`&&e.toString()===t.toString())return!0;let n,r,i;if(e&&t&&typeof e==`object`){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Rn(e[r],t[r]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,i[r]))return!1;for(r=n;r--!==0;){let n=i[r];if(!(n===`_owner`&&e.$$typeof)&&!Rn(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function zn(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Bn(e,t){let n=zn(e);return Math.round(t*n)/n}function Vn(e){let t=Z.useRef(e);return Ln(()=>{t.current=e}),t}function Hn(e){e===void 0&&(e={});let{placement:t=`bottom`,strategy:n=`absolute`,middleware:r=[],platform:i,elements:{reference:a,floating:o}={},transform:s=!0,whileElementsMounted:c,open:l}=e,[u,d]=Z.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=Z.useState(r);Rn(f,r)||p(r);let[m,h]=Z.useState(null),[g,_]=Z.useState(null),v=Z.useCallback(e=>{e!==S.current&&(S.current=e,h(e))},[]),y=Z.useCallback(e=>{e!==C.current&&(C.current=e,_(e))},[]),b=a||m,x=o||g,S=Z.useRef(null),C=Z.useRef(null),w=Z.useRef(u),T=c!=null,E=Vn(c),D=Vn(i),O=Vn(l),k=Z.useCallback(()=>{if(!S.current||!C.current)return;let e={placement:t,strategy:n,middleware:f};D.current&&(e.platform=D.current),Fn(S.current,C.current,e).then(e=>{let t={...e,isPositioned:O.current!==!1};A.current&&!Rn(w.current,t)&&(w.current=t,In.flushSync(()=>{d(t)}))})},[f,t,n,D,O]);Ln(()=>{l===!1&&w.current.isPositioned&&(w.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[l]);let A=Z.useRef(!1);Ln(()=>(A.current=!0,()=>{A.current=!1}),[]),Ln(()=>{if(b&&(S.current=b),x&&(C.current=x),b&&x){if(E.current)return E.current(b,x,k);k()}},[b,x,k,E,T]);let j=Z.useMemo(()=>({reference:S,floating:C,setReference:v,setFloating:y}),[v,y]),M=Z.useMemo(()=>({reference:b,floating:x}),[b,x]),N=Z.useMemo(()=>{let e={position:n,left:0,top:0};if(!M.floating)return e;let t=Bn(M.floating,u.x),r=Bn(M.floating,u.y);return s?{...e,transform:`translate(`+t+`px, `+r+`px)`,...zn(M.floating)>=1.5&&{willChange:`transform`}}:{position:n,left:t,top:r}},[n,s,M.floating,u.x,u.y]);return Z.useMemo(()=>({...u,update:k,refs:j,elements:M,floatingStyles:N}),[u,k,j,M,N])}var Un=(e,t)=>{let n=An(e);return{name:n.name,fn:n.fn,options:[e,t]}},Wn=(e,t)=>{let n=jn(e);return{name:n.name,fn:n.fn,options:[e,t]}},Gn=(e,t)=>({fn:Pn(e).fn,options:[e,t]}),Kn=(e,t)=>{let n=Mn(e);return{name:n.name,fn:n.fn,options:[e,t]}},qn=(e,t)=>{let n=Nn(e);return{name:n.name,fn:n.fn,options:[e,t]}},Jn=ot();function Yn(e){let t=Z.useCallback(t=>e===void 0?n:e.subscribeStore(t),[e]),r=Z.useCallback(()=>e===void 0?void 0:e.store,[e]);return(0,Jn.useSyncExternalStore)(t,r,()=>e?.serverStore)}function Xn(e){return Zn(e,e.rootContext)}function Zn(e,t){let{nodeId:n,externalTree:r}=e,i=t.useState(`referenceElement`),a=t.useState(`floatingElement`),o=t.useState(`domReferenceElement`),s=t.useState(`open`),c=t.useState(`floatingId`),[l,u]=Z.useState(null),[d,f]=Z.useState(void 0),[p,m]=Z.useState(void 0),h=Z.useRef(null),g=oe(r),_=Z.useMemo(()=>({reference:i,floating:a,domReference:o}),[i,a,o]),v=Hn({...e,elements:{..._,...l&&{reference:l}}}),b=y(d)?d:null,x=p===void 0?t.state.floatingElement:p;t.useSyncedValue(`referenceElement`,d??null),t.useSyncedValue(`domReferenceElement`,d===void 0?o:b),t.useSyncedValue(`floatingElement`,x);let S=Z.useCallback(e=>{let t=y(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;u(t),v.refs.setReference(t)},[v.refs]),C=Z.useCallback(e=>{(y(e)||e===null)&&(h.current=e,f(e)),(y(v.refs.reference.current)||v.refs.reference.current===null||e!==null&&!y(e))&&v.refs.setReference(e)},[v.refs,f]),w=Z.useCallback(e=>{m(e),v.refs.setFloating(e)},[v.refs]),T=Z.useMemo(()=>({...v.refs,setReference:C,setFloating:w,setPositionReference:S,domReference:h}),[v.refs,C,w,S]),E=Z.useMemo(()=>({...v.elements,domReference:o}),[v.elements,o]),D=Z.useMemo(()=>({...v,dataRef:t.context.dataRef,open:s,onOpenChange:t.setOpen,events:t.context.events,floatingId:c,refs:T,elements:E,nodeId:n,rootStore:t}),[v,T,E,n,t,s,c]);return O(()=>{o&&(h.current=o)},[o]),O(()=>{t.context.dataRef.current.floatingContext=D;let e=g?.nodesRef.current.find(e=>e.id===n);e&&(e.context=D)}),Z.useMemo(()=>({...v,context:D,refs:T,elements:E,rootStore:t}),[v,T,E,D,t])}var Qn=class e{constructor(){this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new Xe,this.restTimeout=new Xe,this.handleCloseOptions=void 0}static create(){return new e}dispose=()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()};disposeEffect=()=>this.dispose},$n=new WeakMap;function er(e){if(!e.performedPointerEventsMutation)return;let t=e.pointerEventsScopeElement;t&&$n.get(t)===e&&(e.pointerEventsScopeElement?.style.removeProperty(`pointer-events`),e.pointerEventsReferenceElement?.style.removeProperty(`pointer-events`),e.pointerEventsFloatingElement?.style.removeProperty(`pointer-events`),$n.delete(t)),e.performedPointerEventsMutation=!1,e.pointerEventsScopeElement=null,e.pointerEventsReferenceElement=null,e.pointerEventsFloatingElement=null}function tr(e,t){let{scopeElement:n,referenceElement:r,floatingElement:i}=t,a=$n.get(n);a&&a!==e&&er(a),er(e),e.performedPointerEventsMutation=!0,e.pointerEventsScopeElement=n,e.pointerEventsReferenceElement=r,e.pointerEventsFloatingElement=i,$n.set(n,e),n.style.pointerEvents=`none`,r.style.pointerEvents=`auto`,i.style.pointerEvents=`auto`}function nr(e){let t=e.context.dataRef.current,n=c(()=>t.hoverInteractionState??Qn.create()).current;return t.hoverInteractionState||=n,tt(t.hoverInteractionState.disposeEffect),t.hoverInteractionState}function rr(e,t={}){let{enabled:n=!0,closeDelay:r=0,nodeId:i}=t,a=`rootStore`in e?e.rootStore:e,o=a.useState(`open`),s=a.useState(`floatingElement`),c=a.useState(`domReferenceElement`),{dataRef:l}=a.context,u=oe(),d=H(),f=nr(a),p=Ze(),m=x(()=>Bt(l.current.openEvent?.type,f.interactedInside)),h=x(()=>Vt(l.current.openEvent?.type)),g=x(()=>{er(f)});O(()=>{o||(f.pointerType=void 0,f.restTimeoutPending=!1,f.interactedInside=!1,g())},[o,f,g]),Z.useEffect(()=>g,[g]),O(()=>{if(n&&o&&f.handleCloseOptions?.blockPointerEvents&&h()&&y(c)&&s){let e=c,t=s,n=Ye(s),r=u?.nodesRef.current.find(e=>e.id===d)?.context?.elements.floating;r&&(r.style.pointerEvents=``);let i=f.pointerEventsScopeElement===t?null:f.pointerEventsScopeElement,a=r===t?null:r,o=f.handleCloseOptions?.getScope?.()??i??a??e.closest(`[data-rootownerid]`)??n.body;return tr(f,{scopeElement:o,referenceElement:e,floatingElement:t}),()=>{g()}}},[n,o,c,s,f,h,u,d,g]),Z.useEffect(()=>{if(!n)return;function e(){return!!(u&&d&&ye(u.nodesRef.current,d).length>0)}function t(e){let t=Rt(r,`close`,f.pointerType),n=()=>{a.setOpen(!1,J($e,e)),u?.events.emit(`floating.closed`,e)};t?f.openChangeTimeout.start(t,n):(f.openChangeTimeout.clear(),n())}function o(e){let t=Qe(e);if(!ze(t)){f.interactedInside=!1;return}f.interactedInside=t?.closest(`[aria-haspopup]`)!=null}function c(){f.openChangeTimeout.clear(),p.clear(),u?.events.off(`floating.closed`,v),g()}function _(n){if(e()&&u){u.events.on(`floating.closed`,v);return}if(je(n.relatedTarget,a.context.triggerElements))return;let r=l.current.floatingContext?.nodeId??i,o=n.relatedTarget;if(!(u&&r&&y(o)&&ye(u.nodesRef.current,r,!1).some(e=>q(e.context?.elements.floating,o)))){if(f.handler){f.handler(n);return}g(),h()&&!m()&&t(n)}}function v(t){u&&d&&!e()&&p.start(0,()=>{u.events.off(`floating.closed`,v),a.setOpen(!1,J($e,t)),u.events.emit(`floating.closed`,t)})}let b=s;return de(b&&B(b,`mouseenter`,c),b&&B(b,`mouseleave`,_),b&&B(b,`pointerdown`,o,!0),()=>{u?.events.off(`floating.closed`,v)})},[n,s,a,l,r,i,h,m,g,f,u,d,p])}var ir={current:null};function ar(e,t={}){let{enabled:n=!0,delay:r=0,handleClose:i=null,mouseOnly:a=!1,restMs:o=0,move:s=!0,triggerElementRef:c=ir,externalTree:l,isActiveTrigger:u=!0,getHandleCloseContext:d,isClosing:f,shouldOpen:p,guardStaleOpen:m=!1}=t,h=`rootStore`in e?e.rootStore:e,{dataRef:g,events:_}=h.context,v=oe(l),b=nr(h),S=Z.useRef(!1),C=F(i),w=F(r),T=F(o),E=F(n),D=F(p),O=F(f),k=x(()=>Bt(g.current.openEvent?.type,b.interactedInside)),A=x(()=>D.current?.()!==!1),j=x((e,t,n)=>{let r=h.context.triggerElements;if(r.hasElement(t))return!e||!q(e,t);if(!y(n))return!1;let i=n;return r.hasMatchingElement(e=>q(e,i))&&(!e||!q(e,i))}),M=x(()=>{b.handler&&=(Ye(h.select(`domReferenceElement`)).removeEventListener(`mousemove`,b.handler),void 0)}),N=x(()=>{er(b)});return u&&(b.handleCloseOptions=i?.__options),Z.useEffect(()=>M,[M]),Z.useEffect(()=>{if(!n)return;function e(e){e.open?S.current=!1:(S.current=e.reason===$e,M(),b.openChangeTimeout.clear(),b.restTimeout.clear(),b.blockMouseMove=!0,b.restTimeoutPending=!1)}return _.on(`openchange`,e),()=>{_.off(`openchange`,e)}},[n,_,b,M]),Z.useEffect(()=>{if(!n)return;function e(e,t=!0){let n=Rt(w.current,`close`,b.pointerType);n?b.openChangeTimeout.start(n,()=>{h.setOpen(!1,J($e,e)),v?.events.emit(`floating.closed`,e)}):t&&(b.openChangeTimeout.clear(),h.setOpen(!1,J($e,e)),v?.events.emit(`floating.closed`,e))}let t=c.current??(u?h.select(`domReferenceElement`):null);if(!y(t))return;function r(e){if(b.openChangeTimeout.clear(),b.blockMouseMove=!1,a&&!se(b.pointerType))return;let t=zt(T.current),n=Rt(w.current,`open`,b.pointerType),r=Qe(e),i=e.currentTarget??null,o=h.select(`domReferenceElement`),s=i;if(y(r)&&!h.context.triggerElements.hasElement(r)){for(let e of h.context.triggerElements.elements())if(q(e,r)){s=e;break}}y(i)&&y(o)&&!h.context.triggerElements.hasElement(i)&&q(i,o)&&(s=o);let c=s!=null&&j(o,s,r),l=h.select(`open`),u=O.current?.()??h.select(`transitionStatus`)===`ending`,d=!l&&u&&S.current,f=!c&&y(s)&&y(o)&&q(o,s)&&d,p=t>0&&!n,m=c&&(l||d)||f,g=!l||c;if(m){A()&&h.setOpen(!0,J($e,e,s));return}p||(n?b.openChangeTimeout.start(n,()=>{g&&A()&&h.setOpen(!0,J($e,e,s))}):g&&A()&&h.setOpen(!0,J($e,e,s)))}function i(t){if(k()){N();return}M();let n=h.select(`domReferenceElement`),r=Ye(n);b.restTimeout.clear(),b.restTimeoutPending=!1;let i=g.current.floatingContext??d?.();if(!je(t.relatedTarget,h.context.triggerElements)){if(C.current&&i){h.select(`open`)||b.openChangeTimeout.clear();let n=c.current;b.handler=C.current({...i,tree:v,x:t.clientX,y:t.clientY,onClose(){N(),M(),E.current&&!k()&&n===h.select(`domReferenceElement`)&&e(t,!0)}}),r.addEventListener(`mousemove`,b.handler),b.handler(t);return}(b.pointerType!==`touch`||!q(h.select(`floatingElement`),t.relatedTarget))&&e(t)}}function o(e){q(t,e.relatedTarget)||(b.openChangeTimeout.clear(),b.restTimeout.clear(),b.restTimeoutPending=!1)}let l=m?B(t,`mouseout`,o):void 0;return s?de(B(t,`mousemove`,r,{once:!0}),B(t,`mouseenter`,r),B(t,`mouseleave`,i),l):de(B(t,`mouseenter`,r),B(t,`mouseleave`,i),l)},[M,N,g,w,h,n,C,b,u,j,k,a,s,T,c,v,E,d,O,A,m]),Z.useMemo(()=>{if(!n)return;function e(e){b.pointerType=e.pointerType}return{onPointerDown:e,onPointerEnter:e,onMouseMove(e){let{nativeEvent:t}=e,n=e.currentTarget,r=h.select(`domReferenceElement`),i=h.select(`open`),o=j(r,n,e.target);if(a&&!se(b.pointerType))return;if(i&&o&&b.handleCloseOptions?.blockPointerEvents){let e=h.select(`floatingElement`);if(e){let t=b.handleCloseOptions?.getScope?.()??n.ownerDocument.body;tr(b,{scopeElement:t,referenceElement:n,floatingElement:e})}}let s=zt(T.current);if(i&&!o||s===0||!o&&b.restTimeoutPending&&e.movementX**2+e.movementY**2<2)return;b.restTimeout.clear();function c(){if(b.restTimeoutPending=!1,k())return;let e=h.select(`open`);!b.blockMouseMove&&(!e||o)&&A()&&h.setOpen(!0,J($e,t,n))}b.pointerType===`touch`?In.flushSync(()=>{c()}):o&&i?c():(b.restTimeoutPending=!0,b.restTimeout.start(s,c))}}},[n,b,k,j,a,h,T,A])}var or=.1,sr=or*or,Q=.5;function cr(e,t,n,r,i,a){return r>=t!=a>=t&&e<=(i-n)*(t-r)/(a-r)+n}function lr(e,t,n,r,i,a,o,s,c,l){let u=!1;return cr(e,t,n,r,i,a)&&(u=!u),cr(e,t,i,a,o,s)&&(u=!u),cr(e,t,o,s,c,l)&&(u=!u),cr(e,t,c,l,n,r)&&(u=!u),u}function ur(e,t,n){return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height}function dr(e,t,n,r,i,a){return e>=Math.min(n,i)&&e<=Math.max(n,i)&&t>=Math.min(r,a)&&t<=Math.max(r,a)}function fr(e={}){let{blockPointerEvents:t=!1}=e,n=new Xe,r=({x:e,y:t,placement:r,elements:i,onClose:a,nodeId:o,tree:s})=>{let c=r?.split(`-`)[0],l=!1,u=null,d=null,f=typeof performance<`u`?performance.now():0;function p(e,t){let n=performance.now(),r=n-f;if(u===null||d===null||r===0)return u=e,d=t,f=n,!1;let i=e-u,a=t-d,o=i*i+a*a,s=r*r*sr;return u=e,d=t,f=n,o<s}function m(){n.clear(),a()}return function(r){n.clear();let a=i.domReference,u=i.floating;if(!a||!u||c==null||e==null||t==null)return;let{clientX:d,clientY:f}=r,h=Qe(r),g=r.type===`mouseleave`,_=q(u,h),v=q(a,h);if(_&&(l=!0,!g))return;if(v&&(l=!1,!g)){l=!0;return}if(g&&y(r.relatedTarget)&&q(u,r.relatedTarget))return;function b(){return!!(s&&ye(s.nodesRef.current,o).length>0)}function x(){b()||m()}if(b())return;let S=a.getBoundingClientRect(),C=u.getBoundingClientRect(),w=e>C.right-C.width/2,T=t>C.bottom-C.height/2,E=C.width>S.width,D=C.height>S.height,O=(E?S:C).left,k=(E?S:C).right,A=(D?S:C).top,j=(D?S:C).bottom;if(c===`top`&&t>=S.bottom-1||c===`bottom`&&t<=S.top+1||c===`left`&&e>=S.right-1||c===`right`&&e<=S.left+1){x();return}let M=!1;switch(c){case`top`:M=dr(d,f,O,S.top+1,k,C.bottom-1);break;case`bottom`:M=dr(d,f,O,C.top+1,k,S.bottom-1);break;case`left`:M=dr(d,f,C.right-1,j,S.left+1,A);break;case`right`:M=dr(d,f,S.right-1,j,C.left+1,A)}if(M)return;if(l&&!ur(d,f,S)){x();return}if(!g&&p(d,f)){x();return}let N=!1;switch(c){case`top`:{let n=E?Q/2:Q*4,r=E||w?e+n:e-n,i=E?e-n:w?e+n:e-n,a=t+Q+1,o=w||E?C.bottom-Q:C.top,s=w?E?C.bottom-Q:C.top:C.bottom-Q;N=lr(d,f,r,a,i,a,C.left,o,C.right,s);break}case`bottom`:{let n=E?Q/2:Q*4,r=E||w?e+n:e-n,i=E?e-n:w?e+n:e-n,a=t-Q,o=w||E?C.top+Q:C.bottom,s=w?E?C.top+Q:C.bottom:C.top+Q;N=lr(d,f,r,a,i,a,C.left,o,C.right,s);break}case`left`:{let n=D?Q/2:Q*4,r=D||T?t+n:t-n,i=D?t-n:T?t+n:t-n,a=e+Q+1,o=T||D?C.right-Q:C.left,s=T?D?C.right-Q:C.left:C.right-Q;N=lr(d,f,o,C.top,s,C.bottom,a,r,a,i);break}case`right`:{let n=D?Q/2:Q*4,r=D||T?t+n:t-n,i=D?t-n:T?t+n:t-n,a=e-Q,o=T||D?C.left+Q:C.right,s=T?D?C.left+Q:C.right:C.left+Q;N=lr(d,f,a,r,a,i,o,C.top,s,C.bottom);break}}N?l||n.start(40,x):x()}};return r.__options={...e,blockPointerEvents:t},r}var pr=Z.createContext(void 0);function mr(e){let t=Z.useContext(pr);if(t===void 0&&!e)throw Error(l(47));return t}var hr={...ke,disabled:e=>e.disabled,instantType:e=>e.instantType,openMethod:e=>e.openMethod,openChangeReason:e=>e.openChangeReason,modal:e=>e.modal,focusManagerModal:e=>e.focusManagerModal,stickIfOpen:e=>e.stickIfOpen,titleElementId:e=>e.titleElementId,descriptionElementId:e=>e.descriptionElementId,openOnHover:e=>e.openOnHover,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin},gr=class extends L{constructor(e,t,n){let r=new Se;super(_r(e,r,t,n),vr(r),hr)}setOpen=(e,t)=>{let n=t.reason===$e,r=t.reason===`trigger-press`&&t.event.detail===0,i=!e&&(t.reason===`escape-key`||t.reason==null),a=Ve(t),o=this.select(`activeTriggerId`);if(!e&&t.reason===`close-press`&&t.trigger==null&&o!=null&&(t.trigger=this.context.triggerElements.getById(o)??this.select(`activeTriggerElement`)??void 0),this.context.onOpenChange?.(e,t),t.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(e,t);let s=()=>{let n=ge(this.state,e,t.trigger,a());n.openChangeReason=t.reason,this.update(n)};n?(this.set(`stickIfOpen`,!0),this.context.stickIfOpenTimeout.start(500,()=>{this.set(`stickIfOpen`,!1)}),In.flushSync(s)):s();let c;r?c=`click`:i?c=`dismiss`:t.reason===`focus-out`&&(c=`focus`),this.set(`instantType`,c)}};function _r(e,t,n,r=!1){let i={...Ne(t,n,r),disabled:!1,modal:!1,focusManagerModal:!1,instantType:void 0,openMethod:null,openChangeReason:null,titleElementId:void 0,descriptionElementId:void 0,stickIfOpen:!0,openOnHover:!1,closeDelay:0,adaptiveOrigin:void 0,...e};return i.open&&e?.mounted===void 0&&(i.mounted=!0),i}function vr(e){return{popupRef:Z.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:Z.createRef(),beforeContentFocusGuardRef:Z.createRef(),stickIfOpenTimeout:new Xe,triggerElements:e}}var $=s(),yr=ue(function({props:e}){let{children:t,open:n,defaultOpen:r=!1,onOpenChange:i,onOpenChangeComplete:a,modal:o=!1,handle:s,triggerId:c,defaultTriggerId:l=null}=e,u=xr(s,{modal:o,open:r,openProp:n,activeTriggerId:l,triggerIdProp:c});u.useControlledProp(`openProp`,n),u.useControlledProp(`triggerIdProp`,c);let d=u.useState(`open`),f=u.useState(`mounted`),p=u.useState(`payload`);u.useContextCallback(`onOpenChange`,i),u.useContextCallback(`onOpenChangeComplete`,a),le(u,d),Ue(u);let{forceUnmount:m}=W(d,u,()=>{u.update({stickIfOpen:!0,openChangeReason:null})});u.useSyncedValues({modal:o}),Z.useEffect(()=>{d||u.context.stickIfOpenTimeout.clear()},[u,d]),Z.useImperativeHandle(e.actionsRef,()=>({unmount:m,close:()=>u.setOpen(!1,J(et))}),[m,u]);let h=d||f;return(0,$.jsxs)(pr.Provider,{value:u,children:[s&&(0,$.jsx)(me,{handle:s,store:u}),h&&(0,$.jsx)(Sr,{store:u,modal:o}),typeof t==`function`?t({payload:p}):t]})});function br(e){return mr(!0)?(0,$.jsx)(yr,{props:e}):(0,$.jsx)(Te,{children:(0,$.jsx)(yr,{props:e})})}function xr(e,t){let n=He((e,n)=>new gr(t,e,n));return Z.useEffect(()=>n.context.stickIfOpenTimeout.disposeEffect(),[n]),n}function Sr({store:e,modal:t}){let n=e.useState(`floatingRootContext`),r=U(n,{outsidePressEvent:{mouse:t===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}}),i=r.reference,a=r.floating;return I(e,{activeTriggerProps:i,inactiveTriggerProps:i,popupProps:a}),null}function Cr(e,t){let n=Z.useRef(null);function r(t){In.flushSync(()=>{e.setOpen(!1,J(Je,t.nativeEvent,t.currentTarget))}),pe(n.current)?.focus()}function i(n){let r=e.select(`positionerElement`);if(r&&K(n,r))e.context.beforeContentFocusGuardRef.current?.focus();else{In.flushSync(()=>{e.setOpen(!1,J(Je,n.nativeEvent,n.currentTarget))});let i=G(e.context.triggerFocusTargetRef.current||t.current);for(;i!==null&&q(r,i);){let e=i;if(i=re(i),i===e)break}i?.focus()}}return{preFocusGuardRef:n,handlePreFocusGuardFocus:r,handleFocusTargetFocus:i}}function wr(e){let t=Z.useRef(``),n=Z.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:Z.useCallback(n=>{if(n.detail===0){e(n,`keyboard`);return}`pointerType`in n?e(n,n.pointerType):e(n,t.current),t.current=``},[e]),onPointerDown:n}}function Tr(e,t){let{onClick:n,onPointerDown:r}=wr(x((n,r)=>{(typeof e==`function`?e():e)||t(r||(_e?`touch`:``))}));return Z.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}var Er=fe(function(e,t){let{render:n,className:r,style:i,disabled:o=!1,nativeButton:s=!0,handle:c,payload:u,openOnHover:d=!1,delay:f=300,closeDelay:p=0,id:m,...h}=e,g=mr(!0),_=Yn(c)??g;if(!_)throw Error(l(74));let v=qe(m),y=_.useState(`isTriggerActive`,v),b=_.useState(`floatingRootContext`),x=_.useState(`isOpenedByTrigger`,v),S=_.useState(`triggerPopupId`,v),C=Z.useRef(null),{registerTrigger:w,isMountedByThisTrigger:E}=R(v,C,_,{payload:u,disabled:o,openOnHover:d,closeDelay:p}),D=_.useState(`openChangeReason`),O=_.useState(`stickIfOpen`),k=_.useState(`openMethod`),A=_.useState(`focusManagerModal`),j=ar(b,{enabled:!o&&d&&(k!==`touch`||D!==`trigger-press`),mouseOnly:!0,move:!1,handleClose:fr(),restMs:f,delay:{close:p},triggerElementRef:C,isActiveTrigger:y,isClosing:()=>_.select(`transitionStatus`)===`ending`}),M=Ht(b,{stickIfOpen:O}),N=Tr(()=>_.select(`open`),e=>{_.set(`openMethod`,e)}),P=_.useState(`triggerProps`,E),{getButtonProps:ee,buttonRef:F}=T({disabled:o,native:s}),I={open(e){return e&&D===`trigger-press`?Me.open(e):Le.open(e)}},{preFocusGuardRef:L,handlePreFocusGuardFocus:z,handleFocusTargetFocus:te}=Cr(_,C),B=a(`button`,e,{state:{disabled:o,open:x},ref:[F,t,w,C],props:[M.reference,j,P,N,{[ne]:``,id:v,"aria-haspopup":`dialog`,"aria-expanded":x,"aria-controls":S},h,ee],stateAttributesMapping:I}),re=(0,$.jsx)(Z.Fragment,{children:B},v);return E&&!A?(0,$.jsxs)(Z.Fragment,{children:[(0,$.jsx)(Ge,{ref:L,onFocus:z}),re,(0,$.jsx)(Ge,{ref:_.context.triggerFocusTargetRef,onFocus:te})]}):re}),Dr=Z.createContext(void 0);function Or(){let e=Z.useContext(Dr);if(e===void 0)throw Error(l(45));return e}var kr=Z.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e;return mr().useState(`mounted`)||n?(0,$.jsx)(Dr.Provider,{value:n,children:(0,$.jsx)(z,{ref:t,...r})}):null}),Ar=Z.createContext(void 0);function jr(){let e=Z.useContext(Ar);if(!e)throw Error(l(46));return e}var Mr=Z.createContext(void 0);function Nr(){return Z.useContext(Mr)?.direction??`ltr`}var Pr=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0,offsetParent:d=`real`}=yt(e,t)||{};if(l==null)return{};let f=Ft(u),p={x:n,y:r},m=Ct(i),h=St(m),g=await o.getDimensions(l),_=m===`y`,v=_?`top`:`left`,y=_?`bottom`:`right`,b=_?`clientHeight`:`clientWidth`,x=a.reference[h]+a.reference[m]-p[m]-a.floating[h],S=p[m]-a.reference[m],C=d===`real`?await o.getOffsetParent?.(l):s.floating,w=s.floating[b]||a.floating[h];(!w||!await o.isElement?.(C))&&(w=s.floating[b]||a.floating[h]);let T=x/2-S/2,E=w/2-g[h]/2-1,D=Math.min(f[v],E),O=Math.min(f[y],E),k=D,A=w-g[h]-O,j=w/2-g[h]/2+T,M=vt(k,j,A),N=!c.arrow&&bt(i)!=null&&j!==M&&a.reference[h]/2-(j<k?D:O)-g[h]/2<0,P=N?j<k?j-k:j-A:0;return{[m]:p[m]+P,data:{[m]:M,centerOffset:j-M-P,...N&&{alignmentOffset:P}},reset:N}}}),Fr=(e,t)=>{let{name:n,fn:r}=Pr(e);return{name:n,fn:r,options:[e,t]}},Ir={name:`hide`,async fn(e){let{width:t,height:n,x:r,y:i}=e.rects.reference,a=t===0&&n===0&&r===0&&i===0,o=await e.platform.detectOverflow(e,{elementContext:`reference`});return{data:{referenceHidden:o.top-n>=0||o.right-t>=0||o.bottom-n>=0||o.left-t>=0||a}}}},Lr={sideX:`left`,sideY:`top`},Rr=`--available-width`,zr=`--available-height`,Br=`--anchor-width`,Vr=`--anchor-height`,Hr=`--transform-origin`,Ur=Rr,Wr=zr;function Gr(e,t,n){let r=e===`inline-start`||e===`inline-end`;return{top:`top`,right:r?n?`inline-start`:`inline-end`:`right`,bottom:`bottom`,left:r?n?`inline-end`:`inline-start`:`left`}[t]}function Kr(e,t,n){let{rects:r,placement:i}=e;return{side:Gr(t,Y(i),n),align:bt(i)||`center`,anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function qr(e){return Jr(e,Xn)}function Jr(e,t){let{anchor:n,positionMethod:r=`absolute`,side:i=`bottom`,sideOffset:a=0,align:o=`center`,alignOffset:s=0,collisionBoundary:c,collisionPadding:l=5,sticky:u=!1,arrowPadding:d=5,disableAnchorTracking:f=!1,inline:p,keepMounted:m=!1,floatingRootContext:h,mounted:g,collisionAvoidance:_,shift:v,nodeId:y,adaptiveOrigin:b,lazyFlip:S=!1,externalTree:C}=e,[T,E]=Z.useState(null);!g&&T!==null&&E(null);let D=_.side||`flip`,k=_.align||`flip`,A=_.fallbackAxisSide||`end`,j=v?.crossAxis??!1,M=v?.rootBoundary,N=typeof n==`function`?n:void 0,P=x(N),ee=N?P:n,I=F(n),L=F(g),R=Nr()===`rtl`,z=T||{top:`top`,right:`right`,bottom:`bottom`,left:`left`,"inline-end":R?`left`:`right`,"inline-start":R?`right`:`left`}[i],te=o===`center`?z:`${z}-${o}`,B=l;typeof B==`number`?B={top:B,right:B,bottom:B,left:B}:B&&={top:B.top||0,right:B.right||0,bottom:B.bottom||0,left:B.left||0};let ne=+(i===`bottom`),re=+(i===`top`),ie=+(i===`right`),ae=+(i===`left`),V={boundary:c===`clipping-ancestors`?`clippingAncestors`:c,padding:B},H=Z.useRef(null),U=F(a),oe=F(s),se=typeof a==`function`?0:a,ce=typeof s==`function`?0:s,W=[];p&&W.push(p),W.push(Un(e=>{let t=Kr(e,i,R),n=typeof U.current==`function`?U.current(t):U.current,r=typeof oe.current==`function`?oe.current(t):oe.current;return{mainAxis:n,crossAxis:r,alignmentAxis:r}},[se,ce,R,i]));let le=k===`none`&&D!==`shift`,ue=!le&&(u||j||D===`shift`),de=D===`none`?null:Kn({...V,padding:{top:B.top+1+ne,right:B.right+1+ae,bottom:B.bottom+1+re,left:B.left+1+ie},mainAxis:!j&&D===`flip`,crossAxis:k===`flip`&&`alignment`,fallbackAxisSideDirection:A}),fe=le?null:Wn({...V,rootBoundary:M,mainAxis:k!==`none`,crossAxis:ue,limiter:u||j?void 0:Gn(e=>{if(!H.current)return{};let{width:t,height:n}=H.current.getBoundingClientRect(),r=X(Y(e.placement)),i=r===`y`?t:n,a=r===`y`?B.left+B.right:B.top+B.bottom;return{offset:i/2+a/2}})},[V,u,j,M,B,k]);D===`shift`||k===`shift`||o===`center`?W.push(fe,de):W.push(de,fe),W.push(qn({...V,apply({elements:{floating:e},availableWidth:t,availableHeight:n,rects:r}){if(!L.current)return;let i=e.style;i.setProperty(Ur,`${t}px`),i.setProperty(Wr,`${n}px`);let a=w(e).devicePixelRatio||1,{x:o,y:s,width:c,height:l}=r.reference,u=(Math.round((o+c)*a)-Math.round(o*a))/a,d=(Math.round((s+l)*a)-Math.round(s*a))/a;i.setProperty(Br,`${u}px`),i.setProperty(Vr,`${d}px`)}}),Fr(e=>({element:H.current||Ye(e.elements.floating).createElement(`div`),padding:H.current?d:0,offsetParent:`floating`}),[d]),{name:`transformOrigin`,fn(e){let{elements:{floating:t},middlewareData:n,placement:r,platform:o,rects:s,y:c}=e,l=Y(r),u=bt(r),d=X(l)===`y`,f=H.current,p=typeof a==`function`?a(Kr(e,i,R)):a,m;m=!f&&u&&Math.abs(d?n.shift?.x||0:n.shift?.y||0)<=1?u===`start`===(d&&o.isRTL?.(t)===!0)?`100%`:`0%`:`${(d?n.arrow?.x||0:n.arrow?.y||0)+(d?f?.clientWidth||0:f?.clientHeight||0)/2}px`;let h=l===`top`||l===`left`?`calc(100% + ${p}px)`:`${-p}px`;return ue&&d&&Math.abs(n.shift?.y||0)>p&&(h=`${s.reference.y+s.reference.height/2-c}px`),t.style.setProperty(Hr,d?`${m} ${h}`:`${h} ${m}`),{}}},Ir,b),O(()=>{!g&&h&&h.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[g,h]);let pe=Z.useMemo(()=>({ancestorScroll:!f,elementResize:!f&&typeof ResizeObserver<`u`,layoutShift:!f&&typeof IntersectionObserver<`u`}),[f]),{refs:G,elements:K,x:me,y:he,middlewareData:ge,update:_e,placement:ve,context:ye,isPositioned:be,floatingStyles:xe}=t({rootContext:h,open:m?g:void 0,placement:te,middleware:W,strategy:r,whileElementsMounted:m?void 0:(...e)=>kn(...e,pe),nodeId:y,externalTree:C}),{sideX:Se,sideY:Ce}=ge.adaptiveOrigin||Lr,we=be?r:`fixed`,Te=Z.useMemo(()=>{let e;return e=be?b?{position:we,[Se]:me,[Ce]:he}:{...xe,position:we}:{position:we,top:0,left:0},e[Ur]=`100vw`,e[Wr]=`100vh`,be||(e.opacity=0),e},[b,we,Se,me,Ce,he,xe,be]),Ee=Z.useRef(null);O(()=>{if(!g)return;let e=I.current,t=typeof e==`function`?e():e,n=(Yr(t)?t.current:t)||null;n!==Ee.current&&(G.setPositionReference(n),Ee.current=n)},[g,G,ee,I]),Z.useEffect(()=>{if(!g)return;let e=I.current;typeof e!=`function`&&Yr(e)&&e.current!==Ee.current&&(G.setPositionReference(e.current),Ee.current=e.current)},[g,G,ee,I]),Z.useEffect(()=>{if(m&&g&&K.reference&&K.floating)return kn(K.reference,K.floating,_e,pe)},[m,g,K,_e,pe]);let De=Y(ve),Oe=Gr(i,De,R),ke=bt(ve)||`center`,Ae=!!ge.hide?.referenceHidden;O(()=>{S&&g&&be&&De!==z&&E(De)},[S,g,be,De,z]);let je=Z.useMemo(()=>({position:`absolute`,top:ge.arrow?.y,left:ge.arrow?.x}),[ge.arrow]),Me=ge.arrow?.centerOffset!==0;return Z.useMemo(()=>({positionerStyles:Te,arrowStyles:je,arrowRef:H,arrowUncentered:Me,side:Oe,align:ke,physicalSide:De,anchorHidden:Ae,refs:G,context:ye,isPositioned:be,update:_e}),[Te,je,H,Me,Oe,ke,De,Ae,G,ye,be,_e])}function Yr(e){return e!=null&&`current`in e}function Xr(e){return e===`starting`?ae:S}function Zr(e,t,{styles:n,transitionStatus:r,props:i,refs:o,hidden:s,inert:c=!1}){let l={...n};return c&&(l.pointerEvents=`none`),a(`div`,e,{state:t,ref:o,props:[{role:`presentation`,hidden:s,style:l},Xr(r),i],stateAttributesMapping:we})}var Qr=20;function $r(e,t,n,r){let[i,a]=Z.useState(!1);O(()=>{if(!e||!t||n==null){a(!1);return}let r=Ye(n).documentElement.clientWidth,i=n.offsetWidth;a(r>0&&i>0&&i>=r-Qr)},[e,t,n]),Be(e&&(!t||i),r)}var ei=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,anchor:a,positionMethod:o,side:s,align:c,sideOffset:l,alignOffset:u,collisionBoundary:d=`clipping-ancestors`,collisionPadding:f,arrowPadding:p,sticky:m,disableAnchorTracking:h=!1,collisionAvoidance:g=ce,..._}=e,v=mr(),y=Or(),b=V(),x=v.useState(`floatingRootContext`),S=v.useState(`mounted`),C=v.useState(`open`),w=v.useState(`openChangeReason`),T=v.useState(`activeTriggerElement`),E=v.useState(`modal`),D=v.useState(`openMethod`),k=v.useState(`positionerElement`),A=v.useState(`instantType`),j=v.useState(`transitionStatus`),M=v.useState(`adaptiveOrigin`),N=Z.useRef(null),P=ie(k),F=qr({anchor:a,floatingRootContext:x,positionMethod:o,mounted:S,side:s,sideOffset:l,align:c,alignOffset:u,arrowPadding:p,collisionBoundary:d,collisionPadding:f,sticky:m,disableAnchorTracking:h,keepMounted:y,nodeId:b,collisionAvoidance:g,adaptiveOrigin:M}),I=x.useState(`domReferenceElement`);O(()=>{let e=I,t=N.current;if(e&&(N.current=e),t&&e&&e!==t){v.set(`instantType`,void 0);let e=new AbortController;return P(()=>{v.set(`instantType`,`trigger-change`)},e.signal),()=>{e.abort()}}},[I,P,v]);let L=E===!0&&w!==`trigger-hover`;$r(C&&L,D===`touch`,k,T);let R=v.useStateSetter(`positionerElement`),z=Zr(e,{open:C,side:F.side,align:F.align,anchorHidden:F.anchorHidden,instant:A},{styles:F.positionerStyles,transitionStatus:j,props:_,refs:[t,R],hidden:!S,inert:!C});return(0,$.jsxs)(Ar.Provider,{value:F,children:[S&&L&&(0,$.jsx)(ve,{inert:be(!C),cutout:T}),(0,$.jsx)(ee,{id:b,children:z})]})}),ti=Z.createContext(void 0);function ni(e){let t=Z.useContext(ti);if(t===void 0&&!e)throw Error(l(69));return t}var ri=Z.createContext(void 0);function ii(){let[e,t]=Z.useState(0),n=x(()=>(t(e=>e+1),()=>{t(e=>Math.max(0,e-1))}));return{context:Z.useMemo(()=>({register:n}),[n]),hasClosePart:e>0}}var ai=Z.forwardRef(function(e,t){let{render:n,className:r,style:i,initialFocus:o,finalFocus:s,...c}=e,l=mr(),u=jr(),d=ni(!0)!=null,{context:f,hasClosePart:p}=ii(),h=l.useState(`open`),g=l.useState(`openMethod`),_=l.useState(`instantType`),v=l.useState(`transitionStatus`),y=l.useState(`popupProps`),b=l.useState(`titleElementId`),x=l.useState(`descriptionElementId`),S=l.useState(`modal`),C=l.useState(`mounted`),w=l.useState(`openChangeReason`),T=l.useState(`activeTriggerElement`),E=l.useState(`floatingRootContext`),D=E.useState(`floatingId`),O=l.useState(`disabled`),k=l.useState(`openOnHover`),A=l.useState(`closeDelay`);te({open:h,ref:l.context.popupRef,onComplete(){h&&l.context.onOpenChangeComplete?.(!0)}}),rr(E,{enabled:k&&!O,closeDelay:A});let j=o===void 0?We(l.context.popupRef):o,M=S!==!1&&p;l.useSyncedValue(`focusManagerModal`,M);let N=l.useStateSetter(`popupElement`),P={open:h,side:u.side,align:u.align,instant:_,transitionStatus:v},ee=a(`div`,e,{state:P,ref:[t,l.context.popupRef,N],props:[y,{id:D,role:`dialog`,...xe,"aria-labelledby":b,"aria-describedby":x,onKeyDown(e){d&&De.has(e.key)&&e.stopPropagation()}},Xr(v),c],stateAttributesMapping:he});return(0,$.jsx)(Ee,{context:E,openInteractionType:g,modal:M,disabled:!C||w===`trigger-hover`,initialFocus:j,returnFocus:s,restoreFocus:`popup`,previousFocusableElement:m(T)?T:void 0,nextFocusableElement:l.context.triggerFocusTargetRef,beforeContentFocusGuardRef:l.context.beforeContentFocusGuardRef,children:(0,$.jsx)(ri.Provider,{value:f,children:ee})})});async function oi(e=1,t=20,n=``,r=``,i=``,a,o,s=`startedAt`,c=`desc`){let l=new URLSearchParams({page:String(e),limit:String(t)});n.trim()&&l.set(`search`,n),r&&l.set(`method`,r),i&&l.set(`status`,i),a!==void 0&&l.set(`from`,String(a)),o!==void 0&&l.set(`to`,String(o)),l.set(`sortBy`,s),l.set(`sortDirection`,c);let u=await p(`/_devtools/api/requests?${l.toString()}`);if(!u.ok)throw Error(`Failed to fetch requests: ${u.status}`);return u.json()}function si(e){for(let t of[`email`,`name`,`username`,`id`]){let n=e?.[t];if(typeof n==`string`&&n.trim().length>0||typeof n==`number`&&Number.isFinite(n)||typeof n==`boolean`)return String(n)}return e?`Authenticated user`:void 0}function ci(e){switch(e.toUpperCase()){case`GET`:return`border-info/20 bg-info/10 text-info`;case`POST`:return`border-success/20 bg-success/10 text-success`;case`PUT`:return`border-warning/20 bg-warning/10 text-warning`;case`PATCH`:return`border-info/20 bg-info/10 text-info`;case`DELETE`:return`border-destructive/20 bg-destructive/10 text-destructive`;default:return`border-border bg-muted text-muted-foreground`}}function li(e){switch(e===void 0?void 0:Math.floor(e/100)){case 2:return`border-success/20 bg-success/10 text-success`;case 3:return`border-info/20 bg-info/10 text-info`;case 4:return`border-warning/20 bg-warning/10 text-warning`;case 5:return`border-destructive/20 bg-destructive/10 text-destructive`;default:return`border-border bg-muted text-muted-foreground`}}function ui(e){if(!e)return;let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}var di=[{value:`all`,label:`All time`},{value:`15m`,label:`Last 15 minutes`},{value:`1h`,label:`Last hour`},{value:`24h`,label:`Last 24 hours`},{value:`7d`,label:`Last 7 days`},{value:`custom`,label:`Custom`}];function fi(e,t,n,r){return e===`custom`?{from:ui(t),to:ui(n)}:e===`all`?{}:{from:r-{"15m":9e5,"1h":36e5,"24h":864e5,"7d":6048e5}[e],to:r}}function pi({onSelectRequest:e}){let[t,n]=(0,Z.useState)([]),[i,a]=(0,Z.useState)(1),[o,s]=(0,Z.useState)(``),[c,l]=(0,Z.useState)(``),[u,d]=(0,Z.useState)(``),[p,m]=(0,Z.useState)(`startedAt`),[h,g]=(0,Z.useState)(`desc`),[_,v]=(0,Z.useState)(`all`),[y,b]=(0,Z.useState)(``),[x,S]=(0,Z.useState)(``),[C,w]=(0,Z.useState)(!1),[T,E]=(0,Z.useState)(``),[D,O]=(0,Z.useState)(``),[k,j]=(0,Z.useState)(`all`),[M,N]=(0,Z.useState)(``),[P,ee]=(0,Z.useState)(``),[F,I]=(0,Z.useState)(null),[L,R]=(0,Z.useState)(null),[z,te]=(0,Z.useState)(!0),[B,ne]=(0,Z.useState)(!1),[re,ie]=(0,Z.useState)(null),ae=(0,Z.useRef)(t);ae.current=t;let[V,H]=(0,Z.useState)(null),[U,oe]=(0,Z.useState)(null),[se,ce]=(0,Z.useState)(!1),[W,le]=(0,Z.useState)(!1),ue=Number(!!c)+Number(!!u)+Number(_!==`all`);function de(){E(c),O(u),j(_),N(y),ee(x),I(null),w(!0)}function fe(){let e=ui(M),t=ui(P);if(k===`custom`&&M&&P&&e!==void 0&&t!==void 0&&e>t){I(`From must be earlier than or equal to To.`);return}l(T),d(D),v(k),b(k===`custom`?M:``),S(k===`custom`?P:``),a(1),I(null),w(!1)}function pe(){E(``),O(``),j(`all`),N(``),ee(``),l(``),d(``),v(`all`),b(``),S(``),a(1),I(null),w(!1)}function G(e){p===e?g(e=>e===`asc`?`desc`:`asc`):(m(e),g(`asc`)),a(1)}function K(e){return p===e?h===`asc`?`ascending`:`descending`:`none`}function me(e){return p===e?h===`asc`?(0,$.jsx)(ct,{"aria-hidden":`true`,className:`size-3.5`}):(0,$.jsx)(Ke,{"aria-hidden":`true`,className:`size-3.5`}):(0,$.jsx)(st,{"aria-hidden":`true`,className:`size-3.5 opacity-50`})}async function he(){if(!V||U!==null)return;let e=V.id;oe(e),ie(null);try{if(await Ce(e),n(t=>t.filter(t=>t.id!==e)),L){let e=Math.max(0,L.total-1),t=Math.ceil(e/L.limit);i>Math.max(t,1)&&a(Math.max(t,1)),R({...L,total:e,totalPages:t,hasMore:i<t})}H(null)}catch(e){ie(e instanceof Error?e.message:`Failed to delete request`)}finally{oe(null)}}async function ge(){if(!W){le(!0),ie(null);try{await Fe(),n([]),a(1),R({page:1,limit:20,total:0,totalPages:0,hasMore:!1}),ce(!1)}catch(e){ie(e instanceof Error?e.message:`Failed to clear history`)}finally{le(!1)}}}return(0,Z.useEffect)(()=>{let e=!0;async function t(){let t=ae.current.length===0;try{t?te(!0):ne(!0);let r=fi(_,y,x,Date.now()),a=await oi(i,20,o,c,u,r.from,r.to,p,h);e&&(n(a.data),R(a.pagination),ie(null))}catch(t){e&&ie(t instanceof Error?t.message:`Failed to load requests`)}finally{e&&(te(!1),ne(!1))}}t();let r=setInterval(()=>void t(),1e3);return()=>{e=!1,clearInterval(r)}},[i,o,c,u,_,y,x,p,h]),(0,$.jsxs)(`main`,{className:`p-6`,children:[(0,$.jsxs)(`div`,{className:`mb-6 flex flex-wrap items-start justify-between gap-4`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h1`,{className:`text-xl font-semibold`,children:`Requests`}),(0,$.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Inspect incoming requests and their execution.`})]}),(0,$.jsxs)(A,{variant:`outline`,size:`sm`,className:`text-destructive hover:text-destructive`,disabled:W||U!==null,onClick:()=>ce(!0),children:[W?(0,$.jsx)(it,{className:`animate-spin`}):(0,$.jsx)(Oe,{}),`Clear History`]})]}),(0,$.jsxs)(`div`,{className:`mb-4 flex flex-wrap items-center gap-3`,children:[(0,$.jsxs)(`div`,{className:`flex w-full max-w-md items-center gap-2`,children:[(0,$.jsxs)(`div`,{className:`relative flex-1`,children:[(0,$.jsx)(ut,{"aria-hidden":`true`,className:`pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,$.jsx)(nt,{className:`pl-8`,placeholder:`Search requests...`,value:o,onChange:e=>{s(e.target.value),a(1)}})]}),o&&(0,$.jsx)(A,{variant:`ghost`,size:`icon-sm`,"aria-label":`Clear search`,onClick:()=>{s(``),a(1)},children:(0,$.jsx)(dt,{})})]}),(0,$.jsxs)(br,{open:C,onOpenChange:e=>{e?de():(I(null),w(!1))},children:[(0,$.jsxs)(Er,{render:(0,$.jsx)(A,{variant:`outline`,size:`lg`,"aria-label":`Filters`,"aria-haspopup":`dialog`}),children:[(0,$.jsx)(lt,{}),`Filters`,ue>0&&(0,$.jsx)(`span`,{className:`ml-1 inline-flex min-w-5 items-center justify-center rounded-full bg-primary px-1.5 py-0.5 text-xs text-primary-foreground`,children:ue})]}),(0,$.jsx)(kr,{children:(0,$.jsx)(ei,{side:`bottom`,align:`start`,sideOffset:8,className:`z-50 max-w-[calc(100vw-2rem)]`,children:(0,$.jsx)(ai,{className:`w-[min(24rem,calc(100vw-2rem))] rounded-lg border bg-background p-4 text-foreground shadow-lg outline-none`,children:(0,$.jsxs)(`div`,{className:`space-y-4`,children:[(0,$.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,$.jsxs)(`label`,{className:`grid gap-1.5 text-sm font-medium`,children:[`Method`,(0,$.jsxs)(at,{"aria-label":`Method`,className:`font-normal`,value:T,onChange:e=>E(e.target.value),children:[(0,$.jsx)(`option`,{value:``,children:`All methods`}),[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`,`HEAD`,`OPTIONS`].map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))]})]}),(0,$.jsxs)(`label`,{className:`grid gap-1.5 text-sm font-medium`,children:[`Status`,(0,$.jsxs)(at,{"aria-label":`Status`,className:`font-normal`,value:D,onChange:e=>O(e.target.value),children:[(0,$.jsx)(`option`,{value:``,children:`All statuses`}),[200,201,204,301,302,304,400,401,403,404,409,422,429,500,502,503,504].map(e=>(0,$.jsx)(`option`,{value:e,children:e},e))]})]})]}),(0,$.jsxs)(`div`,{className:`space-y-3 border-t pt-4`,children:[(0,$.jsxs)(`label`,{className:`grid gap-1.5 text-sm font-medium`,children:[`Date range`,(0,$.jsx)(at,{"aria-label":`Date range`,className:`font-normal`,value:k,onChange:e=>{let t=e.target.value;j(t),t!==`custom`&&(N(``),ee(``)),I(null)},children:di.map(e=>(0,$.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),k===`custom`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Date and time (`,Intl.DateTimeFormat().resolvedOptions().timeZone,`)`]}),(0,$.jsxs)(`label`,{className:`grid gap-1.5 text-sm font-medium`,children:[`From`,(0,$.jsx)(`input`,{"aria-label":`From date and time`,type:`datetime-local`,className:`h-9 rounded-md border bg-background px-3 text-sm font-normal text-foreground`,value:M,onChange:e=>{N(e.target.value),I(null)}})]}),(0,$.jsxs)(`label`,{className:`grid gap-1.5 text-sm font-medium`,children:[`To`,(0,$.jsx)(`input`,{"aria-label":`To date and time`,type:`datetime-local`,className:`h-9 rounded-md border bg-background px-3 text-sm font-normal text-foreground`,value:P,onChange:e=>{ee(e.target.value),I(null)}})]})]}),F&&(0,$.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:F})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-t pt-4`,children:[(0,$.jsx)(A,{type:`button`,variant:`ghost`,onClick:pe,children:`Clear`}),(0,$.jsx)(A,{type:`button`,onClick:fe,children:`Apply`})]})]})})})})]}),L&&(0,$.jsxs)(`div`,{className:`ml-auto flex items-center gap-3 text-sm text-muted-foreground`,children:[(0,$.jsx)(`span`,{className:`whitespace-nowrap`,children:L.total===0?`No requests`:`Page ${L.page} of ${L.totalPages} · ${L.total} requests`}),(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(A,{variant:`outline`,size:`sm`,disabled:z||i<=1,onClick:()=>a(e=>Math.max(1,e-1)),children:`Previous`}),(0,$.jsx)(A,{variant:`outline`,size:`sm`,disabled:z||!L.hasMore,onClick:()=>a(e=>e+1),children:`Next`})]})]})]}),re&&t.length>0&&(0,$.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive/30 bg-destructive/5 p-3 text-sm text-destructive`,children:re}),B&&t.length>0&&(0,$.jsx)(`p`,{className:`mb-3 text-xs text-muted-foreground`,role:`status`,"aria-live":`polite`,children:`Refreshing requests…`}),(0,$.jsxs)(`div`,{className:`overflow-hidden rounded-md border ${B?`opacity-90 motion-safe:transition-opacity`:``}`,children:[(0,$.jsxs)(`table`,{className:`w-full text-sm`,"aria-busy":z||B,children:[(0,$.jsx)(`thead`,{className:`border-b bg-muted/40 text-left text-xs text-muted-foreground`,children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(`th`,{"aria-sort":K(`method`),className:`px-4 py-3 font-medium`,children:(0,$.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,className:`-ml-2 gap-1 uppercase`,"aria-label":`Sort by HTTP method, currently ${K(`method`)}`,onClick:()=>G(`method`),children:[`METHOD`,me(`method`)]})}),(0,$.jsx)(`th`,{"aria-sort":K(`path`),className:`px-4 py-3 font-medium`,children:(0,$.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,className:`-ml-2 gap-1 uppercase`,"aria-label":`Sort by path, currently ${K(`path`)}`,onClick:()=>G(`path`),children:[`PATH`,me(`path`)]})}),(0,$.jsx)(`th`,{"aria-sort":K(`statusCode`),className:`px-4 py-3 font-medium`,children:(0,$.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,className:`-ml-2 gap-1 uppercase`,"aria-label":`Sort by HTTP status, currently ${K(`statusCode`)}`,onClick:()=>G(`statusCode`),children:[`STATUS`,me(`statusCode`)]})}),(0,$.jsx)(`th`,{className:`px-4 py-3 font-medium`,children:`USER`}),(0,$.jsx)(`th`,{"aria-sort":K(`startedAt`),className:`px-4 py-3 font-medium`,children:(0,$.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,className:`-ml-2 gap-1 uppercase`,"aria-label":`Sort by request start time, currently ${K(`startedAt`)}`,onClick:()=>G(`startedAt`),children:[`STARTED AT`,me(`startedAt`)]})}),(0,$.jsx)(`th`,{"aria-sort":K(`durationMs`),className:`px-4 py-3 text-right font-medium`,children:(0,$.jsxs)(A,{type:`button`,variant:`ghost`,size:`sm`,className:`-mr-2 gap-1 uppercase`,"aria-label":`Sort by duration, currently ${K(`durationMs`)}`,onClick:()=>G(`durationMs`),children:[`DURATION`,me(`durationMs`)]})}),(0,$.jsx)(`th`,{className:`w-12 px-4 py-3`})]})}),(0,$.jsxs)(`tbody`,{children:[z&&t.length===0&&(0,$.jsx)(r,{}),t.map(t=>(0,$.jsxs)(`tr`,{className:`cursor-pointer border-b last:border-b-0 hover:bg-muted/40`,onClick:()=>e(t),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),e(t))},tabIndex:0,children:[(0,$.jsx)(`td`,{className:`px-4 py-3`,children:(0,$.jsx)(f,{className:ci(t.method),children:t.method})}),(0,$.jsx)(`td`,{className:`px-4 py-3 font-mono`,children:t.path}),(0,$.jsx)(`td`,{className:`px-4 py-3`,children:(0,$.jsx)(f,{className:li(t.statusCode),children:t.statusCode??`—`})}),(0,$.jsx)(`td`,{className:`max-w-48 px-4 py-3`,title:si(t.user),children:(0,$.jsx)(`span`,{className:`block truncate`,children:si(t.user)??`—`})}),(0,$.jsx)(`td`,{className:`px-4 py-3 font-mono whitespace-nowrap`,children:new Date(t.startedAt).toLocaleString()}),(0,$.jsx)(`td`,{className:`px-4 py-3 text-right font-mono`,children:t.durationMs===void 0?`—`:`${t.durationMs.toFixed(1)}ms`}),(0,$.jsx)(`td`,{className:`px-4 py-3 text-right`,children:(0,$.jsx)(A,{variant:`ghost`,size:`icon-sm`,"aria-label":`Delete ${t.method} ${t.path}`,disabled:U!==null||W,onClick:e=>{e.stopPropagation(),H(t)},children:U===t.id?(0,$.jsx)(it,{className:`animate-spin`}):(0,$.jsx)(Oe,{})})})]},t.id))]})]}),re&&t.length===0&&(0,$.jsx)(`div`,{className:`p-6 text-center text-sm text-destructive`,children:re}),!z&&!re&&t.length===0&&(0,$.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,children:`No requests captured yet.`})]}),(0,$.jsxs)(Re,{open:V!==null,onOpenChange:e=>{!e&&U===null&&H(null)},title:`Delete trace?`,description:V?`This permanently deletes ${V.method} ${V.path} and all associated request, response, execution, and error data.`:`This permanently deletes the selected trace and all of its captured data.`,children:[(0,$.jsx)(Ae,{render:(0,$.jsx)(A,{variant:`outline`,disabled:U!==null}),children:`Cancel`}),(0,$.jsxs)(A,{variant:`destructive`,disabled:U!==null,onClick:()=>void he(),children:[U!==null&&(0,$.jsx)(it,{className:`animate-spin`}),`Delete trace`]})]}),(0,$.jsxs)(Re,{open:se,onOpenChange:e=>{W||ce(e)},title:`Clear all history?`,description:`This permanently deletes all captured ServerDevTools history, including traces, spans, request and response data, execution data, and errors.`,children:[(0,$.jsx)(Ae,{render:(0,$.jsx)(A,{variant:`outline`,disabled:W}),children:`Cancel`}),(0,$.jsxs)(A,{variant:`destructive`,disabled:W,onClick:()=>void ge(),children:[W&&(0,$.jsx)(it,{className:`animate-spin`}),`Clear history`]})]})]})}export{pi as RequestsPage};
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));export{s as n,l as r,o as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,G as n,H as r,K as i,T as a,U as o,Y as s,t as c}from"./button-CXALLF_v.js";import{a as l,c as u,i as ee,lt as d,n as f,o as p,r as te,s as ne,t as m}from"./alert-dialog-DOm6Ua9Q.js";import{x as h}from"./index-B9G80X8M.js";var g=e(t(),1);async function re(){let e=await s(`/_devtools/api/config`);if(!e.ok)throw Error(`Failed to fetch dashboard config: ${e.status}`);return e.json()}async function ie(e){let t=await s(`/_devtools/api/traces/${encodeURIComponent(e)}/execution`);if(!t.ok)throw Error(`Failed to fetch execution tree: ${t.status}`);return t.json()}async function ae(e,t){let n=await s(`/_devtools/api/traces/${encodeURIComponent(e)}/http-client/${encodeURIComponent(t)}`);if(!n.ok)throw Error(`Failed to fetch HTTP client details: ${n.status}`);return n.json()}var _={get SERVER_DEVTOOLS_DEBUG(){return{}.SERVER_DEVTOOLS_DEBUG===`true`},DASHBOARD_API_ROUTES:{TRACES:`/_devtools/api/traces`,REQUESTS:`/_devtools/api/requests`,OVERVIEW:`/_devtools/api/overview`,CONFIG:`/_devtools/api/config`,AUTH:`/_devtools/api/auth`},DASHBOARD_CONTENT_TYPES:{".html":`text/html; charset=utf-8`,".js":`text/javascript; charset=utf-8`,".css":`text/css; charset=utf-8`,".svg":`image/svg+xml`,".woff2":`font/woff2`,".json":`application/json; charset=utf-8`},DASHBOARD_LOGIN_RATE_LIMIT:{POINTS:5,DURATION_SECONDS:900,BLOCK_SECONDS:900,MAX_TRACKED_KEYS:1e3},DASHBOARD_LOGIN_BODY_LIMIT_BYTES:8192,DASHBOARD_LOGIN_BODY_READ_TIMEOUT_MS:1e4,REQUEST_METHOD:{GET:`GET`,POST:`POST`,PUT:`PUT`,DELETE:`DELETE`,PATCH:`PATCH`},DEFAULT_FIELDS_TO_ENCRYPT:[`password`,`accessToken`,`refreshToken`,`authorization`,`cookie`],DEFAULT_SENSITIVE_HEADER_NAMES:[`authorization`,`proxy-authorization`,`cookie`,`set-cookie`,`x-api-key`],NATIVE_HTTP_BODY_LIMIT_BYTES:262144,STORAGE:{SCHEMA_VERSION:2,BUSY_TIMEOUT_MS:5e3},REDACTED_KEY:`[REDACTED]`,DEFAULT_SLOW_SPAN_THRESHOLD_MS:500}.DEFAULT_SLOW_SPAN_THRESHOLD_MS;function oe(e,t=_){if(typeof e==`number`&&Number.isFinite(e)&&e>=0)return e;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);if(Number.isFinite(t)&&t>=0)return t}return t}function se(e,t=_){return typeof e!=`number`||!Number.isFinite(e)||e<0?!1:e>=oe(t)}var v=i();function y(e,t){let n=e.attributes[t];return n==null?void 0:String(n)}function b(e){return e.type===`database`&&y(e,`db.system.name`)===`redis`}function x(e){switch(e.type){case`http.server`:{let t=y(e,`http.request.method`)??e.name,n=y(e,`url.path`);return n?`${t} ${n}`:e.name}case`http.client`:{let t=y(e,`http.request.method`)??e.name,n=y(e,`url.full`)??y(e,`server.address`);return n?`${t} ${n}`:e.name}default:return e.name}}function ce(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:e<1?`${e.toFixed(2)}ms`:Number.isInteger(e)?`${e}ms`:`${e.toFixed(1)}ms`}function S(e){switch(e.type){case`database`:return b(e)?`REDIS`:`DATABASE`;case`http.client`:return`EXTERNAL API`;case`http.server`:return`HTTP ROUTE`;case`framework`:return y(e,`express.type`)?.toLowerCase().includes(`middleware`)?`MIDDLEWARE`:`HANDLER`;default:return}}function C({node:e,depth:t=0,isLast:n=!1,selectedSpanId:r,onSelectSpan:i,rootRequestDurationMs:o,slowSpanThresholdMs:s,databaseRepeatCounts:c}){let l=!!e.span.error||e.span.status.code===2,u=S(e.span),ee=e.span.type===`database`||e.span.type===`http.client`,d=e.span.spanId===r,f=!l&&se(e.span.durationMs,s),p=c?.get(e.span.spanId),te=e.span.type===`database`&&p!==void 0&&p>=2,ne=b(e.span)?`Repeated Command`:`Repeated`,m=Number.isFinite(e.span.durationMs)?Math.max(0,e.span.durationMs):0,h=o>0?m/o*100:void 0,g=h!==void 0&&([`http.server`,`database`,`http.client`].includes(e.span.type)||e.span.type===`framework`&&u===`HANDLER`),re=t===0?null:n?`└──`:`├──`,ie=(0,v.jsxs)(`div`,{className:`rounded px-2 py-1.5 text-sm ${d?`bg-muted`:l?`bg-destructive/10 text-destructive`:f?`border border-warning/20 bg-warning/10`:te?`border border-info/20 bg-info/10`:`hover:bg-muted/40`}`,children:[(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[re&&(0,v.jsx)(`span`,{className:`shrink-0 font-mono text-muted-foreground`,children:re}),u&&(0,v.jsx)(`span`,{className:`shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-semibold tracking-wide text-muted-foreground`,children:u}),te&&(0,v.jsxs)(a,{variant:`outline`,className:`h-auto shrink-0 border-info/30 bg-info/15 px-1.5 py-0 text-[10px] font-semibold uppercase tracking-wide text-info`,children:[ne,p===void 0?``:` ×${p}`]}),f&&(0,v.jsx)(a,{variant:`outline`,className:`h-auto shrink-0 border-warning/30 bg-warning/15 px-1.5 py-0 text-[10px] font-semibold uppercase tracking-wide text-warning`,children:`Slow`}),(0,v.jsx)(`span`,{className:`truncate font-mono`,children:x(e.span)})]}),(0,v.jsxs)(`span`,{className:`shrink-0 font-mono text-xs ${f?`font-medium text-warning`:`text-muted-foreground`}`,children:[ce(m),h!==void 0&&` (${h.toFixed(1)}%)`]})]}),g&&(0,v.jsx)(`div`,{className:`ml-1 mt-1 h-0.5 overflow-hidden rounded-full bg-muted/70`,"aria-label":`${h.toFixed(1)}% of request duration`,children:(0,v.jsx)(`div`,{className:`h-full rounded-full ${f?`bg-warning/80`:`bg-muted-foreground/60`}`,style:{width:`${Math.min(100,h)}%`}})})]});return(0,v.jsxs)(`div`,{className:t>0?`ml-4 border-l border-border pl-3`:``,children:[ee?(0,v.jsx)(`button`,{type:`button`,className:`block w-full text-left`,"aria-pressed":d,onClick:()=>i?.(e.span),children:ie}):ie,e.children.length>0&&(0,v.jsx)(`div`,{children:e.children.map((n,a)=>(0,v.jsx)(C,{node:n,depth:t+1,isLast:a===e.children.length-1,selectedSpanId:r,onSelectSpan:i,rootRequestDurationMs:o,slowSpanThresholdMs:s,databaseRepeatCounts:c},n.span.spanId))})]})}function le({nodes:e,selectedSpanId:t,onSelectSpan:n,slowSpanThresholdMs:r=_,databaseRepeatCounts:i}){let a=e.find(e=>e.span.type===`http.server`)?.span.durationMs??e[0]?.span.durationMs??0;return(0,v.jsx)(`div`,{className:`space-y-1`,children:e.map((o,s)=>(0,v.jsx)(C,{node:o,isLast:s===e.length-1,selectedSpanId:t,onSelectSpan:n,rootRequestDurationMs:a,slowSpanThresholdMs:r,databaseRepeatCounts:i},o.span.spanId))})}function w(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function T(e,t){let n=e.attributes[t];return n==null||n===``?void 0:String(n)}function E(e){return`${e.toFixed(2)}ms`}function D(e){return Object.fromEntries(e.filter(([,e])=>e!==void 0))}function ue({values:e}){return(0,v.jsx)(`dl`,{className:`divide-y rounded-md border text-xs`,children:Object.entries(e).map(([e,t])=>(0,v.jsxs)(`div`,{className:`grid grid-cols-[minmax(8rem,30%)_1fr] gap-3 px-3 py-2`,children:[(0,v.jsx)(`dt`,{className:`font-mono text-muted-foreground`,children:e}),(0,v.jsx)(`dd`,{className:`whitespace-pre-wrap break-words font-mono`,children:t})]},e))})}function de({span:e,repeatCount:t,redisRepeatStats:n}){let r=T(e,`db.system.name`)===`redis`,i=[[`System`,T(e,`db.system.name`)],[`Operation`,T(e,`db.operation.name`)],[`Database`,T(e,`db.namespace`)],[`Collection`,T(e,`db.collection.name`)],[`Duration`,E(e.durationMs)],[`Status`,e.status.code===0?`Success`:e.status.message??`Error`]];n?(i.push([`Command`,n.command]),i.push([`Command pattern`,n.pattern]),i.push([`Executions in request`,String(n.count)]),i.push([`Cumulative duration`,`${n.totalDurationMs.toFixed(2)}ms`])):t!==void 0&&t>=2&&i.push([`Repeated in request`,`${t} times`]);let a=D(i),o=T(e,`db.query.text`),s=e.error?D([[`Type`,e.error.type],[`Message`,e.error.message]]):{};return(0,v.jsxs)(`div`,{className:`mt-4 space-y-5 border-t pt-4`,children:[(0,v.jsx)(`h3`,{className:`text-sm font-semibold`,children:r?`Redis Command`:`Database Operation`}),(0,v.jsx)(ue,{values:a}),o!==void 0&&(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h4`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:`Query`}),(0,v.jsx)(`pre`,{className:`max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md border p-3 font-mono text-xs`,children:w(o)})]}),e.error&&(Object.keys(s).length>0||e.error.stack)&&(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h4`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-destructive`,children:`Error`}),Object.keys(s).length>0&&(0,v.jsx)(ue,{values:s}),e.error?.stack&&(0,v.jsx)(`pre`,{className:`mt-3 max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md border bg-muted/30 p-3 font-mono text-xs`,children:e.error.stack})]})]})}function O(e,t){let n=e.attributes[t];return n==null||n===``?void 0:String(n)}function k(e){return Object.fromEntries(e.filter(([,e])=>e!==void 0))}function A({values:e}){return(0,v.jsx)(`dl`,{className:`divide-y rounded-md border text-xs`,children:Object.entries(e).map(([e,t])=>(0,v.jsxs)(`div`,{className:`grid grid-cols-[minmax(8rem,30%)_1fr] gap-3 px-3 py-2`,children:[(0,v.jsx)(`dt`,{className:`font-mono text-muted-foreground`,children:e}),(0,v.jsx)(`dd`,{className:`whitespace-pre-wrap break-words font-mono`,children:t})]},e))})}function j(e){if(typeof e==`string`)try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}let t=JSON.stringify(e,null,2);return t===void 0?String(e):t}function fe(e){return e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,typeof t==`string`?t:JSON.stringify(t)])):{}}function M({title:e,headers:t,body:n}){let r=fe(t),i=n!==void 0;return Object.keys(r).length===0&&!i?null:(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h4`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:e}),(0,v.jsxs)(`div`,{className:`space-y-3`,children:[Object.keys(r).length>0&&(0,v.jsxs)(`div`,{className:`space-y-2`,children:[(0,v.jsxs)(`h5`,{className:`text-xs font-medium text-muted-foreground`,children:[e,` Headers`]}),(0,v.jsx)(A,{values:r})]}),i&&(0,v.jsxs)(`div`,{className:`space-y-2`,children:[(0,v.jsxs)(`h5`,{className:`text-xs font-medium text-muted-foreground`,children:[e,` Body`]}),(0,v.jsx)(`pre`,{className:`max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md border p-3 font-mono text-xs`,children:j(n)})]})]})]})}function N({title:e,values:t}){return Object.keys(t).length===0?null:(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h4`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:e}),(0,v.jsx)(A,{values:t})]})}function pe({traceId:e,span:t}){let[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(!0),[o,s]=(0,g.useState)(null);(0,g.useEffect)(()=>{let n=!0;return ae(e,t.spanId).then(e=>{n&&r(e.details??null)}).catch(e=>{n&&s(e instanceof Error?e.message:`Failed to load HTTP client details`)}).finally(()=>{n&&a(!1)}),()=>{n=!1}},[t.spanId,e]);let c=k([[`Method`,O(t,`http.request.method`)],[`URL`,O(t,`url.full`)],[`Status`,O(t,`http.response.status_code`)],[`Duration`,`${t.durationMs.toFixed(2)}ms`]]),l=k([[`Host`,O(t,`server.address`)],[`Port`,O(t,`server.port`)],[`Scheme`,O(t,`url.scheme`)]]),u=k([[`Peer Address`,O(t,`network.peer.address`)],[`Peer Port`,O(t,`network.peer.port`)]]),ee=k([[`Path`,O(t,`url.path`)],[`Query`,O(t,`url.query`)]]),d=t.error?k([[`Type`,t.error.type],[`Message`,t.error.message]]):{};return(0,v.jsxs)(`div`,{className:`mt-4 space-y-5 border-t pt-4`,children:[(0,v.jsx)(`h3`,{className:`text-sm font-semibold`,children:`HTTP Request`}),(0,v.jsx)(N,{title:`Request`,values:c}),(0,v.jsx)(N,{title:`Server`,values:l}),(0,v.jsx)(N,{title:`Network`,values:u}),(0,v.jsx)(N,{title:`URL`,values:ee}),i&&(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading HTTP client details...`}),!i&&o&&(0,v.jsx)(`p`,{className:`text-sm text-destructive`,children:o}),!i&&!o&&n&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(M,{title:`Request`,headers:n.requestHeaders,body:n.requestBody}),(0,v.jsx)(M,{title:`Response`,headers:n.responseHeaders,body:n.responseBody})]}),t.error&&(Object.keys(d).length>0||t.error.stack)&&(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h4`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-destructive`,children:`Error`}),Object.keys(d).length>0&&(0,v.jsx)(A,{values:d}),t.error.stack&&(0,v.jsx)(`pre`,{className:`mt-3 max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md border bg-muted/30 p-3 font-mono text-xs`,children:t.error.stack})]})]})}function P(e){let t=e.trim().replace(/\s+/g,` `);return t=t.replace(/\$\d+/g,`?`),t=t.replace(/'(?:''|[^'])*'/g,`?`),t=t.replace(/=\s*-?\d+(?:\.\d+)?/g,`= ?`),t=t.replace(/,\s*-?\d+(?:\.\d+)?(?=\s*[),])/g,`, ?`),t.toLowerCase()}function F(e){let t=e[`db.system.name`];if(t!==`mysql`&&t!==`mysql2`)return;let n=e[`db.query.text`];if(typeof n==`string`&&n.trim()!==``)return`mysql:${P(n)}`}function I(e){if(typeof e!=`object`||!e)return`?`;if(Array.isArray(e))return e.map(e=>I(e));let t=e,n={};for(let e of Object.keys(t).sort())n[e]=I(t[e]);return n}function me(e){if(e[`db.system.name`]!==`mongodb`)return;let t=e[`db.collection.name`],n=e[`db.operation.name`];if(typeof t!=`string`||t.trim()===``||typeof n!=`string`||n.trim()===``)return;let r=e[`db.query.text`];if(typeof r==`string`&&r.trim()!==``)try{let e=JSON.parse(r);return`mongodb:${n}@${t}:${JSON.stringify(I(e))}`}catch{return`mongodb:${n}@${t}`}return`mongodb:${n}@${t}`}function L(e){if(e[`db.system.name`]!==`postgresql`)return;let t=e[`db.query.text`];if(typeof t==`string`&&t.trim()!==``)return`postgresql:${P(t)}`}var he=new Set([`SET`,`SETEX`,`SETNX`,`PSETEX`,`GETSET`,`MSET`,`LPUSH`,`RPUSH`]),R=new Set([`HGET`,`HDEL`,`HEXISTS`,`HSET`]);function z(e,t,n){let r=e.toUpperCase();return he.has(r)?`?`:r===`HSET`||R.has(r)?t===0?`?`:t===1?n.toLowerCase():`?`:`?`}function B(e){let t=e.trim();if(t===``)return;let n=t.split(/\s+/),r=n[0]?.toUpperCase();if(r)return{command:r,args:n.slice(1)}}function ge(e,t){let n=t.map((t,n)=>z(e,n,t));return[e.toUpperCase(),...n].join(` `).trim()}function V(e){if(e[`db.system.name`]!==`redis`)return;let t=e[`db.query.text`];if(typeof t==`string`&&t.trim()!==``){let e=B(t);if(e)return`redis:${ge(e.command,e.args)}`}let n=e[`db.operation.name`];if(typeof n==`string`&&n.trim()!==``)return`redis:${n.trim().toUpperCase()}`}function H(e){return e.startsWith(`redis:`)?e.slice(6):e}function U(e){if(e.type===`database`)return L(e.attributes)??F(e.attributes)??me(e.attributes)??V(e.attributes)}function _e(e){let t=new Map,n=new Map;for(let r of e){let e=U(r);e&&(t.set(e,(t.get(e)??0)+1),n.set(r.spanId,e))}let r=new Map;for(let[e,i]of n){let n=t.get(i)??1;n>=2&&r.set(e,n)}return r}function W(e){return e.type===`database`&&e.attributes[`db.system.name`]===`redis`}function ve(e){let t=e.attributes[`db.operation.name`];if(typeof t==`string`&&t.trim()!==``)return t.trim().toUpperCase();let n=V(e.attributes);return n?H(n).split(` `)[0]??`UNKNOWN`:`UNKNOWN`}function ye(e){let t=new Map;for(let n of e){if(!W(n))continue;let e=V(n.attributes);if(!e)continue;let r=typeof n.durationMs==`number`&&Number.isFinite(n.durationMs)?Math.max(0,n.durationMs):0,i=H(e),a=t.get(e);if(a){a.count+=1,a.totalDurationMs+=r;continue}t.set(e,{command:ve(n),pattern:i,count:1,totalDurationMs:r})}return[...t.entries()].filter(([,e])=>e.count>=2).map(([e,t])=>({groupKey:e,command:t.command,pattern:t.pattern,count:t.count,totalDurationMs:t.totalDurationMs})).sort((e,t)=>t.count-e.count)}function be(e){let t=new Map(ye(e).map(e=>[e.groupKey,e])),n=new Map;for(let r of e){if(!W(r))continue;let e=V(r.attributes),i=e?t.get(e):void 0;i&&n.set(r.spanId,{groupKey:i.groupKey,command:i.command,pattern:i.pattern,count:i.count,totalDurationMs:i.totalDurationMs})}return n}function xe(e){return e.spans.find(t=>t.spanId===e.rootSpanId&&t.type===`http.server`)}function G(e,t){let n=e?.attributes[t];return n===void 0?void 0:String(n)}function Se(e){return typeof e==`object`&&!!e}function K(e){return Se(e)&&Object.keys(e).length>0}function q(e){if(typeof e==`string`)return e;let t=JSON.stringify(e,null,2);return t===void 0?String(e):t}function J({label:e,value:t}){return(0,v.jsxs)(`div`,{className:`rounded-md border p-3`,children:[(0,v.jsx)(`dt`,{className:`text-xs text-muted-foreground`,children:e}),(0,v.jsx)(`dd`,{className:`mt-1 break-words text-sm font-medium`,children:t})]})}function Ce({label:e,value:t}){return(0,v.jsxs)(`div`,{className:`rounded-md border p-3`,children:[(0,v.jsx)(`p`,{className:`text-xl font-semibold tabular-nums`,children:t}),(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e})]})}function Y({values:e}){return(0,v.jsx)(`dl`,{className:`divide-y rounded-md border text-xs`,children:Object.entries(e).map(([e,t])=>(0,v.jsxs)(`div`,{className:`grid grid-cols-[minmax(8rem,30%)_1fr] gap-3 px-3 py-2`,children:[(0,v.jsx)(`dt`,{className:`font-mono text-muted-foreground`,children:e}),(0,v.jsx)(`dd`,{className:`whitespace-pre-wrap break-words font-mono`,children:q(t)})]},e))})}function X({title:e,children:t}){return(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h3`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:e}),t]})}function we(){return(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No details available.`})}function Te({request:e}){let t=Object.fromEntries([[`Method`,e.method],[`Path`,e.path],[`Route`,e.route]].filter(([,e])=>e!==void 0&&e!==``)),n=[];return Object.keys(t).length>0&&n.push((0,v.jsx)(X,{title:`General`,children:(0,v.jsx)(Y,{values:t})},`general`)),K(e.headers)&&n.push((0,v.jsx)(X,{title:`Headers`,children:(0,v.jsx)(Y,{values:e.headers})},`headers`)),K(e.query)&&n.push((0,v.jsx)(X,{title:`Query Parameters`,children:(0,v.jsx)(Y,{values:e.query})},`query`)),K(e.params)&&n.push((0,v.jsx)(X,{title:`Route Parameters`,children:(0,v.jsx)(Y,{values:e.params})},`params`)),e.body!==void 0&&n.push((0,v.jsx)(X,{title:`Body`,children:(0,v.jsx)(`pre`,{className:`max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md border p-3 font-mono text-xs`,children:q(e.body)})},`body`)),n.length>0?(0,v.jsx)(`div`,{className:`space-y-5`,children:n}):(0,v.jsx)(we,{})}function Ee({response:e}){let t=Object.entries(e.headers??{}).find(([e])=>e.toLowerCase()===`content-type`)?.[1],n=q(e.body??``);if(typeof e.body==`string`&&t?.some(e=>e.toLowerCase().includes(`json`)))try{n=JSON.stringify(JSON.parse(e.body),null,2)}catch{n=e.body}return(0,v.jsxs)(`div`,{className:`space-y-5`,children:[e.statusCode!==void 0&&(0,v.jsx)(X,{title:`General`,children:(0,v.jsx)(Y,{values:{"Status Code":e.statusCode}})}),K(e.headers)&&(0,v.jsx)(X,{title:`Headers`,children:(0,v.jsx)(Y,{values:e.headers})}),e.body!==void 0&&(0,v.jsx)(X,{title:`Body`,children:(0,v.jsx)(`pre`,{className:`max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md border p-3 font-mono text-xs`,children:n})}),e.statusCode===void 0&&!K(e.headers)&&e.body===void 0&&(0,v.jsx)(we,{})]})}function De({errors:e}){return e.length===0?(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No errors captured for this request.`}):(0,v.jsx)(`div`,{className:`space-y-4`,children:e.map((e,t)=>(0,v.jsxs)(`article`,{className:`rounded-md border p-3`,children:[(0,v.jsx)(`p`,{className:`font-mono text-sm font-semibold text-destructive`,children:e.message??`Unknown error`}),(0,v.jsx)(`div`,{className:`mt-3`,children:(0,v.jsx)(Y,{values:Object.fromEntries([[`Type`,e.type],[`Origin`,e.spanName],[`Span Type`,e.spanType]].filter(([,e])=>e!==void 0&&e!==``))})}),e.stack&&(0,v.jsx)(`pre`,{className:`mt-3 max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md border bg-muted/30 p-3 font-mono text-xs`,children:e.stack})]},`${e.spanId??`error`}-${t}`))})}function Z({traceId:e,onBack:t,onDeleted:i}){let[s,ae]=(0,g.useState)(null),[oe,se]=(0,g.useState)(!0),[y,b]=(0,g.useState)(null),[x,ce]=(0,g.useState)(`Overview`),[S,C]=(0,g.useState)(null),[w,T]=(0,g.useState)(!1),[E,D]=(0,g.useState)(null),[ue,O]=(0,g.useState)(_),[k,A]=(0,g.useState)(null),[j,fe]=(0,g.useState)(null),[M,N]=(0,g.useState)(!1),[P,F]=(0,g.useState)(null),[I,me]=(0,g.useState)(null),[L,he]=(0,g.useState)(!1),[R,z]=(0,g.useState)(null),[B,ge]=(0,g.useState)(null),[V,H]=(0,g.useState)(!1),[U,W]=(0,g.useState)(null),[ve,Se]=(0,g.useState)(!1),[K,q]=(0,g.useState)(!1),[X,we]=(0,g.useState)(!1),[Z,Oe]=(0,g.useState)(!1),[ke,Ae]=(0,g.useState)(null);async function je(){if(!K){q(!0),Ae(null);try{await ee(e),i()}catch(e){Ae(e instanceof Error?e.message:`Failed to delete trace`)}finally{q(!1)}}}async function Me(){if(!Z){Oe(!0),Ae(null);try{await te(),i()}catch(e){Ae(e instanceof Error?e.message:`Failed to clear history`)}finally{Oe(!1)}}}(0,g.useEffect)(()=>{let t=!0;async function n(){se(!0),b(null),C(null),D(null),O(_),A(null),fe(null),F(null),me(null),z(null),ge(null),W(null),ce(`Overview`);try{let n=await l(e);t&&ae(n)}catch(e){t&&(ae(null),b(e instanceof Error?e.message:`Failed to load trace`))}finally{t&&se(!1)}}return n(),()=>{t=!1}},[e]),(0,g.useEffect)(()=>{if(x!==`Execution`||S!==null)return;let t=!0;return Promise.all([ie(e),re()]).then(([e,n])=>{t&&(C(e),O(n.slowSpanThresholdMs))}).catch(e=>{t&&D(e instanceof Error?e.message:`Failed to load execution data`)}).finally(()=>{t&&T(!1)}),()=>{t=!1}},[x,S,e]),(0,g.useEffect)(()=>{if(x!==`Request`||j!==null)return;let t=!0;return ne(e).then(e=>{t&&fe(e)}).catch(e=>{t&&F(e instanceof Error?e.message:`Failed to load request data`)}).finally(()=>{t&&N(!1)}),()=>{t=!1}},[x,j,e]),(0,g.useEffect)(()=>{if(x!==`Response`||I!==null)return;let t=!0;return u(e).then(e=>{t&&me(e)}).catch(e=>{t&&z(e instanceof Error?e.message:`Failed to load response data`)}).finally(()=>{t&&he(!1)}),()=>{t=!1}},[x,I,e]),(0,g.useEffect)(()=>{if(x!==`Error`||B!==null)return;let t=!0;return p(e).then(e=>{t&&ge(e)}).catch(e=>{t&&W(e instanceof Error?e.message:`Failed to load error data`)}).finally(()=>{t&&H(!1)}),()=>{t=!1}},[x,B,e]);let Q=s?xe(s):void 0,Ne=G(Q,`http.request.method`)??`UNKNOWN`,Pe=G(Q,`url.path`)??`Unknown path`,Fe=G(Q,`http.route`),$=G(Q,`http.response.status_code`),Ie=s?.spans.filter(e=>e.type===`database`)??[],Le=s?.spans.filter(e=>e.type===`http.client`)??[],Re=s?.spans.filter(e=>e.error!==void 0||e.status.code===2)??[],ze=[...new Set(Ie.map(e=>[G(e,`db.system.name`),G(e,`db.operation.name`)].filter(Boolean).join(` · `)||e.name))],Be=[...new Set(Le.map(e=>{let t=G(e,`url.full`),n;if(t)try{n=new URL(t).host}catch{}return G(e,`server.address`)??G(e,`url.hostname`)??n??e.name}))],Ve=Re.length>0||$!==void 0&&Number($)>=400,He=(0,g.useMemo)(()=>_e(s?.spans??[]),[s]),Ue=(0,g.useMemo)(()=>ye(s?.spans??[]),[s]),We=(0,g.useMemo)(()=>be(s?.spans??[]),[s]);return(0,v.jsxs)(`main`,{className:`p-6`,children:[(0,v.jsx)(c,{variant:`ghost`,className:`mb-6 -ml-2`,onClick:t,children:`← Back to requests`}),oe&&!s&&(0,v.jsx)(o,{}),!oe&&y&&(0,v.jsx)(`div`,{className:`rounded-md border p-6 text-sm text-destructive`,children:y.includes(`404`)?`Trace not found`:y}),ke&&(0,v.jsx)(`div`,{className:`mb-4 rounded-md border border-destructive/30 p-3 text-sm text-destructive`,children:ke}),!oe&&!y&&s&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`section`,{className:`rounded-md border p-6`,children:(0,v.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-4`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`font-mono text-lg font-semibold`,children:Ne}),(0,v.jsx)(`span`,{className:`font-mono text-lg`,children:Pe})]}),Fe&&(0,v.jsxs)(`p`,{className:`mt-2 font-mono text-sm text-muted-foreground`,children:[`Route: `,Fe]}),(0,v.jsxs)(`p`,{className:`mt-1 font-mono text-sm text-muted-foreground`,children:[`Started At: `,new Date(s.startedAt).toLocaleString()]}),(0,v.jsxs)(`p`,{className:`mt-1 font-mono text-sm text-muted-foreground`,children:[`Duration: `,s.durationMs??Q?.durationMs??`—`,`ms`]})]}),(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(a,{variant:$&&Number($)>=400?`destructive`:`outline`,children:$??`—`}),(0,v.jsxs)(c,{variant:`destructive`,size:`sm`,disabled:K||Z,onClick:()=>Se(!0),children:[K?(0,v.jsx)(h,{className:`animate-spin`}):(0,v.jsx)(d,{}),`Delete`]})]})]})}),(0,v.jsx)(`nav`,{className:`mt-6 flex gap-2 border-b pb-2 text-sm`,children:[`Overview`,`Execution`,`Request`,`Response`,`User`,`Error`].map(e=>(0,v.jsx)(c,{variant:x===e?`secondary`:`ghost`,size:`sm`,onClick:()=>{e===`Execution`&&S===null&&(T(!0),D(null)),e===`Request`&&j===null&&(N(!0),F(null)),e===`Response`&&I===null&&(he(!0),z(null)),e===`Error`&&B===null&&(H(!0),W(null)),ce(e)},children:e},e))}),x===`Execution`?(0,v.jsxs)(`section`,{className:`mt-6 rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-3 text-sm font-semibold`,children:`Execution`}),w&&(0,v.jsx)(`div`,{className:`space-y-2`,role:`status`,"aria-live":`polite`,"aria-label":`Loading execution data`,children:Array.from({length:5}).map((e,t)=>(0,v.jsx)(n,{className:`h-10 w-full`,style:{width:`${100-t*6}%`}},t))}),!w&&E&&(0,v.jsx)(`p`,{className:`text-sm text-destructive`,children:E}),!w&&!E&&S?.length===0&&(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No execution data available.`}),!w&&!E&&S&&S.length>0&&(0,v.jsxs)(v.Fragment,{children:[Ue.length>0&&(0,v.jsxs)(`div`,{className:`mb-4 space-y-2 rounded-md border border-info/20 bg-info/10 p-3`,children:[(0,v.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-info`,children:`Repeated Redis Commands`}),(0,v.jsx)(`ul`,{className:`space-y-1 text-sm`,children:Ue.map(e=>(0,v.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2 font-mono`,children:[(0,v.jsx)(a,{variant:`outline`,className:`border-info/30 bg-info/15 text-info`,children:`Repeated Command`}),(0,v.jsx)(`span`,{children:e.command}),(0,v.jsx)(`span`,{className:`text-muted-foreground`,children:e.pattern}),(0,v.jsxs)(`span`,{className:`text-muted-foreground`,children:[`×`,e.count]}),(0,v.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.totalDurationMs.toFixed(2),`ms total`]})]},e.groupKey))})]}),(0,v.jsx)(le,{nodes:S,selectedSpanId:k?.spanId,onSelectSpan:A,slowSpanThresholdMs:ue,databaseRepeatCounts:He}),k?.type===`database`&&(0,v.jsx)(de,{span:k,repeatCount:He.get(k.spanId),redisRepeatStats:We.get(k.spanId)}),k?.type===`http.client`&&(0,v.jsx)(pe,{traceId:e,span:k},`${e}:${k.spanId}`)]})]}):x===`Request`?(0,v.jsxs)(`section`,{className:`mt-6 rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-3 text-sm font-semibold`,children:`Request`}),M&&(0,v.jsx)(r,{}),!M&&P&&(0,v.jsx)(`p`,{className:`text-sm text-destructive`,children:P}),!M&&!P&&j&&(0,v.jsx)(Te,{request:j})]}):x===`Response`?(0,v.jsxs)(`section`,{className:`mt-6 rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-3 text-sm font-semibold`,children:`Response`}),L&&(0,v.jsx)(r,{}),!L&&R&&(0,v.jsx)(`p`,{className:`text-sm text-destructive`,children:R}),!L&&!R&&I&&(0,v.jsx)(Ee,{response:I})]}):x===`User`?(0,v.jsxs)(`section`,{className:`mt-6 rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-3 text-sm font-semibold`,children:`User`}),s.user?(0,v.jsx)(Y,{values:s.user}):(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No authenticated user captured for this request.`})]}):x===`Error`?(0,v.jsxs)(`section`,{className:`mt-6 rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-3 text-sm font-semibold`,children:`Error`}),V&&(0,v.jsx)(r,{}),!V&&U&&(0,v.jsx)(`p`,{className:`text-sm text-destructive`,children:U}),!V&&!U&&B&&(0,v.jsx)(De,{errors:B})]}):x===`Overview`?(0,v.jsxs)(`section`,{className:`mt-6 space-y-6`,children:[(0,v.jsxs)(`div`,{className:`rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-3 text-sm font-semibold`,children:`Request summary`}),(0,v.jsxs)(`dl`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,v.jsx)(J,{label:`Method`,value:Ne}),(0,v.jsx)(J,{label:`Path`,value:Pe}),(0,v.jsx)(J,{label:`Route`,value:Fe??`—`}),(0,v.jsx)(J,{label:`Status code`,value:$??`—`}),(0,v.jsx)(J,{label:`Total duration`,value:s.durationMs===void 0?Q?`${Q.durationMs.toFixed(2)} ms`:`—`:`${s.durationMs.toFixed(2)} ms`}),(0,v.jsx)(J,{label:`Started at`,value:new Date(s.startedAt).toLocaleString()}),(0,v.jsx)(J,{label:`Error state`,value:(0,v.jsx)(a,{variant:Ve?`destructive`:`outline`,children:Ve?`Error`:`No error`})})]})]}),(0,v.jsxs)(`div`,{className:`rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-3 text-sm font-semibold`,children:`Activity`}),(0,v.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-4`,children:[(0,v.jsx)(Ce,{label:`Total spans`,value:s.spans.length}),(0,v.jsx)(Ce,{label:`Database calls`,value:Ie.length}),(0,v.jsx)(Ce,{label:`Outbound HTTP calls`,value:Le.length}),(0,v.jsx)(Ce,{label:`Errors`,value:Re.length})]})]}),(0,v.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:[(0,v.jsxs)(`div`,{className:`rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-2 text-sm font-semibold`,children:`Database activity`}),ze.length>0?(0,v.jsx)(`ul`,{className:`space-y-1 text-sm text-muted-foreground`,children:ze.map(e=>(0,v.jsx)(`li`,{children:e},e))}):(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No database calls.`})]}),(0,v.jsxs)(`div`,{className:`rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-2 text-sm font-semibold`,children:`Outbound services`}),Be.length>0?(0,v.jsx)(`ul`,{className:`space-y-1 text-sm text-muted-foreground`,children:Be.map(e=>(0,v.jsx)(`li`,{children:e},e))}):(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No outbound HTTP calls.`})]})]})]}):(0,v.jsxs)(`section`,{className:`mt-6 rounded-md border p-4`,children:[(0,v.jsx)(`h2`,{className:`mb-2 text-sm font-semibold`,children:x}),(0,v.jsx)(`pre`,{className:`max-h-96 overflow-auto whitespace-pre-wrap text-xs`,children:JSON.stringify(s,null,2)})]})]}),(0,v.jsxs)(m,{open:ve,onOpenChange:e=>{K||Se(e)},title:`Delete trace?`,description:`This permanently deletes the selected trace and all associated request, response, execution, and error data.`,children:[(0,v.jsx)(f,{render:(0,v.jsx)(c,{variant:`outline`,disabled:K}),children:`Cancel`}),(0,v.jsxs)(c,{variant:`destructive`,disabled:K,onClick:()=>void je(),children:[K&&(0,v.jsx)(h,{className:`animate-spin`}),`Delete trace`]})]}),(0,v.jsxs)(m,{open:X,onOpenChange:e=>{Z||we(e)},title:`Clear all history?`,description:`This permanently deletes all captured ServerDevTools history, including traces, spans, request and response data, execution data, and errors.`,children:[(0,v.jsx)(f,{render:(0,v.jsx)(c,{variant:`outline`,disabled:Z}),children:`Cancel`}),(0,v.jsxs)(c,{variant:`destructive`,disabled:Z,onClick:()=>void Me(),children:[Z&&(0,v.jsx)(h,{className:`animate-spin`}),`Clear history`]})]})]})}export{Z as TraceDetailsPage};
@@ -0,0 +1 @@
1
+ import{t as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t}from"./button-CXALLF_v.js";var n=e((e=>{var n=t();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useState,o=n.useEffect,s=n.useLayoutEffect,c=n.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;e.useSyncExternalStore=n.useSyncExternalStore===void 0?f:n.useSyncExternalStore})),r=e(((e,t)=>{t.exports=n()})),i=e((e=>{var n=t(),i=r();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=n.useRef,l=n.useEffect,u=n.useMemo,d=n.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),a=e(((e,t)=>{t.exports=i()}));export{r as n,a as t};
@@ -5,8 +5,28 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/_devtools/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>ServerDevTools Dashboard</title>
8
- <script type="module" crossorigin src="/_devtools/assets/index-BXbomG5W.js"></script>
9
- <link rel="stylesheet" crossorigin href="/_devtools/assets/index-DYvJ5RTl.css">
8
+ <script>
9
+ (() => {
10
+ const root = document.documentElement
11
+ let preference = "system"
12
+ try {
13
+ const saved = window.localStorage.getItem("server-devtools-theme")
14
+ if (saved === "light" || saved === "dark" || saved === "system") preference = saved
15
+ } catch {
16
+ // Continue with the system preference when storage is unavailable.
17
+ }
18
+
19
+ const prefersDark = typeof window.matchMedia === "function"
20
+ && window.matchMedia("(prefers-color-scheme: dark)").matches
21
+ const dark = preference === "dark" || (preference === "system" && prefersDark)
22
+ root.classList.toggle("dark", dark)
23
+ root.style.colorScheme = dark ? "dark" : "light"
24
+ })()
25
+ </script>
26
+ <script type="module" crossorigin src="/_devtools/assets/index-B9G80X8M.js"></script>
27
+ <link rel="modulepreload" crossorigin href="/_devtools/assets/rolldown-runtime-hePW80VL.js">
28
+ <link rel="modulepreload" crossorigin href="/_devtools/assets/button-CXALLF_v.js">
29
+ <link rel="stylesheet" crossorigin href="/_devtools/assets/index-9FEJIlQV.css">
10
30
  </head>
11
31
  <body>
12
32
  <div id="root"></div>
@@ -3,8 +3,19 @@ declare const _default: {
3
3
  DASHBOARD_API_ROUTES: {
4
4
  TRACES: string;
5
5
  REQUESTS: string;
6
+ OVERVIEW: string;
7
+ CONFIG: string;
6
8
  AUTH: string;
7
9
  };
10
+ DASHBOARD_CONTENT_TYPES: Record<string, string>;
11
+ DASHBOARD_LOGIN_RATE_LIMIT: {
12
+ POINTS: number;
13
+ DURATION_SECONDS: number;
14
+ BLOCK_SECONDS: number;
15
+ MAX_TRACKED_KEYS: number;
16
+ };
17
+ DASHBOARD_LOGIN_BODY_LIMIT_BYTES: number;
18
+ DASHBOARD_LOGIN_BODY_READ_TIMEOUT_MS: number;
8
19
  REQUEST_METHOD: {
9
20
  GET: string;
10
21
  POST: string;
@@ -13,9 +24,14 @@ declare const _default: {
13
24
  PATCH: string;
14
25
  };
15
26
  DEFAULT_FIELDS_TO_ENCRYPT: string[];
27
+ DEFAULT_SENSITIVE_HEADER_NAMES: string[];
28
+ NATIVE_HTTP_BODY_LIMIT_BYTES: number;
16
29
  STORAGE: {
17
30
  SCHEMA_VERSION: number;
31
+ BUSY_TIMEOUT_MS: number;
18
32
  };
33
+ REDACTED_KEY: string;
34
+ DEFAULT_SLOW_SPAN_THRESHOLD_MS: number;
19
35
  };
20
36
  export default _default;
21
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":";aAEQ,qBAAqB;IAGzB,oBAAoB;QAChB,MAAM;QACN,QAAQ;QACR,IAAI;;IAER,cAAc;QACV,GAAG;QACH,IAAI;QACJ,GAAG;QACH,MAAM;QACN,KAAK;;IAET,yBAAyB;IAOzB,OAAO;QACH,cAAc"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":";aAEQ,qBAAqB;IAGzB,oBAAoB;QAChB,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,IAAI;;IAER,uBAAuB,EAOlB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3B,0BAA0B;QACtB,MAAM;QACN,gBAAgB;QAChB,aAAa;QACb,gBAAgB;;IAEpB,gCAAgC;IAChC,oCAAoC;IACpC,cAAc;QACV,GAAG;QACH,IAAI;QACJ,GAAG;QACH,MAAM;QACN,KAAK;;IAET,yBAAyB;IAOzB,8BAA8B;IAO9B,4BAA4B;IAC5B,OAAO;QACH,cAAc;QACd,eAAe;;IAEnB,YAAY;IACZ,8BAA8B"}
@@ -7,8 +7,26 @@ exports.default = {
7
7
  DASHBOARD_API_ROUTES: {
8
8
  TRACES: '/_devtools/api/traces',
9
9
  REQUESTS: '/_devtools/api/requests',
10
+ OVERVIEW: '/_devtools/api/overview',
11
+ CONFIG: '/_devtools/api/config',
10
12
  AUTH: '/_devtools/api/auth'
11
13
  },
14
+ DASHBOARD_CONTENT_TYPES: {
15
+ ".html": "text/html; charset=utf-8",
16
+ ".js": "text/javascript; charset=utf-8",
17
+ ".css": "text/css; charset=utf-8",
18
+ ".svg": "image/svg+xml",
19
+ ".woff2": "font/woff2",
20
+ ".json": "application/json; charset=utf-8",
21
+ },
22
+ DASHBOARD_LOGIN_RATE_LIMIT: {
23
+ POINTS: 5,
24
+ DURATION_SECONDS: 15 * 60,
25
+ BLOCK_SECONDS: 15 * 60,
26
+ MAX_TRACKED_KEYS: 1_000,
27
+ },
28
+ DASHBOARD_LOGIN_BODY_LIMIT_BYTES: 8 * 1024,
29
+ DASHBOARD_LOGIN_BODY_READ_TIMEOUT_MS: 10 * 1000,
12
30
  REQUEST_METHOD: {
13
31
  GET: 'GET',
14
32
  POST: 'POST',
@@ -23,8 +41,19 @@ exports.default = {
23
41
  "authorization",
24
42
  "cookie",
25
43
  ],
44
+ DEFAULT_SENSITIVE_HEADER_NAMES: [
45
+ "authorization",
46
+ "proxy-authorization",
47
+ "cookie",
48
+ "set-cookie",
49
+ "x-api-key",
50
+ ],
51
+ NATIVE_HTTP_BODY_LIMIT_BYTES: 256 * 1024,
26
52
  STORAGE: {
27
- SCHEMA_VERSION: 1
28
- }
53
+ SCHEMA_VERSION: 2,
54
+ BUSY_TIMEOUT_MS: 5_000,
55
+ },
56
+ REDACTED_KEY: "[REDACTED]",
57
+ DEFAULT_SLOW_SPAN_THRESHOLD_MS: 500,
29
58
  };
30
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":";;kBACe;IACX,IAAI,qBAAqB;QACrB,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,CAAC;IACxD,CAAC;IACD,oBAAoB,EAAE;QAClB,MAAM,EAAE,uBAAuB;QAC/B,QAAQ,EAAE,yBAAyB;QACnC,IAAI,EAAE,qBAAqB;KAC9B;IACD,cAAc,EAAE;QACZ,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO;KACjB;IACD,yBAAyB,EAAE;QACvB,UAAU;QACV,aAAa;QACb,cAAc;QACd,eAAe;QACf,QAAQ;KACX;IACD,OAAO,EAAE;QACL,cAAc,EAAE,CAAC;KACpB;CACJ"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":";;kBACe;IACX,IAAI,qBAAqB;QACrB,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,CAAC;IACxD,CAAC;IACD,oBAAoB,EAAE;QAClB,MAAM,EAAE,uBAAuB;QAC/B,QAAQ,EAAE,yBAAyB;QACnC,QAAQ,EAAE,yBAAyB;QACnC,MAAM,EAAE,uBAAuB;QAC/B,IAAI,EAAE,qBAAqB;KAC9B;IACD,uBAAuB,EAAE;QACrB,OAAO,EAAE,0BAA0B;QACnC,KAAK,EAAE,gCAAgC;QACvC,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,iCAAiC;KACnB;IAC3B,0BAA0B,EAAE;QACxB,MAAM,EAAE,CAAC;QACT,gBAAgB,EAAE,EAAE,GAAG,EAAE;QACzB,aAAa,EAAE,EAAE,GAAG,EAAE;QACtB,gBAAgB,EAAE,KAAK;KAC1B;IACD,gCAAgC,EAAE,CAAC,GAAG,IAAI;IAC1C,oCAAoC,EAAE,EAAE,GAAG,IAAI;IAC/C,cAAc,EAAE;QACZ,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO;KACjB;IACD,yBAAyB,EAAE;QACvB,UAAU;QACV,aAAa;QACb,cAAc;QACd,eAAe;QACf,QAAQ;KACX;IACD,8BAA8B,EAAE;QAC5B,eAAe;QACf,qBAAqB;QACrB,QAAQ;QACR,YAAY;QACZ,WAAW;KACd;IACD,4BAA4B,EAAE,GAAG,GAAG,IAAI;IACxC,OAAO,EAAE;QACL,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,KAAK;KACzB;IACD,YAAY,EAAE,YAAY;IAC1B,8BAA8B,EAAE,GAAG;CACtC"}
@@ -0,0 +1,32 @@
1
+ export { mysqlDatabaseGroupKey } from "./mysql";
2
+ export { mongodbDatabaseGroupKey } from "./mongodb";
3
+ export { normalizeSqlTemplate } from "./sql-template";
4
+ export { postgresDatabaseGroupKey } from "./postgres";
5
+ export { formatRedisCommandPattern, normalizeRedisCommandPattern, parseRedisCommandText, redisDatabaseGroupKey, } from "./redis";
6
+ export interface DatabaseSpanForRepeatDetection {
7
+ spanId: string;
8
+ type: string;
9
+ attributes: Record<string, unknown>;
10
+ }
11
+ export interface SpanForRepeatDetection extends DatabaseSpanForRepeatDetection {
12
+ durationMs?: number;
13
+ }
14
+ export interface RedisCommandRepeatSummary {
15
+ groupKey: string;
16
+ command: string;
17
+ pattern: string;
18
+ count: number;
19
+ totalDurationMs: number;
20
+ }
21
+ export interface RedisSpanRepeatStats {
22
+ groupKey: string;
23
+ command: string;
24
+ pattern: string;
25
+ count: number;
26
+ totalDurationMs: number;
27
+ }
28
+ export declare function databaseSpanGroupKey(span: DatabaseSpanForRepeatDetection): string | undefined;
29
+ export declare function countDatabaseSpanRepeats(spans: DatabaseSpanForRepeatDetection[]): Map<string, number>;
30
+ export declare function summarizeRedisCommandRepeats(spans: SpanForRepeatDetection[]): RedisCommandRepeatSummary[];
31
+ export declare function buildRedisSpanRepeatStats(spans: SpanForRepeatDetection[]): Map<string, RedisSpanRepeatStats>;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/repeated-database-queries/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACH,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,GACxB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,8BAA8B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,sBAAuB,SAAQ,8BAA8B;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,8BAA8B,GACrC,MAAM,GAAG,SAAS,CAWpB;AAED,wBAAgB,wBAAwB,CACpC,KAAK,EAAE,8BAA8B,EAAE,GACxC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBrB;AAqBD,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,sBAAsB,EAAE,GAChC,yBAAyB,EAAE,CAiD7B;AAED,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,sBAAsB,EAAE,GAChC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CA2BnC"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redisDatabaseGroupKey = exports.parseRedisCommandText = exports.normalizeRedisCommandPattern = exports.formatRedisCommandPattern = exports.postgresDatabaseGroupKey = exports.normalizeSqlTemplate = exports.mongodbDatabaseGroupKey = exports.mysqlDatabaseGroupKey = void 0;
4
+ exports.databaseSpanGroupKey = databaseSpanGroupKey;
5
+ exports.countDatabaseSpanRepeats = countDatabaseSpanRepeats;
6
+ exports.summarizeRedisCommandRepeats = summarizeRedisCommandRepeats;
7
+ exports.buildRedisSpanRepeatStats = buildRedisSpanRepeatStats;
8
+ const mysql_1 = require("./mysql");
9
+ const mongodb_1 = require("./mongodb");
10
+ const postgres_1 = require("./postgres");
11
+ const redis_1 = require("./redis");
12
+ var mysql_2 = require("./mysql");
13
+ Object.defineProperty(exports, "mysqlDatabaseGroupKey", { enumerable: true, get: function () { return mysql_2.mysqlDatabaseGroupKey; } });
14
+ var mongodb_2 = require("./mongodb");
15
+ Object.defineProperty(exports, "mongodbDatabaseGroupKey", { enumerable: true, get: function () { return mongodb_2.mongodbDatabaseGroupKey; } });
16
+ var sql_template_1 = require("./sql-template");
17
+ Object.defineProperty(exports, "normalizeSqlTemplate", { enumerable: true, get: function () { return sql_template_1.normalizeSqlTemplate; } });
18
+ var postgres_2 = require("./postgres");
19
+ Object.defineProperty(exports, "postgresDatabaseGroupKey", { enumerable: true, get: function () { return postgres_2.postgresDatabaseGroupKey; } });
20
+ var redis_2 = require("./redis");
21
+ Object.defineProperty(exports, "formatRedisCommandPattern", { enumerable: true, get: function () { return redis_2.formatRedisCommandPattern; } });
22
+ Object.defineProperty(exports, "normalizeRedisCommandPattern", { enumerable: true, get: function () { return redis_2.normalizeRedisCommandPattern; } });
23
+ Object.defineProperty(exports, "parseRedisCommandText", { enumerable: true, get: function () { return redis_2.parseRedisCommandText; } });
24
+ Object.defineProperty(exports, "redisDatabaseGroupKey", { enumerable: true, get: function () { return redis_2.redisDatabaseGroupKey; } });
25
+ function databaseSpanGroupKey(span) {
26
+ if (span.type !== "database") {
27
+ return undefined;
28
+ }
29
+ return ((0, postgres_1.postgresDatabaseGroupKey)(span.attributes)
30
+ ?? (0, mysql_1.mysqlDatabaseGroupKey)(span.attributes)
31
+ ?? (0, mongodb_1.mongodbDatabaseGroupKey)(span.attributes)
32
+ ?? (0, redis_1.redisDatabaseGroupKey)(span.attributes));
33
+ }
34
+ function countDatabaseSpanRepeats(spans) {
35
+ const groupCounts = new Map();
36
+ const spanGroups = new Map();
37
+ for (const span of spans) {
38
+ const groupKey = databaseSpanGroupKey(span);
39
+ if (!groupKey) {
40
+ continue;
41
+ }
42
+ groupCounts.set(groupKey, (groupCounts.get(groupKey) ?? 0) + 1);
43
+ spanGroups.set(span.spanId, groupKey);
44
+ }
45
+ const repeats = new Map();
46
+ for (const [spanId, groupKey] of spanGroups) {
47
+ const count = groupCounts.get(groupKey) ?? 1;
48
+ if (count >= 2) {
49
+ repeats.set(spanId, count);
50
+ }
51
+ }
52
+ return repeats;
53
+ }
54
+ function isRedisSpan(span) {
55
+ return span.type === "database"
56
+ && span.attributes["db.system.name"] === "redis";
57
+ }
58
+ function redisCommandName(span) {
59
+ const operation = span.attributes["db.operation.name"];
60
+ if (typeof operation === "string" && operation.trim() !== "") {
61
+ return operation.trim().toUpperCase();
62
+ }
63
+ const groupKey = (0, redis_1.redisDatabaseGroupKey)(span.attributes);
64
+ if (!groupKey) {
65
+ return "UNKNOWN";
66
+ }
67
+ return (0, redis_1.formatRedisCommandPattern)(groupKey).split(" ")[0] ?? "UNKNOWN";
68
+ }
69
+ function summarizeRedisCommandRepeats(spans) {
70
+ const groups = new Map();
71
+ for (const span of spans) {
72
+ if (!isRedisSpan(span)) {
73
+ continue;
74
+ }
75
+ const groupKey = (0, redis_1.redisDatabaseGroupKey)(span.attributes);
76
+ if (!groupKey) {
77
+ continue;
78
+ }
79
+ const durationMs = typeof span.durationMs === "number"
80
+ && Number.isFinite(span.durationMs)
81
+ ? Math.max(0, span.durationMs)
82
+ : 0;
83
+ const pattern = (0, redis_1.formatRedisCommandPattern)(groupKey);
84
+ const existing = groups.get(groupKey);
85
+ if (existing) {
86
+ existing.count += 1;
87
+ existing.totalDurationMs += durationMs;
88
+ continue;
89
+ }
90
+ groups.set(groupKey, {
91
+ command: redisCommandName(span),
92
+ pattern,
93
+ count: 1,
94
+ totalDurationMs: durationMs,
95
+ });
96
+ }
97
+ return [...groups.entries()]
98
+ .filter(([, group]) => group.count >= 2)
99
+ .map(([groupKey, group]) => ({
100
+ groupKey,
101
+ command: group.command,
102
+ pattern: group.pattern,
103
+ count: group.count,
104
+ totalDurationMs: group.totalDurationMs,
105
+ }))
106
+ .sort((left, right) => right.count - left.count);
107
+ }
108
+ function buildRedisSpanRepeatStats(spans) {
109
+ const summaries = new Map(summarizeRedisCommandRepeats(spans).map((summary) => [summary.groupKey, summary]));
110
+ const stats = new Map();
111
+ for (const span of spans) {
112
+ if (!isRedisSpan(span)) {
113
+ continue;
114
+ }
115
+ const groupKey = (0, redis_1.redisDatabaseGroupKey)(span.attributes);
116
+ const summary = groupKey ? summaries.get(groupKey) : undefined;
117
+ if (!summary) {
118
+ continue;
119
+ }
120
+ stats.set(span.spanId, {
121
+ groupKey: summary.groupKey,
122
+ command: summary.command,
123
+ pattern: summary.pattern,
124
+ count: summary.count,
125
+ totalDurationMs: summary.totalDurationMs,
126
+ });
127
+ }
128
+ return stats;
129
+ }
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/repeated-database-queries/index.ts"],"names":[],"mappings":";;;;;;;AAAA,mCAAgD;AAChD,uCAAoD;AACpD,yCAAsD;AACtD,mCAGiB;AAEjB,iCAAgD;AAAvC,8GAAA,qBAAqB,OAAA;AAC9B,qCAAoD;AAA3C,kHAAA,uBAAuB,OAAA;AAChC,+CAAsD;AAA7C,oHAAA,oBAAoB,OAAA;AAC7B,uCAAsD;AAA7C,oHAAA,wBAAwB,OAAA;AACjC,iCAKiB;AAJb,kHAAA,yBAAyB,OAAA;AACzB,qHAAA,4BAA4B,OAAA;AAC5B,8GAAA,qBAAqB,OAAA;AACrB,8GAAA,qBAAqB,OAAA;AA6BzB,8BACI,IAAoC;IAEpC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,CACH,IAAA,mCAAwB,EAAC,IAAI,CAAC,UAAU,CAAC;WACtC,IAAA,6BAAqB,EAAC,IAAI,CAAC,UAAU,CAAC;WACtC,IAAA,iCAAuB,EAAC,IAAI,CAAC,UAAU,CAAC;WACxC,IAAA,6BAAqB,EAAC,IAAI,CAAC,UAAU,CAAC,CAC5C,CAAC;AACN,CAAC;AAED,kCACI,KAAuC;IAEvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,SAAS;QACb,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,IAAoC;IACrD,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU;WACxB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,OAAO,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACvD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,6BAAqB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAA,iCAAyB,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC1E,CAAC;AAED,sCACI,KAA+B;IAE/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAKlB,CAAC;IAEL,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,6BAAqB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,SAAS;QACb,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;eAC/C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;YAC9B,CAAC,CAAC,CAAC,CAAC;QACR,MAAM,OAAO,GAAG,IAAA,iCAAyB,EAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;YACpB,QAAQ,CAAC,eAAe,IAAI,UAAU,CAAC;YACvC,SAAS;QACb,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;YACjB,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC;YAC/B,OAAO;YACP,KAAK,EAAE,CAAC;YACR,eAAe,EAAE,UAAU;SAC9B,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,QAAQ;QACR,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,eAAe,EAAE,KAAK,CAAC,eAAe;KACzC,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,mCACI,KAA+B;IAE/B,MAAM,SAAS,GAAG,IAAI,GAAG,CACrB,4BAA4B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CACpF,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,6BAAqB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,SAAS;QACb,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;YACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,eAAe;SAC3C,CAAC,CAAC;IACP,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function mongodbDatabaseGroupKey(attributes: Record<string, unknown>): string | undefined;
2
+ //# sourceMappingURL=mongodb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../../src/core/repeated-database-queries/mongodb.ts"],"names":[],"mappings":"AAmBA,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,MAAM,GAAG,SAAS,CA2BpB"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mongodbDatabaseGroupKey = mongodbDatabaseGroupKey;
4
+ function normalizeMongoFilterShape(value) {
5
+ if (value === null || typeof value !== "object") {
6
+ return "?";
7
+ }
8
+ if (Array.isArray(value)) {
9
+ return value.map((item) => normalizeMongoFilterShape(item));
10
+ }
11
+ const record = value;
12
+ const normalized = {};
13
+ for (const key of Object.keys(record).sort()) {
14
+ normalized[key] = normalizeMongoFilterShape(record[key]);
15
+ }
16
+ return normalized;
17
+ }
18
+ function mongodbDatabaseGroupKey(attributes) {
19
+ if (attributes["db.system.name"] !== "mongodb") {
20
+ return undefined;
21
+ }
22
+ const collection = attributes["db.collection.name"];
23
+ const operation = attributes["db.operation.name"];
24
+ if (typeof collection !== "string" || collection.trim() === "") {
25
+ return undefined;
26
+ }
27
+ if (typeof operation !== "string" || operation.trim() === "") {
28
+ return undefined;
29
+ }
30
+ const queryText = attributes["db.query.text"];
31
+ if (typeof queryText === "string" && queryText.trim() !== "") {
32
+ try {
33
+ const parsed = JSON.parse(queryText);
34
+ const shape = JSON.stringify(normalizeMongoFilterShape(parsed));
35
+ return `mongodb:${operation}@${collection}:${shape}`;
36
+ }
37
+ catch {
38
+ return `mongodb:${operation}@${collection}`;
39
+ }
40
+ }
41
+ return `mongodb:${operation}@${collection}`;
42
+ }
43
+ //# sourceMappingURL=mongodb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../../../src/core/repeated-database-queries/mongodb.ts"],"names":[],"mappings":";;;AAAA,SAAS,yBAAyB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAE/C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,UAAU,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,iCACI,UAAmC;IAEnC,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAClD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAY,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;YAChE,OAAO,WAAW,SAAS,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,WAAW,SAAS,IAAI,UAAU,EAAE,CAAC;QAChD,CAAC;IACL,CAAC;IAED,OAAO,WAAW,SAAS,IAAI,UAAU,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function mysqlDatabaseGroupKey(attributes: Record<string, unknown>): string | undefined;
2
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../../src/core/repeated-database-queries/mysql.ts"],"names":[],"mappings":"AAEA,wBAAgB,qBAAqB,CACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,MAAM,GAAG,SAAS,CAYpB"}