Files
epusdt2/src/www/assets/chains-QtQLJ_rn.js
T
line-6000 09514a6946 fix(http): block /install page after setup is complete
- skip SPA fallback for `/install` and `/install/*` in main server
- keep install wizard accessible only during `RunInstallServer` phase
- prevent post-install access to install UI
2026-04-23 00:39:22 +08:00

1 line
15 KiB
JavaScript

import{$r as e,Ar as t,Br as n,Di as r,Ei as i,Eu as a,Fr as o,Gr as s,Hi as c,Hr as l,Ir as u,Jr as d,Kr as f,Lr as p,Mi as m,Mr as h,Nr as g,Pr as ee,Qr as _,Ri as v,Rr as y,Ti as b,Tu as x,Ur as S,Vi as C,Vr as w,Wr as te,Xr as ne,Yr as re,Zr as ie,ai as T,ci as E,ei as ae,hi as oe,ii as se,jr as ce,kr as D,ku as O,li as le,ni as ue,oi as de,qr as fe,ri as pe,si as me,ti as he,zr as ge}from"./messages-xqHXgrWc.js";import{a as k,d as A,u as _e}from"./auth-store-Cp1Qr8YS.js";import{t as j}from"./router-Dt_YKRJH.js";import{H as ve,N as M,V as ye,o as N,r as be}from"./search-provider-udckA1q-.js";import{i as P,t as F}from"./button-BQECWbag.js";import{t as xe}from"./checkbox-DeJbPvE-.js";import{a as I,c as L,l as Se,r as Ce,s as we,t as Te}from"./dropdown-menu-DmhEvuLR.js";import{a as Ee,i as De,n as Oe,o as ke,r as Ae,s as je,t as Me}from"./select-DSOa7HEs.js";import{t as R}from"./separator-DnDg5F8J.js";import{t as z}from"./switch-law4AeE6.js";import{_ as Ne,d as B,f as Pe,g as Fe,h as Ie,n as Le,p as Re,r as ze,t as Be,v as Ve,y as He}from"./data-table-D5m8DUdN.js";import{t as Ue}from"./arrow-left-D_zc32Kw.js";import{t as We}from"./ellipsis-BixAGG28.js";import{t as Ge}from"./empty-state-BTCudWIG.js";import{n as Ke,t as qe}from"./chains-store-Dx6ADbK1.js";import{n as Je,t as Ye}from"./trash-2-3YNzlMg8.js";import{_ as Xe,d as Ze,l as Qe,m as $e,p as et,u as tt}from"./command-Kxl1kgbj.js";import{n as V}from"./dist-CD4kjzmO.js";import{a as nt,c as H,n as rt,s as it}from"./zod-BnhDiB7H.js";import{a as U,c as at,i as W,l as ot,n as G,o as K,s as q,t as st}from"./form-DK0bnk5h.js";import{t as J}from"./input-DBrSAqhD.js";import{t as ct}from"./page-header-C0GHzPxS.js";import{t as Y}from"./badge-QtOnDKGz.js";import{t as lt}from"./coming-soon-dialog-u4i55v5E.js";var X=O(a(),1),Z=x(),ut=it({network:H().min(1,h()),symbol:H().min(1,ce()),contract_address:H().optional().default(``),decimals:rt().min(0,t()).default(6),min_amount:rt().min(0,D()).default(0),enabled:nt().default(!0)});function dt({open:e,onOpenChange:t,currentRow:r,onSuccess:i,defaultNetwork:a,onCreate:s,onUpdate:d,chains:f}){let h=ot({resolver:at(ut),defaultValues:{network:``,symbol:``,contract_address:``,decimals:6,min_amount:0,enabled:!0}}),_;_=f?.length?f:a?[{network:a,display_name:a}]:[],(0,X.useEffect)(()=>{e&&h.reset({network:r?.network??a??_[0]?.network??``,symbol:r?.symbol??``,contract_address:r?.contract_address??``,decimals:r?.decimals??6,min_amount:r?.min_amount??0,enabled:r?.enabled??!0})},[e,r,a,_,h]);async function b(e){r?.id?await d(e):await s(e),t(!1),await i?.()}let x=h.formState.isSubmitting;return(0,Z.jsx)(Qe,{onOpenChange:t,open:e,children:(0,Z.jsxs)(tt,{children:[(0,Z.jsxs)(et,{children:[(0,Z.jsx)($e,{children:r?S():l()}),(0,Z.jsx)(Ze,{children:r?w():n()})]}),(0,Z.jsx)(st,{...h,children:(0,Z.jsxs)(`form`,{className:`space-y-4`,onSubmit:h.handleSubmit(b),children:[(0,Z.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Z.jsx)(W,{control:h.control,name:`network`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:c()}),(0,Z.jsxs)(Me,{disabled:!!r,onValueChange:e.onChange,value:e.value,children:[(0,Z.jsx)(G,{children:(0,Z.jsx)(De,{className:`w-full`,children:(0,Z.jsx)(Ee,{placeholder:C()})})}),(0,Z.jsx)(Oe,{children:_.map(e=>(0,Z.jsx)(Ae,{value:e.network,children:e.display_name??e.network},e.network))})]}),(0,Z.jsx)(q,{})]})}),(0,Z.jsx)(W,{control:h.control,name:`symbol`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:ge()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{placeholder:`USDT`,...e,disabled:!!r})}),(0,Z.jsx)(q,{})]})})]}),(0,Z.jsx)(`div`,{className:`rounded-md border border-dashed p-3 text-muted-foreground text-sm`,children:y()}),(0,Z.jsx)(W,{control:h.control,name:`contract_address`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:p()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{placeholder:`TR7NHqje...`,...e})}),(0,Z.jsx)(q,{})]})}),(0,Z.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Z.jsx)(W,{control:h.control,name:`decimals`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:u()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{name:e.name,onBlur:e.onBlur,onChange:t=>e.onChange(t.target.value),ref:e.ref,type:`number`,value:String(e.value??``)})}),(0,Z.jsx)(q,{})]})}),(0,Z.jsx)(W,{control:h.control,name:`min_amount`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:o()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{name:e.name,onBlur:e.onBlur,onChange:t=>e.onChange(t.target.value),ref:e.ref,step:`0.000001`,type:`number`,value:String(e.value??``)})}),(0,Z.jsx)(q,{})]})})]}),(0,Z.jsx)(W,{control:h.control,name:`enabled`,render:({field:e})=>(0,Z.jsxs)(U,{className:`flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4 rtl:space-x-reverse`,children:[(0,Z.jsx)(G,{children:(0,Z.jsx)(xe,{checked:e.value,onCheckedChange:t=>e.onChange(!!t)})}),(0,Z.jsx)(`div`,{className:`space-y-1 leading-none`,children:(0,Z.jsx)(K,{children:m()})})]})}),(0,Z.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Z.jsx)(F,{onClick:()=>t(!1),type:`button`,variant:`outline`,children:v()}),(0,Z.jsx)(F,{disabled:x,type:`submit`,children:x?oe():r?g():ee()})]})]})})]})})}function ft(e){return[{id:`switch`,header:({column:e})=>(0,Z.jsx)(B,{column:e,title:m()}),cell:({row:t})=>(0,Z.jsx)(z,{checked:t.original.enabled===!0,onCheckedChange:()=>e(t.original.enabled?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:m(),skeleton:`switch`,sticky:`left`,th:{className:P(`rounded-tl-[inherit]`)}}},{accessorKey:`symbol`,header:({column:e})=>(0,Z.jsx)(B,{column:e,title:f()}),cell:({row:e})=>(0,Z.jsx)(`div`,{className:`font-medium`,children:e.original.symbol??`-`}),enableHiding:!1,meta:{label:f(),skeleton:`short`}},{accessorKey:`network`,header:({column:e})=>(0,Z.jsx)(B,{column:e,title:c()}),meta:{label:c(),skeleton:`short`}},{accessorKey:`created_at`,header:({column:e})=>(0,Z.jsx)(B,{column:e,title:r()}),cell:({row:e})=>N(e.original.created_at),meta:{label:r(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,Z.jsx)(B,{column:e,title:i()}),cell:({row:e})=>N(e.original.updated_at),meta:{label:i(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:b(),skeleton:`action`,sticky:`right`},cell:({row:t})=>(0,Z.jsxs)(Te,{modal:!1,children:[(0,Z.jsx)(Se,{asChild:!0,children:(0,Z.jsxs)(F,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,Z.jsx)(We,{className:`h-4 w-4`}),(0,Z.jsx)(`span`,{className:`sr-only`,children:`Open menu`})]})}),(0,Z.jsxs)(Ce,{align:`end`,className:`w-40`,children:[(0,Z.jsxs)(I,{onClick:()=>e(`edit`,t.original),children:[s(),(0,Z.jsx)(L,{children:(0,Z.jsx)(Ke,{size:16})})]}),(0,Z.jsx)(we,{}),(0,Z.jsxs)(I,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[te(),(0,Z.jsx)(L,{children:(0,Z.jsx)(Ye,{size:16})})]})]})]})}]}function pt({data:e,isLoading:t,onAction:n,onRefresh:r}){let[i,a]=(0,X.useState)([]),[o,s]=(0,X.useState)(``),[c,l]=(0,X.useState)([]),[u,f]=(0,X.useState)({pageIndex:0,pageSize:10}),p=Pe({data:e,columns:(0,X.useMemo)(()=>ft(n),[n]),state:{sorting:i,columnFilters:c,globalFilter:o,pagination:u},onSortingChange:a,onColumnFiltersChange:l,onGlobalFilterChange:s,onPaginationChange:f,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.symbol??``).toLowerCase().includes(r)||(e.original.contract_address??``).toLowerCase().includes(r)},getCoreRowModel:Re(),getFilteredRowModel:Ne(),getPaginationRowModel:Ve(),getSortedRowModel:He(),getFacetedRowModel:Ie(),getFacetedUniqueValues:Fe()});return(0,X.useEffect)(()=>{let e=p.getPageCount();e>0&&u.pageIndex>e-1&&f(e=>({...e,pageIndex:0}))},[p,u.pageIndex]),(0,Z.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,Z.jsx)(Be,{onRefresh:r,searchKey:`symbol`,searchPlaceholder:d(),table:p}),(0,Z.jsx)(ze,{emptyText:fe(),loading:t,table:p}),(0,Z.jsx)(Le,{className:`mt-auto`,table:p})]})}var Q=new _e({chainTokens:[],loading:!1});function mt(e){Q.setState(t=>({...t,chainTokens:e}))}function ht(e){Q.setState(t=>({...t,loading:e}))}function gt(){let e=A(Q,e=>e.chainTokens),t=A(Q,e=>e.loading),n=k.useQuery(`get`,`/admin/api/v1/chain-tokens`);return(0,X.useEffect)(()=>{ht(n.isLoading)},[n.isLoading]),(0,X.useEffect)(()=>{n.data?.data&&mt(n.data.data)},[n.data?.data]),{chainTokens:e,loading:t,refetch:n.refetch}}var _t=[`chain-1`,`chain-2`,`chain-3`,`chain-4`,`chain-5`];function $({active:e,children:t,onClick:n}){return(0,Z.jsx)(`button`,{className:P(`w-full cursor-pointer rounded-lg px-3 py-3 text-left transition-colors hover:bg-accent hover:text-accent-foreground`,e&&`bg-muted`),onClick:n,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())},type:`button`,children:t})}function vt({chains:e,isLoading:t,keyword:n,onKeywordChange:r,selectedPanel:i,onSelect:a,onToggle:o,totalTokens:s,hiddenOnMobile:c}){return(0,Z.jsxs)(`div`,{className:P(`flex w-full flex-col gap-2 sm:w-56 lg:w-72 2xl:w-80`,c&&`hidden sm:flex`),children:[(0,Z.jsxs)(`div`,{className:`sticky top-0 z-10 -mx-4 bg-background px-4 pb-3 shadow-md sm:static sm:z-auto sm:mx-0 sm:p-0 sm:shadow-none`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between py-2`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`h1`,{className:`font-bold text-2xl`,children:le()}),(0,Z.jsx)(ye,{size:20})]}),(0,Z.jsx)(Y,{variant:`secondary`,children:E({count:String(e.length)})})]}),(0,Z.jsxs)(`div`,{className:`relative block`,children:[(0,Z.jsx)(Xe,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground`}),(0,Z.jsx)(J,{className:`pl-9`,onChange:e=>r(e.target.value),placeholder:me(),value:n})]})]}),(0,Z.jsxs)(be,{className:`-mx-3 h-full overflow-auto p-3`,children:[(0,Z.jsx)($,{active:i===`overview`,onClick:()=>a(`overview`),children:(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`font-medium`,children:de()}),(0,Z.jsx)(`div`,{className:`mt-1 text-muted-foreground text-xs`,children:T({chains:String(e.length),tokens:String(s)})})]}),(0,Z.jsx)(ve,{className:`mt-0.5 size-4 text-muted-foreground`})]})}),(0,Z.jsx)(R,{className:`my-1`}),t?_t.map(e=>(0,Z.jsxs)(`div`,{className:`px-3 py-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Z.jsx)(M,{className:`h-4 w-24`}),(0,Z.jsx)(M,{className:`h-5 w-9 rounded-full`})]}),(0,Z.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-2`,children:[(0,Z.jsx)(M,{className:`h-3 w-28`}),(0,Z.jsx)(M,{className:`h-5 w-12 rounded-full`})]})]},e)):e.map((t,n)=>(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)($,{active:i===t.network,onClick:()=>a(t.network??`overview`),children:(0,Z.jsx)(`div`,{className:`flex items-start gap-3`,children:(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Z.jsx)(`div`,{className:`min-w-0`,children:(0,Z.jsx)(`div`,{className:`truncate font-medium`,children:t.display_name})}),(0,Z.jsx)(z,{checked:t.enabled===!0,onCheckedChange:e=>o(t,e),onClick:e=>e.stopPropagation()})]}),(0,Z.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:se()}),(0,Z.jsx)(Y,{className:`shrink-0 text-xs`,variant:`outline`,children:t.network})]})]})})}),n<e.length-1?(0,Z.jsx)(R,{className:`my-1`}):null]},t.network??String(n))),!t&&e.length===0?(0,Z.jsx)(Ge,{description:pe()}):null]})]})}function yt({tokens:e,isLoading:t,onBack:n,onCreate:r,onAction:i,onRefresh:a}){return(0,Z.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Z.jsx)(F,{className:`sm:hidden`,onClick:n,size:`icon`,variant:`ghost`,children:(0,Z.jsx)(Ue,{className:`rtl:rotate-180`})}),(0,Z.jsx)(`div`,{className:`flex-1`,children:(0,Z.jsx)(ct,{actions:(0,Z.jsxs)(F,{onClick:r,children:[(0,Z.jsx)(Je,{className:`mr-2 h-4 w-4`}),ue()]}),description:he(),title:le()})})]}),(0,Z.jsx)(pt,{data:e,isLoading:t,onAction:i,onRefresh:a})]})}function bt(){let{chains:t,loading:n,refetch:r}=qe(),{chainTokens:i,loading:a,refetch:o}=gt(),s=k.useMutation(`post`,`/admin/api/v1/chain-tokens`),c=k.useMutation(`patch`,`/admin/api/v1/chain-tokens/{id}`),l=k.useMutation(`post`,`/admin/api/v1/chain-tokens/{id}/status`),u=k.useMutation(`patch`,`/admin/api/v1/chains/{network}`),[d,f]=(0,X.useState)(``),[p,m]=(0,X.useState)(`overview`),[h,g]=(0,X.useState)(null),[ee,v]=(0,X.useState)(!1),[y,b]=(0,X.useState)(!1),[x,S]=(0,X.useState)(``),[C,w]=(0,X.useState)(null),te=(0,X.useMemo)(()=>{let e=d.trim().toLowerCase();return e?t.filter(t=>[t.display_name,t.network].filter(Boolean).some(t=>String(t).toLowerCase().includes(e))):t},[t,d]),T=(0,X.useMemo)(()=>p===`overview`?i:i.filter(e=>e.network===p),[i,p]);async function E(){await Promise.all([j.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chains`]}),j.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chain-tokens`]})])}function oe(e,t){S(e),w(t),v(!0)}async function se(t,n){t.network&&(await u.mutateAsync({params:{path:{network:t.network}},body:{display_name:t.display_name,enabled:n,min_confirmations:t.min_confirmations,scan_interval_sec:t.scan_interval_sec}}),V.success(ae({status:n?e():_()})),await E())}async function ce(e,t){if(e===`edit`){oe(t.network??x,t);return}if(e===`enable`||e===`disable`){if(!t.id)return;await l.mutateAsync({params:{path:{id:t.id}},body:{enabled:e===`enable`}}),V.success(ie()),await E();return}if(e===`delete`){b(!0);return}}let D=h!==null,O=n||a;return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(je,{fixed:!0}),(0,Z.jsx)(ke,{fixed:!0,children:(0,Z.jsxs)(`section`,{className:`flex h-full gap-6`,children:[(0,Z.jsx)(vt,{chains:te,hiddenOnMobile:D,isLoading:O,keyword:d,onKeywordChange:f,onSelect:e=>{m(e),g(e)},onToggle:se,selectedPanel:p,totalTokens:i.length}),(0,Z.jsx)(`div`,{className:P(`absolute inset-0 start-full z-50 hidden w-full flex-1 flex-col border bg-background shadow-xs sm:static sm:z-auto sm:flex sm:min-w-0 sm:rounded-md sm:border-0 sm:bg-transparent sm:shadow-none`,D&&`inset-s-0 flex`),children:(0,Z.jsx)(yt,{isLoading:O,onAction:ce,onBack:()=>g(null),onCreate:()=>b(!0),onRefresh:()=>{r(),o()},tokens:T})})]})}),(0,Z.jsx)(dt,{chains:t.filter(e=>!!e.network).map(e=>({network:e.network,display_name:e.display_name})),currentRow:C,defaultNetwork:x,onCreate:async e=>{await s.mutateAsync({body:{network:e.network,symbol:e.symbol,contract_address:e.contract_address||void 0,decimals:e.decimals,min_amount:e.min_amount,enabled:e.enabled}})},onOpenChange:e=>{v(e),e||(w(null),S(``))},onSuccess:async()=>{V.success(C?ne():re()),await E()},onUpdate:async e=>{C?.id&&await c.mutateAsync({params:{path:{id:C.id}},body:{contract_address:e.contract_address||void 0,decimals:e.decimals,min_amount:e.min_amount,enabled:e.enabled}})},open:ee}),(0,Z.jsx)(lt,{onOpenChange:b,open:y})]})}var xt=bt;export{xt as component};