UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

31 lines 14.4 kB
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./logbook-view-D39J0MyY.js","./rolldown-runtime-DkW27tQK.js","./control-ui-core-Rwzhj6nO.js","./control-ui-foundation-Cydpkyqa.js","./lit-runtime-CV_MH99K.js","./control-ui-core-YphAl4aM.js","./control-ui-core-vvcQQV2m.js","./gateway-runtime-Bqqcp9-I.js","./control-ui-core-ClxHIvNM.css","./control-ui-boot-shared-DfZ39Yj9.js","./control-ui-boot-shared-BYq7Cchl.js","./control-ui-boot-shared-Deak_Sjt.js","./control-ui-boot-shared-gfE6fZcA.js","./markdown-runtime-Bn6OdBVq.js","./control-ui-boot-shared-CXVvK2AW.js","./control-ui-boot-shared-3juXI2I2.js","./control-ui-boot-shared-BVNXvWX-.js","./control-ui-boot-shared-KspYIvAF.css","./logbook-controller-Cc6O3lSD.js","./logbook-view-Da1oyswH.css","./logbook-controller-DrCwqyGu.js"])))=>i.map(i=>d[i]); import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{A as t,M as n,N as r,O as i,R as a,ii as o,j as s,ri as c,wr as l,z as u}from"./control-ui-foundation-Cydpkyqa.js";import{Bn as d,Sc as f,ii as p,n as m,ni as h,r as g,yc as _,zn as v}from"./control-ui-core-Rwzhj6nO.js";import{$ as y,K as b,X as x,at as S,q as C,st as w}from"./lit-runtime-CV_MH99K.js";import{Gt as T,Kt as E,Qt as D,Vt as O,Wt as k,_ as A,g as j,nn as M}from"./control-ui-core-YphAl4aM.js";import{Nt as N,Ot as P,Pt as F,Yt as I,en as L,jt as R}from"./control-ui-core-vvcQQV2m.js";import{_r as z,br as B}from"./control-ui-boot-chat-_QSl8fbH.js";import{E as V,T as H}from"./control-ui-boot-new-Bj2SAUyl.js";import{n as U,t as W}from"./control-ui-disabled-2SNbmzuV.js";function G(e,t){if(!t.path||e.pluginId!==t.pluginId)return!1;let n=r(t.path);return n?e.match===`exact`?n===e.path:n===e.path||n.startsWith(e.path)&&(e.path.endsWith(`/`)||n.at(e.path.length)===`/`):!1}var K,q,J,Y;function X(){return(X=e((()=>{u(),b(),y(),n(),A(),M(),O(),P(),N(),I(),H(),z(),f(),d(),W(),m(),h(),o(),V(),K=1e4,q=5e3,J={"logbook/logbook":async()=>{let[{renderLogbook:e},{stopLogbookPolling:t}]=await Promise.all([c(()=>import(`./logbook-view-D39J0MyY.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),import.meta.url),c(()=>import(`./logbook-controller-DrCwqyGu.js`),__vite__mapDeps([20,18,1,2,3,4,5,6,7,8]),import.meta.url)]);return{render:e,stop:t}}},Y=class extends _{constructor(...e){super(...e),this.pluginId=``,this.tabId=``,this.params={},this.bundledViewState={status:`idle`},this.externalAuthReadyKey=null,this.externalAuthUnavailableKey=null,this.bundledViewHost={},this.gatewayClient=null,this.gatewayConnected=!1,this.externalAuthTargetKey=null,this.externalAuthRefreshMarker=null,this.externalAuthRefreshAbortController=null,this.externalAuthRefreshWatchdog=null,this.externalAuthProbeMarker=null,this.externalAuthProbeAbortController=null,this.externalAuthRestartKey=null,this.externalAuthRefreshTimer=null,this.externalAuthExpiryTimer=null,this.externalAuthRefreshedAt=0,this.subscriptions=new v(this).watch(()=>this.context?.gateway,(e,t)=>e.subscribe(t),e=>this.updateGatewaySource(e)).watch(()=>this.context?.sessions,(e,t)=>e.subscribe(t)).watch(()=>this.context?.plugins,(e,t)=>e.subscribe(t)),this.handleVisibilityChange=()=>{if(!(document.visibilityState!==`visible`||!this.externalAuthTargetKey)){if(Date.now()-this.externalAuthRefreshedAt>=3e5){this.externalAuthReadyKey=null,this.externalAuthRefreshedAt=0,this.requestExternalTabAuthRestart(this.externalAuthTargetKey);return}this.refreshExternalTabAuth(this.externalAuthTargetKey)}},this.retryBundledView=()=>{let e=this.bundledViewState;e.status!==`error`||!this.hasCurrentBundledDescriptor(e.id)||(k(e.error)?T():this.bundledViewState={status:`idle`})}}connectedCallback(){super.connectedCallback(),document.addEventListener(`visibilitychange`,this.handleVisibilityChange)}disconnectedCallback(){document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),this.clearExternalTabAuth(),this.subscriptions.clear(),this.stopBundledView(),super.disconnectedCallback()}tabKey(){return p({pluginId:this.pluginId,id:this.tabId})}loadBundledView(e){let t=J[e];return t?t():Promise.reject(Error(`Unknown bundled plugin tab: ${e}`))}hasCurrentBundledDescriptor(e){return this.tabKey()===e&&this.tabInfo()!==void 0&&e in J}startBundledViewLoad(e){let t={status:`loading`,id:e,token:{}};this.bundledViewState=t;let n=n=>{this.bundledViewState.status!==`loading`||this.bundledViewState.token!==t.token||!this.hasCurrentBundledDescriptor(e)||(this.bundledViewState=n,n.status===`error`&&k(n.error)&&E())};this.loadBundledView(e).then(t=>n({status:`ready`,id:e,view:t}),t=>n({status:`error`,id:e,error:t}))}willUpdate(){if(!this.isConnected)return;let e=this.tabKey(),t=this.tabInfo(),n=t!==void 0&&e in J,r=this.bundledViewState;r.status!==`idle`&&(r.id!==e||!n)&&this.stopBundledView(),this.bundledViewState.status===`idle`&&n&&this.startBundledViewLoad(e),this.syncExternalTabAuth(t,n)}externalTabAuthKey(e,t){return e?.path&&e.requiresGatewayAuth===!0&&!t&&this.isExternalTabAuthSupported()?`${this.tabKey()}\n${e.path}`:null}isExternalTabAuthSupported(){return window.isSecureContext}probeExternalTabAuth(e,n){let r=new URL(e,window.location.href);if(r.origin!==window.location.origin)return Promise.resolve(!1);let i=new Uint8Array(16);crypto.getRandomValues(i);let a=Array.from(i,e=>e.toString(16).padStart(2,`0`)).join(``);return r.searchParams.set(s,a),r.searchParams.set(t,window.location.origin),new Promise(e=>{let t=document.createElement(`iframe`);t.hidden=!0,t.setAttribute(`aria-hidden`,`true`),t.setAttribute(`sandbox`,`allow-scripts`);let i=null,o=r=>{i&&clearTimeout(i),window.removeEventListener(`message`,s),n.removeEventListener(`abort`,c),t.remove(),e(r)},s=e=>{e.source===t.contentWindow&&e.data?.type===`openclaw-plugin-frame-auth-probe`&&e.data?.nonce===a&&o(!0)},c=()=>o(!1);window.addEventListener(`message`,s),n.addEventListener(`abort`,c,{once:!0}),i=setTimeout(()=>o(!1),q),t.src=r.toString(),document.body.append(t)})}syncExternalTabAuth(e,t){let n=this.externalTabAuthKey(e,t);this.externalAuthTargetKey!==n&&(this.clearExternalTabAuth(),this.externalAuthTargetKey=n),n&&this.externalAuthReadyKey!==n&&this.externalAuthUnavailableKey!==n&&this.refreshExternalTabAuth(n)}refreshExternalTabAuth(e){let t=this.context;if(!t||t.gateway.snapshot.phase!==`connected`||this.externalAuthTargetKey!==e||this.externalAuthRefreshMarker||this.externalAuthProbeMarker)return;let n={},r=Date.now(),i=new AbortController;this.externalAuthUnavailableKey=null,this.externalAuthRefreshMarker=n,this.externalAuthRefreshAbortController=i,this.externalAuthRefreshWatchdog=setTimeout(()=>{this.externalAuthRefreshMarker===n&&this.requestExternalTabAuthRestart(e)},K),t.config.refresh({signal:i.signal}).then(t=>{if(this.externalAuthRefreshMarker!==n||this.externalAuthTargetKey!==e)return;if(this.finishExternalTabAuthRefreshAttempt(e)){this.refreshExternalTabAuth(e);return}let i=this.tabInfo(),a=i?.path;t!==null&&i!==void 0&&a!==void 0&&t.pluginFrameGrants.some(e=>G(e,i))?this.startExternalTabAuthProbe(e,a,r):t?(this.externalAuthReadyKey=null,this.externalAuthUnavailableKey=e,this.externalAuthRefreshedAt=0):this.scheduleExternalTabAuthRefresh(e,!1)}).catch(()=>{this.externalAuthRefreshMarker===n&&this.externalAuthTargetKey===e&&(this.finishExternalTabAuthRefreshAttempt(e)?this.refreshExternalTabAuth(e):this.scheduleExternalTabAuthRefresh(e,!1))})}startExternalTabAuthProbe(e,t,n){this.cancelExternalTabAuthProbe();let r={},i=new AbortController;this.externalAuthProbeMarker=r,this.externalAuthProbeAbortController=i;let a;try{a=this.probeExternalTabAuth(t,i.signal)}catch{a=Promise.resolve(!1)}a.catch(()=>!1).then(t=>{if(this.externalAuthProbeMarker===r&&this.externalAuthTargetKey===e){if(this.externalAuthProbeMarker=null,this.externalAuthProbeAbortController=null,t){this.externalAuthReadyKey=e,this.externalAuthRefreshedAt=n,this.scheduleExternalTabAuthExpiry(e,n),this.scheduleExternalTabAuthRefresh(e,!0);return}this.externalAuthReadyKey=null,this.externalAuthUnavailableKey=e,this.externalAuthRefreshedAt=0,this.externalAuthRefreshTimer&&=(clearTimeout(this.externalAuthRefreshTimer),null),this.externalAuthExpiryTimer&&=(clearTimeout(this.externalAuthExpiryTimer),null)}})}cancelExternalTabAuthProbe(){this.externalAuthProbeMarker=null;let e=this.externalAuthProbeAbortController;this.externalAuthProbeAbortController=null,e?.abort()}finishExternalTabAuthRefreshAttempt(e){let t=this.externalAuthRestartKey===e;return this.externalAuthRefreshWatchdog&&clearTimeout(this.externalAuthRefreshWatchdog),this.externalAuthRefreshWatchdog=null,this.externalAuthRefreshAbortController=null,this.externalAuthRefreshMarker=null,this.externalAuthRestartKey=null,t}requestExternalTabAuthRestart(e){if(this.externalAuthTargetKey===e){if(this.externalAuthRefreshMarker){this.externalAuthRestartKey=e,this.externalAuthRefreshAbortController?.abort();return}this.externalAuthProbeMarker&&this.cancelExternalTabAuthProbe(),this.refreshExternalTabAuth(e)}}scheduleExternalTabAuthExpiry(e,t){this.externalAuthExpiryTimer&&clearTimeout(this.externalAuthExpiryTimer);let n=Math.max(0,t+i-Date.now());this.externalAuthExpiryTimer=setTimeout(()=>{this.externalAuthExpiryTimer=null,this.externalAuthTargetKey===e&&this.externalAuthReadyKey===e&&(this.externalAuthReadyKey=null,this.externalAuthRefreshedAt=0,this.externalAuthRefreshTimer&&=(clearTimeout(this.externalAuthRefreshTimer),null),this.requestExternalTabAuthRestart(e))},n)}scheduleExternalTabAuthRefresh(e,t){this.externalAuthRefreshTimer&&clearTimeout(this.externalAuthRefreshTimer);let n=t?i/2:5e3;this.externalAuthRefreshTimer=setTimeout(()=>{this.externalAuthRefreshTimer=null,this.refreshExternalTabAuth(e)},n)}clearExternalTabAuth(){this.externalAuthRefreshTimer&&clearTimeout(this.externalAuthRefreshTimer),this.externalAuthExpiryTimer&&clearTimeout(this.externalAuthExpiryTimer),this.externalAuthRefreshWatchdog&&clearTimeout(this.externalAuthRefreshWatchdog),this.externalAuthRefreshAbortController?.abort(),this.cancelExternalTabAuthProbe(),this.externalAuthRefreshTimer=null,this.externalAuthExpiryTimer=null,this.externalAuthRefreshWatchdog=null,this.externalAuthRefreshAbortController=null,this.externalAuthRefreshMarker=null,this.externalAuthRestartKey=null,this.externalAuthTargetKey=null,this.externalAuthReadyKey=null,this.externalAuthUnavailableKey=null,this.externalAuthRefreshedAt=0}resetExternalTabAuthForGatewayChange(e,t){this.externalAuthRefreshTimer&&=(clearTimeout(this.externalAuthRefreshTimer),null),this.externalAuthExpiryTimer&&=(clearTimeout(this.externalAuthExpiryTimer),null),this.externalAuthReadyKey=null,this.externalAuthUnavailableKey=null,this.externalAuthRefreshedAt=0,this.externalAuthTargetKey=e,this.cancelExternalTabAuthProbe(),this.externalAuthRefreshMarker?(this.externalAuthRestartKey=t?e:null,this.externalAuthRefreshAbortController?.abort()):t&&this.refreshExternalTabAuth(e)}stopBundledView(){this.replaceBundledViewHost(),this.bundledViewState={status:`idle`}}replaceBundledViewHost(){this.bundledViewState.status===`ready`&&this.bundledViewState.view.stop(this.bundledViewHost),this.bundledViewHost={}}updateGatewaySource(e){let{client:t}=e.snapshot,n=e.snapshot.phase===`connected`;if(this.gatewaySource===e&&this.gatewayClient===t&&this.gatewayConnected===n)return;let r=this.externalAuthTargetKey;this.replaceBundledViewHost(),this.gatewaySource=e,this.gatewayClient=t,this.gatewayConnected=n,r&&this.resetExternalTabAuthForGatewayChange(r,n)}tabInfo(){return(this.context?.gateway.snapshot.hello?.controlUiTabs??[]).find(e=>e.pluginId===this.pluginId&&e.id===this.tabId)}render(){let e=this.context;if(!e)return C;let t=this.tabInfo();if(e.plugins?.registrations(`pages`).some(e=>e.key===this.tabKey()))return g(`pages`,this.tabKey(),this.params);if(t&&this.tabKey()in J){let t=this.bundledViewState;if(t.status===`loading`)return F();if(t.status===`error`)return R({error:t.error,onRetry:this.retryBundledView,stale:k(t.error)});if(t.status!==`ready`)return C;let n=e.gateway.snapshot,r=e.config?.current;return t.view.render({host:this.bundledViewHost,client:n.client,connected:n.phase===`connected`,embed:r?{embedSandboxMode:r.embedSandboxMode,allowExternalEmbedUrls:r.allowExternalEmbedUrls}:void 0,onRequestUpdate:()=>this.requestUpdate(),basePath:e.basePath,sessionKey:n.sessionKey,sessionListRevision:e.sessions?.canonicalListRevision,canApproveWidgets:D(n.hello?.auth??null)})}if(t?.path){if(t.requiresGatewayAuth===!0&&!this.isExternalTabAuthSupported())return x` <section class="card lazy-view-state" role="status"> <div class="card-title">${L(`login.failure.insecure.title`)}</div> <div class="card-sub">${L(`login.failure.insecure.stepHttps`)}</div> </section> `;let n=this.externalTabAuthKey(t,!1);return t.requiresGatewayAuth===!0&&this.externalAuthUnavailableKey===n?x` <section class="card lazy-view-state" role="status"> <div class="card-title">${L(`pluginTabs.unavailableTitle`)}</div> <div class="card-sub">${L(`pluginTabs.unavailableSubtitle`)}</div> </section> `:t.requiresGatewayAuth===!0&&this.externalAuthReadyKey!==n?C:x` <section class="plugin-tab-embed"> <iframe class="plugin-tab-embed__frame" src=${t.path} title=${t.label} sandbox=${B(e.config.current.embedSandboxMode)} ></iframe> </section> `}if(e.gateway.snapshot.phase!==`connected`||e.plugins?.isLoading(this.pluginId))return F();let n=U(e,this.pluginId);return x` <section class="card lazy-view-state" role="status"> ${n??x` <div class="card-title">${L(`pluginTabs.unavailableTitle`)}</div> <div class="card-sub"> ${e.plugins?.errors.find(e=>e.pluginId===this.pluginId)?.message??L(`pluginTabs.unavailableSubtitle`)} </div> `} </section> `}},l([w({attribute:!1})],Y.prototype,`pluginId`,void 0),l([w({attribute:!1})],Y.prototype,`tabId`,void 0),l([w({attribute:!1})],Y.prototype,`params`,void 0),l([a({context:j,subscribe:!0})],Y.prototype,`context`,void 0),l([S()],Y.prototype,`bundledViewState`,void 0),l([S()],Y.prototype,`externalAuthReadyKey`,void 0),l([S()],Y.prototype,`externalAuthUnavailableKey`,void 0),customElements.get(`openclaw-plugin-page`)||customElements.define(`openclaw-plugin-page`,Y)})))()}X(); //# sourceMappingURL=plugin-page-BAugq65i.js.map