@buoy-gg/external-sync 7.0.55 → 7.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/web/index.mjs +1 -1
- package/package.json +2 -2
package/lib/web/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";var ne=process.env.NODE_ENV!=="production";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useAccountAccess as he}from"@buoy-gg/license/web";import{useEffect as ve,useRef as oe}from"react";import{LicenseManager as P}from"@buoy-gg/license/web";function p(e,o,n="log"){if(!(!o&&n==="log"))switch(n){case"warn":console.warn(e);break;case"error":console.error(e);break;default:console.log(e)}}var j="__buoyFlushToolSync";function K(){let e=globalThis;return e[j]||(e[j]=new Set),e[j]}function re(e){K().add(e)}function ce(e){K().delete(e)}function be(e){try{for(let o of K())try{o(e)}catch{}}catch{}}function se(e,o){let n=0,i=[e],l=new Set;for(;i.length>0;){if(n>o)return{over:true,approxBytes:n};let r=i.pop();if(r==null)n+=4;else if(typeof r=="string")n+=r.length+2;else if(typeof r=="number")n+=8;else if(typeof r=="boolean")n+=5;else if(typeof r=="object"){if(l.has(r))continue;if(l.add(r),Array.isArray(r)){n+=2+r.length;for(let c=0;c<r.length;c++)i.push(r[c])}else{n+=2;for(let c in r)n+=c.length+4,i.push(r[c])}}else n+=4}return{over:n>o,approxBytes:n}}var _e=1;function U(){let e=globalThis.__buoyRealNow;return typeof e=="function"?e():Date.now()}function ie(){return globalThis.__buoyRealTimers??globalThis}function ae(e,o){return ie().setTimeout(e,o)}function le(e){ie().clearTimeout(e)}function $e(e){let o=globalThis.__buoyWithRealClock;return typeof o=="function"?o(e):e()}var Ie=["_resetPingTimeout","_hasPingExpired"];function ke(e){let o=e?.io;if(!o||o.__buoyRealTimers)return;let n=l=>{if(l){l.setTimeoutFn=ae,l.clearTimeoutFn=le;for(let r of Ie){let c=l[r];if(typeof c!="function"||c.__buoyReal)continue;let a=function(...y){return $e(()=>c.apply(this,y))};a.__buoyReal=true,l[r]=a}}};n(o),n(o.engine);let i=o.open;typeof i=="function"&&(o.open=function(...l){let r=i.apply(this,l);return n(this?.engine),r}),o.__buoyRealTimers=true}var N="[ExternalSync]";function Se({socket:e,deviceId:o,getTools:n,watched:i,throttleMs:l=200,enableLogs:r=false}){let c=false,a=false,y=0,m=()=>!c&&a&&e.connected&&P.hasAccountAccess(),b=new Map,k={},h={},S=t=>t==="All"||t===o,f=(t,s)=>{if(m())try{e.emit(t,s)}catch(g){p(`${N} Failed to emit "${t}": ${g}. Payload must be JSON-serializable.`,r,"error")}},R=new Set,$=t=>{if(!m())return;let s=n()[t];if(!s)return;k[t]=U();let g;try{g=s.getSnapshot()}catch{return}let{over:I,approxBytes:D}=se(g,2097152);if(I){R.has(t)||(R.add(t),console.warn(`${N} "${t}" snapshot \u2248${(D/1e6).toFixed(1)}MB exceeds the ${2097152/1e6}MB sync budget \u2014 dropped (dashboard will be stale for this tool). The adapter should ship a wire-form snapshot (summaries + on-demand detail).`));return}let V={toolId:t,persistentDeviceId:o,timestamp:k[t],version:s.version,kind:"snapshot",payload:g};f("devtool-sync",V)},B=t=>{if(h[t])return;let s=U()-(k[t]??0);if(s>=l){$(t);return}h[t]=setTimeout(()=>{delete h[t],$(t)},l-s)},O=t=>{e.connected&&b.has(t)&&(h[t]&&(clearTimeout(h[t]),delete h[t]),$(t))};re(O);let w=new Map,L=(t,s)=>{if(!m())return;let g=n()[t];if(g){if(b.has(t)){if(w.get(t)===s)return;let I=b.get(t);b.set(t,g.subscribe(s==="stream"?()=>B(t):()=>{})),w.set(t,s),I?.(),p(`${N} "${t}" watch mode \u2192 ${s}`,r);return}b.set(t,g.subscribe(s==="stream"?()=>B(t):()=>{})),w.set(t,s),p(`${N} Watching "${t}" (${s})`,r)}},E=t=>{b.get(t)?.(),b.delete(t),w.delete(t),h[t]&&(clearTimeout(h[t]),delete h[t]),p(`${N} Stopped watching "${t}"`,r)},q=()=>{let t={persistentDeviceId:o,protocolVersion:1,tools:Object.entries(n()).map(([s,g])=>({toolId:s,version:g.version,actions:Object.keys(g.actions??{})}))};f("devtool-capabilities",t)},d=t=>{if(!(!m()||!S(t.targetDeviceId)))if(t.watching){let s=t.consolidated===true&&t.stream===false?"capture":"stream";i.set(t.toolId,s),L(t.toolId,s),s==="stream"&&$(t.toolId)}else i.delete(t.toolId),E(t.toolId)},u=t=>{!m()||!S(t.targetDeviceId)||$(t.toolId)},H=async t=>{if(!m()||!S(t.targetDeviceId))return;let s=y,{requestId:g,toolId:I,action:D,params:V}=t,v={requestId:g,toolId:I,action:D,persistentDeviceId:o,timestamp:U(),ok:false},ee=n()[I],te=ee?.actions?.[D];if(!te){v.error=ee?`Unknown action "${D}" on tool "${I}"`:`Unknown tool "${I}"`,f("devtool-action-result",v);return}try{v.result=await te(V),v.ok=true}catch(x){v.error=x instanceof Error?x.message:String(x)}if(!(s!==y||!m())){if(v.ok){let{over:x,approxBytes:me}=se(v.result,8388608);x&&(v.ok=false,v.result=void 0,v.error=`Result \u2248${(me/1e6).toFixed(1)}MB exceeds the ${8388608/1e6}MB sync budget. Narrow the request (e.g. includeValues:false, a limit, or a more specific action).`)}v.timestamp=U(),f("devtool-action-result",v)}},A=()=>{y+=1;for(let s of[...b.keys()])E(s);i.clear();for(let s of Object.values(h))clearTimeout(s);let t=e;t.sendBuffer&&(t.sendBuffer=t.sendBuffer.filter(s=>!["devtool-sync","devtool-capabilities","devtool-action-result","device-license"].includes(String(s.data?.[0]))))},G=()=>{let t=P.getState();e.emit("device-license",{tier:t.tier,isPro:t.isPro?"1":"0"}),q()},Q=t=>{a=t?.protocol===1&&t.ready===true,m()?G():A()},ge=P.subscribe(()=>{P.hasAccountAccess()?m()&&G():(e.connected&&e.emit("device-license",{tier:"locked",isPro:"0"}),A())}),F=()=>{a=false,e.emit("buoy:access:request")},Z=()=>{a=false,A()};e.on("buoy:access",Q);for(let[t,s]of i)n()[t]&&L(t,s);return e.on("connect",F),e.on("disconnect",Z),e.on("devtool-watch",d),e.on("request-devtool-state",u),e.on("devtool-action",H),e.connected&&F(),()=>{c=true,ge(),e.off("buoy:access",Q),A(),ce(O),e.off("connect",F),e.off("disconnect",Z),e.off("devtool-watch",d),e.off("request-devtool-state",u),e.off("devtool-action",H);for(let t of[...b.keys()])E(t)}}function Te({tools:e,socket:o,deviceId:n,enabled:i=true,throttleMs:l=200,enableLogs:r=false}){let c=he().status==="admitted",a=oe(e);a.current=e;let y=oe(new Map),m=Object.keys(e).sort().join(",");ve(()=>{if(!o||!n||!i||!c){y.current.clear();return}return Se({socket:o,deviceId:n,getTools:()=>a.current,watched:y.current,throttleMs:l,enableLogs:r})},[o,n,i,c,l,r,m])}function we(e,o){let n=()=>o(false),i=()=>{n(),e.emit("buoy:access:request")},l=r=>{let c=r;o(c?.protocol===1&&c?.ready===true)};return e.on("connect",i),e.on("disconnect",n),e.on("buoy:access",l),n(),e.connected&&i(),()=>{e.off("connect",i),e.off("disconnect",n),e.off("buoy:access",l)}}import{useEffect as J,useRef as ue,useState as W}from"react";import{io as Ee}from"socket.io-client";function Re(e,o){return e}var Be=42831;function Oe(e){return`http://${e??"localhost"}:42831`}function De(){return null}function fe(){return Oe(typeof location>"u"?null:location.hostname)}var z={targetURL:null,state:"idle",lastError:null,since:0},X=new Set;function T(e){z={...z,...e,since:U()},X.forEach(o=>o())}function xe(){return z}function Ue(e){return X.add(e),()=>{X.delete(e)}}var Ne=typeof ne<"u"?ne:false,_=null,C="",de="",pe="",Y=0,M=null,Me=2e3,ye=()=>`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;function Le(){let e=globalThis;return e.__buoyInstanceId||(e.__buoyInstanceId=ye()),e.__buoyInstanceId}function Ae(e){let o=n=>n&&Object.fromEntries(Object.entries(n).filter(([i])=>!["BUOY_LICENSE_KEY","BUOY_KEY","EXPO_PUBLIC_BUOY_KEY","VITE_BUOY_KEY","NEXT_PUBLIC_BUOY_KEY","REACT_APP_BUOY_KEY","licenseKey"].includes(i)));return{deviceName:e.deviceName,deviceId:e.persistentDeviceId,platform:e.platform,extraDeviceInfo:JSON.stringify(o(e.extraDeviceInfo)),envVariables:JSON.stringify(o(e.envVariables)),connectionNonce:ye(),instanceId:Le()}}function Pe({deviceName:e,socketURL:o,persistentDeviceId:n,extraDeviceInfo:i,envVariables:l,platform:r,enableLogs:c=false}){let a=ue(null),[y,m]=W(null),[b,k]=W(false),h=o??fe(),S=ue(false),f=`[${e}]`,R=()=>{p(`${f} Socket connected successfully`,c),S.current=false,k(true),T({state:"connected",lastError:null})},$=d=>{p(`${f} Socket disconnected. Reason: ${d}`,c),k(false),T({state:"retrying"})},B=d=>{if(T({state:"retrying",lastError:d.message}),!Ne||S.current)return;S.current=true;let u=r==="android"&&/localhost|127\.0\.0\.1/.test(C)?"If this device is connected over USB, run: adb reverse tcp:42831 tcp:42831. ":"If it's running on another machine or port, pass socketURL via the externalSync prop. ";p(`[buoy] desktop sync: can't reach ${C} (is Buoy Desktop running?). Retrying in the background. ${u}(${d.message})`,c,"warn")},O=()=>{p(`${f} Socket connection timeout`,c,"error")};J(()=>{if(!n)return;let d=Re(h,r);T({targetURL:d,state:"connecting",lastError:null}),p(`${f} Platform: ${r}, using URL: ${d}`,c);try{_&&(C!==d||de!==n||pe!==r)&&(_.disconnect(),_=null),_?p(`${f} Reusing existing socket instance to ${d}`,c):(p(`${f} Creating new socket instance to ${d}`,c),_=Ee(d,{autoConnect:true,query:Ae({deviceName:e,persistentDeviceId:n,platform:r,extraDeviceInfo:i,envVariables:l}),reconnection:true,reconnectionAttempts:1/0,reconnectionDelay:1e3,reconnectionDelayMax:5e3,transports:["websocket"]}),ke(_),C=d,de=n,pe=r),a.current=_;let u=a.current;return Y++,M&&(le(M),M=null),m(u),u.on("connect_error",B),u.on("connect_timeout",O),k(u.connected),u.connected&&p(`${f} Socket already connected on init`,c),u.on("connect",R),u.on("disconnect",$),()=>{p(`${f} Cleaning up socket event listeners`,c),u.off("connect",R),u.off("disconnect",$),u.off("connect_error",B),u.off("connect_timeout",O),Y--,Y===0&&(M=ae(()=>{M=null,!(Y>0||_!==u)&&(p(`${f} No longer used; disconnecting`,c),u.disconnect(),_=null,T({state:"idle",lastError:null}))},Me))}}catch(u){p(`${f} Failed to initialize socket: ${u}`,c,"error")}},[n,h,r]),J(()=>{a.current&&a.current.io.opts.query&&n&&(p(`${f} Updating device name in socket connection`,c),a.current.io.opts.query={...a.current.io.opts.query,deviceName:e,deviceId:n,platform:r})},[e,f,n,r,c]);function w(){a.current&&!a.current.connected&&(p(`${f} Manually connecting to socket server`,c),a.current.connect())}function L(){a.current&&a.current.connected&&(p(`${f} Manually disconnecting from socket server`,c),a.current.disconnect())}let[E,q]=W(null);return J(()=>{if(y)return we(y,d=>{q(d?y:null),T(d?{state:"connected",lastError:null}:{state:"retrying",lastError:"Update Buoy Desktop and sign in to enable desktop sync."})})},[y]),{socket:E===y?y:null,connect:w,disconnect:L,isConnected:b&&E===y&&y!==null}}export{Be as DEFAULT_BROKER_PORT,_e as SYNC_PROTOCOL_VERSION,be as flushToolSyncNow,fe as getDefaultSocketURL,De as getMetroHost,xe as getSyncStatus,re as registerToolFlusher,T as setSyncStatus,Ue as subscribeSyncStatus,ce as unregisterToolFlusher,Te as useExternalSync,Pe as useExternalSyncSocket};
|
|
1
|
+
"use client";var oe=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useAccountAccess as he}from"@buoy-gg/license/web";import{useEffect as ve,useRef as ne}from"react";import{LicenseManager as A}from"@buoy-gg/license/web";function p(e,n,o="log"){if(!(!n&&o==="log"))switch(o){case"warn":console.warn(e);break;case"error":console.error(e);break;default:console.log(e)}}var j="__buoyFlushToolSync";function K(){let e=globalThis;return e[j]||(e[j]=new Set),e[j]}function re(e){K().add(e)}function ce(e){K().delete(e)}function be(e){try{for(let n of K())try{n(e)}catch{}}catch{}}function se(e,n){let o=0,i=[e],l=new Set;for(;i.length>0;){if(o>n)return{over:true,approxBytes:o};let r=i.pop();if(r==null)o+=4;else if(typeof r=="string")o+=r.length+2;else if(typeof r=="number")o+=8;else if(typeof r=="boolean")o+=5;else if(typeof r=="object"){if(l.has(r))continue;if(l.add(r),Array.isArray(r)){o+=2+r.length;for(let c=0;c<r.length;c++)i.push(r[c])}else{o+=2;for(let c in r)o+=c.length+4,i.push(r[c])}}else o+=4}return{over:o>n,approxBytes:o}}var _e=1;function x(){let e=globalThis.__buoyRealNow;return typeof e=="function"?e():Date.now()}function ie(){return globalThis.__buoyRealTimers??globalThis}function ae(e,n){return ie().setTimeout(e,n)}function le(e){ie().clearTimeout(e)}function $e(e){let n=globalThis.__buoyWithRealClock;return typeof n=="function"?n(e):e()}var Ie=["_resetPingTimeout","_hasPingExpired"];function ke(e){let n=e?.io;if(!n||n.__buoyRealTimers)return;let o=l=>{if(l){l.setTimeoutFn=ae,l.clearTimeoutFn=le;for(let r of Ie){let c=l[r];if(typeof c!="function"||c.__buoyReal)continue;let a=function(...y){return $e(()=>c.apply(this,y))};a.__buoyReal=true,l[r]=a}}};o(n),o(n.engine);let i=n.open;typeof i=="function"&&(n.open=function(...l){let r=i.apply(this,l);return o(this?.engine),r}),n.__buoyRealTimers=true}var N="[ExternalSync]";function Se({socket:e,deviceId:n,getTools:o,watched:i,throttleMs:l=200,enableLogs:r=false}){let c=false,a=false,y=0,m=()=>!c&&a&&e.connected&&A.hasAccountAccess(),b=new Map,k={},h={},S=t=>t==="All"||t===n,f=(t,s)=>{if(m())try{e.emit(t,s)}catch(g){p(`${N} Failed to emit "${t}": ${g}. Payload must be JSON-serializable.`,r,"error")}},B=new Set,$=t=>{if(!m())return;let s=o()[t];if(!s)return;k[t]=x();let g;try{g=s.getSnapshot()}catch{return}let{over:I,approxBytes:O}=se(g,2097152);if(I){B.has(t)||(B.add(t),console.warn(`${N} "${t}" snapshot \u2248${(O/1e6).toFixed(1)}MB exceeds the ${2097152/1e6}MB sync budget \u2014 dropped (dashboard will be stale for this tool). The adapter should ship a wire-form snapshot (summaries + on-demand detail).`));return}let V={toolId:t,persistentDeviceId:n,timestamp:k[t],version:s.version,kind:"snapshot",payload:g};f("devtool-sync",V)},R=t=>{if(h[t])return;let s=x()-(k[t]??0);if(s>=l){$(t);return}h[t]=setTimeout(()=>{delete h[t],$(t)},l-s)},D=t=>{e.connected&&b.has(t)&&(h[t]&&(clearTimeout(h[t]),delete h[t]),$(t))};re(D);let w=new Map,L=(t,s)=>{if(!m())return;let g=o()[t];if(g){if(b.has(t)){if(w.get(t)===s)return;let I=b.get(t);b.set(t,g.subscribe(s==="stream"?()=>R(t):()=>{})),w.set(t,s),I?.(),p(`${N} "${t}" watch mode \u2192 ${s}`,r);return}b.set(t,g.subscribe(s==="stream"?()=>R(t):()=>{})),w.set(t,s),p(`${N} Watching "${t}" (${s})`,r)}},E=t=>{b.get(t)?.(),b.delete(t),w.delete(t),h[t]&&(clearTimeout(h[t]),delete h[t]),p(`${N} Stopped watching "${t}"`,r)},q=()=>{let t={persistentDeviceId:n,protocolVersion:1,tools:Object.entries(o()).map(([s,g])=>({toolId:s,version:g.version,actions:Object.keys(g.actions??{})}))};f("devtool-capabilities",t)},d=t=>{if(!(!m()||!S(t.targetDeviceId)))if(t.watching){let s=t.consolidated===true&&t.stream===false?"capture":"stream";i.set(t.toolId,s),L(t.toolId,s),s==="stream"&&$(t.toolId)}else i.delete(t.toolId),E(t.toolId)},u=t=>{!m()||!S(t.targetDeviceId)||$(t.toolId)},G=async t=>{if(!m()||!S(t.targetDeviceId))return;let s=y,{requestId:g,toolId:I,action:O,params:V}=t,v={requestId:g,toolId:I,action:O,persistentDeviceId:n,timestamp:x(),ok:false},ee=o()[I],te=ee?.actions?.[O];if(!te){v.error=ee?`Unknown action "${O}" on tool "${I}"`:`Unknown tool "${I}"`,f("devtool-action-result",v);return}try{v.result=await te(V),v.ok=true}catch(U){v.error=U instanceof Error?U.message:String(U)}if(!(s!==y||!m())){if(v.ok){let{over:U,approxBytes:me}=se(v.result,8388608);U&&(v.ok=false,v.result=void 0,v.error=`Result \u2248${(me/1e6).toFixed(1)}MB exceeds the ${8388608/1e6}MB sync budget. Narrow the request (e.g. includeValues:false, a limit, or a more specific action).`)}v.timestamp=x(),f("devtool-action-result",v)}},P=()=>{y+=1;for(let s of[...b.keys()])E(s);i.clear();for(let s of Object.values(h))clearTimeout(s);let t=e;t.sendBuffer&&(t.sendBuffer=t.sendBuffer.filter(s=>!["devtool-sync","devtool-capabilities","devtool-action-result","device-license"].includes(String(s.data?.[0]))))},H=()=>{let t=A.getState();e.emit("device-license",{tier:t.tier,isPro:t.isPro?"1":"0"}),q()},Q=t=>{a=t?.protocol===1&&t.ready===true,m()?H():P()},ge=A.subscribe(()=>{A.hasAccountAccess()?m()&&H():(e.connected&&e.emit("device-license",{tier:"locked",isPro:"0"}),P())}),F=()=>{a=false,e.emit("buoy:access:request")},Z=()=>{a=false,P()};e.on("buoy:access",Q);for(let[t,s]of i)o()[t]&&L(t,s);return e.on("connect",F),e.on("disconnect",Z),e.on("devtool-watch",d),e.on("request-devtool-state",u),e.on("devtool-action",G),e.connected&&F(),()=>{c=true,ge(),e.off("buoy:access",Q),P(),ce(D),e.off("connect",F),e.off("disconnect",Z),e.off("devtool-watch",d),e.off("request-devtool-state",u),e.off("devtool-action",G);for(let t of[...b.keys()])E(t)}}function Te({tools:e,socket:n,deviceId:o,enabled:i=true,throttleMs:l=200,enableLogs:r=false}){let c=he().status==="admitted",a=ne(e);a.current=e;let y=ne(new Map),m=Object.keys(e).sort().join(",");ve(()=>{if(!n||!o||!i||!c){y.current.clear();return}return Se({socket:n,deviceId:o,getTools:()=>a.current,watched:y.current,throttleMs:l,enableLogs:r})},[n,o,i,c,l,r,m])}function we(e,n){let o=()=>n(false),i=()=>{o(),e.emit("buoy:access:request")},l=r=>{let c=r;n(c?.protocol===1&&c?.ready===true)};return e.on("connect",i),e.on("disconnect",o),e.on("buoy:access",l),o(),e.connected&&i(),()=>{e.off("connect",i),e.off("disconnect",o),e.off("buoy:access",l)}}import{useEffect as J,useRef as ue,useState as W}from"react";import{io as Ee}from"socket.io-client";function Be(e,n){return e}var Re=42831;function De(e){return`http://${e??"localhost"}:42831`}function Oe(){return null}function fe(){return De(typeof location>"u"?null:location.hostname)}var z={targetURL:null,state:"idle",lastError:null,since:0},X=new Set;function T(e){z={...z,...e,since:x()},X.forEach(n=>n())}function Ue(){return z}function xe(e){return X.add(e),()=>{X.delete(e)}}var Ne=typeof oe<"u"?oe:false,_=null,C="",de="",pe="",Y=0,M=null,Me=2e3,ye=()=>`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;function Le(){let e=globalThis;return e.__buoyInstanceId||(e.__buoyInstanceId=ye()),e.__buoyInstanceId}function Pe(e){let n=o=>o&&Object.fromEntries(Object.entries(o).filter(([i])=>!["BUOY_LICENSE_KEY","BUOY_KEY","EXPO_PUBLIC_BUOY_KEY","VITE_BUOY_KEY","NEXT_PUBLIC_BUOY_KEY","REACT_APP_BUOY_KEY","licenseKey"].includes(i)));return{deviceName:e.deviceName,deviceId:e.persistentDeviceId,platform:e.platform,extraDeviceInfo:JSON.stringify(n(e.extraDeviceInfo)),envVariables:JSON.stringify(n(e.envVariables)),connectionNonce:ye(),instanceId:Le()}}function Ae({deviceName:e,socketURL:n,persistentDeviceId:o,extraDeviceInfo:i,envVariables:l,platform:r,enableLogs:c=false}){let a=ue(null),[y,m]=W(null),[b,k]=W(false),h=n??fe(),S=ue(false),f=`[${e}]`,B=()=>{p(`${f} Socket connected successfully`,c),S.current=false,k(true),T({state:"connected",lastError:null})},$=d=>{p(`${f} Socket disconnected. Reason: ${d}`,c),k(false),T({state:"retrying"})},R=d=>{if(T({state:"retrying",lastError:d.message}),!Ne||S.current)return;S.current=true;let u=r==="android"&&/localhost|127\.0\.0\.1/.test(C)?"If this device is connected over USB, run: adb reverse tcp:42831 tcp:42831. ":"If it's running on another machine or port, pass socketURL via the externalSync prop. ";p(`[buoy] desktop sync: can't reach ${C} (is Buoy Desktop running?). Retrying in the background. ${u}(${d.message})`,c,"warn")},D=()=>{p(`${f} Socket connection timeout`,c,"error")};J(()=>{if(!o)return;let d=Be(h,r);T({targetURL:d,state:"connecting",lastError:null}),p(`${f} Platform: ${r}, using URL: ${d}`,c);try{_&&(C!==d||de!==o||pe!==r)&&(_.disconnect(),_=null),_?p(`${f} Reusing existing socket instance to ${d}`,c):(p(`${f} Creating new socket instance to ${d}`,c),_=Ee(d,{autoConnect:true,query:Pe({deviceName:e,persistentDeviceId:o,platform:r,extraDeviceInfo:i,envVariables:l}),reconnection:true,reconnectionAttempts:1/0,reconnectionDelay:1e3,reconnectionDelayMax:5e3,transports:["websocket"]}),ke(_),C=d,de=o,pe=r),a.current=_;let u=a.current;return Y++,M&&(le(M),M=null),m(u),u.on("connect_error",R),u.on("connect_timeout",D),k(u.connected),u.connected&&p(`${f} Socket already connected on init`,c),u.on("connect",B),u.on("disconnect",$),()=>{p(`${f} Cleaning up socket event listeners`,c),u.off("connect",B),u.off("disconnect",$),u.off("connect_error",R),u.off("connect_timeout",D),Y--,Y===0&&(M=ae(()=>{M=null,!(Y>0||_!==u)&&(p(`${f} No longer used; disconnecting`,c),u.disconnect(),_=null,T({state:"idle",lastError:null}))},Me))}}catch(u){p(`${f} Failed to initialize socket: ${u}`,c,"error")}},[o,h,r]),J(()=>{a.current&&a.current.io.opts.query&&o&&(p(`${f} Updating device name in socket connection`,c),a.current.io.opts.query={...a.current.io.opts.query,deviceName:e,deviceId:o,platform:r})},[e,f,o,r,c]);function w(){a.current&&!a.current.connected&&(p(`${f} Manually connecting to socket server`,c),a.current.connect())}function L(){a.current&&a.current.connected&&(p(`${f} Manually disconnecting from socket server`,c),a.current.disconnect())}let[E,q]=W(null);return J(()=>{if(y)return we(y,d=>{q(d?y:null),T(d?{state:"connected",lastError:null}:{state:"retrying",lastError:"Update Buoy Desktop and sign in to enable desktop sync."})})},[y]),{socket:E===y?y:null,connect:w,disconnect:L,isConnected:b&&E===y&&y!==null}}export{Re as DEFAULT_BROKER_PORT,_e as SYNC_PROTOCOL_VERSION,be as flushToolSyncNow,fe as getDefaultSocketURL,Oe as getMetroHost,Ue as getSyncStatus,re as registerToolFlusher,T as setSyncStatus,xe as subscribeSyncStatus,ce as unregisterToolFlusher,Te as useExternalSync,Ae as useExternalSyncSocket};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/external-sync",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.57",
|
|
4
4
|
"description": "Generic device-to-desktop sync for Buoy dev tools",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"sideEffects": false,
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"socket.io-client": "^4.8.1",
|
|
38
|
-
"@buoy-gg/license": "^7.0.
|
|
38
|
+
"@buoy-gg/license": "^7.0.57"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"react": "*"
|