@nextclaw/ui 0.9.3 → 0.9.5
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/CHANGELOG.md +12 -0
- package/dist/assets/{ChannelsList-ZBPiF0y2.js → ChannelsList-Byfj2R01.js} +1 -1
- package/dist/assets/{ChatPage-BOgoolWK.js → ChatPage-DM1ewbWf.js} +1 -1
- package/dist/assets/{DocBrowser-BUYNHg0Y.js → DocBrowser-BLv77lJ0.js} +1 -1
- package/dist/assets/{LogoBadge-DXPq99LJ.js → LogoBadge-D7j1al-w.js} +1 -1
- package/dist/assets/{MarketplacePage-Dx7nexYN.js → MarketplacePage-DuskLKYh.js} +1 -1
- package/dist/assets/{McpMarketplacePage-064wdotP.js → McpMarketplacePage-DpMjaD3m.js} +1 -1
- package/dist/assets/{ModelConfig-BDIfLesG.js → ModelConfig-ubaecweS.js} +1 -1
- package/dist/assets/{ProvidersList-DrlIr46m.js → ProvidersList-w8MJH2LI.js} +1 -1
- package/dist/assets/RemoteAccessPage-D79_5Kbn.js +1 -0
- package/dist/assets/{RuntimeConfig-BPxXEGzM.js → RuntimeConfig-BbX4yFKy.js} +1 -1
- package/dist/assets/{SearchConfig-BIqnlpne.js → SearchConfig-BmmmeyJd.js} +1 -1
- package/dist/assets/{SecretsConfig-jKZEVF2q.js → SecretsConfig-CWG8J01H.js} +1 -1
- package/dist/assets/{SessionsConfig-C_FXgVe1.js → SessionsConfig-D-vg_Lgv.js} +1 -1
- package/dist/assets/{chat-message-DmzpZJc_.js → chat-message-CGXiVhyN.js} +1 -1
- package/dist/assets/index-COrhpAdh.css +1 -0
- package/dist/assets/index-CeRbsQ90.js +8 -0
- package/dist/assets/{label-B1MloEtn.js → label-CCSffS1D.js} +1 -1
- package/dist/assets/{page-layout-BGg1EhM5.js → page-layout-ud8wZ8gX.js} +1 -1
- package/dist/assets/{popover-jJMv74Fp.js → popover-Bfoe6YBX.js} +1 -1
- package/dist/assets/{security-config-Boh9NIMz.js → security-config-DJJUCMov.js} +1 -1
- package/dist/assets/{skeleton-CmATs_b3.js → skeleton-IOOTmHzP.js} +1 -1
- package/dist/assets/{status-dot-DNyCdxPZ.js → status-dot-Fz9-eKsl.js} +1 -1
- package/dist/assets/{switch-DE_MYk7x.js → switch-B-_SrMSL.js} +1 -1
- package/dist/assets/{tabs-custom-B-zErYPr.js → tabs-custom-6Tm1ZHfS.js} +1 -1
- package/dist/assets/{useConfirmDialog-BqQ6QfhB.js → useConfirmDialog-BeOW2bOI.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +4 -4
- package/src/api/remote.ts +20 -0
- package/src/api/remote.types.ts +24 -0
- package/src/components/remote/RemoteAccessPage.tsx +392 -223
- package/src/hooks/useRemoteAccess.ts +28 -0
- package/src/lib/i18n.remote.ts +29 -2
- package/dist/assets/RemoteAccessPage-ZkUBA-Av.js +0 -1
- package/dist/assets/index-Byfw276e.js +0 -8
- package/dist/assets/index-bhNuQis7.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as c,j as e,e as M}from"./vendor-CwsIoNvJ.js";import{a6 as O,a7 as R,a8 as I,a9 as B,aa as _,C as u,a3 as h,a4 as x,t as s,a5 as m,z as p,B as j,I as l}from"./index-
|
|
1
|
+
import{r as c,j as e,e as M}from"./vendor-CwsIoNvJ.js";import{a6 as O,a7 as R,a8 as I,a9 as B,aa as _,C as u,a3 as h,a4 as x,t as s,a5 as m,z as p,B as j,I as l}from"./index-CeRbsQ90.js";import{L as o}from"./label-CCSffS1D.js";import{S as z}from"./switch-B-_SrMSL.js";import{P as G,a as V}from"./page-layout-ud8wZ8gX.js";const W=8;function A(r){return r.trim().length>=W}function L(r,n){return r!==n?(M.error(s("authPasswordMismatch")),!1):!0}function q(){const r=O(),n=R(),S=I(),g=B(),y=_(),[f,U]=c.useState(""),[i,N]=c.useState(""),[w,b]=c.useState(""),[d,v]=c.useState(""),[P,C]=c.useState(""),t=r.data,E=f.trim().length>0&&A(i)&&i===w&&!n.isPending,D=A(d)&&d===P&&!g.isPending,T=async()=>{if(L(i,w))try{await n.mutateAsync({username:f.trim(),password:i}),N(""),b("")}catch{}},F=async()=>{if(L(d,P))try{await g.mutateAsync({password:d}),v(""),C("")}catch{}},H=async a=>{try{await S.mutateAsync({enabled:a})}catch{}},k=async()=>{try{await y.mutateAsync()}catch{}};return r.isLoading&&!t?e.jsxs(u,{children:[e.jsxs(h,{children:[e.jsx(x,{children:s("authSecurityTitle")}),e.jsx(m,{children:s("authSecurityDescription")})]}),e.jsx(p,{className:"text-sm text-gray-500",children:s("loading")})]}):r.isError||!t?e.jsxs(u,{children:[e.jsxs(h,{children:[e.jsx(x,{children:s("authSecurityTitle")}),e.jsx(m,{children:s("authSecurityDescription")})]}),e.jsxs(p,{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-gray-500",children:s("authStatusLoadFailed")}),e.jsx(j,{variant:"outline",onClick:()=>{r.refetch()},children:s("authRetryStatus")})]})]}):t.configured?e.jsxs(u,{children:[e.jsxs(h,{children:[e.jsx(x,{children:s("authSecurityTitle")}),e.jsx(m,{children:s("authSecurityDescription")})]}),e.jsxs(p,{className:"space-y-6",children:[e.jsxs("div",{className:"rounded-xl border border-gray-200 p-4",children:[e.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-gray-900",children:s("authStatusLabel")}),e.jsx("p",{className:"text-sm text-gray-600",children:s("authStatusConfiguredUser").replace("{username}",t.username??"")}),e.jsx("p",{className:"text-xs text-gray-500",children:s("authUsernameFixedHelp")})]}),e.jsx("span",{className:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-medium text-gray-700",children:t.enabled?s("enabled"):s("disabled")})]}),e.jsxs("div",{className:"mt-4 flex flex-col gap-4 border-t border-gray-200 pt-4 md:flex-row md:items-center md:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-gray-900",children:s("authEnableLabel")}),e.jsx("p",{className:"text-xs text-gray-500",children:t.enabled?s("authEnableOnHelp"):s("authEnableOffHelp")})]}),e.jsx(z,{checked:t.enabled,disabled:S.isPending,onCheckedChange:a=>{H(a)}})]})]}),e.jsxs("div",{className:"rounded-xl border border-gray-200 p-4 space-y-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-gray-900",children:s("authPasswordSectionTitle")}),e.jsx("p",{className:"text-xs text-gray-500",children:s("authPasswordSectionDescription")})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{htmlFor:"auth-password-next",children:s("authPassword")}),e.jsx(l,{id:"auth-password-next",type:"password",value:d,onChange:a=>v(a.target.value),placeholder:s("authPasswordPlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{htmlFor:"auth-password-confirm",children:s("authConfirmPassword")}),e.jsx(l,{id:"auth-password-confirm",type:"password",value:P,onChange:a=>C(a.target.value),placeholder:s("authConfirmPasswordPlaceholder")})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx(j,{type:"button",disabled:!D,onClick:()=>void F(),children:g.isPending?s("authPasswordUpdating"):s("authPasswordAction")}),t.enabled&&t.authenticated?e.jsx(j,{type:"button",variant:"outline",disabled:y.isPending,onClick:()=>void k(),children:y.isPending?s("authLoggingOut"):s("authLogoutAction")}):null]}),e.jsx("p",{className:"text-xs text-gray-500",children:s("authSessionMemoryNotice")})]})]})]}):e.jsxs(u,{children:[e.jsxs(h,{children:[e.jsx(x,{children:s("authSecurityTitle")}),e.jsx(m,{children:s("authSecurityDescription")})]}),e.jsxs(p,{className:"space-y-5",children:[e.jsxs("div",{className:"rounded-xl border border-dashed border-gray-200 bg-gray-50/70 p-4",children:[e.jsx("p",{className:"text-sm font-medium text-gray-900",children:s("authSetupTitle")}),e.jsx("p",{className:"mt-1 text-sm text-gray-500",children:s("authSetupDescription")})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{htmlFor:"auth-setup-username",children:s("authUsername")}),e.jsx(l,{id:"auth-setup-username",value:f,onChange:a=>U(a.target.value),placeholder:s("authUsernamePlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{htmlFor:"auth-setup-password",children:s("authPassword")}),e.jsx(l,{id:"auth-setup-password",type:"password",value:i,onChange:a=>N(a.target.value),placeholder:s("authPasswordPlaceholder")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{htmlFor:"auth-setup-confirm",children:s("authConfirmPassword")}),e.jsx(l,{id:"auth-setup-confirm",type:"password",value:w,onChange:a=>b(a.target.value),placeholder:s("authConfirmPasswordPlaceholder")}),e.jsx("p",{className:"text-xs text-gray-500",children:s("authPasswordMinLengthHint")})]}),e.jsx(j,{type:"button",disabled:!E,onClick:()=>void T(),children:n.isPending?s("authSettingUp"):s("authSetupAction")})]})]})}function Z(){return e.jsxs(G,{className:"space-y-6",children:[e.jsx(V,{title:s("authSecurityTitle"),description:s("authSecurityDescription")}),e.jsx(q,{})]})}export{Z as SecurityConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as t}from"./vendor-CwsIoNvJ.js";import{c as o}from"./index-
|
|
1
|
+
import{j as t}from"./vendor-CwsIoNvJ.js";import{c as o}from"./index-CeRbsQ90.js";function m({className:e,...s}){return t.jsx("div",{className:o("animate-pulse rounded-md bg-slate-200",e),...s})}export{m as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e}from"./vendor-CwsIoNvJ.js";import{c as a}from"./index-
|
|
1
|
+
import{j as e}from"./vendor-CwsIoNvJ.js";import{c as a}from"./index-CeRbsQ90.js";const n={active:{dot:"bg-emerald-500",text:"text-emerald-600",bg:"bg-emerald-50"},ready:{dot:"bg-emerald-500",text:"text-emerald-600",bg:"bg-emerald-50"},inactive:{dot:"bg-gray-300",text:"text-gray-400",bg:"bg-gray-100/80"},setup:{dot:"bg-gray-300",text:"text-gray-400",bg:"bg-gray-100/80"},warning:{dot:"bg-amber-400",text:"text-amber-600",bg:"bg-amber-50"}};function m({status:r,label:s,className:g}){const t=n[r];return e.jsxs("div",{className:a("inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full px-2 py-0.5",t.bg,g),children:[e.jsx("span",{className:a("h-1.5 w-1.5 rounded-full",t.dot)}),e.jsx("span",{className:a("text-[11px] font-medium",t.text),children:s})]})}export{m as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,j as i}from"./vendor-CwsIoNvJ.js";import{c as t}from"./index-
|
|
1
|
+
import{r as e,j as i}from"./vendor-CwsIoNvJ.js";import{c as t}from"./index-CeRbsQ90.js";const l=e.forwardRef(({className:o,checked:r=!1,onCheckedChange:s,...a},n)=>i.jsx("button",{type:"button",role:"switch","aria-checked":r,ref:n,className:t("peer inline-flex h-[22px] w-10 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-fast focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-50",r?"bg-primary":"bg-gray-200/80 hover:bg-gray-300/80",o),onClick:()=>s==null?void 0:s(!r),...a,children:i.jsx("span",{className:t("pointer-events-none block h-5 w-5 rounded-full bg-white shadow-md ring-0 transition-transform duration-fast",r?"translate-x-5":"translate-x-0")})}));l.displayName="Switch";export{l as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e}from"./vendor-CwsIoNvJ.js";import{ag as m,c as a}from"./index-
|
|
1
|
+
import{j as e}from"./vendor-CwsIoNvJ.js";import{ag as m,c as a}from"./index-CeRbsQ90.js";function c({tabs:s,activeTab:i,onChange:o,className:n}){return e.jsx("div",{className:a("flex items-center gap-6 border-b border-gray-200/60 mb-6",n),children:s.map(t=>{const r=i===t.id;return e.jsxs("button",{onClick:()=>o(t.id),className:a("relative pb-3 text-[14px] font-medium transition-all duration-fast flex items-center gap-1.5",r?"text-gray-900":"text-gray-600 hover:text-gray-900"),children:[t.label,t.count!==void 0&&e.jsx("span",{className:a("text-[11px] font-medium","text-gray-500"),children:m(t.count)}),r&&e.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-[2px] bg-primary rounded-full"})]},t.id)})})}export{c as T};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as i,aA as ee,j as a,aC as b,aI as te,aE as D,aF as v,aJ as oe,aD as N,aK as ae,aL as ne,aN as re,aO as se,aP as ie,aM as le,b5 as ce,ax as de}from"./vendor-CwsIoNvJ.js";import{P as R}from"./index-Ct7FQpxN.js";import{c as m,B as P,t as p}from"./index-
|
|
1
|
+
import{r as i,aA as ee,j as a,aC as b,aI as te,aE as D,aF as v,aJ as oe,aD as N,aK as ae,aL as ne,aN as re,aO as se,aP as ie,aM as le,b5 as ce,ax as de}from"./vendor-CwsIoNvJ.js";import{P as R}from"./index-Ct7FQpxN.js";import{c as m,B as P,t as p}from"./index-CeRbsQ90.js";var C="Dialog",[O]=oe(C),[ue,u]=O(C),I=e=>{const{__scopeDialog:o,children:n,open:r,defaultOpen:s,onOpenChange:t,modal:l=!0}=e,c=i.useRef(null),d=i.useRef(null),[f,x]=ee({prop:r,defaultProp:s??!1,onChange:t,caller:C});return a.jsx(ue,{scope:o,triggerRef:c,contentRef:d,contentId:b(),titleId:b(),descriptionId:b(),open:f,onOpenChange:x,onOpenToggle:i.useCallback(()=>x(y=>!y),[x]),modal:l,children:n})};I.displayName=C;var w="DialogTrigger",fe=i.forwardRef((e,o)=>{const{__scopeDialog:n,...r}=e,s=u(w,n),t=N(o,s.triggerRef);return a.jsx(D.button,{type:"button","aria-haspopup":"dialog","aria-expanded":s.open,"aria-controls":s.contentId,"data-state":E(s.open),...r,ref:t,onClick:v(e.onClick,s.onOpenToggle)})});fe.displayName=w;var j="DialogPortal",[ge,A]=O(j,{forceMount:void 0}),T=e=>{const{__scopeDialog:o,forceMount:n,children:r,container:s}=e,t=u(j,o);return a.jsx(ge,{scope:o,forceMount:n,children:i.Children.map(r,l=>a.jsx(R,{present:n||t.open,children:a.jsx(te,{asChild:!0,container:s,children:l})}))})};T.displayName=j;var h="DialogOverlay",M=i.forwardRef((e,o)=>{const n=A(h,e.__scopeDialog),{forceMount:r=n.forceMount,...s}=e,t=u(h,e.__scopeDialog);return t.modal?a.jsx(R,{present:r||t.open,children:a.jsx(me,{...s,ref:o})}):null});M.displayName=h;var pe=le("DialogOverlay.RemoveScroll"),me=i.forwardRef((e,o)=>{const{__scopeDialog:n,...r}=e,s=u(h,n);return a.jsx(ne,{as:pe,allowPinchZoom:!0,shards:[s.contentRef],children:a.jsx(D.div,{"data-state":E(s.open),...r,ref:o,style:{pointerEvents:"auto",...r.style}})})}),g="DialogContent",F=i.forwardRef((e,o)=>{const n=A(g,e.__scopeDialog),{forceMount:r=n.forceMount,...s}=e,t=u(g,e.__scopeDialog);return a.jsx(R,{present:r||t.open,children:t.modal?a.jsx(xe,{...s,ref:o}):a.jsx(ve,{...s,ref:o})})});F.displayName=g;var xe=i.forwardRef((e,o)=>{const n=u(g,e.__scopeDialog),r=i.useRef(null),s=N(o,n.contentRef,r);return i.useEffect(()=>{const t=r.current;if(t)return ae(t)},[]),a.jsx(L,{...e,ref:s,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:v(e.onCloseAutoFocus,t=>{var l;t.preventDefault(),(l=n.triggerRef.current)==null||l.focus()}),onPointerDownOutside:v(e.onPointerDownOutside,t=>{const l=t.detail.originalEvent,c=l.button===0&&l.ctrlKey===!0;(l.button===2||c)&&t.preventDefault()}),onFocusOutside:v(e.onFocusOutside,t=>t.preventDefault())})}),ve=i.forwardRef((e,o)=>{const n=u(g,e.__scopeDialog),r=i.useRef(!1),s=i.useRef(!1);return a.jsx(L,{...e,ref:o,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{var l,c;(l=e.onCloseAutoFocus)==null||l.call(e,t),t.defaultPrevented||(r.current||(c=n.triggerRef.current)==null||c.focus(),t.preventDefault()),r.current=!1,s.current=!1},onInteractOutside:t=>{var d,f;(d=e.onInteractOutside)==null||d.call(e,t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type==="pointerdown"&&(s.current=!0));const l=t.target;((f=n.triggerRef.current)==null?void 0:f.contains(l))&&t.preventDefault(),t.detail.originalEvent.type==="focusin"&&s.current&&t.preventDefault()}})}),L=i.forwardRef((e,o)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:s,onCloseAutoFocus:t,...l}=e,c=u(g,n),d=i.useRef(null),f=N(o,d);return re(),a.jsxs(a.Fragment,{children:[a.jsx(se,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:s,onUnmountAutoFocus:t,children:a.jsx(ie,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":E(c.open),...l,ref:f,onDismiss:()=>c.onOpenChange(!1)})}),a.jsxs(a.Fragment,{children:[a.jsx(De,{titleId:c.titleId}),a.jsx(Ce,{contentRef:d,descriptionId:c.descriptionId})]})]})}),_="DialogTitle",S=i.forwardRef((e,o)=>{const{__scopeDialog:n,...r}=e,s=u(_,n);return a.jsx(D.h2,{id:s.titleId,...r,ref:o})});S.displayName=_;var k="DialogDescription",W=i.forwardRef((e,o)=>{const{__scopeDialog:n,...r}=e,s=u(k,n);return a.jsx(D.p,{id:s.descriptionId,...r,ref:o})});W.displayName=k;var $="DialogClose",G=i.forwardRef((e,o)=>{const{__scopeDialog:n,...r}=e,s=u($,n);return a.jsx(D.button,{type:"button",...r,ref:o,onClick:v(e.onClick,()=>s.onOpenChange(!1))})});G.displayName=$;function E(e){return e?"open":"closed"}var B="DialogTitleWarning",[we,z]=ce(B,{contentName:g,titleName:_,docsSlug:"dialog"}),De=({titleId:e})=>{const o=z(B),n=`\`${o.contentName}\` requires a \`${o.titleName}\` for the component to be accessible for screen reader users.
|
|
2
2
|
|
|
3
3
|
If you want to hide the \`${o.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
4
4
|
|
package/dist/index.html
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
<link rel="icon" type="image/svg+xml" href="/logo.svg" />
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
8
|
<title>NextClaw - 系统配置</title>
|
|
9
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-CeRbsQ90.js"></script>
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/vendor-CwsIoNvJ.js">
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-COrhpAdh.css">
|
|
12
12
|
</head>
|
|
13
13
|
|
|
14
14
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextclaw/ui",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"tailwind-merge": "^2.5.4",
|
|
28
28
|
"zod": "^3.23.8",
|
|
29
29
|
"zustand": "^5.0.2",
|
|
30
|
-
"@nextclaw/ncp
|
|
31
|
-
"@nextclaw/agent-chat-ui": "0.2.1",
|
|
30
|
+
"@nextclaw/ncp": "0.3.1",
|
|
32
31
|
"@nextclaw/agent-chat": "0.1.1",
|
|
33
32
|
"@nextclaw/ncp-http-agent-client": "0.3.1",
|
|
34
|
-
"@nextclaw/ncp": "0.3.
|
|
33
|
+
"@nextclaw/ncp-react": "0.3.2",
|
|
34
|
+
"@nextclaw/agent-chat-ui": "0.2.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@testing-library/react": "^16.3.0",
|
package/src/api/remote.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { api } from './client';
|
|
2
2
|
import type {
|
|
3
3
|
RemoteAccessView,
|
|
4
|
+
RemoteBrowserAuthPollRequest,
|
|
5
|
+
RemoteBrowserAuthPollResult,
|
|
6
|
+
RemoteBrowserAuthStartRequest,
|
|
7
|
+
RemoteBrowserAuthStartResult,
|
|
4
8
|
RemoteDoctorView,
|
|
5
9
|
RemoteLoginRequest,
|
|
6
10
|
RemoteServiceAction,
|
|
@@ -32,6 +36,22 @@ export async function loginRemote(data: RemoteLoginRequest): Promise<RemoteAcces
|
|
|
32
36
|
return response.data;
|
|
33
37
|
}
|
|
34
38
|
|
|
39
|
+
export async function startRemoteBrowserAuth(data: RemoteBrowserAuthStartRequest): Promise<RemoteBrowserAuthStartResult> {
|
|
40
|
+
const response = await api.post<RemoteBrowserAuthStartResult>('/api/remote/auth/start', data);
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
throw new Error(response.error.message);
|
|
43
|
+
}
|
|
44
|
+
return response.data;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export async function pollRemoteBrowserAuth(data: RemoteBrowserAuthPollRequest): Promise<RemoteBrowserAuthPollResult> {
|
|
48
|
+
const response = await api.post<RemoteBrowserAuthPollResult>('/api/remote/auth/poll', data);
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new Error(response.error.message);
|
|
51
|
+
}
|
|
52
|
+
return response.data;
|
|
53
|
+
}
|
|
54
|
+
|
|
35
55
|
export async function logoutRemote(): Promise<RemoteAccessView> {
|
|
36
56
|
const response = await api.post<RemoteAccessView>('/api/remote/logout', {});
|
|
37
57
|
if (!response.ok) {
|
package/src/api/remote.types.ts
CHANGED
|
@@ -65,6 +65,30 @@ export type RemoteLoginRequest = {
|
|
|
65
65
|
register?: boolean;
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
+
export type RemoteBrowserAuthStartRequest = {
|
|
69
|
+
apiBase?: string;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export type RemoteBrowserAuthStartResult = {
|
|
73
|
+
sessionId: string;
|
|
74
|
+
verificationUri: string;
|
|
75
|
+
expiresAt: string;
|
|
76
|
+
intervalMs: number;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export type RemoteBrowserAuthPollRequest = {
|
|
80
|
+
sessionId: string;
|
|
81
|
+
apiBase?: string;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type RemoteBrowserAuthPollResult = {
|
|
85
|
+
status: "pending" | "authorized" | "expired";
|
|
86
|
+
message?: string;
|
|
87
|
+
nextPollMs?: number;
|
|
88
|
+
email?: string;
|
|
89
|
+
role?: string;
|
|
90
|
+
};
|
|
91
|
+
|
|
68
92
|
export type RemoteSettingsUpdateRequest = {
|
|
69
93
|
enabled?: boolean;
|
|
70
94
|
deviceName?: string;
|