diff --git a/.github/workflows/rainix.yaml b/.github/workflows/rainix.yaml index 79a99de4f..c026aa57a 100644 --- a/.github/workflows/rainix.yaml +++ b/.github/workflows/rainix.yaml @@ -46,4 +46,5 @@ jobs: env: ETH_RPC_URL: ${{ secrets.CI_DEPLOY_RPC_URL }} ETHERSCAN_API_KEY: ${{ secrets.EXPLORER_VERIFICATION_KEY }} + DEPLOY_VERIFIER: 'etherscan' run: nix run .#${{ matrix.task }} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 1243722c4..7ac93f7f7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,22 @@ { - "editor.rulers": [80], - "svelte.enable-ts-plugin": true -} \ No newline at end of file + "editor.rulers": [80], + "svelte.enable-ts-plugin": true, + "[rust]": { + "editor.defaultFormatter": "rust-lang.rust-analyzer", + "editor.formatOnSave": true, + "editor.formatOnSaveMode": "file" + }, + "[javascript][svelte][typescript]": { + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "eslint.lintTask.enable": true + } + }, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "svelte" + ] +} diff --git a/flake.lock b/flake.lock index 440b648af..e934a6b30 100644 --- a/flake.lock +++ b/flake.lock @@ -230,11 +230,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1706188524, - "narHash": "sha256-00tqCE28UCZHnAJoMe3tfka4oPFR2cRCwVkWFfdF2LU=", + "lastModified": 1706273944, + "narHash": "sha256-SV6TMnhVT/Ss8JYzlHnNy4/1IIwhkrdf/bCUyR5Csus=", "owner": "rainprotocol", "repo": "rainix", - "rev": "f9be41156d89306639166db7d936bd16da008327", + "rev": "5484ccc99387684fdf14b2e7e4e4471f7745ffc4", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 61d473829..b4edaa733 100644 --- a/flake.nix +++ b/flake.nix @@ -28,6 +28,9 @@ typeshare crates/subgraph/src/types/orders.rs --lang=typescript --output-file=tauri-app/src/lib/typeshare/orders.ts; typeshare tauri-app/src-tauri/src/toast.rs --lang=typescript --output-file=tauri-app/src/lib/typeshare/toast.ts; typeshare tauri-app/src-tauri/src/transaction_status.rs --lang=typescript --output-file=tauri-app/src/lib/typeshare/transactionStatus.ts; + + # Fix linting of generated types + cd tauri-app && npm i && npm run lint ''; additionalBuildInputs = [ pkgs.typeshare diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..7501ea652 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "rain.orderbook", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/tauri-app/.eslintrc.cjs b/tauri-app/.eslintrc.cjs index 2a77cf7bf..b805d8ba8 100644 --- a/tauri-app/.eslintrc.cjs +++ b/tauri-app/.eslintrc.cjs @@ -12,7 +12,7 @@ module.exports = { parserOptions: { sourceType: 'module', ecmaVersion: 2020, - extraFileExtensions: ['.svelte'] + extraFileExtensions: ['.svelte', '.ts'] }, env: { browser: true, @@ -27,5 +27,9 @@ module.exports = { parser: '@typescript-eslint/parser' } } - ] + ], + rules: { + 'no-console': 'error', + 'no-trailing-spaces': 'error' + } }; diff --git a/tauri-app/package.json b/tauri-app/package.json index 74b30bae2..9c75bd25c 100644 --- a/tauri-app/package.json +++ b/tauri-app/package.json @@ -8,8 +8,7 @@ "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --check . && eslint .", - "format": "prettier --write ." + "lint": "eslint --fix src" }, "devDependencies": { "@sveltejs/adapter-auto": "^3.0.0", diff --git a/tauri-app/src/lib/InputLedgerWallet.svelte b/tauri-app/src/lib/InputLedgerWallet.svelte index de18621ad..1ff2b07ac 100644 --- a/tauri-app/src/lib/InputLedgerWallet.svelte +++ b/tauri-app/src/lib/InputLedgerWallet.svelte @@ -7,6 +7,7 @@ import { invoke } from '@tauri-apps/api'; import { isAddress } from 'viem'; import { toasts } from '$lib/stores/toasts'; + import { ToastMessageType } from './typeshare/toast'; const maskOptions = { mask: Number, @@ -38,9 +39,8 @@ }); walletAddress = res; } catch (error) { - console.error(error); toasts.add({ - message_type: 'Error', + message_type: ToastMessageType.Error, text: `Ledger error: ${error}`, }); } diff --git a/tauri-app/src/lib/InputTokenAmount.svelte b/tauri-app/src/lib/InputTokenAmount.svelte index 0ebd84a4f..b5d7239ea 100644 --- a/tauri-app/src/lib/InputTokenAmount.svelte +++ b/tauri-app/src/lib/InputTokenAmount.svelte @@ -24,6 +24,7 @@ value = detail.value; try { valueRaw = parseUnits(detail.unmaskedValue, decimals); + // eslint-disable-next-line no-empty } catch (e) {} } diff --git a/tauri-app/src/lib/ModalVaultDeposit.svelte b/tauri-app/src/lib/ModalVaultDeposit.svelte index 95bda5ec3..374f1d791 100644 --- a/tauri-app/src/lib/ModalVaultDeposit.svelte +++ b/tauri-app/src/lib/ModalVaultDeposit.svelte @@ -19,10 +19,8 @@ async function execute() { isSubmitting = true; - try { - await vaultDeposit(vault.vault.vault_id, vault.token.id, amountRaw); - reset(); - } catch (e) {} + await vaultDeposit(vault.vault.vault_id, vault.token.id, amountRaw); + reset(); isSubmitting = false; } diff --git a/tauri-app/src/lib/ModalVaultWithdraw.svelte b/tauri-app/src/lib/ModalVaultWithdraw.svelte index 6610a3c56..3f875d705 100644 --- a/tauri-app/src/lib/ModalVaultWithdraw.svelte +++ b/tauri-app/src/lib/ModalVaultWithdraw.svelte @@ -11,11 +11,7 @@ let amountGTBalance: boolean; let isSubmitting = false; - $: { - try { - amountGTBalance = amountRaw > vault.balance; - } catch (e) {} - } + $: amountGTBalance = amountRaw > vault.balance; function reset() { amount = ''; @@ -25,10 +21,8 @@ async function execute() { isSubmitting = true; - try { - await vaultWithdraw(vault.vault.vault_id, vault.token.id, amountRaw); - reset(); - } catch (e) {} + await vaultWithdraw(vault.vault.vault_id, vault.token.id, amountRaw); + reset(); isSubmitting = false; } diff --git a/tauri-app/src/lib/stores/chain.ts b/tauri-app/src/lib/stores/chain.ts index e9f15009b..bb3941fe8 100644 --- a/tauri-app/src/lib/stores/chain.ts +++ b/tauri-app/src/lib/stores/chain.ts @@ -24,7 +24,7 @@ export async function updateChainId() { } } -export const activeChain = derived(chainId, (val) => { +export const activeChain = derived(chainId, (val) => { return find(Object.values(chains), (c) => c.id === val); }); diff --git a/tauri-app/src/lib/stores/vaultDetail.ts b/tauri-app/src/lib/stores/vaultDetail.ts index 586db844d..4d4acca76 100644 --- a/tauri-app/src/lib/stores/vaultDetail.ts +++ b/tauri-app/src/lib/stores/vaultDetail.ts @@ -15,7 +15,7 @@ function useVaultDetailStore() { localStorage.setItem(STORAGE_KEY, JSON.stringify({})); } }); - + async function refetch(id: string) { const res: VaultDetail = await invoke("vault_detail", {id, subgraphArgs: { url: get(subgraphUrl)} }); update((value) => { diff --git a/tauri-app/src/lib/stores/vaultsList.ts b/tauri-app/src/lib/stores/vaultsList.ts index 244fd07bd..82d13518e 100644 --- a/tauri-app/src/lib/stores/vaultsList.ts +++ b/tauri-app/src/lib/stores/vaultsList.ts @@ -15,7 +15,7 @@ function useVaultsListStore() { localStorage.setItem(STORAGE_KEY, JSON.stringify([])); } }); - + async function refetch() { const res: Array = await invoke("vaults_list", {subgraphArgs: { url: get(subgraphUrl)} }); set(res); diff --git a/tauri-app/src/lib/utils/vaultDeposit.ts b/tauri-app/src/lib/utils/vaultDeposit.ts index 56f7c5502..1bbeea06b 100644 --- a/tauri-app/src/lib/utils/vaultDeposit.ts +++ b/tauri-app/src/lib/utils/vaultDeposit.ts @@ -2,21 +2,30 @@ import { get } from 'svelte/store'; import { invoke } from '@tauri-apps/api'; import { rpcUrl, orderbookAddress, walletDerivationIndex } from '../stores/settings'; import { chainId } from '$lib/stores/chain'; +import { toasts } from '$lib/stores/toasts'; +import { ToastMessageType } from '$lib/typeshare/toast'; export async function vaultDeposit(vaultId: bigint, token: string, amount: bigint) { - await invoke("vault_deposit", { - depositArgs: { + try { + await invoke("vault_deposit", { + depositArgs: { vault_id: vaultId.toString(), token, amount: amount.toString(), - }, - transactionArgs: { + }, + transactionArgs: { rpc_url: get(rpcUrl), orderbook_address: get(orderbookAddress), derivation_index: get(walletDerivationIndex), chain_id: get(chainId), max_priority_fee_per_gas: '400000000000', max_fee_per_gas: '400000000000', - } + } }); - } \ No newline at end of file + } catch(e) { + toasts.add({ + message_type: ToastMessageType.Error, + text: e as string + }); + } +}; \ No newline at end of file diff --git a/tauri-app/src/lib/utils/vaultWithdraw.ts b/tauri-app/src/lib/utils/vaultWithdraw.ts index ff9565c66..8e76b9927 100644 --- a/tauri-app/src/lib/utils/vaultWithdraw.ts +++ b/tauri-app/src/lib/utils/vaultWithdraw.ts @@ -2,8 +2,11 @@ import { get } from 'svelte/store'; import { invoke } from '@tauri-apps/api'; import { rpcUrl, orderbookAddress, walletDerivationIndex } from '../stores/settings'; import { chainId } from '$lib/stores/chain'; +import { toasts } from '$lib/stores/toasts'; +import { ToastMessageType } from '$lib/typeshare/toast'; export async function vaultWithdraw(vaultId: bigint, token: string, targetAmount: bigint) { + try { await invoke("vault_withdraw", { withdrawArgs: { vault_id: vaultId.toString(), @@ -19,4 +22,10 @@ export async function vaultWithdraw(vaultId: bigint, token: string, targetAmount max_fee_per_gas: '400000000000', } }); - }; \ No newline at end of file + } catch(e) { + toasts.add({ + message_type: ToastMessageType.Error, + text: e as string + }); + } +}; \ No newline at end of file diff --git a/tauri-app/src/routes/settings/+page.svelte b/tauri-app/src/routes/settings/+page.svelte index 19747839c..dd407c5c5 100644 --- a/tauri-app/src/routes/settings/+page.svelte +++ b/tauri-app/src/routes/settings/+page.svelte @@ -1,5 +1,5 @@