diff --git a/build-webapp.sh b/build-webapp.sh index e6476e6f..b289f28f 100755 --- a/build-webapp.sh +++ b/build-webapp.sh @@ -17,6 +17,7 @@ VITE_GITHUB_IMAGE_UPLOAD_PWA_TEMPLATE_REPO = 'LACONIC_HOSTED_CONFIG_github_image VITE_GITHUB_NEXT_APP_TEMPLATE_REPO = 'LACONIC_HOSTED_CONFIG_github_next_app_templaterepo' VITE_WALLET_CONNECT_ID = 'LACONIC_HOSTED_CONFIG_wallet_connect_id' VITE_LACONICD_CHAIN_ID = 'LACONIC_HOSTED_CONFIG_laconicd_chain_id' +VITE_WALLET_IFRAME_URL = 'LACONIC_HOSTED_CONFIG_wallet_iframe_url' VITE_LIT_RELAY_API_KEY = 'LACONIC_HOSTED_CONFIG_lit_relay_api_key' VITE_BUGSNAG_API_KEY = 'LACONIC_HOSTED_CONFIG_bugsnag_api_key' VITE_PASSKEY_WALLET_RPID = 'LACONIC_HOSTED_CONFIG_passkey_wallet_rpid' diff --git a/packages/deployer/staging-records/application-deployment-request.yml b/packages/deployer/staging-records/application-deployment-request.yml index fd7ee288..897c47a4 100644 --- a/packages/deployer/staging-records/application-deployment-request.yml +++ b/packages/deployer/staging-records/application-deployment-request.yml @@ -18,6 +18,8 @@ record: LACONIC_HOSTED_CONFIG_bugsnag_api_key: 8c480cd5386079f9dd44f9581264a073 LACONIC_HOSTED_CONFIG_passkey_wallet_rpid: dashboard.staging.apps.snowballtools.com LACONIC_HOSTED_CONFIG_turnkey_api_base_url: https://api.turnkey.com + LACONIC_HOSTED_CONFIG_laconicd_chain_id: + LACONIC_HOSTED_CONFIG_wallet_iframe_url: LACONIC_HOSTED_CONFIG_turnkey_organization_id: 5049ae99-5bca-40b3-8317-504384d4e591 meta: note: Added by Snowball @ Mon Jun 24 23:51:48 UTC 2024 diff --git a/packages/frontend/.env.example b/packages/frontend/.env.example index 75671697..62241552 100644 --- a/packages/frontend/.env.example +++ b/packages/frontend/.env.example @@ -15,4 +15,4 @@ VITE_PASSKEY_WALLET_RPID= VITE_TURNKEY_API_BASE_URL= VITE_LACONICD_CHAIN_ID= -VITE_IFRAME_ORIGIN_URL= +VITE_WALLET_IFRAME_URL= diff --git a/packages/frontend/src/components/projects/create/AccountsDropdown.tsx b/packages/frontend/src/components/projects/create/AccountsDropdown.tsx index e404b093..d885a018 100644 --- a/packages/frontend/src/components/projects/create/AccountsDropdown.tsx +++ b/packages/frontend/src/components/projects/create/AccountsDropdown.tsx @@ -7,7 +7,6 @@ const AccountsDropdown = ({ accounts: string[]; onAccountChange: (selectedAccount: string) => void; }) => { - return (
{!accounts.length ? ( diff --git a/packages/frontend/src/components/projects/create/Configure.tsx b/packages/frontend/src/components/projects/create/Configure.tsx index a8731ba5..47cc2c04 100644 --- a/packages/frontend/src/components/projects/create/Configure.tsx +++ b/packages/frontend/src/components/projects/create/Configure.tsx @@ -23,7 +23,7 @@ import { useGQLClient } from '../../../context/GQLClientContext'; import IFrameModal from './IFrameModal'; import EnvironmentVariablesForm from 'pages/org-slug/projects/id/settings/EnvironmentVariablesForm'; import { EnvironmentVariablesFormValues } from 'types/types'; -import { VITE_LACONICD_CHAIN_ID, VITE_IFRAME_ORIGIN_URL } from 'utils/constants'; +import { VITE_LACONICD_CHAIN_ID, VITE_WALLET_IFRAME_URL } from 'utils/constants'; import AccountsDropdown from './AccountsDropdown'; type ConfigureDeploymentFormValues = { @@ -37,7 +37,7 @@ type ConfigureFormValues = ConfigureDeploymentFormValues & EnvironmentVariablesFormValues; const DEFAULT_MAX_PRICE = '10000'; -const TX_APPROVAL_TIMEOUT = 60000; +const TX_APPROVAL_TIMEOUT_MS = 60000; const Configure = () => { const [isLoading, setIsLoading] = useState(false); @@ -216,6 +216,13 @@ const Configure = () => { ); if (!txHash) { + console.error('Tx not successful'); + toast({ + id: 'unsuccessful-tx', + title: 'Transaction rejected', + variant: 'error', + onDismiss: dismiss, + }); return; } @@ -289,6 +296,7 @@ const Configure = () => { variant: 'error', onDismiss: dismiss, }); + throw new Error('Error deploying app'); } }, [client, createProject, dismiss, toast], @@ -318,7 +326,7 @@ const Configure = () => { const cosmosSendTokensHandler = useCallback( async (selectedAccount: string, amount: string) => { if (!selectedAccount) { - return; + throw new Error('Account not selected'); } const senderAddress = selectedAccount; @@ -330,14 +338,13 @@ const Configure = () => { await requestTx(senderAddress, snowballAddress, amount); - const txHash = await new Promise((resolve, reject) => { + const txHash = await new Promise((resolve, reject) => { const handleTxStatus = async (event: MessageEvent) => { - if (event.origin !== VITE_IFRAME_ORIGIN_URL) return; + if (event.origin !== VITE_WALLET_IFRAME_URL) return; - if (event.data.type === 'TRANSACTION_SUCCESS') { + if (event.data.type === 'TRANSACTION_RESPONSE') { const txResponse = event.data.data; resolve(txResponse); - setIsFrameVisible(false); } else if (event.data.type === 'ERROR') { console.error('Error from wallet:', event.data.message); reject(new Error('Transaction failed')); @@ -348,6 +355,7 @@ const Configure = () => { onDismiss: dismiss, }); } + setIsFrameVisible(false); window.removeEventListener('message', handleTxStatus); }; @@ -364,12 +372,12 @@ const Configure = () => { variant: 'error', onDismiss: dismiss, }); - }, TX_APPROVAL_TIMEOUT); + }, TX_APPROVAL_TIMEOUT_MS); }); return txHash; } catch (error) { console.error('Error in transaction:', error); - return; + throw new Error('Error in transaction:'); } finally { setIsPaymentLoading(false); } @@ -393,7 +401,7 @@ const Configure = () => { toAddress: recipient, amount, }, - VITE_IFRAME_ORIGIN_URL + VITE_WALLET_IFRAME_URL ); setIsFrameVisible(true); diff --git a/packages/frontend/src/components/projects/create/IFrameModal.tsx b/packages/frontend/src/components/projects/create/IFrameModal.tsx index b7db68e5..d912438f 100644 --- a/packages/frontend/src/components/projects/create/IFrameModal.tsx +++ b/packages/frontend/src/components/projects/create/IFrameModal.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect } from 'react'; import { Box, Modal } from '@mui/material'; -import { VITE_LACONICD_CHAIN_ID, VITE_IFRAME_ORIGIN_URL } from 'utils/constants'; +import { VITE_LACONICD_CHAIN_ID, VITE_WALLET_IFRAME_URL } from 'utils/constants'; const IFrameModal = ({ setAccounts, @@ -16,7 +16,7 @@ const IFrameModal = ({ useEffect(() => { const handleMessage = (event: MessageEvent) => { // TODO: Use env for origin URL - if (event.origin !== VITE_IFRAME_ORIGIN_URL) return; + if (event.origin !== VITE_WALLET_IFRAME_URL) return; if (event.data.type === 'WALLET_ACCOUNTS_DATA') { setAccounts(event.data.data); @@ -45,7 +45,7 @@ const IFrameModal = ({ type: 'REQUEST_WALLET_ACCOUNTS', chainId: VITE_LACONICD_CHAIN_ID, }, - VITE_IFRAME_ORIGIN_URL + VITE_WALLET_IFRAME_URL ); }, []); @@ -71,7 +71,7 @@ const IFrameModal = ({