Files
epusdt/src/www/assets/chains-BHyhl0Wt.js
T
line-6000 c69b0d6c0c feat: isolate manual verification RPC usage
- add rpc node purpose support for general/manual_verify/both
- keep scan, WSS and health checks away from manual_verify nodes
- fallback manual hash verification from general RPC to manual_verify RPC
- add public cashier hash submission path and errno responses
- update tests for RPC selection, failover and manual payment flows
2026-05-27 19:36:56 +08:00

1 line
15 KiB
JavaScript

import{r as e}from"./chunk-DECur_0Z.js";import{a as t,d as n,f as r}from"./auth-store-BnVIXJIp.js";import{t as i}from"./router-j8VslRk2.js";import{t as a}from"./react-CO2uhaBc.js";import{$a as o,Aa as s,Ba as c,Bo as l,Eo as u,Fa as d,Ga as f,Ha as p,Ia as m,Ja as h,Ka as g,La as _,Lo as v,Ma as y,Na as ee,Oa as te,Pa as ne,Qa as re,Ra as b,To as x,Ua as S,Va as C,Vo as w,Wa as T,Xa as ie,Ya as ae,Za as oe,ao as E,co as D,dp as se,eo as ce,io as O,ja as k,jo as A,ka as le,mo as ue,no as de,oo as fe,qa as pe,ro as me,so as he,to as ge,wo as _e,za as ve}from"./messages-Bbvu5aaF.js";import{B as ye,H as be,o as j,r as xe}from"./search-provider-CMLTXja2.js";import{i as M,t as N}from"./button-DlGFBuNZ.js";import{t as Se}from"./checkbox-3W7oo_7n.js";import{a as P,c as F,l as Ce,r as we,s as Te,t as Ee}from"./dropdown-menu-Ci0ZDJlU.js";import{a as De,i as Oe,n as ke,r as Ae,t as je}from"./select-BRRg0L32.js";import{t as I}from"./separator-CRhLMH2U.js";import{t as L}from"./switch-jN7ZIGlt.js";import{a as R,c as Me,d as Ne,f as Pe,l as Fe,n as Ie,o as Le,r as Re,s as ze,t as Be,u as Ve}from"./data-table-PcSuT0p4.js";import{t as He}from"./arrow-left-Ck1MERx0.js";import{t as z}from"./skeleton-CPJRjth3.js";import{t as Ue}from"./ellipsis-DfrFbsb1.js";import{t as We}from"./empty-state-DhPTyTqD.js";import{n as Ge,t as Ke}from"./main-wlTiKPb7.js";import{n as qe,t as Je}from"./chains-store-CD1hZLqo.js";import{n as Ye,t as Xe}from"./trash-2-BBsEOAHm.js";import{l as Ze}from"./command-CAasmd2P.js";import{i as Qe,o as $e,r as et,s as tt,t as nt}from"./dialog-DCa0Wx6n.js";import{n as B}from"./dist-0D92g85D.js";import{a as rt,c as V,n as H,s as it}from"./zod-CQemhjci.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-CwBNjUHP.js";import{t as J}from"./input-CJ09jXcS.js";import{t as ct}from"./page-header-v0-NzBJQ.js";import{t as Y}from"./badge-CCVcrgJv.js";import{t as lt}from"./coming-soon-dialog-BAvDf68T.js";var X=e(a(),1),Z=se(),ut=it({network:V().min(1,k()),symbol:V().min(1,s()),contract_address:V().optional().default(``),decimals:H().min(0,le()).default(6),min_amount:H().min(0,te()).default(0),enabled:rt().default(!0)});function dt({open:e,onOpenChange:t,currentRow:n,onSuccess:r,defaultNetwork:i,onCreate:a,onUpdate:o,chains:s}){let u=ot({resolver:at(ut),defaultValues:{network:``,symbol:``,contract_address:``,decimals:6,min_amount:0,enabled:!0}}),f;f=s?.length?s:i?[{network:i,display_name:i}]:[],(0,X.useEffect)(()=>{e&&u.reset({network:n?.network??i??f[0]?.network??``,symbol:n?.symbol??``,contract_address:n?.contract_address??``,decimals:n?.decimals??6,min_amount:n?.min_amount??0,enabled:n?.enabled??!0})},[e,n,i,f,u]);async function h(e){n?.id?await o(e):await a(e),t(!1),await r?.()}let g=u.formState.isSubmitting;return(0,Z.jsx)(nt,{onOpenChange:t,open:e,children:(0,Z.jsxs)(et,{children:[(0,Z.jsxs)($e,{children:[(0,Z.jsx)(tt,{children:n?p():C()}),(0,Z.jsx)(Qe,{children:n?c():ve()})]}),(0,Z.jsx)(st,{...u,children:(0,Z.jsxs)(`form`,{className:`space-y-4`,onSubmit:u.handleSubmit(h),children:[(0,Z.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,Z.jsx)(W,{control:u.control,name:`network`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:w()}),(0,Z.jsxs)(je,{disabled:!!n,onValueChange:e.onChange,value:e.value,children:[(0,Z.jsx)(G,{children:(0,Z.jsx)(Oe,{className:`w-full`,children:(0,Z.jsx)(De,{placeholder:l()})})}),(0,Z.jsx)(ke,{children:f.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:u.control,name:`symbol`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:b()}),(0,Z.jsx)(G,{children:(0,Z.jsx)(J,{placeholder:`USDT`,...e,disabled:!!n})}),(0,Z.jsx)(q,{})]})})]}),(0,Z.jsx)(`div`,{className:`rounded-md border border-dashed p-3 text-muted-foreground text-sm`,children:_()}),(0,Z.jsx)(W,{control:u.control,name:`contract_address`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:m()}),(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:u.control,name:`decimals`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:d()}),(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:u.control,name:`min_amount`,render:({field:e})=>(0,Z.jsxs)(U,{children:[(0,Z.jsx)(K,{children:ne()}),(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:u.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)(Se,{checked:e.value,onCheckedChange:t=>e.onChange(!!t)})}),(0,Z.jsx)(`div`,{className:`space-y-1 leading-none`,children:(0,Z.jsx)(K,{children:A()})})]})}),(0,Z.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Z.jsx)(N,{onClick:()=>t(!1),type:`button`,variant:`outline`,children:v()}),(0,Z.jsx)(N,{disabled:g,type:`submit`,children:g?ue():n?y():ee()})]})]})})]})})}function ft(e){return[{id:`switch`,header:({column:e})=>(0,Z.jsx)(R,{column:e,title:A()}),cell:({row:t})=>(0,Z.jsx)(L,{checked:t.original.enabled===!0,onCheckedChange:()=>e(t.original.enabled?`disable`:`enable`,t.original)}),enableSorting:!1,enableHiding:!1,meta:{label:A(),skeleton:`switch`,sticky:`left`,th:{className:M(`rounded-tl-[inherit]`)}}},{accessorKey:`symbol`,header:({column:e})=>(0,Z.jsx)(R,{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)(R,{column:e,title:w()}),meta:{label:w(),skeleton:`short`}},{accessorKey:`created_at`,header:({column:e})=>(0,Z.jsx)(R,{column:e,title:u()}),cell:({row:e})=>j(e.original.created_at),meta:{label:u(),skeleton:`date`}},{accessorKey:`updated_at`,header:({column:e})=>(0,Z.jsx)(R,{column:e,title:x()}),cell:({row:e})=>j(e.original.updated_at),meta:{label:x(),skeleton:`date`}},{id:`actions`,enableHiding:!1,meta:{label:_e(),skeleton:`action`,sticky:`right`},cell:({row:t})=>(0,Z.jsxs)(Ee,{modal:!1,children:[(0,Z.jsx)(Ce,{asChild:!0,children:(0,Z.jsxs)(N,{className:`flex h-8 w-8 p-0 data-[state=open]:bg-muted`,variant:`ghost`,children:[(0,Z.jsx)(Ue,{className:`h-4 w-4`}),(0,Z.jsx)(`span`,{className:`sr-only`,children:`Open menu`})]})}),(0,Z.jsxs)(we,{align:`end`,className:`w-40`,children:[(0,Z.jsxs)(P,{onClick:()=>e(`edit`,t.original),children:[T(),(0,Z.jsx)(F,{children:(0,Z.jsx)(qe,{size:16})})]}),(0,Z.jsx)(Te,{}),(0,Z.jsxs)(P,{onClick:()=>e(`delete`,t.original),variant:`destructive`,children:[S(),(0,Z.jsx)(F,{children:(0,Z.jsx)(Xe,{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,d]=(0,X.useState)({pageIndex:0,pageSize:10}),f=Le({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:d,globalFilterFn:(e,t,n)=>{let r=String(n).toLowerCase();return(e.original.symbol??``).toLowerCase().includes(r)||(e.original.contract_address??``).toLowerCase().includes(r)},getCoreRowModel:ze(),getFilteredRowModel:Ve(),getPaginationRowModel:Ne(),getSortedRowModel:Pe(),getFacetedRowModel:Me(),getFacetedUniqueValues:Fe()});return(0,X.useEffect)(()=>{let e=f.getPageCount();e>0&&u.pageIndex>e-1&&d(e=>({...e,pageIndex:0}))},[f,u.pageIndex]),(0,Z.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4`,children:[(0,Z.jsx)(Be,{onRefresh:r,searchKey:`symbol`,searchPlaceholder:pe(),table:f}),(0,Z.jsx)(Re,{emptyText:g(),loading:t,table:f}),(0,Z.jsx)(Ie,{className:`mt-auto`,table:f})]})}var Q=new n({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=r(Q,e=>e.chainTokens),n=r(Q,e=>e.loading),i=t.useQuery(`get`,`/admin/api/v1/chain-tokens`);return(0,X.useEffect)(()=>{ht(i.isLoading)},[i.isLoading]),(0,X.useEffect)(()=>{i.data?.data&&mt(i.data.data)},[i.data?.data]),{chainTokens:e,loading:n,refetch:i.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:M(`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:M(`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:D()}),(0,Z.jsx)(ye,{size:20})]}),(0,Z.jsx)(Y,{variant:`secondary`,children:he({count:String(e.length)})})]}),(0,Z.jsxs)(`div`,{className:`relative block`,children:[(0,Z.jsx)(Ze,{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:fe(),value:n})]})]}),(0,Z.jsxs)(xe,{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:E()}),(0,Z.jsx)(`div`,{className:`mt-1 text-muted-foreground text-xs`,children:O({chains:String(e.length),tokens:String(s)})})]}),(0,Z.jsx)(be,{className:`mt-0.5 size-4 text-muted-foreground`})]})}),(0,Z.jsx)(I,{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)(z,{className:`h-4 w-24`}),(0,Z.jsx)(z,{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)(z,{className:`h-3 w-28`}),(0,Z.jsx)(z,{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)(L,{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:me()}),(0,Z.jsx)(Y,{className:`shrink-0 text-xs`,variant:`outline`,children:t.network})]})]})})}),n<e.length-1?(0,Z.jsx)(I,{className:`my-1`}):null]},t.network??String(n))),!t&&e.length===0?(0,Z.jsx)(We,{description:de()}):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)(N,{className:`sm:hidden`,onClick:n,size:`icon`,variant:`ghost`,children:(0,Z.jsx)(He,{className:`rtl:rotate-180`})}),(0,Z.jsx)(`div`,{className:`flex-1`,children:(0,Z.jsx)(ct,{actions:(0,Z.jsxs)(N,{onClick:r,children:[(0,Z.jsx)(Ye,{className:`mr-2 h-4 w-4`}),ge()]}),description:ce(),title:D()})})]}),(0,Z.jsx)(pt,{data:e,isLoading:t,onAction:i,onRefresh:a})]})}function bt(){let{chains:e,loading:n,refetch:r}=Je(),{chainTokens:a,loading:s,refetch:c}=gt(),l=t.useMutation(`post`,`/admin/api/v1/chain-tokens`),u=t.useMutation(`patch`,`/admin/api/v1/chain-tokens/{id}`),d=t.useMutation(`post`,`/admin/api/v1/chain-tokens/{id}/status`),f=t.useMutation(`patch`,`/admin/api/v1/chains/{network}`),[p,m]=(0,X.useState)(``),[g,_]=(0,X.useState)(`overview`),[v,y]=(0,X.useState)(null),[ee,te]=(0,X.useState)(!1),[ne,b]=(0,X.useState)(!1),[x,S]=(0,X.useState)(``),[C,w]=(0,X.useState)(null),T=(0,X.useMemo)(()=>{let t=p.trim().toLowerCase();return t?e.filter(e=>[e.display_name,e.network].filter(Boolean).some(e=>String(e).toLowerCase().includes(t))):e},[e,p]),E=(0,X.useMemo)(()=>g===`overview`?a:a.filter(e=>e.network===g),[a,g]);async function D(){await Promise.all([i.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chains`]}),i.invalidateQueries({queryKey:[`get`,`/admin/api/v1/chain-tokens`]})])}async function se(e,t){e.network&&(await f.mutateAsync({params:{path:{network:e.network}},body:{display_name:e.display_name,enabled:t,min_confirmations:e.min_confirmations,scan_interval_sec:e.scan_interval_sec}}),B.success(o({status:t?re():oe()})),await D())}async function ce(e,t){if(e===`edit`||e===`delete`){b(!0);return}if(e===`enable`||e===`disable`){if(!t.id)return;await d.mutateAsync({params:{path:{id:t.id}},body:{enabled:e===`enable`}}),B.success(ie()),await D();return}}let O=v!==null,k=n||s;return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(Ge,{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:T,hiddenOnMobile:O,isLoading:k,keyword:p,onKeywordChange:m,onSelect:e=>{_(e),y(e)},onToggle:se,selectedPanel:g,totalTokens:a.length}),(0,Z.jsx)(`div`,{className:M(`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`,O&&`inset-s-0 flex`),children:(0,Z.jsx)(yt,{isLoading:k,onAction:ce,onBack:()=>y(null),onCreate:()=>b(!0),onRefresh:()=>{r(),c()},tokens:E})})]})}),(0,Z.jsx)(dt,{chains:e.filter(e=>!!e.network).map(e=>({network:e.network,display_name:e.display_name})),currentRow:C,defaultNetwork:x,onCreate:async e=>{await l.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=>{te(e),e||(w(null),S(``))},onSuccess:async()=>{B.success(C?ae():h()),await D()},onUpdate:async e=>{C?.id&&await u.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:ne})]})}var xt=bt;export{xt as component};