From dd1d747b604fe6bcd87a1a7f6507432c6fcf2006 Mon Sep 17 00:00:00 2001 From: Nabarun Date: Tue, 24 Jun 2025 17:06:51 +0000 Subject: [PATCH] Implement feature to add custom network config to embedded wallet (#59) Part of https://www.notion.so/Laconic-Mainnet-Plan-1eca6b22d47280569cd0d1e6d711d949 Co-authored-by: Shreerang Kale Co-authored-by: Prathamesh Musale Reviewed-on: https://git.vdb.to/cerc-io/snowballtools-base/pulls/59 Co-authored-by: Nabarun Co-committed-by: Nabarun --- .gitea/workflows/deploy-frontend.yaml | 6 +- build-webapp.sh | 1 - package.json | 5 +- packages/deployer/config.yml | 6 +- packages/deployer/deploy-frontend.sh | 1 - packages/frontend/.env.example | 1 - .../public/android-chrome-192x192.png | Bin 0 -> 3224 bytes packages/frontend/public/network.json | 11 +++ .../create/ApproveTransactionModal.tsx | 30 ++++-- .../projects/create/CheckBalanceIframe.tsx | 20 ++-- .../components/projects/create/Configure.tsx | 5 +- .../project/overview/Activity/AuctionCard.tsx | 5 + .../shared/auth/AutoSignInIFrameModal.tsx | 5 +- packages/frontend/src/constants.ts | 11 +++ packages/frontend/src/hooks/useAddNetwork.ts | 92 ++++++++++++++++++ .../frontend/src/hooks/useCheckBalance.tsx | 12 ++- .../pages/org-slug/projects/id/Overview.tsx | 2 +- packages/frontend/src/utils/constants.ts | 1 - packages/gql-client/src/client.ts | 15 ++- 19 files changed, 189 insertions(+), 40 deletions(-) create mode 100644 packages/frontend/public/android-chrome-192x192.png create mode 100644 packages/frontend/public/network.json create mode 100644 packages/frontend/src/hooks/useAddNetwork.ts diff --git a/.gitea/workflows/deploy-frontend.yaml b/.gitea/workflows/deploy-frontend.yaml index 1f604639..789fa08e 100644 --- a/.gitea/workflows/deploy-frontend.yaml +++ b/.gitea/workflows/deploy-frontend.yaml @@ -47,11 +47,11 @@ jobs: cat > packages/deployer/config.yml <?LJk1{fG{41b=v2Se*xp) zzfO~W0{a9H#JL0mfS}~R00FuAGW#MZ*va-JP~9)Txc@-BF{d#AP?s#Ydld=*Lb`Y? z#yK3cTyQ#AY6N+Q*lcq|EwNaZgmr==Y7=^N9-+=_eqSmG^T}2iQ`cS>TtZWJpyAmH zyWr7?_)s@>JEyvIsH24RjX<54I9sL1K}>dtiUE#vc3^U%d4TJDIuW>RlxsR*x-ixL zQK6Bzyd|t+cTZU5{zCw3EJZ210~Q;003OL9ES;@DcmMtaa1@3rSNwO(zikfp%{LQG zXuiX0=MvP|a%ZPfQ0lbTi|f83Nr{V_G*b&av-&lO?Q7%Zt7VudSIGYU&FIkxYoo6p zV|Y~d>5CB)Zam9=BrzgPPmy-{jN-Xo`V$s=Bq(?JcY8!WZR`{)YGc03%=}B}$YYF`!(J$~qM>)_ylkL0ooac|(t!ch&j7moX0 z3E=xIBJEAX$v}9w7sKbrEJQC_m(c)gL*Az|xj+0dP4Pyj-J3Aedoq8(U&I z0obs}M3p8{j!X;@I}9FEbWs{ZOBp%GDnnOOH|ivQCRlSr4;3@^G%74iU@Mj~RPs%W z-r}YhnI|sMSBEUb^bsYPCT4Eihu$DbowC}n58rxswJJPLNo4>&5mNAt9>I(68-HAw4 zOWlFZJF`OwicV}%y?WlNT}zYLJ*rYwS}6xDOt@=7M!Ul8G${?q{nRUlJ6)-l@dNaL z>w~hpvUHNO2|Y^Y^F`t!qywY32oe0Yn^w~AcQ#oU#@iyZ(!T;(c&m(}5W1oUAx$Xh zKv(E>zK&kqG>*Wrmj{PF+;NnA1SydKa+oSToH2qI+=qlZ&$pab>{)UAA>Kg_bictO z%^v}P+H@u#KYbK3loy|Z`Xdn-y{-xxyY&3M&?O|wQohN;Tk<}nL<|^>K^?WpAj=QJ>gB zk)5tQpb899@0)c34RVu%M%HoL+rNW?NyF3gZyp0S5JI5q)}G`$p4zAWjpr>2dUh#b zTq+?6KfLu`*4)SUJA>`(J^)y=w)M2LCD*DFwM`meM2}bAX0)|1G3hgLA1N7{@m6b2p^<#b1ioNw)O#4&UU&Xm&H7uRp#osikb8GzNp#hDg9&7_2L8aqD<`AlB! zJYMF|dO1lDNpq=Zf8*So8Q|e?qwF>)Qr98XqA-~9_p9VB`4;3$rPhz_vc~;T&V8ZY zw<|HSrkL9qKg)Dp!_%uiA_#zzlsHA3z#CmIeBk(M5@+}Jb0}0BIFyOf&znFpfTeD{ z+fk;cAU1=#G=Mj7Oi0)iI3~?0@`jmaN9J|2pbVfmgacb;5v;W>edJs4*m)_@_RtZH z{ZI>KbjW?l@NVqO^ISfvL`V0)QX*M}nh(}SSC1=kN}y@pH(ZPq={=9PQ}~a4+I*!p zC!r6<9l0@LB{={1nlE&0+LO!I1{++)A9*IOR;8E^X?=BbQvlOw85zG8iq#TLzSPob zyD8uX8AThZ-fu8;iXb1GmG6LB)T38bEmQ6F6j~2uBq7~@x__MB&yg<{6}G9T79M)e zHdejW`z>nakZJi0TR(2h7Z!dAI*z`P*Xw9nJY;U}e$Ys3@K?*|#?H|;|J$QTulYj* zpNJolT5dT|94UNm%_h597m~p}*(XatnwbK+4$0kocM$cwKCXx!H&BEJIo4ryAZ6M- zTTt0IR%~}KvR})1?%;m>TsByV}dxE9~46_!){!o9q*Z6;U)j#{@@?3swH zFPul8^^DnFqNLAUUERs$>zA`_LbCR7MpGV8vT~Gkhe-cNozoG z%2uOqOPGycMFtA@|9BC>j1q8e6Qppa$1@v`B!`~Ct`&iC+OSHBIgGc_DlluE?C5m= zoGLRy0N+@p3>&~>j%l6>ok#CQtLBbgi-fT3!he#c<=0$enyDrId7^KO zXGoGI&$S>;cp~EI+LiR6w1P*+N|ke@{<4~$mb|LjS;>K+>&ZD;#|IvTWLx*5YW?Gt z`{;`FyGGil$}uPkeXg%#x$BCg;BLHo}#Eq z5+RVzHbcoALG~?_C1C5S3J?Cxu)A;uaf#IpWW^;dO! z@^ZKc5knV`17uI>Izz%#-6z+a%~CoEakug5&atEaXon=IPu4*vWGlqBWijv+kobZ0 z4yUkhw{$Dpu9%y4l{b zce?dOekRKv6j&K7yeSn_CGPQnPV1wUv{Yk?h`W{9W?NdaKcB!aQrOBeDwq@ScLZ~} zsDiCfd)VjlTfZhN@+Ku07=|8mPrmN3W|(wbyHcf% void; isVisible: boolean; }) => { + const { setIframe, isNetworkAvailable, networkData } = useAddNetwork(); + useEffect(() => { const handleMessage = (event: MessageEvent) => { if (event.origin !== VITE_WALLET_IFRAME_URL) return; - if (event.data.type === 'WALLET_ACCOUNTS_DATA') { + if (event.data.type === WALLET_ACCOUNTS_DATA) { setIsDataReceived(true); if (event.data.data.length === 0) { - console.error(`Accounts not present for chainId: ${VITE_LACONICD_CHAIN_ID}`); + console.error(`Accounts not present for chainId: ${networkData?.chainId}`); return; } @@ -41,9 +44,14 @@ const ApproveTransactionModal = ({ return () => { window.removeEventListener('message', handleMessage); }; - }, []); + }, [networkData]); const getDataFromWallet = useCallback(() => { + if (!networkData) { + console.error('networkData should not be empty'); + return; + } + const iframe = document.getElementById('walletIframe') as HTMLIFrameElement; if (!iframe.contentWindow) { @@ -53,12 +61,18 @@ const ApproveTransactionModal = ({ iframe.contentWindow.postMessage( { - type: 'REQUEST_WALLET_ACCOUNTS', - chainId: VITE_LACONICD_CHAIN_ID, + type: REQUEST_WALLET_ACCOUNTS, + chainId: networkData.chainId, }, VITE_WALLET_IFRAME_URL, ); - }, []); + }, [networkData]); + + useEffect(() => { + if (isNetworkAvailable) { + getDataFromWallet(); + } + }, [isNetworkAvailable, getDataFromWallet]) return ( @@ -80,7 +94,7 @@ const ApproveTransactionModal = ({ }} >