@buoy-gg/clock 7.0.44 → 7.0.45
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.countDueWithin=countDueWithin;exports.fireDueWithin=fireDueWithin;exports.installTimerTracking=installTimerTracking;exports.isTimerTrackingInstalled=isTimerTrackingInstalled;exports.summarizeTimers=summarizeTimers;exports.uninstallTimerTracking=uninstallTimerTracking;var _patches=require("./patches");const g=globalThis;const TAG="__buoyClockTimer";const pending=new Map;let originals=null;let jumpedMs=0;const timerClock=()=>(0,_patches.realNow)()+jumpedMs;function reportAsync(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.countDueWithin=countDueWithin;exports.fireDueWithin=fireDueWithin;exports.installTimerTracking=installTimerTracking;exports.isTimerTrackingInstalled=isTimerTrackingInstalled;exports.summarizeTimers=summarizeTimers;exports.uninstallTimerTracking=uninstallTimerTracking;var _patches=require("./patches");const g=globalThis;const TAG="__buoyClockTimer";const pending=new Map;let originals=null;let unpatched={};let jumpedMs=0;const timerClock=()=>(0,_patches.realNow)()+jumpedMs;function reportAsync(n){(originals?.setTimeout??setTimeout)(()=>{throw n},0)}function toDelay(n){const t=Number(n);return Number.isFinite(t)&&t>0?t:0}function isTimerTrackingInstalled(){return originals!==null}function installTimerTracking(){if(originals)return true;const{setTimeout:n,clearTimeout:t,setInterval:i,clearInterval:l}=g;if(typeof n!=="function"||typeof t!=="function")return false;if(n[TAG])return true;unpatched={setTimeout:n,clearTimeout:t,setInterval:i,clearInterval:l};originals={setTimeout:n.bind(globalThis),clearTimeout:t.bind(globalThis),setInterval:(typeof i==="function"?i:n).bind(globalThis),clearInterval:(typeof l==="function"?l:t).bind(globalThis)};const r=originals;const f=function(e,c,...u){if(typeof e!=="function")return r.setTimeout(e,c,...u);const m=toDelay(c);let a;const d=function(){pending.delete(a);return e.apply(this,u)};a=r.setTimeout(d,c);pending.set(a,{kind:"timeout",callback:e,args:u,delay:m,due:timerClock()+m,realHandle:a,run:d});return a};const o=function(e,c,...u){if(typeof e!=="function")return r.setInterval(e,c,...u);const m=toDelay(c);let a;const d=function(){const p=pending.get(a);if(p)p.due=timerClock()+m;return e.apply(this,u)};a=r.setInterval(d,c);pending.set(a,{kind:"interval",callback:e,args:u,delay:m,due:timerClock()+m,realHandle:a,run:d});return a};const s=(e,c)=>{const u=pending.get(e);if(!u)return c(e);pending.delete(e);return u.kind==="interval"?r.clearInterval(u.realHandle):r.clearTimeout(u.realHandle)};const T=function(e){return s(e,r.clearTimeout)};const v=function(e){return s(e,r.clearInterval)};globalThis.__buoyRealTimers={setTimeout:r.setTimeout,clearTimeout:T,setInterval:r.setInterval,clearInterval:v};for(const e of[f,o,T,v]){Object.defineProperty(e,TAG,{value:true})}g.setTimeout=f;g.clearTimeout=T;g.setInterval=o;g.clearInterval=v;return true}function uninstallTimerTracking(){if(!originals)return;g.setTimeout=unpatched.setTimeout;g.clearTimeout=unpatched.clearTimeout;g.setInterval=unpatched.setInterval;g.clearInterval=unpatched.clearInterval;originals=null;pending.clear();jumpedMs=0;delete globalThis.__buoyRealTimers}function summarizeTimers(){const n=timerClock();let t=0;let i=0;let l=null;for(const r of pending.values()){if(r.kind==="interval")i+=1;else{t+=1;const f=Math.max(0,r.due-n);if(l===null||f<l)l=f}}return{total:t+i,timeouts:t,intervals:i,nextTimeoutInMs:l}}function countDueWithin(n){const t=timerClock();let i=0;for(const l of pending.values())if(l.due-t<=n)i+=1;return i}function fireDueWithin(n){if(!originals||!(n>0))return 0;const t=originals;jumpedMs+=n;const i=timerClock();const l=[...pending.entries()].filter(([,o])=>o.due<=i).sort((o,s)=>o[1].due-s[1].due);let r=0;for(const[o,s]of l){if(!pending.has(o))continue;if(s.kind==="timeout"){pending.delete(o);t.clearTimeout(s.realHandle)}else{s.due=i+s.delay}try{s.callback(...s.args)}catch(T){reportAsync(T)}r+=1}const f=timerClock();for(const o of pending.values()){if(o.kind!=="timeout")continue;t.clearTimeout(o.realHandle);o.realHandle=t.setTimeout(o.run,Math.max(0,o.due-f))}return r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{realNow as
|
|
1
|
+
"use strict";import{realNow as H}from"./patches";const m=globalThis;const x="__buoyClockTimer";const l=new Map;let T=null;let b={};let g=0;const v=()=>H()+g;function _(n){(T?.setTimeout??setTimeout)(()=>{throw n},0)}function C(n){const t=Number(n);return Number.isFinite(t)&&t>0?t:0}export function isTimerTrackingInstalled(){return T!==null}export function installTimerTracking(){if(T)return true;const{setTimeout:n,clearTimeout:t,setInterval:i,clearInterval:u}=m;if(typeof n!=="function"||typeof t!=="function")return false;if(n[x])return true;b={setTimeout:n,clearTimeout:t,setInterval:i,clearInterval:u};T={setTimeout:n.bind(globalThis),clearTimeout:t.bind(globalThis),setInterval:(typeof i==="function"?i:n).bind(globalThis),clearInterval:(typeof u==="function"?u:t).bind(globalThis)};const r=T;const d=function(e,f,...a){if(typeof e!=="function")return r.setTimeout(e,f,...a);const p=C(f);let c;const y=function(){l.delete(c);return e.apply(this,a)};c=r.setTimeout(y,f);l.set(c,{kind:"timeout",callback:e,args:a,delay:p,due:v()+p,realHandle:c,run:y});return c};const o=function(e,f,...a){if(typeof e!=="function")return r.setInterval(e,f,...a);const p=C(f);let c;const y=function(){const k=l.get(c);if(k)k.due=v()+p;return e.apply(this,a)};c=r.setInterval(y,f);l.set(c,{kind:"interval",callback:e,args:a,delay:p,due:v()+p,realHandle:c,run:y});return c};const s=(e,f)=>{const a=l.get(e);if(!a)return f(e);l.delete(e);return a.kind==="interval"?r.clearInterval(a.realHandle):r.clearTimeout(a.realHandle)};const I=function(e){return s(e,r.clearTimeout)};const h=function(e){return s(e,r.clearInterval)};globalThis.__buoyRealTimers={setTimeout:r.setTimeout,clearTimeout:I,setInterval:r.setInterval,clearInterval:h};for(const e of[d,o,I,h]){Object.defineProperty(e,x,{value:true})}m.setTimeout=d;m.clearTimeout=I;m.setInterval=o;m.clearInterval=h;return true}export function uninstallTimerTracking(){if(!T)return;m.setTimeout=b.setTimeout;m.clearTimeout=b.clearTimeout;m.setInterval=b.setInterval;m.clearInterval=b.clearInterval;T=null;l.clear();g=0;delete globalThis.__buoyRealTimers}export function summarizeTimers(){const n=v();let t=0;let i=0;let u=null;for(const r of l.values()){if(r.kind==="interval")i+=1;else{t+=1;const d=Math.max(0,r.due-n);if(u===null||d<u)u=d}}return{total:t+i,timeouts:t,intervals:i,nextTimeoutInMs:u}}export function countDueWithin(n){const t=v();let i=0;for(const u of l.values())if(u.due-t<=n)i+=1;return i}export function fireDueWithin(n){if(!T||!(n>0))return 0;const t=T;g+=n;const i=v();const u=[...l.entries()].filter(([,o])=>o.due<=i).sort((o,s)=>o[1].due-s[1].due);let r=0;for(const[o,s]of u){if(!l.has(o))continue;if(s.kind==="timeout"){l.delete(o);t.clearTimeout(s.realHandle)}else{s.due=i+s.delay}try{s.callback(...s.args)}catch(I){_(I)}r+=1}const d=v();for(const o of l.values()){if(o.kind!=="timeout")continue;t.clearTimeout(o.realHandle);o.realHandle=t.setTimeout(o.run,Math.max(0,o.due-d))}return r}
|
package/lib/web/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";var ht=Object.defineProperty;var Fr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var Ur=Object.prototype.hasOwnProperty;var Hr=(e,t)=>{for(var r in t)ht(e,r,{get:t[r],enumerable:true})},mt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Br(t))!Ur.call(e,o)&&o!==r&&ht(e,o,{get:()=>t[o],enumerable:!(n=Fr(t,o))||n.enumerable});return e},Vr=(e,t,r)=>(mt(e,t,"default"),r&&mt(r,t,"default"));var yt=process.env.NODE_ENV!=="production";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);var gt={};Hr(gt,{AccessibilityInfo:()=>Kr,ActivityIndicator:()=>Un,Alert:()=>Wn,Animated:()=>bt,AppRegistry:()=>Yr,AppState:()=>Gr,Appearance:()=>Zr,BackHandler:()=>Xr,Button:()=>Hn,CheckBox:()=>mn,Clipboard:()=>Qr,DeviceEventEmitter:()=>Dn,Dimensions:()=>en,Easing:()=>tn,FlatList:()=>yn,I18nManager:()=>rn,Image:()=>gn,ImageBackground:()=>bn,InteractionManager:()=>on,Keyboard:()=>nn,KeyboardAvoidingView:()=>kn,LayoutAnimation:()=>sn,Linking:()=>an,LogBox:()=>On,Modal:()=>Fn,NativeEventEmitter:()=>ln,NativeModules:()=>qr,PanResponder:()=>cn,Picker:()=>xn,PixelRatio:()=>un,Platform:()=>dn,Pressable:()=>_n,ProgressBar:()=>vn,RefreshControl:()=>wn,SafeAreaView:()=>An,ScrollView:()=>xt,SectionList:()=>Tn,Share:()=>fn,StatusBar:()=>Sn,StyleSheet:()=>Y,Switch:()=>Bn,Text:()=>w,TextInput:()=>kt,Touchable:()=>$n,TouchableHighlight:()=>jn,TouchableNativeFeedback:()=>In,TouchableOpacity:()=>B,TouchableWithoutFeedback:()=>Mn,UIManager:()=>pn,Vibration:()=>hn,View:()=>m,VirtualizedList:()=>Rn,YellowBox:()=>Cn,findNodeHandle:()=>Vn,unstable_createElement:()=>Jr,useColorScheme:()=>Pn,useLocaleContext:()=>En,useWindowDimensions:()=>zn});Vr(gt,Wr);import*as Wr from"react-native-web";import{unstable_createElement as Jr,NativeModules as qr,AccessibilityInfo as Kr,Animated as bt,Appearance as Zr,AppRegistry as Yr,AppState as Gr,BackHandler as Xr,Clipboard as Qr,Dimensions as en,Easing as tn,I18nManager as rn,Keyboard as nn,InteractionManager as on,LayoutAnimation as sn,Linking as an,NativeEventEmitter as ln,PanResponder as cn,PixelRatio as un,Platform as dn,Share as fn,StyleSheet as Y,UIManager as pn,Vibration as hn,CheckBox as mn,FlatList as yn,Image as gn,ImageBackground as bn,KeyboardAvoidingView as kn,Picker as xn,ProgressBar as vn,RefreshControl as wn,SafeAreaView as An,SectionList as Tn,StatusBar as Sn,Touchable as $n,TouchableNativeFeedback as In,VirtualizedList as Rn,YellowBox as Cn,LogBox as On,DeviceEventEmitter as Dn,useColorScheme as Pn,useLocaleContext as En,useWindowDimensions as zn}from"react-native-web";import*as O from"react-native-web";import{createElement as Nn,forwardRef as Ln}from"react";function P(e){let t=Ln((n,o)=>{let{accessibilityState:i,accessibilityValue:s,...a}=n;for(let l of["busy","checked","disabled","expanded","selected"])i?.[l]!==void 0&&a[`aria-${l}`]===void 0&&(a[`aria-${l}`]=i[l]);for(let[l,c]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))s?.[l]!==void 0&&a[`aria-${c}`]===void 0&&(a[`aria-${c}`]=s[l]);return Nn(e,{...a,ref:o})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var m=P(O.View),w=P(O.Text),kt=P(O.TextInput),B=P(O.TouchableOpacity),jn=P(O.TouchableHighlight),Mn=P(O.TouchableWithoutFeedback),_n=P(O.Pressable),xt=P(O.ScrollView),Fn=P(O.Modal),Bn=P(O.Switch),Un=P(O.ActivityIndicator),Hn=P(O.Button),Vn=O.findNodeHandle,Wn={alert(e,t,r,n){if(typeof document>"u")return;let o=document.createElement("dialog");o.dataset.buoyRoot="",o.setAttribute("aria-label",e),o.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",o.appendChild(i),t){let c=document.createElement("p");c.textContent=t,c.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",o.appendChild(c)}let s=document.createElement("div");s.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let a=r?.length?r:[{text:"OK"}],l=()=>{o.close?.(),o.remove()};for(let c of a){let d=document.createElement("button");d.type="button",d.textContent=c.text??"OK",d.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${c.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,d.onclick=()=>{l(),c.onPress?.()},s.appendChild(d)}o.addEventListener("cancel",c=>{c.preventDefault(),n?.cancelable!==false&&(l(),n?.onDismiss?.())}),o.appendChild(s),document.body.appendChild(o),o.showModal?o.showModal():o.setAttribute("open","")}};var Ce=Object.freeze({mode:"real",anchorReal:0,anchorVirtual:0,rate:1}),Oe=.1,De=86400,Jn=864e13;function M(e,t){return e.mode==="real"?t:e.mode==="frozen"?e.anchorVirtual:e.anchorVirtual+(t-e.anchorReal)*e.rate}function qn(e,t){return M(e,t)-t}function G(e){if(!Number.isFinite(e)||Math.abs(e)>Jn)throw new RangeError(`Not a valid time: ${e}`);return Math.round(e)}function Pe(e,t,r,n=false){return{mode:n?"frozen":"running",anchorReal:t,anchorVirtual:G(r),rate:e.mode==="real"?1:e.rate}}function Kn(e,t,r){if(!Number.isFinite(r))throw new RangeError("Jump must be a number of ms");return Pe(e,t,M(e,t)+r,e.mode==="frozen")}function Zn(e,t,r){return Pe(e,t,r??M(e,t),true)}function Yn(e,t){return e.mode!=="frozen"?e:{...e,mode:"running",anchorReal:t}}function Gn(e,t,r){if(!Number.isFinite(r)||r<Oe||r>De)throw new RangeError(`Speed must be between ${Oe}\xD7 and ${De}\xD7`);return e.mode==="real"&&r===1?e:{mode:"running",anchorReal:t,anchorVirtual:G(M(e,t)),rate:r}}function vt(e){let t=e;return!!t&&(t.mode==="real"||t.mode==="running"||t.mode==="frozen")&&Number.isFinite(t.anchorReal)&&Number.isFinite(t.anchorVirtual)&&Number.isFinite(t.rate)&&t.rate>=Oe&&t.rate<=De}var Xn={ms:1,millisecond:1,milliseconds:1,s:1e3,sec:1e3,secs:1e3,second:1e3,seconds:1e3,m:6e4,min:6e4,mins:6e4,minute:6e4,minutes:6e4,h:36e5,hr:36e5,hrs:36e5,hour:36e5,hours:36e5,d:864e5,day:864e5,days:864e5,w:6048e5,wk:6048e5,week:6048e5,weeks:6048e5,mo:30*864e5,month:30*864e5,months:30*864e5,y:365*864e5,yr:365*864e5,year:365*864e5,years:365*864e5};function Ee(e){if(typeof e=="number"){if(!Number.isFinite(e))throw new RangeError("Duration must be finite");return Math.round(e)}let t=String(e).trim().toLowerCase();if(!t)throw new RangeError("Duration is empty");let r=1;if((t[0]==="+"||t[0]==="-"||t[0]==="\u2212")&&(r=t[0]==="+"?1:-1,t=t.slice(1).trim()),/^\d+(\.\d+)?$/.test(t))return r*Math.round(Number(t));let n=/(\d+(?:\.\d+)?)\s*([a-z]+)/g,o=0,i="",s;for(;s=n.exec(t);){let a=Xn[s[2]];if(a===void 0)throw new RangeError(`Unknown time unit "${s[2]}" in "${e}"`);o+=Number(s[1])*a,i+=s[0]}if(!i||i.replace(/\s/g,"")!==t.replace(/[\s,]/g,""))throw new RangeError(`Could not read "${e}" as a duration. Try "+1d", "-2h30m" or "90s".`);return r*Math.round(o)}function te(e,{signed:t=true}={}){let r=e<0?"\u2212":"+",n=Math.abs(Math.round(e));if(n<1e3)return t&&n>0?`${r}${n}ms`:"0s";let o=[],i=[["y",365*864e5],["d",864e5],["h",36e5],["m",6e4],["s",1e3]];for(let[s,a]of i)if(n>=a&&(o.push(`${Math.floor(n/a)}${s}`),n%=a),o.length===2)break;return`${t?r:""}${o.join(" ")}`}function wt(e,t,r){if(typeof e=="number")return G(e);let n=String(e).trim();if(!n)throw new RangeError("Time is empty");if(/^now$/i.test(n))return t;if(/^[+\-−]/.test(n))return G(t+Ee(n));if(/^\d{11,}$/.test(n))return G(Number(n));let o=n.replace(/^(\d{4}-\d{2}-\d{2})[ ](\d{2}:\d{2})/,"$1T$2"),i=r(o);if(!Number.isFinite(i))throw new RangeError(`Could not read "${e}" as a time. Use ISO 8601 like 2026-12-31T23:59:50, epoch ms, or "+1d".`);return G(i)}var ze=1e4,At=[{id:"midnight",label:"Before midnight",hint:"23:59:50 tonight",at(e,t){let r=new t(e);return r.setHours(24,0,0,0),r.getTime()-ze}},{id:"month-end",label:"Month end",hint:"last day, 23:59:50",at(e,t){let r=new t(e);return r.setMonth(r.getMonth()+1,1),r.setHours(0,0,0,0),r.getTime()-ze}},{id:"year-end",label:"New Year's Eve",hint:"Dec 31, 23:59:50",at(e,t){let r=new t(e);return r.setFullYear(r.getFullYear()+1,0,1),r.setHours(0,0,0,0),r.getTime()-ze}},{id:"tomorrow-9",label:"Tomorrow 9 AM",hint:"start of a business day",at(e,t){let r=new t(e);return r.setDate(r.getDate()+1),r.setHours(9,0,0,0),r.getTime()}},{id:"leap-day",label:"Leap day",hint:"next Feb 29, 09:00",at(e,t){let r=new t(e).getFullYear();for(;;){let n=r%4===0&&r%100!==0||r%400===0,o=new t(r,1,29,9,0,0,0).getTime();if(n&&o>e)return o;r+=1}}}],Rs=[{label:"1m",ms:6e4},{label:"15m",ms:15*6e4},{label:"1h",ms:36e5},{label:"1d",ms:864e5},{label:"7d",ms:7*864e5},{label:"30d",ms:30*864e5},{label:"1y",ms:365*864e5}];function Tt(e){return e===3600?"1h/s":e===600?"10m/s":e===60?"1m/s":`${Number.isInteger(e)?e:e.toFixed(1)}\xD7`}var E=globalThis,pe="__buoyClock",T=E.__buoyRealDate??(Date[pe]?Date.__buoyRealDate:Date);E.__buoyRealDate=T;var St=T.now.bind(T);function S(){return St()}E.__buoyRealNow=S;var Ne=null,Le=0;function he(){let e=St();return!Ne||Le>0?e:Ne(e)}function $t(e){Ne=e}function je(e){Le+=1;try{return e()}finally{Le-=1}}E.__buoyWithRealClock=je;function _(...e){let t=new.target;return t?Reflect.construct(T,e.length===0?[he()]:e,t):new T(he()).toString()}_.prototype=T.prototype;Object.defineProperty(_,"name",{value:"Date"});Object.defineProperty(_,"length",{value:7});Object.defineProperty(_,"now",{value:function(){return he()},writable:true,configurable:true});Object.defineProperty(_,"parse",{value:T.parse,writable:true,configurable:true});Object.defineProperty(_,"UTC",{value:T.UTC,writable:true,configurable:true});Object.defineProperty(_,pe,{value:true});Object.defineProperty(_,"__buoyRealDate",{value:T});var re=_,me=false,ye;function Qn(){return me&&E.Date===re}function eo(){if(E.Date===re){me=true;return}let e=Object.getOwnPropertyDescriptor(E,"Date");Object.defineProperty(E,"Date",{value:re,writable:e?.writable??true,enumerable:e?.enumerable??false,configurable:true}),ye=Object.getOwnPropertyDescriptor(T.prototype,"constructor");try{Object.defineProperty(T.prototype,"constructor",{value:re,writable:true,enumerable:false,configurable:true})}catch{}me=true}function to(){if(E.Date===re){let e=Object.getOwnPropertyDescriptor(E,"Date");Object.defineProperty(E,"Date",{value:T,writable:e?.writable??true,enumerable:e?.enumerable??false,configurable:true})}if(ye){try{Object.defineProperty(T.prototype,"constructor",ye)}catch{}ye=void 0}me=false}var ne=[];function It(e){return function(t,...r){return e.call(this,t===void 0?he():t,...r)}}function ro(){if(ne.length)return;let e=E.Intl?.DateTimeFormat?.prototype;if(e)for(let t of["format","formatToParts"]){let r=Object.getOwnPropertyDescriptor(e,t);if(!(!r||!r.configurable))try{if(typeof r.get=="function"){let n=r.get;Object.defineProperty(e,t,{...r,get(){return It(n.call(this))}})}else if(typeof r.value=="function")Object.defineProperty(e,t,{...r,value:It(r.value)});else continue;ne.push({proto:e,name:t,original:r})}catch{}}}function no(){for(let{proto:e,name:t,original:r}of ne)try{Object.defineProperty(e,t,r)}catch{}ne=[]}function oo(){return ne.length>0}function io(){eo(),ro()}function so(){to(),no()}var Me=false;function ao(e){let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(!Object.prototype.hasOwnProperty.call(t,pe)){for(let r of["start","onUpdate"]){let n=Object.getOwnPropertyDescriptor(t,r);if(n&&typeof n.value=="function"){let o=n.value;t[r]=function(...i){return je(()=>o.apply(this,i))}}}try{Object.defineProperty(t,pe,{value:true})}catch{return}}t=Object.getPrototypeOf(t)}}function lo(e){if(Me)return true;try{let t=e;if(typeof t?.Value!="function")return false;let r=Object.getPrototypeOf(new t.Value(0)),n=r?.animate;return typeof n!="function"?false:(r.animate=function(o,...i){return o&&typeof o=="object"&&ao(o),n.call(this,o,...i)},Me=true,true)}catch{return false}}function co(){return Me}var oe=globalThis,Rt="__buoyClockTimer",z=new Map,J=null,Ct=0,q=()=>S()+Ct;function uo(e){(J?.setTimeout??setTimeout)(()=>{throw e},0)}function Ot(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function fo(){return J!==null}function Dt(){if(J)return true;let{setTimeout:e,clearTimeout:t,setInterval:r,clearInterval:n}=oe;if(typeof e!="function"||typeof t!="function")return false;if(e[Rt])return true;J={setTimeout:e,clearTimeout:t,setInterval:typeof r=="function"?r:e,clearInterval:typeof n=="function"?n:t};let o=J,i=function(d,v,...b){if(typeof d!="function")return o.setTimeout(d,v,...b);let I=Ot(v),k,C=function(){return z.delete(k),d.apply(this,b)};return k=o.setTimeout(C,v),z.set(k,{kind:"timeout",callback:d,args:b,delay:I,due:q()+I,realHandle:k,run:C}),k},s=function(d,v,...b){if(typeof d!="function")return o.setInterval(d,v,...b);let I=Ot(v),k,C=function(){let L=z.get(k);return L&&(L.due=q()+I),d.apply(this,b)};return k=o.setInterval(C,v),z.set(k,{kind:"interval",callback:d,args:b,delay:I,due:q()+I,realHandle:k,run:C}),k},a=(d,v)=>{let b=z.get(d);return b?(z.delete(d),b.kind==="interval"?o.clearInterval(b.realHandle):o.clearTimeout(b.realHandle)):v(d)},l=function(d){return a(d,o.clearTimeout)},c=function(d){return a(d,o.clearInterval)};globalThis.__buoyRealTimers={setTimeout:o.setTimeout,clearTimeout:l,setInterval:o.setInterval,clearInterval:c};for(let d of[i,s,l,c])Object.defineProperty(d,Rt,{value:true});return oe.setTimeout=i,oe.clearTimeout=l,oe.setInterval=s,oe.clearInterval=c,true}function po(){let e=q(),t=0,r=0,n=null;for(let o of z.values())if(o.kind==="interval")r+=1;else{t+=1;let i=Math.max(0,o.due-e);(n===null||i<n)&&(n=i)}return{total:t+r,timeouts:t,intervals:r,nextTimeoutInMs:n}}function ho(e){let t=q(),r=0;for(let n of z.values())n.due-t<=e&&(r+=1);return r}function mo(e){if(!J||!(e>0))return 0;let t=J;Ct+=e;let r=q(),n=[...z.entries()].filter(([,s])=>s.due<=r).sort((s,a)=>s[1].due-a[1].due),o=0;for(let[s,a]of n)if(z.has(s)){a.kind==="timeout"?(z.delete(s),t.clearTimeout(a.realHandle)):a.due=r+a.delay;try{a.callback(...a.args)}catch(l){uo(l)}o+=1}let i=q();for(let s of z.values())s.kind==="timeout"&&(t.clearTimeout(s.realHandle),s.realHandle=t.setTimeout(s.run,Math.max(0,s.due-i)));return o}import{devToolsStorageKeys as yo,persistentStorage as Pt}from"@buoy-gg/shared-ui/web";var ie={persist:true,showChip:true,fireTimersOnJump:true},go=2*6e4,Et=yo.clock.state();function bo(e){if(!e)return null;try{let t=JSON.parse(e);if(!t||t.v!==1)return null;let r=t.settings??{},n=t.reload&&vt(t.reload.anchor)&&typeof t.reload.at=="number"?{anchor:t.reload.anchor,at:t.reload.at}:void 0;return{v:1,anchor:vt(t.anchor)?t.anchor:null,...n?{reload:n}:{},settings:{persist:typeof r.persist=="boolean"?r.persist:ie.persist,showChip:typeof r.showChip=="boolean"?r.showChip:ie.showChip,fireTimersOnJump:typeof r.fireTimersOnJump=="boolean"?r.fireTimersOnJump:ie.fireTimersOnJump}}}catch{return null}}async function ko(){try{return bo(await Pt.getItem(Et))}catch{return null}}var _e=Promise.resolve();function Fe(e){let t=JSON.stringify(e);return _e=_e.then(()=>Pt.setItem(Et,t)).catch(()=>{}),_e.then(()=>{})}import{dispatchToolAction as xo}from"@buoy-gg/shared-ui/web";import{loadToolModule as vo}from"@buoy-gg/shared-ui/web/utils";var zt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ge={};for(let e=0;e<zt.length;e++)ge[zt[e]]=e;ge["-"]=62;ge._=63;function Be(e){let t=e.replace(/=+$/,""),r=[],n=0,o=0;for(let i=0;i<t.length;i++){let s=ge[t[i]];if(s===void 0)return null;n=n<<6|s,o+=6,o>=8&&(o-=8,r.push(n>>o&255))}return r}function wo(e){let t="";for(let r=0;r<e.length;){let n=e[r],o,i;if(n<128)o=n,i=0;else if(n>=192&&n<224)o=n&31,i=1;else if(n>=224&&n<240)o=n&15,i=2;else if(n>=240&&n<248)o=n&7,i=3;else return null;for(let s=1;s<=i;s++){let a=e[r+s];if(a===void 0||(a&192)!==128)return null;o=o<<6|a&63}t+=String.fromCodePoint(o),r+=i+1}return t}function Ue(e){let t=Be(e);return t?Nt(t):null}function Nt(e){let t=wo(e);if(!t||t[0]!=="{")return null;try{let r=JSON.parse(t);return r&&typeof r=="object"&&!Array.isArray(r)?r:null}catch{return null}}function He(e){let t=typeof e=="string"&&e.trim()!==""?Number(e):e;return typeof t=="number"&&Number.isFinite(t)&&t>0?t*1e3:void 0}function se(e,t){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e<1e11?e*1e3:e;if(typeof e=="string"&&e.trim()!==""){let r=e.trim();if(/^\d+(\.\d+)?$/.test(r))return se(Number(r),t);let n=t(r);return Number.isFinite(n)?n:void 0}}function Ao(e){let t=typeof e=="string"&&/^\d+(\.\d+)?$/.test(e.trim())?Number(e):e;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:void 0}var To=/^[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*$/,So=/^[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*$/,Lt=/^v([1-4])\.(local|public)\.([A-Za-z0-9_-]+)(?:\.([A-Za-z0-9_-]+))?$/,$o={1:256,2:64,3:96,4:64};function U(e){if(typeof e=="string"&&e)return e;if(Array.isArray(e)){let t=e.filter(r=>typeof r=="string");return t.length?t.join(", "):void 0}}function Io(e,t){let r=e.iss??"",n=e.use;if(r.includes("securetoken.google.com"))return"Firebase ID token";if(r.includes("firebaseappcheck"))return"Firebase App Check token";if(r.includes("cognito-idp"))return n?`Cognito ${n} token`:"Cognito token";if(r.includes("appleid.apple.com"))return"Sign in with Apple token";if(r.includes("accounts.google.com"))return"Google ID token";if(r.includes(".auth0.com")||r.includes("auth0"))return"Auth0 token";if(r.includes("clerk"))return"Clerk session token";if(r.includes("supabase")||r.includes("/auth/v1"))return"Supabase access token";if(r.includes("okta"))return"Okta token";if(r.includes("/realms/"))return"Keycloak token";if(r.includes("login.microsoftonline.com")||r.includes("sts.windows.net"))return"Microsoft Entra token";let o=typeof t?.typ=="string"?t.typ.toLowerCase():"";if(o==="at+jwt"||o==="application/at+jwt")return"OAuth access token"}function Ro(e,t){let r={iss:U(e.iss),aud:U(e.aud),sub:U(e.sub),scope:U(e.scope??e.scp),use:U(e.token_use)},n=He(e.exp);return{claims:r,issuedAt:He(e.iat),notBefore:He(e.nbf),expiresAt:n,expirySource:n?t:void 0}}function Co(e){let[t,r]=e.split("."),n=Ue(t);if(!n||typeof n.alg!="string"&&typeof n.typ!="string")return null;let o=Ue(r);if(!o)return null;let i=typeof n.alg=="string"?n.alg:void 0,s=Ro(o,"exp claim");return s.claims.alg=i,!s.claims.use&&typeof n.typ=="string"&&n.typ.toUpperCase()!=="JWT"&&(s.claims.use=n.typ),{format:"jwt",formatLabel:i?`JWT \xB7 ${i}`:"JWT",hint:Io(s.claims,n),...s}}function Oo(e){let t=Ue(e.split(".")[0]);return!t||typeof t.enc!="string"?null:{format:"jwe",formatLabel:"Encrypted JWT",claims:{alg:typeof t.alg=="string"?t.alg:void 0}}}function Do(e,t){let r=Lt.exec(e);if(!r)return null;let[,n,o,i]=r;if(o==="local")return{format:"paseto-local",formatLabel:`PASETO v${n} (encrypted)`,claims:{}};let s=Be(i),a=$o[n],l=s&&s.length>a?Nt(s.slice(0,s.length-a)):null,c={format:"paseto-public",formatLabel:`PASETO v${n}`,claims:{}};return l&&(c.claims={iss:U(l.iss),aud:U(l.aud),sub:U(l.sub)},c.issuedAt=se(l.iat,t),c.notBefore=se(l.nbf,t),c.expiresAt=se(l.exp,t),c.expiresAt&&(c.expirySource="exp claim")),c}function Po(e){if(!e.startsWith("gAAAAA")||e.length<76)return null;let t=Be(e);if(!t||t[0]!==128||t.length<73||(t.length-57)%16!==0)return null;let r=0;for(let n=1;n<=8;n++)r=r*256+t[n];return r<978307200||r>4102444800?null:{format:"fernet",formatLabel:"Fernet",claims:{},issuedAt:r*1e3}}var Eo=[{test:/^ya29\./,hint:"Google OAuth access token"},{test:/^gh[opsu]_/,hint:"GitHub token"},{test:/^github_pat_/,hint:"GitHub token"},{test:/^xox[abeprs]-/,hint:"Slack token"},{test:/^EAA[A-Za-z0-9]{40,}/,hint:"Facebook access token"},{test:/^shp(at|ca|pa|ss)_/,hint:"Shopify token"},{test:/^(sk|rk|pk)_(live|test)_/,hint:"Stripe API key",neverExpires:true},{test:/^AIza[0-9A-Za-z_-]{35}$/,hint:"Google API key",neverExpires:true}];function be(e,t=Date.parse){let r=e.trim().replace(/^"(.*)"$/,"$1");if(r.length<16||/\s/.test(r))return null;if(To.test(r)){let i=Co(r);if(i)return i}if(So.test(r)){let i=Oo(r);if(i)return i}if(r.startsWith("v")&&Lt.test(r)){let i=Do(r,t);if(i)return i}let n=Po(r);if(n)return n;let o=Eo.find(i=>i.test.test(r));return{format:"opaque",formatLabel:"Opaque",hint:o?.hint,neverExpires:o?.neverExpires,claims:{}}}function zo(e){return!!e&&e.format!=="opaque"}function H(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")}function Ve(e){let t=/^([a-z][a-z0-9+.-]*:\/\/[^/?#]+)/i.exec(e);return t?t[1].toLowerCase():null}function No(e){let t=Ve(e);return t?t.replace(/^[a-z][a-z0-9+.-]*:\/\//,""):"unknown"}function We(e){return e.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/?#]+/i,"").split(/[?#]/)[0]||"/"}function Lo(e){let t=e.split("#")[0].split("?")[1];if(!t)return[];let r=[];for(let n of t.split("&")){let o=n.indexOf("=");if(!(o<=0))try{r.push([decodeURIComponent(n.slice(0,o)),decodeURIComponent(n.slice(o+1))])}catch{}}return r}var Je=/(token|jwt|session|auth|appcheck|api[-_]?key|apikey|credential|bearer)/i,jo=new Set(["authorization","cookie","dpop","idempotency-key","x-request-id","x-correlation-id","www-authenticate","proxy-authenticate","x-csrf-token","x-xsrf-token"]),jt=new Set(["access_token","accesstoken","id_token","token","auth","auth_token","jwt","session","session_token"]),Mo=new Set(["bearer","token","jwt","dpop","oauth","firebase"]);function Mt(e){let t={};if(!e)return t;for(let[r,n]of Object.entries(e))typeof n=="string"?t[r.toLowerCase()]=n:Array.isArray(n)&&(t[r.toLowerCase()]=n.join(", "));return t}function _o(e){let t=[];for(let r of e.split(";")){let n=r.indexOf("=");n<=0||t.push([r.slice(0,n).trim(),r.slice(n+1).trim()])}return t}function ae(e,t,r){let n=be(e,r);return n&&(zo(n)||n.hint||t)?n:null}function _t(e,t){let r=[],n=Mt(e.requestHeaders),o=n.authorization;if(o){let i=/^(\S+)\s+(\S+)$/.exec(o.trim()),s=i?i[1]:void 0,a=i?i[2]:o.trim();if(!s||Mo.has(s.toLowerCase())){let l=ae(a,true,t);l&&r.push({location:"authorization",name:"Authorization",scheme:s,fp:H(a),info:l})}}for(let[i,s]of Object.entries(n)){if(jo.has(i)||!Je.test(i))continue;let a=s.replace(/^bearer\s+/i,""),l=ae(a,true,t);l&&r.push({location:"header",name:i,fp:H(a),info:l})}if(n.cookie)for(let[i,s]of _o(n.cookie)){let a=ae(s,Je.test(i)||/^(sid|sess)/i.test(i),t);a&&r.push({location:"cookie",name:i,fp:H(s),info:a})}for(let[i,s]of Lo(e.url)){let a=ae(s,jt.has(i.toLowerCase()),t);a&&jt.has(i.toLowerCase())&&r.push({location:"query",name:i,fp:H(s),info:a})}return r}var Fo=/^(access_?token|accesstoken|token|jwt|auth_?token|session_?token|sessiontoken)$/i,Ft=/^(id_?token|idtoken)$/i,ke=/^(refresh_?token|refreshtoken)$/i,Bo=["expires_in","expiresIn","ExpiresIn","expires","ttl"],Uo=["expires_at","expiresAt","ExpiresAt","expiration","Expiration","expiry","expirationTime","expiration_time","access_token_expires_at","accessTokenExpiresAt","accessTokenExpiry"],Ho=["refresh_expires_in","refresh_token_expires_in","refreshTokenExpiresIn","refreshExpiresIn"],Vo=["refresh_expires_at","refreshTokenExpiresAt","refresh_token_expires_at"];function Wo(e){if(typeof e!="string")return e;let t=e.trim();if(!(t.startsWith("{")||t.startsWith("[")))return null;try{return JSON.parse(t)}catch{return null}}function qe(e,t,r){if(t>4||!e||typeof e!="object")return;if(Array.isArray(e)){for(let o of e.slice(0,5))qe(o,t+1,r);return}let n=e;for(let[o,i]of Object.entries(n))typeof i=="string"&&(Fo.test(o)||Ft.test(o)||ke.test(o))?r.push({key:o,value:i,holder:n}):i&&typeof i=="object"&&qe(i,t+1,r)}function Jo(e){return ke.test(e)?"refresh":Ft.test(e)?"id":/session/i.test(e)?"session":"access"}function Bt(e,t,r,n,o){for(let i of t){let s=Ao(e[i]);if(s!==void 0)return{expiresAt:n+s*1e3,source:i,lifetimeMs:s*1e3}}for(let i of r){let s=se(e[i],o);if(s!==void 0)return{expiresAt:s,source:i}}return{}}function qo(e){let t=e["set-cookie"];return t?t.split(/,(?=\s*[A-Za-z0-9!#$%&'*+.^_`|~-]+=)/).map(r=>r.trim()):[]}function Ko(e,t){if(e.status===void 0||e.status>=400)return[];let r=`${e.method.toUpperCase()} ${We(e.url)}`,n=e.timestamp+(e.duration??0),o=[],i=Wo(e.responseData);if(i){let a=[];qe(i,0,a);let l=new Map;for(let c of a.filter(d=>ke.test(d.key))){let d=be(c.value,t);if(!d)continue;let v=Bt(c.holder,Ho,Vo,n,t);l.set(c.holder,{fp:H(c.value),expiresAt:d.expiresAt??v.expiresAt,formatLabel:d.formatLabel})}for(let c of a){if(ke.test(c.key))continue;let d=be(c.value,t);if(!d)continue;let v=Bt(c.holder,Bo,Uo,n,t);o.push({fp:H(c.value),info:d,role:Jo(c.key),expiresAt:v.expiresAt,expirySource:v.source,lifetimeMs:v.lifetimeMs,issuedBy:r,refresh:l.get(c.holder)})}}let s=Mt(e.responseHeaders);for(let a of qo(s)){let[l,...c]=a.split(";"),d=l.indexOf("=");if(d<=0)continue;let v=l.slice(0,d).trim(),b=l.slice(d+1).trim(),I=ae(b,Je.test(v)||/^(sid|sess)/i.test(v),t);if(!I||b===""||b.toLowerCase()==="deleted")continue;let k,C,L;for(let jr of c){let[Mr,..._r]=jr.split("="),ft=Mr.trim().toLowerCase(),Re=_r.join("=").trim();if(ft==="max-age"&&/^-?\d+$/.test(Re))L=Number(Re)*1e3,k=n+L,C="Max-Age";else if(ft==="expires"&&C!=="Max-Age"){let pt=t(Re);Number.isFinite(pt)&&(k=pt,C="Expires")}}o.push({fp:H(b),info:I,role:"cookie",cookie:v,expiresAt:I.expiresAt??k,expirySource:I.expiresAt?I.expirySource:C,lifetimeMs:I.expiresAt?void 0:L,issuedBy:r})}return o}var Ke=e=>T.parse(e),Ut=4,Ht=2e4,Zo=8,Yo=8,Go=200,Xo=1e3,D=new Map,X=new Map,Qo=new Set,ei=new Set,Vt=new Set,ti=/(token|refresh|oauth|session|auth\/)/i,p=null,xe=true,Ze=null,Ye=new Set,Ge=false;function le(){Ge||(Ge=true,Promise.resolve().then(()=>{Ge=false,Ye.forEach(e=>e())}))}function ri(e){return Ye.add(e),()=>{Ye.delete(e)}}function Wt(e,t){if(e.has(t))return false;if(e.size>=Xo){let r=e.values().next().value;r!==void 0&&e.delete(r)}return e.add(t),true}function Xe(e,t){return`${e}|${t.location}:${t.name.toLowerCase()}`}function Jt(e,t){let r=t?.lifetimeMs!==void 0&&t.expiresAt!==void 0,n=r?t.expiresAt:e.expiresAt??t?.expiresAt,o=e.expiresAt??(r?t.observedReal+t.lifetimeMs:t?.expiresAt),i=r?t.expirySource:e.expiresAt?e.expirySource:t?.expirySource,s=r?t.lifetimeMs:e.expiresAt!==void 0&&e.issuedAt!==void 0?e.expiresAt-e.issuedAt:void 0;return{expiresAt:n,serverExpiresAt:o,source:i,lifetimeMs:s}}function Qe(e,t,r,n,o){let i=X.get(t),s=Jt(r,i),a=e.fp!==t;a&&(e.history.unshift({fp:e.fp,firstSeenReal:e.firstSeenReal,expiresAt:e.expiresAt}),e.history.length=Math.min(e.history.length,Yo),e.fp=t,e.firstSeenReal=n,e.firstSeenApp=o,e.uses=0,e.expiredSends=0,e.rejected=0),e.info=r,e.role=i?.role??(a?void 0:e.role),e.issuedBy=i?.issuedBy??(a?void 0:e.issuedBy),e.refresh=i?.refresh??(a?void 0:e.refresh),e.expiresAt=s.expiresAt,e.serverExpiresAt=s.serverExpiresAt,e.expirySource=s.source,e.lifetimeMs=s.lifetimeMs,a&&ni(e,n)}function qt(e,t,r,n,o){let i=X.get(r.fp),s=Jt(r.info,i);return{key:e,origin:t,host:No(t),location:r.location,name:r.name,scheme:r.scheme,fp:r.fp,info:r.info,role:i?.role,issuedBy:i?.issuedBy,refresh:i?.refresh,expiresAt:s.expiresAt,serverExpiresAt:s.serverExpiresAt,expirySource:s.source,lifetimeMs:s.lifetimeMs,firstSeenReal:n,firstSeenApp:o,lastUsedReal:n,lastUsedApp:o,uses:0,expiredSends:0,rejected:0,history:[]}}function Kt(){if(D.size<=Zo)return;let e=null;for(let t of D.values())(!e||t.lastUsedReal<e.lastUsedReal)&&(e=t);e&&e.key!==p?.tokenId&&D.delete(e.key)}function ni(e,t){!p||p.tokenId!==e.key||(p.newTokens+=1,p.status==="waiting"&&(p.status="refreshed",p.refreshedAt=t,p.ruleId&&p.forcedAt===void 0&&xo("network","deleteOverrideRule",{id:p.ruleId}).catch(()=>{})),p.newTokens>=Ut&&t-(p.refreshedAt??t)<=Ht&&(p.status="loop"))}function oi(e){let t=Ve(e.url);if(!t)return;let r=_t(e,Ke);if(r.length===0)return;let n=S(),o=e.timestamp;for(let i of r){let s=Xe(t,i),a=D.get(s);a?Qe(a,i.fp,i.info,n,o):(a=qt(s,t,i,n,o),D.set(s,a),Kt()),a.uses+=1,a.lastUsedReal=n,a.lastUsedApp=o,a.expiresAt!==void 0&&o>=a.expiresAt&&(a.expiredSends+=1),p&&p.tokenId===s&&p.forcedAt!==void 0&&i.fp===p.startFp&&(p.staleAfterFailure+=1)}le()}function ii(e){let t=Ve(e.url);if(!t)return;let r=S(),n=false;if(e.status===401||e.status===403)for(let i of _t(e,Ke)){let s=D.get(Xe(t,i));s&&s.fp===i.fp&&(s.rejected+=1,n=true)}let o=!!p?.ruleId&&e.override?.ruleId===p.ruleId;if(p&&(e.status??0)>=400&&!o){let i=`${e.method.toUpperCase()} ${We(e.url)}`;(Vt.has(i)||e.method.toUpperCase()==="POST"&&ti.test(We(e.url)))&&(p.failedRefreshes+=1,p.lastRefreshError=`${e.status} ${i}`,n=true)}p?.ruleId&&e.override?.ruleId===p.ruleId&&p.forcedAt===void 0&&(p.forcedAt=r,n=true);for(let i of Ko(e,Ke)){if(Vt.add(i.issuedBy),X.set(i.fp,{...i,observedReal:r}),X.size>Go){let s=X.keys().next().value;s!==void 0&&X.delete(s)}if(n=true,i.cookie){let s={location:"cookie",name:i.cookie,fp:i.fp,info:i.info},a=Xe(t,s),l=D.get(a);l?Qe(l,i.fp,i.info,r,e.timestamp):(D.set(a,qt(a,t,s,r,e.timestamp)),Kt());continue}for(let s of D.values())s.fp===i.fp&&Qe(s,i.fp,s.info,r,s.lastUsedApp)}n&&le()}function si(e){let t=e;!t||typeof t.id!="string"||typeof t.url!="string"||(Wt(Qo,t.id)&&oi(t),t.status!==void 0&&Wt(ei,t.id)&&ii(t))}function ve(){if(Ze)return true;try{let{networkEventStore:e}=vo("@buoy-gg/network");if(!e?.onEvent)throw new Error("no event store");Ze=e.onEvent(si,true),xe=true}catch{xe=false}return le(),xe}function Zt(e,t,r){let n=D.get(t);if(!n)throw new Error(`No token row "${t}".`);return p={kind:e,tokenId:t,startedAt:S(),startFp:n.fp,ruleId:r,status:"waiting",newTokens:0,staleAfterFailure:0,failedRefreshes:0},le(),p}function ai(){p=null,le()}function li(e){return e.location==="cookie"?`${e.name} cookie`:e.location==="query"?`${e.name} parameter`:e.location==="header"?`${e.name} header`:e.role==="id"||e.info.claims.use==="id"?"ID token":"Access token"}function ci(e,t){let r=[e.firstSeenReal,...e.history.map(o=>o.firstSeenReal)].slice(0,-1).filter(o=>t-o<=Ht).length,n=e.info.issuedAt;return{id:e.key,label:li(e),host:e.host,location:e.location,name:e.name,scheme:e.scheme,format:e.info.format,formatLabel:e.info.formatLabel,hint:e.info.hint,claims:e.info.claims,fingerprint:e.fp,issuedAt:n,notBefore:e.info.notBefore,expiresAt:e.expiresAt,serverExpiresAt:e.serverExpiresAt,expirySource:e.expirySource,lifetimeMs:e.lifetimeMs,neverExpires:e.info.neverExpires,issuedBy:e.issuedBy,refresh:e.refresh?{expiresAt:e.refresh.expiresAt,formatLabel:e.refresh.formatLabel}:void 0,firstUsed:e.firstSeenApp,lastUsed:e.lastUsedApp,lastUsedReal:e.lastUsedReal,uses:e.uses,refreshes:e.history.length,lastRefreshAt:e.history.length?e.firstSeenReal:void 0,recentRefreshes:r,looping:r>=Ut,expiredSends:e.expiredSends,rejected:e.rejected}}function we(){let e=S(),t=[...D.values()].sort((r,n)=>n.lastUsedReal-r.lastUsedReal).map(r=>ci(r,e));if(p?.status==="refreshed"){let r=D.get(p.tokenId);r&&(p.newLifetimeMs=r.lifetimeMs,p.newIssuedBy=r.issuedBy)}return{available:xe,watching:Ze!==null,tokens:t,check:p?{...p}:null}}function ui(e){let t=we();return e?t.tokens.find(r=>r.id===e)??null:t.tokens.find(r=>r.expiresAt!==void 0)??t.tokens[0]??null}function di(e){return D.get(e)?.origin??null}import{isProNow as Yt}from"@buoy-gg/shared-ui/web";var f={anchor:Ce,settings:ie,lastJump:null,changedAt:null,hydrated:false},et=new Set,Ae=null;function Gt(){Ae=null,et.forEach(e=>e())}ri(Gt);function ce(e){return et.add(e),()=>{et.delete(e)}}function fi(){return f.settings}function Xt(){return M(f.anchor,S())}function Qt(){return f.anchor.mode!=="real"}function pi(e){if(e.mode==="real"){$t(null),so();return}Dt(),$t(t=>M(f.anchor,t)),io()}function hi(){let e={v:1,anchor:f.settings.persist&&Yt()?f.anchor:null,settings:f.settings};Fe(e)}function er(){let e={v:1,anchor:f.settings.persist&&Yt()?f.anchor:null,settings:f.settings};return f.settings.persist&&f.anchor.mode!=="real"&&(e.reload={anchor:f.anchor,at:S()}),Fe(e)}function Q(e,{save:t=true}={}){f={...f,...e},e.anchor&&pi(f.anchor),t&&hi(),Gt()}function ee(e,t=f.lastJump){Q({anchor:e,lastJump:t,changedAt:S(),hydrated:true})}var tr=e=>T.parse(e);function rr(e,t=false){let r=S(),n=M(f.anchor,r),o=wt(e,n,tr),i=o-n;return ee(Pe(f.anchor,r,o,t),{byMs:i,firedTimers:0,at:r}),R()}function tt(e,t){let r=Ee(e),n=S(),o=Kn(f.anchor,n,r),i=(t??f.settings.fireTimersOnJump)&&r>0;if(ee(o,{byMs:r,firedTimers:0,at:n}),i){let s=mo(r);s>0&&Q({lastJump:{byMs:r,firedTimers:s,at:n}},{save:false})}return R()}function rt(e){let t=S(),r=M(f.anchor,t),n=e===void 0||e===""?r:wt(e,r,tr);return ee(Zn(f.anchor,t,n)),R()}function nt(){return f.anchor.mode==="frozen"&&ee(Yn(f.anchor,S())),R()}function nr(e){return ee(Gn(f.anchor,S(),Number(e))),R()}function ot(){return ee(Ce,null),R()}function or(e){let t={...f.settings};for(let r of Object.keys(ie))typeof e[r]=="boolean"&&(t[r]=e[r]);return Q({settings:t}),R()}function mi(e){return e>0?ho(e):0}var ir=false;function sr(e){if(!e){Q({hydrated:true},{save:false});return}let t=e.reload?S()-e.reload.at:1/0,r=t>=0&&t<go?e.reload?.anchor:void 0;e.reload&&Fe({v:1,anchor:e.anchor,settings:e.settings});let n=e.anchor??r??null;Q({settings:e.settings,anchor:n??Ce,changedAt:n?S():null,hydrated:true},{save:false})}function it(){if(ir)return;ir=true,Dt();let e=void 0;if(e!==void 0){sr(e);return}ko().then(t=>{f.changedAt===null?sr(t):Q({hydrated:true},{save:false})})}function yi(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone??"unknown"}catch{return"unknown"}}function R(){let e=S(),t=M(f.anchor,e);return{mode:f.anchor.mode,active:f.anchor.mode!=="real",rate:f.anchor.rate,virtualNow:t,virtualIso:new T(t).toISOString(),realNow:e,offsetMs:qn(f.anchor,e),timeZone:yi(),timers:po(),lastJump:f.lastJump,changedAt:f.changedAt,settings:f.settings,hydrated:f.hydrated,tokens:we(),patched:{date:Qn(),intl:oo(),timers:fo(),animatedOnRealClock:co()}}}function ar(){return Ae||(Ae=R()),Ae}import{useSyncExternalStore as gi}from"react";import{ClockToolIcon as lr,FloatingTool as bi,Pause as ki,Play as xi,X as vi,dismissFloatingTool as wi,getFloatingTools as Ai,getUseIsPro as Ti,night as ue,openFloatingTool as cr}from"@buoy-gg/shared-ui/web";import{useEffect as Si,useState as $i}from"react";function V(e,t=250){let[,r]=$i(0);Si(()=>{let s=setInterval(()=>r(a=>a+1),t);return()=>clearInterval(s)},[t]);let n=S();if(!e)return{virtual:n,real:n};let o=n-e.realNow,i=e.mode==="real"?1:e.rate;return{virtual:e.mode==="frozen"?e.virtualNow:e.virtualNow+o*i,real:n}}var F=e=>String(e).padStart(2,"0");function de(e){let t=new T(e);return`${F(t.getHours())}:${F(t.getMinutes())}:${F(t.getSeconds())}`}var Ii=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],ur=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function Ri(e){let t=new T(e);return`${Ii[t.getDay()]}, ${ur[t.getMonth()]} ${t.getDate()}, ${t.getFullYear()}`}function Te(e,t=true){let r=new T(e),n=t?de(e):`${F(r.getHours())}:${F(r.getMinutes())}`;return`${ur[r.getMonth()]} ${r.getDate()} \xB7 ${n}`}function dr(e){let t=new T(e);return`${t.getFullYear()}-${F(t.getMonth()+1)}-${F(t.getDate())} ${F(t.getHours())}:${F(t.getMinutes())}`}function Ci(e){if(Math.abs(e)<1e3)return"matches real time";let t=te(Math.abs(e),{signed:false});return e>0?`${t} ahead of real time`:`${t} behind real time`}function fr(e){return e.mode==="real"?{label:"Real time",tone:"neutral"}:e.mode==="frozen"?{label:"Frozen",tone:"info"}:e.rate!==1?{label:`${Tt(e.rate)} speed`,tone:"warning"}:{label:"Overridden",tone:"accent"}}function Oi(e){return`clock-jump-${e<0?"minus":"plus"}-${te(Math.abs(e),{signed:false}).replace(/\s/g,"")}`}import{jsx as N,jsxs as st}from"react/jsx-runtime";var Se="clock-chip",pr={id:Se,render:e=>N(mr,{...e})},Di=()=>Ai().some(e=>e.id===Se);function Pi(){cr(pr)}var hr=false;function Ei(){if(hr)return;hr=true;let e=false,t=()=>{let r=Qt()&&fi().showChip;r&&!e?cr(pr):!r&&Di()&&wi(Se),e=r};ce(t),t()}function mr({id:e,revealToken:t}){let r=gi(ce,ar,ar),{virtual:n,real:o}=V(r),i=r.mode==="frozen",s=i||Ti()(),a=fr(r),l=n-o,c=`${Math.abs(l)<1e3?"0s":te(l)} \xB7 ${a.label.toLowerCase()}`;return N(bi,{id:e,revealToken:t,variant:"strip",dragFromSurface:true,defaultPlacement:"top",accessibilityLabel:`Move or hide the clock chip. App time ${Te(n)}`,handleAdornment:N(lr,{size:12}),children:st(m,{style:K.row,children:[N(lr,{size:18}),st(m,{style:K.text,children:[N(w,{style:K.time,numberOfLines:1,testID:"clock-chip-time",children:Te(n)}),N(w,{style:K.detail,numberOfLines:1,testID:"clock-chip-detail",children:c})]}),s?st(B,{testID:i?"clock-chip-resume":"clock-chip-freeze",accessibilityRole:"button",accessibilityLabel:i?"Resume the app clock":"Freeze the app clock",onPress:()=>i?nt():rt(),style:K.button,hitSlop:{top:8,bottom:8,left:4,right:4},children:[i?N(xi,{size:16,color:ue.color.accent}):null,i?null:N(ki,{size:16,color:ue.color.text})]}):null,s?N(m,{style:K.separator}):null,N(B,{testID:"clock-chip-reset",accessibilityRole:"button",accessibilityLabel:"Back to real time",onPress:()=>ot(),style:K.button,hitSlop:{top:8,bottom:8,left:4,right:8},children:N(vi,{size:16,color:ue.color.textSecondary})})]})})}var K=Y.create({row:{flexDirection:"row",alignItems:"center",gap:10,paddingLeft:10,paddingRight:4,paddingVertical:6,minWidth:220},text:{flexShrink:1,minWidth:120},time:{color:"#F59E0B",fontSize:14,fontWeight:"600",fontVariant:["tabular-nums"]},detail:{color:ue.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},button:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:16},separator:{width:Y.hairlineWidth,height:20,backgroundColor:ue.color.separator}});import{ClockToolIcon as zi,CLOCK_TOOL_ICON_COLOR as Ni,createToolFactory as Li,defineToolPreset as ji}from"@buoy-gg/shared-ui/web";import{useEffect as yr,useState as Mi}from"react";import{reloadApp as _i}from"@buoy-gg/shared-ui/web";import{createSyncAdapter as Fi}from"@buoy-gg/shared-ui/web";import{dispatchToolAction as gr}from"@buoy-gg/shared-ui/web";var br="No sign-in token seen yet. Use the app so it sends a signed-in request, then try again. Tokens are read from the Network tool's captured requests.";function kr(e){ve();let t=ui(e);if(!t)throw new Error(e?`No token "${e}". Read getState for the current ids.`:br);return t}function xr(e,t=1e4){let r=kr(e);if(r.expiresAt===void 0)throw new Error(r.neverExpires?`${r.label} for ${r.host} is ${r.hint??"a key"} and never expires.`:`${r.label} for ${r.host} (${r.formatLabel}) has no expiry Buoy can read. Use failNextRequest to test the refresh instead.`);let n=r.expiresAt-Math.max(0,t)-Xt();if(n<=0)throw new Error(`${r.label} for ${r.host} has already expired on the app's clock. Go back to real time, or use failNextRequest.`);return tt(n),Zt("expiry",r.id),R()}async function vr(e,t=401,r=1){let n=kr(e),o=di(n.id);if(!o)throw new Error(br);await wr();let i=t===403?403:401,s=n.location==="authorization"||n.location==="header"?{urlPattern:`${o}/*`,requireHeader:n.name.toLowerCase()}:n.location==="query"?{urlPattern:`${o}/*${n.name}=*`}:{urlPattern:`${o}/*`},a=await gr("network","upsertOverrideRule",{name:"Clock: force a token refresh",...s,kind:"respond",status:i,headers:{"content-type":"application/json","www-authenticate":'Bearer error="invalid_token", error_description="The access token expired"'},body:JSON.stringify({error:"invalid_token",error_description:"The access token expired (forced by Buoy Clock to test token refresh)"}),times:Math.max(1,Math.min(10,Math.round(r)))}).catch(l=>{let c=l instanceof Error?l.message:String(l);throw new Error(c.includes("Unknown tool")?"Failing a request needs the Network tool (@buoy-gg/network).":c)});if(!a?.ok||!a.rule)throw new Error(a?.error??"Network did not add the override.");return Zt("401",n.id,a.rule.id),R()}async function wr(){let e=we().check;e?.ruleId&&e.forcedAt===void 0&&await gr("network","deleteOverrideRule",{id:e.ruleId}).catch(()=>{})}async function Ar(){return await wr(),ai(),R()}function Z(e){return e&&typeof e=="object"?e:{}}function at(e,...t){for(let r of t){let n=e[r];if(typeof n=="string"||typeof n=="number")return n}}function fe(e,t){let r=e[t];if(typeof r=="boolean")return r;if(r==="true")return true;if(r==="false")return false}var Tr=Fi({version:1,getSnapshot(){return R()},subscribe(e){return ce(e)},actions:{getState(){return ve(),R()},setTime(e){let t=Z(e),r=at(t,"time","at","date","iso");if(r===void 0)throw new Error('setTime needs `time`: ISO 8601 ("2026-12-31T23:59:50"), epoch ms, or relative ("+1d").');return rr(r,fe(t,"freeze")??false)},shift(e){let t=Z(e),r=at(t,"by","ms","duration","delta");if(r===void 0)throw new Error('shift needs `by`: a duration like "+1d", "-2h30m", "90s", or ms.');return tt(r,fe(t,"fireTimers"))},freeze(e){return rt(at(Z(e),"time","at"))},resume(){return nt()},setRate(e){let t=Z(e),r=Number(t.rate??t.speed);if(!Number.isFinite(r))throw new Error("setRate needs a numeric `rate` (1 = normal speed).");return nr(r)},reset(){return ot()},updateSettings(e){let t=Z(e);return or({persist:fe(t,"persist"),showChip:fe(t,"showChip"),fireTimersOnJump:fe(t,"fireTimersOnJump")})},jumpToTokenExpiry(e){let t=Z(e),r=typeof t.token=="string"?t.token:typeof t.id=="string"?t.id:void 0,n=Number(t.leadMs??t.lead??1e4);return xr(r,Number.isFinite(n)?n:1e4)},failNextRequest(e){let t=Z(e),r=typeof t.token=="string"?t.token:typeof t.id=="string"?t.id:void 0,n=Number(t.status??401),o=Number(t.times??1);return vr(r,n,Number.isFinite(o)?o:1)},stopTokenCheck(){return Ar()},async holdForReload(){return await er(),R()}}});import{useState as $e}from"react";import{ChevronRight as Bi,NightButton as Ui,NightCard as Ie,NightChip as Hi,NightFootnote as lt,NightRows as ct,NightSectionLabel as Sr,NightSegmented as Vi,NightSwitch as $r,ProBadge as Wi,ProUpgradeModal as Ji,getUseIsPro as qi,monoFont as Ki,night as g,useSafeAreaInsets as Zi}from"@buoy-gg/shared-ui/web";import{ChevronRight as Yi,NightButton as Ir,NightCard as Gi,NightFootnote as Xi,NightRows as Qi,NightSectionLabel as es,ProBadge as ts,night as x}from"@buoy-gg/shared-ui/web";import{jsx as A,jsxs as j}from"react/jsx-runtime";var W=e=>te(Math.abs(e),{signed:false});function rs({snapshot:e,run:t,openId:r,onToggle:n,isPro:o,onUpgrade:i}){let s=e.tokens;return j(m,{children:[A(es,{children:s.tokens.length>1?"Sign-in tokens":"Sign-in token"}),A(Gi,{children:j(Qi,{children:[s.tokens.map((a,l)=>j(m,{children:[A(ns,{token:a,snapshot:e,index:l,open:r===a.id,onPress:()=>n(a.id)}),r===a.id?A(os,{token:a,snapshot:e,run:o?t:()=>i("Sign-in token tests"),isPro:o}):null]},a.id)),s.tokens.length===0?A(m,{style:y.row,testID:"clock-token-empty",children:A(w,{style:y.emptyText,children:s.available?"No token seen yet":"Needs the Network tool"})},"empty"):null]})}),A(ss,{check:s.check,tokens:s.tokens,snapshot:e,run:t}),s.tokens.length===0?A(Xi,{children:s.available?"Tokens show up here when the app sends a signed-in request.":"Install @buoy-gg/network so the Clock tool can read the app's tokens."}):null]})}function ns({token:e,snapshot:t,index:r,open:n,onPress:o}){let{virtual:i}=V(t,1e3),s=e.expiresAt!==void 0?e.expiresAt-i:void 0,a=e.neverExpires?"No expiry":s===void 0?"Unknown":s<=0?"Expired":W(s),l=s!==void 0&&s<=0?y.valueDanger:s!==void 0&&s<6e4?y.valueWarning:null;return j(B,{testID:`clock-token-${r}`,accessibilityRole:"button",accessibilityLabel:`${e.label} for ${e.host}: ${s!==void 0&&s>0?`expires in ${a}`:a}`,accessibilityState:{expanded:n},activeOpacity:.6,onPress:o,style:y.row,children:[j(m,{style:y.rowText,children:[A(w,{style:y.rowTitle,numberOfLines:1,children:e.label}),A(w,{style:y.rowSubtitle,numberOfLines:1,children:`${e.host} \xB7 ${e.hint??e.formatLabel}`})]}),j(m,{style:y.rowRight,children:[A(w,{style:[y.value,l],testID:`clock-token-${r}-left`,children:a}),A(m,{style:n?y.chevronOpen:null,children:A(Yi,{size:16,color:x.color.textTertiary})})]})]})}function os({token:e,snapshot:t,run:r,isPro:n}){let{virtual:o,real:i}=V(t,1e3),s=is(e,o,i),a=e.expiresAt!==void 0&&e.expiresAt-o>1e4;return j(m,{style:y.detail,testID:"clock-token-detail",children:[s.map(l=>A(w,{style:[y.detailLine,l.tone==="warn"?y.warn:null,l.tone==="bad"?y.bad:null],children:l.text},l.text)),j(m,{style:y.buttons,children:[A(m,{style:y.button,children:A(Ir,{label:"Jump to Expiry",testID:"clock-token-jump",accessibilityLabel:"Jump the app's clock to ten seconds before this token expires",size:"md",disabled:!a,onPress:()=>r("jumpToTokenExpiry",{token:e.id})})}),A(m,{style:y.button,children:A(Ir,{label:"Fail Next Request",testID:"clock-token-fail",accessibilityLabel:"Answer the app's next request to this API with 401",size:"md",onPress:()=>r("failNextRequest",{token:e.id})})})]}),n?null:j(m,{style:y.proLine,children:[A(ts,{}),A(w,{style:[y.hint,y.proHint],children:"Jump to Expiry and Fail Next Request are part of Buoy Pro."})]}),A(w,{style:y.hint,children:a||e.expiresAt===void 0?"Jump tests an app that refreshes before expiry. Fail tests one that refreshes after a 401.":"This token has already expired on the app's clock. Use Real Time to jump to it again."})]})}function is(e,t,r){let n=[];if(e.expiresAt!==void 0){if(n.push({text:`Expires ${Te(e.expiresAt)}`}),e.lifetimeMs!==void 0&&e.lifetimeMs>0&&n.push({text:`Lasts ${W(e.lifetimeMs)}${e.expirySource?`, from ${e.expirySource}`:""}`}),e.serverExpiresAt!==void 0){let o=e.expiresAt-t,i=e.serverExpiresAt-r;Math.abs(o-i)>2e3&&n.push({text:i>0?`The server still accepts it for ${W(i)}`:`The server stopped accepting it ${W(i)} ago`})}}else e.neverExpires||n.push({text:"The token doesn't say when it expires, and no login response did either."});if(e.hint&&n.push({text:e.formatLabel}),e.issuedBy&&n.push({text:`Issued by ${e.issuedBy}`}),e.refresh?.expiresAt!==void 0){let o=e.refresh.expiresAt-t;n.push({text:o>0?`Refresh token expires in ${W(o)}`:"Refresh token expired"})}return e.refreshes>0&&e.lastRefreshAt!==void 0&&n.push({text:`Refreshed ${e.refreshes===1?"once":`${e.refreshes} times`}, last at ${de(e.lastRefreshAt)}`}),n.push({text:`Sent with ${e.uses} request${e.uses===1?"":"s"}`}),e.expiredSends>0&&n.push({text:`Sent ${e.expiredSends} time${e.expiredSends===1?"":"s"} after it expired on the app's clock`,tone:"warn"}),e.rejected>0&&n.push({text:`Rejected by the server ${e.rejected} time${e.rejected===1?"":"s"}`,tone:"warn"}),e.looping&&n.push({text:`Refresh loop: ${e.recentRefreshes} new tokens in 20s`,tone:"bad"}),n}function ss({check:e,tokens:t,snapshot:r,run:n}){let{virtual:o,real:i}=V(r,1e3);if(!e)return null;let s=t.find(c=>c.id===e.tokenId),{text:a,tone:l}=as(e,s,o,i);return j(m,{style:y.check,children:[A(w,{style:[y.checkText,l==="good"?y.good:null,l==="bad"?y.bad:null,l==="warn"?y.warn:null],testID:"clock-token-check",children:a}),A(B,{testID:"clock-token-check-done",accessibilityRole:"button",accessibilityLabel:e.status==="waiting"?"Stop the refresh check":"Dismiss",onPress:()=>n("stopTokenCheck"),hitSlop:{top:8,bottom:8,left:8,right:8},children:A(w,{style:y.checkDone,children:e.status==="waiting"?"Stop":"Done"})})]})}function as(e,t,r,n){if(e.status==="loop")return{text:`Refresh loop: ${e.newTokens} new tokens since the check started. The new tokens may already look expired to the app's clock.`,tone:"bad"};if(e.status==="refreshed"){let a=e.newIssuedBy?` by ${e.newIssuedBy}`:"",l=e.newLifetimeMs&&e.newLifetimeMs>0?`. The new token lasts ${W(e.newLifetimeMs)}`:"",c=e.kind==="401"&&e.forcedAt!==void 0?"The app got the 401 and refreshed":"Refreshed",d=e.failedRefreshes>0?` ${e.failedRefreshes===1?"One token request":`${e.failedRefreshes} token requests`} failed first (${e.lastRefreshError}).`:"";return{text:`${c} at ${de(e.refreshedAt??n)}${a}${l}.${d}`,tone:d?"warn":"good"}}let o=n-e.startedAt,i=(e.staleAfterFailure>0?` It sent the old token again ${e.staleAfterFailure} time${e.staleAfterFailure===1?"":"s"}.`:"")+(e.failedRefreshes>0?` Its token request failed (${e.lastRefreshError}).`:"");if(o>6e4)return{text:`No new token after ${W(o)}. The app may refresh on its next action, or not at all.${i}`,tone:"warn"};if(e.kind==="401")return e.forcedAt===void 0?{text:`The next request to ${t?.host??"the API"} will get a 401. Use the app to send one.`}:{text:`The app got the 401. Waiting for a new token\u2026${i}`,tone:i?"warn":void 0};let s=t?.expiresAt!==void 0?t.expiresAt-r:void 0;return s!==void 0&&s>0?{text:`Expires in ${W(s)} on the app's clock. Waiting for a new token\u2026`}:{text:"Expired on the app's clock. Waiting for the app's next request\u2026"}}var y=Y.create({row:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12,minHeight:56,paddingHorizontal:x.rowPadH,paddingVertical:10},rowText:{flex:1,minWidth:0},rowTitle:{color:x.color.text,fontSize:x.font.row},rowSubtitle:{color:x.color.textTertiary,fontSize:x.font.caption,marginTop:2},rowRight:{flexDirection:"row",alignItems:"center",gap:6},value:{color:x.color.textSecondary,fontSize:x.font.row,fontVariant:["tabular-nums"]},valueWarning:{color:x.color.warning},valueDanger:{color:x.color.danger},chevronOpen:{transform:[{rotate:"90deg"}]},emptyText:{color:x.color.textSecondary,fontSize:x.font.row},detail:{paddingHorizontal:x.rowPadH,paddingBottom:14,gap:4},detailLine:{color:x.color.textSecondary,fontSize:x.font.caption},buttons:{flexDirection:"row",gap:8,marginTop:8},button:{flex:1},hint:{color:x.color.textTertiary,fontSize:x.font.caption,marginTop:6},proLine:{flexDirection:"row",alignItems:"center",gap:8,marginTop:6},proHint:{marginTop:0,flexShrink:1},check:{flexDirection:"row",alignItems:"flex-start",gap:12,marginTop:8,marginHorizontal:x.labelInset},checkText:{flex:1,color:x.color.textSecondary,fontSize:x.font.caption,lineHeight:18},checkDone:{color:x.color.accent,fontSize:x.font.caption,fontWeight:"600"},good:{color:x.color.accent},warn:{color:x.color.warning},bad:{color:x.color.danger}});import{jsx as u,jsxs as $}from"react/jsx-runtime";var Rr="#F59E0B";function Cr({snapshot:e,onAction:t,onReload:r}){let n=Zi({minBottom:16}),[o,i]=$e(null),[s,a]=$e(null),l=qi()(),[c,d]=$e(null),v=k=>d(k),b=(k,C)=>{i(null),t(k,C).catch(L=>{i(L instanceof Error?L.message:String(L))})},I=k=>a(C=>C===k?null:k);return e?$(xt,{style:h.fill,contentContainerStyle:[h.content,{paddingBottom:n.bottom}],testID:"clock-scroll",keyboardShouldPersistTaps:"handled",children:[u(ls,{snapshot:e}),o?u(lt,{tone:"danger",centered:true,children:u(w,{testID:"clock-error",children:o})}):null,$(m,{children:[u(Sr,{children:"Jump ahead"}),u(us,{run:b})]}),$(m,{children:[u(Ie,{children:$(ct,{children:[$(m,{children:[u(Dr,{title:"Date & Time",testID:"clock-date-row",open:s==="date",onPress:()=>I("date"),value:u(ds,{snapshot:e})}),s==="date"?u(ps,{snapshot:e,run:b,onDone:()=>a(null)}):null]},"date"),$(m,{style:h.row,children:[u(ut,{title:"Freeze",isPro:l}),u($r,{value:e.mode==="frozen",testID:"clock-freeze",accessibilityLabel:"Freeze the clock",onValueChange:k=>k&&!l?v("Freeze"):b(k?"freeze":"resume")})]},"freeze"),$(m,{children:[u(Dr,{title:"Speed",pro:!l,testID:"clock-speed-row",open:s==="speed",onPress:()=>l?I("speed"):v("Speed"),value:u(w,{style:h.rowValue,children:zr(e)})}),s==="speed"?u(hs,{snapshot:e,run:b}):null]},"speed")]})}),u(lt,{children:"Only this app's clock changes. Screens pick up the new time when they next render, or all at once when you reload."})]}),e.tokens?u(rs,{snapshot:e,run:b,openId:s,onToggle:I,isPro:l,onUpgrade:v}):null,u(Ie,{children:$(ct,{children:[r?u(Pr,{label:"Reload App",testID:"clock-reload",onPress:r},"reload"):null,u(Pr,{label:"Use Real Time",accessibilityLabel:"Reset to real time",testID:"clock-reset",destructive:true,disabled:e.mode==="real",onPress:()=>b("reset")},"reset")]})}),$(m,{children:[u(Sr,{children:"Options"}),u(ys,{settings:e.settings,run:b,isPro:l,onUpgrade:v})]}),u(Ji,{visible:c!==null&&!l,onClose:()=>d(null),featureName:c??void 0})]}):u(m,{style:h.waiting,testID:"clock-waiting",children:u(lt,{centered:true,children:"Waiting for the app's clock\u2026"})})}function ut({title:e,isPro:t}){return $(m,{style:h.titleRow,children:[u(w,{style:h.rowTitle,children:e}),t?null:u(Wi,{})]})}function ls({snapshot:e}){let{virtual:t,real:r}=V(e),n=fr(e),o=e.mode!=="real",i=Ci(t-r),s=e.mode==="frozen"?" \xB7 Frozen":o&&e.rate!==1?` \xB7 ${zr(e)}`:"";return $(m,{style:h.hero,children:[u(w,{style:[h.heroTime,o?h.heroTimeActive:null],testID:"clock-hero-time",accessibilityLabel:`App clock ${de(t)}`,children:de(t)}),u(w,{style:h.heroDate,testID:"clock-hero-date",children:Ri(t)}),u(m,{testID:"clock-status",accessibilityLabel:`Clock status: ${n.label}${o?`, ${i}`:""}`,children:u(w,{style:[h.heroStatus,o?h.heroStatusActive:null],testID:"clock-offset",children:o?`${i}${s}`:"Real time"})})]})}var Or=36e5,dt=24*Or,cs=[{ms:Or,unit:"hour"},{ms:dt,unit:"day"},{ms:7*dt,unit:"week"},{ms:30*dt,unit:"month"}];function us({run:e}){return u(Ie,{style:h.jumpBar,children:cs.map((t,r)=>$(B,{testID:Oi(t.ms),accessibilityRole:"button",accessibilityLabel:`Jump ahead one ${t.unit}`,activeOpacity:.6,onPress:()=>e("shift",{by:t.ms}),style:[h.jump,r>0?h.jumpDivider:null],children:[u(w,{style:h.jumpAmount,children:"+1"}),u(w,{style:h.jumpUnit,children:t.unit})]},t.unit))})}function Dr({title:e,pro:t,value:r,open:n,onPress:o,testID:i}){return $(B,{testID:i,accessibilityRole:"button",accessibilityLabel:e,accessibilityState:{expanded:n},activeOpacity:.6,onPress:o,style:h.row,children:[u(ut,{title:e,isPro:!t}),$(m,{style:h.rowRight,children:[r,u(m,{style:n?h.chevronOpen:null,children:u(Bi,{size:16,color:g.color.textTertiary})})]})]})}function ds({snapshot:e}){let{virtual:t}=V(e,1e3);return u(w,{style:[h.rowValue,h.tabular],numberOfLines:1,children:Te(t,false)})}function Pr({label:e,onPress:t,testID:r,destructive:n,disabled:o,accessibilityLabel:i}){return u(B,{testID:r,accessibilityRole:"button",accessibilityLabel:i??e,accessibilityState:{disabled:!!o},activeOpacity:.6,disabled:o,onPress:t,style:[h.row,o?h.rowDisabled:null],children:u(w,{style:[h.actionLabel,n?h.actionDestructive:null],children:e})})}var fs=At.filter(e=>["midnight","month-end","year-end"].includes(e.id));function ps({snapshot:e,run:t,onDone:r}){let[n,o]=$e(""),{virtual:i}=V(e,1e3),s=()=>n.trim()||dr(i),a=e.mode==="frozen",l=c=>{t("setTime",{time:c,freeze:a}),r()};return $(m,{style:h.editor,children:[$(m,{style:h.inputRow,children:[u(kt,{testID:"clock-time-input",accessibilityLabel:"Date and time",value:n,onChangeText:o,placeholder:dr(i),placeholderTextColor:g.color.placeholder,autoCapitalize:"none",autoCorrect:false,returnKeyType:"done",onSubmitEditing:()=>l(s()),style:h.input}),u(Ui,{label:"Set",testID:"clock-time-apply",accessibilityLabel:"Set this time",size:"md",variant:"primary",fullWidth:false,onPress:()=>l(s())})]}),u(w,{style:h.hint,children:"Year-month-day and 24-hour time, or +3d, -2h"}),u(m,{style:h.presets,children:fs.map(c=>u(Hi,{label:c.label,testID:`clock-preset-${c.id}`,onPress:()=>l(c.at(i,T))},c.id))})]})}var Er=[{key:"1",label:"Normal"},{key:"10",label:"10\xD7"},{key:"60",label:"1 min/s"},{key:"3600",label:"1 hr/s"}];function zr(e){return e.mode==="real"||e.rate===1?"Normal":Er.find(t=>Number(t.key)===e.rate)?.label??Tt(e.rate)}function hs({snapshot:e,run:t}){let r=e.mode==="real"?"1":String(e.rate);return $(m,{style:h.editor,children:[u(m,{style:h.segmentRow,children:u(Vi,{tabs:Er,activeKey:r,size:"sm",testIDPrefix:"clock-speed",onChange:n=>t("setRate",{rate:Number(n)})})}),u(w,{style:h.hint,children:"Taps, animations and timers keep real speed."})]})}var ms=[{key:"showChip",title:"Show Floating Clock"},{key:"persist",title:"Keep After Reload",pro:true}];function ys({settings:e,run:t,isPro:r,onUpgrade:n}){return u(Ie,{children:u(ct,{children:ms.map(o=>{let i=!!o.pro&&!r;return $(m,{style:h.row,children:[u(ut,{title:o.title,isPro:!i}),u($r,{value:i?false:e[o.key],testID:`clock-setting-${o.key}`,accessibilityLabel:o.title,onValueChange:s=>i?n(o.title):t("updateSettings",{[o.key]:s})})]},o.key)})})})}var h=Y.create({fill:{flex:1},content:{paddingHorizontal:g.gutter,paddingTop:8,gap:g.groupGap},waiting:{flex:1,alignItems:"center",justifyContent:"center",padding:24},hero:{alignItems:"center",paddingTop:12},heroTime:{color:g.color.text,fontSize:56,fontWeight:"200",fontVariant:["tabular-nums"],letterSpacing:1},heroTimeActive:{color:Rr},heroDate:{color:g.color.text,fontSize:17,fontWeight:"500",marginTop:2},heroStatus:{color:g.color.textTertiary,fontSize:g.font.caption,fontWeight:"500",marginTop:6},heroStatusActive:{color:g.color.textSecondary},jumpBar:{flexDirection:"row"},jump:{flex:1,alignItems:"center",paddingVertical:12},jumpDivider:{borderLeftWidth:Y.hairlineWidth,borderLeftColor:g.color.separator},jumpAmount:{color:Rr,fontSize:17,fontWeight:"600",fontVariant:["tabular-nums"]},jumpUnit:{color:g.color.textSecondary,fontSize:g.font.caption,marginTop:1},row:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12,minHeight:50,paddingHorizontal:g.rowPadH,paddingVertical:10},rowDisabled:{opacity:.4},rowTitle:{color:g.color.text,fontSize:g.font.row},titleRow:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},rowRight:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},rowValue:{color:g.color.textSecondary,fontSize:g.font.row},tabular:{fontVariant:["tabular-nums"]},chevronOpen:{transform:[{rotate:"90deg"}]},actionLabel:{color:g.color.accent,fontSize:g.font.row},actionDestructive:{color:g.color.danger},editor:{paddingHorizontal:g.rowPadH,paddingBottom:14,gap:10},inputRow:{flexDirection:"row",alignItems:"center",gap:8},input:{flex:1,color:g.color.text,fontFamily:Ki,fontSize:15,backgroundColor:g.color.bg,borderRadius:g.radius.input,borderWidth:1,borderColor:g.color.border,paddingHorizontal:12,paddingVertical:8},hint:{color:g.color.textTertiary,fontSize:g.font.caption},presets:{flexDirection:"row",flexWrap:"wrap",gap:6},segmentRow:{flexDirection:"row"}});import{jsx as gs}from"react/jsx-runtime";var bs=Tr.actions;async function ks(e,t){let r=bs[e];if(!r)throw new Error(`Unknown clock action: ${e}`);return r(t)}function xs(){er().then(()=>_i("auto","buoy clock")).catch(()=>{})}function Nr(){yr(()=>{it(),ve()},[]);let[e,t]=Mi(R);return yr(()=>ce(()=>t(R())),[]),gs(Cr,{snapshot:e,onAction:ks,onReload:xs})}import{jsx as vs}from"react/jsx-runtime";var Lr=ji({id:"clock",name:"CLOCK",description:"Travel to any date, freeze or speed up the app's clock",slot:"both",color:Ni,icon:({size:e,color:t})=>vs(zi,{size:e,color:t}),component:Nr,modal:{subtitle:"override the app's date & time"}}),ws=Li(Lr);import{ClockToolIcon as As,CLOCK_TOOL_ICON_COLOR as Ts}from"@buoy-gg/shared-ui/web";var Ss=typeof navigator<"u"&&navigator.product==="ReactNative";Ss&&(lo(bt),Ei(),typeof yt<"u"&&yt&&it());export{Se as CLOCK_CHIP_ID,Ts as CLOCK_TOOL_ICON_COLOR,Nr as ClockBody,mr as ClockChip,As as ClockToolIcon,Cr as ClockToolView,At as TIME_PRESETS,it as bootClock,Tr as clockSyncAdapter,Lr as clockToolPreset,ws as createClockTool,vr as failNextRequest,te as formatDuration,rt as freeze,R as getClockSnapshot,we as getTokenReport,be as inspectToken,Qt as isClockOverridden,xr as jumpToTokenExpiry,Pi as openClockChip,Ee as parseDuration,mi as previewJump,S as realNow,ot as reset,nt as resume,nr as setRate,rr as setTime,tt as shift,ve as startTokenWatch,Ar as stopTokenCheck,ce as subscribeClock,H as tokenFingerprint,or as updateSettings,V as useLiveClock,Xt as virtualNow,je as withRealClock};
|
|
1
|
+
"use client";var ht=Object.defineProperty;var Fr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var Ur=Object.prototype.hasOwnProperty;var Hr=(e,t)=>{for(var r in t)ht(e,r,{get:t[r],enumerable:true})},mt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Br(t))!Ur.call(e,o)&&o!==r&&ht(e,o,{get:()=>t[o],enumerable:!(n=Fr(t,o))||n.enumerable});return e},Vr=(e,t,r)=>(mt(e,t,"default"),r&&mt(r,t,"default"));var gt=process.env.NODE_ENV!=="production";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);var yt={};Hr(yt,{AccessibilityInfo:()=>Kr,ActivityIndicator:()=>Un,Alert:()=>Wn,Animated:()=>bt,AppRegistry:()=>Yr,AppState:()=>Gr,Appearance:()=>Zr,BackHandler:()=>Xr,Button:()=>Hn,CheckBox:()=>mn,Clipboard:()=>Qr,DeviceEventEmitter:()=>Dn,Dimensions:()=>en,Easing:()=>tn,FlatList:()=>gn,I18nManager:()=>rn,Image:()=>yn,ImageBackground:()=>bn,InteractionManager:()=>on,Keyboard:()=>nn,KeyboardAvoidingView:()=>kn,LayoutAnimation:()=>sn,Linking:()=>an,LogBox:()=>On,Modal:()=>Fn,NativeEventEmitter:()=>ln,NativeModules:()=>qr,PanResponder:()=>cn,Picker:()=>xn,PixelRatio:()=>un,Platform:()=>dn,Pressable:()=>_n,ProgressBar:()=>vn,RefreshControl:()=>wn,SafeAreaView:()=>Tn,ScrollView:()=>xt,SectionList:()=>An,Share:()=>fn,StatusBar:()=>Sn,StyleSheet:()=>Y,Switch:()=>Bn,Text:()=>w,TextInput:()=>kt,Touchable:()=>$n,TouchableHighlight:()=>jn,TouchableNativeFeedback:()=>In,TouchableOpacity:()=>B,TouchableWithoutFeedback:()=>Mn,UIManager:()=>pn,Vibration:()=>hn,View:()=>m,VirtualizedList:()=>Rn,YellowBox:()=>Cn,findNodeHandle:()=>Vn,unstable_createElement:()=>Jr,useColorScheme:()=>Pn,useLocaleContext:()=>En,useWindowDimensions:()=>zn});Vr(yt,Wr);import*as Wr from"react-native-web";import{unstable_createElement as Jr,NativeModules as qr,AccessibilityInfo as Kr,Animated as bt,Appearance as Zr,AppRegistry as Yr,AppState as Gr,BackHandler as Xr,Clipboard as Qr,Dimensions as en,Easing as tn,I18nManager as rn,Keyboard as nn,InteractionManager as on,LayoutAnimation as sn,Linking as an,NativeEventEmitter as ln,PanResponder as cn,PixelRatio as un,Platform as dn,Share as fn,StyleSheet as Y,UIManager as pn,Vibration as hn,CheckBox as mn,FlatList as gn,Image as yn,ImageBackground as bn,KeyboardAvoidingView as kn,Picker as xn,ProgressBar as vn,RefreshControl as wn,SafeAreaView as Tn,SectionList as An,StatusBar as Sn,Touchable as $n,TouchableNativeFeedback as In,VirtualizedList as Rn,YellowBox as Cn,LogBox as On,DeviceEventEmitter as Dn,useColorScheme as Pn,useLocaleContext as En,useWindowDimensions as zn}from"react-native-web";import*as O from"react-native-web";import{createElement as Nn,forwardRef as Ln}from"react";function P(e){let t=Ln((n,o)=>{let{accessibilityState:i,accessibilityValue:s,...a}=n;for(let l of["busy","checked","disabled","expanded","selected"])i?.[l]!==void 0&&a[`aria-${l}`]===void 0&&(a[`aria-${l}`]=i[l]);for(let[l,c]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))s?.[l]!==void 0&&a[`aria-${c}`]===void 0&&(a[`aria-${c}`]=s[l]);return Nn(e,{...a,ref:o})}),r=e.State;return r&&Object.assign(t,{State:r}),t.displayName=e.displayName??e.name??"NativeWebView",t}var m=P(O.View),w=P(O.Text),kt=P(O.TextInput),B=P(O.TouchableOpacity),jn=P(O.TouchableHighlight),Mn=P(O.TouchableWithoutFeedback),_n=P(O.Pressable),xt=P(O.ScrollView),Fn=P(O.Modal),Bn=P(O.Switch),Un=P(O.ActivityIndicator),Hn=P(O.Button),Vn=O.findNodeHandle,Wn={alert(e,t,r,n){if(typeof document>"u")return;let o=document.createElement("dialog");o.dataset.buoyRoot="",o.setAttribute("aria-label",e),o.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",o.appendChild(i),t){let c=document.createElement("p");c.textContent=t,c.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",o.appendChild(c)}let s=document.createElement("div");s.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let a=r?.length?r:[{text:"OK"}],l=()=>{o.close?.(),o.remove()};for(let c of a){let d=document.createElement("button");d.type="button",d.textContent=c.text??"OK",d.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${c.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,d.onclick=()=>{l(),c.onPress?.()},s.appendChild(d)}o.addEventListener("cancel",c=>{c.preventDefault(),n?.cancelable!==false&&(l(),n?.onDismiss?.())}),o.appendChild(s),document.body.appendChild(o),o.showModal?o.showModal():o.setAttribute("open","")}};var Ce=Object.freeze({mode:"real",anchorReal:0,anchorVirtual:0,rate:1}),Oe=.1,De=86400,Jn=864e13;function M(e,t){return e.mode==="real"?t:e.mode==="frozen"?e.anchorVirtual:e.anchorVirtual+(t-e.anchorReal)*e.rate}function qn(e,t){return M(e,t)-t}function G(e){if(!Number.isFinite(e)||Math.abs(e)>Jn)throw new RangeError(`Not a valid time: ${e}`);return Math.round(e)}function Pe(e,t,r,n=false){return{mode:n?"frozen":"running",anchorReal:t,anchorVirtual:G(r),rate:e.mode==="real"?1:e.rate}}function Kn(e,t,r){if(!Number.isFinite(r))throw new RangeError("Jump must be a number of ms");return Pe(e,t,M(e,t)+r,e.mode==="frozen")}function Zn(e,t,r){return Pe(e,t,r??M(e,t),true)}function Yn(e,t){return e.mode!=="frozen"?e:{...e,mode:"running",anchorReal:t}}function Gn(e,t,r){if(!Number.isFinite(r)||r<Oe||r>De)throw new RangeError(`Speed must be between ${Oe}\xD7 and ${De}\xD7`);return e.mode==="real"&&r===1?e:{mode:"running",anchorReal:t,anchorVirtual:G(M(e,t)),rate:r}}function vt(e){let t=e;return!!t&&(t.mode==="real"||t.mode==="running"||t.mode==="frozen")&&Number.isFinite(t.anchorReal)&&Number.isFinite(t.anchorVirtual)&&Number.isFinite(t.rate)&&t.rate>=Oe&&t.rate<=De}var Xn={ms:1,millisecond:1,milliseconds:1,s:1e3,sec:1e3,secs:1e3,second:1e3,seconds:1e3,m:6e4,min:6e4,mins:6e4,minute:6e4,minutes:6e4,h:36e5,hr:36e5,hrs:36e5,hour:36e5,hours:36e5,d:864e5,day:864e5,days:864e5,w:6048e5,wk:6048e5,week:6048e5,weeks:6048e5,mo:30*864e5,month:30*864e5,months:30*864e5,y:365*864e5,yr:365*864e5,year:365*864e5,years:365*864e5};function Ee(e){if(typeof e=="number"){if(!Number.isFinite(e))throw new RangeError("Duration must be finite");return Math.round(e)}let t=String(e).trim().toLowerCase();if(!t)throw new RangeError("Duration is empty");let r=1;if((t[0]==="+"||t[0]==="-"||t[0]==="\u2212")&&(r=t[0]==="+"?1:-1,t=t.slice(1).trim()),/^\d+(\.\d+)?$/.test(t))return r*Math.round(Number(t));let n=/(\d+(?:\.\d+)?)\s*([a-z]+)/g,o=0,i="",s;for(;s=n.exec(t);){let a=Xn[s[2]];if(a===void 0)throw new RangeError(`Unknown time unit "${s[2]}" in "${e}"`);o+=Number(s[1])*a,i+=s[0]}if(!i||i.replace(/\s/g,"")!==t.replace(/[\s,]/g,""))throw new RangeError(`Could not read "${e}" as a duration. Try "+1d", "-2h30m" or "90s".`);return r*Math.round(o)}function te(e,{signed:t=true}={}){let r=e<0?"\u2212":"+",n=Math.abs(Math.round(e));if(n<1e3)return t&&n>0?`${r}${n}ms`:"0s";let o=[],i=[["y",365*864e5],["d",864e5],["h",36e5],["m",6e4],["s",1e3]];for(let[s,a]of i)if(n>=a&&(o.push(`${Math.floor(n/a)}${s}`),n%=a),o.length===2)break;return`${t?r:""}${o.join(" ")}`}function wt(e,t,r){if(typeof e=="number")return G(e);let n=String(e).trim();if(!n)throw new RangeError("Time is empty");if(/^now$/i.test(n))return t;if(/^[+\-−]/.test(n))return G(t+Ee(n));if(/^\d{11,}$/.test(n))return G(Number(n));let o=n.replace(/^(\d{4}-\d{2}-\d{2})[ ](\d{2}:\d{2})/,"$1T$2"),i=r(o);if(!Number.isFinite(i))throw new RangeError(`Could not read "${e}" as a time. Use ISO 8601 like 2026-12-31T23:59:50, epoch ms, or "+1d".`);return G(i)}var ze=1e4,Tt=[{id:"midnight",label:"Before midnight",hint:"23:59:50 tonight",at(e,t){let r=new t(e);return r.setHours(24,0,0,0),r.getTime()-ze}},{id:"month-end",label:"Month end",hint:"last day, 23:59:50",at(e,t){let r=new t(e);return r.setMonth(r.getMonth()+1,1),r.setHours(0,0,0,0),r.getTime()-ze}},{id:"year-end",label:"New Year's Eve",hint:"Dec 31, 23:59:50",at(e,t){let r=new t(e);return r.setFullYear(r.getFullYear()+1,0,1),r.setHours(0,0,0,0),r.getTime()-ze}},{id:"tomorrow-9",label:"Tomorrow 9 AM",hint:"start of a business day",at(e,t){let r=new t(e);return r.setDate(r.getDate()+1),r.setHours(9,0,0,0),r.getTime()}},{id:"leap-day",label:"Leap day",hint:"next Feb 29, 09:00",at(e,t){let r=new t(e).getFullYear();for(;;){let n=r%4===0&&r%100!==0||r%400===0,o=new t(r,1,29,9,0,0,0).getTime();if(n&&o>e)return o;r+=1}}}],Cs=[{label:"1m",ms:6e4},{label:"15m",ms:15*6e4},{label:"1h",ms:36e5},{label:"1d",ms:864e5},{label:"7d",ms:7*864e5},{label:"30d",ms:30*864e5},{label:"1y",ms:365*864e5}];function At(e){return e===3600?"1h/s":e===600?"10m/s":e===60?"1m/s":`${Number.isInteger(e)?e:e.toFixed(1)}\xD7`}var E=globalThis,pe="__buoyClock",A=E.__buoyRealDate??(Date[pe]?Date.__buoyRealDate:Date);E.__buoyRealDate=A;var St=A.now.bind(A);function S(){return St()}E.__buoyRealNow=S;var Ne=null,Le=0;function he(){let e=St();return!Ne||Le>0?e:Ne(e)}function $t(e){Ne=e}function je(e){Le+=1;try{return e()}finally{Le-=1}}E.__buoyWithRealClock=je;function _(...e){let t=new.target;return t?Reflect.construct(A,e.length===0?[he()]:e,t):new A(he()).toString()}_.prototype=A.prototype;Object.defineProperty(_,"name",{value:"Date"});Object.defineProperty(_,"length",{value:7});Object.defineProperty(_,"now",{value:function(){return he()},writable:true,configurable:true});Object.defineProperty(_,"parse",{value:A.parse,writable:true,configurable:true});Object.defineProperty(_,"UTC",{value:A.UTC,writable:true,configurable:true});Object.defineProperty(_,pe,{value:true});Object.defineProperty(_,"__buoyRealDate",{value:A});var re=_,me=false,ge;function Qn(){return me&&E.Date===re}function eo(){if(E.Date===re){me=true;return}let e=Object.getOwnPropertyDescriptor(E,"Date");Object.defineProperty(E,"Date",{value:re,writable:e?.writable??true,enumerable:e?.enumerable??false,configurable:true}),ge=Object.getOwnPropertyDescriptor(A.prototype,"constructor");try{Object.defineProperty(A.prototype,"constructor",{value:re,writable:true,enumerable:false,configurable:true})}catch{}me=true}function to(){if(E.Date===re){let e=Object.getOwnPropertyDescriptor(E,"Date");Object.defineProperty(E,"Date",{value:A,writable:e?.writable??true,enumerable:e?.enumerable??false,configurable:true})}if(ge){try{Object.defineProperty(A.prototype,"constructor",ge)}catch{}ge=void 0}me=false}var ne=[];function It(e){return function(t,...r){return e.call(this,t===void 0?he():t,...r)}}function ro(){if(ne.length)return;let e=E.Intl?.DateTimeFormat?.prototype;if(e)for(let t of["format","formatToParts"]){let r=Object.getOwnPropertyDescriptor(e,t);if(!(!r||!r.configurable))try{if(typeof r.get=="function"){let n=r.get;Object.defineProperty(e,t,{...r,get(){return It(n.call(this))}})}else if(typeof r.value=="function")Object.defineProperty(e,t,{...r,value:It(r.value)});else continue;ne.push({proto:e,name:t,original:r})}catch{}}}function no(){for(let{proto:e,name:t,original:r}of ne)try{Object.defineProperty(e,t,r)}catch{}ne=[]}function oo(){return ne.length>0}function io(){eo(),ro()}function so(){to(),no()}var Me=false;function ao(e){let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(!Object.prototype.hasOwnProperty.call(t,pe)){for(let r of["start","onUpdate"]){let n=Object.getOwnPropertyDescriptor(t,r);if(n&&typeof n.value=="function"){let o=n.value;t[r]=function(...i){return je(()=>o.apply(this,i))}}}try{Object.defineProperty(t,pe,{value:true})}catch{return}}t=Object.getPrototypeOf(t)}}function lo(e){if(Me)return true;try{let t=e;if(typeof t?.Value!="function")return false;let r=Object.getPrototypeOf(new t.Value(0)),n=r?.animate;return typeof n!="function"?false:(r.animate=function(o,...i){return o&&typeof o=="object"&&ao(o),n.call(this,o,...i)},Me=true,true)}catch{return false}}function co(){return Me}var oe=globalThis,Rt="__buoyClockTimer",z=new Map,J=null,uo={},Ct=0,q=()=>S()+Ct;function fo(e){(J?.setTimeout??setTimeout)(()=>{throw e},0)}function Ot(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function po(){return J!==null}function Dt(){if(J)return true;let{setTimeout:e,clearTimeout:t,setInterval:r,clearInterval:n}=oe;if(typeof e!="function"||typeof t!="function")return false;if(e[Rt])return true;uo={setTimeout:e,clearTimeout:t,setInterval:r,clearInterval:n},J={setTimeout:e.bind(globalThis),clearTimeout:t.bind(globalThis),setInterval:(typeof r=="function"?r:e).bind(globalThis),clearInterval:(typeof n=="function"?n:t).bind(globalThis)};let o=J,i=function(d,v,...b){if(typeof d!="function")return o.setTimeout(d,v,...b);let I=Ot(v),k,C=function(){return z.delete(k),d.apply(this,b)};return k=o.setTimeout(C,v),z.set(k,{kind:"timeout",callback:d,args:b,delay:I,due:q()+I,realHandle:k,run:C}),k},s=function(d,v,...b){if(typeof d!="function")return o.setInterval(d,v,...b);let I=Ot(v),k,C=function(){let L=z.get(k);return L&&(L.due=q()+I),d.apply(this,b)};return k=o.setInterval(C,v),z.set(k,{kind:"interval",callback:d,args:b,delay:I,due:q()+I,realHandle:k,run:C}),k},a=(d,v)=>{let b=z.get(d);return b?(z.delete(d),b.kind==="interval"?o.clearInterval(b.realHandle):o.clearTimeout(b.realHandle)):v(d)},l=function(d){return a(d,o.clearTimeout)},c=function(d){return a(d,o.clearInterval)};globalThis.__buoyRealTimers={setTimeout:o.setTimeout,clearTimeout:l,setInterval:o.setInterval,clearInterval:c};for(let d of[i,s,l,c])Object.defineProperty(d,Rt,{value:true});return oe.setTimeout=i,oe.clearTimeout=l,oe.setInterval=s,oe.clearInterval=c,true}function ho(){let e=q(),t=0,r=0,n=null;for(let o of z.values())if(o.kind==="interval")r+=1;else{t+=1;let i=Math.max(0,o.due-e);(n===null||i<n)&&(n=i)}return{total:t+r,timeouts:t,intervals:r,nextTimeoutInMs:n}}function mo(e){let t=q(),r=0;for(let n of z.values())n.due-t<=e&&(r+=1);return r}function go(e){if(!J||!(e>0))return 0;let t=J;Ct+=e;let r=q(),n=[...z.entries()].filter(([,s])=>s.due<=r).sort((s,a)=>s[1].due-a[1].due),o=0;for(let[s,a]of n)if(z.has(s)){a.kind==="timeout"?(z.delete(s),t.clearTimeout(a.realHandle)):a.due=r+a.delay;try{a.callback(...a.args)}catch(l){fo(l)}o+=1}let i=q();for(let s of z.values())s.kind==="timeout"&&(t.clearTimeout(s.realHandle),s.realHandle=t.setTimeout(s.run,Math.max(0,s.due-i)));return o}import{devToolsStorageKeys as yo,persistentStorage as Pt}from"@buoy-gg/shared-ui/web";var ie={persist:true,showChip:true,fireTimersOnJump:true},bo=2*6e4,Et=yo.clock.state();function ko(e){if(!e)return null;try{let t=JSON.parse(e);if(!t||t.v!==1)return null;let r=t.settings??{},n=t.reload&&vt(t.reload.anchor)&&typeof t.reload.at=="number"?{anchor:t.reload.anchor,at:t.reload.at}:void 0;return{v:1,anchor:vt(t.anchor)?t.anchor:null,...n?{reload:n}:{},settings:{persist:typeof r.persist=="boolean"?r.persist:ie.persist,showChip:typeof r.showChip=="boolean"?r.showChip:ie.showChip,fireTimersOnJump:typeof r.fireTimersOnJump=="boolean"?r.fireTimersOnJump:ie.fireTimersOnJump}}}catch{return null}}async function xo(){try{return ko(await Pt.getItem(Et))}catch{return null}}var _e=Promise.resolve();function Fe(e){let t=JSON.stringify(e);return _e=_e.then(()=>Pt.setItem(Et,t)).catch(()=>{}),_e.then(()=>{})}import{dispatchToolAction as vo}from"@buoy-gg/shared-ui/web";import{loadToolModule as wo}from"@buoy-gg/shared-ui/web/utils";var zt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ye={};for(let e=0;e<zt.length;e++)ye[zt[e]]=e;ye["-"]=62;ye._=63;function Be(e){let t=e.replace(/=+$/,""),r=[],n=0,o=0;for(let i=0;i<t.length;i++){let s=ye[t[i]];if(s===void 0)return null;n=n<<6|s,o+=6,o>=8&&(o-=8,r.push(n>>o&255))}return r}function To(e){let t="";for(let r=0;r<e.length;){let n=e[r],o,i;if(n<128)o=n,i=0;else if(n>=192&&n<224)o=n&31,i=1;else if(n>=224&&n<240)o=n&15,i=2;else if(n>=240&&n<248)o=n&7,i=3;else return null;for(let s=1;s<=i;s++){let a=e[r+s];if(a===void 0||(a&192)!==128)return null;o=o<<6|a&63}t+=String.fromCodePoint(o),r+=i+1}return t}function Ue(e){let t=Be(e);return t?Nt(t):null}function Nt(e){let t=To(e);if(!t||t[0]!=="{")return null;try{let r=JSON.parse(t);return r&&typeof r=="object"&&!Array.isArray(r)?r:null}catch{return null}}function He(e){let t=typeof e=="string"&&e.trim()!==""?Number(e):e;return typeof t=="number"&&Number.isFinite(t)&&t>0?t*1e3:void 0}function se(e,t){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e<1e11?e*1e3:e;if(typeof e=="string"&&e.trim()!==""){let r=e.trim();if(/^\d+(\.\d+)?$/.test(r))return se(Number(r),t);let n=t(r);return Number.isFinite(n)?n:void 0}}function Ao(e){let t=typeof e=="string"&&/^\d+(\.\d+)?$/.test(e.trim())?Number(e):e;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:void 0}var So=/^[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*$/,$o=/^[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]{2,}\.[A-Za-z0-9_-]*$/,Lt=/^v([1-4])\.(local|public)\.([A-Za-z0-9_-]+)(?:\.([A-Za-z0-9_-]+))?$/,Io={1:256,2:64,3:96,4:64};function U(e){if(typeof e=="string"&&e)return e;if(Array.isArray(e)){let t=e.filter(r=>typeof r=="string");return t.length?t.join(", "):void 0}}function Ro(e,t){let r=e.iss??"",n=e.use;if(r.includes("securetoken.google.com"))return"Firebase ID token";if(r.includes("firebaseappcheck"))return"Firebase App Check token";if(r.includes("cognito-idp"))return n?`Cognito ${n} token`:"Cognito token";if(r.includes("appleid.apple.com"))return"Sign in with Apple token";if(r.includes("accounts.google.com"))return"Google ID token";if(r.includes(".auth0.com")||r.includes("auth0"))return"Auth0 token";if(r.includes("clerk"))return"Clerk session token";if(r.includes("supabase")||r.includes("/auth/v1"))return"Supabase access token";if(r.includes("okta"))return"Okta token";if(r.includes("/realms/"))return"Keycloak token";if(r.includes("login.microsoftonline.com")||r.includes("sts.windows.net"))return"Microsoft Entra token";let o=typeof t?.typ=="string"?t.typ.toLowerCase():"";if(o==="at+jwt"||o==="application/at+jwt")return"OAuth access token"}function Co(e,t){let r={iss:U(e.iss),aud:U(e.aud),sub:U(e.sub),scope:U(e.scope??e.scp),use:U(e.token_use)},n=He(e.exp);return{claims:r,issuedAt:He(e.iat),notBefore:He(e.nbf),expiresAt:n,expirySource:n?t:void 0}}function Oo(e){let[t,r]=e.split("."),n=Ue(t);if(!n||typeof n.alg!="string"&&typeof n.typ!="string")return null;let o=Ue(r);if(!o)return null;let i=typeof n.alg=="string"?n.alg:void 0,s=Co(o,"exp claim");return s.claims.alg=i,!s.claims.use&&typeof n.typ=="string"&&n.typ.toUpperCase()!=="JWT"&&(s.claims.use=n.typ),{format:"jwt",formatLabel:i?`JWT \xB7 ${i}`:"JWT",hint:Ro(s.claims,n),...s}}function Do(e){let t=Ue(e.split(".")[0]);return!t||typeof t.enc!="string"?null:{format:"jwe",formatLabel:"Encrypted JWT",claims:{alg:typeof t.alg=="string"?t.alg:void 0}}}function Po(e,t){let r=Lt.exec(e);if(!r)return null;let[,n,o,i]=r;if(o==="local")return{format:"paseto-local",formatLabel:`PASETO v${n} (encrypted)`,claims:{}};let s=Be(i),a=Io[n],l=s&&s.length>a?Nt(s.slice(0,s.length-a)):null,c={format:"paseto-public",formatLabel:`PASETO v${n}`,claims:{}};return l&&(c.claims={iss:U(l.iss),aud:U(l.aud),sub:U(l.sub)},c.issuedAt=se(l.iat,t),c.notBefore=se(l.nbf,t),c.expiresAt=se(l.exp,t),c.expiresAt&&(c.expirySource="exp claim")),c}function Eo(e){if(!e.startsWith("gAAAAA")||e.length<76)return null;let t=Be(e);if(!t||t[0]!==128||t.length<73||(t.length-57)%16!==0)return null;let r=0;for(let n=1;n<=8;n++)r=r*256+t[n];return r<978307200||r>4102444800?null:{format:"fernet",formatLabel:"Fernet",claims:{},issuedAt:r*1e3}}var zo=[{test:/^ya29\./,hint:"Google OAuth access token"},{test:/^gh[opsu]_/,hint:"GitHub token"},{test:/^github_pat_/,hint:"GitHub token"},{test:/^xox[abeprs]-/,hint:"Slack token"},{test:/^EAA[A-Za-z0-9]{40,}/,hint:"Facebook access token"},{test:/^shp(at|ca|pa|ss)_/,hint:"Shopify token"},{test:/^(sk|rk|pk)_(live|test)_/,hint:"Stripe API key",neverExpires:true},{test:/^AIza[0-9A-Za-z_-]{35}$/,hint:"Google API key",neverExpires:true}];function be(e,t=Date.parse){let r=e.trim().replace(/^"(.*)"$/,"$1");if(r.length<16||/\s/.test(r))return null;if(So.test(r)){let i=Oo(r);if(i)return i}if($o.test(r)){let i=Do(r);if(i)return i}if(r.startsWith("v")&&Lt.test(r)){let i=Po(r,t);if(i)return i}let n=Eo(r);if(n)return n;let o=zo.find(i=>i.test.test(r));return{format:"opaque",formatLabel:"Opaque",hint:o?.hint,neverExpires:o?.neverExpires,claims:{}}}function No(e){return!!e&&e.format!=="opaque"}function H(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619)>>>0;return t.toString(16).padStart(8,"0")}function Ve(e){let t=/^([a-z][a-z0-9+.-]*:\/\/[^/?#]+)/i.exec(e);return t?t[1].toLowerCase():null}function Lo(e){let t=Ve(e);return t?t.replace(/^[a-z][a-z0-9+.-]*:\/\//,""):"unknown"}function We(e){return e.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/?#]+/i,"").split(/[?#]/)[0]||"/"}function jo(e){let t=e.split("#")[0].split("?")[1];if(!t)return[];let r=[];for(let n of t.split("&")){let o=n.indexOf("=");if(!(o<=0))try{r.push([decodeURIComponent(n.slice(0,o)),decodeURIComponent(n.slice(o+1))])}catch{}}return r}var Je=/(token|jwt|session|auth|appcheck|api[-_]?key|apikey|credential|bearer)/i,Mo=new Set(["authorization","cookie","dpop","idempotency-key","x-request-id","x-correlation-id","www-authenticate","proxy-authenticate","x-csrf-token","x-xsrf-token"]),jt=new Set(["access_token","accesstoken","id_token","token","auth","auth_token","jwt","session","session_token"]),_o=new Set(["bearer","token","jwt","dpop","oauth","firebase"]);function Mt(e){let t={};if(!e)return t;for(let[r,n]of Object.entries(e))typeof n=="string"?t[r.toLowerCase()]=n:Array.isArray(n)&&(t[r.toLowerCase()]=n.join(", "));return t}function Fo(e){let t=[];for(let r of e.split(";")){let n=r.indexOf("=");n<=0||t.push([r.slice(0,n).trim(),r.slice(n+1).trim()])}return t}function ae(e,t,r){let n=be(e,r);return n&&(No(n)||n.hint||t)?n:null}function _t(e,t){let r=[],n=Mt(e.requestHeaders),o=n.authorization;if(o){let i=/^(\S+)\s+(\S+)$/.exec(o.trim()),s=i?i[1]:void 0,a=i?i[2]:o.trim();if(!s||_o.has(s.toLowerCase())){let l=ae(a,true,t);l&&r.push({location:"authorization",name:"Authorization",scheme:s,fp:H(a),info:l})}}for(let[i,s]of Object.entries(n)){if(Mo.has(i)||!Je.test(i))continue;let a=s.replace(/^bearer\s+/i,""),l=ae(a,true,t);l&&r.push({location:"header",name:i,fp:H(a),info:l})}if(n.cookie)for(let[i,s]of Fo(n.cookie)){let a=ae(s,Je.test(i)||/^(sid|sess)/i.test(i),t);a&&r.push({location:"cookie",name:i,fp:H(s),info:a})}for(let[i,s]of jo(e.url)){let a=ae(s,jt.has(i.toLowerCase()),t);a&&jt.has(i.toLowerCase())&&r.push({location:"query",name:i,fp:H(s),info:a})}return r}var Bo=/^(access_?token|accesstoken|token|jwt|auth_?token|session_?token|sessiontoken)$/i,Ft=/^(id_?token|idtoken)$/i,ke=/^(refresh_?token|refreshtoken)$/i,Uo=["expires_in","expiresIn","ExpiresIn","expires","ttl"],Ho=["expires_at","expiresAt","ExpiresAt","expiration","Expiration","expiry","expirationTime","expiration_time","access_token_expires_at","accessTokenExpiresAt","accessTokenExpiry"],Vo=["refresh_expires_in","refresh_token_expires_in","refreshTokenExpiresIn","refreshExpiresIn"],Wo=["refresh_expires_at","refreshTokenExpiresAt","refresh_token_expires_at"];function Jo(e){if(typeof e!="string")return e;let t=e.trim();if(!(t.startsWith("{")||t.startsWith("[")))return null;try{return JSON.parse(t)}catch{return null}}function qe(e,t,r){if(t>4||!e||typeof e!="object")return;if(Array.isArray(e)){for(let o of e.slice(0,5))qe(o,t+1,r);return}let n=e;for(let[o,i]of Object.entries(n))typeof i=="string"&&(Bo.test(o)||Ft.test(o)||ke.test(o))?r.push({key:o,value:i,holder:n}):i&&typeof i=="object"&&qe(i,t+1,r)}function qo(e){return ke.test(e)?"refresh":Ft.test(e)?"id":/session/i.test(e)?"session":"access"}function Bt(e,t,r,n,o){for(let i of t){let s=Ao(e[i]);if(s!==void 0)return{expiresAt:n+s*1e3,source:i,lifetimeMs:s*1e3}}for(let i of r){let s=se(e[i],o);if(s!==void 0)return{expiresAt:s,source:i}}return{}}function Ko(e){let t=e["set-cookie"];return t?t.split(/,(?=\s*[A-Za-z0-9!#$%&'*+.^_`|~-]+=)/).map(r=>r.trim()):[]}function Zo(e,t){if(e.status===void 0||e.status>=400)return[];let r=`${e.method.toUpperCase()} ${We(e.url)}`,n=e.timestamp+(e.duration??0),o=[],i=Jo(e.responseData);if(i){let a=[];qe(i,0,a);let l=new Map;for(let c of a.filter(d=>ke.test(d.key))){let d=be(c.value,t);if(!d)continue;let v=Bt(c.holder,Vo,Wo,n,t);l.set(c.holder,{fp:H(c.value),expiresAt:d.expiresAt??v.expiresAt,formatLabel:d.formatLabel})}for(let c of a){if(ke.test(c.key))continue;let d=be(c.value,t);if(!d)continue;let v=Bt(c.holder,Uo,Ho,n,t);o.push({fp:H(c.value),info:d,role:qo(c.key),expiresAt:v.expiresAt,expirySource:v.source,lifetimeMs:v.lifetimeMs,issuedBy:r,refresh:l.get(c.holder)})}}let s=Mt(e.responseHeaders);for(let a of Ko(s)){let[l,...c]=a.split(";"),d=l.indexOf("=");if(d<=0)continue;let v=l.slice(0,d).trim(),b=l.slice(d+1).trim(),I=ae(b,Je.test(v)||/^(sid|sess)/i.test(v),t);if(!I||b===""||b.toLowerCase()==="deleted")continue;let k,C,L;for(let jr of c){let[Mr,..._r]=jr.split("="),ft=Mr.trim().toLowerCase(),Re=_r.join("=").trim();if(ft==="max-age"&&/^-?\d+$/.test(Re))L=Number(Re)*1e3,k=n+L,C="Max-Age";else if(ft==="expires"&&C!=="Max-Age"){let pt=t(Re);Number.isFinite(pt)&&(k=pt,C="Expires")}}o.push({fp:H(b),info:I,role:"cookie",cookie:v,expiresAt:I.expiresAt??k,expirySource:I.expiresAt?I.expirySource:C,lifetimeMs:I.expiresAt?void 0:L,issuedBy:r})}return o}var Ke=e=>A.parse(e),Ut=4,Ht=2e4,Yo=8,Go=8,Xo=200,Qo=1e3,D=new Map,X=new Map,ei=new Set,ti=new Set,Vt=new Set,ri=/(token|refresh|oauth|session|auth\/)/i,p=null,xe=true,Ze=null,Ye=new Set,Ge=false;function le(){Ge||(Ge=true,Promise.resolve().then(()=>{Ge=false,Ye.forEach(e=>e())}))}function ni(e){return Ye.add(e),()=>{Ye.delete(e)}}function Wt(e,t){if(e.has(t))return false;if(e.size>=Qo){let r=e.values().next().value;r!==void 0&&e.delete(r)}return e.add(t),true}function Xe(e,t){return`${e}|${t.location}:${t.name.toLowerCase()}`}function Jt(e,t){let r=t?.lifetimeMs!==void 0&&t.expiresAt!==void 0,n=r?t.expiresAt:e.expiresAt??t?.expiresAt,o=e.expiresAt??(r?t.observedReal+t.lifetimeMs:t?.expiresAt),i=r?t.expirySource:e.expiresAt?e.expirySource:t?.expirySource,s=r?t.lifetimeMs:e.expiresAt!==void 0&&e.issuedAt!==void 0?e.expiresAt-e.issuedAt:void 0;return{expiresAt:n,serverExpiresAt:o,source:i,lifetimeMs:s}}function Qe(e,t,r,n,o){let i=X.get(t),s=Jt(r,i),a=e.fp!==t;a&&(e.history.unshift({fp:e.fp,firstSeenReal:e.firstSeenReal,expiresAt:e.expiresAt}),e.history.length=Math.min(e.history.length,Go),e.fp=t,e.firstSeenReal=n,e.firstSeenApp=o,e.uses=0,e.expiredSends=0,e.rejected=0),e.info=r,e.role=i?.role??(a?void 0:e.role),e.issuedBy=i?.issuedBy??(a?void 0:e.issuedBy),e.refresh=i?.refresh??(a?void 0:e.refresh),e.expiresAt=s.expiresAt,e.serverExpiresAt=s.serverExpiresAt,e.expirySource=s.source,e.lifetimeMs=s.lifetimeMs,a&&oi(e,n)}function qt(e,t,r,n,o){let i=X.get(r.fp),s=Jt(r.info,i);return{key:e,origin:t,host:Lo(t),location:r.location,name:r.name,scheme:r.scheme,fp:r.fp,info:r.info,role:i?.role,issuedBy:i?.issuedBy,refresh:i?.refresh,expiresAt:s.expiresAt,serverExpiresAt:s.serverExpiresAt,expirySource:s.source,lifetimeMs:s.lifetimeMs,firstSeenReal:n,firstSeenApp:o,lastUsedReal:n,lastUsedApp:o,uses:0,expiredSends:0,rejected:0,history:[]}}function Kt(){if(D.size<=Yo)return;let e=null;for(let t of D.values())(!e||t.lastUsedReal<e.lastUsedReal)&&(e=t);e&&e.key!==p?.tokenId&&D.delete(e.key)}function oi(e,t){!p||p.tokenId!==e.key||(p.newTokens+=1,p.status==="waiting"&&(p.status="refreshed",p.refreshedAt=t,p.ruleId&&p.forcedAt===void 0&&vo("network","deleteOverrideRule",{id:p.ruleId}).catch(()=>{})),p.newTokens>=Ut&&t-(p.refreshedAt??t)<=Ht&&(p.status="loop"))}function ii(e){let t=Ve(e.url);if(!t)return;let r=_t(e,Ke);if(r.length===0)return;let n=S(),o=e.timestamp;for(let i of r){let s=Xe(t,i),a=D.get(s);a?Qe(a,i.fp,i.info,n,o):(a=qt(s,t,i,n,o),D.set(s,a),Kt()),a.uses+=1,a.lastUsedReal=n,a.lastUsedApp=o,a.expiresAt!==void 0&&o>=a.expiresAt&&(a.expiredSends+=1),p&&p.tokenId===s&&p.forcedAt!==void 0&&i.fp===p.startFp&&(p.staleAfterFailure+=1)}le()}function si(e){let t=Ve(e.url);if(!t)return;let r=S(),n=false;if(e.status===401||e.status===403)for(let i of _t(e,Ke)){let s=D.get(Xe(t,i));s&&s.fp===i.fp&&(s.rejected+=1,n=true)}let o=!!p?.ruleId&&e.override?.ruleId===p.ruleId;if(p&&(e.status??0)>=400&&!o){let i=`${e.method.toUpperCase()} ${We(e.url)}`;(Vt.has(i)||e.method.toUpperCase()==="POST"&&ri.test(We(e.url)))&&(p.failedRefreshes+=1,p.lastRefreshError=`${e.status} ${i}`,n=true)}p?.ruleId&&e.override?.ruleId===p.ruleId&&p.forcedAt===void 0&&(p.forcedAt=r,n=true);for(let i of Zo(e,Ke)){if(Vt.add(i.issuedBy),X.set(i.fp,{...i,observedReal:r}),X.size>Xo){let s=X.keys().next().value;s!==void 0&&X.delete(s)}if(n=true,i.cookie){let s={location:"cookie",name:i.cookie,fp:i.fp,info:i.info},a=Xe(t,s),l=D.get(a);l?Qe(l,i.fp,i.info,r,e.timestamp):(D.set(a,qt(a,t,s,r,e.timestamp)),Kt());continue}for(let s of D.values())s.fp===i.fp&&Qe(s,i.fp,s.info,r,s.lastUsedApp)}n&&le()}function ai(e){let t=e;!t||typeof t.id!="string"||typeof t.url!="string"||(Wt(ei,t.id)&&ii(t),t.status!==void 0&&Wt(ti,t.id)&&si(t))}function ve(){if(Ze)return true;try{let{networkEventStore:e}=wo("@buoy-gg/network");if(!e?.onEvent)throw new Error("no event store");Ze=e.onEvent(ai,true),xe=true}catch{xe=false}return le(),xe}function Zt(e,t,r){let n=D.get(t);if(!n)throw new Error(`No token row "${t}".`);return p={kind:e,tokenId:t,startedAt:S(),startFp:n.fp,ruleId:r,status:"waiting",newTokens:0,staleAfterFailure:0,failedRefreshes:0},le(),p}function li(){p=null,le()}function ci(e){return e.location==="cookie"?`${e.name} cookie`:e.location==="query"?`${e.name} parameter`:e.location==="header"?`${e.name} header`:e.role==="id"||e.info.claims.use==="id"?"ID token":"Access token"}function ui(e,t){let r=[e.firstSeenReal,...e.history.map(o=>o.firstSeenReal)].slice(0,-1).filter(o=>t-o<=Ht).length,n=e.info.issuedAt;return{id:e.key,label:ci(e),host:e.host,location:e.location,name:e.name,scheme:e.scheme,format:e.info.format,formatLabel:e.info.formatLabel,hint:e.info.hint,claims:e.info.claims,fingerprint:e.fp,issuedAt:n,notBefore:e.info.notBefore,expiresAt:e.expiresAt,serverExpiresAt:e.serverExpiresAt,expirySource:e.expirySource,lifetimeMs:e.lifetimeMs,neverExpires:e.info.neverExpires,issuedBy:e.issuedBy,refresh:e.refresh?{expiresAt:e.refresh.expiresAt,formatLabel:e.refresh.formatLabel}:void 0,firstUsed:e.firstSeenApp,lastUsed:e.lastUsedApp,lastUsedReal:e.lastUsedReal,uses:e.uses,refreshes:e.history.length,lastRefreshAt:e.history.length?e.firstSeenReal:void 0,recentRefreshes:r,looping:r>=Ut,expiredSends:e.expiredSends,rejected:e.rejected}}function we(){let e=S(),t=[...D.values()].sort((r,n)=>n.lastUsedReal-r.lastUsedReal).map(r=>ui(r,e));if(p?.status==="refreshed"){let r=D.get(p.tokenId);r&&(p.newLifetimeMs=r.lifetimeMs,p.newIssuedBy=r.issuedBy)}return{available:xe,watching:Ze!==null,tokens:t,check:p?{...p}:null}}function di(e){let t=we();return e?t.tokens.find(r=>r.id===e)??null:t.tokens.find(r=>r.expiresAt!==void 0)??t.tokens[0]??null}function fi(e){return D.get(e)?.origin??null}import{isProNow as Yt}from"@buoy-gg/shared-ui/web";var f={anchor:Ce,settings:ie,lastJump:null,changedAt:null,hydrated:false},et=new Set,Te=null;function Gt(){Te=null,et.forEach(e=>e())}ni(Gt);function ce(e){return et.add(e),()=>{et.delete(e)}}function pi(){return f.settings}function Xt(){return M(f.anchor,S())}function Qt(){return f.anchor.mode!=="real"}function hi(e){if(e.mode==="real"){$t(null),so();return}Dt(),$t(t=>M(f.anchor,t)),io()}function mi(){let e={v:1,anchor:f.settings.persist&&Yt()?f.anchor:null,settings:f.settings};Fe(e)}function er(){let e={v:1,anchor:f.settings.persist&&Yt()?f.anchor:null,settings:f.settings};return f.settings.persist&&f.anchor.mode!=="real"&&(e.reload={anchor:f.anchor,at:S()}),Fe(e)}function Q(e,{save:t=true}={}){f={...f,...e},e.anchor&&hi(f.anchor),t&&mi(),Gt()}function ee(e,t=f.lastJump){Q({anchor:e,lastJump:t,changedAt:S(),hydrated:true})}var tr=e=>A.parse(e);function rr(e,t=false){let r=S(),n=M(f.anchor,r),o=wt(e,n,tr),i=o-n;return ee(Pe(f.anchor,r,o,t),{byMs:i,firedTimers:0,at:r}),R()}function tt(e,t){let r=Ee(e),n=S(),o=Kn(f.anchor,n,r),i=(t??f.settings.fireTimersOnJump)&&r>0;if(ee(o,{byMs:r,firedTimers:0,at:n}),i){let s=go(r);s>0&&Q({lastJump:{byMs:r,firedTimers:s,at:n}},{save:false})}return R()}function rt(e){let t=S(),r=M(f.anchor,t),n=e===void 0||e===""?r:wt(e,r,tr);return ee(Zn(f.anchor,t,n)),R()}function nt(){return f.anchor.mode==="frozen"&&ee(Yn(f.anchor,S())),R()}function nr(e){return ee(Gn(f.anchor,S(),Number(e))),R()}function ot(){return ee(Ce,null),R()}function or(e){let t={...f.settings};for(let r of Object.keys(ie))typeof e[r]=="boolean"&&(t[r]=e[r]);return Q({settings:t}),R()}function gi(e){return e>0?mo(e):0}var ir=false;function sr(e){if(!e){Q({hydrated:true},{save:false});return}let t=e.reload?S()-e.reload.at:1/0,r=t>=0&&t<bo?e.reload?.anchor:void 0;e.reload&&Fe({v:1,anchor:e.anchor,settings:e.settings});let n=e.anchor??r??null;Q({settings:e.settings,anchor:n??Ce,changedAt:n?S():null,hydrated:true},{save:false})}function it(){if(ir)return;ir=true,Dt();let e=void 0;if(e!==void 0){sr(e);return}xo().then(t=>{f.changedAt===null?sr(t):Q({hydrated:true},{save:false})})}function yi(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone??"unknown"}catch{return"unknown"}}function R(){let e=S(),t=M(f.anchor,e);return{mode:f.anchor.mode,active:f.anchor.mode!=="real",rate:f.anchor.rate,virtualNow:t,virtualIso:new A(t).toISOString(),realNow:e,offsetMs:qn(f.anchor,e),timeZone:yi(),timers:ho(),lastJump:f.lastJump,changedAt:f.changedAt,settings:f.settings,hydrated:f.hydrated,tokens:we(),patched:{date:Qn(),intl:oo(),timers:po(),animatedOnRealClock:co()}}}function ar(){return Te||(Te=R()),Te}import{useSyncExternalStore as bi}from"react";import{ClockToolIcon as lr,FloatingTool as ki,Pause as xi,Play as vi,X as wi,dismissFloatingTool as Ti,getFloatingTools as Ai,getUseIsPro as Si,night as ue,openFloatingTool as cr}from"@buoy-gg/shared-ui/web";import{useEffect as $i,useState as Ii}from"react";function V(e,t=250){let[,r]=Ii(0);$i(()=>{let s=setInterval(()=>r(a=>a+1),t);return()=>clearInterval(s)},[t]);let n=S();if(!e)return{virtual:n,real:n};let o=n-e.realNow,i=e.mode==="real"?1:e.rate;return{virtual:e.mode==="frozen"?e.virtualNow:e.virtualNow+o*i,real:n}}var F=e=>String(e).padStart(2,"0");function de(e){let t=new A(e);return`${F(t.getHours())}:${F(t.getMinutes())}:${F(t.getSeconds())}`}var Ri=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],ur=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function Ci(e){let t=new A(e);return`${Ri[t.getDay()]}, ${ur[t.getMonth()]} ${t.getDate()}, ${t.getFullYear()}`}function Ae(e,t=true){let r=new A(e),n=t?de(e):`${F(r.getHours())}:${F(r.getMinutes())}`;return`${ur[r.getMonth()]} ${r.getDate()} \xB7 ${n}`}function dr(e){let t=new A(e);return`${t.getFullYear()}-${F(t.getMonth()+1)}-${F(t.getDate())} ${F(t.getHours())}:${F(t.getMinutes())}`}function Oi(e){if(Math.abs(e)<1e3)return"matches real time";let t=te(Math.abs(e),{signed:false});return e>0?`${t} ahead of real time`:`${t} behind real time`}function fr(e){return e.mode==="real"?{label:"Real time",tone:"neutral"}:e.mode==="frozen"?{label:"Frozen",tone:"info"}:e.rate!==1?{label:`${At(e.rate)} speed`,tone:"warning"}:{label:"Overridden",tone:"accent"}}function Di(e){return`clock-jump-${e<0?"minus":"plus"}-${te(Math.abs(e),{signed:false}).replace(/\s/g,"")}`}import{jsx as N,jsxs as st}from"react/jsx-runtime";var Se="clock-chip",pr={id:Se,render:e=>N(mr,{...e})},Pi=()=>Ai().some(e=>e.id===Se);function Ei(){cr(pr)}var hr=false;function zi(){if(hr)return;hr=true;let e=false,t=()=>{let r=Qt()&&pi().showChip;r&&!e?cr(pr):!r&&Pi()&&Ti(Se),e=r};ce(t),t()}function mr({id:e,revealToken:t}){let r=bi(ce,ar,ar),{virtual:n,real:o}=V(r),i=r.mode==="frozen",s=i||Si()(),a=fr(r),l=n-o,c=`${Math.abs(l)<1e3?"0s":te(l)} \xB7 ${a.label.toLowerCase()}`;return N(ki,{id:e,revealToken:t,variant:"strip",dragFromSurface:true,defaultPlacement:"top",accessibilityLabel:`Move or hide the clock chip. App time ${Ae(n)}`,handleAdornment:N(lr,{size:12}),children:st(m,{style:K.row,children:[N(lr,{size:18}),st(m,{style:K.text,children:[N(w,{style:K.time,numberOfLines:1,testID:"clock-chip-time",children:Ae(n)}),N(w,{style:K.detail,numberOfLines:1,testID:"clock-chip-detail",children:c})]}),s?st(B,{testID:i?"clock-chip-resume":"clock-chip-freeze",accessibilityRole:"button",accessibilityLabel:i?"Resume the app clock":"Freeze the app clock",onPress:()=>i?nt():rt(),style:K.button,hitSlop:{top:8,bottom:8,left:4,right:4},children:[i?N(vi,{size:16,color:ue.color.accent}):null,i?null:N(xi,{size:16,color:ue.color.text})]}):null,s?N(m,{style:K.separator}):null,N(B,{testID:"clock-chip-reset",accessibilityRole:"button",accessibilityLabel:"Back to real time",onPress:()=>ot(),style:K.button,hitSlop:{top:8,bottom:8,left:4,right:8},children:N(wi,{size:16,color:ue.color.textSecondary})})]})})}var K=Y.create({row:{flexDirection:"row",alignItems:"center",gap:10,paddingLeft:10,paddingRight:4,paddingVertical:6,minWidth:220},text:{flexShrink:1,minWidth:120},time:{color:"#F59E0B",fontSize:14,fontWeight:"600",fontVariant:["tabular-nums"]},detail:{color:ue.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},button:{width:32,height:32,alignItems:"center",justifyContent:"center",borderRadius:16},separator:{width:Y.hairlineWidth,height:20,backgroundColor:ue.color.separator}});import{ClockToolIcon as Ni,CLOCK_TOOL_ICON_COLOR as Li,createToolFactory as ji,defineToolPreset as Mi}from"@buoy-gg/shared-ui/web";import{useEffect as gr,useState as _i}from"react";import{reloadApp as Fi}from"@buoy-gg/shared-ui/web";import{createSyncAdapter as Bi}from"@buoy-gg/shared-ui/web";import{dispatchToolAction as yr}from"@buoy-gg/shared-ui/web";var br="No sign-in token seen yet. Use the app so it sends a signed-in request, then try again. Tokens are read from the Network tool's captured requests.";function kr(e){ve();let t=di(e);if(!t)throw new Error(e?`No token "${e}". Read getState for the current ids.`:br);return t}function xr(e,t=1e4){let r=kr(e);if(r.expiresAt===void 0)throw new Error(r.neverExpires?`${r.label} for ${r.host} is ${r.hint??"a key"} and never expires.`:`${r.label} for ${r.host} (${r.formatLabel}) has no expiry Buoy can read. Use failNextRequest to test the refresh instead.`);let n=r.expiresAt-Math.max(0,t)-Xt();if(n<=0)throw new Error(`${r.label} for ${r.host} has already expired on the app's clock. Go back to real time, or use failNextRequest.`);return tt(n),Zt("expiry",r.id),R()}async function vr(e,t=401,r=1){let n=kr(e),o=fi(n.id);if(!o)throw new Error(br);await wr();let i=t===403?403:401,s=n.location==="authorization"||n.location==="header"?{urlPattern:`${o}/*`,requireHeader:n.name.toLowerCase()}:n.location==="query"?{urlPattern:`${o}/*${n.name}=*`}:{urlPattern:`${o}/*`},a=await yr("network","upsertOverrideRule",{name:"Clock: force a token refresh",...s,kind:"respond",status:i,headers:{"content-type":"application/json","www-authenticate":'Bearer error="invalid_token", error_description="The access token expired"'},body:JSON.stringify({error:"invalid_token",error_description:"The access token expired (forced by Buoy Clock to test token refresh)"}),times:Math.max(1,Math.min(10,Math.round(r)))}).catch(l=>{let c=l instanceof Error?l.message:String(l);throw new Error(c.includes("Unknown tool")?"Failing a request needs the Network tool (@buoy-gg/network).":c)});if(!a?.ok||!a.rule)throw new Error(a?.error??"Network did not add the override.");return Zt("401",n.id,a.rule.id),R()}async function wr(){let e=we().check;e?.ruleId&&e.forcedAt===void 0&&await yr("network","deleteOverrideRule",{id:e.ruleId}).catch(()=>{})}async function Tr(){return await wr(),li(),R()}function Z(e){return e&&typeof e=="object"?e:{}}function at(e,...t){for(let r of t){let n=e[r];if(typeof n=="string"||typeof n=="number")return n}}function fe(e,t){let r=e[t];if(typeof r=="boolean")return r;if(r==="true")return true;if(r==="false")return false}var Ar=Bi({version:1,getSnapshot(){return R()},subscribe(e){return ce(e)},actions:{getState(){return ve(),R()},setTime(e){let t=Z(e),r=at(t,"time","at","date","iso");if(r===void 0)throw new Error('setTime needs `time`: ISO 8601 ("2026-12-31T23:59:50"), epoch ms, or relative ("+1d").');return rr(r,fe(t,"freeze")??false)},shift(e){let t=Z(e),r=at(t,"by","ms","duration","delta");if(r===void 0)throw new Error('shift needs `by`: a duration like "+1d", "-2h30m", "90s", or ms.');return tt(r,fe(t,"fireTimers"))},freeze(e){return rt(at(Z(e),"time","at"))},resume(){return nt()},setRate(e){let t=Z(e),r=Number(t.rate??t.speed);if(!Number.isFinite(r))throw new Error("setRate needs a numeric `rate` (1 = normal speed).");return nr(r)},reset(){return ot()},updateSettings(e){let t=Z(e);return or({persist:fe(t,"persist"),showChip:fe(t,"showChip"),fireTimersOnJump:fe(t,"fireTimersOnJump")})},jumpToTokenExpiry(e){let t=Z(e),r=typeof t.token=="string"?t.token:typeof t.id=="string"?t.id:void 0,n=Number(t.leadMs??t.lead??1e4);return xr(r,Number.isFinite(n)?n:1e4)},failNextRequest(e){let t=Z(e),r=typeof t.token=="string"?t.token:typeof t.id=="string"?t.id:void 0,n=Number(t.status??401),o=Number(t.times??1);return vr(r,n,Number.isFinite(o)?o:1)},stopTokenCheck(){return Tr()},async holdForReload(){return await er(),R()}}});import{useState as $e}from"react";import{ChevronRight as Ui,NightButton as Hi,NightCard as Ie,NightChip as Vi,NightFootnote as lt,NightRows as ct,NightSectionLabel as Sr,NightSegmented as Wi,NightSwitch as $r,ProBadge as Ji,ProUpgradeModal as qi,getUseIsPro as Ki,monoFont as Zi,night as y,useSafeAreaInsets as Yi}from"@buoy-gg/shared-ui/web";import{ChevronRight as Gi,NightButton as Ir,NightCard as Xi,NightFootnote as Qi,NightRows as es,NightSectionLabel as ts,ProBadge as rs,night as x}from"@buoy-gg/shared-ui/web";import{jsx as T,jsxs as j}from"react/jsx-runtime";var W=e=>te(Math.abs(e),{signed:false});function ns({snapshot:e,run:t,openId:r,onToggle:n,isPro:o,onUpgrade:i}){let s=e.tokens;return j(m,{children:[T(ts,{children:s.tokens.length>1?"Sign-in tokens":"Sign-in token"}),T(Xi,{children:j(es,{children:[s.tokens.map((a,l)=>j(m,{children:[T(os,{token:a,snapshot:e,index:l,open:r===a.id,onPress:()=>n(a.id)}),r===a.id?T(is,{token:a,snapshot:e,run:o?t:()=>i("Sign-in token tests"),isPro:o}):null]},a.id)),s.tokens.length===0?T(m,{style:g.row,testID:"clock-token-empty",children:T(w,{style:g.emptyText,children:s.available?"No token seen yet":"Needs the Network tool"})},"empty"):null]})}),T(as,{check:s.check,tokens:s.tokens,snapshot:e,run:t}),s.tokens.length===0?T(Qi,{children:s.available?"Tokens show up here when the app sends a signed-in request.":"Install @buoy-gg/network so the Clock tool can read the app's tokens."}):null]})}function os({token:e,snapshot:t,index:r,open:n,onPress:o}){let{virtual:i}=V(t,1e3),s=e.expiresAt!==void 0?e.expiresAt-i:void 0,a=e.neverExpires?"No expiry":s===void 0?"Unknown":s<=0?"Expired":W(s),l=s!==void 0&&s<=0?g.valueDanger:s!==void 0&&s<6e4?g.valueWarning:null;return j(B,{testID:`clock-token-${r}`,accessibilityRole:"button",accessibilityLabel:`${e.label} for ${e.host}: ${s!==void 0&&s>0?`expires in ${a}`:a}`,accessibilityState:{expanded:n},activeOpacity:.6,onPress:o,style:g.row,children:[j(m,{style:g.rowText,children:[T(w,{style:g.rowTitle,numberOfLines:1,children:e.label}),T(w,{style:g.rowSubtitle,numberOfLines:1,children:`${e.host} \xB7 ${e.hint??e.formatLabel}`})]}),j(m,{style:g.rowRight,children:[T(w,{style:[g.value,l],testID:`clock-token-${r}-left`,children:a}),T(m,{style:n?g.chevronOpen:null,children:T(Gi,{size:16,color:x.color.textTertiary})})]})]})}function is({token:e,snapshot:t,run:r,isPro:n}){let{virtual:o,real:i}=V(t,1e3),s=ss(e,o,i),a=e.expiresAt!==void 0&&e.expiresAt-o>1e4;return j(m,{style:g.detail,testID:"clock-token-detail",children:[s.map(l=>T(w,{style:[g.detailLine,l.tone==="warn"?g.warn:null,l.tone==="bad"?g.bad:null],children:l.text},l.text)),j(m,{style:g.buttons,children:[T(m,{style:g.button,children:T(Ir,{label:"Jump to Expiry",testID:"clock-token-jump",accessibilityLabel:"Jump the app's clock to ten seconds before this token expires",size:"md",disabled:!a,onPress:()=>r("jumpToTokenExpiry",{token:e.id})})}),T(m,{style:g.button,children:T(Ir,{label:"Fail Next Request",testID:"clock-token-fail",accessibilityLabel:"Answer the app's next request to this API with 401",size:"md",onPress:()=>r("failNextRequest",{token:e.id})})})]}),n?null:j(m,{style:g.proLine,children:[T(rs,{}),T(w,{style:[g.hint,g.proHint],children:"Jump to Expiry and Fail Next Request are part of Buoy Pro."})]}),T(w,{style:g.hint,children:a||e.expiresAt===void 0?"Jump tests an app that refreshes before expiry. Fail tests one that refreshes after a 401.":"This token has already expired on the app's clock. Use Real Time to jump to it again."})]})}function ss(e,t,r){let n=[];if(e.expiresAt!==void 0){if(n.push({text:`Expires ${Ae(e.expiresAt)}`}),e.lifetimeMs!==void 0&&e.lifetimeMs>0&&n.push({text:`Lasts ${W(e.lifetimeMs)}${e.expirySource?`, from ${e.expirySource}`:""}`}),e.serverExpiresAt!==void 0){let o=e.expiresAt-t,i=e.serverExpiresAt-r;Math.abs(o-i)>2e3&&n.push({text:i>0?`The server still accepts it for ${W(i)}`:`The server stopped accepting it ${W(i)} ago`})}}else e.neverExpires||n.push({text:"The token doesn't say when it expires, and no login response did either."});if(e.hint&&n.push({text:e.formatLabel}),e.issuedBy&&n.push({text:`Issued by ${e.issuedBy}`}),e.refresh?.expiresAt!==void 0){let o=e.refresh.expiresAt-t;n.push({text:o>0?`Refresh token expires in ${W(o)}`:"Refresh token expired"})}return e.refreshes>0&&e.lastRefreshAt!==void 0&&n.push({text:`Refreshed ${e.refreshes===1?"once":`${e.refreshes} times`}, last at ${de(e.lastRefreshAt)}`}),n.push({text:`Sent with ${e.uses} request${e.uses===1?"":"s"}`}),e.expiredSends>0&&n.push({text:`Sent ${e.expiredSends} time${e.expiredSends===1?"":"s"} after it expired on the app's clock`,tone:"warn"}),e.rejected>0&&n.push({text:`Rejected by the server ${e.rejected} time${e.rejected===1?"":"s"}`,tone:"warn"}),e.looping&&n.push({text:`Refresh loop: ${e.recentRefreshes} new tokens in 20s`,tone:"bad"}),n}function as({check:e,tokens:t,snapshot:r,run:n}){let{virtual:o,real:i}=V(r,1e3);if(!e)return null;let s=t.find(c=>c.id===e.tokenId),{text:a,tone:l}=ls(e,s,o,i);return j(m,{style:g.check,children:[T(w,{style:[g.checkText,l==="good"?g.good:null,l==="bad"?g.bad:null,l==="warn"?g.warn:null],testID:"clock-token-check",children:a}),T(B,{testID:"clock-token-check-done",accessibilityRole:"button",accessibilityLabel:e.status==="waiting"?"Stop the refresh check":"Dismiss",onPress:()=>n("stopTokenCheck"),hitSlop:{top:8,bottom:8,left:8,right:8},children:T(w,{style:g.checkDone,children:e.status==="waiting"?"Stop":"Done"})})]})}function ls(e,t,r,n){if(e.status==="loop")return{text:`Refresh loop: ${e.newTokens} new tokens since the check started. The new tokens may already look expired to the app's clock.`,tone:"bad"};if(e.status==="refreshed"){let a=e.newIssuedBy?` by ${e.newIssuedBy}`:"",l=e.newLifetimeMs&&e.newLifetimeMs>0?`. The new token lasts ${W(e.newLifetimeMs)}`:"",c=e.kind==="401"&&e.forcedAt!==void 0?"The app got the 401 and refreshed":"Refreshed",d=e.failedRefreshes>0?` ${e.failedRefreshes===1?"One token request":`${e.failedRefreshes} token requests`} failed first (${e.lastRefreshError}).`:"";return{text:`${c} at ${de(e.refreshedAt??n)}${a}${l}.${d}`,tone:d?"warn":"good"}}let o=n-e.startedAt,i=(e.staleAfterFailure>0?` It sent the old token again ${e.staleAfterFailure} time${e.staleAfterFailure===1?"":"s"}.`:"")+(e.failedRefreshes>0?` Its token request failed (${e.lastRefreshError}).`:"");if(o>6e4)return{text:`No new token after ${W(o)}. The app may refresh on its next action, or not at all.${i}`,tone:"warn"};if(e.kind==="401")return e.forcedAt===void 0?{text:`The next request to ${t?.host??"the API"} will get a 401. Use the app to send one.`}:{text:`The app got the 401. Waiting for a new token\u2026${i}`,tone:i?"warn":void 0};let s=t?.expiresAt!==void 0?t.expiresAt-r:void 0;return s!==void 0&&s>0?{text:`Expires in ${W(s)} on the app's clock. Waiting for a new token\u2026`}:{text:"Expired on the app's clock. Waiting for the app's next request\u2026"}}var g=Y.create({row:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12,minHeight:56,paddingHorizontal:x.rowPadH,paddingVertical:10},rowText:{flex:1,minWidth:0},rowTitle:{color:x.color.text,fontSize:x.font.row},rowSubtitle:{color:x.color.textTertiary,fontSize:x.font.caption,marginTop:2},rowRight:{flexDirection:"row",alignItems:"center",gap:6},value:{color:x.color.textSecondary,fontSize:x.font.row,fontVariant:["tabular-nums"]},valueWarning:{color:x.color.warning},valueDanger:{color:x.color.danger},chevronOpen:{transform:[{rotate:"90deg"}]},emptyText:{color:x.color.textSecondary,fontSize:x.font.row},detail:{paddingHorizontal:x.rowPadH,paddingBottom:14,gap:4},detailLine:{color:x.color.textSecondary,fontSize:x.font.caption},buttons:{flexDirection:"row",gap:8,marginTop:8},button:{flex:1},hint:{color:x.color.textTertiary,fontSize:x.font.caption,marginTop:6},proLine:{flexDirection:"row",alignItems:"center",gap:8,marginTop:6},proHint:{marginTop:0,flexShrink:1},check:{flexDirection:"row",alignItems:"flex-start",gap:12,marginTop:8,marginHorizontal:x.labelInset},checkText:{flex:1,color:x.color.textSecondary,fontSize:x.font.caption,lineHeight:18},checkDone:{color:x.color.accent,fontSize:x.font.caption,fontWeight:"600"},good:{color:x.color.accent},warn:{color:x.color.warning},bad:{color:x.color.danger}});import{jsx as u,jsxs as $}from"react/jsx-runtime";var Rr="#F59E0B";function Cr({snapshot:e,onAction:t,onReload:r}){let n=Yi({minBottom:16}),[o,i]=$e(null),[s,a]=$e(null),l=Ki()(),[c,d]=$e(null),v=k=>d(k),b=(k,C)=>{i(null),t(k,C).catch(L=>{i(L instanceof Error?L.message:String(L))})},I=k=>a(C=>C===k?null:k);return e?$(xt,{style:h.fill,contentContainerStyle:[h.content,{paddingBottom:n.bottom}],testID:"clock-scroll",keyboardShouldPersistTaps:"handled",children:[u(cs,{snapshot:e}),o?u(lt,{tone:"danger",centered:true,children:u(w,{testID:"clock-error",children:o})}):null,$(m,{children:[u(Sr,{children:"Jump ahead"}),u(ds,{run:b})]}),$(m,{children:[u(Ie,{children:$(ct,{children:[$(m,{children:[u(Dr,{title:"Date & Time",testID:"clock-date-row",open:s==="date",onPress:()=>I("date"),value:u(fs,{snapshot:e})}),s==="date"?u(hs,{snapshot:e,run:b,onDone:()=>a(null)}):null]},"date"),$(m,{style:h.row,children:[u(ut,{title:"Freeze",isPro:l}),u($r,{value:e.mode==="frozen",testID:"clock-freeze",accessibilityLabel:"Freeze the clock",onValueChange:k=>k&&!l?v("Freeze"):b(k?"freeze":"resume")})]},"freeze"),$(m,{children:[u(Dr,{title:"Speed",pro:!l,testID:"clock-speed-row",open:s==="speed",onPress:()=>l?I("speed"):v("Speed"),value:u(w,{style:h.rowValue,children:zr(e)})}),s==="speed"?u(ms,{snapshot:e,run:b}):null]},"speed")]})}),u(lt,{children:"Only this app's clock changes. Screens pick up the new time when they next render, or all at once when you reload."})]}),e.tokens?u(ns,{snapshot:e,run:b,openId:s,onToggle:I,isPro:l,onUpgrade:v}):null,u(Ie,{children:$(ct,{children:[r?u(Pr,{label:"Reload App",testID:"clock-reload",onPress:r},"reload"):null,u(Pr,{label:"Use Real Time",accessibilityLabel:"Reset to real time",testID:"clock-reset",destructive:true,disabled:e.mode==="real",onPress:()=>b("reset")},"reset")]})}),$(m,{children:[u(Sr,{children:"Options"}),u(ys,{settings:e.settings,run:b,isPro:l,onUpgrade:v})]}),u(qi,{visible:c!==null&&!l,onClose:()=>d(null),featureName:c??void 0})]}):u(m,{style:h.waiting,testID:"clock-waiting",children:u(lt,{centered:true,children:"Waiting for the app's clock\u2026"})})}function ut({title:e,isPro:t}){return $(m,{style:h.titleRow,children:[u(w,{style:h.rowTitle,children:e}),t?null:u(Ji,{})]})}function cs({snapshot:e}){let{virtual:t,real:r}=V(e),n=fr(e),o=e.mode!=="real",i=Oi(t-r),s=e.mode==="frozen"?" \xB7 Frozen":o&&e.rate!==1?` \xB7 ${zr(e)}`:"";return $(m,{style:h.hero,children:[u(w,{style:[h.heroTime,o?h.heroTimeActive:null],testID:"clock-hero-time",accessibilityLabel:`App clock ${de(t)}`,children:de(t)}),u(w,{style:h.heroDate,testID:"clock-hero-date",children:Ci(t)}),u(m,{testID:"clock-status",accessibilityLabel:`Clock status: ${n.label}${o?`, ${i}`:""}`,children:u(w,{style:[h.heroStatus,o?h.heroStatusActive:null],testID:"clock-offset",children:o?`${i}${s}`:"Real time"})})]})}var Or=36e5,dt=24*Or,us=[{ms:Or,unit:"hour"},{ms:dt,unit:"day"},{ms:7*dt,unit:"week"},{ms:30*dt,unit:"month"}];function ds({run:e}){return u(Ie,{style:h.jumpBar,children:us.map((t,r)=>$(B,{testID:Di(t.ms),accessibilityRole:"button",accessibilityLabel:`Jump ahead one ${t.unit}`,activeOpacity:.6,onPress:()=>e("shift",{by:t.ms}),style:[h.jump,r>0?h.jumpDivider:null],children:[u(w,{style:h.jumpAmount,children:"+1"}),u(w,{style:h.jumpUnit,children:t.unit})]},t.unit))})}function Dr({title:e,pro:t,value:r,open:n,onPress:o,testID:i}){return $(B,{testID:i,accessibilityRole:"button",accessibilityLabel:e,accessibilityState:{expanded:n},activeOpacity:.6,onPress:o,style:h.row,children:[u(ut,{title:e,isPro:!t}),$(m,{style:h.rowRight,children:[r,u(m,{style:n?h.chevronOpen:null,children:u(Ui,{size:16,color:y.color.textTertiary})})]})]})}function fs({snapshot:e}){let{virtual:t}=V(e,1e3);return u(w,{style:[h.rowValue,h.tabular],numberOfLines:1,children:Ae(t,false)})}function Pr({label:e,onPress:t,testID:r,destructive:n,disabled:o,accessibilityLabel:i}){return u(B,{testID:r,accessibilityRole:"button",accessibilityLabel:i??e,accessibilityState:{disabled:!!o},activeOpacity:.6,disabled:o,onPress:t,style:[h.row,o?h.rowDisabled:null],children:u(w,{style:[h.actionLabel,n?h.actionDestructive:null],children:e})})}var ps=Tt.filter(e=>["midnight","month-end","year-end"].includes(e.id));function hs({snapshot:e,run:t,onDone:r}){let[n,o]=$e(""),{virtual:i}=V(e,1e3),s=()=>n.trim()||dr(i),a=e.mode==="frozen",l=c=>{t("setTime",{time:c,freeze:a}),r()};return $(m,{style:h.editor,children:[$(m,{style:h.inputRow,children:[u(kt,{testID:"clock-time-input",accessibilityLabel:"Date and time",value:n,onChangeText:o,placeholder:dr(i),placeholderTextColor:y.color.placeholder,autoCapitalize:"none",autoCorrect:false,returnKeyType:"done",onSubmitEditing:()=>l(s()),style:h.input}),u(Hi,{label:"Set",testID:"clock-time-apply",accessibilityLabel:"Set this time",size:"md",variant:"primary",fullWidth:false,onPress:()=>l(s())})]}),u(w,{style:h.hint,children:"Year-month-day and 24-hour time, or +3d, -2h"}),u(m,{style:h.presets,children:ps.map(c=>u(Vi,{label:c.label,testID:`clock-preset-${c.id}`,onPress:()=>l(c.at(i,A))},c.id))})]})}var Er=[{key:"1",label:"Normal"},{key:"10",label:"10\xD7"},{key:"60",label:"1 min/s"},{key:"3600",label:"1 hr/s"}];function zr(e){return e.mode==="real"||e.rate===1?"Normal":Er.find(t=>Number(t.key)===e.rate)?.label??At(e.rate)}function ms({snapshot:e,run:t}){let r=e.mode==="real"?"1":String(e.rate);return $(m,{style:h.editor,children:[u(m,{style:h.segmentRow,children:u(Wi,{tabs:Er,activeKey:r,size:"sm",testIDPrefix:"clock-speed",onChange:n=>t("setRate",{rate:Number(n)})})}),u(w,{style:h.hint,children:"Taps, animations and timers keep real speed."})]})}var gs=[{key:"showChip",title:"Show Floating Clock"},{key:"persist",title:"Keep After Reload",pro:true}];function ys({settings:e,run:t,isPro:r,onUpgrade:n}){return u(Ie,{children:u(ct,{children:gs.map(o=>{let i=!!o.pro&&!r;return $(m,{style:h.row,children:[u(ut,{title:o.title,isPro:!i}),u($r,{value:i?false:e[o.key],testID:`clock-setting-${o.key}`,accessibilityLabel:o.title,onValueChange:s=>i?n(o.title):t("updateSettings",{[o.key]:s})})]},o.key)})})})}var h=Y.create({fill:{flex:1},content:{paddingHorizontal:y.gutter,paddingTop:8,gap:y.groupGap},waiting:{flex:1,alignItems:"center",justifyContent:"center",padding:24},hero:{alignItems:"center",paddingTop:12},heroTime:{color:y.color.text,fontSize:56,fontWeight:"200",fontVariant:["tabular-nums"],letterSpacing:1},heroTimeActive:{color:Rr},heroDate:{color:y.color.text,fontSize:17,fontWeight:"500",marginTop:2},heroStatus:{color:y.color.textTertiary,fontSize:y.font.caption,fontWeight:"500",marginTop:6},heroStatusActive:{color:y.color.textSecondary},jumpBar:{flexDirection:"row"},jump:{flex:1,alignItems:"center",paddingVertical:12},jumpDivider:{borderLeftWidth:Y.hairlineWidth,borderLeftColor:y.color.separator},jumpAmount:{color:Rr,fontSize:17,fontWeight:"600",fontVariant:["tabular-nums"]},jumpUnit:{color:y.color.textSecondary,fontSize:y.font.caption,marginTop:1},row:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:12,minHeight:50,paddingHorizontal:y.rowPadH,paddingVertical:10},rowDisabled:{opacity:.4},rowTitle:{color:y.color.text,fontSize:y.font.row},titleRow:{flexDirection:"row",alignItems:"center",gap:8,flexShrink:1},rowRight:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},rowValue:{color:y.color.textSecondary,fontSize:y.font.row},tabular:{fontVariant:["tabular-nums"]},chevronOpen:{transform:[{rotate:"90deg"}]},actionLabel:{color:y.color.accent,fontSize:y.font.row},actionDestructive:{color:y.color.danger},editor:{paddingHorizontal:y.rowPadH,paddingBottom:14,gap:10},inputRow:{flexDirection:"row",alignItems:"center",gap:8},input:{flex:1,color:y.color.text,fontFamily:Zi,fontSize:15,backgroundColor:y.color.bg,borderRadius:y.radius.input,borderWidth:1,borderColor:y.color.border,paddingHorizontal:12,paddingVertical:8},hint:{color:y.color.textTertiary,fontSize:y.font.caption},presets:{flexDirection:"row",flexWrap:"wrap",gap:6},segmentRow:{flexDirection:"row"}});import{jsx as bs}from"react/jsx-runtime";var ks=Ar.actions;async function xs(e,t){let r=ks[e];if(!r)throw new Error(`Unknown clock action: ${e}`);return r(t)}function vs(){er().then(()=>Fi("auto","buoy clock")).catch(()=>{})}function Nr(){gr(()=>{it(),ve()},[]);let[e,t]=_i(R);return gr(()=>ce(()=>t(R())),[]),bs(Cr,{snapshot:e,onAction:xs,onReload:vs})}import{jsx as ws}from"react/jsx-runtime";var Lr=Mi({id:"clock",name:"CLOCK",description:"Travel to any date, freeze or speed up the app's clock",slot:"both",color:Li,icon:({size:e,color:t})=>ws(Ni,{size:e,color:t}),component:Nr,modal:{subtitle:"override the app's date & time"}}),Ts=ji(Lr);import{ClockToolIcon as As,CLOCK_TOOL_ICON_COLOR as Ss}from"@buoy-gg/shared-ui/web";var $s=typeof navigator<"u"&&navigator.product==="ReactNative";$s&&(lo(bt),zi(),typeof gt<"u"&>&&it());export{Se as CLOCK_CHIP_ID,Ss as CLOCK_TOOL_ICON_COLOR,Nr as ClockBody,mr as ClockChip,As as ClockToolIcon,Cr as ClockToolView,Tt as TIME_PRESETS,it as bootClock,Ar as clockSyncAdapter,Lr as clockToolPreset,Ts as createClockTool,vr as failNextRequest,te as formatDuration,rt as freeze,R as getClockSnapshot,we as getTokenReport,be as inspectToken,Qt as isClockOverridden,xr as jumpToTokenExpiry,Ei as openClockChip,Ee as parseDuration,gi as previewJump,S as realNow,ot as reset,nt as resume,nr as setRate,rr as setTime,tt as shift,ve as startTokenWatch,Tr as stopTokenCheck,ce as subscribeClock,H as tokenFingerprint,or as updateSettings,V as useLiveClock,Xt as virtualNow,je as withRealClock};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/clock",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.45",
|
|
4
4
|
"description": "Clock override for React Native: travel to any date, freeze or speed up time, and jump ahead while firing due timers. Test expirations, countdowns and renewals without touching the device clock.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./lib/web/**/*.mjs"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@buoy-gg/shared-ui": "^7.0.
|
|
20
|
+
"@buoy-gg/shared-ui": "^7.0.45"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"react": "*"
|