@buoy-gg/network 7.0.56 → 7.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/network/conditions/NetworkFloatingTool.js +1 -1
- package/lib/commonjs/network/utils/startNetworkCapture.js +1 -1
- package/lib/module/network/conditions/NetworkFloatingTool.js +1 -1
- package/lib/module/network/utils/startNetworkCapture.js +1 -1
- package/lib/typescript/network/conditions/NetworkFloatingTool.d.ts +1 -0
- package/lib/web/index.mjs +25 -25
- package/package.json +2 -2
package/lib/web/index.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use client";var ro=Object.defineProperty;var
|
|
2
|
-
`).join("");Ge(e,"getAllResponseHeaders",()=>i),Ge(e,"getResponseHeader",s=>{let l=String(s).toLowerCase();for(let[a,d]of Object.entries(n))if(a.toLowerCase()===l)return d;return null}),Ge(e,"responseURL",t),Ge(e,"status",r.status),Ge(e,"statusText",r.statusText),Ge(e,"response",wa(e,r)),Ge(e,"responseText",r.body),Vt(e,fn),!o()&&(Vt(e,gn),!o()&&(Vt(e,Wt),!o()&&(ct(e,"load"),ct(e,"loadend"))))}function ao(e,t){Vt(e,Wt),ct(e,t.failKind==="timeout"?"timeout":"error"),ct(e,"loadend")}var Bt=new WeakMap;function Ta(e){return Bt.has(e)}function Ra(e,t,r,o){let n=ue(),i={},s,l,a=false,d=false,b=false,I=e.timeout,C=e.abort,S=e.open,q=["abort","open","timeout","readyState","status","statusText","response","responseText","responseURL","getAllResponseHeaders","getResponseHeader"],g=new Map(q.map(L=>[L,Object.getOwnPropertyDescriptor(e,L)])),T=Object.getPrototypeOf(e),k;for(;T&&!k;)k=Object.getOwnPropertyDescriptor(T,"timeout"),T=Object.getPrototypeOf(T);let f=()=>{a=true,Bt.get(e)===i&&Bt.delete(e),clearTimeout(s),hr(l),e.removeEventListener("loadend",f)},E=()=>{f();for(let[L,w]of g)w?Object.defineProperty(e,L,w):delete e[L];e.timeout=I},z=()=>{hr(l),b?k?.set?.call(e,I>0?Math.max(1,I-(ue()-n)):0):I>0&&(l=pn(()=>{a||(clearTimeout(s),ao(e,{...r,kind:"fail",failKind:"timeout"}),f())},Math.max(0,I-(ue()-n))))};return Object.defineProperty(e,"timeout",{configurable:true,get:()=>I,set:L=>{I=Math.max(0,Number(L)||0),z()}}),Object.defineProperty(e,"open",{configurable:true,value:(...L)=>(E(),Reflect.apply(S,e,L))}),Object.defineProperty(e,"abort",{configurable:true,value:()=>{if(b||a){E(),C.call(e);return}d=true,clearTimeout(s),Vt(e,Wt),ct(e,"abort"),ct(e,"loadend"),f(),Bt.has(e)||Ge(e,"readyState",0)}}),Bt.set(e,i),e.addEventListener("loadend",f),z(),s=setTimeout(()=>{if(!(a||d)){if(r.kind==="delay"){b=true,z();try{o()}catch{ao(e,{...r,kind:"fail",failKind:"network"}),f()}return}r.kind==="fail"?ao(e,r):Ca(e,t,r,()=>d||Bt.get(e)!==i),f()}},r.delayMs),true}function Sn(e,t,r,o){if(!yn(e))return va(e)?Ra(e,t,r,o):(Sa(),false);let n=pr(e);n._sent=true,n._requestId=null;let i=null,s=()=>{e.removeEventListener("abort",s),i!==null&&(clearTimeout(i),i=null)};return e.addEventListener("abort",s),i=setTimeout(()=>{if(i=null,e.removeEventListener("abort",s),!n._aborted){if(r.kind==="delay"){n._sent=false,o();return}if(r.kind==="fail"){vn(e,r);return}bn(e,t,r)}},r.delayMs),true}function ka(e,t,r){r.kind==="fail"?vn(e,r):r.kind==="respond"&&bn(e,t,r)}function Ia(e,t,r,o,n){if(!yn(e)){let w={id:"condition",enabled:true,urlPattern:t,kind:"delay",hits:0,seen:0,createdAt:Date.now()},H=r.profile==="offline"?{kind:"fail",rule:w,failKind:"network",delayMs:0}:o?{...o,delayMs:r.delayMs+o.delayMs}:{kind:"delay",rule:w,delayMs:r.delayMs};if(!Sn(e,t,H,n))throw new Error("Network conditions are unavailable for this XMLHttpRequest implementation.");return}let i=e;if(i.readyState!==1||i._sent)throw new Error("Request is not open or has already been sent.");let s=ue(),l=i.timeout,a=false,d=false,b,I,C=i.abort,S=i.open,q=Object.getOwnPropertyDescriptor(i,"abort"),g=Object.getOwnPropertyDescriptor(i,"open"),T=Object.getOwnPropertyDescriptor(i,"timeout"),k=(w,H)=>{H?Object.defineProperty(i,w,H):delete i[w]},f=()=>{a||(a=true,clearTimeout(I),hr(b),i.removeEventListener("loadend",f),k("abort",q),k("open",g),k("timeout",T),i.timeout=l)},E=w=>{a||(Object.assign(i,{readyState:4}),C.call(i),i._aborted=false,i._hasError=true,i._timedOut=w,i._response=w?"Request timed out (Buoy conditions)":"Network request failed (Buoy Offline)",i.setReadyState(4),f())},z=()=>l>0&&ue()-s>=l,L=()=>{hr(b),l>0&&(b=pn(()=>E(true),Math.max(0,l-(ue()-s))))};Object.defineProperty(i,"timeout",{configurable:true,get:()=>d?0:l,set:w=>{l=Math.max(0,Number(w)||0),L()}}),Object.defineProperty(i,"abort",{configurable:true,value:()=>{a||(C.call(i),f())}}),Object.defineProperty(i,"open",{configurable:true,value:(...w)=>{let H=Reflect.apply(S,i,w);return f(),H}}),i._sent=true,i._requestId=null,i.addEventListener("loadend",f),L(),I=setTimeout(()=>{if(!a){if(z()){E(true);return}if(r.profile==="offline"){E(false);return}if(o&&o.kind!=="delay"){ka(i,t,o);return}i._sent=false,d=true;try{n()}catch{E(false)}finally{d=false}}},r.delayMs+(o?.delayMs??0))}D();function fr(e){if(!e?.aborted)return;if(e.reason!==void 0)throw e.reason;let t=new Error("The request was aborted.");throw t.name="AbortError",t}function Ea(e,t){return new Promise((r,o)=>{try{fr(t)}catch(l){o(l);return}let n=()=>t?.removeEventListener("abort",i),i=()=>{clearTimeout(s),n();try{fr(t)}catch(l){o(l)}},s=setTimeout(()=>{n(),r()},e);t?.addEventListener("abort",i,{once:true})})}D();import{hasAccountAccess as La}from"@buoy-gg/shared-ui/web";D();D();var Pa="[]{}()\\.^$+|-,?";function xn(e){let t="";for(let r=0;r<e.length;r++){let o=e.charAt(r);Pa.indexOf(o)!==-1&&(t+="\\"),t+=o}return t.split("*").join(".*")}var gr=new Map;function Ba(e){let t=gr.get(e);if(t)return t;let r=e.startsWith("/")?`[a-zA-Z][a-zA-Z0-9+.-]*://[^/]*${xn(e)}`:xn(e),o=new RegExp(`^${r}$`);return gr.size>200&&gr.clear(),gr.set(e,o),o}function qa(e,t){if(!e)return false;let r=t.toLowerCase();for(let o of Object.keys(e))if(o.toLowerCase()===r&&e[o]!==void 0&&e[o]!=="")return true;return false}function lo(e,t,r,o){if(e.methods&&e.methods.length>0&&!e.methods.includes(r.toUpperCase())||e.requireHeader&&!qa(o,e.requireHeader))return false;try{return Ba(e.urlPattern).test(t)}catch{return false}}D();import{TIER_LIMITS as Oa}from"@buoy-gg/shared-ui/web";var Ut=200,_t=599,rt=50,wn=Oa["network.overrideRules"].free;function Cn(e){return{ruleId:e.rule.id,ruleName:e.rule.name,kind:e.kind,delayMs:e.delayMs||void 0}}var Da=[/(^|\.)keygen\.sh/i,/^https?:\/\/(www\.)?buoy\.gg\/api\/license(\/|$)/i];function za(e){return Da.some(t=>t.test(e))}function Aa(e){let t=e.trim();if(t==="")return"text/plain; charset=utf-8";if(t.startsWith("{")||t.startsWith("["))try{return JSON.parse(t),"application/json"}catch{}return"text/plain; charset=utf-8"}function Ha(e,t){let r=t.toLowerCase();return Object.keys(e).some(o=>o.toLowerCase()===r)}function Ma(e){let t=Math.max(0,e.delayMs??0);if(e.kind==="delay")return{kind:"delay",rule:e,delayMs:t};if(e.kind==="fail")return{kind:"fail",rule:e,delayMs:t,failKind:e.failKind??"network"};let r=e.body??"",o={...e.headers??{}};return Ha(o,"content-type")||(o["content-type"]=Aa(r)),{kind:"respond",rule:e,delayMs:t,status:Math.min(_t,Math.max(Ut,e.status??200)),statusText:e.statusText??"",headers:o,body:r}}function uo(e){return typeof e.times=="number"&&e.hits>=e.times}function Na(e){return e.alternate?e.seen%2===1:true}function Tn(e,t,r,o){if(r.length===0||t.toUpperCase()==="OPTIONS"||za(e))return null;for(let n of r)if(n.enabled&&!uo(n)&&lo(n,e,t,o))return n;return null}var $e=null;function Fa(e){$e=e}function Rn(){return La()&&!(typeof Te<"u"&&!Te)}var $a="Response overrides never apply in a release build \u2014 the rule is saved but will not affect any request.";function ja(e,t){return{hooksInstalled:$e!==null,devFlag:typeof Te>"u"?"undefined":Te,ruleCount:$e?$e.getRules().length:0,matches:$e?Tn(e,t,$e.getRules())!==null:false}}function kn(e,t,r){if(!$e||!Rn())return null;let o=$e.getRules();if(o.length===0)return null;let n=Tn(e,t,o,r);if(!n)return null;let i=Na(n);return $e.recordMatch(n.id),i?($e.recordHit(n.id),Ma(n)):null}D();function Wa(){return typeof Response=="function"}function Va(e,t){let r=new Response(t.body,{status:t.status,statusText:t.statusText,headers:t.headers});try{Object.defineProperty(r,"url",{value:e,configurable:true})}catch{}return r}function Ua(e){return new TypeError(e.failKind==="timeout"?"Network request timed out":"Network request failed")}D();var _a={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",408:"Request Timeout",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"};function Xa(e){return typeof e=="number"&&e>0?"response":"error"}function Ja(e,t){let r=(t??"").trim();return r||(_a[e]??"")}var ht;function In(e){let t=globalThis.__buoyHeaderInjectors;if(!t||t.length===0)return;let r;for(let o of t)try{let n=o(e);n&&(r={...r,...n})}catch{}return r}function Ga(){if(ht!==void 0)return ht;ht=null;try{if(typeof Te<"u"&&!Te)return ht;let e=(ce(),Rs(no))?.NativeModules?.SourceCode,t=e?.getConstants?.().scriptURL??e?.scriptURL;if(typeof t=="string"&&/^https?:\/\//.test(t)){let r=new URL(t);ht=`${r.protocol}//${r.host}`}}catch{ht=null}return ht}var mr=false;function Ka(e){let t={};if(!e)return t;if(typeof Headers<"u"&&e instanceof Headers)e.forEach((r,o)=>{t[o]=r});else if(Array.isArray(e))for(let[r,o]of e)t[r]=o;else Object.assign(t,e);return t}var En="__buoyNetworkFetchIntercepted",Ln="__buoyNetworkXhrIntercepted",Ya=["text/event-stream","application/x-ndjson","application/stream+json"],Pn="[streaming\u2026]";function Za(e){if(!e)return false;let t=e.toLowerCase();return Ya.some(r=>t.includes(r))}var Qa="__BUOY_INTERNAL_HOSTS__";function el(e){let t=globalThis[Qa];if(!(t instanceof Set)||t.size===0)return false;let r;try{r=new URL(e).host.toLowerCase()}catch{return false}for(let o of t)if(typeof o=="string"&&o&&r===o.toLowerCase())return true;return false}var tl=class{constructor(){this.listeners=[];this.isListening=false;this.patchedFetch=null;this.patchedXHROpen=null;this.patchedXHRSend=null;this.patchedXHRSetRequestHeader=null;this.fetchGeneration=0;this.xhrGeneration=0;this.originalFetch=globalThis.fetch,this.originalXHROpen=XMLHttpRequest.prototype.open,this.originalXHRSend=XMLHttpRequest.prototype.send,this.originalXHRSetRequestHeader=XMLHttpRequest.prototype.setRequestHeader}shouldIgnoreUrl(e){try{let t=new URL(e);if(t.hostname==="keygen.sh"||t.hostname.endsWith(".keygen.sh")||(t.hostname==="buoy.gg"||t.hostname==="www.buoy.gg")&&t.pathname.startsWith("/api/license")||(t.hostname==="localhost"||t.hostname==="127.0.0.1"||t.hostname==="10.0.2.2")&&["8081","8802"].includes(t.port))return true;let r=Ga();if(r&&`${t.protocol}//${t.host}`===r)return true}catch{return false}return el(e)}emit(e){this.listeners.forEach(t=>{try{t(e)}catch{}})}parseUrl(e){let t=null,r=e.indexOf("?");return r>-1&&(t={},e.substring(r+1).split("&").forEach(o=>{let[n,i]=o.split("=");n&&i!==void 0&&(t[n]=decodeURIComponent(i.replace(/\+/g," ")))})),{url:r>-1?e.substring(0,r):e,params:t}}async readStreamedBody(e,t=256*1024){let r=e.body;if(!r||typeof r.getReader!="function"){let a=await e.text();return a.length>t?{body:`${a.slice(0,t)}
|
|
1
|
+
"use client";var ro=Object.defineProperty;var xs=Object.getOwnPropertyDescriptor;var ws=Object.getOwnPropertyNames;var Cs=Object.prototype.hasOwnProperty;var Qo=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ts=(e,t)=>{for(var r in t)ro(e,r,{get:t[r],enumerable:true})},oo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ws(t))!Cs.call(e,n)&&n!==r&&ro(e,n,{get:()=>t[n],enumerable:!(o=xs(t,n))||o.enumerable});return e},Rs=(e,t,r)=>(oo(e,t,"default"),r&&oo(r,t,"default"));var ks=e=>oo(ro({},"__esModule",{value:true}),e);var me,D=Qo(()=>{"use strict";me=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis)});var no={};Ts(no,{AccessibilityInfo:()=>Ls,ActivityIndicator:()=>so,Alert:()=>dn,Animated:()=>Bs,AppRegistry:()=>Os,AppState:()=>Ds,Appearance:()=>qs,BackHandler:()=>zs,Button:()=>an,CheckBox:()=>Ys,Clipboard:()=>As,DeviceEventEmitter:()=>ha,Dimensions:()=>Hs,Easing:()=>Ms,FlatList:()=>io,I18nManager:()=>Ns,Image:()=>Zs,ImageBackground:()=>Qs,InteractionManager:()=>Fs,Keyboard:()=>$s,KeyboardAvoidingView:()=>ea,LayoutAnimation:()=>js,Linking:()=>Ws,LogBox:()=>ca,Modal:()=>nn,NativeEventEmitter:()=>Vs,NativeModules:()=>Is,PanResponder:()=>Us,Picker:()=>ta,PixelRatio:()=>_s,Platform:()=>Xs,Pressable:()=>on,ProgressBar:()=>ra,RefreshControl:()=>oa,SafeAreaView:()=>na,ScrollView:()=>ut,SectionList:()=>ia,Share:()=>Js,StatusBar:()=>sa,StyleSheet:()=>fe,Switch:()=>sn,Text:()=>y,TextInput:()=>Lt,Touchable:()=>aa,TouchableHighlight:()=>tn,TouchableNativeFeedback:()=>la,TouchableOpacity:()=>N,TouchableWithoutFeedback:()=>rn,UIManager:()=>Gs,Vibration:()=>Ks,View:()=>p,VirtualizedList:()=>da,YellowBox:()=>ua,findNodeHandle:()=>ln,unstable_createElement:()=>Ps,useColorScheme:()=>pa,useLocaleContext:()=>fa,useWindowDimensions:()=>en});import*as Es from"react-native-web";import{unstable_createElement as Ps,NativeModules as Is,AccessibilityInfo as Ls,Animated as Bs,Appearance as qs,AppRegistry as Os,AppState as Ds,BackHandler as zs,Clipboard as As,Dimensions as Hs,Easing as Ms,I18nManager as Ns,Keyboard as $s,InteractionManager as Fs,LayoutAnimation as js,Linking as Ws,NativeEventEmitter as Vs,PanResponder as Us,PixelRatio as _s,Platform as Xs,Share as Js,StyleSheet as fe,UIManager as Gs,Vibration as Ks,CheckBox as Ys,FlatList as io,Image as Zs,ImageBackground as Qs,KeyboardAvoidingView as ea,Picker as ta,ProgressBar as ra,RefreshControl as oa,SafeAreaView as na,SectionList as ia,StatusBar as sa,Touchable as aa,TouchableNativeFeedback as la,VirtualizedList as da,YellowBox as ua,LogBox as ca,DeviceEventEmitter as ha,useColorScheme as pa,useLocaleContext as fa,useWindowDimensions as en}from"react-native-web";import*as Le from"react-native-web";import{createElement as ga,forwardRef as ma}from"react";function ze(e){let t=ma((o,n)=>{let{accessibilityState:i,accessibilityValue:s,...l}=o;for(let a of["busy","checked","disabled","expanded","selected"])i?.[a]!==void 0&&l[`aria-${a}`]===void 0&&(l[`aria-${a}`]=i[a]);for(let[a,d]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))s?.[a]!==void 0&&l[`aria-${d}`]===void 0&&(l[`aria-${d}`]=s[a]);return ga(e,{...l,ref:n})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var p,y,Lt,N,tn,rn,on,ut,nn,sn,so,an,ln,dn,ce=Qo(()=>{D();Rs(no,Es);p=ze(Le.View),y=ze(Le.Text),Lt=ze(Le.TextInput),N=ze(Le.TouchableOpacity),tn=ze(Le.TouchableHighlight),rn=ze(Le.TouchableWithoutFeedback),on=ze(Le.Pressable),ut=ze(Le.ScrollView),nn=ze(Le.Modal),sn=ze(Le.Switch),so=ze(Le.ActivityIndicator),an=ze(Le.Button),ln=Le.findNodeHandle,dn={alert(e,t,r,o){if(typeof document>"u")return;let n=document.createElement("dialog");n.dataset.buoyRoot="",n.setAttribute("aria-label",e),n.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let i=document.createElement("h2");if(i.textContent=e,i.style.cssText="font-size:18px;margin:0 0 12px",n.appendChild(i),t){let d=document.createElement("p");d.textContent=t,d.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",n.appendChild(d)}let s=document.createElement("div");s.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let l=r?.length?r:[{text:"OK"}],a=()=>{n.close?.(),n.remove()};for(let d of l){let b=document.createElement("button");b.type="button",b.textContent=d.text??"OK",b.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${d.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,b.onclick=()=>{a(),d.onPress?.()},s.appendChild(b)}n.addEventListener("cancel",d=>{d.preventDefault(),o?.cancelable!==false&&(a(),o?.onDismiss?.())}),n.appendChild(s),document.body.appendChild(n),n.showModal?n.showModal():n.setAttribute("open","")}}});D();D();D();ce();import{useSyncExternalStore as ya}from"react";import{NetworkIcon as ba}from"@buoy-gg/shared-ui/web";D();import{hasAccountAccess as un,subscribeAccountAccess as va}from"@buoy-gg/shared-ui/web";D();D();function ur(e){if(typeof document>"u")return e;try{return new URL(e,document.baseURI).href}catch{return e}}D();var cn=globalThis;function cr(e){let t=cn.__BUOY_NETWORK_REQUEST_SEQUENCE__??(cn.__BUOY_NETWORK_REQUEST_SEQUENCE__={session:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,next:0});return`${e}_${t.session}_${++t.next}`}D();D();D();function ue(){let e=globalThis.__buoyRealNow;return typeof e=="function"?e():Date.now()}function hn(){return globalThis.__buoyRealTimers??globalThis}function pn(e,t){return hn().setTimeout(e,t)}function hr(e){hn().clearTimeout(e)}var fn=2,gn=3,Wt=4,pr=e=>e,mn=false;function yn(e){let t=pr(e);return typeof t.setReadyState=="function"&&typeof t.setResponseHeaders=="function"}function Sa(e){return typeof e.addEventListener=="function"&&typeof e.removeEventListener=="function"&&typeof e.dispatchEvent=="function"}function xa(){mn||(mn=true,typeof me<"u"&&me&&console.warn("[Buoy] Network overrides need an XMLHttpRequest they can drive (React Native's, or a standards EventTarget one) and this environment provides neither \u2014 requests will run normally."))}function bn(e,t,r){let o=pr(e);o.responseURL=t,o.status=r.status,o.statusText=r.statusText,o.setResponseHeaders?.(r.headers),o.setReadyState?.(fn),!o._aborted&&(o._responseType="text",o._response=r.body,o._cachedResponse=void 0,o.setReadyState?.(gn),!o._aborted&&o.setReadyState?.(Wt))}function vn(e,t){let r=pr(e),o=t.failKind==="timeout";r._hasError=true,r._timedOut=o,r._responseType="text",r._response=o?"Request timed out (Buoy override)":"Network request failed (Buoy override)",r._cachedResponse=void 0,r.setReadyState?.(Wt)}function Ge(e,t,r){Object.defineProperty(e,t,{value:r,configurable:true,enumerable:true,writable:false})}function wa(e){if(e!=="readystatechange"&&typeof ProgressEvent=="function")try{return new ProgressEvent(e)}catch{}if(typeof Event=="function")try{return new Event(e)}catch{}return{type:e}}function ct(e,t){e.dispatchEvent(wa(t))}function Vt(e,t){Ge(e,"readyState",t),ct(e,"readystatechange")}function Ca(e,t){let r="";try{r=e.responseType}catch{}switch(r){case"":case"text":return t.body;case"json":try{return JSON.parse(t.body)}catch{return null}case"arraybuffer":return typeof TextEncoder=="function"?new TextEncoder().encode(t.body).buffer:t.body;case"blob":if(typeof Blob=="function"){let o=Object.entries(t.headers).find(([n])=>n.toLowerCase()==="content-type")?.[1]??"";return new Blob([t.body],{type:o})}return t.body;default:return t.body}}function Ta(e,t,r,o){let n=r.headers,i=Object.entries(n).map(([s,l])=>`${s.toLowerCase()}: ${l}\r
|
|
2
|
+
`).join("");Ge(e,"getAllResponseHeaders",()=>i),Ge(e,"getResponseHeader",s=>{let l=String(s).toLowerCase();for(let[a,d]of Object.entries(n))if(a.toLowerCase()===l)return d;return null}),Ge(e,"responseURL",t),Ge(e,"status",r.status),Ge(e,"statusText",r.statusText),Ge(e,"response",Ca(e,r)),Ge(e,"responseText",r.body),Vt(e,fn),!o()&&(Vt(e,gn),!o()&&(Vt(e,Wt),!o()&&(ct(e,"load"),ct(e,"loadend"))))}function ao(e,t){Vt(e,Wt),ct(e,t.failKind==="timeout"?"timeout":"error"),ct(e,"loadend")}var Bt=new WeakMap;function Ra(e){return Bt.has(e)}function ka(e,t,r,o){let n=ue(),i={},s,l,a=false,d=false,b=false,E=e.timeout,C=e.abort,S=e.open,q=["abort","open","timeout","readyState","status","statusText","response","responseText","responseURL","getAllResponseHeaders","getResponseHeader"],g=new Map(q.map(I=>[I,Object.getOwnPropertyDescriptor(e,I)])),T=Object.getPrototypeOf(e),k;for(;T&&!k;)k=Object.getOwnPropertyDescriptor(T,"timeout"),T=Object.getPrototypeOf(T);let f=()=>{a=true,Bt.get(e)===i&&Bt.delete(e),clearTimeout(s),hr(l),e.removeEventListener("loadend",f)},P=()=>{f();for(let[I,w]of g)w?Object.defineProperty(e,I,w):delete e[I];e.timeout=E},z=()=>{hr(l),b?k?.set?.call(e,E>0?Math.max(1,E-(ue()-n)):0):E>0&&(l=pn(()=>{a||(clearTimeout(s),ao(e,{...r,kind:"fail",failKind:"timeout"}),f())},Math.max(0,E-(ue()-n))))};return Object.defineProperty(e,"timeout",{configurable:true,get:()=>E,set:I=>{E=Math.max(0,Number(I)||0),z()}}),Object.defineProperty(e,"open",{configurable:true,value:(...I)=>(P(),Reflect.apply(S,e,I))}),Object.defineProperty(e,"abort",{configurable:true,value:()=>{if(b||a){P(),C.call(e);return}d=true,clearTimeout(s),Vt(e,Wt),ct(e,"abort"),ct(e,"loadend"),f(),Bt.has(e)||Ge(e,"readyState",0)}}),Bt.set(e,i),e.addEventListener("loadend",f),z(),s=setTimeout(()=>{if(!(a||d)){if(r.kind==="delay"){b=true,z();try{o()}catch{ao(e,{...r,kind:"fail",failKind:"network"}),f()}return}r.kind==="fail"?ao(e,r):Ta(e,t,r,()=>d||Bt.get(e)!==i),f()}},r.delayMs),true}function Sn(e,t,r,o){if(!yn(e))return Sa(e)?ka(e,t,r,o):(xa(),false);let n=pr(e);n._sent=true,n._requestId=null;let i=null,s=()=>{e.removeEventListener("abort",s),i!==null&&(clearTimeout(i),i=null)};return e.addEventListener("abort",s),i=setTimeout(()=>{if(i=null,e.removeEventListener("abort",s),!n._aborted){if(r.kind==="delay"){n._sent=false,o();return}if(r.kind==="fail"){vn(e,r);return}bn(e,t,r)}},r.delayMs),true}function Ea(e,t,r){r.kind==="fail"?vn(e,r):r.kind==="respond"&&bn(e,t,r)}function Pa(e,t,r,o,n){if(!yn(e)){let w={id:"condition",enabled:true,urlPattern:t,kind:"delay",hits:0,seen:0,createdAt:Date.now()},H=r.profile==="offline"?{kind:"fail",rule:w,failKind:"network",delayMs:0}:o?{...o,delayMs:r.delayMs+o.delayMs}:{kind:"delay",rule:w,delayMs:r.delayMs};if(!Sn(e,t,H,n))throw new Error("Network conditions are unavailable for this XMLHttpRequest implementation.");return}let i=e;if(i.readyState!==1||i._sent)throw new Error("Request is not open or has already been sent.");let s=ue(),l=i.timeout,a=false,d=false,b,E,C=i.abort,S=i.open,q=Object.getOwnPropertyDescriptor(i,"abort"),g=Object.getOwnPropertyDescriptor(i,"open"),T=Object.getOwnPropertyDescriptor(i,"timeout"),k=(w,H)=>{H?Object.defineProperty(i,w,H):delete i[w]},f=()=>{a||(a=true,clearTimeout(E),hr(b),i.removeEventListener("loadend",f),k("abort",q),k("open",g),k("timeout",T),i.timeout=l)},P=w=>{a||(Object.assign(i,{readyState:4}),C.call(i),i._aborted=false,i._hasError=true,i._timedOut=w,i._response=w?"Request timed out (Buoy conditions)":"Network request failed (Buoy Offline)",i.setReadyState(4),f())},z=()=>l>0&&ue()-s>=l,I=()=>{hr(b),l>0&&(b=pn(()=>P(true),Math.max(0,l-(ue()-s))))};Object.defineProperty(i,"timeout",{configurable:true,get:()=>d?0:l,set:w=>{l=Math.max(0,Number(w)||0),I()}}),Object.defineProperty(i,"abort",{configurable:true,value:()=>{a||(C.call(i),f())}}),Object.defineProperty(i,"open",{configurable:true,value:(...w)=>{let H=Reflect.apply(S,i,w);return f(),H}}),i._sent=true,i._requestId=null,i.addEventListener("loadend",f),I(),E=setTimeout(()=>{if(!a){if(z()){P(true);return}if(r.profile==="offline"){P(false);return}if(o&&o.kind!=="delay"){Ea(i,t,o);return}i._sent=false,d=true;try{n()}catch{P(false)}finally{d=false}}},r.delayMs+(o?.delayMs??0))}D();function fr(e){if(!e?.aborted)return;if(e.reason!==void 0)throw e.reason;let t=new Error("The request was aborted.");throw t.name="AbortError",t}function Ia(e,t){return new Promise((r,o)=>{try{fr(t)}catch(l){o(l);return}let n=()=>t?.removeEventListener("abort",i),i=()=>{clearTimeout(s),n();try{fr(t)}catch(l){o(l)}},s=setTimeout(()=>{n(),r()},e);t?.addEventListener("abort",i,{once:true})})}D();import{hasAccountAccess as La}from"@buoy-gg/shared-ui/web";D();D();var Ba="[]{}()\\.^$+|-,?";function xn(e){let t="";for(let r=0;r<e.length;r++){let o=e.charAt(r);Ba.indexOf(o)!==-1&&(t+="\\"),t+=o}return t.split("*").join(".*")}var gr=new Map;function qa(e){let t=gr.get(e);if(t)return t;let r=e.startsWith("/")?`[a-zA-Z][a-zA-Z0-9+.-]*://[^/]*${xn(e)}`:xn(e),o=new RegExp(`^${r}$`);return gr.size>200&&gr.clear(),gr.set(e,o),o}function Oa(e,t){if(!e)return false;let r=t.toLowerCase();for(let o of Object.keys(e))if(o.toLowerCase()===r&&e[o]!==void 0&&e[o]!=="")return true;return false}function lo(e,t,r,o){if(e.methods&&e.methods.length>0&&!e.methods.includes(r.toUpperCase())||e.requireHeader&&!Oa(o,e.requireHeader))return false;try{return qa(e.urlPattern).test(t)}catch{return false}}D();import{TIER_LIMITS as Da}from"@buoy-gg/shared-ui/web";var Ut=200,_t=599,rt=50,wn=Da["network.overrideRules"].free;function Cn(e){return{ruleId:e.rule.id,ruleName:e.rule.name,kind:e.kind,delayMs:e.delayMs||void 0}}var za=[/(^|\.)keygen\.sh/i,/^https?:\/\/(www\.)?buoy\.gg\/api\/license(\/|$)/i];function Aa(e){return za.some(t=>t.test(e))}function Ha(e){let t=e.trim();if(t==="")return"text/plain; charset=utf-8";if(t.startsWith("{")||t.startsWith("["))try{return JSON.parse(t),"application/json"}catch{}return"text/plain; charset=utf-8"}function Ma(e,t){let r=t.toLowerCase();return Object.keys(e).some(o=>o.toLowerCase()===r)}function Na(e){let t=Math.max(0,e.delayMs??0);if(e.kind==="delay")return{kind:"delay",rule:e,delayMs:t};if(e.kind==="fail")return{kind:"fail",rule:e,delayMs:t,failKind:e.failKind??"network"};let r=e.body??"",o={...e.headers??{}};return Ma(o,"content-type")||(o["content-type"]=Ha(r)),{kind:"respond",rule:e,delayMs:t,status:Math.min(_t,Math.max(Ut,e.status??200)),statusText:e.statusText??"",headers:o,body:r}}function uo(e){return typeof e.times=="number"&&e.hits>=e.times}function $a(e){return e.alternate?e.seen%2===1:true}function Tn(e,t,r,o){if(r.length===0||t.toUpperCase()==="OPTIONS"||Aa(e))return null;for(let n of r)if(n.enabled&&!uo(n)&&lo(n,e,t,o))return n;return null}var Fe=null;function Fa(e){Fe=e}function Rn(){return La()&&!(typeof me<"u"&&!me)}var ja="Response overrides never apply in a release build \u2014 the rule is saved but will not affect any request.";function Wa(e,t){return{hooksInstalled:Fe!==null,devFlag:typeof me>"u"?"undefined":me,ruleCount:Fe?Fe.getRules().length:0,matches:Fe?Tn(e,t,Fe.getRules())!==null:false}}function kn(e,t,r){if(!Fe||!Rn())return null;let o=Fe.getRules();if(o.length===0)return null;let n=Tn(e,t,o,r);if(!n)return null;let i=$a(n);return Fe.recordMatch(n.id),i?(Fe.recordHit(n.id),Na(n)):null}D();function Va(){return typeof Response=="function"}function Ua(e,t){let r=new Response(t.body,{status:t.status,statusText:t.statusText,headers:t.headers});try{Object.defineProperty(r,"url",{value:e,configurable:true})}catch{}return r}function _a(e){return new TypeError(e.failKind==="timeout"?"Network request timed out":"Network request failed")}D();var Xa={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",408:"Request Timeout",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"};function Ja(e){return typeof e=="number"&&e>0?"response":"error"}function Ga(e,t){let r=(t??"").trim();return r||(Xa[e]??"")}var ht;function En(e){let t=globalThis.__buoyHeaderInjectors;if(!t||t.length===0)return;let r;for(let o of t)try{let n=o(e);n&&(r={...r,...n})}catch{}return r}function Ka(){if(ht!==void 0)return ht;ht=null;try{if(typeof me<"u"&&!me)return ht;let e=(ce(),ks(no))?.NativeModules?.SourceCode,t=e?.getConstants?.().scriptURL??e?.scriptURL;if(typeof t=="string"&&/^https?:\/\//.test(t)){let r=new URL(t);ht=`${r.protocol}//${r.host}`}}catch{ht=null}return ht}var mr=false;function Ya(e){let t={};if(!e)return t;if(typeof Headers<"u"&&e instanceof Headers)e.forEach((r,o)=>{t[o]=r});else if(Array.isArray(e))for(let[r,o]of e)t[r]=o;else Object.assign(t,e);return t}var Pn="__buoyNetworkFetchIntercepted",In="__buoyNetworkXhrIntercepted",Za=["text/event-stream","application/x-ndjson","application/stream+json"],Ln="[streaming\u2026]";function Qa(e){if(!e)return false;let t=e.toLowerCase();return Za.some(r=>t.includes(r))}var el="__BUOY_INTERNAL_HOSTS__";function tl(e){let t=globalThis[el];if(!(t instanceof Set)||t.size===0)return false;let r;try{r=new URL(e).host.toLowerCase()}catch{return false}for(let o of t)if(typeof o=="string"&&o&&r===o.toLowerCase())return true;return false}var rl=class{constructor(){this.listeners=[];this.isListening=false;this.patchedFetch=null;this.patchedXHROpen=null;this.patchedXHRSend=null;this.patchedXHRSetRequestHeader=null;this.fetchGeneration=0;this.xhrGeneration=0;this.originalFetch=globalThis.fetch,this.originalXHROpen=XMLHttpRequest.prototype.open,this.originalXHRSend=XMLHttpRequest.prototype.send,this.originalXHRSetRequestHeader=XMLHttpRequest.prototype.setRequestHeader}shouldIgnoreUrl(e){try{let t=new URL(e);if(t.hostname==="keygen.sh"||t.hostname.endsWith(".keygen.sh")||(t.hostname==="buoy.gg"||t.hostname==="www.buoy.gg")&&t.pathname.startsWith("/api/license")||(t.hostname==="localhost"||t.hostname==="127.0.0.1"||t.hostname==="10.0.2.2")&&["8081","8802"].includes(t.port))return true;let r=Ka();if(r&&`${t.protocol}//${t.host}`===r)return true}catch{return false}return tl(e)}emit(e){this.listeners.forEach(t=>{try{t(e)}catch{}})}parseUrl(e){let t=null,r=e.indexOf("?");return r>-1&&(t={},e.substring(r+1).split("&").forEach(o=>{let[n,i]=o.split("=");n&&i!==void 0&&(t[n]=decodeURIComponent(i.replace(/\+/g," ")))})),{url:r>-1?e.substring(0,r):e,params:t}}async readStreamedBody(e,t=256*1024){let r=e.body;if(!r||typeof r.getReader!="function"){let a=await e.text();return a.length>t?{body:`${a.slice(0,t)}
|
|
3
3
|
|
|
4
4
|
... [truncated]`,size:a.length}:{body:a,size:a.length}}let o=r.getReader(),n=new TextDecoder,i="",s=0,l=false;try{for(;;){let{done:a,value:d}=await o.read();if(a)break;if(s+=d?.byteLength??0,!l&&(i+=n.decode(d,{stream:true}),s>=t)){i=`${i.slice(0,t)}
|
|
5
5
|
|
|
6
6
|
... [truncated]`,l=true;break}}l||(i+=n.decode())}finally{try{Promise.resolve(o.cancel()).catch(()=>{})}catch{}try{o.releaseLock()}catch{}}return{body:i,size:s}}async processResponseBody(e,t=1024*1024){try{let r=e.headers.get("content-length");if(r){let i=parseInt(r,10);if(!isNaN(i)&&i>t)return{body:`[Response too large: ${this.formatBytes(i)}]`,size:i,truncated:true}}let o=await e.text(),n=o.length;if(n>t){let i=o.substring(0,t),s=n-t;return{body:`${i}
|
|
7
7
|
|
|
8
|
-
... [truncated, ${this.formatBytes(s)} omitted]`,size:n,truncated:true}}try{return{body:JSON.parse(o),size:n,truncated:false}}catch{return{body:o,size:n,truncated:false}}}catch{return{body:"~~~ unable to read body ~~~",size:0,truncated:false}}}formatBytes(e){if(e===0)return"0 B";let t=1024,r=["B","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${Math.round(e/Math.pow(t,o)*100)/100} ${r[o]}`}handleXHRResponse(e,t,r,o,n,i,s,l,a=false,d="xhr",b,
|
|
9
|
-
`).forEach(E=>{if(E){let z=E.indexOf(": ");if(z>0){let L=E.substring(0,z).toLowerCase(),w=E.substring(z+2);k[L]=w}}})}catch{}Xa(e.status)==="response"?this.emit({type:"response",timestamp:new Date,duration:C,timings:q,request:{id:t||"unknown",url:r,method:o,headers:n,data:i,params:s||void 0,client:d},response:{status:e.status,statusText:Ja(e.status,e.statusText),headers:k,body:g,size:T},override:b,condition:I}):this.emit({type:"error",timestamp:new Date,duration:C,request:{id:t||"unknown",url:r,method:o,headers:n,data:i,params:s||void 0,client:d},response:{status:e.status,statusText:e.statusText,headers:k,body:g,size:T},error:{message:"Network Error"},override:b,condition:I})}isFetchInterceptionLive(){return globalThis.fetch[En]===true}isXhrInterceptionLive(){return XMLHttpRequest.prototype.send[Ln]===true}isInterceptionLive(){return this.isFetchInterceptionLive()&&this.isXhrInterceptionLive()}startListening(){let e=this.isListening&&this.isFetchInterceptionLive(),t=this.isListening&&this.isXhrInterceptionLive();e&&t||(e||this.installFetchInterceptor(),t||this.installXhrInterceptor(),this.isListening=true)}installFetchInterceptor(){let e=this,t=globalThis.fetch.bind(globalThis);this.originalFetch=globalThis.fetch;let r=++this.fetchGeneration,o=async(n,i)=>{let s=ur(typeof n=="string"?n:n instanceof URL?n.href:n.url);if(r!==e.fetchGeneration||e.shouldIgnoreUrl(s))return t(n,i);let l=ue(),a=cr("fetch"),d=typeof n=="object"&&"method"in n?n:void 0,b=i?.method??d?.method??"GET",I=i?.signal!==void 0?i.signal:d?.signal;fr(I);let C=On(s),{url:S,params:q}=e.parseUrl(s),g={},T=i?.headers??d?.headers;T&&(T instanceof Headers?T.forEach((L,w)=>{g[w]=L}):Array.isArray(T)?T.forEach(([L,w])=>{g[L]=w}):g={...T}),Object.assign(g,In(s));let k;if(i?.body)if(typeof i.body=="string")try{k=JSON.parse(i.body)}catch{k=i.body}else k=i.body;let f=g["X-Request-Client"]||g["x-request-client"]||"fetch",E=C?.profile!=="offline"&&Wa()?kn(s,b,g):null,z=E?Cn(E):void 0;if(e.emit({type:"request",timestamp:new Date,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},override:z,condition:C}),i?.body===void 0&&d?.body&&!d.bodyUsed)try{let L=d.clone();e.readStreamedBody(L).then(({body:w})=>{try{k=JSON.parse(w)}catch{k=w}e.emit({type:"request-body",timestamp:new Date,request:{id:a||"unknown",url:S,method:b,data:k,client:f}})}).catch(()=>{})}catch{}try{if((C||E)&&await Ea((C?.delayMs??0)+(E?.delayMs??0),I),fr(I),C?.profile==="offline")throw new TypeError("Network request failed (Buoy Offline)");if(E?.kind==="fail")throw Ua(E);let L;if(E?.kind==="respond")L=Va(s,E);else{let Z=mr;mr=true;let ee;try{ee=t(n,i)}finally{mr=Z}L=await ee}let w=ue()-l,H=typeof L.body?.getReader=="function"||Za(L.headers?.get?.("content-type")),v=L.clone(),{body:h,size:c}=H?{body:Pn,size:0}:await e.processResponseBody(v),u=ue()-l,m=Math.max(0,u-w),O=m>0?{ttfb:w,download:m}:void 0,re={};return L.headers.forEach((Z,ee)=>{re[ee.toLowerCase()]=Z}),e.emit({type:"response",timestamp:new Date,duration:u,timings:O,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},response:{status:L.status,statusText:L.statusText,headers:re,body:h,size:c},override:z,condition:C}),H&&e.readStreamedBody(v).then(Z=>{let ee=Z.body;if(L.headers?.get?.("content-type")?.includes("json"))try{ee=JSON.parse(Z.body)}catch{}e.emit({type:"response",timestamp:new Date,duration:ue()-l,timings:O,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},response:{status:L.status,statusText:L.statusText,headers:re,body:ee,size:Z.size},override:z,condition:C})}).catch(()=>{}),L}catch(L){let w=ue()-l;throw e.emit({type:"error",timestamp:new Date,duration:w,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},error:{message:L instanceof Error?L.message:"Network error",stack:L instanceof Error?L.stack:void 0},override:z,condition:C}),L}};o[En]=true,this.patchedFetch=o,globalThis.fetch=this.patchedFetch}installXhrInterceptor(){let e=this,t=XMLHttpRequest.prototype.open,r=XMLHttpRequest.prototype.send,o=XMLHttpRequest.prototype.setRequestHeader;this.originalXHROpen=t,this.originalXHRSend=r,this.originalXHRSetRequestHeader=o;let n=++this.xhrGeneration,i=new WeakMap,s=function(d,b,I,C,S){let q=t.call(this,d,b,I??true,C,S);if(n===e.xhrGeneration){i.get(this)?.();let g=this;g._buoyRequestId=cr("xhr"),g._method=d,g._url=ur(b),g._buoyStartTime=ue(),g._requestHeaders={}}return q},l=function(d,b){let I=this;return n===e.xhrGeneration&&I._requestHeaders&&(I._requestHeaders[d]=b),o.call(this,d,b)},a=function(d){if(n!==e.xhrGeneration||mr)return r.call(this,d);if(Ta(this))throw new DOMException("The request has already been sent.","InvalidStateError");if(this.readyState!==1||this._sent)return r.call(this,d);let b=this,I=b._buoyRequestId,C=b._method||"GET",S=b._url||"",q=ue();b._buoyStartTime=q,b._buoyTtfb=void 0;let g=b._requestHeaders||{};if(Object.assign(g,In(S)),e.shouldIgnoreUrl(S))return r.call(this,d);let{url:T,params:k}=e.parseUrl(S),f;if(d)if(typeof d=="string")try{f=JSON.parse(d)}catch{f=d}else f=d;let E=g["X-Request-Client"]||g["x-request-client"],z=g.Accept||g.accept||"",L=z.includes("application/json")&&z.includes("text/plain")&&z.includes("*/*"),w=E||(L?"axios":"xhr"),H=On(S),v=H?.profile==="offline"?null:kn(S,C,g),h=v?Cn(v):void 0;e.emit({type:"request",timestamp:new Date,request:{id:I||"unknown",url:T,method:C,headers:g,data:f,params:k||void 0,client:w},override:h,condition:H});let c=false,u=(G=false)=>{c||(c=true,e.handleXHRResponse(this,I||"unknown",T,C,g,f,k,q||0,G,w,h,H),m())},m=()=>{i.delete(this),this.removeEventListener("load",O),this.removeEventListener("error",re),this.removeEventListener("abort",Z),this.removeEventListener("readystatechange",ee)};i.set(this,m);let O=()=>{u(false)},re=()=>{u(true)},Z=()=>{u(true)},ee=()=>{if(this.readyState===2){let G=this;G._buoyTtfb===void 0&&G._buoyStartTime&&(G._buoyTtfb=ue()-G._buoyStartTime)}this.readyState===4&&!c&&u(false)};if(this.addEventListener("load",O),this.addEventListener("error",re),this.addEventListener("abort",Z),this.addEventListener("readystatechange",ee),H){Ia(this,S,H,v,()=>r.call(this,d));return}if(!(v&&Sn(this,S,v,()=>r.call(this,d))))return r.call(this,d)};a[Ln]=true,this.patchedXHROpen=s,this.patchedXHRSend=a,this.patchedXHRSetRequestHeader=l,XMLHttpRequest.prototype.open=this.patchedXHROpen,XMLHttpRequest.prototype.send=this.patchedXHRSend,XMLHttpRequest.prototype.setRequestHeader=this.patchedXHRSetRequestHeader}stopListening(){this.isListening&&(this.fetchGeneration++,this.xhrGeneration++,this.patchedFetch&&globalThis.fetch===this.patchedFetch&&(globalThis.fetch=this.originalFetch),this.patchedXHROpen&&XMLHttpRequest.prototype.open===this.patchedXHROpen&&(XMLHttpRequest.prototype.open=this.originalXHROpen),this.patchedXHRSend&&XMLHttpRequest.prototype.send===this.patchedXHRSend&&(XMLHttpRequest.prototype.send=this.originalXHRSend),this.patchedXHRSetRequestHeader&&XMLHttpRequest.prototype.setRequestHeader===this.patchedXHRSetRequestHeader&&(XMLHttpRequest.prototype.setRequestHeader=this.originalXHRSetRequestHeader),this.patchedFetch=null,this.patchedXHROpen=null,this.patchedXHRSend=null,this.patchedXHRSetRequestHeader=null,this.isListening=false)}adoptEarlyRequests(){let e=globalThis.__BUOY_EARLY_NETWORK__;if(e?.version===1)for(let t of e.adopt())try{t.kind==="fetch"?this.adoptEarlyFetch(t):this.adoptEarlyXhr(t)}catch{}}adoptEarlyFetch(e){let{input:t,init:r}=e,o=typeof t=="object"&&"method"in t?t:void 0,n=ur(typeof t=="string"?t:t instanceof URL?t.href:t.url);if(this.shouldIgnoreUrl(n))return;let i=cr("fetch"),s=r?.method??o?.method??"GET",{url:l,params:a}=this.parseUrl(n),d=Ka(r?.headers??o?.headers),b=r?.body;if(typeof b=="string")try{b=JSON.parse(b)}catch{}let I=d["X-Request-Client"]||d["x-request-client"]||"fetch",C=()=>({id:i,url:l,method:s,headers:d,data:b,params:a||void 0,client:I});this.emit({type:"request",timestamp:new Date(e.start),request:C()}),e.requestCopy&&this.readStreamedBody(e.requestCopy).then(({body:S})=>{try{b=JSON.parse(S)}catch{b=S}this.emit({type:"request-body",timestamp:new Date,request:{id:i,url:l,method:s,data:b,client:I}})}).catch(()=>{}),e.settled.then(async({response:S,clone:q,error:g,headersAt:T})=>{if(!S){this.emit({type:"error",timestamp:new Date,duration:T-e.start,request:C(),error:{message:g instanceof Error?g.message:"Network error",stack:g instanceof Error?g.stack:void 0}});return}let{body:k,size:f}=q?await this.processResponseBody(q):{body:Pn,size:0},E=Math.max(0,ue()-e.start),z=T-e.start,L={};S.headers.forEach((w,H)=>{L[H.toLowerCase()]=w}),this.emit({type:"response",timestamp:new Date,duration:E,timings:E>z?{ttfb:z,download:E-z}:void 0,request:C(),response:{status:S.status,statusText:S.statusText,headers:L,body:k,size:f}})})}adoptEarlyXhr(e){let t=ur(e.url);if(this.shouldIgnoreUrl(t))return;let r=cr("xhr"),o=e.method.toUpperCase(),{url:n,params:i}=this.parseUrl(t),s=e.body;if(typeof s=="string")try{s=JSON.parse(s)}catch{}let l=e.headers["X-Request-Client"]||e.headers["x-request-client"]||"xhr";this.emit({type:"request",timestamp:new Date(e.start),request:{id:r,url:n,method:o,headers:e.headers,data:s,params:i||void 0,client:l}});let a=e.xhr,d=()=>{let b=(a._buoyEarlyEnd??ue())-e.start;this.handleXHRResponse(a,r,n,o,e.headers,s,i,ue()-b,false,l)};a.readyState===4?d():a.addEventListener("loadend",d,{once:true})}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}get isActive(){return this.isListening}get listenerCount(){return this.listeners.length}},ot=null,co=()=>(ot||(ot=new tl),ot),yr=co,Bn=()=>co().startListening(),Xt=()=>ot?.stopListening(),Jt=e=>co().addListener(e),rl=()=>ot?.removeAllListeners(),qn=()=>ot?.isActive??false,pt=()=>ot?.listenerCount??0,ol=()=>ot?.isInterceptionLive()??false;var Gt={normal:{label:"Normal",delayMs:0},offline:{label:"Offline (requests)",delayMs:0},slow:{label:"Slow (+500 ms)",delayMs:500},verySlow:{label:"Very slow (+2000 ms)",delayMs:2e3}},ho=`${Date.now()}-${Math.random().toString(36).slice(2)}`,ft="normal",br,vr=new Set,gt=()=>typeof Te<"u"&&Te&&un(),mt=()=>ft,Kt=e=>(vr.add(e),()=>{vr.delete(e)});function Sr(e){if(typeof e!="string"||!Object.prototype.hasOwnProperty.call(Gt,e))throw new Error("Choose normal, offline, slow, or verySlow.");if(e!=="normal"&&!gt())throw new Error("Network conditions require an admitted account and a development build.");return e===ft||(e!=="normal"&&!br?(Bn(),br=Jt(()=>{})):e==="normal"&&(br?.(),br=void 0,pt()===0&&Xt()),ft=e,vr.forEach(t=>t())),ft}function On(e){if(!(ft==="normal"||!gt()||!/^https?:\/\//i.test(e)))return Object.freeze({profile:ft,delayMs:Gt[ft].delayMs})}ba(()=>{un()||Sr("normal"),vr.forEach(e=>e())});import{jsx as Dn,jsxs as nl}from"react/jsx-runtime";function il({size:e}){let t=ma(Kt,mt,mt);return nl(p,{accessibilityLabel:t==="normal"?"Network":`Network: ${Gt[t].label}`,children:[Dn(ya,{size:e}),t!=="normal"&&Dn(y,{testID:"buoy-network-condition-indicator",style:{position:"absolute",top:-6,right:-8,color:"#FFCC66",fontSize:10,fontWeight:"700"},children:t==="offline"?"OFF":`+${Gt[t].delayMs}`})]})}import{createToolFactory as sl,defineToolPreset as al}from"@buoy-gg/shared-ui/web";D();D();ce();import{useEffect as zn,useRef as po,useState as An,useSyncExternalStore as fo}from"react";import{FloatingTool as ll,night as Re,openFloatingTool as dl,persistentStorage as ul,registerPersistentFloatingTool as cl}from"@buoy-gg/shared-ui/web";import{jsx as ke,jsxs as Hn}from"react/jsx-runtime";function hl(){let e,t=new Set;return{getSnapshot:()=>e,subscribe:r=>(t.add(r),()=>{t.delete(r)}),update(r){e=r,t.forEach(o=>o())}}}var pl=()=>()=>{},Mn=()=>{},xr=[{id:"normal",label:"No throttling",detail:"No added delay"},{id:"slow",label:"Slow",detail:"+500 ms before sending"},{id:"verySlow",label:"Very slow",detail:"+2 seconds before sending"},{id:"offline",label:"Offline",detail:"New requests fail"}],fl={id:"network-throttling",render:e=>ke(Nn,{...e})};typeof Te<"u"&&Te&&typeof navigator<"u"&&navigator.product==="ReactNative"&&cl(fl,ul);function gl(e){dl({id:"network-throttling",render:t=>ke(Nn,{...t,source:e})})}function Nn({id:e,revealToken:t,dismiss:r,source:o}){let n=fo(Kt,mt,mt),i=fo(Kt,gt,gt),s=fo(o?.subscribe??pl,o?.getSnapshot??Mn,Mn),l=o?s?.profile??null:n,a=o?s?.available===true:i,[d,b]=An(false),[I,C]=An(),S=po(false),q=po(0),g=po(true),{width:T}=en();zn(()=>(g.current=true,()=>{g.current=false}),[]),zn(()=>{q.current+=1,S.current=false,b(false),C(void 0)},[o,s?.targetId]);let k=l!==null&&l!=="normal",f=l??"normal",E=xr.find(h=>h.id===f),z=xr[(xr.findIndex(h=>h.id===f)+1)%xr.length],L=!a||f==="offline"?0:f==="verySlow"?1:f==="slow"?2:4,w=d?"Applying\u2026":a?f==="normal"?"0 ms":f==="slow"?"+500 ms":f==="verySlow"?"+2000 ms":"Blocked":"Unavailable";async function H(h,c=false){if(S.current)return;let u=++q.current;S.current=true,b(true),C(void 0);let m=o?.getSnapshot();try{if(o){if(!m?.available)throw new Error("Device unavailable. Open Network again to reconnect these controls.");await m.onChange(h)}else Sr(h);g.current&&q.current===u&&c&&r()}catch(O){g.current&&q.current===u&&C(O instanceof Error?O.message:String(O))}finally{q.current===u&&(S.current=false,g.current&&b(false))}}let v=I?ke(p,{style:Be.menu,children:ke(y,{accessibilityRole:"alert",style:Be.error,children:I})}):void 0;return ke(ll,{id:e,revealToken:t,variant:"strip",dragFromSurface:true,accessibilityLabel:`Move or hide network throttling. ${k?"Active":"Off"}`,accessory:v,children:Hn(p,{style:[Be.row,{width:Math.max(220,Math.min(292,T-64))}],children:[ke(N,{testID:"throttling-cycle",accessibilityRole:"button",accessibilityLabel:`Network: ${E.label}. Switch to ${z.label}`,accessibilityState:{disabled:d||!a},disabled:d||!a,onPress:()=>void H(z.id),style:Be.signalButton,children:d?ke(so,{size:"small",color:Re.color.accent}):Hn(p,{testID:`throttling-signal-${f}`,style:Be.signal,children:[[7,12,18,24].map((h,c)=>ke(p,{style:{width:4,height:h,borderRadius:2,backgroundColor:c<L?f==="offline"?Re.color.danger:Re.color.accent:Re.color.fillTertiary}},h)),f==="offline"&&ke(p,{style:Be.slash})]})}),ke(p,{style:Be.profile,children:ke(y,{testID:"throttling-profile",accessibilityLabel:`Connection profile: ${E.label}`,accessibilityLiveRegion:"polite",numberOfLines:1,style:Be.profileLabel,children:E.label})}),ke(y,{testID:"throttling-status",numberOfLines:1,accessibilityLiveRegion:"polite",style:Be.status,children:w}),ke(p,{style:Be.separator}),ke(N,{testID:"throttling-close",accessibilityRole:"button",accessibilityLabel:"Close and turn off throttling",disabled:d,accessibilityState:{disabled:d},onPress:()=>{l==="normal"?r():H("normal",true)},style:[Be.action,d&&Be.disabled],children:ke(y,{style:Be.actionText,children:"Close"})})]})})}var Be=fe.create({row:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,minHeight:48},signalButton:{width:36,minHeight:44,alignItems:"center",justifyContent:"center"},signal:{flexDirection:"row",alignItems:"flex-end",gap:3,height:24},slash:{position:"absolute",width:30,height:2,backgroundColor:Re.color.danger,top:11,left:-2,transform:[{rotate:"-45deg"}]},separator:{height:20,width:1,backgroundColor:Re.color.separator,marginHorizontal:2},status:{color:Re.color.textSecondary,fontSize:10,lineHeight:15,flexShrink:1},profile:{flex:1,flexDirection:"row",alignItems:"center",gap:6,minHeight:44},profileLabel:{color:Re.color.text,fontSize:13,fontWeight:"500",flexShrink:1},action:{minHeight:36,minWidth:52,borderRadius:Re.radius.input,borderWidth:1,borderColor:Re.color.accentBorderStrong,alignItems:"center",justifyContent:"center",paddingHorizontal:10},actionText:{color:Re.color.accent,fontSize:12,fontWeight:"600"},disabled:{opacity:.4},menu:{marginVertical:8,padding:6,borderRadius:Re.radius.card,borderWidth:1,borderColor:Re.color.separator,backgroundColor:Re.color.surface,shadowColor:"#000",shadowOffset:{width:0,height:6},shadowOpacity:.25,shadowRadius:16,elevation:8},error:{color:Re.color.danger,fontSize:12,lineHeight:18,padding:10}});ce();import{useState as me,useRef as wr,useEffect as yt,useCallback as go}from"react";import{Search as ml,Wifi as yl,Filter as bl,Bookmark as vl,JsModal as Sl,ModalHeader as ge,devToolsStorageKeys as Cr,macOSColors as xl,night as Ke,persistentStorage as Fn,NightSegmented as wl,useFeatureGate as Cl,UpgradeModal as Tl,PowerToggleButton as Rl,useIgnoredPatterns as kl,windowDragProps as Il}from"@buoy-gg/shared-ui/web";D();ce();import{CheckCircle as El,Clock as Ll,DynamicFilterView as Pl,Film as Bl,FileJson as ql,FileText as Ol,Filter as $n,Globe as jn,Image as Dl,macOSColors as ye,night as Ie,Music as zl,XCircle as Al,monoFont as mo}from"@buoy-gg/shared-ui/web";import{useCallback as Tr,useMemo as je,useState as Hl}from"react";import{jsx as Ye,jsxs as Wn}from"react/jsx-runtime";var Ml=()=>false;function yo(e){let t=e.responseHeaders||e.requestHeaders,r=t?.["content-type"]||t?.["Content-Type"]||"";return r.includes("json")?{type:"JSON",color:ye.semantic.info}:r.includes("xml")?{type:"XML",color:ye.semantic.success}:r.includes("html")?{type:"HTML",color:ye.semantic.warning}:r.includes("text")?{type:"TEXT",color:ye.semantic.success}:r.includes("image")?{type:"IMAGE",color:ye.semantic.error}:r.includes("video")?{type:"VIDEO",color:ye.semantic.error}:r.includes("audio")?{type:"AUDIO",color:ye.semantic.debug}:r.includes("form")?{type:"FORM",color:ye.semantic.info}:{type:"OTHER",color:Ie.color.textTertiary}}function Nl(e){switch(e){case"JSON":return ql;case"HTML":case"XML":case"TEXT":return Ol;case"IMAGE":return Dl;case"VIDEO":return Bl;case"AUDIO":return zl;default:return jn}}function Fl(e){switch(e){case"GET":return ye.semantic.success;case"POST":return ye.semantic.info;case"PUT":return ye.semantic.warning;case"DELETE":return ye.semantic.error;case"PATCH":return ye.semantic.success;default:return Ie.color.textTertiary}}function $l({events:e,filter:t,onFilterChange:r,ignoredPatterns:o=[],onRemovePattern:n=()=>{},isTeamPattern:i=Ml,onAddPattern:s=()=>{},onTogglePatternMode:l=()=>{}}){let[a,d]=Hl("contains"),b=je(()=>{let v=new Map;for(let h of o)v.set(h.value,h.mode);return v},[o]),I=je(()=>new Set(o.map(v=>v.value)),[o]),C=Tr(v=>{s({value:v,mode:a})},[s,a]),S=Tr(v=>{if(i(v)){let m=Ie.color.accent;return Ye(p,{accessibilityLabel:"Set by your team on buoy.gg",style:[Ae.modeBadge,{borderColor:`${m}60`,backgroundColor:`${m}15`}],children:Ye(y,{style:[Ae.modeBadgeText,{color:m}],children:"TEAM"})})}let h=b.get(v)??"contains",c=h==="exact",u=c?Ie.color.warning:Ie.color.info;return Ye(N,{accessibilityRole:"button",accessibilityLabel:`Match mode: ${h}. Tap to toggle.`,onPress:()=>l(v),style:[Ae.modeBadge,{borderColor:`${u}60`,backgroundColor:`${u}15`}],hitSlop:{top:6,bottom:6,left:6,right:6},children:Ye(y,{style:[Ae.modeBadgeText,{color:u}],children:c?"EXACT":"CONTAINS"})})},[b,l,i]),q=Tr(()=>{let v=[{label:"Contains",value:"contains",hint:"substring"},{label:"Exact",value:"exact",hint:"whole path/host/url"}];return Wn(p,{style:Ae.modeToggleRow,children:[Ye(y,{style:Ae.modeToggleLabel,children:"Match:"}),Ye(p,{style:Ae.modeToggleGroup,children:v.map(h=>{let c=a===h.value;return Wn(N,{onPress:()=>d(h.value),style:[Ae.modeToggleButton,c&&Ae.modeToggleButtonActive],accessibilityRole:"button",accessibilityState:{selected:c},children:[Ye(y,{style:[Ae.modeToggleButtonText,c&&Ae.modeToggleButtonTextActive],children:h.label}),Ye(y,{style:Ae.modeToggleButtonHint,children:h.hint})]},h.value)})})]})},[a]),g=je(()=>{let v={all:e.length,success:0,error:0,pending:0};return e.forEach(h=>{if(h.error||h.status&&h.status>=400){v.error+=1;return}if(h.status&&h.status>=200&&h.status<300){v.success+=1;return}!h.status&&!h.error&&(v.pending+=1)}),v},[e]),T=je(()=>e.reduce((v,h)=>(h.method&&(v[h.method]=(v[h.method]||0)+1),v),{}),[e]),k=je(()=>e.reduce((v,h)=>{let{type:c}=yo(h);return v[c]=(v[c]||0)+1,v},{}),[e]),f=je(()=>{let v=new Set;return e.forEach(h=>{if(h.host){v.add(h.host);return}try{if(h.url){let c=new URL(h.url),u=String(c.host||"");u&&v.add(u)}}catch{}}),Array.from(v).filter(h=>h&&h!=="").sort((h,c)=>h.localeCompare(c))},[e]),E=je(()=>{let v=new Set;return e.forEach(h=>{if(h.url)try{let c=new URL(h.url),u=String(c.origin||""),m=String(c.pathname||""),O=`${u}${m}`;v.add(O)}catch{v.add(h.url)}}),Array.from(v).filter(h=>h&&h!=="").sort((h,c)=>h.localeCompare(c))},[e]),z=je(()=>{let v=f.slice(0,30),h=E.slice(0,30);return[...v,...h]},[f,E]),L=Tr((v,h)=>{let[c]=v.split("::");if(c==="status"){r({...t,status:h==="all"?void 0:h});return}if(c==="method"){let u=String(h),m=t.method||[],O=m.includes(u)?m.filter(re=>re!==u):[u];r({...t,method:O.length>0?O:void 0});return}if(c==="contentType"){let u=String(h),m=t.contentType||[],O=m.includes(u)?m.filter(re=>re!==u):[u];r({...t,contentType:O.length>0?O:void 0})}},[t,r]),w=je(()=>{let v=[];v.push({id:"status",title:"Status",type:"status",data:["all","success","error","pending"].map(u=>({id:`status::${u}`,label:u.charAt(0).toUpperCase()+u.slice(1),count:g[u],icon:u==="success"?El:u==="error"?Al:u==="pending"?Ll:jn,color:u==="success"?ye.semantic.success:u==="error"?ye.semantic.error:u==="pending"?ye.semantic.warning:ye.semantic.info,isActive:t.status===u||!t.status&&u==="all",value:u}))});let h=Object.entries(T);h.length>0&&v.push({id:"method",title:"Method",type:"method",data:h.map(([u,m])=>({id:`method::${u}`,label:u,count:m,color:Fl(u),isActive:t.method?.includes(u)??false,value:u}))});let c=Object.entries(k);return c.length>0&&v.push({id:"contentType",title:"Content Type",type:"contentType",data:c.map(([u,m])=>{let O=e.find(Z=>yo(Z).type===u),{color:re}=O?yo(O):{color:Ie.color.textTertiary};return{id:`contentType::${u}`,label:u,count:m,icon:Nl(u),color:re,isActive:t.contentType?.includes(u)??false,value:u}})}),v},[k,e,t.contentType,t.method,t.status,T,g]),H=je(()=>({sections:w,addFilterSection:{enabled:true,placeholder:"Enter domain or URL pattern...",title:"ACTIVE FILTERS",icon:$n,renderExtra:q},availableItemsSection:{enabled:true,title:"AVAILABLE DOMAINS & URLS",emptyMessage:"No network events captured yet. Domains and URLs will appear here.",items:z},howItWorksSection:{enabled:true,title:"HOW NETWORK FILTERS WORK",description:"Patterns hide matching requests from the network event list. Each pattern has a match mode you can toggle on its badge: CONTAINS hides any URL containing the text; EXACT hides only an exact path/host/url match.",examples:["\u2022 example.com (CONTAINS) \u2192 any request whose URL contains example.com","\u2022 example.com (EXACT) \u2192 only requests served by that exact host","\u2022 /v1 (CONTAINS) \u2192 any URL containing /v1 (e.g. /v1, /v1/users)","\u2022 /v1 (EXACT) \u2192 only requests whose pathname is exactly /v1"],icon:$n},onFilterChange:L,onPatternAdd:C,onPatternToggle:n,activePatterns:I,renderPatternMeta:S}),[I,w,L,C,n,q,S,z]);return Ye(Pl,{...H})}var Ae=fe.create({modeBadge:{paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1},modeBadgeText:{fontSize:9,fontFamily:mo,fontWeight:"700",letterSpacing:.5},modeToggleRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:8},modeToggleLabel:{fontSize:11,fontWeight:"600",color:Ie.color.textSecondary,fontFamily:mo,letterSpacing:.3},modeToggleGroup:{flexDirection:"row",gap:6,flex:1},modeToggleButton:{flex:1,paddingVertical:6,paddingHorizontal:10,borderRadius:8,borderWidth:1,borderColor:Ie.color.border,backgroundColor:Ie.color.buttonSurface,alignItems:"center"},modeToggleButtonActive:{borderColor:Ie.color.accentBorderStrong,backgroundColor:Ie.color.accentSoft},modeToggleButtonText:{fontSize:11,fontWeight:"700",color:Ie.color.textSecondary,fontFamily:mo,letterSpacing:.3},modeToggleButtonTextActive:{color:Ie.color.accent},modeToggleButtonHint:{fontSize:9,color:Ie.color.textTertiary,marginTop:1}});D();import{TickProvider as bo}from"@buoy-gg/shared-ui/web";import{useTick as jl}from"@buoy-gg/shared-ui/web";function vo(){return jl()??Date.now()}D();ce();import{useState as Yt,useEffect as Vn,useMemo as Wl,memo as Vl}from"react";import{Clock as So,Upload as Un,Download as _n,AlertCircle as Ul,ChevronDown as Xn,ChevronUp as Jn,Lock as _l,Unlock as Xl,FileJson as Rr,Filter as Jl,Globe as Gl,Link as Kl,Copy as Gn,FlaskConical as Yl,InlineCopyButton as Kn,macOSColors as kr,night as B,useFeatureGate as Zl,UpgradeModal as Ql,monoFont as qt}from"@buoy-gg/shared-ui/web";D();import{formatBytes as Ze,formatDuration as Ir,formatHttpStatus as Yn,getMethodColor as Ep}from"@buoy-gg/shared-ui/web";import{formatRelativeTime as ed}from"@buoy-gg/shared-ui/web";import{DataViewer as Zt}from"@buoy-gg/shared-ui/web/dataViewer";D();function xo(e,t=30){if(e==null)return null;if(typeof e=="boolean"||typeof e=="number")return String(e);if(typeof e=="string")return e.length>t?e.substring(0,t-1)+"\u2026":e;if(Array.isArray(e))return e.length===0?null:e.length===1?xo(e[0],t):`${e.length} items`;if(typeof e=="object"){let r=Object.entries(e);if(r.length===0)return null;for(let[o,n]of r){let i=xo(n,t);if(i)return i}return null}return null}function td(e,t=3){if(!e||typeof e!="object")return null;let r=[];for(let[o,n]of Object.entries(e)){let i=xo(n);if(i&&r.push(i),r.length>=t)break}return r.length>0?r:null}function Zn(e,t){let r=td(t);return!r||r.length===0?e:[e,...r].join(" \u203A ")}function Qn(e,t){if(!e||typeof e!="object")return false;for(let r of Object.values(e))if(wo(r,t))return true;return false}function wo(e,t){return typeof e=="string"?e.toLowerCase().includes(t):typeof e=="number"||typeof e=="boolean"?String(e).includes(t):Array.isArray(e)?e.some(r=>wo(r,t)):typeof e=="object"&&e!==null?Object.values(e).some(r=>wo(r,t)):false}D();import{createContext as rd,useContext as od}from"react";import{jsx as nd}from"react/jsx-runtime";var ei=rd(null);function id({resolver:e,children:t}){return nd(ei.Provider,{value:e,children:t})}function sd(){return od(ei)}import{Fragment as Co,jsx as x,jsxs as X}from"react/jsx-runtime";var Er=B.color.accent,ad=new Set,ld=()=>{},dd=({timings:e,total:t})=>{let r=Math.max(1,t),o=[{label:"Waiting (TTFB)",hint:"incl. queue, DNS, TLS",value:e.ttfb,color:kr.semantic.warning},{label:"Content download",hint:void 0,value:e.download,color:kr.semantic.success}];return x(p,{style:R.phaseList,children:o.map(n=>X(p,{style:R.phaseRow,children:[X(p,{style:R.phaseLabelGroup,children:[x(y,{style:R.phaseLabel,children:n.label}),n.hint?x(y,{style:R.phaseHint,children:n.hint}):null]}),x(p,{style:R.phaseTrack,children:x(p,{style:[R.phaseBar,{backgroundColor:n.color,width:`${Math.min(100,Math.max(1,n.value/r*100))}%`}]})}),x(y,{style:R.phaseValue,children:Ir(n.value)})]},n.label))})},ti=()=>x(p,{style:R.bodyDeferred}),bt=({title:e,icon:t,children:r,defaultOpen:o=false,count:n})=>{let[i,s]=Yt(o);return X(p,{style:R.collapsibleSection,children:[X(N,{style:R.collapsibleHeader,onPress:()=>s(!i),testID:`buoy-network-section-${e.toLowerCase().replace(/\s+/g,"-")}`,accessibilityRole:"button",accessibilityLabel:e,children:[X(p,{style:R.collapsibleTitle,children:[t,x(y,{style:R.collapsibleTitleText,children:e}),n!==void 0?x(y,{style:R.collapsibleCount,children:n}):null]}),i?x(Jn,{size:16,color:B.color.textSecondary}):x(Xn,{size:16,color:B.color.textSecondary})]}),i?x(p,{style:R.collapsibleContent,children:r}):null]})},ud=({url:e,requestData:t,operationName:r,graphqlVariables:o,requestClient:n,isPro:i=false,onUpgradePress:s})=>{let l=I=>{try{let C=new URL(I),S=String(C.protocol||""),q=String(C.host||""),g=S==="https:",T=String(C.pathname||"");if(n==="graphql"&&r){let E=Zn(r,o);T=`${T} (${E})`}else r&&(T=`${T} (${r})`);let k={},f=C.searchParams;return f&&typeof f.forEach=="function"&&f.forEach((E,z)=>{k[z]=E}),{protocol:S.replace(":",""),host:q,pathname:T,params:Object.keys(k).length>0?k:null,isSecure:g}}catch{return{protocol:"",host:e,pathname:"",params:null,isSecure:false}}},a=Wl(()=>l(e),[e,n,r,o]),[d,b]=Yt(false);return X(p,{style:R.urlBreakdown,children:[X(p,{style:R.urlRow,children:[a.isSecure?x(_l,{size:12,color:kr.semantic.success}):x(Xl,{size:12,color:kr.semantic.warning}),x(y,{style:R.urlDomain,children:a.host}),X(y,{style:R.urlProtocol,children:["(",a.protocol.toUpperCase(),")"]}),i?x(Kn,{value:e,buttonStyle:R.copyButton}):x(N,{style:R.copyButton,onPress:s,activeOpacity:.7,children:x(Gn,{size:14,color:B.color.textSecondary})})]}),x(p,{style:R.urlPathRow,children:X(y,{style:R.urlPath,numberOfLines:2,children:[a.pathname,a.params?X(y,{style:R.urlQueryString,children:["?",new URLSearchParams(a.params).toString()]}):null]})}),a.params?X(p,{style:R.queryParamsCollapsible,children:[X(N,{style:R.queryParamsToggle,onPress:()=>b(!d),activeOpacity:.7,children:[x(y,{style:R.queryParamsToggleText,children:"Query Parameters"}),x(y,{style:R.collapsibleCount,children:Object.keys(a.params).length}),d?x(Jn,{size:14,color:B.color.textSecondary}):x(Xn,{size:14,color:B.color.textSecondary})]}),d?x(Zt,{title:"",data:a.params,showTypeFilter:true,rawMode:true,initialExpanded:true}):null]}):null]})},ri=Vl(function({event:e,ignoredPatterns:t=ad,onTogglePattern:r=ld,showBodies:o=true}){let n=e.status?Yn(e.status):null,i=!e.status&&!e.error,{isPro:s}=Zl(),[l,a]=Yt(false);Vn(()=>{l&&s&&a(false)},[l,s]);let d=sd(),b=e.requestData===void 0&&(e.requestBodyOmitted===true||(e.requestSize??0)>0),I=e.responseData===void 0&&(e.responseBodyOmitted===true||(e.responseSize??0)>0),C=e.headersOmitted===true,[S,q]=Yt(null),[g,T]=Yt(false);Vn(()=>{if(q(null),!d||!b&&!I&&!C){T(false);return}let w=false;return T(true),d(e.id).then(H=>{w||q(H)}).catch(()=>{}).finally(()=>{w||T(false)}),()=>{w=true}},[e.id,d,b,I,C]);let k=e.requestData??S?.requestData??void 0,f=e.responseData??S?.responseData??void 0,E=(C?S?.requestHeaders:void 0)??e.requestHeaders,z=(C?S?.responseHeaders:void 0)??e.responseHeaders,L=()=>{let w={method:e.method,url:e.url,status:e.status,statusText:e.statusText,timestamp:new Date(e.timestamp).toISOString(),duration:e.duration?`${e.duration}ms`:"N/A",requestHeaders:E,requestData:k,responseHeaders:z,responseData:f,requestSize:e.requestSize?Ze(e.requestSize):"N/A",responseSize:e.responseSize?Ze(e.responseSize):"N/A",error:e.error,client:e.requestClient};return`# Network Request Details
|
|
8
|
+
... [truncated, ${this.formatBytes(s)} omitted]`,size:n,truncated:true}}try{return{body:JSON.parse(o),size:n,truncated:false}}catch{return{body:o,size:n,truncated:false}}}catch{return{body:"~~~ unable to read body ~~~",size:0,truncated:false}}}formatBytes(e){if(e===0)return"0 B";let t=1024,r=["B","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return`${Math.round(e/Math.pow(t,o)*100)/100} ${r[o]}`}handleXHRResponse(e,t,r,o,n,i,s,l,a=false,d="xhr",b,E){let C=l?ue()-l:0,S=e._buoyTtfb,q=S===void 0?void 0:{ttfb:S,download:Math.max(0,C-S)};if(a||e.status===0){this.emit({type:"error",timestamp:new Date,duration:C,request:{id:t||"unknown",url:r,method:o,headers:n,data:i,params:s||void 0,client:d},error:{message:a?"Request failed":"Network error or request aborted"},override:b,condition:E});return}let g,T=0;try{let f=e.response;if(e.responseType==="json"&&f)g=f,T=JSON.stringify(f).length;else if(e.responseType===""||e.responseType==="text"){if(e.responseText){T=e.responseText.length;try{g=JSON.parse(e.responseText)}catch{g=e.responseText}}}else if(e.responseType==="arraybuffer")if(f)try{let P=new TextDecoder("utf-8").decode(f);T=P.length;try{g=JSON.parse(P)}catch{g=P}}catch{g=`[arraybuffer response - ${f.byteLength||0} bytes]`,T=f.byteLength||0}else g="[arraybuffer response - no data]",T=0;else if(e.responseType==="blob")if(f instanceof Blob)g=`[blob response - ${f.size} bytes, type: ${f.type||"unknown"}]`,T=f.size;else if(f)try{g=typeof f=="string"?JSON.parse(f):f,T=JSON.stringify(g).length}catch{g="[blob response - unable to parse]",T=0}else g="[blob response - no data]",T=0;else if(f)if(typeof f=="string"){g=f,T=f.length;try{g=JSON.parse(f)}catch{}}else typeof f=="object"?(g=f,T=JSON.stringify(f).length):(g=String(f),T=String(f).length)}catch{g="~~~ unable to read body ~~~"}let k={};try{let f=e.getAllResponseHeaders();f&&f.split(`\r
|
|
9
|
+
`).forEach(P=>{if(P){let z=P.indexOf(": ");if(z>0){let I=P.substring(0,z).toLowerCase(),w=P.substring(z+2);k[I]=w}}})}catch{}Ja(e.status)==="response"?this.emit({type:"response",timestamp:new Date,duration:C,timings:q,request:{id:t||"unknown",url:r,method:o,headers:n,data:i,params:s||void 0,client:d},response:{status:e.status,statusText:Ga(e.status,e.statusText),headers:k,body:g,size:T},override:b,condition:E}):this.emit({type:"error",timestamp:new Date,duration:C,request:{id:t||"unknown",url:r,method:o,headers:n,data:i,params:s||void 0,client:d},response:{status:e.status,statusText:e.statusText,headers:k,body:g,size:T},error:{message:"Network Error"},override:b,condition:E})}isFetchInterceptionLive(){return globalThis.fetch[Pn]===true}isXhrInterceptionLive(){return XMLHttpRequest.prototype.send[In]===true}isInterceptionLive(){return this.isFetchInterceptionLive()&&this.isXhrInterceptionLive()}startListening(){let e=this.isListening&&this.isFetchInterceptionLive(),t=this.isListening&&this.isXhrInterceptionLive();e&&t||(e||this.installFetchInterceptor(),t||this.installXhrInterceptor(),this.isListening=true)}installFetchInterceptor(){let e=this,t=globalThis.fetch.bind(globalThis);this.originalFetch=globalThis.fetch;let r=++this.fetchGeneration,o=async(n,i)=>{let s=ur(typeof n=="string"?n:n instanceof URL?n.href:n.url);if(r!==e.fetchGeneration||e.shouldIgnoreUrl(s))return t(n,i);let l=ue(),a=cr("fetch"),d=typeof n=="object"&&"method"in n?n:void 0,b=i?.method??d?.method??"GET",E=i?.signal!==void 0?i.signal:d?.signal;fr(E);let C=On(s),{url:S,params:q}=e.parseUrl(s),g={},T=i?.headers??d?.headers;T&&(T instanceof Headers?T.forEach((I,w)=>{g[w]=I}):Array.isArray(T)?T.forEach(([I,w])=>{g[I]=w}):g={...T}),Object.assign(g,En(s));let k;if(i?.body)if(typeof i.body=="string")try{k=JSON.parse(i.body)}catch{k=i.body}else k=i.body;let f=g["X-Request-Client"]||g["x-request-client"]||"fetch",P=C?.profile!=="offline"&&Va()?kn(s,b,g):null,z=P?Cn(P):void 0;if(e.emit({type:"request",timestamp:new Date,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},override:z,condition:C}),i?.body===void 0&&d?.body&&!d.bodyUsed)try{let I=d.clone();e.readStreamedBody(I).then(({body:w})=>{try{k=JSON.parse(w)}catch{k=w}e.emit({type:"request-body",timestamp:new Date,request:{id:a||"unknown",url:S,method:b,data:k,client:f}})}).catch(()=>{})}catch{}try{if((C||P)&&await Ia((C?.delayMs??0)+(P?.delayMs??0),E),fr(E),C?.profile==="offline")throw new TypeError("Network request failed (Buoy Offline)");if(P?.kind==="fail")throw _a(P);let I;if(P?.kind==="respond")I=Ua(s,P);else{let Z=mr;mr=true;let ee;try{ee=t(n,i)}finally{mr=Z}I=await ee}let w=ue()-l,H=typeof I.body?.getReader=="function"||Qa(I.headers?.get?.("content-type")),v=I.clone(),{body:h,size:c}=H?{body:Ln,size:0}:await e.processResponseBody(v),u=ue()-l,m=Math.max(0,u-w),O=m>0?{ttfb:w,download:m}:void 0,re={};return I.headers.forEach((Z,ee)=>{re[ee.toLowerCase()]=Z}),e.emit({type:"response",timestamp:new Date,duration:u,timings:O,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},response:{status:I.status,statusText:I.statusText,headers:re,body:h,size:c},override:z,condition:C}),H&&e.readStreamedBody(v).then(Z=>{let ee=Z.body;if(I.headers?.get?.("content-type")?.includes("json"))try{ee=JSON.parse(Z.body)}catch{}e.emit({type:"response",timestamp:new Date,duration:ue()-l,timings:O,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},response:{status:I.status,statusText:I.statusText,headers:re,body:ee,size:Z.size},override:z,condition:C})}).catch(()=>{}),I}catch(I){let w=ue()-l;throw e.emit({type:"error",timestamp:new Date,duration:w,request:{id:a||"unknown",url:S,method:b,headers:g,data:k,params:q||void 0,client:f},error:{message:I instanceof Error?I.message:"Network error",stack:I instanceof Error?I.stack:void 0},override:z,condition:C}),I}};o[Pn]=true,this.patchedFetch=o,globalThis.fetch=this.patchedFetch}installXhrInterceptor(){let e=this,t=XMLHttpRequest.prototype.open,r=XMLHttpRequest.prototype.send,o=XMLHttpRequest.prototype.setRequestHeader;this.originalXHROpen=t,this.originalXHRSend=r,this.originalXHRSetRequestHeader=o;let n=++this.xhrGeneration,i=new WeakMap,s=function(d,b,E,C,S){let q=t.call(this,d,b,E??true,C,S);if(n===e.xhrGeneration){i.get(this)?.();let g=this;g._buoyRequestId=cr("xhr"),g._method=d,g._url=ur(b),g._buoyStartTime=ue(),g._requestHeaders={}}return q},l=function(d,b){let E=this;return n===e.xhrGeneration&&E._requestHeaders&&(E._requestHeaders[d]=b),o.call(this,d,b)},a=function(d){if(n!==e.xhrGeneration||mr)return r.call(this,d);if(Ra(this))throw new DOMException("The request has already been sent.","InvalidStateError");if(this.readyState!==1||this._sent)return r.call(this,d);let b=this,E=b._buoyRequestId,C=b._method||"GET",S=b._url||"",q=ue();b._buoyStartTime=q,b._buoyTtfb=void 0;let g=b._requestHeaders||{};if(Object.assign(g,En(S)),e.shouldIgnoreUrl(S))return r.call(this,d);let{url:T,params:k}=e.parseUrl(S),f;if(d)if(typeof d=="string")try{f=JSON.parse(d)}catch{f=d}else f=d;let P=g["X-Request-Client"]||g["x-request-client"],z=g.Accept||g.accept||"",I=z.includes("application/json")&&z.includes("text/plain")&&z.includes("*/*"),w=P||(I?"axios":"xhr"),H=On(S),v=H?.profile==="offline"?null:kn(S,C,g),h=v?Cn(v):void 0;e.emit({type:"request",timestamp:new Date,request:{id:E||"unknown",url:T,method:C,headers:g,data:f,params:k||void 0,client:w},override:h,condition:H});let c=false,u=(G=false)=>{c||(c=true,e.handleXHRResponse(this,E||"unknown",T,C,g,f,k,q||0,G,w,h,H),m())},m=()=>{i.delete(this),this.removeEventListener("load",O),this.removeEventListener("error",re),this.removeEventListener("abort",Z),this.removeEventListener("readystatechange",ee)};i.set(this,m);let O=()=>{u(false)},re=()=>{u(true)},Z=()=>{u(true)},ee=()=>{if(this.readyState===2){let G=this;G._buoyTtfb===void 0&&G._buoyStartTime&&(G._buoyTtfb=ue()-G._buoyStartTime)}this.readyState===4&&!c&&u(false)};if(this.addEventListener("load",O),this.addEventListener("error",re),this.addEventListener("abort",Z),this.addEventListener("readystatechange",ee),H){Pa(this,S,H,v,()=>r.call(this,d));return}if(!(v&&Sn(this,S,v,()=>r.call(this,d))))return r.call(this,d)};a[In]=true,this.patchedXHROpen=s,this.patchedXHRSend=a,this.patchedXHRSetRequestHeader=l,XMLHttpRequest.prototype.open=this.patchedXHROpen,XMLHttpRequest.prototype.send=this.patchedXHRSend,XMLHttpRequest.prototype.setRequestHeader=this.patchedXHRSetRequestHeader}stopListening(){this.isListening&&(this.fetchGeneration++,this.xhrGeneration++,this.patchedFetch&&globalThis.fetch===this.patchedFetch&&(globalThis.fetch=this.originalFetch),this.patchedXHROpen&&XMLHttpRequest.prototype.open===this.patchedXHROpen&&(XMLHttpRequest.prototype.open=this.originalXHROpen),this.patchedXHRSend&&XMLHttpRequest.prototype.send===this.patchedXHRSend&&(XMLHttpRequest.prototype.send=this.originalXHRSend),this.patchedXHRSetRequestHeader&&XMLHttpRequest.prototype.setRequestHeader===this.patchedXHRSetRequestHeader&&(XMLHttpRequest.prototype.setRequestHeader=this.originalXHRSetRequestHeader),this.patchedFetch=null,this.patchedXHROpen=null,this.patchedXHRSend=null,this.patchedXHRSetRequestHeader=null,this.isListening=false)}adoptEarlyRequests(){let e=globalThis.__BUOY_EARLY_NETWORK__;if(e?.version===1)for(let t of e.adopt())try{t.kind==="fetch"?this.adoptEarlyFetch(t):this.adoptEarlyXhr(t)}catch{}}adoptEarlyFetch(e){let{input:t,init:r}=e,o=typeof t=="object"&&"method"in t?t:void 0,n=ur(typeof t=="string"?t:t instanceof URL?t.href:t.url);if(this.shouldIgnoreUrl(n))return;let i=cr("fetch"),s=r?.method??o?.method??"GET",{url:l,params:a}=this.parseUrl(n),d=Ya(r?.headers??o?.headers),b=r?.body;if(typeof b=="string")try{b=JSON.parse(b)}catch{}let E=d["X-Request-Client"]||d["x-request-client"]||"fetch",C=()=>({id:i,url:l,method:s,headers:d,data:b,params:a||void 0,client:E});this.emit({type:"request",timestamp:new Date(e.start),request:C()}),e.requestCopy&&this.readStreamedBody(e.requestCopy).then(({body:S})=>{try{b=JSON.parse(S)}catch{b=S}this.emit({type:"request-body",timestamp:new Date,request:{id:i,url:l,method:s,data:b,client:E}})}).catch(()=>{}),e.settled.then(async({response:S,clone:q,error:g,headersAt:T})=>{if(!S){this.emit({type:"error",timestamp:new Date,duration:T-e.start,request:C(),error:{message:g instanceof Error?g.message:"Network error",stack:g instanceof Error?g.stack:void 0}});return}let{body:k,size:f}=q?await this.processResponseBody(q):{body:Ln,size:0},P=Math.max(0,ue()-e.start),z=T-e.start,I={};S.headers.forEach((w,H)=>{I[H.toLowerCase()]=w}),this.emit({type:"response",timestamp:new Date,duration:P,timings:P>z?{ttfb:z,download:P-z}:void 0,request:C(),response:{status:S.status,statusText:S.statusText,headers:I,body:k,size:f}})})}adoptEarlyXhr(e){let t=ur(e.url);if(this.shouldIgnoreUrl(t))return;let r=cr("xhr"),o=e.method.toUpperCase(),{url:n,params:i}=this.parseUrl(t),s=e.body;if(typeof s=="string")try{s=JSON.parse(s)}catch{}let l=e.headers["X-Request-Client"]||e.headers["x-request-client"]||"xhr";this.emit({type:"request",timestamp:new Date(e.start),request:{id:r,url:n,method:o,headers:e.headers,data:s,params:i||void 0,client:l}});let a=e.xhr,d=()=>{let b=(a._buoyEarlyEnd??ue())-e.start;this.handleXHRResponse(a,r,n,o,e.headers,s,i,ue()-b,false,l)};a.readyState===4?d():a.addEventListener("loadend",d,{once:true})}addListener(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}}removeAllListeners(){this.listeners=[]}get isActive(){return this.isListening}get listenerCount(){return this.listeners.length}},ot=null,co=()=>(ot||(ot=new rl),ot),yr=co,Bn=()=>co().startListening(),Xt=()=>ot?.stopListening(),Jt=e=>co().addListener(e),ol=()=>ot?.removeAllListeners(),qn=()=>ot?.isActive??false,pt=()=>ot?.listenerCount??0,nl=()=>ot?.isInterceptionLive()??false;var Gt={normal:{label:"Normal",delayMs:0},offline:{label:"Offline (requests)",delayMs:0},slow:{label:"Slow (+500 ms)",delayMs:500},verySlow:{label:"Very slow (+2000 ms)",delayMs:2e3}},ho=`${Date.now()}-${Math.random().toString(36).slice(2)}`,ft="normal",br,vr=new Set,gt=()=>typeof me<"u"&&me&&un(),mt=()=>ft,Kt=e=>(vr.add(e),()=>{vr.delete(e)});function Sr(e){if(typeof e!="string"||!Object.prototype.hasOwnProperty.call(Gt,e))throw new Error("Choose normal, offline, slow, or verySlow.");if(e!=="normal"&&!gt())throw new Error("Network conditions require an admitted account and a development build.");return e===ft||(e!=="normal"&&!br?(Bn(),br=Jt(()=>{})):e==="normal"&&(br?.(),br=void 0,pt()===0&&Xt()),ft=e,vr.forEach(t=>t())),ft}function On(e){if(!(ft==="normal"||!gt()||!/^https?:\/\//i.test(e)))return Object.freeze({profile:ft,delayMs:Gt[ft].delayMs})}va(()=>{un()||Sr("normal"),vr.forEach(e=>e())});import{jsx as Dn,jsxs as il}from"react/jsx-runtime";function sl({size:e}){let t=ya(Kt,mt,mt);return il(p,{accessibilityLabel:t==="normal"?"Network":`Network: ${Gt[t].label}`,children:[Dn(ba,{size:e}),t!=="normal"&&Dn(y,{testID:"buoy-network-condition-indicator",style:{position:"absolute",top:-6,right:-8,color:"#FFCC66",fontSize:10,fontWeight:"700"},children:t==="offline"?"OFF":`+${Gt[t].delayMs}`})]})}import{createToolFactory as al,defineToolPreset as ll}from"@buoy-gg/shared-ui/web";D();D();ce();import{useEffect as zn,useRef as po,useState as An,useSyncExternalStore as fo}from"react";import{FloatingTool as dl,night as Re,openFloatingTool as ul,persistentStorage as cl,registerPersistentFloatingTool as hl}from"@buoy-gg/shared-ui/web";import{jsx as ke,jsxs as Hn}from"react/jsx-runtime";function pl(){let e,t=new Set;return{getSnapshot:()=>e,subscribe:r=>(t.add(r),()=>{t.delete(r)}),update(r){e=r,t.forEach(o=>o())}}}var fl=()=>()=>{},Mn=()=>{},xr=[{id:"normal",label:"No throttling",detail:"No added delay"},{id:"slow",label:"Slow",detail:"+500 ms before sending"},{id:"verySlow",label:"Very slow",detail:"+2 seconds before sending"},{id:"offline",label:"Offline",detail:"New requests fail"}],gl={id:"network-throttling",render:e=>ke($n,{...e})};function Nn(){return typeof me>"u"||!me?()=>{}:hl(gl,cl)}typeof me<"u"&&me&&typeof navigator<"u"&&navigator.product==="ReactNative"&&Nn();function ml(e){ul({id:"network-throttling",render:t=>ke($n,{...t,source:e})})}function $n({id:e,revealToken:t,dismiss:r,source:o}){let n=fo(Kt,mt,mt),i=fo(Kt,gt,gt),s=fo(o?.subscribe??fl,o?.getSnapshot??Mn,Mn),l=o?s?.profile??null:n,a=o?s?.available===true:i,[d,b]=An(false),[E,C]=An(),S=po(false),q=po(0),g=po(true),{width:T}=en();zn(()=>(g.current=true,()=>{g.current=false}),[]),zn(()=>{q.current+=1,S.current=false,b(false),C(void 0)},[o,s?.targetId]);let k=l!==null&&l!=="normal",f=l??"normal",P=xr.find(h=>h.id===f),z=xr[(xr.findIndex(h=>h.id===f)+1)%xr.length],I=!a||f==="offline"?0:f==="verySlow"?1:f==="slow"?2:4,w=d?"Applying\u2026":a?f==="normal"?"0 ms":f==="slow"?"+500 ms":f==="verySlow"?"+2000 ms":"Blocked":"Unavailable";async function H(h,c=false){if(S.current)return;let u=++q.current;S.current=true,b(true),C(void 0);let m=o?.getSnapshot();try{if(o){if(!m?.available)throw new Error("Device unavailable. Open Network again to reconnect these controls.");await m.onChange(h)}else Sr(h);g.current&&q.current===u&&c&&r()}catch(O){g.current&&q.current===u&&C(O instanceof Error?O.message:String(O))}finally{q.current===u&&(S.current=false,g.current&&b(false))}}let v=E?ke(p,{style:Be.menu,children:ke(y,{accessibilityRole:"alert",style:Be.error,children:E})}):void 0;return ke(dl,{id:e,revealToken:t,variant:"strip",dragFromSurface:true,accessibilityLabel:`Move or hide network throttling. ${k?"Active":"Off"}`,accessory:v,children:Hn(p,{style:[Be.row,{width:Math.max(220,Math.min(292,T-64))}],children:[ke(N,{testID:"throttling-cycle",accessibilityRole:"button",accessibilityLabel:`Network: ${P.label}. Switch to ${z.label}`,accessibilityState:{disabled:d||!a},disabled:d||!a,onPress:()=>void H(z.id),style:Be.signalButton,children:d?ke(so,{size:"small",color:Re.color.accent}):Hn(p,{testID:`throttling-signal-${f}`,style:Be.signal,children:[[7,12,18,24].map((h,c)=>ke(p,{style:{width:4,height:h,borderRadius:2,backgroundColor:c<I?f==="offline"?Re.color.danger:Re.color.accent:Re.color.fillTertiary}},h)),f==="offline"&&ke(p,{style:Be.slash})]})}),ke(p,{style:Be.profile,children:ke(y,{testID:"throttling-profile",accessibilityLabel:`Connection profile: ${P.label}`,accessibilityLiveRegion:"polite",numberOfLines:1,style:Be.profileLabel,children:P.label})}),ke(y,{testID:"throttling-status",numberOfLines:1,accessibilityLiveRegion:"polite",style:Be.status,children:w}),ke(p,{style:Be.separator}),ke(N,{testID:"throttling-close",accessibilityRole:"button",accessibilityLabel:"Close and turn off throttling",disabled:d,accessibilityState:{disabled:d},onPress:()=>{l==="normal"?r():H("normal",true)},style:[Be.action,d&&Be.disabled],children:ke(y,{style:Be.actionText,children:"Close"})})]})})}var Be=fe.create({row:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:4,minHeight:48},signalButton:{width:36,minHeight:44,alignItems:"center",justifyContent:"center"},signal:{flexDirection:"row",alignItems:"flex-end",gap:3,height:24},slash:{position:"absolute",width:30,height:2,backgroundColor:Re.color.danger,top:11,left:-2,transform:[{rotate:"-45deg"}]},separator:{height:20,width:1,backgroundColor:Re.color.separator,marginHorizontal:2},status:{color:Re.color.textSecondary,fontSize:10,lineHeight:15,flexShrink:1},profile:{flex:1,flexDirection:"row",alignItems:"center",gap:6,minHeight:44},profileLabel:{color:Re.color.text,fontSize:13,fontWeight:"500",flexShrink:1},action:{minHeight:36,minWidth:52,borderRadius:Re.radius.input,borderWidth:1,borderColor:Re.color.accentBorderStrong,alignItems:"center",justifyContent:"center",paddingHorizontal:10},actionText:{color:Re.color.accent,fontSize:12,fontWeight:"600"},disabled:{opacity:.4},menu:{marginVertical:8,padding:6,borderRadius:Re.radius.card,borderWidth:1,borderColor:Re.color.separator,backgroundColor:Re.color.surface,shadowColor:"#000",shadowOffset:{width:0,height:6},shadowOpacity:.25,shadowRadius:16,elevation:8},error:{color:Re.color.danger,fontSize:12,lineHeight:18,padding:10}});ce();import{useState as ye,useRef as wr,useEffect as yt,useCallback as go}from"react";import{Search as yl,Wifi as bl,Filter as vl,Bookmark as Sl,JsModal as xl,ModalHeader as ge,devToolsStorageKeys as Cr,macOSColors as wl,night as Ke,persistentStorage as Fn,NightSegmented as Cl,useFeatureGate as Tl,UpgradeModal as Rl,PowerToggleButton as kl,useIgnoredPatterns as El,windowDragProps as Pl}from"@buoy-gg/shared-ui/web";D();ce();import{CheckCircle as Il,Clock as Ll,DynamicFilterView as Bl,Film as ql,FileJson as Ol,FileText as Dl,Filter as jn,Globe as Wn,Image as zl,macOSColors as be,night as Ee,Music as Al,XCircle as Hl,monoFont as mo}from"@buoy-gg/shared-ui/web";import{useCallback as Tr,useMemo as je,useState as Ml}from"react";import{jsx as Ye,jsxs as Vn}from"react/jsx-runtime";var Nl=()=>false;function yo(e){let t=e.responseHeaders||e.requestHeaders,r=t?.["content-type"]||t?.["Content-Type"]||"";return r.includes("json")?{type:"JSON",color:be.semantic.info}:r.includes("xml")?{type:"XML",color:be.semantic.success}:r.includes("html")?{type:"HTML",color:be.semantic.warning}:r.includes("text")?{type:"TEXT",color:be.semantic.success}:r.includes("image")?{type:"IMAGE",color:be.semantic.error}:r.includes("video")?{type:"VIDEO",color:be.semantic.error}:r.includes("audio")?{type:"AUDIO",color:be.semantic.debug}:r.includes("form")?{type:"FORM",color:be.semantic.info}:{type:"OTHER",color:Ee.color.textTertiary}}function $l(e){switch(e){case"JSON":return Ol;case"HTML":case"XML":case"TEXT":return Dl;case"IMAGE":return zl;case"VIDEO":return ql;case"AUDIO":return Al;default:return Wn}}function Fl(e){switch(e){case"GET":return be.semantic.success;case"POST":return be.semantic.info;case"PUT":return be.semantic.warning;case"DELETE":return be.semantic.error;case"PATCH":return be.semantic.success;default:return Ee.color.textTertiary}}function jl({events:e,filter:t,onFilterChange:r,ignoredPatterns:o=[],onRemovePattern:n=()=>{},isTeamPattern:i=Nl,onAddPattern:s=()=>{},onTogglePatternMode:l=()=>{}}){let[a,d]=Ml("contains"),b=je(()=>{let v=new Map;for(let h of o)v.set(h.value,h.mode);return v},[o]),E=je(()=>new Set(o.map(v=>v.value)),[o]),C=Tr(v=>{s({value:v,mode:a})},[s,a]),S=Tr(v=>{if(i(v)){let m=Ee.color.accent;return Ye(p,{accessibilityLabel:"Set by your team on buoy.gg",style:[Ae.modeBadge,{borderColor:`${m}60`,backgroundColor:`${m}15`}],children:Ye(y,{style:[Ae.modeBadgeText,{color:m}],children:"TEAM"})})}let h=b.get(v)??"contains",c=h==="exact",u=c?Ee.color.warning:Ee.color.info;return Ye(N,{accessibilityRole:"button",accessibilityLabel:`Match mode: ${h}. Tap to toggle.`,onPress:()=>l(v),style:[Ae.modeBadge,{borderColor:`${u}60`,backgroundColor:`${u}15`}],hitSlop:{top:6,bottom:6,left:6,right:6},children:Ye(y,{style:[Ae.modeBadgeText,{color:u}],children:c?"EXACT":"CONTAINS"})})},[b,l,i]),q=Tr(()=>{let v=[{label:"Contains",value:"contains",hint:"substring"},{label:"Exact",value:"exact",hint:"whole path/host/url"}];return Vn(p,{style:Ae.modeToggleRow,children:[Ye(y,{style:Ae.modeToggleLabel,children:"Match:"}),Ye(p,{style:Ae.modeToggleGroup,children:v.map(h=>{let c=a===h.value;return Vn(N,{onPress:()=>d(h.value),style:[Ae.modeToggleButton,c&&Ae.modeToggleButtonActive],accessibilityRole:"button",accessibilityState:{selected:c},children:[Ye(y,{style:[Ae.modeToggleButtonText,c&&Ae.modeToggleButtonTextActive],children:h.label}),Ye(y,{style:Ae.modeToggleButtonHint,children:h.hint})]},h.value)})})]})},[a]),g=je(()=>{let v={all:e.length,success:0,error:0,pending:0};return e.forEach(h=>{if(h.error||h.status&&h.status>=400){v.error+=1;return}if(h.status&&h.status>=200&&h.status<300){v.success+=1;return}!h.status&&!h.error&&(v.pending+=1)}),v},[e]),T=je(()=>e.reduce((v,h)=>(h.method&&(v[h.method]=(v[h.method]||0)+1),v),{}),[e]),k=je(()=>e.reduce((v,h)=>{let{type:c}=yo(h);return v[c]=(v[c]||0)+1,v},{}),[e]),f=je(()=>{let v=new Set;return e.forEach(h=>{if(h.host){v.add(h.host);return}try{if(h.url){let c=new URL(h.url),u=String(c.host||"");u&&v.add(u)}}catch{}}),Array.from(v).filter(h=>h&&h!=="").sort((h,c)=>h.localeCompare(c))},[e]),P=je(()=>{let v=new Set;return e.forEach(h=>{if(h.url)try{let c=new URL(h.url),u=String(c.origin||""),m=String(c.pathname||""),O=`${u}${m}`;v.add(O)}catch{v.add(h.url)}}),Array.from(v).filter(h=>h&&h!=="").sort((h,c)=>h.localeCompare(c))},[e]),z=je(()=>{let v=f.slice(0,30),h=P.slice(0,30);return[...v,...h]},[f,P]),I=Tr((v,h)=>{let[c]=v.split("::");if(c==="status"){r({...t,status:h==="all"?void 0:h});return}if(c==="method"){let u=String(h),m=t.method||[],O=m.includes(u)?m.filter(re=>re!==u):[u];r({...t,method:O.length>0?O:void 0});return}if(c==="contentType"){let u=String(h),m=t.contentType||[],O=m.includes(u)?m.filter(re=>re!==u):[u];r({...t,contentType:O.length>0?O:void 0})}},[t,r]),w=je(()=>{let v=[];v.push({id:"status",title:"Status",type:"status",data:["all","success","error","pending"].map(u=>({id:`status::${u}`,label:u.charAt(0).toUpperCase()+u.slice(1),count:g[u],icon:u==="success"?Il:u==="error"?Hl:u==="pending"?Ll:Wn,color:u==="success"?be.semantic.success:u==="error"?be.semantic.error:u==="pending"?be.semantic.warning:be.semantic.info,isActive:t.status===u||!t.status&&u==="all",value:u}))});let h=Object.entries(T);h.length>0&&v.push({id:"method",title:"Method",type:"method",data:h.map(([u,m])=>({id:`method::${u}`,label:u,count:m,color:Fl(u),isActive:t.method?.includes(u)??false,value:u}))});let c=Object.entries(k);return c.length>0&&v.push({id:"contentType",title:"Content Type",type:"contentType",data:c.map(([u,m])=>{let O=e.find(Z=>yo(Z).type===u),{color:re}=O?yo(O):{color:Ee.color.textTertiary};return{id:`contentType::${u}`,label:u,count:m,icon:$l(u),color:re,isActive:t.contentType?.includes(u)??false,value:u}})}),v},[k,e,t.contentType,t.method,t.status,T,g]),H=je(()=>({sections:w,addFilterSection:{enabled:true,placeholder:"Enter domain or URL pattern...",title:"ACTIVE FILTERS",icon:jn,renderExtra:q},availableItemsSection:{enabled:true,title:"AVAILABLE DOMAINS & URLS",emptyMessage:"No network events captured yet. Domains and URLs will appear here.",items:z},howItWorksSection:{enabled:true,title:"HOW NETWORK FILTERS WORK",description:"Patterns hide matching requests from the network event list. Each pattern has a match mode you can toggle on its badge: CONTAINS hides any URL containing the text; EXACT hides only an exact path/host/url match.",examples:["\u2022 example.com (CONTAINS) \u2192 any request whose URL contains example.com","\u2022 example.com (EXACT) \u2192 only requests served by that exact host","\u2022 /v1 (CONTAINS) \u2192 any URL containing /v1 (e.g. /v1, /v1/users)","\u2022 /v1 (EXACT) \u2192 only requests whose pathname is exactly /v1"],icon:jn},onFilterChange:I,onPatternAdd:C,onPatternToggle:n,activePatterns:E,renderPatternMeta:S}),[E,w,I,C,n,q,S,z]);return Ye(Bl,{...H})}var Ae=fe.create({modeBadge:{paddingHorizontal:8,paddingVertical:3,borderRadius:6,borderWidth:1},modeBadgeText:{fontSize:9,fontFamily:mo,fontWeight:"700",letterSpacing:.5},modeToggleRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:8},modeToggleLabel:{fontSize:11,fontWeight:"600",color:Ee.color.textSecondary,fontFamily:mo,letterSpacing:.3},modeToggleGroup:{flexDirection:"row",gap:6,flex:1},modeToggleButton:{flex:1,paddingVertical:6,paddingHorizontal:10,borderRadius:8,borderWidth:1,borderColor:Ee.color.border,backgroundColor:Ee.color.buttonSurface,alignItems:"center"},modeToggleButtonActive:{borderColor:Ee.color.accentBorderStrong,backgroundColor:Ee.color.accentSoft},modeToggleButtonText:{fontSize:11,fontWeight:"700",color:Ee.color.textSecondary,fontFamily:mo,letterSpacing:.3},modeToggleButtonTextActive:{color:Ee.color.accent},modeToggleButtonHint:{fontSize:9,color:Ee.color.textTertiary,marginTop:1}});D();import{TickProvider as bo}from"@buoy-gg/shared-ui/web";import{useTick as Wl}from"@buoy-gg/shared-ui/web";function vo(){return Wl()??Date.now()}D();ce();import{useState as Yt,useEffect as Un,useMemo as Vl,memo as Ul}from"react";import{Clock as So,Upload as _n,Download as Xn,AlertCircle as _l,ChevronDown as Jn,ChevronUp as Gn,Lock as Xl,Unlock as Jl,FileJson as Rr,Filter as Gl,Globe as Kl,Link as Yl,Copy as Kn,FlaskConical as Zl,InlineCopyButton as Yn,macOSColors as kr,night as B,useFeatureGate as Ql,UpgradeModal as ed,monoFont as qt}from"@buoy-gg/shared-ui/web";D();import{formatBytes as Ze,formatDuration as Er,formatHttpStatus as Zn,getMethodColor as Ip}from"@buoy-gg/shared-ui/web";import{formatRelativeTime as td}from"@buoy-gg/shared-ui/web";import{DataViewer as Zt}from"@buoy-gg/shared-ui/web/dataViewer";D();function xo(e,t=30){if(e==null)return null;if(typeof e=="boolean"||typeof e=="number")return String(e);if(typeof e=="string")return e.length>t?e.substring(0,t-1)+"\u2026":e;if(Array.isArray(e))return e.length===0?null:e.length===1?xo(e[0],t):`${e.length} items`;if(typeof e=="object"){let r=Object.entries(e);if(r.length===0)return null;for(let[o,n]of r){let i=xo(n,t);if(i)return i}return null}return null}function rd(e,t=3){if(!e||typeof e!="object")return null;let r=[];for(let[o,n]of Object.entries(e)){let i=xo(n);if(i&&r.push(i),r.length>=t)break}return r.length>0?r:null}function Qn(e,t){let r=rd(t);return!r||r.length===0?e:[e,...r].join(" \u203A ")}function ei(e,t){if(!e||typeof e!="object")return false;for(let r of Object.values(e))if(wo(r,t))return true;return false}function wo(e,t){return typeof e=="string"?e.toLowerCase().includes(t):typeof e=="number"||typeof e=="boolean"?String(e).includes(t):Array.isArray(e)?e.some(r=>wo(r,t)):typeof e=="object"&&e!==null?Object.values(e).some(r=>wo(r,t)):false}D();import{createContext as od,useContext as nd}from"react";import{jsx as id}from"react/jsx-runtime";var ti=od(null);function sd({resolver:e,children:t}){return id(ti.Provider,{value:e,children:t})}function ad(){return nd(ti)}import{Fragment as Co,jsx as x,jsxs as X}from"react/jsx-runtime";var Pr=B.color.accent,ld=new Set,dd=()=>{},ud=({timings:e,total:t})=>{let r=Math.max(1,t),o=[{label:"Waiting (TTFB)",hint:"incl. queue, DNS, TLS",value:e.ttfb,color:kr.semantic.warning},{label:"Content download",hint:void 0,value:e.download,color:kr.semantic.success}];return x(p,{style:R.phaseList,children:o.map(n=>X(p,{style:R.phaseRow,children:[X(p,{style:R.phaseLabelGroup,children:[x(y,{style:R.phaseLabel,children:n.label}),n.hint?x(y,{style:R.phaseHint,children:n.hint}):null]}),x(p,{style:R.phaseTrack,children:x(p,{style:[R.phaseBar,{backgroundColor:n.color,width:`${Math.min(100,Math.max(1,n.value/r*100))}%`}]})}),x(y,{style:R.phaseValue,children:Er(n.value)})]},n.label))})},ri=()=>x(p,{style:R.bodyDeferred}),bt=({title:e,icon:t,children:r,defaultOpen:o=false,count:n})=>{let[i,s]=Yt(o);return X(p,{style:R.collapsibleSection,children:[X(N,{style:R.collapsibleHeader,onPress:()=>s(!i),testID:`buoy-network-section-${e.toLowerCase().replace(/\s+/g,"-")}`,accessibilityRole:"button",accessibilityLabel:e,children:[X(p,{style:R.collapsibleTitle,children:[t,x(y,{style:R.collapsibleTitleText,children:e}),n!==void 0?x(y,{style:R.collapsibleCount,children:n}):null]}),i?x(Gn,{size:16,color:B.color.textSecondary}):x(Jn,{size:16,color:B.color.textSecondary})]}),i?x(p,{style:R.collapsibleContent,children:r}):null]})},cd=({url:e,requestData:t,operationName:r,graphqlVariables:o,requestClient:n,isPro:i=false,onUpgradePress:s})=>{let l=E=>{try{let C=new URL(E),S=String(C.protocol||""),q=String(C.host||""),g=S==="https:",T=String(C.pathname||"");if(n==="graphql"&&r){let P=Qn(r,o);T=`${T} (${P})`}else r&&(T=`${T} (${r})`);let k={},f=C.searchParams;return f&&typeof f.forEach=="function"&&f.forEach((P,z)=>{k[z]=P}),{protocol:S.replace(":",""),host:q,pathname:T,params:Object.keys(k).length>0?k:null,isSecure:g}}catch{return{protocol:"",host:e,pathname:"",params:null,isSecure:false}}},a=Vl(()=>l(e),[e,n,r,o]),[d,b]=Yt(false);return X(p,{style:R.urlBreakdown,children:[X(p,{style:R.urlRow,children:[a.isSecure?x(Xl,{size:12,color:kr.semantic.success}):x(Jl,{size:12,color:kr.semantic.warning}),x(y,{style:R.urlDomain,children:a.host}),X(y,{style:R.urlProtocol,children:["(",a.protocol.toUpperCase(),")"]}),i?x(Yn,{value:e,buttonStyle:R.copyButton}):x(N,{style:R.copyButton,onPress:s,activeOpacity:.7,children:x(Kn,{size:14,color:B.color.textSecondary})})]}),x(p,{style:R.urlPathRow,children:X(y,{style:R.urlPath,numberOfLines:2,children:[a.pathname,a.params?X(y,{style:R.urlQueryString,children:["?",new URLSearchParams(a.params).toString()]}):null]})}),a.params?X(p,{style:R.queryParamsCollapsible,children:[X(N,{style:R.queryParamsToggle,onPress:()=>b(!d),activeOpacity:.7,children:[x(y,{style:R.queryParamsToggleText,children:"Query Parameters"}),x(y,{style:R.collapsibleCount,children:Object.keys(a.params).length}),d?x(Gn,{size:14,color:B.color.textSecondary}):x(Jn,{size:14,color:B.color.textSecondary})]}),d?x(Zt,{title:"",data:a.params,showTypeFilter:true,rawMode:true,initialExpanded:true}):null]}):null]})},oi=Ul(function({event:e,ignoredPatterns:t=ld,onTogglePattern:r=dd,showBodies:o=true}){let n=e.status?Zn(e.status):null,i=!e.status&&!e.error,{isPro:s}=Ql(),[l,a]=Yt(false);Un(()=>{l&&s&&a(false)},[l,s]);let d=ad(),b=e.requestData===void 0&&(e.requestBodyOmitted===true||(e.requestSize??0)>0),E=e.responseData===void 0&&(e.responseBodyOmitted===true||(e.responseSize??0)>0),C=e.headersOmitted===true,[S,q]=Yt(null),[g,T]=Yt(false);Un(()=>{if(q(null),!d||!b&&!E&&!C){T(false);return}let w=false;return T(true),d(e.id).then(H=>{w||q(H)}).catch(()=>{}).finally(()=>{w||T(false)}),()=>{w=true}},[e.id,d,b,E,C]);let k=e.requestData??S?.requestData??void 0,f=e.responseData??S?.responseData??void 0,P=(C?S?.requestHeaders:void 0)??e.requestHeaders,z=(C?S?.responseHeaders:void 0)??e.responseHeaders,I=()=>{let w={method:e.method,url:e.url,status:e.status,statusText:e.statusText,timestamp:new Date(e.timestamp).toISOString(),duration:e.duration?`${e.duration}ms`:"N/A",requestHeaders:P,requestData:k,responseHeaders:z,responseData:f,requestSize:e.requestSize?Ze(e.requestSize):"N/A",responseSize:e.responseSize?Ze(e.responseSize):"N/A",error:e.error,client:e.requestClient};return`# Network Request Details
|
|
10
10
|
|
|
11
11
|
## Request
|
|
12
12
|
- **Method:** ${w.method}
|
|
@@ -40,45 +40,45 @@ ${JSON.stringify(w.responseHeaders,null,2)}
|
|
|
40
40
|
\`\`\`json
|
|
41
41
|
${JSON.stringify(w.responseData,null,2)}
|
|
42
42
|
\`\`\`
|
|
43
|
-
`};return X(Co,{children:[X(ut,{testID:"buoy-network-detail-scroll",style:R.container,children:[X(p,{style:R.requestDetailsSection,children:[X(p,{style:R.httpHeader,children:[x(p,{style:R.httpMethodBadge,children:x(y,{style:R.httpMethod,children:e.method})}),e.status?x(p,{style:[R.httpStatusBadge,{backgroundColor:`${n?.color}20`}],children:X(y,{style:[R.httpStatusText,{color:n?.color}],children:[n?.text," ",n?.meaning]})}):i?X(p,{style:R.pendingBadge,children:[x(So,{size:10,color:B.color.warning}),x(y,{style:R.pendingBadgeText,children:"Pending"})]}):null,e.condition&&X(y,{style:{color:"#FFCC66"},children:["Conditions: ",e.condition.profile," (+",e.condition.delayMs," ms)"]}),e.duration?X(p,{style:R.httpDuration,children:[x(So,{size:10,color:B.color.textTertiary}),x(y,{style:R.httpDurationText,children:Ir(e.duration)})]}):null,e.override?X(p,{style:R.overrideBadge,children:[x(Yl,{size:10,color:B.color.warning}),x(y,{style:R.overrideBadgeText,children:e.override.ruleName||"Overridden"})]}):null,s?x(Kn,{value:L,buttonStyle:R.copyFullButton}):x(N,{style:R.copyFullButton,onPress:()=>a(true),activeOpacity:.7,children:x(Gn,{size:14,color:B.color.textSecondary})})]}),x(ud,{url:e.url,requestData:k,operationName:e.operationName,graphqlVariables:e.graphqlVariables,requestClient:e.requestClient,isPro:s,onUpgradePress:()=>a(true)}),e.error?X(p,{style:R.errorBox,children:[x(Ul,{size:12,color:B.color.danger}),x(y,{style:R.errorText,children:e.error})]}):null]}),X(p,{style:R.timingSection,children:[X(p,{style:R.timingRow,children:[x(So,{size:12,color:B.color.textSecondary}),x(y,{style:R.timingLabel,children:"Started:"}),x(y,{style:R.timingValue,children:ed(e.timestamp)}),X(y,{style:R.timingExact,children:["(",new Date(e.timestamp).toLocaleTimeString(),")"]}),e.requestSize||e.responseSize?X(p,{style:R.sizeRow,children:[e.requestSize!==void 0?X(p,{style:R.sizeItem,children:[x(Un,{size:10,color:B.color.info}),x(y,{style:R.sizeLabel,children:"Sent:"}),x(y,{style:R.sizeValue,children:Ze(e.requestSize)})]}):null,e.responseSize!==void 0?X(p,{style:R.sizeItem,children:[x(_n,{size:10,color:Er}),x(y,{style:R.sizeLabel,children:"Received:"}),x(y,{style:R.sizeValue,children:Ze(e.responseSize)})]}):null]}):null]}),e.timings?X(Co,{children:[x(p,{style:R.phaseDivider}),x(dd,{timings:e.timings,total:e.duration??e.timings.ttfb+e.timings.download})]}):null]}),x(bt,{title:"Request Headers",icon:x(Un,{size:14,color:B.color.info}),defaultOpen:false,count:Object.keys(E).length,children:Object.keys(E).length>0?x(p,{style:R.dataViewerContainer,children:x(Zt,{title:"",data:E,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s})}):x(y,{style:R.emptyText,children:"No request headers"})}),x(bt,{title:"Response Headers",icon:x(_n,{size:14,color:Er}),defaultOpen:false,count:Object.keys(z).length,children:Object.keys(z).length>0?x(p,{style:R.dataViewerContainer,children:x(Zt,{title:"",data:z,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s})}):x(y,{style:R.emptyText,children:"No response headers yet"})}),k!==void 0?x(bt,{title:"Request Body",icon:x(Rr,{size:14,color:B.color.accent}),defaultOpen:false,children:x(p,{style:R.dataViewerContainer,children:o?x(Zt,{title:"",data:k,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s}):x(ti,{})})}):b?x(bt,{title:"Request Body",icon:x(Rr,{size:14,color:B.color.accent}),defaultOpen:true,children:x(y,{style:R.emptyText,children:g?`Loading request body (${Ze(e.requestSize??0)})\u2026`:"Request body unavailable"})}):null,f!==void 0?x(bt,{title:"Response Body",icon:x(Rr,{size:14,color:Er}),defaultOpen:true,children:x(p,{style:R.dataViewerContainer,children:o?x(Zt,{title:"",data:f,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s}):x(ti,{})})}):I?x(bt,{title:"Response Body",icon:x(Rr,{size:14,color:Er}),defaultOpen:true,children:x(y,{style:R.emptyText,children:g?`Loading response body (${Ze(e.responseSize??0)})\u2026`:"Response body unavailable"})}):null,x(bt,{title:"Filter Options",icon:x(Jl,{size:14,color:B.color.warning}),defaultOpen:false,children:x(p,{style:R.filterOptionsContainer,children:(()=>{let w="",H="";try{let c=new URL(e.url);w=c.hostname,H=c.pathname}catch{H=e.url}let v=t.has(w),h=t.has(H);return X(Co,{children:[X(N,{style:[R.filterOption,v&&R.filterOptionActive],onPress:()=>w&&r(w),children:[X(p,{style:R.filterOptionLeft,children:[x(Gl,{size:16,color:v?B.color.warning:B.color.textTertiary}),X(p,{style:R.filterOptionContent,children:[x(y,{style:R.filterOptionLabel,children:"Ignore Domain"}),x(y,{style:R.filterOptionValue,children:w||"N/A"})]})]}),x(p,{style:[R.filterToggle,v&&R.filterToggleActive],children:x(y,{style:[R.filterToggleText,v&&R.filterToggleTextActive],children:v?"IGNORED":"IGNORE"})})]}),X(N,{style:[R.filterOption,h&&R.filterOptionActive],onPress:()=>H&&r(H),children:[X(p,{style:R.filterOptionLeft,children:[x(Kl,{size:16,color:h?B.color.warning:B.color.textTertiary}),X(p,{style:R.filterOptionContent,children:[x(y,{style:R.filterOptionLabel,children:"Ignore URL Pattern"}),x(y,{style:R.filterOptionValue,numberOfLines:1,children:H||"N/A"})]})]}),x(p,{style:[R.filterToggle,h&&R.filterToggleActive],children:x(y,{style:[R.filterToggleText,h&&R.filterToggleTextActive],children:h?"IGNORED":"IGNORE"})})]}),x(p,{style:R.filterInfoBox,children:x(y,{style:R.filterInfoText,children:"Ignored requests will be hidden from the network list. You can manage filters in the Filters tab."})})]})})()})})]}),x(Ql,{visible:l,onClose:()=>a(false),featureName:"Copy Request Details",description:"Copy network request details to share or debug issues.",benefits:["Copy full request details including headers and body","Export to JSON, Markdown, or plain text","Share request data with teammates","Feed data to AI assistants for debugging"]})]})}),R=fe.create({container:{flex:1,backgroundColor:"transparent"},requestDetailsSection:{marginHorizontal:12,marginTop:12,backgroundColor:B.color.surface,borderRadius:8,borderWidth:1,borderColor:B.color.border,padding:12},httpHeader:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12,flexWrap:"nowrap"},httpMethodBadge:{backgroundColor:B.color.infoSoft,paddingHorizontal:8,paddingVertical:4,borderRadius:4},httpMethod:{color:B.color.info,fontSize:11,fontWeight:"700",letterSpacing:.5},httpStatusBadge:{paddingHorizontal:8,paddingVertical:4,borderRadius:4},httpStatusText:{fontSize:11,fontWeight:"600"},pendingBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:B.color.warningSoft,paddingHorizontal:8,paddingVertical:4,borderRadius:4},pendingBadgeText:{color:B.color.warning,fontSize:11,fontWeight:"600"},httpDuration:{flexDirection:"row",alignItems:"center",gap:4},httpDurationText:{color:B.color.textSecondary,fontSize:11},overrideBadge:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:6,paddingVertical:3,borderRadius:4,backgroundColor:B.color.warningSoft},overrideBadgeText:{color:B.color.warning,fontSize:10,fontWeight:"700"},copyFullButton:{marginLeft:"auto",flexShrink:0,padding:4},urlBreakdown:{backgroundColor:B.color.bg,borderRadius:4,padding:8},urlRow:{flexDirection:"row",alignItems:"center",gap:6,marginBottom:4},urlDomain:{color:B.color.text,fontSize:12,fontWeight:"600",flex:1},urlProtocol:{color:B.color.textTertiary,fontSize:10},copyButton:{padding:4},urlPathRow:{paddingLeft:18},urlPath:{color:B.color.textSecondary,fontSize:11,fontFamily:qt},urlQueryString:{color:B.color.info,fontSize:11,fontFamily:qt},queryParamsCollapsible:{marginTop:8},queryParamsToggle:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:10,backgroundColor:B.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:B.color.border,marginBottom:8},queryParamsToggleText:{flexGrow:0,color:B.color.text,fontSize:12,fontWeight:"600",letterSpacing:.3},timingSection:{marginHorizontal:12,marginTop:8,backgroundColor:B.color.surface,borderRadius:8,borderWidth:1,borderColor:B.color.border,padding:12},timingRow:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},timingLabel:{color:B.color.textSecondary,fontSize:11},timingValue:{color:B.color.text,fontSize:11,fontWeight:"600"},timingExact:{color:B.color.textTertiary,fontSize:10,marginLeft:4},sizeRow:{flexDirection:"row",alignItems:"center",gap:16,marginLeft:"auto"},sizeItem:{flexDirection:"row",alignItems:"center",gap:4},sizeLabel:{color:B.color.textTertiary,fontSize:10},sizeValue:{color:B.color.info,fontSize:10,fontFamily:qt,fontWeight:"600"},phaseDivider:{height:1,backgroundColor:B.color.border,marginTop:12,marginBottom:12},phaseList:{gap:8},phaseRow:{flexDirection:"row",alignItems:"center",gap:14},phaseLabelGroup:{width:150},phaseLabel:{fontSize:12,color:B.color.textSecondary},phaseHint:{fontSize:10,color:B.color.textTertiary},phaseTrack:{flex:1,height:7,borderRadius:4,backgroundColor:B.color.surfaceElevated,justifyContent:"center",overflow:"hidden"},phaseBar:{height:7,borderRadius:4},phaseValue:{width:72,textAlign:"right",fontSize:12,fontFamily:qt,color:B.color.text},collapsibleSection:{marginHorizontal:12,marginTop:8,backgroundColor:B.color.surface,borderRadius:8,borderWidth:1,borderColor:B.color.border,overflow:"hidden"},collapsibleHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:12,backgroundColor:B.color.surfaceElevated},collapsibleTitle:{flexDirection:"row",alignItems:"center",gap:8},collapsibleTitleText:{color:B.color.text,fontSize:13,fontWeight:"600"},collapsibleCount:{color:B.color.textTertiary,fontSize:11.5,fontFamily:qt},collapsibleContent:{padding:12},dataViewerContainer:{marginTop:-12,marginHorizontal:-12,marginBottom:-12},bodyDeferred:{height:120},errorBox:{flexDirection:"row",alignItems:"center",gap:6,backgroundColor:B.color.dangerSoft,padding:8,borderRadius:4,marginTop:8},errorText:{color:B.color.danger,fontSize:11,flex:1},emptyText:{color:B.color.textTertiary,fontSize:12,fontStyle:"italic",textAlign:"center"},filterOptionsContainer:{gap:12},filterOption:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:B.color.surfaceElevated,borderRadius:8,padding:12,borderWidth:1,borderColor:B.color.border},filterOptionActive:{backgroundColor:B.color.warningSoft,borderColor:B.color.warning+"33"},filterOptionLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1},filterOptionContent:{flex:1},filterOptionLabel:{color:B.color.textSecondary,fontSize:11,marginBottom:2,textTransform:"uppercase",letterSpacing:.5},filterOptionValue:{color:B.color.text,fontSize:13,fontFamily:qt},filterToggle:{paddingHorizontal:10,paddingVertical:6,borderRadius:4,backgroundColor:B.color.bg,borderWidth:1,borderColor:B.color.border},filterToggleActive:{backgroundColor:B.color.warningSoft,borderColor:B.color.warning+"4D"},filterToggleText:{fontSize:10,fontWeight:"600",color:B.color.textTertiary,letterSpacing:.5},filterToggleTextActive:{color:B.color.warning},filterInfoBox:{backgroundColor:B.color.infoSoft,borderRadius:6,padding:10,borderWidth:1,borderColor:B.color.info+"33"},filterInfoText:{color:B.color.textSecondary,fontSize:11,lineHeight:16}});D();ce();import{DynamicFilterView as oi,macOSColors as Fe,FileText as ni,FileCode as ii,Link as cd,Zap as hd,Settings as pd,Hash as fd,Eye as gd,ToolbarCopyButton as md,formatRelativeTime as yd,useFeatureGate as bd,ProFeatureBanner as vd,ExportPreview as Sd,monoFont as si}from"@buoy-gg/shared-ui/web";import{DataViewer as xd}from"@buoy-gg/shared-ui/web/dataViewer";import{useCallback as We,useMemo as vt,useState as wd}from"react";import{Fragment as Cd,jsx as He,jsxs as ai}from"react/jsx-runtime";var Td={includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:10,format:"markdown",filterMode:"all"},Qt={urls:{includeMethod:true,includeStatus:false,includeDuration:false,includeTimestamp:false,includeClient:false,includeSizes:false,includeErrors:false,includeRequestHeaders:false,includeResponseHeaders:false,includeRequestBody:false,includeResponseBody:false,bodySizeThreshold:10,format:"plaintext",filterMode:"all"},llm:{includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:10,format:"markdown",filterMode:"all"},json:{includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:-1,format:"json",filterMode:"all"},full:{includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:-1,format:"markdown",filterMode:"all"}};function Rd(e){for(let[t,r]of Object.entries(Qt))if(Object.keys(r).every(o=>r[o]===e[o]))return t;return null}var kd=100*1024,Id=500*1024;function Ed(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Ld({settings:e,onSettingsChange:t,events:r=[]}){let{isPro:o}=bd(),n=vo(),[i,s]=wd(false),l=r.length>0,a=vt(()=>{if(!l)return null;let h=r.map(c=>typeof c.timestamp=="number"?c.timestamp:new Date(c.timestamp).getTime());return Math.max(...h)},[r,l]),d=vt(()=>Rd(e),[e]),b=We(()=>{t(Qt.urls)},[t]),I=We(()=>{t(Qt.llm)},[t]),C=We(()=>{t(Qt.json)},[t]),S=We(()=>{t(Qt.full)},[t]),q=We((h,c)=>{let[u,m]=h.split("::");if(u==="preset"){switch(m){case"urls":b();break;case"llm":I();break;case"json":C();break;case"full":S();break}return}if(u==="requestInfo"){t({...e,[m]:!e[m]});return}if(u==="headers"){t({...e,[m]:!e[m]});return}if(u==="body"){t(m==="bodySizeThreshold"?{...e,bodySizeThreshold:c}:{...e,[m]:!e[m]});return}if(u==="format"){t({...e,format:c});return}u==="filter"&&t({...e,filterMode:c})},[e,t,b,I,C,S]),g=vt(()=>({method:"POST",url:"https://api.example.com/v1/users",status:201,duration:342,timestamp:new Date().toISOString(),requestHeaders:{"Content-Type":"application/json",Authorization:"Bearer ***"},responseHeaders:{"Content-Type":"application/json","X-Request-ID":"abc123"},requestBody:{name:"John Doe",email:"john@example.com"},responseBody:{id:"user_123",name:"John Doe",email:"john@example.com",createdAt:"2025-01-10T12:00:00Z"}}),[]),T=vt(()=>l?r:[g],[l,r,g]),k=vt(()=>{let h=l?r:[g],c=0;for(let u of h){if(e.includeMethod&&(c+=(u.url?.length||0)+10),e.includeStatus&&(c+=30),e.includeTimestamp&&(c+=30),e.includeRequestHeaders)try{c+=JSON.stringify(u.requestHeaders||{}).length}catch{c+=100}if(e.includeRequestBody){let m="requestBody"in u?u.requestBody:u.requestData;try{c+=JSON.stringify(m||{}).length}catch{c+=100}}if(e.includeResponseBody){let m="responseBody"in u?u.responseBody:u.responseData;try{c+=JSON.stringify(m||{}).length}catch{c+=100}}}return c},[l,r,g,e]),f=vt(()=>k>=Id?"danger":k>=kd?"warning":"none",[k]),E=We(()=>{let h=l?r:[g],{format:c,includeMethod:u,includeStatus:m,includeTimestamp:O,includeRequestHeaders:re,includeRequestBody:Z,includeResponseBody:ee}=e,G=A=>{let W={};return u&&(W.method=A.method,W.url=A.url),m&&(W.status=A.status,W.duration=A.duration),O&&(W.timestamp=A.timestamp),re&&(W.requestHeaders=A.requestHeaders),Z&&(W.requestBody="requestBody"in A?A.requestBody:A.requestData),ee&&(W.responseBody="responseBody"in A?A.responseBody:A.responseData),W};if(c==="json"){let A=h.map(G);return JSON.stringify(A,null,2)}return c==="markdown"?h.map((A,W)=>{let F=[];F.push(`# Request ${W+1}`),u&&F.push(`
|
|
44
|
-
**${A.method}** ${A.url}`);let ne=[];if(m&&(ne.push(`**Status:** ${A.status}`),ne.push(`**Duration:** ${A.duration}ms`)),O&&ne.push(`**Timestamp:** ${A.timestamp}`),ne.length>0
|
|
43
|
+
`};return X(Co,{children:[X(ut,{testID:"buoy-network-detail-scroll",style:R.container,children:[X(p,{style:R.requestDetailsSection,children:[X(p,{style:R.httpHeader,children:[x(p,{style:R.httpMethodBadge,children:x(y,{style:R.httpMethod,children:e.method})}),e.status?x(p,{style:[R.httpStatusBadge,{backgroundColor:`${n?.color}20`}],children:X(y,{style:[R.httpStatusText,{color:n?.color}],children:[n?.text," ",n?.meaning]})}):i?X(p,{style:R.pendingBadge,children:[x(So,{size:10,color:B.color.warning}),x(y,{style:R.pendingBadgeText,children:"Pending"})]}):null,e.condition&&X(y,{style:{color:"#FFCC66"},children:["Conditions: ",e.condition.profile," (+",e.condition.delayMs," ms)"]}),e.duration?X(p,{style:R.httpDuration,children:[x(So,{size:10,color:B.color.textTertiary}),x(y,{style:R.httpDurationText,children:Er(e.duration)})]}):null,e.override?X(p,{style:R.overrideBadge,children:[x(Zl,{size:10,color:B.color.warning}),x(y,{style:R.overrideBadgeText,children:e.override.ruleName||"Overridden"})]}):null,s?x(Yn,{value:I,buttonStyle:R.copyFullButton}):x(N,{style:R.copyFullButton,onPress:()=>a(true),activeOpacity:.7,children:x(Kn,{size:14,color:B.color.textSecondary})})]}),x(cd,{url:e.url,requestData:k,operationName:e.operationName,graphqlVariables:e.graphqlVariables,requestClient:e.requestClient,isPro:s,onUpgradePress:()=>a(true)}),e.error?X(p,{style:R.errorBox,children:[x(_l,{size:12,color:B.color.danger}),x(y,{style:R.errorText,children:e.error})]}):null]}),X(p,{style:R.timingSection,children:[X(p,{style:R.timingRow,children:[x(So,{size:12,color:B.color.textSecondary}),x(y,{style:R.timingLabel,children:"Started:"}),x(y,{style:R.timingValue,children:td(e.timestamp)}),X(y,{style:R.timingExact,children:["(",new Date(e.timestamp).toLocaleTimeString(),")"]}),e.requestSize||e.responseSize?X(p,{style:R.sizeRow,children:[e.requestSize!==void 0?X(p,{style:R.sizeItem,children:[x(_n,{size:10,color:B.color.info}),x(y,{style:R.sizeLabel,children:"Sent:"}),x(y,{style:R.sizeValue,children:Ze(e.requestSize)})]}):null,e.responseSize!==void 0?X(p,{style:R.sizeItem,children:[x(Xn,{size:10,color:Pr}),x(y,{style:R.sizeLabel,children:"Received:"}),x(y,{style:R.sizeValue,children:Ze(e.responseSize)})]}):null]}):null]}),e.timings?X(Co,{children:[x(p,{style:R.phaseDivider}),x(ud,{timings:e.timings,total:e.duration??e.timings.ttfb+e.timings.download})]}):null]}),x(bt,{title:"Request Headers",icon:x(_n,{size:14,color:B.color.info}),defaultOpen:false,count:Object.keys(P).length,children:Object.keys(P).length>0?x(p,{style:R.dataViewerContainer,children:x(Zt,{title:"",data:P,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s})}):x(y,{style:R.emptyText,children:"No request headers"})}),x(bt,{title:"Response Headers",icon:x(Xn,{size:14,color:Pr}),defaultOpen:false,count:Object.keys(z).length,children:Object.keys(z).length>0?x(p,{style:R.dataViewerContainer,children:x(Zt,{title:"",data:z,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s})}):x(y,{style:R.emptyText,children:"No response headers yet"})}),k!==void 0?x(bt,{title:"Request Body",icon:x(Rr,{size:14,color:B.color.accent}),defaultOpen:false,children:x(p,{style:R.dataViewerContainer,children:o?x(Zt,{title:"",data:k,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s}):x(ri,{})})}):b?x(bt,{title:"Request Body",icon:x(Rr,{size:14,color:B.color.accent}),defaultOpen:true,children:x(y,{style:R.emptyText,children:g?`Loading request body (${Ze(e.requestSize??0)})\u2026`:"Request body unavailable"})}):null,f!==void 0?x(bt,{title:"Response Body",icon:x(Rr,{size:14,color:Pr}),defaultOpen:true,children:x(p,{style:R.dataViewerContainer,children:o?x(Zt,{title:"",data:f,showTypeFilter:true,rawMode:true,initialExpanded:true,disableCopy:!s}):x(ri,{})})}):E?x(bt,{title:"Response Body",icon:x(Rr,{size:14,color:Pr}),defaultOpen:true,children:x(y,{style:R.emptyText,children:g?`Loading response body (${Ze(e.responseSize??0)})\u2026`:"Response body unavailable"})}):null,x(bt,{title:"Filter Options",icon:x(Gl,{size:14,color:B.color.warning}),defaultOpen:false,children:x(p,{style:R.filterOptionsContainer,children:(()=>{let w="",H="";try{let c=new URL(e.url);w=c.hostname,H=c.pathname}catch{H=e.url}let v=t.has(w),h=t.has(H);return X(Co,{children:[X(N,{style:[R.filterOption,v&&R.filterOptionActive],onPress:()=>w&&r(w),children:[X(p,{style:R.filterOptionLeft,children:[x(Kl,{size:16,color:v?B.color.warning:B.color.textTertiary}),X(p,{style:R.filterOptionContent,children:[x(y,{style:R.filterOptionLabel,children:"Ignore Domain"}),x(y,{style:R.filterOptionValue,children:w||"N/A"})]})]}),x(p,{style:[R.filterToggle,v&&R.filterToggleActive],children:x(y,{style:[R.filterToggleText,v&&R.filterToggleTextActive],children:v?"IGNORED":"IGNORE"})})]}),X(N,{style:[R.filterOption,h&&R.filterOptionActive],onPress:()=>H&&r(H),children:[X(p,{style:R.filterOptionLeft,children:[x(Yl,{size:16,color:h?B.color.warning:B.color.textTertiary}),X(p,{style:R.filterOptionContent,children:[x(y,{style:R.filterOptionLabel,children:"Ignore URL Pattern"}),x(y,{style:R.filterOptionValue,numberOfLines:1,children:H||"N/A"})]})]}),x(p,{style:[R.filterToggle,h&&R.filterToggleActive],children:x(y,{style:[R.filterToggleText,h&&R.filterToggleTextActive],children:h?"IGNORED":"IGNORE"})})]}),x(p,{style:R.filterInfoBox,children:x(y,{style:R.filterInfoText,children:"Ignored requests will be hidden from the network list. You can manage filters in the Filters tab."})})]})})()})})]}),x(ed,{visible:l,onClose:()=>a(false),featureName:"Copy Request Details",description:"Copy network request details to share or debug issues.",benefits:["Copy full request details including headers and body","Export to JSON, Markdown, or plain text","Share request data with teammates","Feed data to AI assistants for debugging"]})]})}),R=fe.create({container:{flex:1,backgroundColor:"transparent"},requestDetailsSection:{marginHorizontal:12,marginTop:12,backgroundColor:B.color.surface,borderRadius:8,borderWidth:1,borderColor:B.color.border,padding:12},httpHeader:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:12,flexWrap:"nowrap"},httpMethodBadge:{backgroundColor:B.color.infoSoft,paddingHorizontal:8,paddingVertical:4,borderRadius:4},httpMethod:{color:B.color.info,fontSize:11,fontWeight:"700",letterSpacing:.5},httpStatusBadge:{paddingHorizontal:8,paddingVertical:4,borderRadius:4},httpStatusText:{fontSize:11,fontWeight:"600"},pendingBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:B.color.warningSoft,paddingHorizontal:8,paddingVertical:4,borderRadius:4},pendingBadgeText:{color:B.color.warning,fontSize:11,fontWeight:"600"},httpDuration:{flexDirection:"row",alignItems:"center",gap:4},httpDurationText:{color:B.color.textSecondary,fontSize:11},overrideBadge:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:6,paddingVertical:3,borderRadius:4,backgroundColor:B.color.warningSoft},overrideBadgeText:{color:B.color.warning,fontSize:10,fontWeight:"700"},copyFullButton:{marginLeft:"auto",flexShrink:0,padding:4},urlBreakdown:{backgroundColor:B.color.bg,borderRadius:4,padding:8},urlRow:{flexDirection:"row",alignItems:"center",gap:6,marginBottom:4},urlDomain:{color:B.color.text,fontSize:12,fontWeight:"600",flex:1},urlProtocol:{color:B.color.textTertiary,fontSize:10},copyButton:{padding:4},urlPathRow:{paddingLeft:18},urlPath:{color:B.color.textSecondary,fontSize:11,fontFamily:qt},urlQueryString:{color:B.color.info,fontSize:11,fontFamily:qt},queryParamsCollapsible:{marginTop:8},queryParamsToggle:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:10,backgroundColor:B.color.surfaceElevated,borderRadius:8,borderWidth:1,borderColor:B.color.border,marginBottom:8},queryParamsToggleText:{flexGrow:0,color:B.color.text,fontSize:12,fontWeight:"600",letterSpacing:.3},timingSection:{marginHorizontal:12,marginTop:8,backgroundColor:B.color.surface,borderRadius:8,borderWidth:1,borderColor:B.color.border,padding:12},timingRow:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},timingLabel:{color:B.color.textSecondary,fontSize:11},timingValue:{color:B.color.text,fontSize:11,fontWeight:"600"},timingExact:{color:B.color.textTertiary,fontSize:10,marginLeft:4},sizeRow:{flexDirection:"row",alignItems:"center",gap:16,marginLeft:"auto"},sizeItem:{flexDirection:"row",alignItems:"center",gap:4},sizeLabel:{color:B.color.textTertiary,fontSize:10},sizeValue:{color:B.color.info,fontSize:10,fontFamily:qt,fontWeight:"600"},phaseDivider:{height:1,backgroundColor:B.color.border,marginTop:12,marginBottom:12},phaseList:{gap:8},phaseRow:{flexDirection:"row",alignItems:"center",gap:14},phaseLabelGroup:{width:150},phaseLabel:{fontSize:12,color:B.color.textSecondary},phaseHint:{fontSize:10,color:B.color.textTertiary},phaseTrack:{flex:1,height:7,borderRadius:4,backgroundColor:B.color.surfaceElevated,justifyContent:"center",overflow:"hidden"},phaseBar:{height:7,borderRadius:4},phaseValue:{width:72,textAlign:"right",fontSize:12,fontFamily:qt,color:B.color.text},collapsibleSection:{marginHorizontal:12,marginTop:8,backgroundColor:B.color.surface,borderRadius:8,borderWidth:1,borderColor:B.color.border,overflow:"hidden"},collapsibleHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",padding:12,backgroundColor:B.color.surfaceElevated},collapsibleTitle:{flexDirection:"row",alignItems:"center",gap:8},collapsibleTitleText:{color:B.color.text,fontSize:13,fontWeight:"600"},collapsibleCount:{color:B.color.textTertiary,fontSize:11.5,fontFamily:qt},collapsibleContent:{padding:12},dataViewerContainer:{marginTop:-12,marginHorizontal:-12,marginBottom:-12},bodyDeferred:{height:120},errorBox:{flexDirection:"row",alignItems:"center",gap:6,backgroundColor:B.color.dangerSoft,padding:8,borderRadius:4,marginTop:8},errorText:{color:B.color.danger,fontSize:11,flex:1},emptyText:{color:B.color.textTertiary,fontSize:12,fontStyle:"italic",textAlign:"center"},filterOptionsContainer:{gap:12},filterOption:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:B.color.surfaceElevated,borderRadius:8,padding:12,borderWidth:1,borderColor:B.color.border},filterOptionActive:{backgroundColor:B.color.warningSoft,borderColor:B.color.warning+"33"},filterOptionLeft:{flexDirection:"row",alignItems:"center",gap:12,flex:1},filterOptionContent:{flex:1},filterOptionLabel:{color:B.color.textSecondary,fontSize:11,marginBottom:2,textTransform:"uppercase",letterSpacing:.5},filterOptionValue:{color:B.color.text,fontSize:13,fontFamily:qt},filterToggle:{paddingHorizontal:10,paddingVertical:6,borderRadius:4,backgroundColor:B.color.bg,borderWidth:1,borderColor:B.color.border},filterToggleActive:{backgroundColor:B.color.warningSoft,borderColor:B.color.warning+"4D"},filterToggleText:{fontSize:10,fontWeight:"600",color:B.color.textTertiary,letterSpacing:.5},filterToggleTextActive:{color:B.color.warning},filterInfoBox:{backgroundColor:B.color.infoSoft,borderRadius:6,padding:10,borderWidth:1,borderColor:B.color.info+"33"},filterInfoText:{color:B.color.textSecondary,fontSize:11,lineHeight:16}});D();ce();import{DynamicFilterView as ni,macOSColors as $e,FileText as ii,FileCode as si,Link as hd,Zap as pd,Settings as fd,Hash as gd,Eye as md,ToolbarCopyButton as yd,formatRelativeTime as bd,useFeatureGate as vd,ProFeatureBanner as Sd,ExportPreview as xd,monoFont as ai}from"@buoy-gg/shared-ui/web";import{DataViewer as wd}from"@buoy-gg/shared-ui/web/dataViewer";import{useCallback as We,useMemo as vt,useState as Cd}from"react";import{Fragment as Td,jsx as He,jsxs as li}from"react/jsx-runtime";var Rd={includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:10,format:"markdown",filterMode:"all"},Qt={urls:{includeMethod:true,includeStatus:false,includeDuration:false,includeTimestamp:false,includeClient:false,includeSizes:false,includeErrors:false,includeRequestHeaders:false,includeResponseHeaders:false,includeRequestBody:false,includeResponseBody:false,bodySizeThreshold:10,format:"plaintext",filterMode:"all"},llm:{includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:10,format:"markdown",filterMode:"all"},json:{includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:-1,format:"json",filterMode:"all"},full:{includeMethod:true,includeStatus:true,includeDuration:true,includeTimestamp:true,includeClient:true,includeSizes:true,includeErrors:true,includeRequestHeaders:true,includeResponseHeaders:true,includeRequestBody:true,includeResponseBody:true,bodySizeThreshold:-1,format:"markdown",filterMode:"all"}};function kd(e){for(let[t,r]of Object.entries(Qt))if(Object.keys(r).every(o=>r[o]===e[o]))return t;return null}var Ed=100*1024,Pd=500*1024;function Id(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Ld({settings:e,onSettingsChange:t,events:r=[]}){let{isPro:o}=vd(),n=vo(),[i,s]=Cd(false),l=r.length>0,a=vt(()=>{if(!l)return null;let h=r.map(c=>typeof c.timestamp=="number"?c.timestamp:new Date(c.timestamp).getTime());return Math.max(...h)},[r,l]),d=vt(()=>kd(e),[e]),b=We(()=>{t(Qt.urls)},[t]),E=We(()=>{t(Qt.llm)},[t]),C=We(()=>{t(Qt.json)},[t]),S=We(()=>{t(Qt.full)},[t]),q=We((h,c)=>{let[u,m]=h.split("::");if(u==="preset"){switch(m){case"urls":b();break;case"llm":E();break;case"json":C();break;case"full":S();break}return}if(u==="requestInfo"){t({...e,[m]:!e[m]});return}if(u==="headers"){t({...e,[m]:!e[m]});return}if(u==="body"){t(m==="bodySizeThreshold"?{...e,bodySizeThreshold:c}:{...e,[m]:!e[m]});return}if(u==="format"){t({...e,format:c});return}u==="filter"&&t({...e,filterMode:c})},[e,t,b,E,C,S]),g=vt(()=>({method:"POST",url:"https://api.example.com/v1/users",status:201,duration:342,timestamp:new Date().toISOString(),requestHeaders:{"Content-Type":"application/json",Authorization:"Bearer ***"},responseHeaders:{"Content-Type":"application/json","X-Request-ID":"abc123"},requestBody:{name:"John Doe",email:"john@example.com"},responseBody:{id:"user_123",name:"John Doe",email:"john@example.com",createdAt:"2025-01-10T12:00:00Z"}}),[]),T=vt(()=>l?r:[g],[l,r,g]),k=vt(()=>{let h=l?r:[g],c=0;for(let u of h){if(e.includeMethod&&(c+=(u.url?.length||0)+10),e.includeStatus&&(c+=30),e.includeTimestamp&&(c+=30),e.includeRequestHeaders)try{c+=JSON.stringify(u.requestHeaders||{}).length}catch{c+=100}if(e.includeRequestBody){let m="requestBody"in u?u.requestBody:u.requestData;try{c+=JSON.stringify(m||{}).length}catch{c+=100}}if(e.includeResponseBody){let m="responseBody"in u?u.responseBody:u.responseData;try{c+=JSON.stringify(m||{}).length}catch{c+=100}}}return c},[l,r,g,e]),f=vt(()=>k>=Pd?"danger":k>=Ed?"warning":"none",[k]),P=We(()=>{let h=l?r:[g],{format:c,includeMethod:u,includeStatus:m,includeTimestamp:O,includeRequestHeaders:re,includeRequestBody:Z,includeResponseBody:ee}=e,G=A=>{let W={};return u&&(W.method=A.method,W.url=A.url),m&&(W.status=A.status,W.duration=A.duration),O&&(W.timestamp=A.timestamp),re&&(W.requestHeaders=A.requestHeaders),Z&&(W.requestBody="requestBody"in A?A.requestBody:A.requestData),ee&&(W.responseBody="responseBody"in A?A.responseBody:A.responseData),W};if(c==="json"){let A=h.map(G);return JSON.stringify(A,null,2)}return c==="markdown"?h.map((A,W)=>{let $=[];$.push(`# Request ${W+1}`),u&&$.push(`
|
|
44
|
+
**${A.method}** ${A.url}`);let ne=[];if(m&&(ne.push(`**Status:** ${A.status}`),ne.push(`**Duration:** ${A.duration}ms`)),O&&ne.push(`**Timestamp:** ${A.timestamp}`),ne.length>0&&$.push(`
|
|
45
45
|
`+ne.join(`
|
|
46
|
-
`)),re){let pe=A.requestHeaders||{}
|
|
46
|
+
`)),re){let pe=A.requestHeaders||{};$.push(`
|
|
47
47
|
## Request Headers
|
|
48
48
|
\`\`\`json
|
|
49
49
|
${JSON.stringify(pe,null,2)}
|
|
50
|
-
\`\`\``)}if(Z){let pe="requestBody"in A?A.requestBody:A.requestData
|
|
50
|
+
\`\`\``)}if(Z){let pe="requestBody"in A?A.requestBody:A.requestData;$.push(`
|
|
51
51
|
## Request Body
|
|
52
52
|
\`\`\`json
|
|
53
53
|
${JSON.stringify(pe||{},null,2)}
|
|
54
|
-
\`\`\``)}if(ee){let pe="responseBody"in A?A.responseBody:A.responseData
|
|
54
|
+
\`\`\``)}if(ee){let pe="responseBody"in A?A.responseBody:A.responseData;$.push(`
|
|
55
55
|
## Response Body
|
|
56
56
|
\`\`\`json
|
|
57
57
|
${JSON.stringify(pe||{},null,2)}
|
|
58
|
-
\`\`\``)}return
|
|
58
|
+
\`\`\``)}return $.join(`
|
|
59
59
|
`)}).join(`
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
63
|
-
`)||"No data included":h.map((A,W)=>{let
|
|
64
|
-
Request:`)
|
|
65
|
-
Response:`)
|
|
63
|
+
`)||"No data included":h.map((A,W)=>{let $=[];if($.push(`Request ${W+1}:`),u&&$.push(`${A.method} ${A.url}`),m&&($.push(`Status: ${A.status}`),$.push(`Duration: ${A.duration}ms`)),O&&$.push(`Timestamp: ${A.timestamp}`),Z){let ne="requestBody"in A?A.requestBody:A.requestData;$.push(`
|
|
64
|
+
Request:`),$.push(JSON.stringify(ne||{},null,2))}if(ee){let ne="responseBody"in A?A.responseBody:A.responseData;$.push(`
|
|
65
|
+
Response:`),$.push(JSON.stringify(ne||{},null,2))}return $.join(`
|
|
66
66
|
`)}).join(`
|
|
67
67
|
|
|
68
68
|
---
|
|
69
69
|
|
|
70
|
-
`)||"No data included"},[l,r,g,e]),z=We(()=>{let h=l?r:[g],{format:c,includeMethod:u,includeStatus:m,includeTimestamp:O,includeRequestHeaders:re,includeRequestBody:Z,includeResponseBody:ee}=e,G=W=>{let
|
|
71
|
-
**${
|
|
70
|
+
`)||"No data included"},[l,r,g,e]),z=We(()=>{let h=l?r:[g],{format:c,includeMethod:u,includeStatus:m,includeTimestamp:O,includeRequestHeaders:re,includeRequestBody:Z,includeResponseBody:ee}=e,G=W=>{let $={};return u&&($.method=W.method,$.url=W.url),m&&($.status=W.status,$.duration=W.duration),O&&($.timestamp=W.timestamp),re&&($.requestHeaders=W.requestHeaders),Z&&($.requestBody="requestBody"in W?W.requestBody:W.requestData),ee&&($.responseBody="responseBody"in W?W.responseBody:W.responseData),$};if(c==="json"){let W=h.map(G);return He(wd,{data:W,title:"",showTypeFilter:false})}if(c==="markdown"){let W=h.map(($,ne)=>{let pe=[];pe.push(`# Request ${ne+1}`),u&&pe.push(`
|
|
71
|
+
**${$.method}** ${$.url}`);let tt=[];if(m&&(tt.push(`**Status:** ${$.status}`),tt.push(`**Duration:** ${$.duration}ms`)),O&&tt.push(`**Timestamp:** ${$.timestamp}`),tt.length>0&&pe.push(`
|
|
72
72
|
`+tt.join(`
|
|
73
|
-
`)),re){let dt
|
|
73
|
+
`)),re){let dt=$.requestHeaders||{};pe.push(`
|
|
74
74
|
## Request Headers
|
|
75
75
|
\`\`\`json
|
|
76
76
|
${JSON.stringify(dt,null,2)}
|
|
77
|
-
\`\`\``)}if(Z){let dt="requestBody"in
|
|
77
|
+
\`\`\``)}if(Z){let dt="requestBody"in $?$.requestBody:$.requestData;pe.push(`
|
|
78
78
|
## Request Body
|
|
79
79
|
\`\`\`json
|
|
80
80
|
${JSON.stringify(dt||{},null,2)}
|
|
81
|
-
\`\`\``)}if(ee){let dt="responseBody"in
|
|
81
|
+
\`\`\``)}if(ee){let dt="responseBody"in $?$.responseBody:$.responseData;pe.push(`
|
|
82
82
|
## Response Body
|
|
83
83
|
\`\`\`json
|
|
84
84
|
${JSON.stringify(dt||{},null,2)}
|
|
@@ -87,18 +87,18 @@ ${JSON.stringify(dt||{},null,2)}
|
|
|
87
87
|
|
|
88
88
|
---
|
|
89
89
|
|
|
90
|
-
`);return He(ut,{style:St.previewScroll,nestedScrollEnabled:true,children:He(y,{style:St.markdownText,selectable:o,children:W||"No data included"})})}let A=h.map((W
|
|
90
|
+
`);return He(ut,{style:St.previewScroll,nestedScrollEnabled:true,children:He(y,{style:St.markdownText,selectable:o,children:W||"No data included"})})}let A=h.map((W,$)=>{let ne=[];if(ne.push(`Request ${$+1}:`),u&&ne.push(`${W.method} ${W.url}`),m&&(ne.push(`Status: ${W.status}`),ne.push(`Duration: ${W.duration}ms`)),O&&ne.push(`Timestamp: ${W.timestamp}`),Z){let pe="requestBody"in W?W.requestBody:W.requestData;ne.push(`
|
|
91
91
|
Request:`),ne.push(JSON.stringify(pe||{},null,2))}if(ee){let pe="responseBody"in W?W.responseBody:W.responseData;ne.push(`
|
|
92
92
|
Response:`),ne.push(JSON.stringify(pe||{},null,2))}return ne.join(`
|
|
93
93
|
`)}).join(`
|
|
94
94
|
|
|
95
95
|
---
|
|
96
96
|
|
|
97
|
-
`);return He(ut,{style:St.previewScroll,nestedScrollEnabled:true,children:He(y,{style:St.plaintextText,selectable:o,children:A||"No data included"})})},[e,l,r,g,o]),
|
|
97
|
+
`);return He(ut,{style:St.previewScroll,nestedScrollEnabled:true,children:He(y,{style:St.plaintextText,selectable:o,children:A||"No data included"})})},[e,l,r,g,o]),I=We(()=>{let h=(l?r:[g]).length;return He(xd,{expanded:i,onExpandedChange:s,summary:`${h} request${h!==1?"s":""} \u2022 ~${Id(k)}`,warningLevel:f,warningText:{warning:"Large payload - preview may be slow",danger:"Very large payload - may cause performance issues"},renderBody:z})},[e,l,r,g,i,k,f,z]),w=We(()=>{let h=l&&a?`Live data \u2022 Updated ${bd(a,n)}`:"Mock data (no events captured)";return li(Td,{children:[He(y,{style:St.statusLabel,children:h}),He(yd,{value:P()})]})},[l,a,n,P]),H=We(()=>I(),[I]),v=vt(()=>({sections:[{id:"presets",title:"Presets",type:"custom",data:[{id:"preset::urls",label:"URLs",icon:hd,color:$e.semantic.info,value:"urls",isActive:d==="urls"},{id:"preset::llm",label:"LLM",icon:pd,color:$e.semantic.success,value:"llm",isActive:d==="llm"},{id:"preset::json",label:"JSON",icon:si,color:$e.semantic.warning,value:"json",isActive:d==="json"},{id:"preset::full",label:"Full",icon:ii,color:$e.semantic.info,value:"full",isActive:d==="full"},{id:"preset::custom",label:"Custom",icon:fd,color:$e.text.secondary,value:"custom",isActive:d===null}]},{id:"include",title:"Include",type:"custom",data:[{id:"requestInfo::includeMethod",label:"URL",value:"includeMethod",isActive:e.includeMethod},{id:"requestInfo::includeStatus",label:"Status",value:"includeStatus",isActive:e.includeStatus},{id:"requestInfo::includeTimestamp",label:"Time",value:"includeTimestamp",isActive:e.includeTimestamp},{id:"headers::includeRequestHeaders",label:"Headers",value:"includeRequestHeaders",isActive:e.includeRequestHeaders},{id:"body::includeRequestBody",label:"Req Body",value:"includeRequestBody",isActive:e.includeRequestBody},{id:"body::includeResponseBody",label:"Res Body",value:"includeResponseBody",isActive:e.includeResponseBody},{id:"requestInfo::includeErrors",label:"Errors",value:"includeErrors",isActive:e.includeErrors}]},{id:"format",title:"Format",type:"custom",data:[{id:"format::markdown",label:"Markdown",icon:ii,color:$e.semantic.info,value:"markdown",isActive:e.format==="markdown"},{id:"format::json",label:"JSON",icon:si,color:$e.semantic.warning,value:"json",isActive:e.format==="json"},{id:"format::plaintext",label:"Text",icon:gd,color:$e.text.secondary,value:"plaintext",isActive:e.format==="plaintext"}]}],previewSection:{enabled:true,title:"PREVIEW",icon:md,content:H,headerActions:w},onFilterChange:q}),[e,q,H,w,d]);return o?He(ni,{...v}):li(p,{style:St.gatedContainer,children:[He(Sd,{featureName:"Network Export",description:"Export network requests to share with your team, debug APIs, or feed into AI tools.",benefits:["Export to JSON, Markdown, or plain text","Customizable copy presets (URLs only, LLM-ready, full data)","Share request details with teammates","Feed network data directly to AI assistants"]}),He(p,{style:St.gatedPreview,children:He(ni,{...v})})]})}var St=fe.create({previewScroll:{maxHeight:300},markdownText:{fontFamily:ai,fontSize:11,color:$e.text.primary,lineHeight:18},plaintextText:{fontFamily:ai,fontSize:11,color:$e.text.primary,lineHeight:18},statusLabel:{fontSize:11,fontWeight:"600",color:$e.text.muted,marginRight:8},gatedContainer:{flex:1,padding:12},gatedPreview:{flex:1}});D();ce();import{Bookmark as di,CheckCircle as Bd,XCircle as qd,Clock as Od,Copy as Dd,Pin as zd,Trash2 as Ad,CopyButton as Hd,macOSColors as nt,night as oe,useLimit as Md,monoFont as ui}from"@buoy-gg/shared-ui/web";D();import{getAccountAccess as ci}from"@buoy-gg/shared-ui/web";import{BaseEventStore as Nd}from"@buoy-gg/shared-ui/web";D();function hi(e){if(!e||typeof e!="object")return null;if("operationName"in e&&e.operationName){let t=e.operationName;if(typeof t=="string"&&t.trim().length>0)return t.trim()}if("query"in e&&typeof e.query=="string"){let t=e.query.match(/(?:query|mutation|subscription)\s+(\w+)/);if(t&&t[1])return t[1]}return null}D();import{devToolsStorageKeys as pi,persistentStorage as fi}from"@buoy-gg/shared-ui/web";import{TIER_LIMITS as $d}from"@buoy-gg/shared-ui/web";var To=`${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,Ir=25,it=50,gi=$d["network.saved"].free,st=16*1024,mi=512*1024;function yi(e){if(!e||typeof e!="object")return false;let t=e;return typeof t.id=="string"&&typeof t.url=="string"}var Fd=800;function Lr(e,t){if(!t)return{pinned:false,saved:false};let r=e.pinnedLiveIds.has(t),o=e.savedLiveIds.has(t);if(r||o)return{pinned:r,saved:o};let n=e.records.find(i=>i.event.id===t);return n?{pinned:n.pinned,saved:n.saved}:{pinned:false,saved:false}}var jd={records:[],pinnedEvents:[],savedRecords:[],pinnedLiveIds:new Set,savedLiveIds:new Set};function bi(e){if(e==null)return{value:e,truncated:false};if(typeof e=="string")return e.length<=st?{value:e,truncated:false}:{value:`${e.slice(0,st)}
|
|
98
98
|
|
|
99
99
|
\u2026 truncated by Buoy (body exceeded ${st} bytes)`,truncated:true};try{let t=JSON.stringify(e);return t===void 0?{value:void 0,truncated:false}:t.length<=st?{value:e,truncated:false}:{value:`${t.slice(0,st)}
|
|
100
100
|
|
|
101
|
-
\u2026 truncated by Buoy (body exceeded ${st} bytes)`,truncated:true}}catch{return{value:"[unserializable body]",truncated:true}}}function bi(e){let t=yi(e.requestData),r=yi(e.responseData);return!t.truncated&&!r.truncated?{event:{...e},bodyTruncated:false}:{event:{...e,requestData:t.value,responseData:r.value},bodyTruncated:true}}function vi(e){let t=0;return e.requestData!=null&&(t+=Math.min(e.requestSize??0,st)),e.responseData!=null&&(t+=Math.min(e.responseSize??0,st)),t}function jd(e){let t=0;for(let i of e)t+=vi(i.event);if(t<=gi)return e;let r=[...e].sort((i,s)=>i.pinned!==s.pinned?i.pinned?-1:1:s.savedAt-i.savedAt),o=new Set,n=0;for(let i of r){let s=vi(i.event);n+s<=gi?n+=s:o.add(i.key)}return o.size===0?e:e.map(i=>o.has(i.key)?{...i,event:{...i.event,requestData:void 0,responseData:void 0},bodyTruncated:true}:i)}function Wd(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let o=r;typeof o.key=="string"&&mi(o.event)&&(!o.pinned&&!o.saved||t.push({key:o.key,event:{...o.event,id:`saved:${o.key}`},pinned:!!o.pinned,saved:!!o.saved,savedAt:typeof o.savedAt=="number"?o.savedAt:0,sessionId:typeof o.sessionId=="string"?o.sessionId:"unknown",liveId:typeof o.liveId=="string"?o.liveId:"",bodyTruncated:!!o.bodyTruncated}))}return t}var Vd=class{constructor(){this.records=[];this.listeners=new Set;this.loaded=false;this.loadPromise=null;this.dirty=false;this.keyCounter=0;this.trackedLiveIds=new Set;this.state=$d;this.remote=null;this.remoteEchoUntil=0}getState(){return this.state}enableRemoteMode(e){this.remote=e}disableRemoteMode(){this.remote=null}replaceRecords(e,t=false){this.remote&&(!t&&Date.now()<this.remoteEchoUntil||(this.records=e,this.rebuild(),this.emit()))}sessionMatches(e){return this.remote!==null||e.sessionId===To}getRecords(){return this.records}subscribe(e){return this.listeners.add(e),this.ensureLoaded(),()=>{this.listeners.delete(e)}}getEventById(e){for(let t of this.records)if(t.event.id===e)return t.event;return null}isPinned(e){return this.state.pinnedLiveIds.has(e)}isSaved(e){return this.state.savedLiveIds.has(e)}syncFromLive(e){if(this.trackedLiveIds.size===0||!this.trackedLiveIds.has(e.id))return;let t=this.records.findIndex(o=>this.sessionMatches(o)&&o.liveId===e.id);if(t===-1)return;let r=bi(e);this.commit(this.records.map((o,n)=>n===t?{...o,event:r.event,bodyTruncated:r.bodyTruncated}:o))}togglePin(e){return this.setFlag(e,"pinned")}toggleSave(e){return this.setFlag(e,"saved")}remove(e){this.records.some(t=>t.key===e)&&(this.remote?.removeRecord(e),this.commit(this.records.filter(t=>t.key!==e)))}clearSaved(){this.records.some(e=>e.saved)&&(this.remote?.clearSaved(),this.commit(this.records.filter(e=>e.pinned).map(e=>({...e,saved:false}))))}clearPinned(){this.records.some(e=>e.pinned)&&(this.remote?.clearPinned(),this.commit(this.records.filter(e=>e.saved).map(e=>({...e,pinned:false}))))}setFlag(e,t){if(!mi(e))return{ok:false,reason:"invalid-event"};let r=this.findRecordFor(e);if(this.remote){let s=r?!r[t]:true;t==="pinned"?this.remote.setPinned(e.id,s):this.remote.setSaved(e.id,s),this.remoteEchoUntil=Date.now()+Fd}if(r){let s=!r[t];if(s&&!this.hasRoomFor(t,r.key))return{ok:false,reason:t==="pinned"?"pin-cap":"saved-cap"};let l={...r,[t]:s};return this.commit(l.pinned||l.saved?this.records.map(a=>a.key===r.key?l:a):this.records.filter(a=>a.key!==r.key)),{ok:true,active:s}}if(!this.hasRoomFor(t,null))return{ok:false,reason:t==="pinned"?"pin-cap":"saved-cap"};let o=Date.now(),n=bi(e),i={key:`${To}_${++this.keyCounter}`,event:n.event,pinned:t==="pinned",saved:t==="saved",savedAt:o,sessionId:To,liveId:e.id,bodyTruncated:n.bodyTruncated};return this.commit(this.evictIfNeeded([i,...this.records])),{ok:true,active:true}}findRecordFor(e){return this.records.find(t=>t.event.id===e.id||this.sessionMatches(t)&&t.liveId===e.id)}hasRoomFor(e,t){let r=e==="pinned"?Lr:it;return this.records.filter(o=>o[e]&&o.key!==t).length<r}evictIfNeeded(e){let t=e.filter(n=>n.saved);if(t.length<=it)return e;let r=t.filter(n=>!n.pinned).sort((n,i)=>n.savedAt-i.savedAt).slice(0,t.length-it);if(r.length===0)return e;let o=new Set(r.map(n=>n.key));return e.filter(n=>!o.has(n.key))}ensureLoaded(){return this.remote||this.loaded?Promise.resolve():this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{try{let e=await pi.getItem(hi.network.saved());e&&!this.dirty&&(this.records=Wd(JSON.parse(e)),this.rebuild())}catch{}finally{this.loaded=true,this.emit()}})(),this.loadPromise)}persist(){this.remote||pi.setItem(hi.network.saved(),JSON.stringify(this.records)).catch(()=>{})}commit(e){this.dirty=true,this.records=jd(e),this.rebuild(),this.emit(),this.persist()}rebuild(){let e=[],t=[],r=new Set,o=new Set,n=new Set;for(let i of this.records)i.pinned&&e.push(i),i.saved&&t.push(i),!(!this.sessionMatches(i)||!i.liveId)&&(n.add(i.liveId),i.pinned&&r.add(i.liveId),i.saved&&o.add(i.liveId));this.trackedLiveIds=n,this.state={records:this.records,pinnedEvents:e.map(i=>i.event),savedRecords:t,pinnedLiveIds:r,savedLiveIds:o}}emit(){this.listeners.forEach(e=>e())}},ae=new Vd;var Ud=200,_d=class extends Md{constructor(){super({storeName:"network",maxEvents:500});this.pendingRequests=new Map;this.rawListenerUnsubscribe=null;this.bootBuffer=[];this.bootBufferUnsubscribe=null;this.mirrorMode=false}startBootCapture(){if(ui().status==="locked"||this.mirrorMode||this.bootBufferUnsubscribe||this.isCapturing())return;let e=yr();e.isActive||e.startListening(),this.bootBufferUnsubscribe=Jt(t=>{this.bootBuffer.push(t),this.bootBuffer.length>Ud&&this.bootBuffer.shift()})}takeBootBuffer(){this.bootBufferUnsubscribe&&(this.bootBufferUnsubscribe(),this.bootBufferUnsubscribe=null);let e=this.bootBuffer;return this.bootBuffer=[],e}startCapturing(){let e=yr();e.isActive||e.startListening();for(let t of this.takeBootBuffer())this.processNetworkEvent(t);this.rawListenerUnsubscribe||(this.rawListenerUnsubscribe=Jt(t=>{this.processNetworkEvent(t)})),e.adoptEarlyRequests()}stopCapturing(){this.takeBootBuffer(),this.rawListenerUnsubscribe&&(this.rawListenerUnsubscribe(),this.rawListenerUnsubscribe=null),pt()===0&&Xt()}disableCapture(){this.mirrorMode=true,this.takeBootBuffer(),pt()===0&&Xt(),super.disableCapture()}isCapturing(){return this.rawListenerUnsubscribe!==null}ensureInterception(){this.isCapturing()&&yr().startListening()}subscribeToEvents(e){let t=super.subscribeToEvents(e);return this.ensureInterception(),t}processNetworkEvent(e){if(ui().status==="locked")return;let{request:t}=e;if(e.type==="request"){if(this.events.some(l=>l.id===t.id))return;let r=t.params?`?${new URLSearchParams(t.params).toString()}`:"",o=`${t.url}${r}`,n,i;t.client==="graphql"&&(n=ci(t.data)||void 0,t.data&&typeof t.data=="object"&&"variables"in t.data&&t.data.variables&&typeof t.data.variables=="object"&&(i=t.data.variables));let s={id:t.id,method:t.method,url:o,host:this.extractHost(t.url),path:this.extractPath(t.url),query:r,timestamp:e.timestamp.getTime(),requestHeaders:t.headers||{},requestData:t.data,requestSize:this.getDataSize(t.data),responseHeaders:{},requestClient:t.client,operationName:n,graphqlVariables:i,override:e.override,condition:e.condition};this.pendingRequests.set(t.id,s),this.events=[s,...this.events].slice(0,this.maxEvents),this.notify(s),this.notifyArrayListeners()}else if(e.type==="request-body"){let r=this.events.find(n=>n.id===t.id);if(!r)return;let o={...r,requestData:t.data,requestSize:this.getDataSize(t.data)};if(t.client==="graphql"){o.operationName=ci(t.data)||void 0;let n=t.data?.variables;n&&typeof n=="object"&&(o.graphqlVariables=n)}this.events=this.events.map(n=>n.id===t.id?o:n),this.pendingRequests.has(t.id)&&this.pendingRequests.set(t.id,o),ae.syncFromLive(o),this.notify(o),this.notifyArrayListeners()}else if(e.type==="response"||e.type==="error"){let r=this.events.findIndex(o=>o.id===t.id);if(r!==-1){let o={...this.events[r],duration:e.duration,timings:e.timings};e.response&&(o.status=e.response.status,o.statusText=e.response.statusText,o.responseHeaders=e.response.headers||{},o.responseData=e.response.body,o.responseSize=e.response.size||0,o.responseType=e.response.headers?.["content-type"]),e.error&&(o.error=e.error.message,o.status=o.status||0),e.override&&(o.override=e.override),this.events=this.events.map((n,i)=>i===r?o:n),this.pendingRequests.delete(t.id),ae.syncFromLive(o),this.notify(o),this.notifyArrayListeners()}}}extractHost(e){try{return new URL(e).hostname}catch{return""}}extractPath(e){try{return new URL(e).pathname}catch{return e}}getDataSize(e){if(!e)return 0;if(typeof e=="string")return e.length;try{return JSON.stringify(e).length}catch{return 0}}getEventById(e){return this.events.find(t=>t.id===e)}clearEvents(){super.clearEvents(),this.pendingRequests.clear()}onEvent(e,t=true){let r=this.subscribe(e);if(t&&this.events.length>0){let o=[...this.events].reverse();for(let n of o)try{e(n)}catch{}}return r}getStats(){let e=this.events.length,t=this.events.filter(a=>a.status&&a.status>=200&&a.status<300).length,r=this.events.filter(a=>a.error||a.status&&a.status>=400).length,o=this.events.filter(a=>!a.status&&!a.error).length,n=this.events.filter(a=>a.duration).map(a=>a.duration),i=n.length>0?n.reduce((a,d)=>a+d,0)/n.length:0,s=this.events.reduce((a,d)=>a+(d.requestSize||0),0),l=this.events.reduce((a,d)=>a+(d.responseSize||0),0);return{totalRequests:e,successfulRequests:t,failedRequests:r,pendingRequests:o,totalDataSent:s,totalDataReceived:l,averageDuration:Math.round(i)}}filterEvents(e){let t=[...this.events];if(e.method&&(t=t.filter(r=>r.method===e.method)),e.status)switch(e.status){case"success":t=t.filter(r=>r.status&&r.status>=200&&r.status<300);break;case"error":t=t.filter(r=>r.error||r.status&&r.status>=400);break;case"pending":t=t.filter(r=>!r.status&&!r.error);break}if(e.searchText){let r=e.searchText.toLowerCase();t=t.filter(o=>o.url.toLowerCase().includes(r)||o.method.toLowerCase().includes(r)||o.error&&o.error.toLowerCase().includes(r))}return e.host&&(t=t.filter(r=>r.host===e.host)),t}},K=new _d;D();import{useEffect as Xd,useState as Jd}from"react";var Gd=e=>ae.togglePin(e),Kd=e=>ae.toggleSave(e),Yd=e=>ae.remove(e),Zd=()=>ae.clearSaved(),Qd=()=>ae.clearPinned();function Ot(){let[e,t]=Jd(()=>ae.getState());return Xd(()=>ae.subscribe(()=>{t(ae.getState())}),[]),{...e,togglePin:Gd,toggleSave:Kd,remove:Yd,clearSaved:Zd,clearPinned:Qd}}D();import{useSyncExternalStore as er}from"react";D();var eu=120,tu=class{constructor(){this.ids=[];this.index=-1;this.selectedId=null;this.bodyId=null;this.renderedId=null;this.settleMs=120;this.settleTimer=null;this.subscribers=new Set;this.snapshot=this.buildSnapshot()}buildSnapshot(){return{ids:this.ids,index:this.index,selectedId:this.selectedId,bodyId:this.bodyId,renderedId:this.renderedId}}emit(){this.snapshot=this.buildSnapshot();for(let e of this.subscribers)e(this.snapshot)}getState(){return this.snapshot}subscribe(e){return this.subscribers.add(e),()=>{this.subscribers.delete(e)}}setIds(e){e.length===this.ids.length&&e.every((t,r)=>t===this.ids[r])||(this.ids=e,this.index=this.selectedId==null?-1:e.indexOf(this.selectedId),this.emit())}select(e){e!==this.selectedId&&(this.selectedId=e,this.index=e==null?-1:this.ids.indexOf(e),this.scheduleBody(e),this.emit())}clear(){this.select(null)}step(e){if(this.index<0)return null;let t=this.index+e;if(t<0||t>=this.ids.length)return null;let r=this.ids[t];return this.selectedId=r,this.index=t,this.scheduleBody(r),this.emit(),r}scheduleBody(e){if(this.settleTimer!=null&&(clearTimeout(this.settleTimer),this.settleTimer=null),e==null||this.bodyId==null||this.settleMs<=0){this.bodyId=e;return}this.settleTimer=setTimeout(()=>{this.settleTimer=null,this.bodyId!==this.selectedId&&(this.bodyId=this.selectedId,this.emit())},this.settleMs)}setSettleMs(e){this.settleMs=Math.max(0,e)}getSettleMs(){return this.settleMs}reportRendered(e){e!==this.renderedId&&(this.renderedId=e,this.emit())}reset(){this.settleTimer!=null&&clearTimeout(this.settleTimer),this.settleTimer=null,this.ids=[],this.index=-1,this.selectedId=null,this.bodyId=null,this.renderedId=null,this.emit()}},Ve=new tu;function ru(e){return e.map(t=>t.id)}var tr=e=>Ve.subscribe(e),Ue=()=>Ve.getState();function ou(){return er(tr,()=>Ue().selectedId!=null,()=>Ue().selectedId!=null)}function Ro(){return er(tr,()=>Ue().selectedId,()=>Ue().selectedId)}function nu(){return er(tr,()=>Ue().bodyId,()=>Ue().bodyId)}function iu(){let e=er(tr,()=>Ue().index,()=>Ue().index),t=er(tr,()=>Ue().ids.length,()=>Ue().ids.length);return{index:e,total:t}}D();import{useEffect as Si,useState as su}from"react";D();import{urlMatchesIgnoredPattern as au}from"@buoy-gg/shared-ui/web";function rr(e,t){let r=t.searchText?t.searchText.toLowerCase():null,o=t.method&&t.method.length>0?new Set(t.method):null,n=t.contentType&&t.contentType.length>0?new Set(t.contentType):null,i=[...e];if(o&&(i=i.filter(s=>o.has(s.method))),t.status&&t.status!=="all")switch(t.status){case"success":i=i.filter(s=>s.status&&s.status>=200&&s.status<300);break;case"error":i=i.filter(s=>s.error||s.status&&s.status>=400);break;case"pending":i=i.filter(s=>!s.status&&!s.error);break}return r&&(i=i.filter(s=>s.url.toLowerCase().includes(r)||s.method.toLowerCase().includes(r)||s.path?.toLowerCase().includes(r)||s.host?.toLowerCase().includes(r)||s.error&&s.error.toLowerCase().includes(r)||s.operationName&&s.operationName.toLowerCase().includes(r)||Qn(s.graphqlVariables,r))),t.host&&(i=i.filter(s=>s.host===t.host)),n&&(i=i.filter(s=>{let l=s.responseHeaders||s.requestHeaders,a=l?.["content-type"]||l?.["Content-Type"]||"";for(let d of n)switch(d){case"JSON":if(a.includes("json"))return true;break;case"XML":if(a.includes("xml"))return true;break;case"HTML":if(a.includes("html"))return true;break;case"TEXT":if(a.includes("text"))return true;break;case"IMAGE":if(a.includes("image"))return true;break;case"VIDEO":if(a.includes("video"))return true;break;case"AUDIO":if(a.includes("audio"))return true;break;case"FORM":if(a.includes("form"))return true;break;case"OTHER":if(!a||!a.includes("json")&&!a.includes("xml")&&!a.includes("html")&&!a.includes("text")&&!a.includes("image")&&!a.includes("video")&&!a.includes("audio")&&!a.includes("form"))return true;break}return false})),i}function or(e,t){return t.length===0?e:e.filter(r=>!t.some(o=>au(r.url,o)))}function xi(e,t){let r=0,o=0,n=0;for(let i of or(e,t))i.status&&i.status>=200&&i.status<300?r++:i.error||i.status&&i.status>=400?o++:!i.status&&!i.error&&n++;return{successful:r,failed:o,pending:n,total:e.length}}function lu(e,t){return e.successful===t.successful&&e.failed===t.failed&&e.pending===t.pending&&e.total===t.total}function wi(e){let{ignoredPatterns:t,paused:r}=e,[o,n]=su(()=>xi(K.getEvents(),t));return Si(()=>{if(r)return;let i=null,s=null,l=K.subscribeToEvents(a=>{s=a,i==null&&(i=requestAnimationFrame(()=>{if(i=null,!s)return;let d=xi(s,t);s=null,n(b=>lu(b,d)?b:d)}))});return()=>{l(),i!=null&&cancelAnimationFrame(i)}},[r,t]),Si(()=>K.onClear(()=>{n({successful:0,failed:0,pending:0,total:0})}),[]),o}D();import{useEffect as Br,useState as Ci}from"react";function du(e){let{paused:t}=e,[r,o]=Ci(()=>K.getEvents().length>0);return Br(()=>{if(!t)return K.subscribeToEvents(n=>{let i=n.length>0;o(s=>s===i?s:i)})},[t]),Br(()=>K.onClear(()=>o(false)),[]),r}function uu(e){let{filter:t,ignoredPatterns:r,paused:o}=e,[n,i]=Ci(()=>rr(or(K.getEvents(),r),t).length>0);return Br(()=>{if(!o)return K.subscribeToEvents(s=>{let l=rr(or(s,r),t).length>0;i(a=>a===l?a:l)})},[o,t,r]),Br(()=>K.onClear(()=>i(false)),[]),n}D();function qr(e){if(e==null)return"N/A";if(e===0)return"0 B";let t=1024,r=["B","KB","MB","GB","TB"],o=Math.floor(Math.log(e)/Math.log(t));return`${(e/Math.pow(t,o)).toFixed(1)} ${r[o]}`}function Or(e,t){if(t===-1||!e)return true;try{return JSON.stringify(e).length<t*1024}catch{return false}}function Ti(e,t){let r=e;if(t.filterMode==="failed"?r=r.filter(n=>n.error||n.status&&n.status>=400):t.filterMode==="success"&&(r=r.filter(n=>n.status&&n.status>=200&&n.status<300)),r.length===0)return"No requests to copy";if(t.format==="plaintext")return r.map(n=>`${n.method} ${n.url}`).join(`
|
|
101
|
+
\u2026 truncated by Buoy (body exceeded ${st} bytes)`,truncated:true}}catch{return{value:"[unserializable body]",truncated:true}}}function vi(e){let t=bi(e.requestData),r=bi(e.responseData);return!t.truncated&&!r.truncated?{event:{...e},bodyTruncated:false}:{event:{...e,requestData:t.value,responseData:r.value},bodyTruncated:true}}function Si(e){let t=0;return e.requestData!=null&&(t+=Math.min(e.requestSize??0,st)),e.responseData!=null&&(t+=Math.min(e.responseSize??0,st)),t}function Wd(e){let t=0;for(let i of e)t+=Si(i.event);if(t<=mi)return e;let r=[...e].sort((i,s)=>i.pinned!==s.pinned?i.pinned?-1:1:s.savedAt-i.savedAt),o=new Set,n=0;for(let i of r){let s=Si(i.event);n+s<=mi?n+=s:o.add(i.key)}return o.size===0?e:e.map(i=>o.has(i.key)?{...i,event:{...i.event,requestData:void 0,responseData:void 0},bodyTruncated:true}:i)}function Vd(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let o=r;typeof o.key=="string"&&yi(o.event)&&(!o.pinned&&!o.saved||t.push({key:o.key,event:{...o.event,id:`saved:${o.key}`},pinned:!!o.pinned,saved:!!o.saved,savedAt:typeof o.savedAt=="number"?o.savedAt:0,sessionId:typeof o.sessionId=="string"?o.sessionId:"unknown",liveId:typeof o.liveId=="string"?o.liveId:"",bodyTruncated:!!o.bodyTruncated}))}return t}var Ud=class{constructor(){this.records=[];this.listeners=new Set;this.loaded=false;this.loadPromise=null;this.dirty=false;this.keyCounter=0;this.trackedLiveIds=new Set;this.state=jd;this.remote=null;this.remoteEchoUntil=0}getState(){return this.state}enableRemoteMode(e){this.remote=e}disableRemoteMode(){this.remote=null}replaceRecords(e,t=false){this.remote&&(!t&&Date.now()<this.remoteEchoUntil||(this.records=e,this.rebuild(),this.emit()))}sessionMatches(e){return this.remote!==null||e.sessionId===To}getRecords(){return this.records}subscribe(e){return this.listeners.add(e),this.ensureLoaded(),()=>{this.listeners.delete(e)}}getEventById(e){for(let t of this.records)if(t.event.id===e)return t.event;return null}isPinned(e){return this.state.pinnedLiveIds.has(e)}isSaved(e){return this.state.savedLiveIds.has(e)}syncFromLive(e){if(this.trackedLiveIds.size===0||!this.trackedLiveIds.has(e.id))return;let t=this.records.findIndex(o=>this.sessionMatches(o)&&o.liveId===e.id);if(t===-1)return;let r=vi(e);this.commit(this.records.map((o,n)=>n===t?{...o,event:r.event,bodyTruncated:r.bodyTruncated}:o))}togglePin(e){return this.setFlag(e,"pinned")}toggleSave(e){return this.setFlag(e,"saved")}remove(e){this.records.some(t=>t.key===e)&&(this.remote?.removeRecord(e),this.commit(this.records.filter(t=>t.key!==e)))}clearSaved(){this.records.some(e=>e.saved)&&(this.remote?.clearSaved(),this.commit(this.records.filter(e=>e.pinned).map(e=>({...e,saved:false}))))}clearPinned(){this.records.some(e=>e.pinned)&&(this.remote?.clearPinned(),this.commit(this.records.filter(e=>e.saved).map(e=>({...e,pinned:false}))))}setFlag(e,t){if(!yi(e))return{ok:false,reason:"invalid-event"};let r=this.findRecordFor(e);if(this.remote){let s=r?!r[t]:true;t==="pinned"?this.remote.setPinned(e.id,s):this.remote.setSaved(e.id,s),this.remoteEchoUntil=Date.now()+Fd}if(r){let s=!r[t];if(s&&!this.hasRoomFor(t,r.key))return{ok:false,reason:t==="pinned"?"pin-cap":"saved-cap"};let l={...r,[t]:s};return this.commit(l.pinned||l.saved?this.records.map(a=>a.key===r.key?l:a):this.records.filter(a=>a.key!==r.key)),{ok:true,active:s}}if(!this.hasRoomFor(t,null))return{ok:false,reason:t==="pinned"?"pin-cap":"saved-cap"};let o=Date.now(),n=vi(e),i={key:`${To}_${++this.keyCounter}`,event:n.event,pinned:t==="pinned",saved:t==="saved",savedAt:o,sessionId:To,liveId:e.id,bodyTruncated:n.bodyTruncated};return this.commit(this.evictIfNeeded([i,...this.records])),{ok:true,active:true}}findRecordFor(e){return this.records.find(t=>t.event.id===e.id||this.sessionMatches(t)&&t.liveId===e.id)}hasRoomFor(e,t){let r=e==="pinned"?Ir:it;return this.records.filter(o=>o[e]&&o.key!==t).length<r}evictIfNeeded(e){let t=e.filter(n=>n.saved);if(t.length<=it)return e;let r=t.filter(n=>!n.pinned).sort((n,i)=>n.savedAt-i.savedAt).slice(0,t.length-it);if(r.length===0)return e;let o=new Set(r.map(n=>n.key));return e.filter(n=>!o.has(n.key))}ensureLoaded(){return this.remote||this.loaded?Promise.resolve():this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{try{let e=await fi.getItem(pi.network.saved());e&&!this.dirty&&(this.records=Vd(JSON.parse(e)),this.rebuild())}catch{}finally{this.loaded=true,this.emit()}})(),this.loadPromise)}persist(){this.remote||fi.setItem(pi.network.saved(),JSON.stringify(this.records)).catch(()=>{})}commit(e){this.dirty=true,this.records=Wd(e),this.rebuild(),this.emit(),this.persist()}rebuild(){let e=[],t=[],r=new Set,o=new Set,n=new Set;for(let i of this.records)i.pinned&&e.push(i),i.saved&&t.push(i),!(!this.sessionMatches(i)||!i.liveId)&&(n.add(i.liveId),i.pinned&&r.add(i.liveId),i.saved&&o.add(i.liveId));this.trackedLiveIds=n,this.state={records:this.records,pinnedEvents:e.map(i=>i.event),savedRecords:t,pinnedLiveIds:r,savedLiveIds:o}}emit(){this.listeners.forEach(e=>e())}},ae=new Ud;var _d=200,Xd=class extends Nd{constructor(){super({storeName:"network",maxEvents:500});this.pendingRequests=new Map;this.rawListenerUnsubscribe=null;this.bootBuffer=[];this.bootBufferUnsubscribe=null;this.mirrorMode=false}startBootCapture(){if(ci().status==="locked"||this.mirrorMode||this.bootBufferUnsubscribe||this.isCapturing())return;let e=yr();e.isActive||e.startListening(),this.bootBufferUnsubscribe=Jt(t=>{this.bootBuffer.push(t),this.bootBuffer.length>_d&&this.bootBuffer.shift()})}takeBootBuffer(){this.bootBufferUnsubscribe&&(this.bootBufferUnsubscribe(),this.bootBufferUnsubscribe=null);let e=this.bootBuffer;return this.bootBuffer=[],e}startCapturing(){let e=yr();e.isActive||e.startListening();for(let t of this.takeBootBuffer())this.processNetworkEvent(t);this.rawListenerUnsubscribe||(this.rawListenerUnsubscribe=Jt(t=>{this.processNetworkEvent(t)})),e.adoptEarlyRequests()}stopCapturing(){this.takeBootBuffer(),this.rawListenerUnsubscribe&&(this.rawListenerUnsubscribe(),this.rawListenerUnsubscribe=null),pt()===0&&Xt()}disableCapture(){this.mirrorMode=true,this.takeBootBuffer(),pt()===0&&Xt(),super.disableCapture()}isCapturing(){return this.rawListenerUnsubscribe!==null}ensureInterception(){this.isCapturing()&&yr().startListening()}subscribeToEvents(e){let t=super.subscribeToEvents(e);return this.ensureInterception(),t}processNetworkEvent(e){if(ci().status==="locked")return;let{request:t}=e;if(e.type==="request"){if(this.events.some(l=>l.id===t.id))return;let r=t.params?`?${new URLSearchParams(t.params).toString()}`:"",o=`${t.url}${r}`,n,i;t.client==="graphql"&&(n=hi(t.data)||void 0,t.data&&typeof t.data=="object"&&"variables"in t.data&&t.data.variables&&typeof t.data.variables=="object"&&(i=t.data.variables));let s={id:t.id,method:t.method,url:o,host:this.extractHost(t.url),path:this.extractPath(t.url),query:r,timestamp:e.timestamp.getTime(),requestHeaders:t.headers||{},requestData:t.data,requestSize:this.getDataSize(t.data),responseHeaders:{},requestClient:t.client,operationName:n,graphqlVariables:i,override:e.override,condition:e.condition};this.pendingRequests.set(t.id,s),this.events=[s,...this.events].slice(0,this.maxEvents),this.notify(s),this.notifyArrayListeners()}else if(e.type==="request-body"){let r=this.events.find(n=>n.id===t.id);if(!r)return;let o={...r,requestData:t.data,requestSize:this.getDataSize(t.data)};if(t.client==="graphql"){o.operationName=hi(t.data)||void 0;let n=t.data?.variables;n&&typeof n=="object"&&(o.graphqlVariables=n)}this.events=this.events.map(n=>n.id===t.id?o:n),this.pendingRequests.has(t.id)&&this.pendingRequests.set(t.id,o),ae.syncFromLive(o),this.notify(o),this.notifyArrayListeners()}else if(e.type==="response"||e.type==="error"){let r=this.events.findIndex(o=>o.id===t.id);if(r!==-1){let o={...this.events[r],duration:e.duration,timings:e.timings};e.response&&(o.status=e.response.status,o.statusText=e.response.statusText,o.responseHeaders=e.response.headers||{},o.responseData=e.response.body,o.responseSize=e.response.size||0,o.responseType=e.response.headers?.["content-type"]),e.error&&(o.error=e.error.message,o.status=o.status||0),e.override&&(o.override=e.override),this.events=this.events.map((n,i)=>i===r?o:n),this.pendingRequests.delete(t.id),ae.syncFromLive(o),this.notify(o),this.notifyArrayListeners()}}}extractHost(e){try{return new URL(e).hostname}catch{return""}}extractPath(e){try{return new URL(e).pathname}catch{return e}}getDataSize(e){if(!e)return 0;if(typeof e=="string")return e.length;try{return JSON.stringify(e).length}catch{return 0}}getEventById(e){return this.events.find(t=>t.id===e)}clearEvents(){super.clearEvents(),this.pendingRequests.clear()}onEvent(e,t=true){let r=this.subscribe(e);if(t&&this.events.length>0){let o=[...this.events].reverse();for(let n of o)try{e(n)}catch{}}return r}getStats(){let e=this.events.length,t=this.events.filter(a=>a.status&&a.status>=200&&a.status<300).length,r=this.events.filter(a=>a.error||a.status&&a.status>=400).length,o=this.events.filter(a=>!a.status&&!a.error).length,n=this.events.filter(a=>a.duration).map(a=>a.duration),i=n.length>0?n.reduce((a,d)=>a+d,0)/n.length:0,s=this.events.reduce((a,d)=>a+(d.requestSize||0),0),l=this.events.reduce((a,d)=>a+(d.responseSize||0),0);return{totalRequests:e,successfulRequests:t,failedRequests:r,pendingRequests:o,totalDataSent:s,totalDataReceived:l,averageDuration:Math.round(i)}}filterEvents(e){let t=[...this.events];if(e.method&&(t=t.filter(r=>r.method===e.method)),e.status)switch(e.status){case"success":t=t.filter(r=>r.status&&r.status>=200&&r.status<300);break;case"error":t=t.filter(r=>r.error||r.status&&r.status>=400);break;case"pending":t=t.filter(r=>!r.status&&!r.error);break}if(e.searchText){let r=e.searchText.toLowerCase();t=t.filter(o=>o.url.toLowerCase().includes(r)||o.method.toLowerCase().includes(r)||o.error&&o.error.toLowerCase().includes(r))}return e.host&&(t=t.filter(r=>r.host===e.host)),t}},K=new Xd;D();import{useEffect as Jd,useState as Gd}from"react";var Kd=e=>ae.togglePin(e),Yd=e=>ae.toggleSave(e),Zd=e=>ae.remove(e),Qd=()=>ae.clearSaved(),eu=()=>ae.clearPinned();function Ot(){let[e,t]=Gd(()=>ae.getState());return Jd(()=>ae.subscribe(()=>{t(ae.getState())}),[]),{...e,togglePin:Kd,toggleSave:Yd,remove:Zd,clearSaved:Qd,clearPinned:eu}}D();import{useSyncExternalStore as er}from"react";D();var tu=120,ru=class{constructor(){this.ids=[];this.index=-1;this.selectedId=null;this.bodyId=null;this.renderedId=null;this.settleMs=120;this.settleTimer=null;this.subscribers=new Set;this.snapshot=this.buildSnapshot()}buildSnapshot(){return{ids:this.ids,index:this.index,selectedId:this.selectedId,bodyId:this.bodyId,renderedId:this.renderedId}}emit(){this.snapshot=this.buildSnapshot();for(let e of this.subscribers)e(this.snapshot)}getState(){return this.snapshot}subscribe(e){return this.subscribers.add(e),()=>{this.subscribers.delete(e)}}setIds(e){e.length===this.ids.length&&e.every((t,r)=>t===this.ids[r])||(this.ids=e,this.index=this.selectedId==null?-1:e.indexOf(this.selectedId),this.emit())}select(e){e!==this.selectedId&&(this.selectedId=e,this.index=e==null?-1:this.ids.indexOf(e),this.scheduleBody(e),this.emit())}clear(){this.select(null)}step(e){if(this.index<0)return null;let t=this.index+e;if(t<0||t>=this.ids.length)return null;let r=this.ids[t];return this.selectedId=r,this.index=t,this.scheduleBody(r),this.emit(),r}scheduleBody(e){if(this.settleTimer!=null&&(clearTimeout(this.settleTimer),this.settleTimer=null),e==null||this.bodyId==null||this.settleMs<=0){this.bodyId=e;return}this.settleTimer=setTimeout(()=>{this.settleTimer=null,this.bodyId!==this.selectedId&&(this.bodyId=this.selectedId,this.emit())},this.settleMs)}setSettleMs(e){this.settleMs=Math.max(0,e)}getSettleMs(){return this.settleMs}reportRendered(e){e!==this.renderedId&&(this.renderedId=e,this.emit())}reset(){this.settleTimer!=null&&clearTimeout(this.settleTimer),this.settleTimer=null,this.ids=[],this.index=-1,this.selectedId=null,this.bodyId=null,this.renderedId=null,this.emit()}},Ve=new ru;function ou(e){return e.map(t=>t.id)}var tr=e=>Ve.subscribe(e),Ue=()=>Ve.getState();function nu(){return er(tr,()=>Ue().selectedId!=null,()=>Ue().selectedId!=null)}function Ro(){return er(tr,()=>Ue().selectedId,()=>Ue().selectedId)}function iu(){return er(tr,()=>Ue().bodyId,()=>Ue().bodyId)}function su(){let e=er(tr,()=>Ue().index,()=>Ue().index),t=er(tr,()=>Ue().ids.length,()=>Ue().ids.length);return{index:e,total:t}}D();import{useEffect as xi,useState as au}from"react";D();import{urlMatchesIgnoredPattern as lu}from"@buoy-gg/shared-ui/web";function rr(e,t){let r=t.searchText?t.searchText.toLowerCase():null,o=t.method&&t.method.length>0?new Set(t.method):null,n=t.contentType&&t.contentType.length>0?new Set(t.contentType):null,i=[...e];if(o&&(i=i.filter(s=>o.has(s.method))),t.status&&t.status!=="all")switch(t.status){case"success":i=i.filter(s=>s.status&&s.status>=200&&s.status<300);break;case"error":i=i.filter(s=>s.error||s.status&&s.status>=400);break;case"pending":i=i.filter(s=>!s.status&&!s.error);break}return r&&(i=i.filter(s=>s.url.toLowerCase().includes(r)||s.method.toLowerCase().includes(r)||s.path?.toLowerCase().includes(r)||s.host?.toLowerCase().includes(r)||s.error&&s.error.toLowerCase().includes(r)||s.operationName&&s.operationName.toLowerCase().includes(r)||ei(s.graphqlVariables,r))),t.host&&(i=i.filter(s=>s.host===t.host)),n&&(i=i.filter(s=>{let l=s.responseHeaders||s.requestHeaders,a=l?.["content-type"]||l?.["Content-Type"]||"";for(let d of n)switch(d){case"JSON":if(a.includes("json"))return true;break;case"XML":if(a.includes("xml"))return true;break;case"HTML":if(a.includes("html"))return true;break;case"TEXT":if(a.includes("text"))return true;break;case"IMAGE":if(a.includes("image"))return true;break;case"VIDEO":if(a.includes("video"))return true;break;case"AUDIO":if(a.includes("audio"))return true;break;case"FORM":if(a.includes("form"))return true;break;case"OTHER":if(!a||!a.includes("json")&&!a.includes("xml")&&!a.includes("html")&&!a.includes("text")&&!a.includes("image")&&!a.includes("video")&&!a.includes("audio")&&!a.includes("form"))return true;break}return false})),i}function or(e,t){return t.length===0?e:e.filter(r=>!t.some(o=>lu(r.url,o)))}function wi(e,t){let r=0,o=0,n=0;for(let i of or(e,t))i.status&&i.status>=200&&i.status<300?r++:i.error||i.status&&i.status>=400?o++:!i.status&&!i.error&&n++;return{successful:r,failed:o,pending:n,total:e.length}}function du(e,t){return e.successful===t.successful&&e.failed===t.failed&&e.pending===t.pending&&e.total===t.total}function Ci(e){let{ignoredPatterns:t,paused:r}=e,[o,n]=au(()=>wi(K.getEvents(),t));return xi(()=>{if(r)return;let i=null,s=null,l=K.subscribeToEvents(a=>{s=a,i==null&&(i=requestAnimationFrame(()=>{if(i=null,!s)return;let d=wi(s,t);s=null,n(b=>du(b,d)?b:d)}))});return()=>{l(),i!=null&&cancelAnimationFrame(i)}},[r,t]),xi(()=>K.onClear(()=>{n({successful:0,failed:0,pending:0,total:0})}),[]),o}D();import{useEffect as Br,useState as Ti}from"react";function uu(e){let{paused:t}=e,[r,o]=Ti(()=>K.getEvents().length>0);return Br(()=>{if(!t)return K.subscribeToEvents(n=>{let i=n.length>0;o(s=>s===i?s:i)})},[t]),Br(()=>K.onClear(()=>o(false)),[]),r}function cu(e){let{filter:t,ignoredPatterns:r,paused:o}=e,[n,i]=Ti(()=>rr(or(K.getEvents(),r),t).length>0);return Br(()=>{if(!o)return K.subscribeToEvents(s=>{let l=rr(or(s,r),t).length>0;i(a=>a===l?a:l)})},[o,t,r]),Br(()=>K.onClear(()=>i(false)),[]),n}D();function qr(e){if(e==null)return"N/A";if(e===0)return"0 B";let t=1024,r=["B","KB","MB","GB","TB"],o=Math.floor(Math.log(e)/Math.log(t));return`${(e/Math.pow(t,o)).toFixed(1)} ${r[o]}`}function Or(e,t){if(t===-1||!e)return true;try{return JSON.stringify(e).length<t*1024}catch{return false}}function Ri(e,t){let r=e;if(t.filterMode==="failed"?r=r.filter(n=>n.error||n.status&&n.status>=400):t.filterMode==="success"&&(r=r.filter(n=>n.status&&n.status>=200&&n.status<300)),r.length===0)return"No requests to copy";if(t.format==="plaintext")return r.map(n=>`${n.method} ${n.url}`).join(`
|
|
102
102
|
`);if(t.format==="json"){let n=r.map(i=>{let s={};return t.includeMethod&&(s.method=i.method,s.url=i.url),t.includeStatus&&(s.status=i.status,s.statusText=i.statusText),t.includeDuration&&(s.duration=i.duration),i.condition&&(s.condition=i.condition),t.includeTimestamp&&(s.timestamp=i.timestamp),t.includeClient&&(s.requestClient=i.requestClient),t.includeSizes&&(s.requestSize=i.requestSize,s.responseSize=i.responseSize),t.includeErrors&&i.error&&(s.error=i.error),t.includeRequestHeaders&&(s.requestHeaders=i.requestHeaders),t.includeResponseHeaders&&(s.responseHeaders=i.responseHeaders),t.includeRequestBody&&Or(i.requestData,t.bodySizeThreshold)&&(s.requestData=i.requestData),t.includeResponseBody&&Or(i.responseData,t.bodySizeThreshold)&&(s.responseData=i.responseData),s});return JSON.stringify(n,null,2)}let o=r.map((n,i)=>{let s=`# Request ${i+1}
|
|
103
103
|
|
|
104
104
|
`;if(t.includeMethod&&(s+=`**Method:** ${n.method}
|
|
@@ -138,8 +138,8 @@ ${JSON.stringify(n.responseData,null,2)}
|
|
|
138
138
|
`,s}).join(`
|
|
139
139
|
`);return`# Network Requests (${r.length} total)
|
|
140
140
|
|
|
141
|
-
`+o}import{Fragment as
|
|
142
|
-
(${e.operationName})`),_e(Ou,{onPress:()=>t(e),onLongPress:i?()=>i(e):void 0,style:le.cardWrapper,contentStyle:[le.container,{borderLeftColor:s}],testID:`buoy-network-row-${e.id}`,accessibilityLabel:`${e.method} ${e.path||e.url}`,children:[_e(p,{style:le.topRightContainer,children:[r?ie(qu,{size:10,active:true,color:we.color.info}):null,o?ie(Pu,{size:10,color:we.color.accent}):null,n||e.override?ie(Bu,{size:10,color:we.color.warning}):null,ie(Nu,{event:e,isPending:l,statusColor:s}),e.requestClient?ie(p,{style:[le.topRightBadge,{backgroundColor:Ii(e.requestClient).backgroundColor}],children:ie(y,{style:[le.clientText,{color:Ii(e.requestClient).color}],children:e.requestClient==="graphql"?"GQL":e.requestClient==="grpc-web"?"gRPC":e.requestClient==="xhr"?"XHR":e.requestClient})}):null]}),_e(p,{style:le.leftSection,children:[ie(Du,{method:e.method,size:"small"}),ie(Fu,{requestSize:e.requestSize,responseSize:e.responseSize})]}),ie(p,{style:le.middleSection,children:ie(y,{style:le.urlText,numberOfLines:2,children:d})}),_e(p,{style:le.rightSection,children:[a?ie(zu,{type:a,size:"small"}):null,ie(Ru,{size:14,color:we.color.textTertiary})]}),ie(p,{style:le.bottomRightContainer,children:ie($u,{timestamp:e.timestamp,duration:e.duration})})]})});zt.displayName="NetworkEventItemCompact";var le=fe.create({cardWrapper:{marginHorizontal:8},container:{flexDirection:"row",alignItems:"center",backgroundColor:"rgba(12, 12, 12, 0.9)",borderLeftWidth:3,borderLeftColor:"transparent",borderBottomWidth:1},leftSection:{marginRight:8,alignItems:"flex-start"},topRightContainer:{position:"absolute",top:1,right:1,flexDirection:"row",alignItems:"center",gap:4},topRightBadge:{paddingHorizontal:4,paddingVertical:2,borderRadius:4},middleSection:{flex:1,justifyContent:"center",paddingRight:8},urlText:{fontSize:12,color:we.color.text,lineHeight:16,fontFamily:ko},rightSection:{flexDirection:"row",alignItems:"center",gap:6},bottomRightContainer:{position:"absolute",bottom:4,right:8},bottomRightText:{fontSize:9,color:we.color.textTertiary,fontFamily:ko},statusBadge:{paddingHorizontal:4,paddingVertical:1,borderRadius:3},statusText:{fontSize:10,fontWeight:"600"},pendingBadge:{flexDirection:"row",alignItems:"center",gap:2,paddingHorizontal:4,paddingVertical:1,backgroundColor:we.color.warningSoft,borderRadius:3},pendingText:{fontSize:10,color:we.color.warning,fontWeight:"600"},errorBadge:{flexDirection:"row",alignItems:"center",gap:2,paddingHorizontal:4,paddingVertical:1,backgroundColor:we.color.dangerSoft,borderRadius:3},errorText:{fontSize:10,color:we.color.danger,fontWeight:"600"},durationText:{fontSize:9,color:we.color.textSecondary},sizeRow:{flexDirection:"row",gap:4,marginTop:4},sizeItem:{flexDirection:"row",alignItems:"center",gap:2},sizeText:{fontSize:8,color:we.color.textSecondary,fontFamily:ko},clientText:{fontSize:8,fontWeight:"700",letterSpacing:.3,textTransform:"uppercase"}});D();ce();import{ProBadge as ju,Zap as Wu,buoyColors as nr}from"@buoy-gg/shared-ui/web";import{jsx as Dr,jsxs as Io}from"react/jsx-runtime";function Ei({title:e,subtitle:t,onPress:r}){return Io(N,{style:ir.banner,onPress:r,activeOpacity:.8,children:[Io(p,{style:ir.content,children:[Io(p,{style:ir.left,children:[Dr(Wu,{size:16,color:nr.primary}),Dr(y,{style:ir.title,children:e})]}),Dr(ju,{})]}),Dr(y,{style:ir.subtitle,children:t})]})}var ir=fe.create({banner:{backgroundColor:nr.card,borderRadius:10,borderWidth:1,borderColor:nr.primary+"40",padding:12,marginHorizontal:12,marginTop:12,marginBottom:34},content:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},left:{flexDirection:"row",alignItems:"center",gap:8},title:{color:nr.text,fontSize:13,fontWeight:"600"},subtitle:{color:nr.textMuted,fontSize:11}});D();import{useEffect as Li,useMemo as zr,useState as Vu}from"react";import{useLimit as Uu}from"@buoy-gg/shared-ui/web";function sr(e){let{filter:t,ignoredPatterns:r,paused:o,visible:n=true,isPro:i}=e,s=Uu("network.requests"),l=i?1/0:s,[a,d]=Vu(()=>K.getEvents());Li(()=>{if(!n)return;if(o){d(K.getEvents());return}let g=null,T=null,k=K.subscribeToEvents(f=>{T=f,g==null&&(g=requestAnimationFrame(()=>{g=null,T&&d(T),T=null}))});return()=>{k(),g!=null&&cancelAnimationFrame(g)}},[o,n]),Li(()=>K.onClear(()=>{d([])}),[]);let b=zr(()=>or(a,r),[a,r]),I=zr(()=>rr(b,t),[b,t]),C=zr(()=>{let g=new Set;return a.slice(l).forEach(T=>{g.add(T.id)}),g},[a,l]),S=zr(()=>C.size===0?I:I.filter(g=>!C.has(g.id)),[I,C]),q=I.length-S.length;return{events:I,visibleEvents:S,hasLockedEvents:q>0,lockedEventCount:q,totalEvents:b.length}}D();import{useCallback as At,useSyncExternalStore as _u}from"react";D();import{devToolsStorageKeys as Pi,persistentStorage as Bi}from"@buoy-gg/shared-ui/web";var Xu=800,Ju=3,Gu=Object.freeze([]),Ku=250,Yu=["respond","fail","delay"];function Zu(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let o=r;if(typeof o.id!="string"||typeof o.urlPattern!="string"||!o.urlPattern)continue;let n=Yu.includes(o.kind)?o.kind:"respond";t.push({id:o.id,enabled:o.enabled!==false,name:typeof o.name=="string"?o.name:void 0,urlPattern:o.urlPattern,methods:Array.isArray(o.methods)?o.methods.filter(i=>typeof i=="string"):void 0,requireHeader:typeof o.requireHeader=="string"&&o.requireHeader?o.requireHeader:void 0,kind:n,status:typeof o.status=="number"?Math.min(_t,Math.max(Ut,o.status)):void 0,statusText:typeof o.statusText=="string"?o.statusText:void 0,headers:o.headers&&typeof o.headers=="object"?o.headers:void 0,body:typeof o.body=="string"?o.body:void 0,failKind:o.failKind==="timeout"?"timeout":void 0,delayMs:typeof o.delayMs=="number"?o.delayMs:void 0,times:typeof o.times=="number"?o.times:null,alternate:o.alternate===true,hits:0,seen:0,createdAt:typeof o.createdAt=="number"?o.createdAt:0})}return t.slice(0,rt)}var Qu=class{constructor(){this.rules=[];this.enabled=true;this.listeners=new Set;this.loaded=false;this.loadPromise=null;this.dirty=false;this.idCounter=0;this.state={enabled:true,rules:[],autoPaused:false};this.launchStreak=0;this.autoPaused=false;this.keepAlive=null;this.hitEmitTimer=null;this.engineDisabled=false;this.remote=null;this.remoteEchoUntil=0}enableRemoteMode(e){this.remote=e,this.disableEngine()}disableRemoteMode(){this.remote=null}replaceRules(e,t=false){this.remote&&(!t&&ue()<this.remoteEchoUntil||(this.enabled=e.enabled,this.rules=e.rules,this.rebuild(),this.emit()))}markLocalEdit(){this.remote&&(this.remoteEchoUntil=ue()+Xu)}disableEngine(){this.engineDisabled=true,this.keepAlive&&(this.keepAlive(),this.keepAlive=null,pt()===0&&Xt())}getState(){return this.state}getRules(){return this.engineDisabled||!this.enabled?Gu:this.rules}async fetchRuleBody(e){let t=this.rules.find(r=>r.id===e);if(!t)return null;if(!t.bodyOmitted)return t.body??null;if(!this.remote?.getRuleBody)return null;try{return await this.remote.getRuleBody(e)}catch{return null}}activeCount(){return this.enabled?this.rules.filter(e=>e.enabled&&!uo(e)).length:0}subscribe(e){return this.listeners.add(e),this.ensureLoaded(),()=>{this.listeners.delete(e)}}setEnabled(e){this.enabled!==e&&(this.remote?.setEnabled(e),this.markLocalEdit(),this.markTouched(),this.enabled=e,this.commit(this.rules))}addRule(e){if(this.rules.length>=rt)return null;let t={...e,id:`ovr_${Date.now().toString(36)}_${++this.idCounter}`,hits:0,seen:0,createdAt:Date.now()};return this.commit([t,...this.rules]),t}upsertRule(e){this.remote?.upsertRule(e),this.markLocalEdit(),this.markTouched();let{id:t,...r}=e;return t&&this.rules.some(o=>o.id===t)?(this.updateRule(t,r),this.rules.find(o=>o.id===t)??null):this.addRule(r)}updateRule(e,t){let r=this.rules.findIndex(n=>n.id===e);if(r===-1)return;let o=[...this.rules];o[r]={...o[r],...t,hits:0,seen:0},this.commit(o)}setRuleEnabled(e,t){let r=this.rules.findIndex(n=>n.id===e);if(r===-1||this.rules[r].enabled===t)return;this.remote?.setRuleEnabled(e,t),this.markLocalEdit(),this.markTouched();let o=[...this.rules];o[r]={...o[r],enabled:t,hits:t?0:o[r].hits,seen:t?0:o[r].seen},this.commit(o)}removeRule(e){let t=this.rules.filter(r=>r.id!==e);t.length!==this.rules.length&&(this.remote?.removeRule(e),this.markLocalEdit(),this.markTouched(),this.commit(t))}clearRules(){this.rules.length!==0&&(this.remote?.clearRules(),this.markLocalEdit(),this.markTouched(),this.commit([]))}recordMatch(e){let t=this.rules.findIndex(o=>o.id===e);if(t===-1)return;let r=[...this.rules];r[t]={...r[t],seen:r[t].seen+1},this.rules=r,this.rebuild()}recordHit(e){let t=this.rules.findIndex(s=>s.id===e);if(t===-1)return;let r=this.rules[t],o=r.hits+1,n=typeof r.times=="number"&&o>=r.times,i=[...this.rules];if(i[t]={...r,hits:o,enabled:n?false:r.enabled},n){this.commit(i);return}this.rules=i,this.rebuild(),this.scheduleHitEmit()}ensureLoaded(){return this.remote||this.loaded?Promise.resolve():this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{try{let e=await Bi.getItem(Pi.network.overrides());if(e&&!this.dirty){let t=JSON.parse(e);this.enabled=t?.enabled!==false,this.rules=Zu(t?.rules),this.launchStreak=typeof t?.launchStreak=="number"?t.launchStreak:0,this.applyLaunchGuard(),this.rebuild()}}catch{}finally{this.loaded=true,this.syncKeepAlive(),this.emit()}})(),this.loadPromise)}applyLaunchGuard(){if(!this.enabled||this.activeCount()===0){this.launchStreak=0;return}this.launchStreak+=1,this.launchStreak>=Ju&&(this.enabled=false,this.autoPaused=true,this.launchStreak=0),this.persist()}syncKeepAlive(){let e=!this.engineDisabled&&this.activeCount()>0;if(e&&!this.keepAlive){Bn(),this.keepAlive=Jt(()=>{});return}!e&&this.keepAlive&&(this.keepAlive(),this.keepAlive=null,pt()===0&&Xt())}scheduleHitEmit(){this.hitEmitTimer===null&&(this.hitEmitTimer=setTimeout(()=>{this.hitEmitTimer=null,this.emit()},Ku))}commit(e){this.dirty=true,this.rules=e.slice(0,rt),this.rebuild(),this.syncKeepAlive(),this.emit(),this.persist()}rebuild(){this.state={enabled:this.enabled,rules:this.rules,autoPaused:this.autoPaused}}markTouched(){this.launchStreak=0,this.autoPaused=false}noteHealthyLaunch(){this.launchStreak===0&&!this.autoPaused||(this.markTouched(),this.persist(),this.rebuild(),this.emit())}persist(){this.remote||Bi.setItem(Pi.network.overrides(),JSON.stringify({enabled:this.enabled,rules:this.rules,launchStreak:this.launchStreak})).catch(()=>{})}emit(){this.listeners.forEach(e=>e())}},_=new Qu;Fa({getRules:()=>_.getRules(),recordHit:e=>_.recordHit(e),recordMatch:e=>_.recordMatch(e)});function Ar(){let e=_u(At(s=>_.subscribe(s),[]),()=>_.getState(),()=>_.getState()),t=At(s=>_.setEnabled(s),[]),r=At(s=>_.upsertRule(s),[]),o=At((s,l)=>_.setRuleEnabled(s,l),[]),n=At(s=>_.removeRule(s),[]),i=At(()=>_.clearRules(),[]);return{enabled:e.enabled,rules:e.rules,autoPaused:e.autoPaused,activeCount:_.activeCount(),setEnabled:t,upsertRule:r,setRuleEnabled:o,removeRule:n,clearRules:i,isRuleSpent:uo}}D();function ec(e,t){if(t.length===0)return[];let r=new Set(t.map(n=>n.id)),o=new Set;for(let n of t){let i;for(let s of e){if(s.override&&r.has(s.override.ruleId)){o.add(s.id);continue}lo(n,s.url,String(s.method||"GET"),s.requestHeaders)&&(s.timestamp>=n.createdAt?o.add(s.id):(!i||s.timestamp>i.timestamp)&&(i=s))}i&&o.add(i.id)}return e.filter(n=>o.has(n.id))}D();var tc=[];function Eo(e,t,r){return t.length===0?{pinned:tc,rest:e}:{pinned:t,rest:r.size===0?e:e.filter(o=>!r.has(o.id))}}import{jsx as ve,jsxs as wt}from"react/jsx-runtime";var rc=e=>e.id;function oc({events:e,onEventPress:t,onLongPress:r,savedLiveIds:o,onClearPinned:n}){return e.length===0?null:wt(p,{style:Se.pinnedSection,children:[wt(p,{style:Se.pinnedHeader,children:[ve(bu,{size:11,active:true,color:be.semantic.info}),wt(y,{style:Se.pinnedTitle,children:["PINNED \xB7 ",e.length]}),ve(N,{onPress:n,"sentry-label":"ignore unpin all",style:Se.pinnedClear,children:ve(y,{style:Se.pinnedClearText,children:"Unpin all"})})]}),e.map(i=>ve(zt,{event:i,onPress:t,onLongPress:r,pinned:true,saved:o.has(i.id)},i.id))]})}function nc({events:e,onEventPress:t,onLongPress:r,savedLiveIds:o,paused:n,onTogglePaused:i}){return e.length===0?null:wt(p,{style:[Se.overriddenSection,n&&Se.overriddenSectionOff],children:[wt(p,{style:Se.overriddenHeader,children:[ve(yu,{size:11,color:n?be.text.muted:be.semantic.warning}),ve(y,{testID:"buoy-network-overridden-strip",style:[Se.overriddenTitle,n&&Se.overriddenTitleOff],children:n?`PAUSED \xB7 ${e.length}`:`OVERRIDDEN \xB7 ${e.length}`}),ve(N,{onPress:i,"sentry-label":"ignore pause overrides",style:Se.overriddenManage,children:ve(y,{style:[Se.overriddenManageText,n&&Se.overriddenTitleOff],children:n?"Resume":"Pause"})})]}),e.map(s=>ve(zt,{event:s,onPress:t,onLongPress:r,overridden:true,saved:o.has(s.id)},s.id))]})}function ic({visible:e,paused:t,filter:r,ignoredPatterns:o,isPro:n,searchText:i,onEventPress:s,onUpgradePress:l}){let{visibleEvents:a,hasLockedEvents:d,lockedEventCount:b,totalEvents:I}=sr({filter:r,ignoredPatterns:o,paused:t,visible:e,isPro:n}),{pinnedEvents:C,pinnedLiveIds:S,savedLiveIds:q,togglePin:g,clearPinned:T}=Ot(),{rules:k,enabled:f,setEnabled:E,isRuleSpent:z}=Ar(),L=mu(G=>{g(G)},[g]);if(!e)return null;let{pinned:w,rest:H}=Eo(a,C,S),v=k.filter(G=>G.enabled&&!z(G)),h=ec([...w,...H],v),c=new Set(h.map(G=>G.id)),u=w.filter(G=>!c.has(G.id)),m=c.size?H.filter(G=>!c.has(G.id)):H,O=!t,re=({item:G})=>ve(zt,{event:G,onPress:s,onLongPress:L,saved:q.has(G.id)}),Z=()=>u.length>0||h.length>0?null:ve(Su,{testID:"buoy-network-empty",...xu({subject:"requests",search:i,total:I,capturing:O,waiting:{otto:"fishing",title:"No network events",message:"Network requests will appear here"},paused:{title:"No network events",message:"Enable interception to start capturing"}})}),ee=()=>{if(!d)return null;let G=i.length>0,A=G?`${b} matching ${b===1?"request":"requests"} in locked history`:`${b} requests locked`;return ve(Ei,{title:A,subtitle:G?"Upgrade to Pro to search your full request history":"Upgrade to Pro to unlock full request history",onPress:l})};return wt(p,{style:Se.root,children:[O?null:wt(p,{style:Se.disabledBanner,children:[ve(vu,{size:14,color:be.semantic.warning}),ve(y,{style:Se.disabledText,children:"Network interception is disabled"})]}),ve(nc,{events:h,onEventPress:s,onLongPress:L,savedLiveIds:q,paused:!f,onTogglePaused:()=>E(!f)}),ve(oc,{events:u,onEventPress:s,onLongPress:L,savedLiveIds:q,onClearPinned:T}),m.length>0||d?ve(io,{testID:"buoy-network-list",data:m,renderItem:re,keyExtractor:rc,contentContainerStyle:Se.listContent,showsVerticalScrollIndicator:true,onEndReachedThreshold:.8,scrollEnabled:true,...wu,extraData:q,"sentry-label":"ignore network events list",ListFooterComponent:ee}):Z()]})}var Se=fe.create({root:{flex:1,minHeight:0},overriddenSection:{borderBottomWidth:1,borderBottomColor:be.semantic.warning+"44",backgroundColor:be.semantic.warningBackground},overriddenSectionOff:{borderBottomColor:be.border.default,backgroundColor:be.background.card},overriddenTitleOff:{color:be.text.muted},overriddenHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingTop:8,paddingBottom:4},overriddenTitle:{flex:1,fontSize:10,fontWeight:"700",letterSpacing:.8,color:be.semantic.warning},overriddenManage:{paddingHorizontal:6,paddingVertical:2},overriddenManageText:{fontSize:10,fontWeight:"600",color:be.semantic.warning},pinnedSection:{borderBottomWidth:1,borderBottomColor:be.border.default,paddingBottom:4},pinnedHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:20,paddingTop:10,paddingBottom:6},pinnedTitle:{flex:1,color:be.semantic.info,fontSize:10,fontWeight:"700",letterSpacing:.6,fontFamily:Cu},pinnedClear:{paddingHorizontal:6,paddingVertical:2},pinnedClearText:{color:be.text.muted,fontSize:10},disabledBanner:{flexDirection:"row",alignItems:"center",gap:8,padding:10,marginHorizontal:12,marginTop:8,backgroundColor:be.semantic.warningBackground,borderRadius:8,borderWidth:1,borderColor:be.semantic.warning+"20"},disabledText:{color:be.semantic.warning,fontSize:11,flex:1},listContent:{paddingTop:8}});D();ce();import{useState as sc}from"react";import{Bookmark as ac,CopyButton as lc,Search as dc,macOSColors as Me,useLimit as uc,ToolEmptyState as cc,resolveListEmptyState as hc,EVENT_LIST_PRESET as pc,monoFont as fc}from"@buoy-gg/shared-ui/web";D();function qi(e,t,r){let o=e.slice(0,Math.min(t,it)),n=o.map(i=>i.event);return{events:r?rr(n,{searchText:r}):n,lockedCount:e.length-o.length}}import{jsx as Xe,jsxs as Hr}from"react/jsx-runtime";var gc=e=>e.id;function Oi({visible:e,isPro:t,copySettings:r,search:o,onSearchChange:n,onEventPress:i,onUpgradePress:s}){let{savedRecords:l,pinnedLiveIds:a,toggleSave:d,clearSaved:b}=Ot(),I=uc("network.saved"),[C,S]=sc(""),q=o!=null&&n!=null,g=q?o:C,T=q?n:S;if(!e)return null;let{events:k,lockedCount:f}=qi(l,I,g),E=w=>{d(w)},z=({item:w})=>Xe(zt,{event:w,onPress:i,onLongPress:E,saved:true,pinned:a.has(w.id)}),L=()=>f===0?null:Xe(Ei,{title:`${f} saved ${f===1?"request":"requests"} locked`,subtitle:`Your plan keeps ${I}. Upgrade to Pro to unlock the rest.`,onPress:s});return Hr(p,{style:Je.root,children:[Hr(p,{style:Je.toolbar,children:[Xe(ac,{size:11,color:Me.semantic.debug}),Hr(y,{style:Je.toolbarTitle,children:["SAVED \xB7 ",l.length,I>=it?"":`/${I}`]}),t?Xe(lc,{value:()=>Ti(k,r),size:13,buttonStyle:Je.toolbarButton,colors:{idle:Me.text.secondary,success:Me.semantic.success,error:Me.semantic.error},disabled:k.length===0}):null,Xe(N,{onPress:b,"sentry-label":"ignore clear saved",style:Je.toolbarClear,disabled:l.length===0,children:Xe(y,{style:[Je.toolbarClearText,l.length===0&&Je.toolbarClearTextDisabled],children:"Clear all"})})]}),l.length>0?Hr(p,{style:Je.searchRow,children:[Xe(dc,{size:13,color:Me.text.secondary}),Xe(Pt,{style:Je.searchInput,placeholder:"Search saved requests\u2026",placeholderTextColor:Me.text.muted,value:g,onChangeText:T,"sentry-label":"ignore saved search",accessibilityLabel:"Search saved requests",autoCapitalize:"none",autoCorrect:false,returnKeyType:"search"})]}):null,l.length===0||g.trim().length>0&&k.length===0&&f===0?Xe(cc,{testID:"buoy-network-saved-empty",...hc({subject:"saved requests",verb:"kept",search:l.length===0?"":g,total:l.length,waiting:{otto:"empty",title:"No saved requests",message:"Open a request and tap the bookmark to keep it here \u2014 saved requests survive Clear and app restarts."}})}):Xe(io,{data:k,renderItem:z,keyExtractor:gc,contentContainerStyle:Je.listContent,showsVerticalScrollIndicator:true,scrollEnabled:true,...pc,extraData:a,"sentry-label":"ignore saved requests list",ListFooterComponent:L})]})}var Je=fe.create({root:{flex:1,minHeight:0},toolbar:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:20,paddingTop:10,paddingBottom:6},toolbarTitle:{flex:1,color:Me.semantic.debug,fontSize:10,fontWeight:"700",letterSpacing:.6,fontFamily:fc},toolbarButton:{width:26,height:26,borderRadius:6,alignItems:"center",justifyContent:"center"},toolbarClear:{paddingHorizontal:6,paddingVertical:2},toolbarClearText:{color:Me.text.muted,fontSize:10},toolbarClearTextDisabled:{color:Me.text.disabled},searchRow:{flexDirection:"row",alignItems:"center",gap:6,marginHorizontal:12,marginBottom:8,paddingHorizontal:10,paddingVertical:5,backgroundColor:Me.background.input,borderRadius:10,borderWidth:1,borderColor:Me.border.default},searchInput:{flex:1,color:Me.text.primary,fontSize:13,paddingVertical:2},listContent:{paddingTop:4}});D();ce();import{useCallback as mc,useEffect as Mr,useState as yc}from"react";import{AlertCircle as bc,AlertTriangle as vc,DevToolsCard as Sc,EmptyState as xc,MethodBadge as wc,Plus as Cc,Trash2 as Tc,macOSColors as Y,useLimit as Rc,monoFont as kc}from"@buoy-gg/shared-ui/web";D();ce();import{useMemo as Di,useState as Nr}from"react";import{ChevronDown as Ic,ChevronRight as Ec,macOSColors as U,useSafeAreaInsets as Lc,monoFont as Pc}from"@buoy-gg/shared-ui/web";D();ce();import{useState as Fr,useMemo as $r,useCallback as ar,useRef as Lo,useEffect as Bc,memo as jr}from"react";import{displayValue as qc,buoyColors as P,monoFont as qe}from"@buoy-gg/shared-ui/web";import{CopyButton as Oc}from"@buoy-gg/shared-ui/web";import{ChevronRight as Dc,ChevronDown as zc,Trash as zi}from"@buoy-gg/shared-ui/web";import{CyberpunkInput as Ac}from"@buoy-gg/shared-ui/web/dataViewer";D();var Ct=(e,t,r)=>{if(t.length===0)return r;if(e instanceof Map){let o=new Map(e);if(t.length===1)return o.set(t[0],r),o;let[n,...i]=t,s=o.get(n);return o.set(n,Ct(s??null,i,r)),o}if(e instanceof Set){let o=Ct(Array.from(e),t,r);return new Set(Array.isArray(o)?o:[])}if(Array.isArray(e)){let o=[...e];if(t.length===1)return o[t[0]]=r,o;let[n,...i]=t;return o[n]=Ct(o[n],i,r),o}if(e instanceof Object){let o={...e};if(t.length===1)return o[t[0]]=r,o;let[n,...i]=t;return o[n]=Ct(o[n],i,r),o}return e};D();var Tt=(e,t)=>{if(e instanceof Map){let r=new Map(e);if(t.length===1)return r.delete(t[0]),r;let[o,...n]=t;return r.set(o,Tt(r.get(o),n)),r}if(e instanceof Set){let r=Tt(Array.from(e),t);return new Set(r)}if(Array.isArray(e)){let r=[...e];if(t.length===1)return r.filter((i,s)=>s.toString()!==t[0]);let[o,...n]=t;return r[o]=Tt(r[o],n),r}if(e instanceof Object){let r={...e};if(t.length===1)return delete r[t[0]],r;let[o,...n]=t;return r[o]=Tt(r[o],n),r}return e};D();import{createContext as Hc,useContext as Mc}from"react";var Ai=Hc(null);function Wr(){return Mc(Ai)}import{Fragment as Vr,jsx as J,jsxs as Ee}from"react/jsx-runtime";var lr=100,Ht={top:8,bottom:8,left:8,right:8},Hi=12,Nc=(e,t=lr)=>{if(t<1||e.length===0)return[];let r=[];for(let o=0;o<e.length;o+=t)r.push(e.slice(o,o+t));return r},Po=jr(({expanded:e,isFocused:t=false,isMain:r=false})=>J(p,{style:[j.expanderIcon,r&&j.expanderIconMain,e?j.expanded:j.collapsed],children:e?J(zc,{size:r?14:Hi,color:t?P.primary:r?P.text:P.textSecondary,strokeWidth:2.5}):J(Dc,{size:r?14:Hi,color:t?P.primary:r?P.text:P.textSecondary,strokeWidth:2.5})}));Po.displayName="Expander";var Mi=jr(({value:e,isFocused:t=false})=>J(Oc,{value:e,isFocused:t,buttonStyle:t?{...j.buttonStyle,...j.buttonStyleFocused}:j.buttonStyle}));Mi.displayName="CopyButton";var Bo=jr(({dataPath:e,isFocused:t=false})=>{let r=Wr(),o=ar(()=>{r&&r.onChange(Tt(r.root,e))},[r,e]);return r?J(N,{"sentry-label":"ignore devtools explorer delete button",onPress:o,style:[j.deleteButton,t&&j.deleteButtonFocused],accessibilityLabel:"Delete item",hitSlop:Ht,activeOpacity:.7,children:J(zi,{size:14,strokeWidth:2,color:t?P.error:P.error+"CC"})}):null});Bo.displayName="DeleteItemButton";var Ni=jr(({dataPath:e,isFocused:t=false})=>{let r=Wr(),o=ar(()=>{r&&r.onChange(Ct(r.root,e,[]))},[r,e]);return r?J(N,{"sentry-label":"ignore devtools explorer clear button",style:[j.clearButton,t&&j.clearButtonFocused],"aria-label":"Remove all items",onPress:o,hitSlop:Ht,activeOpacity:.7,children:J(y,{style:[j.clearButtonText,{color:t?P.warning:P.warning+"CC"}],children:"[]"})}):null});Ni.displayName="ClearArrayButton";function Fc({dataPath:e,value:t,itemsDeletable:r}){let o=Wr(),n=ar(()=>{if(!o)return;let a=typeof t=="boolean"?t:false;o.onChange(Ct(o.root,e,!a))},[o,e,t]),i=ar(()=>{o&&o.onChange(Tt(o.root,e))},[o,e]);if(!o)return null;let s=t?j.toggleBadgeTrue:j.toggleBadgeFalse,l=t?j.toggleTextTrue:j.toggleTextFalse;return Ee(N,{"sentry-label":"ignore devtools explorer toggle button",style:j.modernToggleButton,onPress:n,hitSlop:Ht,activeOpacity:.8,children:[J(p,{style:[j.toggleBadge,s],children:J(y,{style:[j.toggleBadgeText,l],children:t?"TRUE":"FALSE"})}),r&&J(N,{"sentry-label":"ignore devtools explorer delete button in toggle",onPress:i,style:j.deleteButtonInToggle,accessibilityLabel:"Delete item",hitSlop:Ht,activeOpacity:.7,children:J(zi,{size:14,strokeWidth:2,color:P.error+"CC"})})]})}function qo({editable:e,label:t,value:r,defaultExpanded:o,dataPath:n,itemsDeletable:i,dataVersion:s=0}){let l=Wr(),[a,d]=Fr(false),[b,I]=Fr("");Bc(()=>{if(r!=null&&(typeof r=="string"||typeof r=="number")){let c=r.toString();I(c)}},[r,t,s]);let C=$r(()=>{let c=t.toUpperCase();return["DATA","QUERY","QUERYKEY","TYPES","STATS","OPTIONS","OBSERVERS"].includes(c)},[t]),[S,q]=Fr((o||[]).includes(t)),g=()=>q(c=>!c),[T,k]=Fr([]),f=$r(()=>r==null||typeof r!="object"?[]:Array.isArray(r)?(r.length>1e3?r.slice(0,1e3):r).map((c,u)=>({label:u.toString(),value:c})):r instanceof Map?Array.from(r.entries()).slice(0,1e3).map(([c,u])=>({label:c.toString(),value:u})):r instanceof Set?Array.from(r).slice(0,1e3).map((c,u)=>({label:u.toString(),value:c})):Object.entries(r).slice(0,1e3).map(([c,u])=>({label:c,value:u})),[r]),E=$r(()=>Array.isArray(r)?"array":r===null||typeof r!="object"?typeof r:r instanceof Map||r instanceof Set?"Iterable":"object",[r]),z=$r(()=>Nc(f,lr),[f]),L=n??[],w=Lo(l),H=Lo(L),v=Lo(E);w.current=l,H.current=L,v.current=E;let h=ar((c,u)=>{I(u);let m=w.current;if(!m||c&&isNaN(Number(u)))return;let O=v.current==="number"?Number(u):u;m.onChange(Ct(m.root,H.current,O))},[I]);return J(p,{style:j.minWidthWrapper,children:Ee(p,{style:j.fullWidthMarginRight,children:[z.length>0&&Ee(Vr,{children:[Ee(p,{style:[j.flexRowItemsCenterGap,C&&j.flexRowItemsCenterGapMain],children:[Ee(N,{"sentry-label":"ignore devtools explorer expander button",style:j.expanderButton,onPress:g,hitSlop:Ht,activeOpacity:.6,children:[J(Po,{expanded:S,isFocused:a,isMain:C}),J(y,{style:[j.labelText,a&&j.labelTextFocused,C&&j.labelTextMain],children:t}),J(y,{style:j.textGray500,children:`${String(E).toLowerCase()==="iterable"?"(Iterable) ":""}${f.length} ${f.length>1?"items":"item"}`})]}),e&&Ee(p,{style:j.flexRowGapItemsCenter,children:[J(Mi,{value:r,isFocused:a}),i&&l!==null&&J(Bo,{dataPath:L,isFocused:a}),E==="array"&&l!==null&&J(Ni,{dataPath:L,isFocused:a})]})]}),S&&Ee(Vr,{children:[z.length===1&&J(p,{style:[j.singleEntryContainer,C&&j.singleEntryContainerMain],children:f.map((c,u)=>J(qo,{defaultExpanded:o,label:c.label,value:c.value,editable:e,dataPath:[...L,c.label],itemsDeletable:E==="array"||E==="Iterable"||E==="object",dataVersion:s},c.label+u))}),z.length>1&&J(p,{style:j.multiEntryContainer,children:z.map((c,u)=>J(p,{children:Ee(p,{style:j.relativeOutlineNone,children:[Ee(N,{"sentry-label":"ignore devtools explorer page toggle",onPress:()=>k(m=>m.includes(u)?m.filter(O=>O!==u):[...m,u]),style:j.pageExpanderButton,hitSlop:Ht,children:[J(Po,{expanded:T.includes(u)}),Ee(y,{style:j.pageRangeText,children:["[",u*lr,"...",u*lr+lr-1,"]"]})]}),T.includes(u)&&J(p,{style:j.entriesContainer,children:c.map(m=>J(qo,{defaultExpanded:o,label:m.label,value:m.value,editable:e,dataPath:[...L,m.label],dataVersion:s},m.label))})]})},u))})]})]}),z.length===0&&Ee(p,{style:j.flexRowGapFullWidth,children:[e&&l!==null&&(E==="string"||E==="number"||E==="boolean")?Ee(Vr,{children:[e&&l&&(E==="string"||E==="number")&&J(p,{style:j.nebulaInputWrapper,children:J(Ac,{label:t,accessibilityLabel:"Data input field for editing values",style:[E==="number"?j.textNumber:j.textString],keyboardType:E==="number"?"numeric":"default",value:b,onChangeText:c=>h(E==="number",c),onFocus:()=>d(true),onBlur:()=>d(false),showNumberControls:E==="number",onIncrement:()=>{let c=Number(b)||0;h(true,String(c+1))},onDecrement:()=>{let c=Number(b)||0;h(true,String(c-1))},showDeleteButton:i,onDelete:()=>{l.onChange(Tt(l.root,L))}})}),E==="boolean"&&Ee(p,{style:j.booleanRowContainer,children:[J(y,{style:j.booleanLabel,children:t}),J(p,{style:j.booleanToggleWrapper,children:J(Fc,{dataPath:L,value:r,itemsDeletable:i})})]})]}):Ee(Vr,{children:[J(y,{style:j.text344054,children:t}),J(y,{style:j.displayValueText,children:qc(r)})]}),e&&i&&l!==null&&E!=="string"&&E!=="number"&&E!=="boolean"&&J(Bo,{dataPath:L,isFocused:a})]})]})})}var j=fe.create({buttonStyle:{backgroundColor:P.card+"E6",borderWidth:1,borderColor:P.textSecondary+"33",borderRadius:6,flexDirection:"row",alignItems:"center",justifyContent:"center",width:28,height:28,position:"relative",shadowColor:"#000",shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2},buttonStyleFocused:{borderColor:P.primary+"CC",backgroundColor:P.primary+"26",shadowColor:P.primary,shadowOpacity:.3,shadowRadius:4},deleteButton:{backgroundColor:P.error+"1A",borderColor:P.error+"4D",borderWidth:1,borderRadius:6,padding:0,alignItems:"center",justifyContent:"center",width:28,height:28,position:"relative",shadowColor:P.error,shadowOffset:{width:0,height:0},shadowOpacity:.15,shadowRadius:3},deleteButtonFocused:{borderColor:P.error+"CC",backgroundColor:P.error+"33",shadowOpacity:.3,shadowRadius:5},deleteButtonInToggle:{backgroundColor:P.error+"1A",borderColor:P.error+"4D",borderWidth:1,borderRadius:6,padding:0,alignItems:"center",justifyContent:"center",width:28,height:28,shadowColor:P.error,shadowOffset:{width:0,height:0},shadowOpacity:.15,shadowRadius:3},clearButton:{backgroundColor:P.warning+"1A",borderWidth:1,borderColor:P.warning+"4D",borderRadius:6,flexDirection:"row",padding:0,alignItems:"center",justifyContent:"center",width:28,height:28,position:"relative",zIndex:10,shadowColor:P.warning,shadowOffset:{width:0,height:0},shadowOpacity:.15,shadowRadius:3},clearButtonFocused:{borderColor:P.warning+"CC",backgroundColor:P.warning+"33",shadowOpacity:.3,shadowRadius:5},clearButtonText:{fontSize:12,fontWeight:"700",fontFamily:qe},expanderIcon:{width:18,height:18,alignItems:"center",justifyContent:"center",marginRight:1,backgroundColor:P.textSecondary+"14",borderRadius:3},expanderIconMain:{backgroundColor:P.textSecondary+"1A",width:20,height:20,borderRadius:4,borderWidth:.5,borderColor:P.textSecondary+"33"},expanded:{transform:[{rotate:"0deg"}]},collapsed:{transform:[{rotate:"0deg"}]},minWidthWrapper:{minWidth:180,fontSize:11,flexDirection:"row",flexWrap:"wrap",width:"100%",marginVertical:.5},fullWidthMarginRight:{position:"relative",width:"100%",marginRight:1},flexRowItemsCenterGap:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:3,paddingHorizontal:6,marginVertical:1,borderRadius:4,backgroundColor:P.card+"66",borderWidth:.5,borderColor:P.textSecondary+"1A"},flexRowItemsCenterGapMain:{backgroundColor:P.card+"E6",borderLeftWidth:2.5,borderLeftColor:P.textSecondary+"80",borderColor:P.textSecondary+"26",paddingVertical:5,paddingHorizontal:8,marginBottom:3,borderWidth:1,shadowColor:"#000",shadowOffset:{width:0,height:0},shadowOpacity:.08,shadowRadius:3},expanderButton:{flexDirection:"row",alignItems:"center",backgroundColor:"transparent",paddingVertical:1,paddingHorizontal:2,gap:6,borderWidth:0,minHeight:24,flex:1},labelText:{color:P.textSecondary,fontSize:10,fontWeight:"600",marginRight:4,fontFamily:qe,letterSpacing:.4},labelTextFocused:{color:P.text},labelTextMain:{color:P.text,fontSize:11,fontWeight:"700",letterSpacing:.6},textGray500:{color:P.textMuted,fontSize:10,fontWeight:"400",fontFamily:qe,opacity:.7},pageRangeText:{color:P.textSecondary,fontSize:10,fontWeight:"600",fontFamily:qe},flexRowGapItemsCenter:{flexDirection:"row",alignItems:"center",gap:4,paddingLeft:2},singleEntryContainer:{marginLeft:2,marginTop:2,paddingLeft:8,borderLeftWidth:1.5,borderLeftColor:P.textSecondary+"40"},singleEntryContainerMain:{borderLeftColor:P.textSecondary+"4D",marginLeft:4,paddingLeft:10},multiEntryContainer:{marginLeft:2,marginTop:2,paddingLeft:8,borderLeftWidth:1.5,borderLeftColor:P.textSecondary+"40"},multiEntryContainerMain:{borderLeftColor:P.textSecondary+"4D",marginLeft:4,paddingLeft:10},relativeOutlineNone:{position:"relative"},pageExpanderButton:{flexDirection:"row",alignItems:"center",backgroundColor:P.card+"66",paddingVertical:3,paddingHorizontal:6,gap:6,borderRadius:4,borderWidth:.5,borderColor:P.textSecondary+"1A",marginBottom:2,minHeight:24},entriesContainer:{marginLeft:2,paddingLeft:8,marginTop:2,borderLeftWidth:1.5,borderLeftColor:P.textSecondary+"40"},textNumber:{color:P.text,fontWeight:"600",fontFamily:qe},textString:{color:P.text,fontFamily:qe},flexRowGapFullWidth:{flexDirection:"row",width:"100%",alignItems:"center",marginVertical:1,gap:6,paddingHorizontal:4,paddingVertical:2,borderRadius:3},text344054:{color:P.textSecondary,fontWeight:"600",fontSize:9,minWidth:50,fontFamily:qe,letterSpacing:.4,opacity:.8},numberInputButtons:{position:"absolute",right:8,top:"50%",transform:[{translateY:-18}],flexDirection:"row",gap:4,zIndex:10},touchableButton:{width:32,height:32,borderRadius:6,backgroundColor:P.card+"E6",borderWidth:1,borderColor:P.textSecondary+"33",alignItems:"center",justifyContent:"center",marginLeft:2,shadowColor:"#000",shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2},touchableButtonFocused:{borderColor:P.primary+"CC",backgroundColor:P.primary+"26",shadowColor:P.primary,shadowOffset:{width:0,height:0},shadowOpacity:.3,shadowRadius:4,elevation:3},nebulaInputWrapper:{flex:1,width:"100%",position:"relative"},displayValueText:{flex:1,color:P.text,fontWeight:"400",fontFamily:qe,fontSize:12,paddingVertical:6,paddingHorizontal:10,borderRadius:6,borderWidth:1,borderColor:P.textMuted+"66",minHeight:34},dataRow:{flexDirection:"row",alignItems:"center",paddingVertical:4,paddingHorizontal:8,minHeight:44,gap:12},dataLabel:{color:P.textSecondary,fontSize:13,fontWeight:"500",minWidth:80,flexShrink:0},dataValueContainer:{flex:1,flexDirection:"row",alignItems:"center"},inputWithActions:{flex:1,position:"relative"},numberControls:{position:"absolute",right:8,top:"50%",transform:[{translateY:-16}],flexDirection:"column",gap:2},numberButton:{width:32,height:16,borderRadius:4,alignItems:"center",justifyContent:"center",borderWidth:1,borderColor:P.primary+"0F"},readOnlyValue:{color:P.text,fontSize:13,fontFamily:qe,paddingVertical:8,paddingHorizontal:12,borderRadius:6,borderWidth:1,borderColor:P.textMuted+"33",flex:1},actionButtons:{flexDirection:"row",gap:6,paddingLeft:8},booleanContainer:{flexDirection:"row",alignItems:"center",padding:8,borderRadius:6,borderWidth:1,borderColor:P.textMuted+"4D",flex:1},booleanText:{marginLeft:8,color:P.warning,fontWeight:"500",fontFamily:qe},modernToggleButton:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderRadius:6,borderWidth:1,borderColor:P.textMuted+"99",paddingHorizontal:8,paddingVertical:6,marginVertical:2,minHeight:34,gap:8},toggleIconContainer:{marginRight:6},toggleIcon:{padding:8,borderRadius:8,alignItems:"center",justifyContent:"center",width:32,height:32},toggleIconSmall:{width:8,height:8,borderRadius:4},toggleContent:{flex:1,minWidth:0},toggleLabel:{color:"#E5E7EB",fontSize:11,fontWeight:"600",fontFamily:qe,letterSpacing:.3},toggleStatus:{color:"#9CA3AF",fontSize:11},toggleBadge:{marginLeft:6,paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1},toggleBadgeText:{fontSize:9,fontWeight:"700",textTransform:"uppercase",letterSpacing:.8,fontFamily:qe},toggleIconTrue:{backgroundColor:P.primary},toggleIconFalse:{backgroundColor:P.textMuted},toggleBadgeTrue:{backgroundColor:P.primary+"1A",borderColor:P.primary+"4D"},toggleBadgeFalse:{backgroundColor:P.textMuted+"1A",borderColor:P.textMuted+"4D"},toggleTextTrue:{color:P.primary,fontWeight:"600"},toggleTextFalse:{color:P.textSecondary,fontWeight:"500"},booleanRowContainer:{flexDirection:"row",alignItems:"center",width:"100%",gap:8,paddingVertical:2},booleanLabel:{color:P.textSecondary,fontSize:10,fontWeight:"600",fontFamily:qe,letterSpacing:.4,minWidth:60,flexShrink:0},booleanToggleWrapper:{flex:1}});D();ce();import{useState as $c}from"react";import{absoluteFill as Fi,macOSColors as Le}from"@buoy-gg/shared-ui/web";import{jsx as at,jsxs as Oo}from"react/jsx-runtime";function Do({title:e,hint:t,value:r,placeholder:o="Number",min:n,max:i,onSubmit:s,onCancel:l}){let[a,d]=$c(r!=null?String(r):""),b=()=>{let I=a.trim();if(!I){s(null);return}let C=Number(I);if(!Number.isFinite(C)){s(null);return}let S=C;n!=null&&(S=Math.max(n,S)),i!=null&&(S=Math.min(i,S)),s(S)};return Oo(p,{style:Oe.overlay,children:[at(N,{style:Oe.backdrop,activeOpacity:1,onPress:l,"sentry-label":"ignore dismiss number prompt"}),Oo(p,{style:Oe.panel,children:[at(y,{style:Oe.title,children:e}),at(Pt,{style:Oe.input,value:a,onChangeText:d,placeholder:o,placeholderTextColor:Le.text.muted,keyboardType:"number-pad",autoFocus:true,selectTextOnFocus:true,onSubmitEditing:b,returnKeyType:"done","sentry-label":"ignore number prompt input",accessibilityLabel:e}),t?at(y,{style:Oe.hint,children:t}):null,Oo(p,{style:Oe.actions,children:[at(N,{onPress:l,"sentry-label":"ignore cancel number prompt",style:[Oe.button,Oe.cancelButton],children:at(y,{style:Oe.cancelText,children:"Cancel"})}),at(N,{onPress:b,"sentry-label":"ignore save number prompt",style:[Oe.button,Oe.saveButton],children:at(y,{style:Oe.saveText,children:"Set"})})]})]})]})}var Oe=fe.create({overlay:{...Fi,zIndex:40},backdrop:{...Fi,backgroundColor:"rgba(0,0,0,0.6)"},panel:{marginHorizontal:12,marginTop:12,padding:14,borderRadius:10,borderWidth:1,borderColor:Le.border.hover,backgroundColor:Le.background.card,gap:10},title:{fontSize:13,fontWeight:"700",color:Le.text.primary},input:{backgroundColor:Le.background.input,borderWidth:1,borderColor:Le.border.input,borderRadius:6,paddingHorizontal:12,paddingVertical:10,fontSize:16,fontWeight:"700",color:Le.text.primary},hint:{fontSize:10,color:Le.text.muted},actions:{flexDirection:"row",gap:8},button:{flex:1,paddingVertical:10,borderRadius:6,alignItems:"center",borderWidth:1},cancelButton:{borderColor:Le.border.default,backgroundColor:Le.background.base},cancelText:{fontSize:12,fontWeight:"600",color:Le.text.secondary},saveButton:{borderColor:Le.semantic.info,backgroundColor:`${Le.semantic.info}22`},saveText:{fontSize:12,fontWeight:"700",color:Le.semantic.info}});import{Fragment as $i,jsx as V,jsxs as Ce}from"react/jsx-runtime";var jc=["GET","POST","PUT","PATCH","DELETE"],ji=[0,500,1e3,3e3,1e4],Wi=[{id:"500",label:"Server error",code:"500",danger:true,patch:{kind:"respond",status:500,statusText:"Internal Server Error"}},{id:"401",label:"Unauthorized",code:"401",danger:true,patch:{kind:"respond",status:401,statusText:"Unauthorized"}},{id:"404",label:"Not found",code:"404",danger:true,patch:{kind:"respond",status:404,statusText:"Not Found"}},{id:"403",label:"Forbidden",code:"403",danger:true,patch:{kind:"respond",status:403,statusText:"Forbidden"}},{id:"429",label:"Rate limited",code:"429",danger:true,patch:{kind:"respond",status:429,statusText:"Too Many Requests"}},{id:"503",label:"Unavailable",code:"503",danger:true,patch:{kind:"respond",status:503,statusText:"Service Unavailable"}},{id:"400",label:"Bad request",code:"400",danger:true,patch:{kind:"respond",status:400,statusText:"Bad Request"}},{id:"200",label:"Success",code:"200",patch:{kind:"respond",status:200,statusText:"OK"}},{id:"offline",label:"Offline",danger:true,patch:{kind:"fail",failKind:"network"}},{id:"timeout",label:"Timeout",danger:true,patch:{kind:"fail",failKind:"timeout"}},{id:"passthrough",label:"Real response",patch:{kind:"delay"}}];function Wc(e){return e.kind==="delay"?"passthrough":e.kind==="fail"?e.failKind==="timeout"?"timeout":"offline":String(e.status??200)}function Vc({outcome:e,active:t,onPress:r}){let o=e.danger?U.semantic.error:U.semantic.info;return Ce(N,{onPress:r,"sentry-label":"ignore override outcome",testID:`buoy-network-outcome-${e.label.toLowerCase().replace(/\s+/g,"-")}${e.code?`-${e.code}`:""}`,accessibilityRole:"button",accessibilityLabel:`${e.label}${e.code?` ${e.code}`:""}`,style:[M.outcome,t&&{borderColor:o,backgroundColor:`${o}1F`}],children:[V(y,{style:[M.outcomeLabel,t&&{color:o}],children:e.label}),e.code?V(y,{style:[M.outcomeCode,t&&{color:o}],children:e.code}):null]})}function Vi({title:e,summary:t,open:r,onToggle:o,children:n}){return Ce(p,{style:M.disclosure,children:[Ce(N,{onPress:o,"sentry-label":"ignore override disclosure",testID:`buoy-network-disclosure-${e.toLowerCase().replace(/\s+/g,"-")}`,accessibilityRole:"button",accessibilityLabel:e,style:M.disclosureHeader,children:[r?V(Ic,{size:12,color:U.text.muted}):V(Ec,{size:12,color:U.text.muted}),V(y,{style:M.disclosureTitle,children:e}),t&&!r?V(y,{style:M.disclosureSummary,numberOfLines:1,children:t}):null]}),r?V(p,{style:M.disclosureBody,children:n}):null]})}function Mt({label:e,active:t,onPress:r}){return V(N,{onPress:r,"sentry-label":"ignore override chip",testID:`buoy-network-chip-${e.toLowerCase().replace(/\s+/g,"-")}`,accessibilityRole:"button",accessibilityLabel:e,style:[M.chip,t&&M.chipActive],children:V(y,{style:[M.chipText,t&&M.chipTextActive],children:e})})}function Uc({draft:e,onChange:t,onSave:r,onCancel:o,saveLabel:n="Save",applySafeAreaInset:i=false}){let s=Lc({minBottom:16}),l=i?s.bottom:0,a=m=>t({...e,...m}),[d,b]=Nr(!e.urlPattern.trim()),[I,C]=Nr(false),[S,q]=Nr(null),[g,T]=Nr(null),k=Wc(e),f=e.kind==="respond"&&typeof e.status=="number"&&!Wi.some(m=>m.code===String(e.status)),E=e.kind==="respond",z=e.methods?.[0],L=`${z??"Any"} ${e.urlPattern||"No URL yet"}`,w=Di(()=>{let m=(e.body??"").trim();if(!m)return"Empty";let O=m.split(`
|
|
143
|
-
`).length;return`${O} line${O===1?"":"s"}`},[e.body]),H=Di(()=>{let m=(e.body??"").trim();if(!m)return null;try{return JSON.parse(m)}catch{return null}},[e.body]),v=(e.body??"").trim().length>0&&!H,h=e.delayMs??0,c=h>0&&!ji.includes(h),u=!e.alternate&&typeof e.times=="number"&&e.times!==1;return Ce(p,{style:M.root,children:[Ce(ut,{testID:"buoy-network-editor-scroll",style:M.scroll,contentContainerStyle:M.scrollContent,keyboardShouldPersistTaps:"handled",children:[Ce(Vi,{title:"Applies to",summary:L,open:d,onToggle:()=>b(m=>!m),children:[V(Pt,{style:M.input,value:e.urlPattern,onChangeText:m=>a({urlPattern:m}),testID:"buoy-network-override-pattern",accessibilityLabel:"Override URL pattern",placeholder:"https://api.example.com/v1/users*",placeholderTextColor:U.text.muted,autoCapitalize:"none",autoCorrect:false,multiline:true,"sentry-label":"ignore override url pattern"}),Ce(p,{style:M.chipRow,children:[V(Mt,{label:"Any",active:!z,onPress:()=>a({methods:void 0})}),jc.map(m=>V(Mt,{label:m,active:z===m,onPress:()=>a({methods:[m]})},m))]})]}),Ce(p,{style:M.outcomeGrid,children:[Wi.map(m=>V(Vc,{outcome:m,active:k===m.id,onPress:()=>a(m.patch)},m.id)),V(N,{onPress:()=>T("status"),"sentry-label":"ignore custom status",accessibilityLabel:"Custom status code",style:[M.customField,f&&M.customFieldActive],children:V(y,{style:[M.customValue,f&&M.customInputActive],children:f?String(e.status):"Custom"})})]}),E?V(Vi,{title:"Response body",summary:w,open:I,onToggle:()=>C(m=>!m),children:S!==null?Ce($i,{children:[V(Pt,{style:[M.input,M.bodyInput],value:S,onChangeText:q,placeholder:"Paste a new body\u2026",placeholderTextColor:U.text.muted,autoCapitalize:"none",autoCorrect:false,autoFocus:true,multiline:true,"sentry-label":"ignore override body paste"}),Ce(p,{style:M.inlineActions,children:[V(N,{onPress:()=>q(null),"sentry-label":"ignore cancel body paste",style:M.textButton,children:V(y,{style:M.textButtonMuted,children:"Cancel"})}),V(N,{onPress:()=>{let m=S.trim();try{a({body:JSON.stringify(JSON.parse(m),null,2)})}catch{a({body:m})}q(null)},disabled:!S.trim(),"sentry-label":"ignore apply body paste",style:M.textButton,children:V(y,{style:[M.textButtonLabel,!S.trim()&&M.textButtonDisabled],children:"Replace"})})]})]}):Ce($i,{children:[H!==null?V(Ai.Provider,{value:{root:H,onChange:m=>a({body:JSON.stringify(m,null,2)})},children:V(qo,{editable:true,label:"",value:H,defaultExpanded:[""]})}):V(y,{style:M.emptyBody,children:v?"This body isn't JSON, so there's no tree to show.":"No body yet."}),V(N,{onPress:()=>q(""),"sentry-label":"ignore edit all body",style:M.textButton,children:V(y,{style:M.textButtonLabel,children:"Edit all"})})]})}):null,Ce(p,{style:M.field,children:[V(y,{style:M.subLabel,children:"Delay"}),Ce(p,{style:M.chipRow,children:[ji.map(m=>V(Mt,{label:m===0?"None":`${m/1e3}s`,active:h===m,onPress:()=>a({delayMs:m})},m)),V(N,{onPress:()=>T("delay"),"sentry-label":"ignore custom delay",accessibilityLabel:"Custom delay in seconds",style:[M.customField,c&&M.customFieldActive],children:V(y,{style:[M.customValue,c&&M.customInputActive],children:c?`${h/1e3}s`:"Custom"})})]})]}),Ce(p,{style:M.field,children:[V(y,{style:M.subLabel,children:"Fires"}),V(y,{style:M.subHint,children:"A limited rule switches itself off once it's used up. Every other alternates forever \u2014 the first request through, the next overridden."}),Ce(p,{style:M.chipRow,children:[V(Mt,{label:"Always",active:!e.alternate&&e.times==null,onPress:()=>a({alternate:false,times:null})}),V(Mt,{label:"Once",active:!e.alternate&&e.times===1,onPress:()=>a({alternate:false,times:1})}),V(Mt,{label:"Every other",active:e.alternate===true,onPress:()=>a({alternate:true,times:null})}),V(N,{onPress:()=>{a({alternate:false}),T("times")},"sentry-label":"ignore custom times",accessibilityLabel:"Custom number of times",style:[M.customField,u&&M.customFieldActive],children:V(y,{style:[M.customValue,u&&M.customInputActive],children:u?`${e.times}\xD7`:"Custom"})})]})]})]}),g==="status"?V(Do,{title:"Custom status code",hint:`${Ut}\u2013${_t}`,value:f?e.status:void 0,min:Ut,max:_t,onSubmit:m=>{a({kind:"respond",status:m??void 0,statusText:void 0}),T(null)},onCancel:()=>T(null)}):null,g==="delay"?V(Do,{title:"Custom delay",hint:"Seconds",value:c?h/1e3:void 0,min:0,onSubmit:m=>{a({delayMs:m!=null?Math.round(m*1e3):0}),T(null)},onCancel:()=>T(null)}):null,g==="times"?V(Do,{title:"Fires how many times",hint:"Leave empty for always",value:u?e.times:void 0,min:1,onSubmit:m=>{a({alternate:false,times:m&&m>0?m:null}),T(null)},onCancel:()=>T(null)}):null,Ce(p,{style:[M.footer,{paddingBottom:12+l}],children:[V(N,{onPress:o,"sentry-label":"ignore cancel override",testID:"buoy-network-editor-cancel",accessibilityRole:"button",accessibilityLabel:"Cancel",style:[M.footerButton,M.cancelButton],children:V(y,{style:M.cancelText,children:"Cancel"})}),V(N,{onPress:r,disabled:!e.urlPattern.trim(),"sentry-label":"ignore save override",testID:"buoy-network-editor-save",accessibilityRole:"button",accessibilityLabel:n,style:[M.footerButton,M.saveButton,!e.urlPattern.trim()&&M.saveButtonDisabled],children:V(y,{style:M.saveText,children:n})})]})]})}var M=fe.create({root:{flex:1},scroll:{flex:1},scrollContent:{padding:12,paddingBottom:24,gap:4},field:{gap:8,paddingVertical:6},outcomeGrid:{flexDirection:"row",flexWrap:"wrap",gap:6,paddingVertical:10},outcome:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:9,borderRadius:6,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.card},outcomeLabel:{fontSize:12,fontWeight:"600",color:U.text.primary},outcomeCode:{fontSize:10,fontWeight:"700",color:U.text.muted},disclosure:{borderRadius:6,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.card,overflow:"hidden"},disclosureHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:10},disclosureTitle:{fontSize:12,fontWeight:"600",color:U.text.primary},disclosureSummary:{flex:1,textAlign:"right",fontSize:11,color:U.text.muted},disclosureBody:{paddingHorizontal:10,paddingBottom:10,gap:8},input:{backgroundColor:U.background.input,borderWidth:1,borderColor:U.border.input,borderRadius:6,paddingHorizontal:10,paddingVertical:8,color:U.text.primary,fontSize:12,fontFamily:Pc,minHeight:40},bodyInput:{minHeight:140,textAlignVertical:"top"},chipRow:{flexDirection:"row",flexWrap:"wrap",gap:6},chip:{paddingHorizontal:10,paddingVertical:6,borderRadius:5,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.base},chipActive:{borderColor:U.semantic.info,backgroundColor:`${U.semantic.info}1F`},chipText:{fontSize:11,fontWeight:"600",color:U.text.secondary},chipTextActive:{color:U.semantic.info},customField:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,borderRadius:5,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.base},customFieldActive:{borderColor:U.semantic.info,backgroundColor:`${U.semantic.info}1F`},customValue:{paddingVertical:6,fontSize:11,fontWeight:"600",color:U.text.secondary},customInputActive:{color:U.semantic.info},subHint:{fontSize:10,lineHeight:14,color:U.text.muted,marginTop:-2},subLabel:{fontSize:10,fontWeight:"700",letterSpacing:.6,color:U.text.muted,textTransform:"uppercase"},textButton:{alignSelf:"flex-start",paddingVertical:4},textButtonLabel:{fontSize:11,fontWeight:"600",color:U.semantic.info},textButtonMuted:{fontSize:11,fontWeight:"600",color:U.text.secondary},textButtonDisabled:{opacity:.4},inlineActions:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},emptyBody:{fontSize:11,color:U.text.muted,paddingVertical:6},footer:{flexDirection:"row",gap:8,padding:12,borderTopWidth:1,borderTopColor:U.border.default,backgroundColor:U.background.base},footerButton:{flex:1,paddingVertical:11,borderRadius:6,alignItems:"center",borderWidth:1},cancelButton:{borderColor:U.border.default,backgroundColor:U.background.card},cancelText:{fontSize:12,fontWeight:"600",color:U.text.secondary},saveButton:{borderColor:U.semantic.info,backgroundColor:`${U.semantic.info}22`},saveButtonDisabled:{opacity:.4},saveText:{fontSize:12,fontWeight:"700",color:U.semantic.info}});import{jsx as de,jsxs as Rt}from"react/jsx-runtime";function _c(){return{enabled:true,urlPattern:"",kind:"respond",status:500,body:"",times:null}}function Xc(e){let{id:t,hits:r,seen:o,createdAt:n,...i}=e;return i}function Jc(e){let t=e.urlPattern,r=t.indexOf("://");if(r===-1)return t;let o=t.indexOf("/",r+3);return o===-1?t.slice(r+3):t.slice(o)}function Gc(e){let t=[];return e.delayMs&&t.push(`${e.delayMs/1e3}s delay`),e.alternate?t.push("every other"):e.times===1?t.push("once"):typeof e.times=="number"&&t.push(`${e.times}\xD7`),t.join(" \xB7 ")}function Kc(e){if(e.kind==="fail")return Y.semantic.error;if(e.kind==="delay")return Y.semantic.info;let t=e.status??200;return t>=200&&t<300?Y.semantic.success:t>=300&&t<400?Y.semantic.info:Y.semantic.error}function Yc({rule:e,spent:t,onEdit:r,onDelete:o}){let n=e.enabled&&!t,i=Kc(e),s=Gc(e),l=e.methods?.length?e.methods.join("/"):"ANY";return Rt(Sc,{onPress:r,style:se.cardWrapper,contentStyle:[se.card,{borderLeftColor:n?i:"transparent"}],children:[de(wc,{method:l,size:"small"}),Rt(p,{style:se.cardMiddle,children:[de(y,{style:[se.urlText,!n&&se.urlTextOff],numberOfLines:2,children:Jc(e)}),s?de(y,{style:se.extrasText,children:s}):null]}),e.hits>0?de(y,{style:se.rowHits,children:e.hits}):null,e.kind==="fail"?Rt(p,{style:se.failBadge,children:[de(bc,{size:10,color:Y.semantic.error}),de(y,{style:se.failText,children:e.failKind==="timeout"?"TIMEOUT":"OFFLINE"})]}):de(y,{style:[se.statusText,{color:i}],children:e.kind==="delay"?"PASS":String(e.status??200)}),de(N,{onPress:o,"sentry-label":"ignore delete override rule",testID:"buoy-network-rule-delete",accessibilityRole:"button",accessibilityLabel:"Delete rule",hitSlop:{top:8,bottom:8,left:4,right:4},style:se.rowDelete,children:de(Tc,{size:13,color:Y.text.muted})})]})}function Zc(e){return e.visible?de(Qc,{...e}):null}function Qc({isPro:e,onUpgradePress:t,pendingDraft:r,onPendingConsumed:o,backHandlerRef:n,applySafeAreaInset:i}){let s=Rc("network.overrideRules"),l=e?rt:s,{enabled:a,autoPaused:d,rules:b,activeCount:I,setEnabled:C,upsertRule:S,setRuleEnabled:q,removeRule:g,isRuleSpent:T}=Ar(),[k,f]=yc(null);Mr(()=>{_.noteHealthyLaunch()},[]),Mr(()=>{if(n)return n.current=k?()=>(f(null),true):null,()=>{n.current=null}},[n,k]);let E=mc(v=>{_.fetchRuleBody(v).then(h=>{h!=null&&f(c=>c?.id===v?{...c,draft:{...c.draft,body:h,bodyOmitted:void 0}}:c)})},[]);Mr(()=>{if(!r)return;let{id:v,...h}=r;f({id:v,draft:h}),v&&h.bodyOmitted&&E(v),o?.()},[r,o,E]),Mr(()=>{k?.id&&(b.some(v=>v.id===k.id)||f(null))},[k?.id,b]);let z=v=>{f({id:v.id,draft:Xc(v)}),v.bodyOmitted&&E(v.id)},L=v=>{b.filter(h=>h.enabled&&!T(h)).length<=l||b.filter(h=>h.enabled&&!T(h)&&h.id!==v).forEach(h=>q(h.id,false))},w=()=>{if(!k)return;let v={...k.draft,enabled:true,urlPattern:k.draft.urlPattern.trim()};if(!v.urlPattern)return;let h=S({...v,id:k.id});L(h?.id??k.id),C(true),f(null)};if(k)return de(Uc,{draft:k.draft,onChange:v=>f({...k,draft:v}),onSave:w,onCancel:()=>f(null),saveLabel:k.id?"Save":"Add",applySafeAreaInset:i});let H=b.length>0;return Rt(p,{style:se.root,children:[H?Rt(p,{style:[se.bar,a&&I>0&&se.barOn],children:[a&&I>0?de(vc,{size:12,color:Y.semantic.warning}):null,de(y,{style:[se.barText,a&&I>0&&se.barTextOn],numberOfLines:2,children:d?"Overrides paused \u2014 they'd been on for 3 launches":a&&I>0?`${I} override${I===1?" is":"s are"} on`:"Overrides are off"}),de(N,{onPress:()=>C(!(a&&I>0)),"sentry-label":"ignore toggle overrides master",testID:"buoy-network-overrides-master",accessibilityRole:"button",style:se.barButton,children:de(y,{style:se.barButtonText,children:a&&I>0?"Turn all off":d?"Turn back on":"Turn on"})})]}):null,Rt(p,{style:se.listHeader,children:[de(y,{style:se.listHeaderText,children:H?`${b.length} rule${b.length===1?"":"s"}`:""}),de(N,{onPress:()=>f({draft:_c()}),"sentry-label":"ignore new override rule",accessibilityLabel:"New override rule",style:se.newButton,children:de(Cc,{size:14,color:Y.semantic.info})})]}),H?Rt(ut,{style:se.list,contentContainerStyle:se.listContent,keyboardShouldPersistTaps:"handled",children:[b.map(v=>de(Yc,{rule:v,spent:T(v),onEdit:()=>z(v),onDelete:()=>g(v.id)},v.id)),l<rt?de(y,{style:se.footNote,children:`Your plan: ${l} override at a time. Pro: up to ${rt}.`}):null]}):de(p,{style:se.emptyWrap,children:de(xc,{otto:"empty",iconSize:32,title:"Nothing overridden",description:"Open any request and tap Override, or + to write a rule."})})]})}var se=fe.create({root:{flex:1},bar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,borderBottomWidth:1,borderBottomColor:Y.border.default,backgroundColor:Y.background.card},barOn:{borderBottomColor:Y.semantic.warning+"44",backgroundColor:Y.semantic.warningBackground},barText:{flex:1,fontSize:12,fontWeight:"600",color:Y.text.secondary},barTextOn:{color:Y.semantic.warning},barButton:{paddingHorizontal:10,paddingVertical:6,borderRadius:5,borderWidth:1,borderColor:Y.border.hover,backgroundColor:Y.background.base},barButtonText:{fontSize:11,fontWeight:"700",color:Y.text.primary},listHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingTop:10,paddingBottom:4},listHeaderText:{fontSize:10,fontWeight:"700",letterSpacing:.6,color:Y.text.muted,textTransform:"uppercase"},newButton:{padding:6,borderRadius:5,borderWidth:1,borderColor:Y.border.default,backgroundColor:Y.background.card},emptyWrap:{flex:1,justifyContent:"center"},list:{flex:1},listContent:{padding:10,gap:6},cardWrapper:{marginHorizontal:0,marginVertical:0},card:{flexDirection:"row",alignItems:"center",gap:8,borderLeftWidth:3,borderLeftColor:"transparent"},cardMiddle:{flex:1},urlText:{fontSize:12,color:Y.text.primary,lineHeight:16,fontFamily:kc},urlTextOff:{color:Y.text.muted},extrasText:{fontSize:10,color:Y.text.secondary,marginTop:2},statusText:{fontSize:11,fontWeight:"600"},failBadge:{flexDirection:"row",alignItems:"center",gap:2,paddingHorizontal:4,paddingVertical:1,backgroundColor:Y.semantic.error+"26",borderRadius:3},failText:{fontSize:10,color:Y.semantic.error,fontWeight:"600"},rowHits:{fontSize:11,fontWeight:"700",color:Y.semantic.warning},rowDelete:{padding:5,borderRadius:5,borderWidth:1,borderColor:Y.border.default,backgroundColor:Y.background.base},footNote:{fontSize:10,lineHeight:14,color:Y.text.muted,paddingHorizontal:4,paddingTop:8}});D();ce();import{FlaskConical as eh,night as kt}from"@buoy-gg/shared-ui/web";import{jsx as zo,jsxs as th}from"react/jsx-runtime";function rh({onPress:e}){let{activeCount:t}=Ar(),r=t>0;return th(N,{onPress:e,"sentry-label":"ignore open overrides",testID:"buoy-network-overrides",accessibilityRole:"button",style:[Ur.button,r&&Ur.buttonActive],accessibilityLabel:r?`Response overrides \u2014 ${t} active`:"Response overrides",children:[zo(eh,{size:14,color:r?kt.color.warning:kt.color.textSecondary}),r?zo(p,{style:Ur.badge,children:zo(y,{style:Ur.badgeText,children:t})}):null]})}var Ur=fe.create({button:{width:32,height:32,borderRadius:8,alignItems:"center",justifyContent:"center",backgroundColor:kt.color.buttonSurface,borderWidth:1,borderColor:kt.color.border},buttonActive:{backgroundColor:kt.color.warningSoft,borderColor:kt.color.warning+"77"},badge:{position:"absolute",top:1,right:1,minWidth:12,height:12,borderRadius:6,paddingHorizontal:3,alignItems:"center",justifyContent:"center",backgroundColor:kt.color.warning},badgeText:{fontSize:8,fontWeight:"800",color:"#000000"}});D();ce();import{night as Nt}from"@buoy-gg/shared-ui/web";D();function oh(e){let t=e.indexOf("?");return t===-1?e:`${e.slice(0,t)}*`}function nh(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return""}}function Ao(e){return{enabled:true,name:void 0,urlPattern:oh(e.url),methods:[String(e.method||"GET").toUpperCase()],kind:"respond",status:e.status&&e.status>=200?e.status:200,statusText:e.statusText,body:nh(e.responseData),times:null}}import{jsx as Ui}from"react/jsx-runtime";function ih({onOpen:e}){let t=Ro(),{rules:r,isRuleSpent:o}=Ar(),n=t?K.getEvents().find(l=>l.id===t)??ae.getEventById(t):null,i=n?r.find(l=>l.enabled&&!o(l)&&lo(l,n.url,String(n.method||"GET")))??null:null,s=i!==null;return Ui(N,{onPress:()=>{if(n){if(i){let{id:l,hits:a,seen:d,createdAt:b,...I}=i;e(I,l);return}e(Ao(n))}},"sentry-label":"ignore open overrides",testID:"buoy-network-override-request",accessibilityRole:"button",accessibilityLabel:s?"Edit the override on this request":"Override this request",style:[_r.button,s&&_r.buttonActive],children:Ui(y,{style:[_r.label,s&&_r.labelActive],children:"Override"})})}var _r=fe.create({button:{paddingHorizontal:10,paddingVertical:6,borderRadius:8,borderWidth:1,borderColor:Nt.color.border,backgroundColor:Nt.color.buttonSurface},buttonActive:{borderColor:Nt.color.warning+"77",backgroundColor:Nt.color.warningSoft},label:{fontSize:11,fontWeight:"700",color:Nt.color.accent},labelActive:{color:Nt.color.warning}});D();ce();import{absoluteFill as _i,night as lt}from"@buoy-gg/shared-ui/web";import{jsx as Qe,jsxs as Xr}from"react/jsx-runtime";function sh({onPress:e,isOpen:t,hasIndicator:r}){return Xr(N,{onPress:e,"sentry-label":"ignore toggle header menu",testID:"buoy-network-menu",accessibilityRole:"button",accessibilityLabel:t?"Close menu":"More actions",style:[xe.button,t&&xe.buttonOpen],children:[Xr(p,{style:xe.dots,children:[Qe(p,{style:[xe.dot,t&&xe.dotOpen]}),Qe(p,{style:[xe.dot,t&&xe.dotOpen]}),Qe(p,{style:[xe.dot,t&&xe.dotOpen]})]}),r?Qe(p,{style:xe.indicator}):null]})}function ah({onClose:e,children:t}){return Xr(p,{style:xe.overlay,children:[Qe(N,{style:xe.backdrop,activeOpacity:1,onPress:e,"sentry-label":"ignore dismiss header menu"}),Qe(p,{style:xe.panel,children:t})]})}function Ho({icon:e,label:t,detail:r,testID:o,onPress:n}){return Xr(N,{onPress:n,"sentry-label":"ignore header menu item",testID:o,accessibilityRole:"button",accessibilityLabel:t,style:xe.item,children:[Qe(p,{style:xe.itemIcon,children:e}),Qe(y,{style:xe.itemLabel,children:t}),r?Qe(y,{style:xe.itemDetail,children:r}):null]})}var xe=fe.create({button:{width:32,height:32,borderRadius:8,alignItems:"center",justifyContent:"center"},buttonOpen:{backgroundColor:lt.color.surfaceElevated},dots:{flexDirection:"column",gap:2.5,alignItems:"center"},dot:{width:3,height:3,borderRadius:2,backgroundColor:lt.color.textSecondary},dotOpen:{backgroundColor:lt.color.text},indicator:{position:"absolute",top:6,right:8,width:6,height:6,borderRadius:3,backgroundColor:lt.color.accent},overlay:{..._i,zIndex:50},backdrop:{..._i,backgroundColor:"rgba(0,0,0,0.5)"},panel:{position:"absolute",top:6,right:8,minWidth:196,paddingVertical:4,borderRadius:10,borderWidth:1,borderColor:lt.color.border,backgroundColor:lt.color.surface},item:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},itemIcon:{width:16,alignItems:"center"},itemLabel:{flex:1,fontSize:13,fontWeight:"600",color:lt.color.text},itemDetail:{fontSize:11,color:lt.color.textTertiary}});D();import{memo as lh,useEffect as dh,useMemo as uh}from"react";import{EventStepperFooter as ch,useLimit as hh}from"@buoy-gg/shared-ui/web";import{jsx as ph}from"react/jsx-runtime";var fh=()=>Ve.step(-1),gh=()=>Ve.step(1),mh=lh(function({paused:e,filter:t,ignoredPatterns:r,isPro:o,fromSaved:n,savedSearch:i,applySafeAreaInset:s}){let{visibleEvents:l}=sr({filter:t,ignoredPatterns:r,paused:e,isPro:o}),{pinnedEvents:a,pinnedLiveIds:d,savedRecords:b}=Ot(),I=hh("network.saved"),C=uh(()=>{if(n)return qi(b,I,i).events;let{pinned:g,rest:T}=Eo(l,a,d);return g.length===0?T:[...g,...T]},[n,b,i,o,l,a,d]);dh(()=>{Ve.setIds(ru(C))},[C]);let{index:S,total:q}=iu();return S<0?null:ph(ch,{currentIndex:S,totalItems:q,itemLabel:"Request",applySafeAreaInset:s,onPrevious:fh,onNext:gh,variant:"night"})});D();import{useEffect as yh,useState as bh}from"react";function vh(e){return K.getEvents().find(t=>t.id===e)??ae.getEventById(e)}function Xi(e,t={}){let{paused:r=false}=t,[o,n]=bh(null);return yh(()=>{if(!(!e||r))return K.subscribeToEvents(i=>{let s=i.find(l=>l.id===e);s&&n(l=>l&&l.id===e&&l.event===s?l:{id:e,event:s})})},[e,r]),e?o&&o.id===e?o.event:vh(e):null}import{Fragment as Sh,jsx as $,jsxs as Ne}from"react/jsx-runtime";function xh({visible:e,paused:t,ignoredPatternValues:r,onTogglePattern:o,isPro:n,filter:i,ignoredPatterns:s,fromSaved:l,savedSearch:a,applySafeAreaInset:d}){let b=Ro(),I=nu(),C=b!=null&&b===I,S=Xi(b,{paused:t||!e});return yt(()=>{e&&S&&C&&Ve.reportRendered(S.id)},[e,S,C]),e?Ne(p,{style:It.detailRoot,children:[S?$(ri,{event:S,ignoredPatterns:r,onTogglePattern:o,showBodies:C}):$(p,{style:It.detailBodyFallback}),$(mh,{paused:t,filter:i,ignoredPatterns:s,isPro:n,fromSaved:l,savedSearch:a,applySafeAreaInset:d})]}):null}function wh({visible:e,paused:t,isPro:r,filter:o,onFilterChange:n,ignoredPatterns:i,onRemovePattern:s,onAddPattern:l,onTogglePatternMode:a,isTeamPattern:d}){let{events:b}=sr({filter:o,ignoredPatterns:i,paused:t,visible:e,isPro:r});return e?$($l,{events:b,filter:o,onFilterChange:n,ignoredPatterns:i,onRemovePattern:s,onAddPattern:l,onTogglePatternMode:a,isTeamPattern:d}):null}function Ch({visible:e,paused:t,isPro:r,filter:o,ignoredPatterns:n,settings:i,onSettingsChange:s}){let{events:l}=sr({filter:o,ignoredPatterns:n,paused:t,visible:e,isPro:r});return e?$(Ld,{settings:i,onSettingsChange:s,events:l}):null}function Ji({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,inline:i=false,paused:s,onPausedChange:l,remoteConditions:a}){let{isPro:d}=Cl(),[b,I]=me(false),C=s!=null&&l!=null,S=C?s:b,q=Q=>{let De=typeof Q=="function"?Q(S):Q;C?l(De):I(De)},[g,T]=me({}),k=ou(),[f,E]=me(false),[z,L]=me(false),[w,H]=me(false),[v,h]=me(false),[c,u]=me(0),[m]=me(hl);yt(()=>{m.update(a)},[m,a]),yt(()=>()=>m.update(void 0),[m]);let O=true,[re,Z]=me(null),[ee,G]=me("filters"),[A,W]=me(""),[F,ne]=me(false),pe=wr(false),[tt,dt]=me(""),ns=wr(null),{patterns:Et,values:is,add:ss,remove:as,toggle:ls,toggleMode:ds,isTeamOnly:us}=kl(),[$t,_o]=me(Td),Zr=wr(false),[Qr,eo]=me(false),[Lt,cs]=me("export"),jt=Q=>{cs(Q),eo(true)};yt(()=>{Qr&&d&&eo(false)},[Qr,d]),yt(()=>{if(!e||Zr.current)return;(async()=>{try{let Q=await Fn.getItem(Cr.network.copyOptions());if(Q){let De=JSON.parse(Q);_o(De)}}catch{}finally{Zr.current=true}})()},[e]),yt(()=>{if(!Zr.current)return;(async()=>{try{await Fn.setItem(Cr.network.copyOptions(),JSON.stringify($t))}catch{}})()},[$t]);let hs=()=>{Ve.clear()},Xo=go(Q=>{Ve.select(Q.id)},[]),ps=go((Q,De)=>{Z(De?{...Q,id:De}:Q),H(true),Ve.clear()},[]),fs=go(()=>Z(null),[]),Jo=wr(null),Go=Q=>{W(Q),T(De=>({...De,searchText:Q}))},gs=Q=>{T(De=>({...De,status:De.status===Q?void 0:Q}))},[Ko,ms]=me("bottomSheet"),ys=Q=>{ms(Q)};yt(()=>{F&&requestAnimationFrame(()=>{ns.current?.focus()})},[F]);let Yo=()=>f?Ne(ge,{children:[$(ge.Navigation,{onBack:()=>E(false)}),$(ge.Content,{title:"",noMargin:true,children:$(wl,{size:"sm",tabs:[{key:"filters",label:"Filters"},{key:"copy",label:"Copy"}],activeKey:ee,onChange:Q=>G(Q)})})]}):k?Ne(ge,{children:[$(ge.Navigation,{onBack:hs}),$(ge.Content,{title:"Request Details",centered:true}),Ne(ge.Actions,{children:[O?$(ih,{onOpen:ps}):null,$(ki,{isPro:d,onUpgradePress:()=>jt("saved")})]})]}):w&&O?Ne(ge,{children:[$(ge.Navigation,{onBack:()=>{Jo.current?.()||(H(false),Z(null))}}),$(ge.Content,{title:"Response Overrides",centered:true})]}):z?Ne(ge,{children:[$(ge.Navigation,{onBack:()=>L(false)}),$(ge.Content,{title:"Saved Requests",centered:true})]}):Ne(ge,{children:[r&&$(ge.Navigation,{onBack:r}),$(ge.Content,{title:"",children:F?$(ge.Search,{value:A,onChangeText:Go,onCancel:()=>{Go(""),ne(false)},onDismiss:()=>ne(false),dismissOnBlur:true,clearOnlyWhenText:true,placeholder:"Search URL, method, operation, error...",accessibilityLabel:"Search network requests",iconSize:14,testID:"buoy-network-search-input",clearTestID:"buoy-network-search-clear",inputProps:{"sentry-label":"ignore network search header"}}):$(hu,{activeStatus:g.status,onToggleStatus:gs,ignoredPatterns:Et,paused:S})}),Ne(ge.Actions,{children:[$(N,{"sentry-label":"ignore open search",testID:"buoy-network-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",onPress:()=>ne(true),style:It.headerActionButton,children:$(ml,{size:14,color:Ke.color.textSecondary})}),O?$(rh,{onPress:()=>H(true)}):null,$(Rl,{isEnabled:!S,onToggle:()=>q(Q=>!Q),accessibilityLabel:S?"Resume network capture":"Pause network capture",testID:"buoy-network-power"}),$(pu,{paused:S}),$(sh,{onPress:()=>h(Q=>!Q),isOpen:v,hasIndicator:to})]})]}),to=!!(g.status||g.method||g.contentType),bs=n?Cr.modal.root():Cr.network.modal();if(!e)return null;let vs=k||!f,Zo=Ne(Sh,{children:[Ne(p,{style:It.container,children:[$(xh,{visible:k,paused:S,ignoredPatternValues:is,onTogglePattern:ls,isPro:d,filter:g,ignoredPatterns:Et,fromSaved:z,savedSearch:tt,applySafeAreaInset:!i&&Ko==="bottomSheet"}),$(wh,{visible:f&&ee==="filters"&&!k,paused:S,isPro:d,filter:g,onFilterChange:T,ignoredPatterns:Et,onRemovePattern:as,onAddPattern:ss,onTogglePatternMode:ds,isTeamPattern:us}),$(Ch,{visible:f&&ee==="copy"&&!k,paused:S,isPro:d,filter:g,ignoredPatterns:Et,settings:$t,onSettingsChange:_o}),$(Zc,{visible:O&&w&&!k&&!f,isPro:d,onUpgradePress:()=>jt("overrides"),pendingDraft:re,onPendingConsumed:fs,backHandlerRef:Jo,applySafeAreaInset:!i&&Ko==="bottomSheet"}),$(Oi,{visible:z&&!k&&!f&&!(w&&O),isPro:d,copySettings:$t,search:tt,onSearchChange:dt,onEventPress:Xo,onUpgradePress:()=>jt("saved")}),$(ic,{visible:!k&&!f&&!z&&!(w&&O),paused:S,filter:g,ignoredPatterns:Et,isPro:d,searchText:A,onEventPress:Xo,onUpgradePress:()=>jt("export")})]}),v?Ne(ah,{onClose:()=>h(false),children:[$(Ho,{icon:$(yl,{size:14,color:Ke.color.textSecondary}),label:"Network throttling",testID:"buoy-network-menu-throttling",onPress:()=>{h(false),gl(a?m:void 0),i||u(Q=>Q+1)}}),$(Ho,{icon:$(bl,{size:14,color:to?Ke.color.accent:Ke.color.textSecondary}),label:"Filters",detail:to?"Active":void 0,onPress:()=>{h(false),G("filters"),E(true)}}),$(Ho,{icon:$(vl,{size:14,color:Ke.color.textSecondary}),label:"Saved requests",onPress:()=>{h(false),L(true)}}),$(p,{style:It.menuCopyRow,children:$(gu,{isPro:d,filter:g,ignoredPatterns:Et,copySettings:$t,paused:S,onUpgradePress:()=>{h(false),jt("export")},label:"Copy requests"})})]}):null,$(Tl,{visible:Qr,onClose:()=>eo(false),featureName:Lt==="saved"?"Saved Requests":Lt==="overrides"?"Response Overrides":"Network Export",description:Lt==="saved"?"Keep the requests that matter. Saved requests survive Clear, app restarts, and the 500-request history cap.":Lt==="overrides"?"Force any endpoint to fail, stall or return something else \u2014 no backend changes, no code changes. Free keeps one active rule.":"Export network requests to share with your team, debug APIs, or feed into AI tools.",benefits:Lt==="overrides"?[`Run ${rt} rules at once (free keeps ${wn})`,"Force a 500, a 401 or an empty list in one tap","Simulate offline, timeouts and slow connections","Rules survive an app reload, so you can test the boot path"]:Lt==="saved"?[`Save up to ${it} requests (free keeps ${fi})`,"Failed requests stay put through a Clear","Snapshots survive an app restart","Export saved requests to teammates or AI assistants"]:["Export to JSON, Markdown, or plain text","Customizable copy presets (URLs only, LLM-ready, full data)","Share request details with teammates","Feed network data directly to AI assistants"]})]});return i?Ne(p,{style:It.inlineRoot,children:[$(p,{style:It.inlineHeader,...Il,children:Yo()}),Zo]}):$(Sl,{visible:e,onClose:t,onMinimize:o,minimizeRequest:c,persistenceKey:bs,variant:"night",header:{showToggleButton:true,customContent:Yo()},onModeChange:ys,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,disableScrollWrapper:vs,styles:{},children:Zo})}var It=fe.create({container:{flex:1,backgroundColor:"transparent"},detailRoot:{flex:1,minHeight:0},detailBodyFallback:{flex:1},inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:xl.border.default,backgroundColor:"transparent"},menuCopyRow:{paddingHorizontal:6},headerActionButton:{width:32,height:32,borderRadius:8,backgroundColor:Ke.color.buttonSurface,borderWidth:1,borderColor:Ke.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:Ke.color.accentSoft,borderColor:Ke.color.accentBorderStrong}});function Gi(e){return $(bo,{children:$(Ji,{...e})})}function Th(e={}){return $(bo,{children:$(Ji,{...e,inline:true,visible:true,onClose:Rh})})}var Rh=()=>{};import{jsx as kh}from"react/jsx-runtime";var Ki=typeof navigator<"u"&&navigator.product==="ReactNative";Ki&&_.ensureLoaded();Ki&&typeof Te<"u"&&Te&&K.startBootCapture();var Yi=al({id:"network",name:"NET",description:"Network request logger",slot:"both",icon:({size:e})=>kh(il,{size:e}),component:Gi,props:{enableSharedModalDimensions:false}}),Ih=sl(Yi,e=>({enableSharedModalDimensions:e.enableSharedModalDimensions??false}));D();function Eh(){if(!(typeof navigator<"u"&&navigator.product==="ReactNative")&&(typeof window>"u"||typeof document>"u"))return()=>{};_.ensureLoaded();let e=K.subscribeToEvents(()=>{}),t=false;return()=>{t||(t=true,e())}}D();import{useState as Mo,useEffect as Lh,useCallback as Jr,useMemo as et,useRef as Ph}from"react";import{useLimit as Bh,TIER_LIMITS as qh}from"@buoy-gg/shared-ui/web";var jf=qh["network.requests"].free;function Oh(e={}){let{isPro:t=false}=e,r=Bh("network.requests"),o=t?1/0:r,[n,i]=Mo([]),[s,l]=Mo({}),[a,d]=Mo(true),b=Ph(null);Lh(()=>(a&&(b.current=K.subscribeToEvents(i)),()=>{b.current&&(b.current(),b.current=null)}),[a]);let I=Jr(()=>{K.clearEvents(),i([])},[]),C=Jr(()=>{d(false)},[]),S=Jr(()=>{d(true)},[]),q=et(()=>s.searchText?s.searchText.toLowerCase():null,[s.searchText]),g=et(()=>s.method&&s.method.length>0?new Set(s.method):null,[s.method]),T=et(()=>s.contentType&&s.contentType.length>0?new Set(s.contentType):null,[s.contentType]),k=et(()=>{let c=[...n];if(g&&(c=c.filter(u=>g.has(u.method))),s.status&&s.status!=="all")switch(s.status){case"success":c=c.filter(u=>u.status&&u.status>=200&&u.status<300);break;case"error":c=c.filter(u=>u.error||u.status&&u.status>=400);break;case"pending":c=c.filter(u=>!u.status&&!u.error);break}return q&&(c=c.filter(u=>u.url.toLowerCase().includes(q)||u.method.toLowerCase().includes(q)||u.path?.toLowerCase().includes(q)||u.host?.toLowerCase().includes(q)||u.error&&u.error.toLowerCase().includes(q)||u.operationName&&u.operationName.toLowerCase().includes(q)||Qn(u.graphqlVariables,q))),s.host&&(c=c.filter(u=>u.host===s.host)),T&&(c=c.filter(u=>{let m=u.responseHeaders||u.requestHeaders,O=m?.["content-type"]||m?.["Content-Type"]||"";for(let re of T)switch(re){case"JSON":if(O.includes("json"))return true;break;case"XML":if(O.includes("xml"))return true;break;case"HTML":if(O.includes("html"))return true;break;case"TEXT":if(O.includes("text"))return true;break;case"IMAGE":if(O.includes("image"))return true;break;case"VIDEO":if(O.includes("video"))return true;break;case"AUDIO":if(O.includes("audio"))return true;break;case"FORM":if(O.includes("form"))return true;break;case"OTHER":if(!O||!O.includes("json")&&!O.includes("xml")&&!O.includes("html")&&!O.includes("text")&&!O.includes("image")&&!O.includes("video")&&!O.includes("audio")&&!O.includes("form"))return true;break}return false})),c},[n,s,q,g,T]),f=et(()=>{let c=new Set;return n.slice(o).forEach(u=>{c.add(u.id)}),c},[n,o]),E=et(()=>k.filter(c=>f.has(c.id)),[k,f]),z=E.length>0,L=E.length,w=Jr(c=>f.has(c),[f]),H=et(()=>{let c=0,u=0,m=0,O=0,re=0,Z=0,ee=0;for(let A of n)A.status&&A.status>=200&&A.status<300?c++:A.error||A.status&&A.status>=400?u++:!A.status&&!A.error&&m++,O+=A.requestSize||0,re+=A.responseSize||0,A.duration&&(Z+=A.duration,ee++);let G=ee>0?Z/ee:0;return{totalRequests:n.length,successfulRequests:c,failedRequests:u,pendingRequests:m,totalDataSent:O,totalDataReceived:re,averageDuration:Math.round(G)}},[n]),v=et(()=>{let c=new Set;for(let u of n)u.host&&c.add(u.host);return Array.from(c)},[n]),h=et(()=>{let c=new Set;for(let u of n)c.add(u.method);return Array.from(c)},[n]);return{events:k,allEvents:n,stats:H,filter:s,setFilter:l,clearEvents:I,isCapturing:a,pauseCapturing:C,resumeCapturing:S,hosts:v,methods:h,hasLockedEvents:z,lockedEventCount:L,isEventLocked:w,requestLimit:o,getSubscriberCounts:()=>K.getSubscriberCounts()}}import{useIgnoredPatterns as Dh,ignoredPatternsStore as zh,urlMatchesIgnoredPattern as Ah,isUrlIgnored as Hh}from"@buoy-gg/shared-ui/web";D();import{approxJsonSize as No,isOverWireBudget as Mh}from"@buoy-gg/shared-ui/web";import{expandKeyedArrays as Nh,patchFromPath as Fh,refusalText as $h,shapeKind as Zi,suggestedPatch as jh,typedEditViolations as Wh}from"@buoy-gg/shared-ui/web";var Fo=16*1024,Gr=1.25*1024*1024;function $o(e,t){return e===void 0?false:(t??0)>Fo?true:Mh(e,Fo)}var Qi=new WeakMap,es=new WeakMap;function jo(e){let t=Qi.get(e);if(t)return t;let r;try{r=Uh(e)}catch{r=Vh(e)}return Qi.set(e,r),r}function Vh(e){let t={...e,requestData:void 0,responseData:void 0,graphqlVariables:void 0,requestBodyOmitted:e.requestData!==void 0?true:void 0,responseBodyOmitted:e.responseData!==void 0?true:void 0},r=1024;try{r=No(t,Gr).bytes}catch{}return{event:t,bytes:r}}function Uh(e){let t=$o(e.requestData,e.requestSize),r=$o(e.responseData,e.responseSize),o=ts(e.graphqlVariables),n=rs(e.requestHeaders),i=rs(e.responseHeaders),s=t||r||o!==e.graphqlVariables||n!==e.requestHeaders||i!==e.responseHeaders,l=e;return s&&(l={...e},t&&(l.requestData=void 0,l.requestBodyOmitted=true),r&&(l.responseData=void 0,l.responseBodyOmitted=true),o!==e.graphqlVariables&&(l.graphqlVariables=o),n!==e.requestHeaders&&(l.requestHeaders=n,l.headersOmitted=true),i!==e.responseHeaders&&(l.responseHeaders=i,l.headersOmitted=true)),{event:l,bytes:No(l,Gr).bytes}}function _h(e){let t=es.get(e);if(t)return t;let{event:r}=jo(e),o={...r};o.requestData!==void 0&&(o.requestData=void 0,o.requestBodyOmitted=true),o.responseData!==void 0&&(o.responseData=void 0,o.responseBodyOmitted=true),o.graphqlVariables!==void 0&&(o.graphqlVariables=ts(o.graphqlVariables,true));let n={event:o,bytes:No(o,Gr).bytes};return es.set(e,n),n}function Xh(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=jo(e[o]);if(r+n.bytes<=Gr)t[o]=n.event,r+=n.bytes;else{let i=_h(e[o]);t[o]=i.event,r+=i.bytes}}return t}function ts(e,t=false){if(!e||!t&&!$o(e,void 0))return e;let r={};for(let[o,n]of Object.entries(e))(typeof n=="string"&&n.length<=64||typeof n=="number"||typeof n=="boolean")&&(r[o]=n);return Object.keys(r).length>0?r:void 0}var Wo=64;function rs(e){if(!e)return e;let t=false,r={};for(let[o,n]of Object.entries(e))typeof n=="string"&&(n.length<=Wo?r[o]=n:(r[o]=`${n.slice(0,Wo)}\u2026 [${n.length-Wo} more]`,t=true));return t?r:e}var Jh=e=>{let t=false,r=e.rules.map(o=>!o.body||o.body.length<=Fo?o:(t=true,{...o,body:void 0,bodyOmitted:true}));return t?{...e,rules:r}:e},Kr=e=>K.getEventById(e)??ae.getEventById(e),Ft=e=>e&&typeof e=="object"?e.id:void 0,Yr=(e,t)=>!!(e&&typeof e=="object"&&e[t]),Vo=()=>Rn()?{}:{active:false,inactiveReason:$a},Gh=["respond","fail","delay"];function Kh(e,t){if(!e||typeof e!="object")return null;let r=e.rule??e;if(!r||typeof r!="object")return null;let o=r,n=typeof o.urlPattern=="string"&&o.urlPattern.trim()?o.urlPattern.trim():t?.urlPattern??"";if(!n)return null;let i=Gh.includes(o.kind)?o.kind:t?.kind??"respond";return{id:typeof o.id=="string"?o.id:void 0,enabled:o.enabled!==false,name:typeof o.name=="string"?o.name:t?.name,urlPattern:n,methods:Array.isArray(o.methods)?o.methods.filter(s=>typeof s=="string").map(s=>s.toUpperCase()):t?.methods,requireHeader:typeof o.requireHeader=="string"&&o.requireHeader.trim()?o.requireHeader.trim():void 0,kind:i,status:typeof o.status=="number"?o.status:t?.status,statusText:typeof o.statusText=="string"?o.statusText:t?.statusText,headers:o.headers&&typeof o.headers=="object"?o.headers:t?.headers,body:Zh(o,t),failKind:o.failKind==="timeout"?"timeout":void 0,delayMs:typeof o.delayMs=="number"?o.delayMs:void 0,times:typeof o.times=="number"?o.times:null,alternate:o.alternate===true}}var dr=e=>!!e&&typeof e=="object"&&!Array.isArray(e);function os(e,t,r="",o={shrunk:[],breaks:[]}){if(Array.isArray(e)&&Array.isArray(t))return t.length>0&&t.length<e.length&&o.shrunk.push({path:r||"(root)",have:e.length,sent:t.length}),t;if(!dr(e)||!dr(t))return t;let n={...e};for(let[i,s]of Object.entries(t)){let l=r?`${r}.${i}`:i;if(i in e){let a=Zi(e[i]),d=Zi(s);(a==="array"||a==="object")&&a!==d&&o.breaks.push({path:l,from:a,to:d}),n[i]=os(e[i],s,l,o)}else n[i]=s}return n}function Yh(e,t){if(e.body!=null||!dr(e.bodyPatch)||typeof t!="string")return[];try{return Wh(JSON.parse(t),e.bodyPatch,{noun:"response body"})}catch{return[]}}function Zh(e,t){if(typeof e.body=="string")return e.body;if(e.body!=null)return JSON.stringify(e.body,null,2);let r=t?.body??(typeof e.id=="string"?_.getState().rules.find(o=>o.id===e.id)?.body:void 0);if(dr(e.bodyPatch)&&typeof r=="string")try{return JSON.stringify(os(JSON.parse(r),e.bodyPatch),null,2)}catch{return r}return r}function Qh(e){if(!e||typeof e!="object")return null;let t=e.rule??e;if(!t||typeof t!="object")return null;let r=t.id;if(typeof r!="string")return null;let o=_.getState().rules.find(n=>n.id===r);return o?{...o}:null}function ep(e){if(!e||typeof e!="object")return null;let t=e.rule??e;if(!t||typeof t!="object")return null;let r=t;if(r.bodyOmitted!==true||typeof r.id!="string")return null;let o=_.getState().rules.find(n=>n.id===r.id);return o?{body:o.body}:null}function tp(e){if(!e||typeof e!="object")return null;let t=e.fromRequestId;if(typeof t!="string"||!t)return null;let r=Kr(t);return r?Ao(r):null}var rp={dispose:()=>{_.setEnabled(false)},version:6,getSnapshot:()=>(K.ensureInterception(),{conditions:{version:1,runtimeId:ho,profile:mt(),available:gt()},events:Xh(K.getEvents()),overrides:Jh(_.getState()),saved:ae.getRecords().map(e=>({...e,event:jo(e.event).event}))}),subscribe:e=>{let t=K.subscribeToEvents(e),r=Kt(e),o=ae.subscribe(e),n=_.subscribe(e);return()=>{r(),t(),o(),n()}},actions:{getNetworkConditions:()=>({runtimeId:ho,profile:mt(),available:gt()}),setNetworkConditions:e=>{let t=e&&typeof e=="object"?e.profile:void 0;return{runtimeId:ho,profile:Sr(t),available:gt()}},clearEvents:()=>{K.clearEvents()},getEventBody:e=>{let t=Ft(e);if(!t)return null;let r=Kr(t);return r?{url:r.url??null,method:r.method??null,status:r.status??null,override:r.override??null,requestData:r.requestData??null,responseData:r.responseData??null,requestHeaders:r.requestHeaders??null,responseHeaders:r.responseHeaders??null}:null},setPinned:e=>{let t=Ft(e);if(!t)return null;let r=Kr(t);if(!r)return null;let o=Yr(e,"pinned");return Pr(ae.getState(),t).pinned===o?{ok:true}:ae.togglePin(r)},setSaved:e=>{let t=Ft(e);if(!t)return null;let r=Kr(t);if(!r)return null;let o=Yr(e,"saved");return Pr(ae.getState(),t).saved===o?{ok:true}:ae.toggleSave(r)},removeSavedRecord:e=>{let t=e&&typeof e=="object"?e.key:void 0;return t?(ae.remove(t),{ok:true}):null},clearSavedRequests:()=>(ae.clearSaved(),{ok:true}),clearPinnedRequests:()=>(ae.clearPinned(),{ok:true}),setOverridesEnabled:e=>(_.setEnabled(Yr(e,"enabled")),{ok:true,enabled:_.getState().enabled,...Vo()}),upsertOverrideRule:e=>{let t=tp(e)??ep(e)??Qh(e),r=e?.rule??e;if(r&&typeof r.bodyPath=="string"&&r.body==null){let i=t?.body??(typeof r.id=="string"?_.getState().rules.find(a=>a.id===r.id)?.body:void 0);if(typeof i!="string")return{ok:false,error:"bodyPath needs something to patch: send fromRequestId (the captured request whose real response it addresses) or the id of an existing rule."};if(r.bodyValue===void 0)return{ok:false,error:`Refused: sent \`bodyPath\` without \`bodyValue\`. Say what to set "${r.bodyPath}" to.`};let s;try{s=JSON.parse(i)}catch{return{ok:false,error:"The captured response body is not JSON, so it cannot be addressed by path. Send a whole `body` instead."}}let l=Fh(s,r.bodyPath,r.bodyValue);if(!l.ok)return{ok:false,error:`Refused: ${l.error}`};r.bodyPatch=l.patch,delete r.bodyPath,delete r.bodyValue}if(r&&dr(r.bodyPatch)&&r.body==null){let i=t?.body??(typeof r.id=="string"?_.getState().rules.find(s=>s.id===r.id)?.body:void 0);if(typeof i!="string")return{ok:false,error:"bodyPatch needs something to patch: send fromRequestId (the captured request whose real response the patch is merged into) or the id of an existing rule."};if(r.force!==true){let s;try{let a=Nh(JSON.parse(i),r.bodyPatch);s=a.error,a.notes.length&&(r.bodyPatch=a.patch)}catch{}if(s)return{ok:false,error:`Refused: ${s}`};let l=Yh(r,i);if(l.length>0)return{ok:false,error:$h(l,"response body",jh(r.bodyPatch,l)),violations:l}}}let o=Kh(e,t);if(!o){let i=e?.fromRequestId;return{ok:false,error:i?`No captured request \`${i}\` \u2014 it may have been cleared. Send a urlPattern instead.`:"A rule needs a non-empty urlPattern."}}let n=_.upsertRule(o);return n?(n.enabled&&_.setEnabled(true),{ok:true,rule:{id:n.id,urlPattern:n.urlPattern,enabled:n.enabled,kind:n.kind,status:n.status,times:n.times,bodySize:n.body?n.body.length:0},...n.times===void 0||n.times===null?{lingers:`This rule has no \`times\` budget, so it overrides EVERY matching request until it is disabled or deleted (id \`${n.id}\`). If you meant only the next one, set times:1.`}:{},...Vo()}):{ok:false,error:"Override rule limit reached."}},setOverrideRuleEnabled:e=>{let t=Ft(e);return t?(_.setRuleEnabled(t,Yr(e,"enabled")),{ok:true,...Vo()}):{ok:false,error:"Missing rule id."}},deleteOverrideRule:e=>{let t=Ft(e);return t?(_.removeRule(t),{ok:true}):{ok:false,error:"Missing rule id."}},clearOverrideRules:()=>(_.clearRules(),{ok:true}),listOverrideRules:async()=>(await _.ensureLoaded(),_.getState()),getOverrideRuleBody:e=>{let t=Ft(e);if(!t)return null;let r=_.getState().rules.find(o=>o.id===t);return r?{body:r.body??null}:null},getCaptureStatus:()=>{let e=K.getSubscriberCounts().total,t=null,r=null;try{t=qn(),r=pt()}catch{}let o=null;try{o=ol()}catch{}return{capturing:e>0,subscribers:e,interceptorInstalled:t,interceptorLive:o,listenerCount:r,eventCount:K.getEvents().length}},debugOverrides:e=>{let t=(e&&typeof e=="object"?e.url:void 0)??"https://example.com/";return{interceptorInstalled:qn(),listenerCount:pt(),engine:ja(t,"GET"),store:{enabled:_.getState().enabled,ruleCount:_.getState().rules.length,rulesVisibleToEngine:_.getRules().length}}}}};D();var op=new Set(["content-length","host","connection","accept-encoding"]);function Uo(e){return`'${e.replace(/'/g,"'\\''")}'`}function np(e){if(e==null)return null;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return null}}function ip(e){let t=(e.method||"GET").toUpperCase(),r=np(e.requestData),o=[];t!=="GET"&&!(t==="POST"&&r!==null)&&o.push(`-X ${t}`);for(let[i,s]of Object.entries(e.requestHeaders||{}))op.has(i.toLowerCase())||o.push(`-H ${Uo(`${i}: ${s}`)}`);r!==null&&o.push(`--data-raw ${Uo(r)}`);let n=`curl ${Uo(e.url)}`;return o.length===0?n:`${n} \\
|
|
141
|
+
`+o}import{Fragment as hu,jsx as he,jsxs as xt}from"react/jsx-runtime";function pu({activeStatus:e,onToggleStatus:t,ignoredPatterns:r,paused:o}){let n=Ci({ignoredPatterns:r,paused:o});return he(ki,{counts:n,activeStatus:e,onToggleStatus:t})}function ki({counts:e,activeStatus:t,onToggleStatus:r}){return xt(p,{style:te.headerChipRow,children:[xt(N,{style:[te.headerChip,t==="success"&&te.headerChipActive],onPress:()=>r("success"),children:[he(Bd,{size:12,color:nt.semantic.success}),he(y,{style:[te.headerChipValue,{color:nt.semantic.success}],children:e.successful})]}),xt(N,{style:[te.headerChip,t==="error"&&te.headerChipActive],onPress:()=>r("error"),children:[he(qd,{size:12,color:nt.semantic.error}),he(y,{style:[te.headerChipValue,{color:nt.semantic.error}],children:e.failed})]}),xt(N,{style:[te.headerChip,t==="pending"&&te.headerChipActive],onPress:()=>r("pending"),children:[he(Od,{size:12,color:nt.semantic.warning}),he(y,{style:[te.headerChipValue,{color:nt.semantic.warning}],children:e.pending})]})]})}function fu({paused:e}){let t=uu({paused:e});return he(N,{"sentry-label":"ignore clear events",testID:"buoy-network-clear",accessibilityLabel:"Clear network requests",accessibilityRole:"button",onPress:()=>K.clearEvents(),style:[te.headerActionButton,!t&&te.headerActionButtonDisabled],disabled:!t,children:he(Ad,{size:14,color:t?oe.color.textSecondary:oe.color.textTertiary})})}function gu({onPress:e}){let{savedRecords:t}=Ot(),r=t.length;return xt(N,{"sentry-label":"ignore open saved",onPress:e,accessibilityLabel:"Saved requests",style:te.headerActionButton,children:[he(di,{size:14,color:r>0?oe.color.accent:oe.color.textSecondary}),r>0?he(p,{style:te.savedBadge,children:he(y,{style:te.savedBadgeText,children:r>99?"99+":r})}):null]})}function Ei({isPro:e,onUpgradePress:t}){let r=Ro(),o=Ot(),{pinned:n,saved:i}=Lr(o,r),s=Md("network.saved"),l=!n&&o.pinnedEvents.length>=Ir,a=!i&&o.savedRecords.length>=s,d=()=>r?K.getEvents().find(C=>C.id===r)??ae.getEventById(r):null,b=()=>{let C=d();C&&o.togglePin(C)},E=()=>{if(a&&!e){t();return}let C=d();C&&o.toggleSave(C)};return xt(hu,{children:[he(N,{"sentry-label":"ignore pin request",onPress:b,disabled:l,testID:"buoy-network-pin",accessibilityRole:"button",accessibilityLabel:n?"Unpin request":"Pin request",accessibilityHint:l?`Pin limit reached (${Ir})`:void 0,style:[te.headerActionButton,n&&te.headerActionButtonActive,l&&te.headerActionButtonDisabled],children:he(zd,{size:14,active:n,color:n?oe.color.accent:l?oe.color.textTertiary:oe.color.textSecondary})}),he(N,{"sentry-label":"ignore save request",onPress:E,disabled:a&&e,testID:"buoy-network-save",accessibilityRole:"button",accessibilityLabel:i?"Remove from saved":"Save request",accessibilityHint:a&&e?`Saved limit reached (${it})`:void 0,style:[te.headerActionButton,i&&te.headerActionButtonSaved,a&&e&&te.headerActionButtonDisabled],children:he(di,{size:14,color:i?oe.color.accent:a&&e?oe.color.textTertiary:oe.color.textSecondary})})]})}function mu({isPro:e,filter:t,ignoredPatterns:r,copySettings:o,paused:n,onUpgradePress:i,label:s}){let l=cu({filter:t,ignoredPatterns:r,paused:n});return e?he(Hd,{value:()=>Ri(rr(or(K.getEvents(),r),t),o),size:14,label:s,buttonStyle:s?te.copyMenuRow:te.headerActionButton,labelStyle:te.copyMenuLabel,colors:{idle:l?oe.color.textSecondary:oe.color.textTertiary,success:nt.semantic.success,error:nt.semantic.error},disabled:!l}):xt(N,{"sentry-label":"ignore copy pro",onPress:i,style:[s?te.copyMenuRow:te.headerActionButton,!l&&te.headerActionButtonDisabled],disabled:!l,children:[he(Dd,{size:14,color:l?oe.color.textSecondary:oe.color.textTertiary}),s?he(y,{style:te.copyMenuLabel,children:s}):null]})}var te=fe.create({copyMenuRow:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:6,paddingVertical:11,justifyContent:"flex-start"},copyMenuLabel:{fontSize:13,fontWeight:"600",color:oe.color.text},headerChipRow:{flexDirection:"row",alignItems:"center",gap:8},headerChip:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:oe.color.buttonSurface,paddingHorizontal:10,paddingVertical:5,borderRadius:12,borderWidth:1,borderColor:oe.color.border},headerChipActive:{backgroundColor:oe.color.accentSoft,borderColor:oe.color.accentBorderStrong},headerChipValue:{fontSize:12,fontWeight:"600",fontFamily:ui},headerActionButton:{width:32,height:32,borderRadius:8,backgroundColor:oe.color.buttonSurface,borderWidth:1,borderColor:oe.color.border,alignItems:"center",justifyContent:"center"},headerActionButtonDisabled:{opacity:.55},headerActionButtonActive:{backgroundColor:oe.color.accentSoft,borderColor:oe.color.accentBorderStrong},headerActionButtonSaved:{backgroundColor:oe.color.accentSoft,borderColor:oe.color.accentBorderStrong},savedBadge:{position:"absolute",top:-3,right:-3,minWidth:14,height:14,paddingHorizontal:3,borderRadius:7,backgroundColor:oe.color.accent,alignItems:"center",justifyContent:"center"},savedBadgeText:{color:oe.color.onAccent,fontSize:9,fontWeight:"700",fontFamily:ui}});D();ce();import{useCallback as yu}from"react";import{FlaskConical as bu,Pin as vu,Power as Su,macOSColors as ve,ToolEmptyState as xu,resolveListEmptyState as wu,EVENT_LIST_PRESET as Cu,monoFont as Tu}from"@buoy-gg/shared-ui/web";D();ce();import{memo as Ru}from"react";import{ChevronRight as ku,Upload as Eu,Download as Pu,Clock as Iu,AlertCircle as Lu,Bookmark as Bu,FlaskConical as qu,Pin as Ou,DevToolsCard as Du,MethodBadge as zu,TypeBadge as Au,night as Ce,macOSColors as Dt,monoFont as ko}from"@buoy-gg/shared-ui/web";import{formatRelativeTime as Hu}from"@buoy-gg/shared-ui/web";import{jsx as ie,jsxs as _e}from"react/jsx-runtime";function Mu(e,t){return t?Dt.semantic.error:e?e>=200&&e<300?Dt.semantic.success:e>=300&&e<400?Dt.semantic.info:e>=400?Dt.semantic.error:Dt.text.muted:Dt.semantic.warning}function Nu(e){let t=e?.["content-type"]||e?.["Content-Type"]||"";return t.includes("json")?"JSON":t.includes("xml")?"XML":t.includes("html")?"HTML":t.includes("text")?"TEXT":t.includes("image")?"IMG":t.includes("video")?"VIDEO":t.includes("audio")?"AUDIO":t.includes("form")?"FORM":null}function Pi(e){switch(e){case"fetch":return{backgroundColor:"rgba(74, 144, 226, 0.15)",color:"#4A90E2"};case"graphql":return{backgroundColor:"rgba(229, 53, 171, 0.15)",color:"#E535AB"};case"grpc-web":return{backgroundColor:"rgba(16, 185, 129, 0.15)",color:"#10B981"};case"xhr":return{backgroundColor:"rgba(245, 158, 11, 0.15)",color:"#F59E0B"};default:return{backgroundColor:"rgba(147, 51, 234, 0.15)",color:"#9333EA"}}}function $u({event:e,isPending:t,statusColor:r}){return t?_e(p,{style:le.pendingBadge,children:[ie(Iu,{size:10,color:Ce.color.warning}),ie(y,{style:le.pendingText,children:"..."})]}):e.error?_e(p,{style:le.errorBadge,children:[ie(Lu,{size:10,color:Ce.color.danger}),ie(y,{style:le.errorText,children:"ERR"})]}):ie(p,{style:le.statusBadge,children:ie(y,{style:[le.statusText,{color:r}],children:String(e.status)})})}function Fu({requestSize:e,responseSize:t}){return!e&&!t?null:_e(p,{style:le.sizeRow,children:[e?_e(p,{style:le.sizeItem,children:[ie(Eu,{size:8,color:Ce.color.info}),ie(y,{style:le.sizeText,children:Ze(e)})]}):null,t?_e(p,{style:le.sizeItem,children:[ie(Pu,{size:8,color:Ce.color.accent}),ie(y,{style:le.sizeText,children:Ze(t)})]}):null]})}function ju({timestamp:e,duration:t}){let r=vo(),o=Hu(e,r);return t?_e(y,{style:le.bottomRightText,children:[Er(t)," ",o]}):ie(y,{style:le.bottomRightText,children:o})}var zt=Ru(function({event:e,onPress:t,pinned:r=false,saved:o=false,overridden:n=false,onLongPress:i}){let s=Mu(e.status,e.error),l=!e.status&&!e.error,a=Nu(e.responseHeaders),d=e.path||e.url.replace(/^https?:\/\/[^/]+/,"");return e.requestClient==="graphql"?e.operationName?d=Qn(e.operationName,e.graphqlVariables):d=d.replace(/\/graphql[^?]*/,"/graphql"):e.operationName&&(d=`${d}
|
|
142
|
+
(${e.operationName})`),_e(Du,{onPress:()=>t(e),onLongPress:i?()=>i(e):void 0,style:le.cardWrapper,contentStyle:[le.container,{borderLeftColor:s}],testID:`buoy-network-row-${e.id}`,accessibilityLabel:`${e.method} ${e.path||e.url}`,children:[_e(p,{style:le.topRightContainer,children:[r?ie(Ou,{size:10,active:true,color:Ce.color.info}):null,o?ie(Bu,{size:10,color:Ce.color.accent}):null,n||e.override?ie(qu,{size:10,color:Ce.color.warning}):null,ie($u,{event:e,isPending:l,statusColor:s}),e.requestClient?ie(p,{style:[le.topRightBadge,{backgroundColor:Pi(e.requestClient).backgroundColor}],children:ie(y,{style:[le.clientText,{color:Pi(e.requestClient).color}],children:e.requestClient==="graphql"?"GQL":e.requestClient==="grpc-web"?"gRPC":e.requestClient==="xhr"?"XHR":e.requestClient})}):null]}),_e(p,{style:le.leftSection,children:[ie(zu,{method:e.method,size:"small"}),ie(Fu,{requestSize:e.requestSize,responseSize:e.responseSize})]}),ie(p,{style:le.middleSection,children:ie(y,{style:le.urlText,numberOfLines:2,children:d})}),_e(p,{style:le.rightSection,children:[a?ie(Au,{type:a,size:"small"}):null,ie(ku,{size:14,color:Ce.color.textTertiary})]}),ie(p,{style:le.bottomRightContainer,children:ie(ju,{timestamp:e.timestamp,duration:e.duration})})]})});zt.displayName="NetworkEventItemCompact";var le=fe.create({cardWrapper:{marginHorizontal:8},container:{flexDirection:"row",alignItems:"center",backgroundColor:"rgba(12, 12, 12, 0.9)",borderLeftWidth:3,borderLeftColor:"transparent",borderBottomWidth:1},leftSection:{marginRight:8,alignItems:"flex-start"},topRightContainer:{position:"absolute",top:1,right:1,flexDirection:"row",alignItems:"center",gap:4},topRightBadge:{paddingHorizontal:4,paddingVertical:2,borderRadius:4},middleSection:{flex:1,justifyContent:"center",paddingRight:8},urlText:{fontSize:12,color:Ce.color.text,lineHeight:16,fontFamily:ko},rightSection:{flexDirection:"row",alignItems:"center",gap:6},bottomRightContainer:{position:"absolute",bottom:4,right:8},bottomRightText:{fontSize:9,color:Ce.color.textTertiary,fontFamily:ko},statusBadge:{paddingHorizontal:4,paddingVertical:1,borderRadius:3},statusText:{fontSize:10,fontWeight:"600"},pendingBadge:{flexDirection:"row",alignItems:"center",gap:2,paddingHorizontal:4,paddingVertical:1,backgroundColor:Ce.color.warningSoft,borderRadius:3},pendingText:{fontSize:10,color:Ce.color.warning,fontWeight:"600"},errorBadge:{flexDirection:"row",alignItems:"center",gap:2,paddingHorizontal:4,paddingVertical:1,backgroundColor:Ce.color.dangerSoft,borderRadius:3},errorText:{fontSize:10,color:Ce.color.danger,fontWeight:"600"},durationText:{fontSize:9,color:Ce.color.textSecondary},sizeRow:{flexDirection:"row",gap:4,marginTop:4},sizeItem:{flexDirection:"row",alignItems:"center",gap:2},sizeText:{fontSize:8,color:Ce.color.textSecondary,fontFamily:ko},clientText:{fontSize:8,fontWeight:"700",letterSpacing:.3,textTransform:"uppercase"}});D();ce();import{ProBadge as Wu,Zap as Vu,buoyColors as nr}from"@buoy-gg/shared-ui/web";import{jsx as Dr,jsxs as Eo}from"react/jsx-runtime";function Ii({title:e,subtitle:t,onPress:r}){return Eo(N,{style:ir.banner,onPress:r,activeOpacity:.8,children:[Eo(p,{style:ir.content,children:[Eo(p,{style:ir.left,children:[Dr(Vu,{size:16,color:nr.primary}),Dr(y,{style:ir.title,children:e})]}),Dr(Wu,{})]}),Dr(y,{style:ir.subtitle,children:t})]})}var ir=fe.create({banner:{backgroundColor:nr.card,borderRadius:10,borderWidth:1,borderColor:nr.primary+"40",padding:12,marginHorizontal:12,marginTop:12,marginBottom:34},content:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:4},left:{flexDirection:"row",alignItems:"center",gap:8},title:{color:nr.text,fontSize:13,fontWeight:"600"},subtitle:{color:nr.textMuted,fontSize:11}});D();import{useEffect as Li,useMemo as zr,useState as Uu}from"react";import{useLimit as _u}from"@buoy-gg/shared-ui/web";function sr(e){let{filter:t,ignoredPatterns:r,paused:o,visible:n=true,isPro:i}=e,s=_u("network.requests"),l=i?1/0:s,[a,d]=Uu(()=>K.getEvents());Li(()=>{if(!n)return;if(o){d(K.getEvents());return}let g=null,T=null,k=K.subscribeToEvents(f=>{T=f,g==null&&(g=requestAnimationFrame(()=>{g=null,T&&d(T),T=null}))});return()=>{k(),g!=null&&cancelAnimationFrame(g)}},[o,n]),Li(()=>K.onClear(()=>{d([])}),[]);let b=zr(()=>or(a,r),[a,r]),E=zr(()=>rr(b,t),[b,t]),C=zr(()=>{let g=new Set;return a.slice(l).forEach(T=>{g.add(T.id)}),g},[a,l]),S=zr(()=>C.size===0?E:E.filter(g=>!C.has(g.id)),[E,C]),q=E.length-S.length;return{events:E,visibleEvents:S,hasLockedEvents:q>0,lockedEventCount:q,totalEvents:b.length}}D();import{useCallback as At,useSyncExternalStore as Xu}from"react";D();import{devToolsStorageKeys as Bi,persistentStorage as qi}from"@buoy-gg/shared-ui/web";var Ju=800,Gu=3,Ku=Object.freeze([]),Yu=250,Zu=["respond","fail","delay"];function Qu(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||typeof r!="object")continue;let o=r;if(typeof o.id!="string"||typeof o.urlPattern!="string"||!o.urlPattern)continue;let n=Zu.includes(o.kind)?o.kind:"respond";t.push({id:o.id,enabled:o.enabled!==false,name:typeof o.name=="string"?o.name:void 0,urlPattern:o.urlPattern,methods:Array.isArray(o.methods)?o.methods.filter(i=>typeof i=="string"):void 0,requireHeader:typeof o.requireHeader=="string"&&o.requireHeader?o.requireHeader:void 0,kind:n,status:typeof o.status=="number"?Math.min(_t,Math.max(Ut,o.status)):void 0,statusText:typeof o.statusText=="string"?o.statusText:void 0,headers:o.headers&&typeof o.headers=="object"?o.headers:void 0,body:typeof o.body=="string"?o.body:void 0,failKind:o.failKind==="timeout"?"timeout":void 0,delayMs:typeof o.delayMs=="number"?o.delayMs:void 0,times:typeof o.times=="number"?o.times:null,alternate:o.alternate===true,hits:0,seen:0,createdAt:typeof o.createdAt=="number"?o.createdAt:0})}return t.slice(0,rt)}var ec=class{constructor(){this.rules=[];this.enabled=true;this.listeners=new Set;this.loaded=false;this.loadPromise=null;this.dirty=false;this.idCounter=0;this.state={enabled:true,rules:[],autoPaused:false};this.launchStreak=0;this.autoPaused=false;this.keepAlive=null;this.hitEmitTimer=null;this.engineDisabled=false;this.remote=null;this.remoteEchoUntil=0}enableRemoteMode(e){this.remote=e,this.disableEngine()}disableRemoteMode(){this.remote=null}replaceRules(e,t=false){this.remote&&(!t&&ue()<this.remoteEchoUntil||(this.enabled=e.enabled,this.rules=e.rules,this.rebuild(),this.emit()))}markLocalEdit(){this.remote&&(this.remoteEchoUntil=ue()+Ju)}disableEngine(){this.engineDisabled=true,this.keepAlive&&(this.keepAlive(),this.keepAlive=null,pt()===0&&Xt())}getState(){return this.state}getRules(){return this.engineDisabled||!this.enabled?Ku:this.rules}async fetchRuleBody(e){let t=this.rules.find(r=>r.id===e);if(!t)return null;if(!t.bodyOmitted)return t.body??null;if(!this.remote?.getRuleBody)return null;try{return await this.remote.getRuleBody(e)}catch{return null}}activeCount(){return this.enabled?this.rules.filter(e=>e.enabled&&!uo(e)).length:0}subscribe(e){return this.listeners.add(e),this.ensureLoaded(),()=>{this.listeners.delete(e)}}setEnabled(e){this.enabled!==e&&(this.remote?.setEnabled(e),this.markLocalEdit(),this.markTouched(),this.enabled=e,this.commit(this.rules))}addRule(e){if(this.rules.length>=rt)return null;let t={...e,id:`ovr_${Date.now().toString(36)}_${++this.idCounter}`,hits:0,seen:0,createdAt:Date.now()};return this.commit([t,...this.rules]),t}upsertRule(e){this.remote?.upsertRule(e),this.markLocalEdit(),this.markTouched();let{id:t,...r}=e;return t&&this.rules.some(o=>o.id===t)?(this.updateRule(t,r),this.rules.find(o=>o.id===t)??null):this.addRule(r)}updateRule(e,t){let r=this.rules.findIndex(n=>n.id===e);if(r===-1)return;let o=[...this.rules];o[r]={...o[r],...t,hits:0,seen:0},this.commit(o)}setRuleEnabled(e,t){let r=this.rules.findIndex(n=>n.id===e);if(r===-1||this.rules[r].enabled===t)return;this.remote?.setRuleEnabled(e,t),this.markLocalEdit(),this.markTouched();let o=[...this.rules];o[r]={...o[r],enabled:t,hits:t?0:o[r].hits,seen:t?0:o[r].seen},this.commit(o)}removeRule(e){let t=this.rules.filter(r=>r.id!==e);t.length!==this.rules.length&&(this.remote?.removeRule(e),this.markLocalEdit(),this.markTouched(),this.commit(t))}clearRules(){this.rules.length!==0&&(this.remote?.clearRules(),this.markLocalEdit(),this.markTouched(),this.commit([]))}recordMatch(e){let t=this.rules.findIndex(o=>o.id===e);if(t===-1)return;let r=[...this.rules];r[t]={...r[t],seen:r[t].seen+1},this.rules=r,this.rebuild()}recordHit(e){let t=this.rules.findIndex(s=>s.id===e);if(t===-1)return;let r=this.rules[t],o=r.hits+1,n=typeof r.times=="number"&&o>=r.times,i=[...this.rules];if(i[t]={...r,hits:o,enabled:n?false:r.enabled},n){this.commit(i);return}this.rules=i,this.rebuild(),this.scheduleHitEmit()}ensureLoaded(){return this.remote||this.loaded?Promise.resolve():this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{try{let e=await qi.getItem(Bi.network.overrides());if(e&&!this.dirty){let t=JSON.parse(e);this.enabled=t?.enabled!==false,this.rules=Qu(t?.rules),this.launchStreak=typeof t?.launchStreak=="number"?t.launchStreak:0,this.applyLaunchGuard(),this.rebuild()}}catch{}finally{this.loaded=true,this.syncKeepAlive(),this.emit()}})(),this.loadPromise)}applyLaunchGuard(){if(!this.enabled||this.activeCount()===0){this.launchStreak=0;return}this.launchStreak+=1,this.launchStreak>=Gu&&(this.enabled=false,this.autoPaused=true,this.launchStreak=0),this.persist()}syncKeepAlive(){let e=!this.engineDisabled&&this.activeCount()>0;if(e&&!this.keepAlive){Bn(),this.keepAlive=Jt(()=>{});return}!e&&this.keepAlive&&(this.keepAlive(),this.keepAlive=null,pt()===0&&Xt())}scheduleHitEmit(){this.hitEmitTimer===null&&(this.hitEmitTimer=setTimeout(()=>{this.hitEmitTimer=null,this.emit()},Yu))}commit(e){this.dirty=true,this.rules=e.slice(0,rt),this.rebuild(),this.syncKeepAlive(),this.emit(),this.persist()}rebuild(){this.state={enabled:this.enabled,rules:this.rules,autoPaused:this.autoPaused}}markTouched(){this.launchStreak=0,this.autoPaused=false}noteHealthyLaunch(){this.launchStreak===0&&!this.autoPaused||(this.markTouched(),this.persist(),this.rebuild(),this.emit())}persist(){this.remote||qi.setItem(Bi.network.overrides(),JSON.stringify({enabled:this.enabled,rules:this.rules,launchStreak:this.launchStreak})).catch(()=>{})}emit(){this.listeners.forEach(e=>e())}},_=new ec;Fa({getRules:()=>_.getRules(),recordHit:e=>_.recordHit(e),recordMatch:e=>_.recordMatch(e)});function Ar(){let e=Xu(At(s=>_.subscribe(s),[]),()=>_.getState(),()=>_.getState()),t=At(s=>_.setEnabled(s),[]),r=At(s=>_.upsertRule(s),[]),o=At((s,l)=>_.setRuleEnabled(s,l),[]),n=At(s=>_.removeRule(s),[]),i=At(()=>_.clearRules(),[]);return{enabled:e.enabled,rules:e.rules,autoPaused:e.autoPaused,activeCount:_.activeCount(),setEnabled:t,upsertRule:r,setRuleEnabled:o,removeRule:n,clearRules:i,isRuleSpent:uo}}D();function tc(e,t){if(t.length===0)return[];let r=new Set(t.map(n=>n.id)),o=new Set;for(let n of t){let i;for(let s of e){if(s.override&&r.has(s.override.ruleId)){o.add(s.id);continue}lo(n,s.url,String(s.method||"GET"),s.requestHeaders)&&(s.timestamp>=n.createdAt?o.add(s.id):(!i||s.timestamp>i.timestamp)&&(i=s))}i&&o.add(i.id)}return e.filter(n=>o.has(n.id))}D();var rc=[];function Po(e,t,r){return t.length===0?{pinned:rc,rest:e}:{pinned:t,rest:r.size===0?e:e.filter(o=>!r.has(o.id))}}import{jsx as Se,jsxs as wt}from"react/jsx-runtime";var oc=e=>e.id;function nc({events:e,onEventPress:t,onLongPress:r,savedLiveIds:o,onClearPinned:n}){return e.length===0?null:wt(p,{style:xe.pinnedSection,children:[wt(p,{style:xe.pinnedHeader,children:[Se(vu,{size:11,active:true,color:ve.semantic.info}),wt(y,{style:xe.pinnedTitle,children:["PINNED \xB7 ",e.length]}),Se(N,{onPress:n,"sentry-label":"ignore unpin all",style:xe.pinnedClear,children:Se(y,{style:xe.pinnedClearText,children:"Unpin all"})})]}),e.map(i=>Se(zt,{event:i,onPress:t,onLongPress:r,pinned:true,saved:o.has(i.id)},i.id))]})}function ic({events:e,onEventPress:t,onLongPress:r,savedLiveIds:o,paused:n,onTogglePaused:i}){return e.length===0?null:wt(p,{style:[xe.overriddenSection,n&&xe.overriddenSectionOff],children:[wt(p,{style:xe.overriddenHeader,children:[Se(bu,{size:11,color:n?ve.text.muted:ve.semantic.warning}),Se(y,{testID:"buoy-network-overridden-strip",style:[xe.overriddenTitle,n&&xe.overriddenTitleOff],children:n?`PAUSED \xB7 ${e.length}`:`OVERRIDDEN \xB7 ${e.length}`}),Se(N,{onPress:i,"sentry-label":"ignore pause overrides",style:xe.overriddenManage,children:Se(y,{style:[xe.overriddenManageText,n&&xe.overriddenTitleOff],children:n?"Resume":"Pause"})})]}),e.map(s=>Se(zt,{event:s,onPress:t,onLongPress:r,overridden:true,saved:o.has(s.id)},s.id))]})}function sc({visible:e,paused:t,filter:r,ignoredPatterns:o,isPro:n,searchText:i,onEventPress:s,onUpgradePress:l}){let{visibleEvents:a,hasLockedEvents:d,lockedEventCount:b,totalEvents:E}=sr({filter:r,ignoredPatterns:o,paused:t,visible:e,isPro:n}),{pinnedEvents:C,pinnedLiveIds:S,savedLiveIds:q,togglePin:g,clearPinned:T}=Ot(),{rules:k,enabled:f,setEnabled:P,isRuleSpent:z}=Ar(),I=yu(G=>{g(G)},[g]);if(!e)return null;let{pinned:w,rest:H}=Po(a,C,S),v=k.filter(G=>G.enabled&&!z(G)),h=tc([...w,...H],v),c=new Set(h.map(G=>G.id)),u=w.filter(G=>!c.has(G.id)),m=c.size?H.filter(G=>!c.has(G.id)):H,O=!t,re=({item:G})=>Se(zt,{event:G,onPress:s,onLongPress:I,saved:q.has(G.id)}),Z=()=>u.length>0||h.length>0?null:Se(xu,{testID:"buoy-network-empty",...wu({subject:"requests",search:i,total:E,capturing:O,waiting:{otto:"fishing",title:"No network events",message:"Network requests will appear here"},paused:{title:"No network events",message:"Enable interception to start capturing"}})}),ee=()=>{if(!d)return null;let G=i.length>0,A=G?`${b} matching ${b===1?"request":"requests"} in locked history`:`${b} requests locked`;return Se(Ii,{title:A,subtitle:G?"Upgrade to Pro to search your full request history":"Upgrade to Pro to unlock full request history",onPress:l})};return wt(p,{style:xe.root,children:[O?null:wt(p,{style:xe.disabledBanner,children:[Se(Su,{size:14,color:ve.semantic.warning}),Se(y,{style:xe.disabledText,children:"Network interception is disabled"})]}),Se(ic,{events:h,onEventPress:s,onLongPress:I,savedLiveIds:q,paused:!f,onTogglePaused:()=>P(!f)}),Se(nc,{events:u,onEventPress:s,onLongPress:I,savedLiveIds:q,onClearPinned:T}),m.length>0||d?Se(io,{testID:"buoy-network-list",data:m,renderItem:re,keyExtractor:oc,contentContainerStyle:xe.listContent,showsVerticalScrollIndicator:true,onEndReachedThreshold:.8,scrollEnabled:true,...Cu,extraData:q,"sentry-label":"ignore network events list",ListFooterComponent:ee}):Z()]})}var xe=fe.create({root:{flex:1,minHeight:0},overriddenSection:{borderBottomWidth:1,borderBottomColor:ve.semantic.warning+"44",backgroundColor:ve.semantic.warningBackground},overriddenSectionOff:{borderBottomColor:ve.border.default,backgroundColor:ve.background.card},overriddenTitleOff:{color:ve.text.muted},overriddenHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,paddingTop:8,paddingBottom:4},overriddenTitle:{flex:1,fontSize:10,fontWeight:"700",letterSpacing:.8,color:ve.semantic.warning},overriddenManage:{paddingHorizontal:6,paddingVertical:2},overriddenManageText:{fontSize:10,fontWeight:"600",color:ve.semantic.warning},pinnedSection:{borderBottomWidth:1,borderBottomColor:ve.border.default,paddingBottom:4},pinnedHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:20,paddingTop:10,paddingBottom:6},pinnedTitle:{flex:1,color:ve.semantic.info,fontSize:10,fontWeight:"700",letterSpacing:.6,fontFamily:Tu},pinnedClear:{paddingHorizontal:6,paddingVertical:2},pinnedClearText:{color:ve.text.muted,fontSize:10},disabledBanner:{flexDirection:"row",alignItems:"center",gap:8,padding:10,marginHorizontal:12,marginTop:8,backgroundColor:ve.semantic.warningBackground,borderRadius:8,borderWidth:1,borderColor:ve.semantic.warning+"20"},disabledText:{color:ve.semantic.warning,fontSize:11,flex:1},listContent:{paddingTop:8}});D();ce();import{useState as ac}from"react";import{Bookmark as lc,CopyButton as dc,Search as uc,macOSColors as Me,useLimit as cc,ToolEmptyState as hc,resolveListEmptyState as pc,EVENT_LIST_PRESET as fc,monoFont as gc}from"@buoy-gg/shared-ui/web";D();function Oi(e,t,r){let o=e.slice(0,Math.min(t,it)),n=o.map(i=>i.event);return{events:r?rr(n,{searchText:r}):n,lockedCount:e.length-o.length}}import{jsx as Xe,jsxs as Hr}from"react/jsx-runtime";var mc=e=>e.id;function Di({visible:e,isPro:t,copySettings:r,search:o,onSearchChange:n,onEventPress:i,onUpgradePress:s}){let{savedRecords:l,pinnedLiveIds:a,toggleSave:d,clearSaved:b}=Ot(),E=cc("network.saved"),[C,S]=ac(""),q=o!=null&&n!=null,g=q?o:C,T=q?n:S;if(!e)return null;let{events:k,lockedCount:f}=Oi(l,E,g),P=w=>{d(w)},z=({item:w})=>Xe(zt,{event:w,onPress:i,onLongPress:P,saved:true,pinned:a.has(w.id)}),I=()=>f===0?null:Xe(Ii,{title:`${f} saved ${f===1?"request":"requests"} locked`,subtitle:`Your plan keeps ${E}. Upgrade to Pro to unlock the rest.`,onPress:s});return Hr(p,{style:Je.root,children:[Hr(p,{style:Je.toolbar,children:[Xe(lc,{size:11,color:Me.semantic.debug}),Hr(y,{style:Je.toolbarTitle,children:["SAVED \xB7 ",l.length,E>=it?"":`/${E}`]}),t?Xe(dc,{value:()=>Ri(k,r),size:13,buttonStyle:Je.toolbarButton,colors:{idle:Me.text.secondary,success:Me.semantic.success,error:Me.semantic.error},disabled:k.length===0}):null,Xe(N,{onPress:b,"sentry-label":"ignore clear saved",style:Je.toolbarClear,disabled:l.length===0,children:Xe(y,{style:[Je.toolbarClearText,l.length===0&&Je.toolbarClearTextDisabled],children:"Clear all"})})]}),l.length>0?Hr(p,{style:Je.searchRow,children:[Xe(uc,{size:13,color:Me.text.secondary}),Xe(Lt,{style:Je.searchInput,placeholder:"Search saved requests\u2026",placeholderTextColor:Me.text.muted,value:g,onChangeText:T,"sentry-label":"ignore saved search",accessibilityLabel:"Search saved requests",autoCapitalize:"none",autoCorrect:false,returnKeyType:"search"})]}):null,l.length===0||g.trim().length>0&&k.length===0&&f===0?Xe(hc,{testID:"buoy-network-saved-empty",...pc({subject:"saved requests",verb:"kept",search:l.length===0?"":g,total:l.length,waiting:{otto:"empty",title:"No saved requests",message:"Open a request and tap the bookmark to keep it here \u2014 saved requests survive Clear and app restarts."}})}):Xe(io,{data:k,renderItem:z,keyExtractor:mc,contentContainerStyle:Je.listContent,showsVerticalScrollIndicator:true,scrollEnabled:true,...fc,extraData:a,"sentry-label":"ignore saved requests list",ListFooterComponent:I})]})}var Je=fe.create({root:{flex:1,minHeight:0},toolbar:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:20,paddingTop:10,paddingBottom:6},toolbarTitle:{flex:1,color:Me.semantic.debug,fontSize:10,fontWeight:"700",letterSpacing:.6,fontFamily:gc},toolbarButton:{width:26,height:26,borderRadius:6,alignItems:"center",justifyContent:"center"},toolbarClear:{paddingHorizontal:6,paddingVertical:2},toolbarClearText:{color:Me.text.muted,fontSize:10},toolbarClearTextDisabled:{color:Me.text.disabled},searchRow:{flexDirection:"row",alignItems:"center",gap:6,marginHorizontal:12,marginBottom:8,paddingHorizontal:10,paddingVertical:5,backgroundColor:Me.background.input,borderRadius:10,borderWidth:1,borderColor:Me.border.default},searchInput:{flex:1,color:Me.text.primary,fontSize:13,paddingVertical:2},listContent:{paddingTop:4}});D();ce();import{useCallback as yc,useEffect as Mr,useState as bc}from"react";import{AlertCircle as vc,AlertTriangle as Sc,DevToolsCard as xc,EmptyState as wc,MethodBadge as Cc,Plus as Tc,Trash2 as Rc,macOSColors as Y,useLimit as kc,monoFont as Ec}from"@buoy-gg/shared-ui/web";D();ce();import{useMemo as zi,useState as Nr}from"react";import{ChevronDown as Pc,ChevronRight as Ic,macOSColors as U,useSafeAreaInsets as Lc,monoFont as Bc}from"@buoy-gg/shared-ui/web";D();ce();import{useState as $r,useMemo as Fr,useCallback as ar,useRef as Io,useEffect as qc,memo as jr}from"react";import{displayValue as Oc,buoyColors as L,monoFont as qe}from"@buoy-gg/shared-ui/web";import{CopyButton as Dc}from"@buoy-gg/shared-ui/web";import{ChevronRight as zc,ChevronDown as Ac,Trash as Ai}from"@buoy-gg/shared-ui/web";import{CyberpunkInput as Hc}from"@buoy-gg/shared-ui/web/dataViewer";D();var Ct=(e,t,r)=>{if(t.length===0)return r;if(e instanceof Map){let o=new Map(e);if(t.length===1)return o.set(t[0],r),o;let[n,...i]=t,s=o.get(n);return o.set(n,Ct(s??null,i,r)),o}if(e instanceof Set){let o=Ct(Array.from(e),t,r);return new Set(Array.isArray(o)?o:[])}if(Array.isArray(e)){let o=[...e];if(t.length===1)return o[t[0]]=r,o;let[n,...i]=t;return o[n]=Ct(o[n],i,r),o}if(e instanceof Object){let o={...e};if(t.length===1)return o[t[0]]=r,o;let[n,...i]=t;return o[n]=Ct(o[n],i,r),o}return e};D();var Tt=(e,t)=>{if(e instanceof Map){let r=new Map(e);if(t.length===1)return r.delete(t[0]),r;let[o,...n]=t;return r.set(o,Tt(r.get(o),n)),r}if(e instanceof Set){let r=Tt(Array.from(e),t);return new Set(r)}if(Array.isArray(e)){let r=[...e];if(t.length===1)return r.filter((i,s)=>s.toString()!==t[0]);let[o,...n]=t;return r[o]=Tt(r[o],n),r}if(e instanceof Object){let r={...e};if(t.length===1)return delete r[t[0]],r;let[o,...n]=t;return r[o]=Tt(r[o],n),r}return e};D();import{createContext as Mc,useContext as Nc}from"react";var Hi=Mc(null);function Wr(){return Nc(Hi)}import{Fragment as Vr,jsx as J,jsxs as Pe}from"react/jsx-runtime";var lr=100,Ht={top:8,bottom:8,left:8,right:8},Mi=12,$c=(e,t=lr)=>{if(t<1||e.length===0)return[];let r=[];for(let o=0;o<e.length;o+=t)r.push(e.slice(o,o+t));return r},Lo=jr(({expanded:e,isFocused:t=false,isMain:r=false})=>J(p,{style:[j.expanderIcon,r&&j.expanderIconMain,e?j.expanded:j.collapsed],children:e?J(Ac,{size:r?14:Mi,color:t?L.primary:r?L.text:L.textSecondary,strokeWidth:2.5}):J(zc,{size:r?14:Mi,color:t?L.primary:r?L.text:L.textSecondary,strokeWidth:2.5})}));Lo.displayName="Expander";var Ni=jr(({value:e,isFocused:t=false})=>J(Dc,{value:e,isFocused:t,buttonStyle:t?{...j.buttonStyle,...j.buttonStyleFocused}:j.buttonStyle}));Ni.displayName="CopyButton";var Bo=jr(({dataPath:e,isFocused:t=false})=>{let r=Wr(),o=ar(()=>{r&&r.onChange(Tt(r.root,e))},[r,e]);return r?J(N,{"sentry-label":"ignore devtools explorer delete button",onPress:o,style:[j.deleteButton,t&&j.deleteButtonFocused],accessibilityLabel:"Delete item",hitSlop:Ht,activeOpacity:.7,children:J(Ai,{size:14,strokeWidth:2,color:t?L.error:L.error+"CC"})}):null});Bo.displayName="DeleteItemButton";var $i=jr(({dataPath:e,isFocused:t=false})=>{let r=Wr(),o=ar(()=>{r&&r.onChange(Ct(r.root,e,[]))},[r,e]);return r?J(N,{"sentry-label":"ignore devtools explorer clear button",style:[j.clearButton,t&&j.clearButtonFocused],"aria-label":"Remove all items",onPress:o,hitSlop:Ht,activeOpacity:.7,children:J(y,{style:[j.clearButtonText,{color:t?L.warning:L.warning+"CC"}],children:"[]"})}):null});$i.displayName="ClearArrayButton";function Fc({dataPath:e,value:t,itemsDeletable:r}){let o=Wr(),n=ar(()=>{if(!o)return;let a=typeof t=="boolean"?t:false;o.onChange(Ct(o.root,e,!a))},[o,e,t]),i=ar(()=>{o&&o.onChange(Tt(o.root,e))},[o,e]);if(!o)return null;let s=t?j.toggleBadgeTrue:j.toggleBadgeFalse,l=t?j.toggleTextTrue:j.toggleTextFalse;return Pe(N,{"sentry-label":"ignore devtools explorer toggle button",style:j.modernToggleButton,onPress:n,hitSlop:Ht,activeOpacity:.8,children:[J(p,{style:[j.toggleBadge,s],children:J(y,{style:[j.toggleBadgeText,l],children:t?"TRUE":"FALSE"})}),r&&J(N,{"sentry-label":"ignore devtools explorer delete button in toggle",onPress:i,style:j.deleteButtonInToggle,accessibilityLabel:"Delete item",hitSlop:Ht,activeOpacity:.7,children:J(Ai,{size:14,strokeWidth:2,color:L.error+"CC"})})]})}function qo({editable:e,label:t,value:r,defaultExpanded:o,dataPath:n,itemsDeletable:i,dataVersion:s=0}){let l=Wr(),[a,d]=$r(false),[b,E]=$r("");qc(()=>{if(r!=null&&(typeof r=="string"||typeof r=="number")){let c=r.toString();E(c)}},[r,t,s]);let C=Fr(()=>{let c=t.toUpperCase();return["DATA","QUERY","QUERYKEY","TYPES","STATS","OPTIONS","OBSERVERS"].includes(c)},[t]),[S,q]=$r((o||[]).includes(t)),g=()=>q(c=>!c),[T,k]=$r([]),f=Fr(()=>r==null||typeof r!="object"?[]:Array.isArray(r)?(r.length>1e3?r.slice(0,1e3):r).map((c,u)=>({label:u.toString(),value:c})):r instanceof Map?Array.from(r.entries()).slice(0,1e3).map(([c,u])=>({label:c.toString(),value:u})):r instanceof Set?Array.from(r).slice(0,1e3).map((c,u)=>({label:u.toString(),value:c})):Object.entries(r).slice(0,1e3).map(([c,u])=>({label:c,value:u})),[r]),P=Fr(()=>Array.isArray(r)?"array":r===null||typeof r!="object"?typeof r:r instanceof Map||r instanceof Set?"Iterable":"object",[r]),z=Fr(()=>$c(f,lr),[f]),I=n??[],w=Io(l),H=Io(I),v=Io(P);w.current=l,H.current=I,v.current=P;let h=ar((c,u)=>{E(u);let m=w.current;if(!m||c&&isNaN(Number(u)))return;let O=v.current==="number"?Number(u):u;m.onChange(Ct(m.root,H.current,O))},[E]);return J(p,{style:j.minWidthWrapper,children:Pe(p,{style:j.fullWidthMarginRight,children:[z.length>0&&Pe(Vr,{children:[Pe(p,{style:[j.flexRowItemsCenterGap,C&&j.flexRowItemsCenterGapMain],children:[Pe(N,{"sentry-label":"ignore devtools explorer expander button",style:j.expanderButton,onPress:g,hitSlop:Ht,activeOpacity:.6,children:[J(Lo,{expanded:S,isFocused:a,isMain:C}),J(y,{style:[j.labelText,a&&j.labelTextFocused,C&&j.labelTextMain],children:t}),J(y,{style:j.textGray500,children:`${String(P).toLowerCase()==="iterable"?"(Iterable) ":""}${f.length} ${f.length>1?"items":"item"}`})]}),e&&Pe(p,{style:j.flexRowGapItemsCenter,children:[J(Ni,{value:r,isFocused:a}),i&&l!==null&&J(Bo,{dataPath:I,isFocused:a}),P==="array"&&l!==null&&J($i,{dataPath:I,isFocused:a})]})]}),S&&Pe(Vr,{children:[z.length===1&&J(p,{style:[j.singleEntryContainer,C&&j.singleEntryContainerMain],children:f.map((c,u)=>J(qo,{defaultExpanded:o,label:c.label,value:c.value,editable:e,dataPath:[...I,c.label],itemsDeletable:P==="array"||P==="Iterable"||P==="object",dataVersion:s},c.label+u))}),z.length>1&&J(p,{style:j.multiEntryContainer,children:z.map((c,u)=>J(p,{children:Pe(p,{style:j.relativeOutlineNone,children:[Pe(N,{"sentry-label":"ignore devtools explorer page toggle",onPress:()=>k(m=>m.includes(u)?m.filter(O=>O!==u):[...m,u]),style:j.pageExpanderButton,hitSlop:Ht,children:[J(Lo,{expanded:T.includes(u)}),Pe(y,{style:j.pageRangeText,children:["[",u*lr,"...",u*lr+lr-1,"]"]})]}),T.includes(u)&&J(p,{style:j.entriesContainer,children:c.map(m=>J(qo,{defaultExpanded:o,label:m.label,value:m.value,editable:e,dataPath:[...I,m.label],dataVersion:s},m.label))})]})},u))})]})]}),z.length===0&&Pe(p,{style:j.flexRowGapFullWidth,children:[e&&l!==null&&(P==="string"||P==="number"||P==="boolean")?Pe(Vr,{children:[e&&l&&(P==="string"||P==="number")&&J(p,{style:j.nebulaInputWrapper,children:J(Hc,{label:t,accessibilityLabel:"Data input field for editing values",style:[P==="number"?j.textNumber:j.textString],keyboardType:P==="number"?"numeric":"default",value:b,onChangeText:c=>h(P==="number",c),onFocus:()=>d(true),onBlur:()=>d(false),showNumberControls:P==="number",onIncrement:()=>{let c=Number(b)||0;h(true,String(c+1))},onDecrement:()=>{let c=Number(b)||0;h(true,String(c-1))},showDeleteButton:i,onDelete:()=>{l.onChange(Tt(l.root,I))}})}),P==="boolean"&&Pe(p,{style:j.booleanRowContainer,children:[J(y,{style:j.booleanLabel,children:t}),J(p,{style:j.booleanToggleWrapper,children:J(Fc,{dataPath:I,value:r,itemsDeletable:i})})]})]}):Pe(Vr,{children:[J(y,{style:j.text344054,children:t}),J(y,{style:j.displayValueText,children:Oc(r)})]}),e&&i&&l!==null&&P!=="string"&&P!=="number"&&P!=="boolean"&&J(Bo,{dataPath:I,isFocused:a})]})]})})}var j=fe.create({buttonStyle:{backgroundColor:L.card+"E6",borderWidth:1,borderColor:L.textSecondary+"33",borderRadius:6,flexDirection:"row",alignItems:"center",justifyContent:"center",width:28,height:28,position:"relative",shadowColor:"#000",shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2},buttonStyleFocused:{borderColor:L.primary+"CC",backgroundColor:L.primary+"26",shadowColor:L.primary,shadowOpacity:.3,shadowRadius:4},deleteButton:{backgroundColor:L.error+"1A",borderColor:L.error+"4D",borderWidth:1,borderRadius:6,padding:0,alignItems:"center",justifyContent:"center",width:28,height:28,position:"relative",shadowColor:L.error,shadowOffset:{width:0,height:0},shadowOpacity:.15,shadowRadius:3},deleteButtonFocused:{borderColor:L.error+"CC",backgroundColor:L.error+"33",shadowOpacity:.3,shadowRadius:5},deleteButtonInToggle:{backgroundColor:L.error+"1A",borderColor:L.error+"4D",borderWidth:1,borderRadius:6,padding:0,alignItems:"center",justifyContent:"center",width:28,height:28,shadowColor:L.error,shadowOffset:{width:0,height:0},shadowOpacity:.15,shadowRadius:3},clearButton:{backgroundColor:L.warning+"1A",borderWidth:1,borderColor:L.warning+"4D",borderRadius:6,flexDirection:"row",padding:0,alignItems:"center",justifyContent:"center",width:28,height:28,position:"relative",zIndex:10,shadowColor:L.warning,shadowOffset:{width:0,height:0},shadowOpacity:.15,shadowRadius:3},clearButtonFocused:{borderColor:L.warning+"CC",backgroundColor:L.warning+"33",shadowOpacity:.3,shadowRadius:5},clearButtonText:{fontSize:12,fontWeight:"700",fontFamily:qe},expanderIcon:{width:18,height:18,alignItems:"center",justifyContent:"center",marginRight:1,backgroundColor:L.textSecondary+"14",borderRadius:3},expanderIconMain:{backgroundColor:L.textSecondary+"1A",width:20,height:20,borderRadius:4,borderWidth:.5,borderColor:L.textSecondary+"33"},expanded:{transform:[{rotate:"0deg"}]},collapsed:{transform:[{rotate:"0deg"}]},minWidthWrapper:{minWidth:180,fontSize:11,flexDirection:"row",flexWrap:"wrap",width:"100%",marginVertical:.5},fullWidthMarginRight:{position:"relative",width:"100%",marginRight:1},flexRowItemsCenterGap:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:3,paddingHorizontal:6,marginVertical:1,borderRadius:4,backgroundColor:L.card+"66",borderWidth:.5,borderColor:L.textSecondary+"1A"},flexRowItemsCenterGapMain:{backgroundColor:L.card+"E6",borderLeftWidth:2.5,borderLeftColor:L.textSecondary+"80",borderColor:L.textSecondary+"26",paddingVertical:5,paddingHorizontal:8,marginBottom:3,borderWidth:1,shadowColor:"#000",shadowOffset:{width:0,height:0},shadowOpacity:.08,shadowRadius:3},expanderButton:{flexDirection:"row",alignItems:"center",backgroundColor:"transparent",paddingVertical:1,paddingHorizontal:2,gap:6,borderWidth:0,minHeight:24,flex:1},labelText:{color:L.textSecondary,fontSize:10,fontWeight:"600",marginRight:4,fontFamily:qe,letterSpacing:.4},labelTextFocused:{color:L.text},labelTextMain:{color:L.text,fontSize:11,fontWeight:"700",letterSpacing:.6},textGray500:{color:L.textMuted,fontSize:10,fontWeight:"400",fontFamily:qe,opacity:.7},pageRangeText:{color:L.textSecondary,fontSize:10,fontWeight:"600",fontFamily:qe},flexRowGapItemsCenter:{flexDirection:"row",alignItems:"center",gap:4,paddingLeft:2},singleEntryContainer:{marginLeft:2,marginTop:2,paddingLeft:8,borderLeftWidth:1.5,borderLeftColor:L.textSecondary+"40"},singleEntryContainerMain:{borderLeftColor:L.textSecondary+"4D",marginLeft:4,paddingLeft:10},multiEntryContainer:{marginLeft:2,marginTop:2,paddingLeft:8,borderLeftWidth:1.5,borderLeftColor:L.textSecondary+"40"},multiEntryContainerMain:{borderLeftColor:L.textSecondary+"4D",marginLeft:4,paddingLeft:10},relativeOutlineNone:{position:"relative"},pageExpanderButton:{flexDirection:"row",alignItems:"center",backgroundColor:L.card+"66",paddingVertical:3,paddingHorizontal:6,gap:6,borderRadius:4,borderWidth:.5,borderColor:L.textSecondary+"1A",marginBottom:2,minHeight:24},entriesContainer:{marginLeft:2,paddingLeft:8,marginTop:2,borderLeftWidth:1.5,borderLeftColor:L.textSecondary+"40"},textNumber:{color:L.text,fontWeight:"600",fontFamily:qe},textString:{color:L.text,fontFamily:qe},flexRowGapFullWidth:{flexDirection:"row",width:"100%",alignItems:"center",marginVertical:1,gap:6,paddingHorizontal:4,paddingVertical:2,borderRadius:3},text344054:{color:L.textSecondary,fontWeight:"600",fontSize:9,minWidth:50,fontFamily:qe,letterSpacing:.4,opacity:.8},numberInputButtons:{position:"absolute",right:8,top:"50%",transform:[{translateY:-18}],flexDirection:"row",gap:4,zIndex:10},touchableButton:{width:32,height:32,borderRadius:6,backgroundColor:L.card+"E6",borderWidth:1,borderColor:L.textSecondary+"33",alignItems:"center",justifyContent:"center",marginLeft:2,shadowColor:"#000",shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2},touchableButtonFocused:{borderColor:L.primary+"CC",backgroundColor:L.primary+"26",shadowColor:L.primary,shadowOffset:{width:0,height:0},shadowOpacity:.3,shadowRadius:4,elevation:3},nebulaInputWrapper:{flex:1,width:"100%",position:"relative"},displayValueText:{flex:1,color:L.text,fontWeight:"400",fontFamily:qe,fontSize:12,paddingVertical:6,paddingHorizontal:10,borderRadius:6,borderWidth:1,borderColor:L.textMuted+"66",minHeight:34},dataRow:{flexDirection:"row",alignItems:"center",paddingVertical:4,paddingHorizontal:8,minHeight:44,gap:12},dataLabel:{color:L.textSecondary,fontSize:13,fontWeight:"500",minWidth:80,flexShrink:0},dataValueContainer:{flex:1,flexDirection:"row",alignItems:"center"},inputWithActions:{flex:1,position:"relative"},numberControls:{position:"absolute",right:8,top:"50%",transform:[{translateY:-16}],flexDirection:"column",gap:2},numberButton:{width:32,height:16,borderRadius:4,alignItems:"center",justifyContent:"center",borderWidth:1,borderColor:L.primary+"0F"},readOnlyValue:{color:L.text,fontSize:13,fontFamily:qe,paddingVertical:8,paddingHorizontal:12,borderRadius:6,borderWidth:1,borderColor:L.textMuted+"33",flex:1},actionButtons:{flexDirection:"row",gap:6,paddingLeft:8},booleanContainer:{flexDirection:"row",alignItems:"center",padding:8,borderRadius:6,borderWidth:1,borderColor:L.textMuted+"4D",flex:1},booleanText:{marginLeft:8,color:L.warning,fontWeight:"500",fontFamily:qe},modernToggleButton:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderRadius:6,borderWidth:1,borderColor:L.textMuted+"99",paddingHorizontal:8,paddingVertical:6,marginVertical:2,minHeight:34,gap:8},toggleIconContainer:{marginRight:6},toggleIcon:{padding:8,borderRadius:8,alignItems:"center",justifyContent:"center",width:32,height:32},toggleIconSmall:{width:8,height:8,borderRadius:4},toggleContent:{flex:1,minWidth:0},toggleLabel:{color:"#E5E7EB",fontSize:11,fontWeight:"600",fontFamily:qe,letterSpacing:.3},toggleStatus:{color:"#9CA3AF",fontSize:11},toggleBadge:{marginLeft:6,paddingHorizontal:6,paddingVertical:3,borderRadius:4,borderWidth:1},toggleBadgeText:{fontSize:9,fontWeight:"700",textTransform:"uppercase",letterSpacing:.8,fontFamily:qe},toggleIconTrue:{backgroundColor:L.primary},toggleIconFalse:{backgroundColor:L.textMuted},toggleBadgeTrue:{backgroundColor:L.primary+"1A",borderColor:L.primary+"4D"},toggleBadgeFalse:{backgroundColor:L.textMuted+"1A",borderColor:L.textMuted+"4D"},toggleTextTrue:{color:L.primary,fontWeight:"600"},toggleTextFalse:{color:L.textSecondary,fontWeight:"500"},booleanRowContainer:{flexDirection:"row",alignItems:"center",width:"100%",gap:8,paddingVertical:2},booleanLabel:{color:L.textSecondary,fontSize:10,fontWeight:"600",fontFamily:qe,letterSpacing:.4,minWidth:60,flexShrink:0},booleanToggleWrapper:{flex:1}});D();ce();import{useState as jc}from"react";import{absoluteFill as Fi,macOSColors as Ie}from"@buoy-gg/shared-ui/web";import{jsx as at,jsxs as Oo}from"react/jsx-runtime";function Do({title:e,hint:t,value:r,placeholder:o="Number",min:n,max:i,onSubmit:s,onCancel:l}){let[a,d]=jc(r!=null?String(r):""),b=()=>{let E=a.trim();if(!E){s(null);return}let C=Number(E);if(!Number.isFinite(C)){s(null);return}let S=C;n!=null&&(S=Math.max(n,S)),i!=null&&(S=Math.min(i,S)),s(S)};return Oo(p,{style:Oe.overlay,children:[at(N,{style:Oe.backdrop,activeOpacity:1,onPress:l,"sentry-label":"ignore dismiss number prompt"}),Oo(p,{style:Oe.panel,children:[at(y,{style:Oe.title,children:e}),at(Lt,{style:Oe.input,value:a,onChangeText:d,placeholder:o,placeholderTextColor:Ie.text.muted,keyboardType:"number-pad",autoFocus:true,selectTextOnFocus:true,onSubmitEditing:b,returnKeyType:"done","sentry-label":"ignore number prompt input",accessibilityLabel:e}),t?at(y,{style:Oe.hint,children:t}):null,Oo(p,{style:Oe.actions,children:[at(N,{onPress:l,"sentry-label":"ignore cancel number prompt",style:[Oe.button,Oe.cancelButton],children:at(y,{style:Oe.cancelText,children:"Cancel"})}),at(N,{onPress:b,"sentry-label":"ignore save number prompt",style:[Oe.button,Oe.saveButton],children:at(y,{style:Oe.saveText,children:"Set"})})]})]})]})}var Oe=fe.create({overlay:{...Fi,zIndex:40},backdrop:{...Fi,backgroundColor:"rgba(0,0,0,0.6)"},panel:{marginHorizontal:12,marginTop:12,padding:14,borderRadius:10,borderWidth:1,borderColor:Ie.border.hover,backgroundColor:Ie.background.card,gap:10},title:{fontSize:13,fontWeight:"700",color:Ie.text.primary},input:{backgroundColor:Ie.background.input,borderWidth:1,borderColor:Ie.border.input,borderRadius:6,paddingHorizontal:12,paddingVertical:10,fontSize:16,fontWeight:"700",color:Ie.text.primary},hint:{fontSize:10,color:Ie.text.muted},actions:{flexDirection:"row",gap:8},button:{flex:1,paddingVertical:10,borderRadius:6,alignItems:"center",borderWidth:1},cancelButton:{borderColor:Ie.border.default,backgroundColor:Ie.background.base},cancelText:{fontSize:12,fontWeight:"600",color:Ie.text.secondary},saveButton:{borderColor:Ie.semantic.info,backgroundColor:`${Ie.semantic.info}22`},saveText:{fontSize:12,fontWeight:"700",color:Ie.semantic.info}});import{Fragment as ji,jsx as V,jsxs as Te}from"react/jsx-runtime";var Wc=["GET","POST","PUT","PATCH","DELETE"],Wi=[0,500,1e3,3e3,1e4],Vi=[{id:"500",label:"Server error",code:"500",danger:true,patch:{kind:"respond",status:500,statusText:"Internal Server Error"}},{id:"401",label:"Unauthorized",code:"401",danger:true,patch:{kind:"respond",status:401,statusText:"Unauthorized"}},{id:"404",label:"Not found",code:"404",danger:true,patch:{kind:"respond",status:404,statusText:"Not Found"}},{id:"403",label:"Forbidden",code:"403",danger:true,patch:{kind:"respond",status:403,statusText:"Forbidden"}},{id:"429",label:"Rate limited",code:"429",danger:true,patch:{kind:"respond",status:429,statusText:"Too Many Requests"}},{id:"503",label:"Unavailable",code:"503",danger:true,patch:{kind:"respond",status:503,statusText:"Service Unavailable"}},{id:"400",label:"Bad request",code:"400",danger:true,patch:{kind:"respond",status:400,statusText:"Bad Request"}},{id:"200",label:"Success",code:"200",patch:{kind:"respond",status:200,statusText:"OK"}},{id:"offline",label:"Offline",danger:true,patch:{kind:"fail",failKind:"network"}},{id:"timeout",label:"Timeout",danger:true,patch:{kind:"fail",failKind:"timeout"}},{id:"passthrough",label:"Real response",patch:{kind:"delay"}}];function Vc(e){return e.kind==="delay"?"passthrough":e.kind==="fail"?e.failKind==="timeout"?"timeout":"offline":String(e.status??200)}function Uc({outcome:e,active:t,onPress:r}){let o=e.danger?U.semantic.error:U.semantic.info;return Te(N,{onPress:r,"sentry-label":"ignore override outcome",testID:`buoy-network-outcome-${e.label.toLowerCase().replace(/\s+/g,"-")}${e.code?`-${e.code}`:""}`,accessibilityRole:"button",accessibilityLabel:`${e.label}${e.code?` ${e.code}`:""}`,style:[M.outcome,t&&{borderColor:o,backgroundColor:`${o}1F`}],children:[V(y,{style:[M.outcomeLabel,t&&{color:o}],children:e.label}),e.code?V(y,{style:[M.outcomeCode,t&&{color:o}],children:e.code}):null]})}function Ui({title:e,summary:t,open:r,onToggle:o,children:n}){return Te(p,{style:M.disclosure,children:[Te(N,{onPress:o,"sentry-label":"ignore override disclosure",testID:`buoy-network-disclosure-${e.toLowerCase().replace(/\s+/g,"-")}`,accessibilityRole:"button",accessibilityLabel:e,style:M.disclosureHeader,children:[r?V(Pc,{size:12,color:U.text.muted}):V(Ic,{size:12,color:U.text.muted}),V(y,{style:M.disclosureTitle,children:e}),t&&!r?V(y,{style:M.disclosureSummary,numberOfLines:1,children:t}):null]}),r?V(p,{style:M.disclosureBody,children:n}):null]})}function Mt({label:e,active:t,onPress:r}){return V(N,{onPress:r,"sentry-label":"ignore override chip",testID:`buoy-network-chip-${e.toLowerCase().replace(/\s+/g,"-")}`,accessibilityRole:"button",accessibilityLabel:e,style:[M.chip,t&&M.chipActive],children:V(y,{style:[M.chipText,t&&M.chipTextActive],children:e})})}function _c({draft:e,onChange:t,onSave:r,onCancel:o,saveLabel:n="Save",applySafeAreaInset:i=false}){let s=Lc({minBottom:16}),l=i?s.bottom:0,a=m=>t({...e,...m}),[d,b]=Nr(!e.urlPattern.trim()),[E,C]=Nr(false),[S,q]=Nr(null),[g,T]=Nr(null),k=Vc(e),f=e.kind==="respond"&&typeof e.status=="number"&&!Vi.some(m=>m.code===String(e.status)),P=e.kind==="respond",z=e.methods?.[0],I=`${z??"Any"} ${e.urlPattern||"No URL yet"}`,w=zi(()=>{let m=(e.body??"").trim();if(!m)return"Empty";let O=m.split(`
|
|
143
|
+
`).length;return`${O} line${O===1?"":"s"}`},[e.body]),H=zi(()=>{let m=(e.body??"").trim();if(!m)return null;try{return JSON.parse(m)}catch{return null}},[e.body]),v=(e.body??"").trim().length>0&&!H,h=e.delayMs??0,c=h>0&&!Wi.includes(h),u=!e.alternate&&typeof e.times=="number"&&e.times!==1;return Te(p,{style:M.root,children:[Te(ut,{testID:"buoy-network-editor-scroll",style:M.scroll,contentContainerStyle:M.scrollContent,keyboardShouldPersistTaps:"handled",children:[Te(Ui,{title:"Applies to",summary:I,open:d,onToggle:()=>b(m=>!m),children:[V(Lt,{style:M.input,value:e.urlPattern,onChangeText:m=>a({urlPattern:m}),testID:"buoy-network-override-pattern",accessibilityLabel:"Override URL pattern",placeholder:"https://api.example.com/v1/users*",placeholderTextColor:U.text.muted,autoCapitalize:"none",autoCorrect:false,multiline:true,"sentry-label":"ignore override url pattern"}),Te(p,{style:M.chipRow,children:[V(Mt,{label:"Any",active:!z,onPress:()=>a({methods:void 0})}),Wc.map(m=>V(Mt,{label:m,active:z===m,onPress:()=>a({methods:[m]})},m))]})]}),Te(p,{style:M.outcomeGrid,children:[Vi.map(m=>V(Uc,{outcome:m,active:k===m.id,onPress:()=>a(m.patch)},m.id)),V(N,{onPress:()=>T("status"),"sentry-label":"ignore custom status",accessibilityLabel:"Custom status code",style:[M.customField,f&&M.customFieldActive],children:V(y,{style:[M.customValue,f&&M.customInputActive],children:f?String(e.status):"Custom"})})]}),P?V(Ui,{title:"Response body",summary:w,open:E,onToggle:()=>C(m=>!m),children:S!==null?Te(ji,{children:[V(Lt,{style:[M.input,M.bodyInput],value:S,onChangeText:q,placeholder:"Paste a new body\u2026",placeholderTextColor:U.text.muted,autoCapitalize:"none",autoCorrect:false,autoFocus:true,multiline:true,"sentry-label":"ignore override body paste"}),Te(p,{style:M.inlineActions,children:[V(N,{onPress:()=>q(null),"sentry-label":"ignore cancel body paste",style:M.textButton,children:V(y,{style:M.textButtonMuted,children:"Cancel"})}),V(N,{onPress:()=>{let m=S.trim();try{a({body:JSON.stringify(JSON.parse(m),null,2)})}catch{a({body:m})}q(null)},disabled:!S.trim(),"sentry-label":"ignore apply body paste",style:M.textButton,children:V(y,{style:[M.textButtonLabel,!S.trim()&&M.textButtonDisabled],children:"Replace"})})]})]}):Te(ji,{children:[H!==null?V(Hi.Provider,{value:{root:H,onChange:m=>a({body:JSON.stringify(m,null,2)})},children:V(qo,{editable:true,label:"",value:H,defaultExpanded:[""]})}):V(y,{style:M.emptyBody,children:v?"This body isn't JSON, so there's no tree to show.":"No body yet."}),V(N,{onPress:()=>q(""),"sentry-label":"ignore edit all body",style:M.textButton,children:V(y,{style:M.textButtonLabel,children:"Edit all"})})]})}):null,Te(p,{style:M.field,children:[V(y,{style:M.subLabel,children:"Delay"}),Te(p,{style:M.chipRow,children:[Wi.map(m=>V(Mt,{label:m===0?"None":`${m/1e3}s`,active:h===m,onPress:()=>a({delayMs:m})},m)),V(N,{onPress:()=>T("delay"),"sentry-label":"ignore custom delay",accessibilityLabel:"Custom delay in seconds",style:[M.customField,c&&M.customFieldActive],children:V(y,{style:[M.customValue,c&&M.customInputActive],children:c?`${h/1e3}s`:"Custom"})})]})]}),Te(p,{style:M.field,children:[V(y,{style:M.subLabel,children:"Fires"}),V(y,{style:M.subHint,children:"A limited rule switches itself off once it's used up. Every other alternates forever \u2014 the first request through, the next overridden."}),Te(p,{style:M.chipRow,children:[V(Mt,{label:"Always",active:!e.alternate&&e.times==null,onPress:()=>a({alternate:false,times:null})}),V(Mt,{label:"Once",active:!e.alternate&&e.times===1,onPress:()=>a({alternate:false,times:1})}),V(Mt,{label:"Every other",active:e.alternate===true,onPress:()=>a({alternate:true,times:null})}),V(N,{onPress:()=>{a({alternate:false}),T("times")},"sentry-label":"ignore custom times",accessibilityLabel:"Custom number of times",style:[M.customField,u&&M.customFieldActive],children:V(y,{style:[M.customValue,u&&M.customInputActive],children:u?`${e.times}\xD7`:"Custom"})})]})]})]}),g==="status"?V(Do,{title:"Custom status code",hint:`${Ut}\u2013${_t}`,value:f?e.status:void 0,min:Ut,max:_t,onSubmit:m=>{a({kind:"respond",status:m??void 0,statusText:void 0}),T(null)},onCancel:()=>T(null)}):null,g==="delay"?V(Do,{title:"Custom delay",hint:"Seconds",value:c?h/1e3:void 0,min:0,onSubmit:m=>{a({delayMs:m!=null?Math.round(m*1e3):0}),T(null)},onCancel:()=>T(null)}):null,g==="times"?V(Do,{title:"Fires how many times",hint:"Leave empty for always",value:u?e.times:void 0,min:1,onSubmit:m=>{a({alternate:false,times:m&&m>0?m:null}),T(null)},onCancel:()=>T(null)}):null,Te(p,{style:[M.footer,{paddingBottom:12+l}],children:[V(N,{onPress:o,"sentry-label":"ignore cancel override",testID:"buoy-network-editor-cancel",accessibilityRole:"button",accessibilityLabel:"Cancel",style:[M.footerButton,M.cancelButton],children:V(y,{style:M.cancelText,children:"Cancel"})}),V(N,{onPress:r,disabled:!e.urlPattern.trim(),"sentry-label":"ignore save override",testID:"buoy-network-editor-save",accessibilityRole:"button",accessibilityLabel:n,style:[M.footerButton,M.saveButton,!e.urlPattern.trim()&&M.saveButtonDisabled],children:V(y,{style:M.saveText,children:n})})]})]})}var M=fe.create({root:{flex:1},scroll:{flex:1},scrollContent:{padding:12,paddingBottom:24,gap:4},field:{gap:8,paddingVertical:6},outcomeGrid:{flexDirection:"row",flexWrap:"wrap",gap:6,paddingVertical:10},outcome:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:9,borderRadius:6,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.card},outcomeLabel:{fontSize:12,fontWeight:"600",color:U.text.primary},outcomeCode:{fontSize:10,fontWeight:"700",color:U.text.muted},disclosure:{borderRadius:6,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.card,overflow:"hidden"},disclosureHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:10},disclosureTitle:{fontSize:12,fontWeight:"600",color:U.text.primary},disclosureSummary:{flex:1,textAlign:"right",fontSize:11,color:U.text.muted},disclosureBody:{paddingHorizontal:10,paddingBottom:10,gap:8},input:{backgroundColor:U.background.input,borderWidth:1,borderColor:U.border.input,borderRadius:6,paddingHorizontal:10,paddingVertical:8,color:U.text.primary,fontSize:12,fontFamily:Bc,minHeight:40},bodyInput:{minHeight:140,textAlignVertical:"top"},chipRow:{flexDirection:"row",flexWrap:"wrap",gap:6},chip:{paddingHorizontal:10,paddingVertical:6,borderRadius:5,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.base},chipActive:{borderColor:U.semantic.info,backgroundColor:`${U.semantic.info}1F`},chipText:{fontSize:11,fontWeight:"600",color:U.text.secondary},chipTextActive:{color:U.semantic.info},customField:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,borderRadius:5,borderWidth:1,borderColor:U.border.default,backgroundColor:U.background.base},customFieldActive:{borderColor:U.semantic.info,backgroundColor:`${U.semantic.info}1F`},customValue:{paddingVertical:6,fontSize:11,fontWeight:"600",color:U.text.secondary},customInputActive:{color:U.semantic.info},subHint:{fontSize:10,lineHeight:14,color:U.text.muted,marginTop:-2},subLabel:{fontSize:10,fontWeight:"700",letterSpacing:.6,color:U.text.muted,textTransform:"uppercase"},textButton:{alignSelf:"flex-start",paddingVertical:4},textButtonLabel:{fontSize:11,fontWeight:"600",color:U.semantic.info},textButtonMuted:{fontSize:11,fontWeight:"600",color:U.text.secondary},textButtonDisabled:{opacity:.4},inlineActions:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},emptyBody:{fontSize:11,color:U.text.muted,paddingVertical:6},footer:{flexDirection:"row",gap:8,padding:12,borderTopWidth:1,borderTopColor:U.border.default,backgroundColor:U.background.base},footerButton:{flex:1,paddingVertical:11,borderRadius:6,alignItems:"center",borderWidth:1},cancelButton:{borderColor:U.border.default,backgroundColor:U.background.card},cancelText:{fontSize:12,fontWeight:"600",color:U.text.secondary},saveButton:{borderColor:U.semantic.info,backgroundColor:`${U.semantic.info}22`},saveButtonDisabled:{opacity:.4},saveText:{fontSize:12,fontWeight:"700",color:U.semantic.info}});import{jsx as de,jsxs as Rt}from"react/jsx-runtime";function Xc(){return{enabled:true,urlPattern:"",kind:"respond",status:500,body:"",times:null}}function Jc(e){let{id:t,hits:r,seen:o,createdAt:n,...i}=e;return i}function Gc(e){let t=e.urlPattern,r=t.indexOf("://");if(r===-1)return t;let o=t.indexOf("/",r+3);return o===-1?t.slice(r+3):t.slice(o)}function Kc(e){let t=[];return e.delayMs&&t.push(`${e.delayMs/1e3}s delay`),e.alternate?t.push("every other"):e.times===1?t.push("once"):typeof e.times=="number"&&t.push(`${e.times}\xD7`),t.join(" \xB7 ")}function Yc(e){if(e.kind==="fail")return Y.semantic.error;if(e.kind==="delay")return Y.semantic.info;let t=e.status??200;return t>=200&&t<300?Y.semantic.success:t>=300&&t<400?Y.semantic.info:Y.semantic.error}function Zc({rule:e,spent:t,onEdit:r,onDelete:o}){let n=e.enabled&&!t,i=Yc(e),s=Kc(e),l=e.methods?.length?e.methods.join("/"):"ANY";return Rt(xc,{onPress:r,style:se.cardWrapper,contentStyle:[se.card,{borderLeftColor:n?i:"transparent"}],children:[de(Cc,{method:l,size:"small"}),Rt(p,{style:se.cardMiddle,children:[de(y,{style:[se.urlText,!n&&se.urlTextOff],numberOfLines:2,children:Gc(e)}),s?de(y,{style:se.extrasText,children:s}):null]}),e.hits>0?de(y,{style:se.rowHits,children:e.hits}):null,e.kind==="fail"?Rt(p,{style:se.failBadge,children:[de(vc,{size:10,color:Y.semantic.error}),de(y,{style:se.failText,children:e.failKind==="timeout"?"TIMEOUT":"OFFLINE"})]}):de(y,{style:[se.statusText,{color:i}],children:e.kind==="delay"?"PASS":String(e.status??200)}),de(N,{onPress:o,"sentry-label":"ignore delete override rule",testID:"buoy-network-rule-delete",accessibilityRole:"button",accessibilityLabel:"Delete rule",hitSlop:{top:8,bottom:8,left:4,right:4},style:se.rowDelete,children:de(Rc,{size:13,color:Y.text.muted})})]})}function Qc(e){return e.visible?de(eh,{...e}):null}function eh({isPro:e,onUpgradePress:t,pendingDraft:r,onPendingConsumed:o,backHandlerRef:n,applySafeAreaInset:i}){let s=kc("network.overrideRules"),l=e?rt:s,{enabled:a,autoPaused:d,rules:b,activeCount:E,setEnabled:C,upsertRule:S,setRuleEnabled:q,removeRule:g,isRuleSpent:T}=Ar(),[k,f]=bc(null);Mr(()=>{_.noteHealthyLaunch()},[]),Mr(()=>{if(n)return n.current=k?()=>(f(null),true):null,()=>{n.current=null}},[n,k]);let P=yc(v=>{_.fetchRuleBody(v).then(h=>{h!=null&&f(c=>c?.id===v?{...c,draft:{...c.draft,body:h,bodyOmitted:void 0}}:c)})},[]);Mr(()=>{if(!r)return;let{id:v,...h}=r;f({id:v,draft:h}),v&&h.bodyOmitted&&P(v),o?.()},[r,o,P]),Mr(()=>{k?.id&&(b.some(v=>v.id===k.id)||f(null))},[k?.id,b]);let z=v=>{f({id:v.id,draft:Jc(v)}),v.bodyOmitted&&P(v.id)},I=v=>{b.filter(h=>h.enabled&&!T(h)).length<=l||b.filter(h=>h.enabled&&!T(h)&&h.id!==v).forEach(h=>q(h.id,false))},w=()=>{if(!k)return;let v={...k.draft,enabled:true,urlPattern:k.draft.urlPattern.trim()};if(!v.urlPattern)return;let h=S({...v,id:k.id});I(h?.id??k.id),C(true),f(null)};if(k)return de(_c,{draft:k.draft,onChange:v=>f({...k,draft:v}),onSave:w,onCancel:()=>f(null),saveLabel:k.id?"Save":"Add",applySafeAreaInset:i});let H=b.length>0;return Rt(p,{style:se.root,children:[H?Rt(p,{style:[se.bar,a&&E>0&&se.barOn],children:[a&&E>0?de(Sc,{size:12,color:Y.semantic.warning}):null,de(y,{style:[se.barText,a&&E>0&&se.barTextOn],numberOfLines:2,children:d?"Overrides paused \u2014 they'd been on for 3 launches":a&&E>0?`${E} override${E===1?" is":"s are"} on`:"Overrides are off"}),de(N,{onPress:()=>C(!(a&&E>0)),"sentry-label":"ignore toggle overrides master",testID:"buoy-network-overrides-master",accessibilityRole:"button",style:se.barButton,children:de(y,{style:se.barButtonText,children:a&&E>0?"Turn all off":d?"Turn back on":"Turn on"})})]}):null,Rt(p,{style:se.listHeader,children:[de(y,{style:se.listHeaderText,children:H?`${b.length} rule${b.length===1?"":"s"}`:""}),de(N,{onPress:()=>f({draft:Xc()}),"sentry-label":"ignore new override rule",accessibilityLabel:"New override rule",style:se.newButton,children:de(Tc,{size:14,color:Y.semantic.info})})]}),H?Rt(ut,{style:se.list,contentContainerStyle:se.listContent,keyboardShouldPersistTaps:"handled",children:[b.map(v=>de(Zc,{rule:v,spent:T(v),onEdit:()=>z(v),onDelete:()=>g(v.id)},v.id)),l<rt?de(y,{style:se.footNote,children:`Your plan: ${l} override at a time. Pro: up to ${rt}.`}):null]}):de(p,{style:se.emptyWrap,children:de(wc,{otto:"empty",iconSize:32,title:"Nothing overridden",description:"Open any request and tap Override, or + to write a rule."})})]})}var se=fe.create({root:{flex:1},bar:{flexDirection:"row",alignItems:"center",gap:8,paddingHorizontal:12,paddingVertical:10,borderBottomWidth:1,borderBottomColor:Y.border.default,backgroundColor:Y.background.card},barOn:{borderBottomColor:Y.semantic.warning+"44",backgroundColor:Y.semantic.warningBackground},barText:{flex:1,fontSize:12,fontWeight:"600",color:Y.text.secondary},barTextOn:{color:Y.semantic.warning},barButton:{paddingHorizontal:10,paddingVertical:6,borderRadius:5,borderWidth:1,borderColor:Y.border.hover,backgroundColor:Y.background.base},barButtonText:{fontSize:11,fontWeight:"700",color:Y.text.primary},listHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingTop:10,paddingBottom:4},listHeaderText:{fontSize:10,fontWeight:"700",letterSpacing:.6,color:Y.text.muted,textTransform:"uppercase"},newButton:{padding:6,borderRadius:5,borderWidth:1,borderColor:Y.border.default,backgroundColor:Y.background.card},emptyWrap:{flex:1,justifyContent:"center"},list:{flex:1},listContent:{padding:10,gap:6},cardWrapper:{marginHorizontal:0,marginVertical:0},card:{flexDirection:"row",alignItems:"center",gap:8,borderLeftWidth:3,borderLeftColor:"transparent"},cardMiddle:{flex:1},urlText:{fontSize:12,color:Y.text.primary,lineHeight:16,fontFamily:Ec},urlTextOff:{color:Y.text.muted},extrasText:{fontSize:10,color:Y.text.secondary,marginTop:2},statusText:{fontSize:11,fontWeight:"600"},failBadge:{flexDirection:"row",alignItems:"center",gap:2,paddingHorizontal:4,paddingVertical:1,backgroundColor:Y.semantic.error+"26",borderRadius:3},failText:{fontSize:10,color:Y.semantic.error,fontWeight:"600"},rowHits:{fontSize:11,fontWeight:"700",color:Y.semantic.warning},rowDelete:{padding:5,borderRadius:5,borderWidth:1,borderColor:Y.border.default,backgroundColor:Y.background.base},footNote:{fontSize:10,lineHeight:14,color:Y.text.muted,paddingHorizontal:4,paddingTop:8}});D();ce();import{FlaskConical as th,night as kt}from"@buoy-gg/shared-ui/web";import{jsx as zo,jsxs as rh}from"react/jsx-runtime";function oh({onPress:e}){let{activeCount:t}=Ar(),r=t>0;return rh(N,{onPress:e,"sentry-label":"ignore open overrides",testID:"buoy-network-overrides",accessibilityRole:"button",style:[Ur.button,r&&Ur.buttonActive],accessibilityLabel:r?`Response overrides \u2014 ${t} active`:"Response overrides",children:[zo(th,{size:14,color:r?kt.color.warning:kt.color.textSecondary}),r?zo(p,{style:Ur.badge,children:zo(y,{style:Ur.badgeText,children:t})}):null]})}var Ur=fe.create({button:{width:32,height:32,borderRadius:8,alignItems:"center",justifyContent:"center",backgroundColor:kt.color.buttonSurface,borderWidth:1,borderColor:kt.color.border},buttonActive:{backgroundColor:kt.color.warningSoft,borderColor:kt.color.warning+"77"},badge:{position:"absolute",top:1,right:1,minWidth:12,height:12,borderRadius:6,paddingHorizontal:3,alignItems:"center",justifyContent:"center",backgroundColor:kt.color.warning},badgeText:{fontSize:8,fontWeight:"800",color:"#000000"}});D();ce();import{night as Nt}from"@buoy-gg/shared-ui/web";D();function nh(e){let t=e.indexOf("?");return t===-1?e:`${e.slice(0,t)}*`}function ih(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return""}}function Ao(e){return{enabled:true,name:void 0,urlPattern:nh(e.url),methods:[String(e.method||"GET").toUpperCase()],kind:"respond",status:e.status&&e.status>=200?e.status:200,statusText:e.statusText,body:ih(e.responseData),times:null}}import{jsx as _i}from"react/jsx-runtime";function sh({onOpen:e}){let t=Ro(),{rules:r,isRuleSpent:o}=Ar(),n=t?K.getEvents().find(l=>l.id===t)??ae.getEventById(t):null,i=n?r.find(l=>l.enabled&&!o(l)&&lo(l,n.url,String(n.method||"GET")))??null:null,s=i!==null;return _i(N,{onPress:()=>{if(n){if(i){let{id:l,hits:a,seen:d,createdAt:b,...E}=i;e(E,l);return}e(Ao(n))}},"sentry-label":"ignore open overrides",testID:"buoy-network-override-request",accessibilityRole:"button",accessibilityLabel:s?"Edit the override on this request":"Override this request",style:[_r.button,s&&_r.buttonActive],children:_i(y,{style:[_r.label,s&&_r.labelActive],children:"Override"})})}var _r=fe.create({button:{paddingHorizontal:10,paddingVertical:6,borderRadius:8,borderWidth:1,borderColor:Nt.color.border,backgroundColor:Nt.color.buttonSurface},buttonActive:{borderColor:Nt.color.warning+"77",backgroundColor:Nt.color.warningSoft},label:{fontSize:11,fontWeight:"700",color:Nt.color.accent},labelActive:{color:Nt.color.warning}});D();ce();import{absoluteFill as Xi,night as lt}from"@buoy-gg/shared-ui/web";import{jsx as Qe,jsxs as Xr}from"react/jsx-runtime";function ah({onPress:e,isOpen:t,hasIndicator:r}){return Xr(N,{onPress:e,"sentry-label":"ignore toggle header menu",testID:"buoy-network-menu",accessibilityRole:"button",accessibilityLabel:t?"Close menu":"More actions",style:[we.button,t&&we.buttonOpen],children:[Xr(p,{style:we.dots,children:[Qe(p,{style:[we.dot,t&&we.dotOpen]}),Qe(p,{style:[we.dot,t&&we.dotOpen]}),Qe(p,{style:[we.dot,t&&we.dotOpen]})]}),r?Qe(p,{style:we.indicator}):null]})}function lh({onClose:e,children:t}){return Xr(p,{style:we.overlay,children:[Qe(N,{style:we.backdrop,activeOpacity:1,onPress:e,"sentry-label":"ignore dismiss header menu"}),Qe(p,{style:we.panel,children:t})]})}function Ho({icon:e,label:t,detail:r,testID:o,onPress:n}){return Xr(N,{onPress:n,"sentry-label":"ignore header menu item",testID:o,accessibilityRole:"button",accessibilityLabel:t,style:we.item,children:[Qe(p,{style:we.itemIcon,children:e}),Qe(y,{style:we.itemLabel,children:t}),r?Qe(y,{style:we.itemDetail,children:r}):null]})}var we=fe.create({button:{width:32,height:32,borderRadius:8,alignItems:"center",justifyContent:"center"},buttonOpen:{backgroundColor:lt.color.surfaceElevated},dots:{flexDirection:"column",gap:2.5,alignItems:"center"},dot:{width:3,height:3,borderRadius:2,backgroundColor:lt.color.textSecondary},dotOpen:{backgroundColor:lt.color.text},indicator:{position:"absolute",top:6,right:8,width:6,height:6,borderRadius:3,backgroundColor:lt.color.accent},overlay:{...Xi,zIndex:50},backdrop:{...Xi,backgroundColor:"rgba(0,0,0,0.5)"},panel:{position:"absolute",top:6,right:8,minWidth:196,paddingVertical:4,borderRadius:10,borderWidth:1,borderColor:lt.color.border,backgroundColor:lt.color.surface},item:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:12,paddingVertical:11},itemIcon:{width:16,alignItems:"center"},itemLabel:{flex:1,fontSize:13,fontWeight:"600",color:lt.color.text},itemDetail:{fontSize:11,color:lt.color.textTertiary}});D();import{memo as dh,useEffect as uh,useMemo as ch}from"react";import{EventStepperFooter as hh,useLimit as ph}from"@buoy-gg/shared-ui/web";import{jsx as fh}from"react/jsx-runtime";var gh=()=>Ve.step(-1),mh=()=>Ve.step(1),yh=dh(function({paused:e,filter:t,ignoredPatterns:r,isPro:o,fromSaved:n,savedSearch:i,applySafeAreaInset:s}){let{visibleEvents:l}=sr({filter:t,ignoredPatterns:r,paused:e,isPro:o}),{pinnedEvents:a,pinnedLiveIds:d,savedRecords:b}=Ot(),E=ph("network.saved"),C=ch(()=>{if(n)return Oi(b,E,i).events;let{pinned:g,rest:T}=Po(l,a,d);return g.length===0?T:[...g,...T]},[n,b,i,o,l,a,d]);uh(()=>{Ve.setIds(ou(C))},[C]);let{index:S,total:q}=su();return S<0?null:fh(hh,{currentIndex:S,totalItems:q,itemLabel:"Request",applySafeAreaInset:s,onPrevious:gh,onNext:mh,variant:"night"})});D();import{useEffect as bh,useState as vh}from"react";function Sh(e){return K.getEvents().find(t=>t.id===e)??ae.getEventById(e)}function Ji(e,t={}){let{paused:r=false}=t,[o,n]=vh(null);return bh(()=>{if(!(!e||r))return K.subscribeToEvents(i=>{let s=i.find(l=>l.id===e);s&&n(l=>l&&l.id===e&&l.event===s?l:{id:e,event:s})})},[e,r]),e?o&&o.id===e?o.event:Sh(e):null}import{Fragment as xh,jsx as F,jsxs as Ne}from"react/jsx-runtime";function wh({visible:e,paused:t,ignoredPatternValues:r,onTogglePattern:o,isPro:n,filter:i,ignoredPatterns:s,fromSaved:l,savedSearch:a,applySafeAreaInset:d}){let b=Ro(),E=iu(),C=b!=null&&b===E,S=Ji(b,{paused:t||!e});return yt(()=>{e&&S&&C&&Ve.reportRendered(S.id)},[e,S,C]),e?Ne(p,{style:Et.detailRoot,children:[S?F(oi,{event:S,ignoredPatterns:r,onTogglePattern:o,showBodies:C}):F(p,{style:Et.detailBodyFallback}),F(yh,{paused:t,filter:i,ignoredPatterns:s,isPro:n,fromSaved:l,savedSearch:a,applySafeAreaInset:d})]}):null}function Ch({visible:e,paused:t,isPro:r,filter:o,onFilterChange:n,ignoredPatterns:i,onRemovePattern:s,onAddPattern:l,onTogglePatternMode:a,isTeamPattern:d}){let{events:b}=sr({filter:o,ignoredPatterns:i,paused:t,visible:e,isPro:r});return e?F(jl,{events:b,filter:o,onFilterChange:n,ignoredPatterns:i,onRemovePattern:s,onAddPattern:l,onTogglePatternMode:a,isTeamPattern:d}):null}function Th({visible:e,paused:t,isPro:r,filter:o,ignoredPatterns:n,settings:i,onSettingsChange:s}){let{events:l}=sr({filter:o,ignoredPatterns:n,paused:t,visible:e,isPro:r});return e?F(Ld,{settings:i,onSettingsChange:s,events:l}):null}function Gi({visible:e,onClose:t,onBack:r,onMinimize:o,enableSharedModalDimensions:n=false,inline:i=false,paused:s,onPausedChange:l,remoteConditions:a}){let{isPro:d}=Tl(),[b,E]=ye(false),C=s!=null&&l!=null,S=C?s:b,q=Q=>{let De=typeof Q=="function"?Q(S):Q;C?l(De):E(De)},[g,T]=ye({}),k=nu(),[f,P]=ye(false),[z,I]=ye(false),[w,H]=ye(false),[v,h]=ye(false),[c,u]=ye(0),[m]=ye(pl);yt(()=>{m.update(a)},[m,a]),yt(()=>()=>m.update(void 0),[m]);let O=true,[re,Z]=ye(null),[ee,G]=ye("filters"),[A,W]=ye(""),[$,ne]=ye(false),pe=wr(false),[tt,dt]=ye(""),is=wr(null),{patterns:Pt,values:ss,add:as,remove:ls,toggle:ds,toggleMode:us,isTeamOnly:cs}=El(),[Ft,_o]=ye(Rd),Zr=wr(false),[Qr,eo]=ye(false),[It,hs]=ye("export"),jt=Q=>{hs(Q),eo(true)};yt(()=>{Qr&&d&&eo(false)},[Qr,d]),yt(()=>{if(!e||Zr.current)return;(async()=>{try{let Q=await Fn.getItem(Cr.network.copyOptions());if(Q){let De=JSON.parse(Q);_o(De)}}catch{}finally{Zr.current=true}})()},[e]),yt(()=>{if(!Zr.current)return;(async()=>{try{await Fn.setItem(Cr.network.copyOptions(),JSON.stringify(Ft))}catch{}})()},[Ft]);let ps=()=>{Ve.clear()},Xo=go(Q=>{Ve.select(Q.id)},[]),fs=go((Q,De)=>{Z(De?{...Q,id:De}:Q),H(true),Ve.clear()},[]),gs=go(()=>Z(null),[]),Jo=wr(null),Go=Q=>{W(Q),T(De=>({...De,searchText:Q}))},ms=Q=>{T(De=>({...De,status:De.status===Q?void 0:Q}))},[Ko,ys]=ye("bottomSheet"),bs=Q=>{ys(Q)};yt(()=>{$&&requestAnimationFrame(()=>{is.current?.focus()})},[$]);let Yo=()=>f?Ne(ge,{children:[F(ge.Navigation,{onBack:()=>P(false)}),F(ge.Content,{title:"",noMargin:true,children:F(Cl,{size:"sm",tabs:[{key:"filters",label:"Filters"},{key:"copy",label:"Copy"}],activeKey:ee,onChange:Q=>G(Q)})})]}):k?Ne(ge,{children:[F(ge.Navigation,{onBack:ps}),F(ge.Content,{title:"Request Details",centered:true}),Ne(ge.Actions,{children:[O?F(sh,{onOpen:fs}):null,F(Ei,{isPro:d,onUpgradePress:()=>jt("saved")})]})]}):w&&O?Ne(ge,{children:[F(ge.Navigation,{onBack:()=>{Jo.current?.()||(H(false),Z(null))}}),F(ge.Content,{title:"Response Overrides",centered:true})]}):z?Ne(ge,{children:[F(ge.Navigation,{onBack:()=>I(false)}),F(ge.Content,{title:"Saved Requests",centered:true})]}):Ne(ge,{children:[r&&F(ge.Navigation,{onBack:r}),F(ge.Content,{title:"",children:$?F(ge.Search,{value:A,onChangeText:Go,onCancel:()=>{Go(""),ne(false)},onDismiss:()=>ne(false),dismissOnBlur:true,clearOnlyWhenText:true,placeholder:"Search URL, method, operation, error...",accessibilityLabel:"Search network requests",iconSize:14,testID:"buoy-network-search-input",clearTestID:"buoy-network-search-clear",inputProps:{"sentry-label":"ignore network search header"}}):F(pu,{activeStatus:g.status,onToggleStatus:ms,ignoredPatterns:Pt,paused:S})}),Ne(ge.Actions,{children:[F(N,{"sentry-label":"ignore open search",testID:"buoy-network-search-open",accessibilityLabel:"Open search",accessibilityRole:"button",onPress:()=>ne(true),style:Et.headerActionButton,children:F(yl,{size:14,color:Ke.color.textSecondary})}),O?F(oh,{onPress:()=>H(true)}):null,F(kl,{isEnabled:!S,onToggle:()=>q(Q=>!Q),accessibilityLabel:S?"Resume network capture":"Pause network capture",testID:"buoy-network-power"}),F(fu,{paused:S}),F(ah,{onPress:()=>h(Q=>!Q),isOpen:v,hasIndicator:to})]})]}),to=!!(g.status||g.method||g.contentType),vs=n?Cr.modal.root():Cr.network.modal();if(!e)return null;let Ss=k||!f,Zo=Ne(xh,{children:[Ne(p,{style:Et.container,children:[F(wh,{visible:k,paused:S,ignoredPatternValues:ss,onTogglePattern:ds,isPro:d,filter:g,ignoredPatterns:Pt,fromSaved:z,savedSearch:tt,applySafeAreaInset:!i&&Ko==="bottomSheet"}),F(Ch,{visible:f&&ee==="filters"&&!k,paused:S,isPro:d,filter:g,onFilterChange:T,ignoredPatterns:Pt,onRemovePattern:ls,onAddPattern:as,onTogglePatternMode:us,isTeamPattern:cs}),F(Th,{visible:f&&ee==="copy"&&!k,paused:S,isPro:d,filter:g,ignoredPatterns:Pt,settings:Ft,onSettingsChange:_o}),F(Qc,{visible:O&&w&&!k&&!f,isPro:d,onUpgradePress:()=>jt("overrides"),pendingDraft:re,onPendingConsumed:gs,backHandlerRef:Jo,applySafeAreaInset:!i&&Ko==="bottomSheet"}),F(Di,{visible:z&&!k&&!f&&!(w&&O),isPro:d,copySettings:Ft,search:tt,onSearchChange:dt,onEventPress:Xo,onUpgradePress:()=>jt("saved")}),F(sc,{visible:!k&&!f&&!z&&!(w&&O),paused:S,filter:g,ignoredPatterns:Pt,isPro:d,searchText:A,onEventPress:Xo,onUpgradePress:()=>jt("export")})]}),v?Ne(lh,{onClose:()=>h(false),children:[F(Ho,{icon:F(bl,{size:14,color:Ke.color.textSecondary}),label:"Network throttling",testID:"buoy-network-menu-throttling",onPress:()=>{h(false),ml(a?m:void 0),i||u(Q=>Q+1)}}),F(Ho,{icon:F(vl,{size:14,color:to?Ke.color.accent:Ke.color.textSecondary}),label:"Filters",detail:to?"Active":void 0,onPress:()=>{h(false),G("filters"),P(true)}}),F(Ho,{icon:F(Sl,{size:14,color:Ke.color.textSecondary}),label:"Saved requests",onPress:()=>{h(false),I(true)}}),F(p,{style:Et.menuCopyRow,children:F(mu,{isPro:d,filter:g,ignoredPatterns:Pt,copySettings:Ft,paused:S,onUpgradePress:()=>{h(false),jt("export")},label:"Copy requests"})})]}):null,F(Rl,{visible:Qr,onClose:()=>eo(false),featureName:It==="saved"?"Saved Requests":It==="overrides"?"Response Overrides":"Network Export",description:It==="saved"?"Keep the requests that matter. Saved requests survive Clear, app restarts, and the 500-request history cap.":It==="overrides"?"Force any endpoint to fail, stall or return something else \u2014 no backend changes, no code changes. Free keeps one active rule.":"Export network requests to share with your team, debug APIs, or feed into AI tools.",benefits:It==="overrides"?[`Run ${rt} rules at once (free keeps ${wn})`,"Force a 500, a 401 or an empty list in one tap","Simulate offline, timeouts and slow connections","Rules survive an app reload, so you can test the boot path"]:It==="saved"?[`Save up to ${it} requests (free keeps ${gi})`,"Failed requests stay put through a Clear","Snapshots survive an app restart","Export saved requests to teammates or AI assistants"]:["Export to JSON, Markdown, or plain text","Customizable copy presets (URLs only, LLM-ready, full data)","Share request details with teammates","Feed network data directly to AI assistants"]})]});return i?Ne(p,{style:Et.inlineRoot,children:[F(p,{style:Et.inlineHeader,...Pl,children:Yo()}),Zo]}):F(xl,{visible:e,onClose:t,onMinimize:o,minimizeRequest:c,persistenceKey:vs,variant:"night",header:{showToggleButton:true,customContent:Yo()},onModeChange:bs,enablePersistence:true,initialMode:"bottomSheet",enableGlitchEffects:true,disableScrollWrapper:Ss,styles:{},children:Zo})}var Et=fe.create({container:{flex:1,backgroundColor:"transparent"},detailRoot:{flex:1,minHeight:0},detailBodyFallback:{flex:1},inlineRoot:{flex:1,minHeight:0,backgroundColor:"transparent"},inlineHeader:{paddingHorizontal:12,paddingVertical:8,borderBottomWidth:1,borderBottomColor:wl.border.default,backgroundColor:"transparent"},menuCopyRow:{paddingHorizontal:6},headerActionButton:{width:32,height:32,borderRadius:8,backgroundColor:Ke.color.buttonSurface,borderWidth:1,borderColor:Ke.color.border,alignItems:"center",justifyContent:"center"},activeFilterButton:{backgroundColor:Ke.color.accentSoft,borderColor:Ke.color.accentBorderStrong}});function Ki(e){return F(bo,{children:F(Gi,{...e})})}function Rh(e={}){return F(bo,{children:F(Gi,{...e,inline:true,visible:true,onClose:kh})})}var kh=()=>{};import{jsx as Eh}from"react/jsx-runtime";var Yi=typeof navigator<"u"&&navigator.product==="ReactNative";Yi&&_.ensureLoaded();Yi&&typeof me<"u"&&me&&K.startBootCapture();var Zi=ll({id:"network",name:"NET",description:"Network request logger",slot:"both",icon:({size:e})=>Eh(sl,{size:e}),component:Ki,props:{enableSharedModalDimensions:false}}),Ph=al(Zi,e=>({enableSharedModalDimensions:e.enableSharedModalDimensions??false}));D();function Ih(){let e=typeof navigator<"u"&&navigator.product==="ReactNative";if(!e&&(typeof window>"u"||typeof document>"u"))return()=>{};_.ensureLoaded();let t=e?()=>{}:Nn(),r=K.subscribeToEvents(()=>{}),o=false;return()=>{o||(o=true,t(),r())}}D();import{useState as Mo,useEffect as Lh,useCallback as Jr,useMemo as et,useRef as Bh}from"react";import{useLimit as qh,TIER_LIMITS as Oh}from"@buoy-gg/shared-ui/web";var Wf=Oh["network.requests"].free;function Dh(e={}){let{isPro:t=false}=e,r=qh("network.requests"),o=t?1/0:r,[n,i]=Mo([]),[s,l]=Mo({}),[a,d]=Mo(true),b=Bh(null);Lh(()=>(a&&(b.current=K.subscribeToEvents(i)),()=>{b.current&&(b.current(),b.current=null)}),[a]);let E=Jr(()=>{K.clearEvents(),i([])},[]),C=Jr(()=>{d(false)},[]),S=Jr(()=>{d(true)},[]),q=et(()=>s.searchText?s.searchText.toLowerCase():null,[s.searchText]),g=et(()=>s.method&&s.method.length>0?new Set(s.method):null,[s.method]),T=et(()=>s.contentType&&s.contentType.length>0?new Set(s.contentType):null,[s.contentType]),k=et(()=>{let c=[...n];if(g&&(c=c.filter(u=>g.has(u.method))),s.status&&s.status!=="all")switch(s.status){case"success":c=c.filter(u=>u.status&&u.status>=200&&u.status<300);break;case"error":c=c.filter(u=>u.error||u.status&&u.status>=400);break;case"pending":c=c.filter(u=>!u.status&&!u.error);break}return q&&(c=c.filter(u=>u.url.toLowerCase().includes(q)||u.method.toLowerCase().includes(q)||u.path?.toLowerCase().includes(q)||u.host?.toLowerCase().includes(q)||u.error&&u.error.toLowerCase().includes(q)||u.operationName&&u.operationName.toLowerCase().includes(q)||ei(u.graphqlVariables,q))),s.host&&(c=c.filter(u=>u.host===s.host)),T&&(c=c.filter(u=>{let m=u.responseHeaders||u.requestHeaders,O=m?.["content-type"]||m?.["Content-Type"]||"";for(let re of T)switch(re){case"JSON":if(O.includes("json"))return true;break;case"XML":if(O.includes("xml"))return true;break;case"HTML":if(O.includes("html"))return true;break;case"TEXT":if(O.includes("text"))return true;break;case"IMAGE":if(O.includes("image"))return true;break;case"VIDEO":if(O.includes("video"))return true;break;case"AUDIO":if(O.includes("audio"))return true;break;case"FORM":if(O.includes("form"))return true;break;case"OTHER":if(!O||!O.includes("json")&&!O.includes("xml")&&!O.includes("html")&&!O.includes("text")&&!O.includes("image")&&!O.includes("video")&&!O.includes("audio")&&!O.includes("form"))return true;break}return false})),c},[n,s,q,g,T]),f=et(()=>{let c=new Set;return n.slice(o).forEach(u=>{c.add(u.id)}),c},[n,o]),P=et(()=>k.filter(c=>f.has(c.id)),[k,f]),z=P.length>0,I=P.length,w=Jr(c=>f.has(c),[f]),H=et(()=>{let c=0,u=0,m=0,O=0,re=0,Z=0,ee=0;for(let A of n)A.status&&A.status>=200&&A.status<300?c++:A.error||A.status&&A.status>=400?u++:!A.status&&!A.error&&m++,O+=A.requestSize||0,re+=A.responseSize||0,A.duration&&(Z+=A.duration,ee++);let G=ee>0?Z/ee:0;return{totalRequests:n.length,successfulRequests:c,failedRequests:u,pendingRequests:m,totalDataSent:O,totalDataReceived:re,averageDuration:Math.round(G)}},[n]),v=et(()=>{let c=new Set;for(let u of n)u.host&&c.add(u.host);return Array.from(c)},[n]),h=et(()=>{let c=new Set;for(let u of n)c.add(u.method);return Array.from(c)},[n]);return{events:k,allEvents:n,stats:H,filter:s,setFilter:l,clearEvents:E,isCapturing:a,pauseCapturing:C,resumeCapturing:S,hosts:v,methods:h,hasLockedEvents:z,lockedEventCount:I,isEventLocked:w,requestLimit:o,getSubscriberCounts:()=>K.getSubscriberCounts()}}import{useIgnoredPatterns as zh,ignoredPatternsStore as Ah,urlMatchesIgnoredPattern as Hh,isUrlIgnored as Mh}from"@buoy-gg/shared-ui/web";D();import{approxJsonSize as No,isOverWireBudget as Nh}from"@buoy-gg/shared-ui/web";import{expandKeyedArrays as $h,patchFromPath as Fh,refusalText as jh,shapeKind as Qi,suggestedPatch as Wh,typedEditViolations as Vh}from"@buoy-gg/shared-ui/web";var $o=16*1024,Gr=1.25*1024*1024;function Fo(e,t){return e===void 0?false:(t??0)>$o?true:Nh(e,$o)}var es=new WeakMap,ts=new WeakMap;function jo(e){let t=es.get(e);if(t)return t;let r;try{r=_h(e)}catch{r=Uh(e)}return es.set(e,r),r}function Uh(e){let t={...e,requestData:void 0,responseData:void 0,graphqlVariables:void 0,requestBodyOmitted:e.requestData!==void 0?true:void 0,responseBodyOmitted:e.responseData!==void 0?true:void 0},r=1024;try{r=No(t,Gr).bytes}catch{}return{event:t,bytes:r}}function _h(e){let t=Fo(e.requestData,e.requestSize),r=Fo(e.responseData,e.responseSize),o=rs(e.graphqlVariables),n=os(e.requestHeaders),i=os(e.responseHeaders),s=t||r||o!==e.graphqlVariables||n!==e.requestHeaders||i!==e.responseHeaders,l=e;return s&&(l={...e},t&&(l.requestData=void 0,l.requestBodyOmitted=true),r&&(l.responseData=void 0,l.responseBodyOmitted=true),o!==e.graphqlVariables&&(l.graphqlVariables=o),n!==e.requestHeaders&&(l.requestHeaders=n,l.headersOmitted=true),i!==e.responseHeaders&&(l.responseHeaders=i,l.headersOmitted=true)),{event:l,bytes:No(l,Gr).bytes}}function Xh(e){let t=ts.get(e);if(t)return t;let{event:r}=jo(e),o={...r};o.requestData!==void 0&&(o.requestData=void 0,o.requestBodyOmitted=true),o.responseData!==void 0&&(o.responseData=void 0,o.responseBodyOmitted=true),o.graphqlVariables!==void 0&&(o.graphqlVariables=rs(o.graphqlVariables,true));let n={event:o,bytes:No(o,Gr).bytes};return ts.set(e,n),n}function Jh(e){let t=new Array(e.length),r=0;for(let o=0;o<e.length;o++){let n=jo(e[o]);if(r+n.bytes<=Gr)t[o]=n.event,r+=n.bytes;else{let i=Xh(e[o]);t[o]=i.event,r+=i.bytes}}return t}function rs(e,t=false){if(!e||!t&&!Fo(e,void 0))return e;let r={};for(let[o,n]of Object.entries(e))(typeof n=="string"&&n.length<=64||typeof n=="number"||typeof n=="boolean")&&(r[o]=n);return Object.keys(r).length>0?r:void 0}var Wo=64;function os(e){if(!e)return e;let t=false,r={};for(let[o,n]of Object.entries(e))typeof n=="string"&&(n.length<=Wo?r[o]=n:(r[o]=`${n.slice(0,Wo)}\u2026 [${n.length-Wo} more]`,t=true));return t?r:e}var Gh=e=>{let t=false,r=e.rules.map(o=>!o.body||o.body.length<=$o?o:(t=true,{...o,body:void 0,bodyOmitted:true}));return t?{...e,rules:r}:e},Kr=e=>K.getEventById(e)??ae.getEventById(e),$t=e=>e&&typeof e=="object"?e.id:void 0,Yr=(e,t)=>!!(e&&typeof e=="object"&&e[t]),Vo=()=>Rn()?{}:{active:false,inactiveReason:ja},Kh=["respond","fail","delay"];function Yh(e,t){if(!e||typeof e!="object")return null;let r=e.rule??e;if(!r||typeof r!="object")return null;let o=r,n=typeof o.urlPattern=="string"&&o.urlPattern.trim()?o.urlPattern.trim():t?.urlPattern??"";if(!n)return null;let i=Kh.includes(o.kind)?o.kind:t?.kind??"respond";return{id:typeof o.id=="string"?o.id:void 0,enabled:o.enabled!==false,name:typeof o.name=="string"?o.name:t?.name,urlPattern:n,methods:Array.isArray(o.methods)?o.methods.filter(s=>typeof s=="string").map(s=>s.toUpperCase()):t?.methods,requireHeader:typeof o.requireHeader=="string"&&o.requireHeader.trim()?o.requireHeader.trim():void 0,kind:i,status:typeof o.status=="number"?o.status:t?.status,statusText:typeof o.statusText=="string"?o.statusText:t?.statusText,headers:o.headers&&typeof o.headers=="object"?o.headers:t?.headers,body:Qh(o,t),failKind:o.failKind==="timeout"?"timeout":void 0,delayMs:typeof o.delayMs=="number"?o.delayMs:void 0,times:typeof o.times=="number"?o.times:null,alternate:o.alternate===true}}var dr=e=>!!e&&typeof e=="object"&&!Array.isArray(e);function ns(e,t,r="",o={shrunk:[],breaks:[]}){if(Array.isArray(e)&&Array.isArray(t))return t.length>0&&t.length<e.length&&o.shrunk.push({path:r||"(root)",have:e.length,sent:t.length}),t;if(!dr(e)||!dr(t))return t;let n={...e};for(let[i,s]of Object.entries(t)){let l=r?`${r}.${i}`:i;if(i in e){let a=Qi(e[i]),d=Qi(s);(a==="array"||a==="object")&&a!==d&&o.breaks.push({path:l,from:a,to:d}),n[i]=ns(e[i],s,l,o)}else n[i]=s}return n}function Zh(e,t){if(e.body!=null||!dr(e.bodyPatch)||typeof t!="string")return[];try{return Vh(JSON.parse(t),e.bodyPatch,{noun:"response body"})}catch{return[]}}function Qh(e,t){if(typeof e.body=="string")return e.body;if(e.body!=null)return JSON.stringify(e.body,null,2);let r=t?.body??(typeof e.id=="string"?_.getState().rules.find(o=>o.id===e.id)?.body:void 0);if(dr(e.bodyPatch)&&typeof r=="string")try{return JSON.stringify(ns(JSON.parse(r),e.bodyPatch),null,2)}catch{return r}return r}function ep(e){if(!e||typeof e!="object")return null;let t=e.rule??e;if(!t||typeof t!="object")return null;let r=t.id;if(typeof r!="string")return null;let o=_.getState().rules.find(n=>n.id===r);return o?{...o}:null}function tp(e){if(!e||typeof e!="object")return null;let t=e.rule??e;if(!t||typeof t!="object")return null;let r=t;if(r.bodyOmitted!==true||typeof r.id!="string")return null;let o=_.getState().rules.find(n=>n.id===r.id);return o?{body:o.body}:null}function rp(e){if(!e||typeof e!="object")return null;let t=e.fromRequestId;if(typeof t!="string"||!t)return null;let r=Kr(t);return r?Ao(r):null}var op={dispose:()=>{_.setEnabled(false)},version:6,getSnapshot:()=>(K.ensureInterception(),{conditions:{version:1,runtimeId:ho,profile:mt(),available:gt()},events:Jh(K.getEvents()),overrides:Gh(_.getState()),saved:ae.getRecords().map(e=>({...e,event:jo(e.event).event}))}),subscribe:e=>{let t=K.subscribeToEvents(e),r=Kt(e),o=ae.subscribe(e),n=_.subscribe(e);return()=>{r(),t(),o(),n()}},actions:{getNetworkConditions:()=>({runtimeId:ho,profile:mt(),available:gt()}),setNetworkConditions:e=>{let t=e&&typeof e=="object"?e.profile:void 0;return{runtimeId:ho,profile:Sr(t),available:gt()}},clearEvents:()=>{K.clearEvents()},getEventBody:e=>{let t=$t(e);if(!t)return null;let r=Kr(t);return r?{url:r.url??null,method:r.method??null,status:r.status??null,override:r.override??null,requestData:r.requestData??null,responseData:r.responseData??null,requestHeaders:r.requestHeaders??null,responseHeaders:r.responseHeaders??null}:null},setPinned:e=>{let t=$t(e);if(!t)return null;let r=Kr(t);if(!r)return null;let o=Yr(e,"pinned");return Lr(ae.getState(),t).pinned===o?{ok:true}:ae.togglePin(r)},setSaved:e=>{let t=$t(e);if(!t)return null;let r=Kr(t);if(!r)return null;let o=Yr(e,"saved");return Lr(ae.getState(),t).saved===o?{ok:true}:ae.toggleSave(r)},removeSavedRecord:e=>{let t=e&&typeof e=="object"?e.key:void 0;return t?(ae.remove(t),{ok:true}):null},clearSavedRequests:()=>(ae.clearSaved(),{ok:true}),clearPinnedRequests:()=>(ae.clearPinned(),{ok:true}),setOverridesEnabled:e=>(_.setEnabled(Yr(e,"enabled")),{ok:true,enabled:_.getState().enabled,...Vo()}),upsertOverrideRule:e=>{let t=rp(e)??tp(e)??ep(e),r=e?.rule??e;if(r&&typeof r.bodyPath=="string"&&r.body==null){let i=t?.body??(typeof r.id=="string"?_.getState().rules.find(a=>a.id===r.id)?.body:void 0);if(typeof i!="string")return{ok:false,error:"bodyPath needs something to patch: send fromRequestId (the captured request whose real response it addresses) or the id of an existing rule."};if(r.bodyValue===void 0)return{ok:false,error:`Refused: sent \`bodyPath\` without \`bodyValue\`. Say what to set "${r.bodyPath}" to.`};let s;try{s=JSON.parse(i)}catch{return{ok:false,error:"The captured response body is not JSON, so it cannot be addressed by path. Send a whole `body` instead."}}let l=Fh(s,r.bodyPath,r.bodyValue);if(!l.ok)return{ok:false,error:`Refused: ${l.error}`};r.bodyPatch=l.patch,delete r.bodyPath,delete r.bodyValue}if(r&&dr(r.bodyPatch)&&r.body==null){let i=t?.body??(typeof r.id=="string"?_.getState().rules.find(s=>s.id===r.id)?.body:void 0);if(typeof i!="string")return{ok:false,error:"bodyPatch needs something to patch: send fromRequestId (the captured request whose real response the patch is merged into) or the id of an existing rule."};if(r.force!==true){let s;try{let a=$h(JSON.parse(i),r.bodyPatch);s=a.error,a.notes.length&&(r.bodyPatch=a.patch)}catch{}if(s)return{ok:false,error:`Refused: ${s}`};let l=Zh(r,i);if(l.length>0)return{ok:false,error:jh(l,"response body",Wh(r.bodyPatch,l)),violations:l}}}let o=Yh(e,t);if(!o){let i=e?.fromRequestId;return{ok:false,error:i?`No captured request \`${i}\` \u2014 it may have been cleared. Send a urlPattern instead.`:"A rule needs a non-empty urlPattern."}}let n=_.upsertRule(o);return n?(n.enabled&&_.setEnabled(true),{ok:true,rule:{id:n.id,urlPattern:n.urlPattern,enabled:n.enabled,kind:n.kind,status:n.status,times:n.times,bodySize:n.body?n.body.length:0},...n.times===void 0||n.times===null?{lingers:`This rule has no \`times\` budget, so it overrides EVERY matching request until it is disabled or deleted (id \`${n.id}\`). If you meant only the next one, set times:1.`}:{},...Vo()}):{ok:false,error:"Override rule limit reached."}},setOverrideRuleEnabled:e=>{let t=$t(e);return t?(_.setRuleEnabled(t,Yr(e,"enabled")),{ok:true,...Vo()}):{ok:false,error:"Missing rule id."}},deleteOverrideRule:e=>{let t=$t(e);return t?(_.removeRule(t),{ok:true}):{ok:false,error:"Missing rule id."}},clearOverrideRules:()=>(_.clearRules(),{ok:true}),listOverrideRules:async()=>(await _.ensureLoaded(),_.getState()),getOverrideRuleBody:e=>{let t=$t(e);if(!t)return null;let r=_.getState().rules.find(o=>o.id===t);return r?{body:r.body??null}:null},getCaptureStatus:()=>{let e=K.getSubscriberCounts().total,t=null,r=null;try{t=qn(),r=pt()}catch{}let o=null;try{o=nl()}catch{}return{capturing:e>0,subscribers:e,interceptorInstalled:t,interceptorLive:o,listenerCount:r,eventCount:K.getEvents().length}},debugOverrides:e=>{let t=(e&&typeof e=="object"?e.url:void 0)??"https://example.com/";return{interceptorInstalled:qn(),listenerCount:pt(),engine:Wa(t,"GET"),store:{enabled:_.getState().enabled,ruleCount:_.getState().rules.length,rulesVisibleToEngine:_.getRules().length}}}}};D();var np=new Set(["content-length","host","connection","accept-encoding"]);function Uo(e){return`'${e.replace(/'/g,"'\\''")}'`}function ip(e){if(e==null)return null;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return null}}function sp(e){let t=(e.method||"GET").toUpperCase(),r=ip(e.requestData),o=[];t!=="GET"&&!(t==="POST"&&r!==null)&&o.push(`-X ${t}`);for(let[i,s]of Object.entries(e.requestHeaders||{}))np.has(i.toLowerCase())||o.push(`-H ${Uo(`${i}: ${s}`)}`);r!==null&&o.push(`--data-raw ${Uo(r)}`);let n=`curl ${Uo(e.url)}`;return o.length===0?n:`${n} \\
|
|
144
144
|
${o.join(` \\
|
|
145
|
-
`)}`}export{
|
|
145
|
+
`)}`}export{tu as DEFAULT_SETTLE_MS,wn as FREE_TIER_OVERRIDE_LIMIT,gi as FREE_TIER_SAVED_LIMIT,rt as MAX_OVERRIDE_RULES,Ir as MAX_PINNED,it as MAX_SAVED,Gt as NETWORK_CONDITIONS,sd as NetworkBodyResolverProvider,Ei as NetworkDetailPinActions,oi as NetworkEventDetailView,zt as NetworkEventItemCompact,ki as NetworkHeaderBadgesView,Ki as NetworkModal,gu as NetworkSavedButton,Di as NetworkSavedScreen,Rh as NetworkToolView,_t as OVERRIDE_STATUS_MAX,Ut as OVERRIDE_STATUS_MIN,bo as TickProvider,Jt as addNetworkListener,Ph as createNetworkTool,Ao as draftFromEvent,Lr as flagsForEventId,Ze as formatBytes,Er as formatDuration,Zn as formatHttpStatus,sp as generateCurl,mt as getNetworkCondition,Ah as ignoredPatternsStore,Mh as isUrlIgnored,K as networkEventStore,yr as networkListener,ae as networkSavedStore,Ve as networkSelectionStore,op as networkSyncAdapter,Zi as networkToolPreset,_ as overrideRulesStore,ol as removeAllNetworkListeners,Sr as setNetworkCondition,Po as splitPinned,Ih as startNetworkCapture,Kt as subscribeNetworkConditions,Hh as urlMatchesIgnoredPattern,zh as useIgnoredPatterns,Ji as useLiveNetworkEvent,Ci as useNetworkBadgeCounts,sr as useNetworkEventList,Dh as useNetworkEvents,Ot as useNetworkSaved,vo as useTickEveryMinute};
|