110 lines
15 KiB
JavaScript
110 lines
15 KiB
JavaScript
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{er as t,ki as n,wn as r}from"./control-ui-foundation-CeFMP1Ly.js";import{dc as i,fl as a,fs as o,ml as s,ms as c,uc as l,vr as u,yr as d}from"./control-ui-core-pH6nakZ-.js";import{G as f,J as p,W as ee,Z as m,rt as h}from"./lit-runtime-BEtFSUCp.js";import{Cn as g,ln as _,m as te,p as ne}from"./control-ui-core-DGVkFhVB.js";import{Ht as re,qt as v}from"./control-ui-core-Br5DB0Zj.js";import{In as y,Ln as b}from"./control-ui-boot-wpHCbPL9.js";import{n as x,r as S}from"./gateway-runtime-DUNO4Mi1.js";import{Ca as C,Cn as w,Sn as T,bn as ie,cn as ae,gn as E,hn as oe,mn as D,on as O,sn as k,un as A,vn as j,wa as M}from"./control-ui-boot-Cdpgu1Gm.js";import{n as N,t as P}from"./settings-workspace-Bo4nqRhI.js";import{n as F,t as I}from"./gateway-page-controller-bzyUg03c.js";function L(e){let t=r(e.cloudWorkers)?e.cloudWorkers:null;return r(t?.profiles)?t.profiles:{}}function R(e){return r(e.settings)?e.settings:{}}function z(e,t){return n(e[t])??``}function B(e){return e?Object.entries(L(e)).flatMap(([e,t])=>{if(!r(t))return[];let i=R(t);return[{id:e,providerId:n(t.provider)??``,install:t.install===`npm`?`npm`:`bundle`,backend:z(i,`provider`),machineClass:z(i,`class`),ttl:z(i,`ttl`),idleTimeout:z(i,`idleTimeout`),setup:z(i,`setup`),desktop:i.desktop===!0,binary:z(i,`binary`)}]}).toSorted((e,t)=>e.id.localeCompare(t.id)):[]}function V(e){return{id:e?.id??``,backend:e?.backend??``,machineClass:e?.machineClass??``,ttl:e?.ttl||`8h`,idleTimeout:e?.idleTimeout||`45m`,setup:e?.setup??``,desktop:e?.desktop??!1,binary:e?.binary??``}}function H(e,t,n){let r=e.id.trim();if(!K.test(r)||r!==e.id)return`profileId`;if(!n&&Object.hasOwn(t,r))return`profileExists`;if(n&&!Object.hasOwn(t,n))return`profileMissing`;if(!e.backend.trim())return`backend`;let i=e.machineClass.trim();if(!i||i.length>128)return`machineClass`;if(!q.test(e.ttl.trim()))return`ttl`;if(!q.test(e.idleTimeout.trim()))return`idleTimeout`;let a=e.binary.trim();return a&&!a.startsWith(`/`)&&!J.test(a)?`binary`:null}function U(e,t,i){let a=L(e),o=H(t,a,i);if(o)return{error:o};let s=i??t.id,c=r(a[s])?a[s]:{},l=R(c);if(i&&(n(c.provider)!==`crabbox`||!z(l,`class`)))return{error:`profileMissing`};let u={...l,provider:t.backend.trim(),class:t.machineClass.trim(),ttl:t.ttl.trim(),idleTimeout:t.idleTimeout.trim(),setup:t.setup.trim()||null,...t.setup.trim()||!Array.isArray(l.setupEnv)||l.setupEnv.length===0?{}:{setupEnv:null},desktop:t.desktop?!0:null,binary:t.binary.trim()||null},d={...c,provider:n(c.provider)??`crabbox`,install:c.install===`npm`?`npm`:`bundle`,settings:u};return{patch:{cloudWorkers:{profiles:{...a,[s]:d}}}}}function W(e,t){let n=L(e);if(!Object.hasOwn(n,t))return{error:`profileMissing`};let i=r(e.cloudWorkers)?e.cloudWorkers:null,a=r(i?.projectProfiles)?i.projectProfiles:{},o=Object.fromEntries(Object.entries(a).filter(([,e])=>e===t).map(([e])=>[e,null]));return{patch:{cloudWorkers:{profiles:{...n,[t]:null},...Object.keys(o).length>0?{projectProfiles:o}:{}}}}}function G(e,t,n){return n?t.has(e)?`advertised`:`restart-required`:`loading`}var K,q,J;function Y(){return(Y=e((()=>{K=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/u,q=/^(?=.*[1-9])\+?(?:(?:\d+(?:\.\d*)?|\.\d+)(?:ns|us|µs|μs|ms|s|m|h))+$/u,J=/^[A-Za-z]:[\\/]/u})))()}function X(e){let t=e.currentTarget;return t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement?t.value:``}var Z,Q;function $(){return($=e((()=>{b(),ee(),m(),_(),te(),C(),O(),P(),re(),l(),c(),S(),F(),s(),d(),Y(),Z=`https://docs.openclaw.ai/gateway/cloud-workers`,Q=class extends a{constructor(...e){super(...e),this.advertisedProfileIds=new Set,this.catalogLoaded=!1,this.catalogLoading=!1,this.catalogError=null,this.editor=null,this.draft=V(),this.formError=null,this.notice=null,this.busyProfileId=null,this.gateway=new I(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>this.resetGatewayState(),onSnapshot:e=>{e.initial&&this.resetGatewayState()},ensureInitialData:()=>void this.loadCatalog()}),this.subscriptions=new u(this).effect(()=>this.context?.runtimeConfig,e=>(e.ensureLoaded(),e.subscribe(()=>this.requestUpdate())))}disconnectedCallback(){this.subscriptions.clear(),super.disconnectedCallback()}resetGatewayState(){this.busyProfileId=null,this.advertisedProfileIds=new Set,this.catalogLoaded=!1,this.catalogLoading=!1,this.catalogError=null}async loadCatalog(){if(this.catalogLoading||this.catalogLoaded)return;let e=this.gateway.capture();if(!e||!x(this.gateway.snapshot,`environments.list`,`operator.admin`)){this.catalogLoaded=!0;return}this.catalogLoading=!0,this.catalogError=null;try{let t=await e.client.request(`environments.list`,{});if(!this.gateway.isCurrent(e))return;this.advertisedProfileIds=new Set((t.profiles??[]).map(e=>e.id)),this.catalogLoaded=!0}catch(t){this.gateway.isCurrent(e)&&(this.catalogError=o(t),this.catalogLoaded=!0)}finally{this.gateway.isCurrent(e)&&(this.catalogLoading=!1)}}editableConfig(){return i(this.context?.runtimeConfig.state.configSnapshot)}profiles(){return B(this.editableConfig())}hasManageAccess(){return x(this.gateway.snapshot,`config.patch`,`operator.admin`)}canManage(){let e=this.context?.runtimeConfig.state;return!!(this.hasManageAccess()&&e?.configSnapshot?.hash&&!e.configLoading&&!e.configSaving&&this.busyProfileId===null)}openAdd(){this.canManage()&&(this.editor={kind:`add`},this.draft=V(),this.formError=null,this.notice=null)}openEdit(e){if(this.canManage()){if(e.providerId!==`crabbox`||!e.machineClass){this.context.navigate(`advanced`,{search:`?section=cloudWorkers`});return}this.editor={kind:`edit`,profileId:e.id},this.draft=V(e),this.formError=null,this.notice=null}}closeEditor(){this.busyProfileId===null&&(this.editor=null,this.formError=null)}patchDraft(e){this.draft={...this.draft,...e},this.formError=null}errorText(e){return v(`cloudWorkersPage.errors.${e}`)}async saveProfile(e){let t=this.gateway.capture(),n=this.context.runtimeConfig,r=this.editor?.kind===`edit`?this.editor.profileId:null,i=this.editableConfig();if(!t||!this.editor||!i||!this.canManage())return;let a=H(e,Object.fromEntries(this.profiles().map(e=>[e.id,!0])),r);if(a){this.formError=this.errorText(a);return}let s=r??e.id;this.busyProfileId=s,this.formError=null,this.notice=null;let c=()=>this.gateway.isCurrent(t)&&this.context.runtimeConfig===n;try{let t=await n.patchFromSnapshot(t=>{let n=U(t,e,r);return`error`in n?{error:this.errorText(n.error)}:{options:{raw:n.patch,note:`cloud workers: ${r?`update`:`add`} ${s}`,canDispatch:c}}});if(!c())return;if(!t){this.formError=n.state.lastError??v(`cloudWorkersPage.errors.saveFailed`);return}this.editor=null,this.notice=v(`labsPage.restartRequired`)}catch(e){c()&&(this.formError=o(e))}finally{c()&&(this.busyProfileId=null)}}async deleteProfile(e){let t=this.context.gateway,n=t.snapshot.client,r=t.connection.gatewayUrl,i=this.context.runtimeConfig;if(!this.canManage()||!await M({title:v(`cloudWorkersPage.deleteTitle`),message:v(`cloudWorkersPage.deleteConfirm`,{profile:e.id}),confirmLabel:v(`common.delete`),danger:!0}))return;let a=this.gateway.capture();if(!a||a.client!==n||this.context.gateway!==t||t.connection.gatewayUrl!==r||this.context.runtimeConfig!==i||!this.canManage()){this.formError=v(`cloudWorkersPage.errors.deleteFailed`);return}this.busyProfileId=e.id,this.formError=null,this.notice=null;let s=()=>this.gateway.isCurrent(a)&&this.context.runtimeConfig===i;try{let t=await i.patchFromSnapshot(t=>{let n=W(t,e.id);return`error`in n?{error:this.errorText(n.error)}:{options:{raw:n.patch,note:`cloud workers: delete ${e.id}`,canDispatch:s}}});if(!s())return;if(!t){this.formError=i.state.lastError??v(`cloudWorkersPage.errors.deleteFailed`);return}this.editor?.kind===`edit`&&this.editor.profileId===e.id&&(this.editor=null),this.notice=v(`labsPage.restartRequired`)}catch(e){s()&&(this.formError=o(e))}finally{s()&&(this.busyProfileId=null)}}profileDescription(e){return e.providerId===`crabbox`?[v(`cloudWorkersPage.backendFact`,{backend:e.backend||v(`common.unknown`)}),v(`cloudWorkersPage.classFact`,{value:e.machineClass||v(`common.unknown`)}),v(`cloudWorkersPage.ttlFact`,{value:e.ttl||v(`common.unknown`)}),v(`cloudWorkersPage.idleFact`,{value:e.idleTimeout||v(`common.unknown`)}),v(`cloudWorkersPage.desktopFact`,{value:e.desktop?v(`common.enabled`):v(`common.disabled`)})].join(` · `):v(`cloudWorkersPage.providerFact`,{provider:e.providerId||v(`common.unknown`)})}renderProfile(e){let t=G(e.id,this.advertisedProfileIds,this.catalogLoaded),n=ie(t===`advertised`?{kind:`ok`,label:v(`cloudWorkersPage.advertised`)}:t===`restart-required`?{kind:`warn`,label:v(`cloudWorkersPage.restartRequired`)}:{kind:`muted`,label:v(`common.loading`)}),r=this.canManage();return E({title:p`<code>${e.id}</code>`,description:this.profileDescription(e),control:p`
|
|
${n}
|
|
<button
|
|
class="btn btn--sm"
|
|
type="button"
|
|
?disabled=${!r}
|
|
@click=${()=>this.openEdit(e)}
|
|
>
|
|
${v(`cloudWorkersPage.editAction`)}
|
|
</button>
|
|
<button
|
|
class="btn btn--sm danger"
|
|
type="button"
|
|
?disabled=${!r}
|
|
@click=${()=>void this.deleteProfile(e)}
|
|
>
|
|
${v(`common.delete`)}
|
|
</button>
|
|
`})}renderEditor(){if(!this.editor)return f;let e=this.busyProfileId!==null,t=this.canManage(),n=this.editor.kind===`edit`;return j({title:v(n?`cloudWorkersPage.editProfile`:`cloudWorkersPage.addProfile`)},[E({title:v(`cloudWorkersPage.fields.profileId`),description:v(`cloudWorkersPage.fields.profileIdHelp`),control:n?w(this.draft.id,{mono:!0}):p`<input
|
|
class="settings-input mono"
|
|
aria-label=${v(`cloudWorkersPage.fields.profileId`)}
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
.value=${this.draft.id}
|
|
?disabled=${e}
|
|
@input=${e=>this.patchDraft({id:X(e)})}
|
|
/>`}),E({title:v(`cloudWorkersPage.fields.backend`),description:p`${v(`cloudWorkersPage.fields.backendHelp`)}
|
|
${k(Z,v(`cloudWorkersPage.providerList`))}`,control:p`<input
|
|
class="settings-input mono"
|
|
aria-label=${v(`cloudWorkersPage.fields.backend`)}
|
|
placeholder=${v(`cloudWorkersPage.fields.backendPlaceholder`)}
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
.value=${this.draft.backend}
|
|
?disabled=${e}
|
|
@input=${e=>this.patchDraft({backend:X(e)})}
|
|
/>`}),E({title:v(`cloudWorkersPage.fields.machineClass`),description:v(`cloudWorkersPage.fields.machineClassHelp`),control:p`<input
|
|
class="settings-input mono"
|
|
aria-label=${v(`cloudWorkersPage.fields.machineClass`)}
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
.value=${this.draft.machineClass}
|
|
?disabled=${e}
|
|
@input=${e=>this.patchDraft({machineClass:X(e)})}
|
|
/>`}),E({title:v(`cloudWorkersPage.fields.ttl`),description:v(`cloudWorkersPage.fields.ttlHelp`),control:p`<input
|
|
class="settings-input mono"
|
|
aria-label=${v(`cloudWorkersPage.fields.ttl`)}
|
|
placeholder=${v(`cloudWorkersPage.fields.ttlPlaceholder`)}
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
.value=${this.draft.ttl}
|
|
?disabled=${e}
|
|
@input=${e=>this.patchDraft({ttl:X(e)})}
|
|
/>`}),E({title:v(`cloudWorkersPage.fields.idleTimeout`),description:v(`cloudWorkersPage.fields.idleTimeoutHelp`),control:p`<input
|
|
class="settings-input mono"
|
|
aria-label=${v(`cloudWorkersPage.fields.idleTimeout`)}
|
|
placeholder=${v(`cloudWorkersPage.fields.idleTimeoutPlaceholder`)}
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
.value=${this.draft.idleTimeout}
|
|
?disabled=${e}
|
|
@input=${e=>this.patchDraft({idleTimeout:X(e)})}
|
|
/>`}),E({title:v(`cloudWorkersPage.fields.setup`),description:v(`cloudWorkersPage.fields.setupHelp`),stacked:!0,control:p`<textarea
|
|
class="settings-input mono"
|
|
aria-label=${v(`cloudWorkersPage.fields.setup`)}
|
|
placeholder=${v(`cloudWorkersPage.fields.setupPlaceholder`)}
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
.value=${this.draft.setup}
|
|
?disabled=${e}
|
|
@input=${e=>this.patchDraft({setup:X(e)})}
|
|
></textarea>`}),T({title:v(`cloudWorkersPage.fields.desktop`),description:v(`cloudWorkersPage.fields.desktopHelp`),checked:this.draft.desktop,disabled:e,onChange:e=>this.patchDraft({desktop:e})}),E({title:v(`cloudWorkersPage.fields.binary`),description:v(`cloudWorkersPage.fields.binaryHelp`),control:p`<input
|
|
class="settings-input mono"
|
|
aria-label=${v(`cloudWorkersPage.fields.binary`)}
|
|
placeholder=${v(`cloudWorkersPage.fields.binaryPlaceholder`)}
|
|
autocomplete="off"
|
|
spellcheck="false"
|
|
.value=${this.draft.binary}
|
|
?disabled=${e}
|
|
@input=${e=>this.patchDraft({binary:X(e)})}
|
|
/>`}),...this.formError?[E({title:v(`cloudWorkersPage.errors.title`),description:p`<span role="alert">${this.formError}</span>`})]:[],E({title:v(`cloudWorkersPage.fields.actions`),description:v(`cloudWorkersPage.fields.actionsHelp`),control:p`
|
|
<button
|
|
class="btn primary"
|
|
type="button"
|
|
?disabled=${!t}
|
|
@click=${()=>void this.saveProfile(this.draft)}
|
|
>
|
|
${v(e?`common.saving`:`common.save`)}
|
|
</button>
|
|
<button class="btn" type="button" ?disabled=${e} @click=${()=>this.closeEditor()}>
|
|
${v(`common.cancel`)}
|
|
</button>
|
|
`})])}render(){let e=this.profiles(),t=this.canManage()?p`<button class="btn btn--sm primary" type="button" @click=${()=>this.openAdd()}>
|
|
${v(`cloudWorkersPage.addProfile`)}
|
|
</button>`:void 0,n=e.length?e.map(e=>this.renderProfile(e)):A(v(`cloudWorkersPage.empty`)),r=D(p`
|
|
${this.hasManageAccess()?f:p`<div class="callout warning" role="note">
|
|
${v(`cloudWorkersPage.adminRequired`)}
|
|
</div>`}
|
|
${this.catalogError?p`<div class="callout warning" role="status">
|
|
${v(`cloudWorkersPage.catalogFailed`,{error:this.catalogError})}
|
|
</div>`:f}
|
|
${this.formError&&!this.editor?p`<div class="callout warning" role="alert">${this.formError}</div>`:f}
|
|
${this.notice?p`<div class="callout warning" role="status">${this.notice}</div>`:f}
|
|
${j({title:v(`cloudWorkersPage.sectionTitle`),description:v(`cloudWorkersPage.sectionDescription`),actions:t,count:e.length},n)}
|
|
${this.renderEditor()}
|
|
`);return p`
|
|
${oe({title:g(`cloud-workers`),subtitle:p`${v(`cloudWorkersPage.intro`)} ${ae(Z)}`})}
|
|
${N(r)}
|
|
`}},t([y({context:ne,subscribe:!0})],Q.prototype,`context`,void 0),t([h()],Q.prototype,`advertisedProfileIds`,void 0),t([h()],Q.prototype,`catalogLoaded`,void 0),t([h()],Q.prototype,`catalogLoading`,void 0),t([h()],Q.prototype,`catalogError`,void 0),t([h()],Q.prototype,`editor`,void 0),t([h()],Q.prototype,`draft`,void 0),t([h()],Q.prototype,`formError`,void 0),t([h()],Q.prototype,`notice`,void 0),t([h()],Q.prototype,`busyProfileId`,void 0),customElements.get(`openclaw-cloud-workers-page`)||customElements.define(`openclaw-cloud-workers-page`,Q)})))()}$();
|
|
//# sourceMappingURL=cloud-workers-page-DUo1650W.js.map
|