openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
1 lines • 6.82 kB
JavaScript
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Yr as t}from"./ui-DuRgK6kL.js";import{C as n,_ as r,b as i,c as a,f as o,k as s,p as c,w as l}from"./config-runtime-BecGLziM.js";var u,d;function f(){return(f=e((()=>{r(),u=a([`inspect`,`install`,`verify`]),d=l({action:u,target:l({kind:i(`local-host`),platform:a([`darwin`,`linux`,`win32`]),hostname:s().min(1).max(255),profile:s().regex(/^[a-z0-9][a-z0-9-]{0,63}$/),relayPort:n().int().min(1).max(65535)}),phase:a([`inspection_required`,`preparing`,`needs_browser_action`,`waiting_for_connection`,`ready`,`blocked`]),reason:s().regex(/^[a-z][a-z0-9_]{0,79}$/),installation:l({nativeHostRegistered:c(),installRequested:c(),installedProfiles:n().int().nonnegative(),discoveredProfiles:n().int().nonnegative(),awaitingApproval:c(),automaticBootstrapSupported:c()}),connection:l({state:a([`not_checked`,`unavailable`,`waiting_for_extension`,`connected`]),extensionVersion:s().max(128).optional()}),nextAction:a([`none`,`install`,`open_chrome`,`approve_extension`,`install_from_store`,`check_connection`,`repair_native_host`,`unsupported`])})})))()}function p(){if(typeof window>`u`)return null;let e=window,n=e.webkit?.messageHandlers?.openclawDeviceSettings;if(typeof n?.postMessage!=`function`)return null;let r=n.postMessage,i=r.bind(n),a=g.safeParse(e.__OPENCLAW_NATIVE_DEVICE_SETTINGS__),o=a.success?a.data:null,s=!1,c=()=>!s&&e.webkit?.messageHandlers?.openclawDeviceSettings===n&&n.postMessage===r,l=new Set,f=e=>o?.revision!==void 0&&(e.revision===void 0||e.revision<=o.revision)?!1:(o=e,!0),p=e=>{if(!(e instanceof CustomEvent))return;let t=g.safeParse(e.detail);t.success&&f(t.data)&&l.forEach(e=>e(t.data))},m=async(e,t)=>{let n;try{let t=await i(e);if(s)return;if(e.type===`set`){let e=g.safeParse(t);if(!e.success)throw Error(`Native settings returned an invalid edit result`);f(e.data)}}catch(e){n=e instanceof Error?e:Error(String(e)),console.warn(`Native device settings request failed`,e)}if(!s&&e.type===`set`){t?.(n);let e=o;e&&l.forEach(t=>t(e))}},h=()=>void m({type:`status`});window.addEventListener(y,p),window.addEventListener(`focus`,h),h();let b=async e=>{if(!c()||o?.device.platform!==`macos`)throw Error(`Native device settings is unavailable`);let t=await i({type:e}),n=(e===`chrome-extension-status`?v:_).safeParse(t);if(!c()||o?.device.platform!==`macos`||!n.success)throw Error(`Native Chrome setup returned an invalid result`);return n.data};return{get snapshot(){return o},subscribe:e=>t(l,e),set:(e,t,n)=>void m({type:`set`,key:e,value:t},n),requestPermission:e=>void m({type:`request-permission`,id:e}),openSystemSettings:e=>void m({type:`open-system-settings`,id:e}),openPanel:e=>void m({type:`open`,panel:e}),checkForUpdates:()=>void m({type:`check-for-updates`}),async setupChromeExtension(e){if(!c())throw Error(`Native device settings is unavailable`);if(!o?.browser?.chromeSetupActions?.includes(e))throw Error(`This native host does not advertise that Chrome setup action`);let t=o.device.platform,n={macos:`darwin`,linux:`linux`,windows:`win32`,ios:null}[t];if(!n)throw Error(`Native Chrome setup is unavailable on this device`);let r=u.parse(e),a=await i({type:`chrome-extension-setup`,action:r}),s=d.safeParse(a);if(!c()||!o?.browser?.chromeSetupActions?.includes(e)||!s.success||s.data.action!==e||o.device.platform!==t||s.data.target.platform!==n)throw Error(`Native Chrome setup returned an invalid result`);return s.data},installChromeExtension:()=>b(`install-chrome-extension`),chromeExtensionStatus:()=>b(`chrome-extension-status`),refresh:h,dispose(){s=!0,window.removeEventListener(y,p),window.removeEventListener(`focus`,h),l.clear()}}}var m,h,g,_,v,y;function b(){return(b=e((()=>{r(),f(),m=a([`notifications`,`accessibility`,`screenRecording`,`microphone`,`camera`,`speechRecognition`,`location`,`contacts`,`calendars`,`reminders`,`photos`]),h=o(l({id:s(),name:s()})),g=l({contract:i(1),revision:n().int().nonnegative().optional(),device:l({platform:a([`macos`,`ios`,`linux`,`windows`]),formFactor:a([`phone`,`pad`,`desktop`]).optional(),modelName:s().optional(),appVersion:s(),appBuild:s(),profileName:s().nullable()}),app:l({appearance:a([`system`,`light`,`dark`]).optional(),notificationsEnabled:c().optional(),showDockIcon:c().optional(),nativeExperienceEnabled:c().optional(),iconStyle:l({selectedId:s(),available:h}).optional(),iconAnimationsEnabled:c().optional(),launchAtLogin:c().optional(),launchAtLoginAvailable:c().optional(),keepGatewayRunning:c().optional(),keepGatewayRunningAvailable:c().optional(),quickChatEnabled:c().optional(),quickChatShortcut:s().nullable().optional(),debugPaneEnabled:c().optional()}).optional(),capabilities:l({canvasEnabled:c().optional(),cameraEnabled:c().optional(),keepAwakeEnabled:c().optional(),healthSummaryAvailable:c().optional(),healthSummaryEnabled:c().optional(),computerControlEnabled:c().optional(),desktopSharingEnabled:c().optional(),computerControlProvider:a([`peekaboo`,`cua`]).optional(),cuaDriverBundled:c().optional(),peekabooBridgeEnabled:c().optional(),activeComputerPresenceEnabled:c().optional(),unattendedDesktopEnabled:c().optional()}).optional(),desktopAvailability:l({state:a([`locked`,`unlocked`,`unknown`])}).optional(),desktopSharing:l({state:a([`off`,`starting`,`running`,`error`]),detail:s().optional()}).optional(),browser:l({chromeSetupActions:o(u).optional(),importAvailable:c().optional(),cookieSync:l({available:c(),enabled:c(),domains:o(s()),targetProfile:s(),state:a([`off`,`idle`,`running`,`error`]),detail:s().nullable()}).optional()}).optional(),permissions:l({entries:o(l({id:m.or(i(`automation`)),status:a([`granted`,`denied`,`notDetermined`,`unavailable`,`limited`])})).refine(e=>new Set(e.map(e=>e.id)).size===e.length).transform(e=>e.flatMap(({id:e,status:t})=>e===`automation`?[]:[{id:e,status:t}])),location:l({mode:a([`off`,`whileUsing`,`always`]),precise:c(),preciseEditable:c().optional()}).optional()}),voice:l({supported:c(),wakeEnabled:c(),wakeTriggersTalkMode:c().optional(),pushToTalkEnabled:c().optional(),talkPhaseSoundsEnabled:c().optional(),talkShiftToStopEnabled:c().optional(),realtimeRelayEnabled:c().optional(),triggerChime:c().optional(),sendChime:c().optional(),talkEnabled:c().optional(),talkButtonEnabled:c().optional(),talkBackgroundEnabled:c().optional(),speakerphoneEnabled:c().optional(),microphone:l({selectedId:s().nullable(),devices:h}).optional(),locale:l({primary:s(),additional:o(s()),available:h}).optional()}),updates:l({available:c(),automatic:c(),unavailableReason:s().nullable()}).optional()}),_=l({nativeHostRegistered:c(),installRequested:c(),installedProfiles:n().int().nonnegative().optional(),discoveredProfiles:n().int().nonnegative()}),v=_.required({installedProfiles:!0}),y=`openclaw:native-device-settings-changed`})))()}b();export{p as createNativeDeviceSettingsCapability};