openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
1 lines • 1.53 kB
JavaScript
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Ta as t}from"./control-ui-core-DtLivg_r.js";import{ea as n}from"./ui-CmSP4d14.js";function r(e){return e===`granted`||e===`denied`||e===`notDetermined`}function i(e){if(typeof e!=`object`||!e||!(`permission`in e)||!r(e.permission))return null;if(!(`test`in e)||e.test===null)return{permission:e.permission,test:null};let t=e.test;return typeof t!=`object`||!t||!(`state`in t)?null:t.state===`pending`||t.state===`sent`?{permission:e.permission,test:{state:t.state}}:t.state===`error`&&`message`in t&&typeof t.message==`string`?{permission:e.permission,test:{state:`error`,message:t.message}}:null}function a(){let e=t()?.webkit?.messageHandlers?.openclawNotifications,r=e?.postMessage.bind(e);if(!r)return null;let a=i(window.__OPENCLAW_NATIVE_NOTIFICATIONS__)??{permission:`unknown`,test:null},s=new Set,c=e=>{a=e;for(let e of s)e(a)},l=e=>{let t=i(e.detail);t&&c(t)},u=()=>r({type:`status`});return window.addEventListener(o,l),window.addEventListener(`focus`,u),u(),{get snapshot(){return a},subscribe:e=>n(s,e),requestPermission(){r({type:`request-permission`})},sendTest(){a.test?.state!==`pending`&&(c({...a,test:{state:`pending`}}),r({type:`send-test`}))},backgroundSessionCompleted(e){r({type:`background-session-completed`,...e})},dispose(){window.removeEventListener(o,l),window.removeEventListener(`focus`,u),s.clear()}}}var o;function s(){return(s=e((()=>{o=`openclaw:native-notifications-status`})))()}s();export{a as createNativeNotificationsCapability};