From 0bb764061fc0ce8057768ef6e5ec68e63d106285 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 13 Jan 2025 10:22:26 +0100 Subject: [PATCH 01/74] Fix hash links to vaults and orders --- .../src/lib/components/Hash.svelte | 2 +- .../HashActiveStatusIndicator.svelte | 21 +++++++++ .../lib/components/detail/VaultDetail.svelte | 39 ++++++++--------- .../components/tables/VaultsListTable.svelte | 43 ++++++------------- .../routes/vaults/[network]-[id]/+page.svelte | 4 +- 5 files changed, 56 insertions(+), 53 deletions(-) create mode 100644 packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte diff --git a/packages/ui-components/src/lib/components/Hash.svelte b/packages/ui-components/src/lib/components/Hash.svelte index c223c3d99..1d3ad8cbd 100644 --- a/packages/ui-components/src/lib/components/Hash.svelte +++ b/packages/ui-components/src/lib/components/Hash.svelte @@ -74,7 +74,7 @@ {/if} {#if shorten} - +
{#if type === HashType.Wallet} diff --git a/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte b/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte new file mode 100644 index 000000000..19aecb76f --- /dev/null +++ b/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte index 07e173c45..133b1ea87 100644 --- a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte @@ -9,16 +9,16 @@ import { QKEY_VAULT } from '../../queries/keys'; import { getVault } from '@rainlanguage/orderbook/js_api'; import type { ChartTheme } from '../../utils/lightweightChartsThemes'; - import { goto } from '$app/navigation'; import { formatUnits } from 'viem'; import { createQuery } from '@tanstack/svelte-query'; import { onDestroy } from 'svelte'; - import type { Readable } from 'svelte/store'; + import type { Readable, Writable } from 'svelte/store'; import { queryClient } from '../../queries/queryClient'; import { ArrowDownOutline, ArrowUpOutline } from 'flowbite-svelte-icons'; import type { Vault } from '@rainlanguage/orderbook/js_api'; + import HashActiveStatusIndicator from '../HashActiveStatusIndicator.svelte'; export let id: string; export let network: string; @@ -30,6 +30,8 @@ undefined; export let lightweightChartsTheme: Readable | undefined = undefined; export let settings; + export let activeNetworkRef: Writable; + export let activeOrderbookRef: Writable; const subgraphUrl = $settings?.subgraphs?.[network] || ''; $: vaultDetailQuery = createQuery({ @@ -40,6 +42,11 @@ enabled: !!subgraphUrl }); + const updateActiveNetworkAndOrderbook = (subgraphName: string) => { + activeNetworkRef.set(subgraphName); + activeOrderbookRef.set(subgraphName); + }; + const interval = setInterval(async () => { // This invalidate function invalidates // both vault detail and vault balance changes queries @@ -124,15 +131,11 @@ tauri-app/src/lib/components/detail/VaultDetail.svelte {#if data.ordersAsInput && data.ordersAsInput.length > 0} {#each data.ordersAsInput as order} - + {/each} {:else} None @@ -147,15 +150,11 @@ tauri-app/src/lib/components/detail/VaultDetail.svelte {#if data.ordersAsOutput && data.ordersAsOutput.length > 0} {#each data.ordersAsOutput as order} - + {/each} {:else} None diff --git a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte index 28c8d7a3a..3b739013b 100644 --- a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte +++ b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte @@ -5,6 +5,7 @@ import { createInfiniteQuery } from '@tanstack/svelte-query'; import TanstackAppTable from '../TanstackAppTable.svelte'; import ListViewOrderbookFilters from '../ListViewOrderbookFilters.svelte'; + import HashActiveStatusIndicator from '../HashActiveStatusIndicator.svelte'; import Hash, { HashType } from '../Hash.svelte'; import { DEFAULT_PAGE_SIZE, DEFAULT_REFRESH_INTERVAL } from '../../queries/constants'; import { vaultBalanceDisplay } from '../../utils/vault'; @@ -165,22 +166,12 @@ {#if item.vault.ordersAsInput.length > 0}
- {#each item.vault.ordersAsInput.slice(0, 3) as order} - + {#each item.vault.ordersAsInput.slice(0, 3) as order} + {/each} {#if item.vault.ordersAsInput.length > 3}...{/if}
@@ -190,21 +181,11 @@ {#if item.vault.ordersAsOutput.length > 0}
{#each item.vault.ordersAsOutput.slice(0, 3) as order} - + {/each} {#if item.vault.ordersAsOutput.length > 3}...{/if}
diff --git a/tauri-app/src/routes/vaults/[network]-[id]/+page.svelte b/tauri-app/src/routes/vaults/[network]-[id]/+page.svelte index 49e788551..e9e2fdaa6 100644 --- a/tauri-app/src/routes/vaults/[network]-[id]/+page.svelte +++ b/tauri-app/src/routes/vaults/[network]-[id]/+page.svelte @@ -3,9 +3,9 @@ import { PageHeader } from '@rainlanguage/ui-components'; import { page } from '$app/stores'; import { VaultDetail } from '@rainlanguage/ui-components'; - import { settings } from '$lib/stores/settings'; import { lightweightChartsTheme } from '$lib/stores/darkMode'; import { handleDepositModal, handleWithdrawModal } from '$lib/services/modal'; + import { settings, activeNetworkRef, activeOrderbookRef } from '$lib/stores/settings'; @@ -18,4 +18,6 @@ {lightweightChartsTheme} {settings} {walletAddressMatchesOrBlank} + {activeNetworkRef} + {activeOrderbookRef} /> From 1c5772cbc009240594c84a6d00c8e39bc887a029 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 13 Jan 2025 10:43:43 +0100 Subject: [PATCH 02/74] test it --- .../HashActiveStatusIndicator.test.ts | 68 +++++++++++++++++++ .../HashActiveStatusIndicator.svelte | 2 +- .../components/tables/VaultsListTable.svelte | 10 +-- 3 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts diff --git a/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts b/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts new file mode 100644 index 000000000..df2bf2020 --- /dev/null +++ b/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts @@ -0,0 +1,68 @@ +import { render, fireEvent } from '@testing-library/svelte'; +import { describe, it, expect, vi } from 'vitest'; +import HashActiveStatusIndicator from '../lib/components/HashActiveStatusIndicator.svelte'; +import { goto } from '$app/navigation'; + +vi.mock('$app/navigation', () => ({ + goto: vi.fn() +})); + +describe('HashActiveStatusIndicator', () => { + const mockOrder = { + id: '123', + orderHash: '0x123abc', + active: true + }; + + const mockInactiveOrder = { + ...mockOrder, + active: false + }; + + const mockSubgraphName = 'test-subgraph'; + const mockUpdateFn = vi.fn(); + + it('renders with active order', () => { + const { getByTestId } = render(HashActiveStatusIndicator, { + props: { + order: mockOrder, + subgraphName: mockSubgraphName, + updateActiveNetworkAndOrderbook: mockUpdateFn + } + }); + + const button = getByTestId('vault-order-input'); + expect(button).toBeTruthy(); + expect(button.classList.toString()).toContain('text-white bg-green'); + expect(button.getAttribute('data-order-id')).toBe('123'); + }); + + it('renders with inactive order', () => { + const { getByTestId } = render(HashActiveStatusIndicator, { + props: { + order: mockInactiveOrder, + subgraphName: mockSubgraphName, + updateActiveNetworkAndOrderbook: mockUpdateFn + } + }); + + const button = getByTestId('vault-order-input'); + expect(button.classList.toString()).toContain('text-white bg-yellow'); + }); + + it('handles click event correctly', async () => { + const { getByTestId } = render(HashActiveStatusIndicator, { + props: { + order: mockOrder, + subgraphName: mockSubgraphName, + updateActiveNetworkAndOrderbook: mockUpdateFn + } + }); + + const button = getByTestId('vault-order-input'); + await fireEvent.click(button); + + expect(mockUpdateFn).toHaveBeenCalledWith(mockSubgraphName); + expect(goto).toHaveBeenCalledWith(`/orders/${mockSubgraphName}-${mockOrder.id}`); + }); +}); \ No newline at end of file diff --git a/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte b/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte index 19aecb76f..42a19a708 100644 --- a/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte +++ b/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte @@ -4,7 +4,7 @@ import { goto } from '$app/navigation'; import type { Order, OrderAsIO } from '@rainlanguage/orderbook/js_api'; - export let order: Order | OrderAsIO + export let order: Order | OrderAsIO; export let subgraphName: string; export let updateActiveNetworkAndOrderbook: (subgraphName: string) => void; diff --git a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte index 3b739013b..f13b0d271 100644 --- a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte +++ b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte @@ -166,11 +166,11 @@ {#if item.vault.ordersAsInput.length > 0}
- {#each item.vault.ordersAsInput.slice(0, 3) as order} + {#each item.vault.ordersAsInput.slice(0, 3) as order} {/each} {#if item.vault.ordersAsInput.length > 3}...{/if} @@ -182,9 +182,9 @@
{#each item.vault.ordersAsOutput.slice(0, 3) as order} {/each} {#if item.vault.ordersAsOutput.length > 3}...{/if} From 3d9442109513ea3722405271a0c75600a50c387d Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 13 Jan 2025 11:01:45 +0100 Subject: [PATCH 03/74] update test --- packages/ui-components/src/__tests__/VaultDetail.test.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/ui-components/src/__tests__/VaultDetail.test.ts b/packages/ui-components/src/__tests__/VaultDetail.test.ts index 3a104c195..21b8c2393 100644 --- a/packages/ui-components/src/__tests__/VaultDetail.test.ts +++ b/packages/ui-components/src/__tests__/VaultDetail.test.ts @@ -3,7 +3,7 @@ import { test, vi } from 'vitest'; import { expect } from '$lib/test/matchers'; import { QueryClient } from '@tanstack/svelte-query'; import VaultDetail from '../lib/components/detail/VaultDetail.svelte'; -import { readable } from 'svelte/store'; +import { readable, writable } from 'svelte/store'; import { darkChartTheme } from '../lib/utils/lightweightChartsThemes'; // Mock the js_api getVault function @@ -34,6 +34,8 @@ test('calls the vault detail query fn with the correct vault id', async () => { render(VaultDetail, { props: { + activeNetworkRef: writable('mainnet'), + activeOrderbookRef: writable('0x00'), id: '100', network: 'mainnet', settings: mockSettings, @@ -55,6 +57,8 @@ test('shows the correct empty message when the query returns no data', async () props: { id: '100', network: 'mainnet', + activeNetworkRef: writable('mainnet'), + activeOrderbookRef: writable('0x00'), settings: mockSettings, lightweightChartsTheme: readable(darkChartTheme) }, @@ -96,6 +100,8 @@ test('shows the correct data when the query returns data', async () => { props: { id: '100', network: 'mainnet', + activeNetworkRef: writable('mainnet'), + activeOrderbookRef: writable('0x00'), settings: mockSettings, lightweightChartsTheme: readable(darkChartTheme) }, From 0752b28c80851190eed48011a5778f28103fd424 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 13 Jan 2025 11:35:36 +0100 Subject: [PATCH 04/74] format --- .../HashActiveStatusIndicator.test.ts | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts b/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts index df2bf2020..c02ba0db3 100644 --- a/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts +++ b/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts @@ -4,65 +4,65 @@ import HashActiveStatusIndicator from '../lib/components/HashActiveStatusIndicat import { goto } from '$app/navigation'; vi.mock('$app/navigation', () => ({ - goto: vi.fn() + goto: vi.fn() })); describe('HashActiveStatusIndicator', () => { - const mockOrder = { - id: '123', - orderHash: '0x123abc', - active: true - }; + const mockOrder = { + id: '123', + orderHash: '0x123abc', + active: true + }; - const mockInactiveOrder = { - ...mockOrder, - active: false - }; + const mockInactiveOrder = { + ...mockOrder, + active: false + }; - const mockSubgraphName = 'test-subgraph'; - const mockUpdateFn = vi.fn(); + const mockSubgraphName = 'test-subgraph'; + const mockUpdateFn = vi.fn(); - it('renders with active order', () => { - const { getByTestId } = render(HashActiveStatusIndicator, { - props: { - order: mockOrder, - subgraphName: mockSubgraphName, - updateActiveNetworkAndOrderbook: mockUpdateFn - } - }); + it('renders with active order', () => { + const { getByTestId } = render(HashActiveStatusIndicator, { + props: { + order: mockOrder, + subgraphName: mockSubgraphName, + updateActiveNetworkAndOrderbook: mockUpdateFn + } + }); - const button = getByTestId('vault-order-input'); - expect(button).toBeTruthy(); - expect(button.classList.toString()).toContain('text-white bg-green'); - expect(button.getAttribute('data-order-id')).toBe('123'); - }); + const button = getByTestId('vault-order-input'); + expect(button).toBeTruthy(); + expect(button.classList.toString()).toContain('text-white bg-green'); + expect(button.getAttribute('data-order-id')).toBe('123'); + }); - it('renders with inactive order', () => { - const { getByTestId } = render(HashActiveStatusIndicator, { - props: { - order: mockInactiveOrder, - subgraphName: mockSubgraphName, - updateActiveNetworkAndOrderbook: mockUpdateFn - } - }); + it('renders with inactive order', () => { + const { getByTestId } = render(HashActiveStatusIndicator, { + props: { + order: mockInactiveOrder, + subgraphName: mockSubgraphName, + updateActiveNetworkAndOrderbook: mockUpdateFn + } + }); - const button = getByTestId('vault-order-input'); - expect(button.classList.toString()).toContain('text-white bg-yellow'); - }); + const button = getByTestId('vault-order-input'); + expect(button.classList.toString()).toContain('text-white bg-yellow'); + }); - it('handles click event correctly', async () => { - const { getByTestId } = render(HashActiveStatusIndicator, { - props: { - order: mockOrder, - subgraphName: mockSubgraphName, - updateActiveNetworkAndOrderbook: mockUpdateFn - } - }); + it('handles click event correctly', async () => { + const { getByTestId } = render(HashActiveStatusIndicator, { + props: { + order: mockOrder, + subgraphName: mockSubgraphName, + updateActiveNetworkAndOrderbook: mockUpdateFn + } + }); - const button = getByTestId('vault-order-input'); - await fireEvent.click(button); + const button = getByTestId('vault-order-input'); + await fireEvent.click(button); - expect(mockUpdateFn).toHaveBeenCalledWith(mockSubgraphName); - expect(goto).toHaveBeenCalledWith(`/orders/${mockSubgraphName}-${mockOrder.id}`); - }); -}); \ No newline at end of file + expect(mockUpdateFn).toHaveBeenCalledWith(mockSubgraphName); + expect(goto).toHaveBeenCalledWith(`/orders/${mockSubgraphName}-${mockOrder.id}`); + }); +}); From ac175c79fbca1924e31a482f9a903dc69a570637 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 13 Jan 2025 14:32:36 +0100 Subject: [PATCH 05/74] vite config --- packages/webapp/vite.config.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/webapp/vite.config.ts b/packages/webapp/vite.config.ts index d76fc8a56..e027651be 100644 --- a/packages/webapp/vite.config.ts +++ b/packages/webapp/vite.config.ts @@ -3,8 +3,10 @@ import { sveltekit } from '@sveltejs/kit/vite'; export default defineConfig({ plugins: [sveltekit()], - + define: { + 'process.env': {} + }, test: { include: ['src/**/*.{test,spec}.{js,ts}'] } -}); +}); \ No newline at end of file From 095d76758527537f42e5e320fddfbe1963cd4a57 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 09:58:34 +0100 Subject: [PATCH 06/74] add wagmi setup --- package-lock.json | 2720 +++++++++++++++-- package.json | 43 +- .../src/__tests__/WalletConnect.test.ts | 35 + .../src/lib/__mocks__/mockWeb3Config.ts | 16 + .../ui-components/src/lib/__mocks__/stores.ts | 33 + .../src/lib/components/SidebarWebapp.svelte | 6 +- .../src/lib/components/WalletConnect.svelte | 17 + packages/webapp/env.example | 1 + packages/webapp/src/routes/+layout.svelte | 20 + 9 files changed, 2607 insertions(+), 284 deletions(-) create mode 100644 packages/ui-components/src/__tests__/WalletConnect.test.ts create mode 100644 packages/ui-components/src/lib/__mocks__/mockWeb3Config.ts create mode 100644 packages/ui-components/src/lib/components/WalletConnect.svelte create mode 100644 packages/webapp/env.example diff --git a/package-lock.json b/package-lock.json index 3b8cbbbe5..233c58643 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,9 +15,12 @@ "@rainlanguage/ui-components": "*", "@sveltejs/kit": "^2.0.0", "@sveltejs/package": "^2.0.0", + "@wagmi/connectors": "^5.7.3", + "@wagmi/core": "^2.16.3", "flowbite": "^2.2.1", "flowbite-svelte": "^0.44.21", - "flowbite-svelte-icons": "^0.4.5" + "flowbite-svelte-icons": "^0.4.5", + "svelte-wagmi": "^1.0.7" }, "devDependencies": { "@square/svelte-store": "^1.0.18", @@ -57,7 +60,7 @@ "ts-node": "^10.9.1", "typescript": "^5.0.0", "typescript-eslint": "^8.0.0", - "viem": "^2.21.44", + "viem": "^2.22.8", "vite": "^5.0.11", "vitest": "^2.0.5" }, @@ -75,8 +78,7 @@ "node_modules/@adraffy/ens-normalize": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", - "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==", - "license": "MIT" + "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==" }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", @@ -335,7 +337,6 @@ "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "dev": true, "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -560,6 +561,19 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@ecies/ciphers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.2.tgz", + "integrity": "sha512-ylfGR7PyTd+Rm2PqQowG08BCKA22QuX8NzrL+LxAAvazN10DMwdJ2fWwAzRj05FI/M8vNFGm3cv9Wq/GFWCBLg==", + "engines": { + "bun": ">=1", + "deno": ">=2", + "node": ">=16" + }, + "peerDependencies": { + "@noble/ciphers": "^1.0.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -1016,6 +1030,53 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "dependencies": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -2158,6 +2219,361 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@metamask/eth-json-rpc-provider": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-1.0.1.tgz", + "integrity": "sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA==", + "dependencies": { + "@metamask/json-rpc-engine": "^7.0.0", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/json-rpc-engine": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz", + "integrity": "sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==", + "dependencies": { + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.0.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==", + "dependencies": { + "@ethereumjs/tx": "^4.1.2", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@metamask/eth-json-rpc-provider/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/json-rpc-engine": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz", + "integrity": "sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==", + "dependencies": { + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/json-rpc-middleware-stream": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-7.0.2.tgz", + "integrity": "sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==", + "dependencies": { + "@metamask/json-rpc-engine": "^8.0.2", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0", + "readable-stream": "^3.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/json-rpc-middleware-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@metamask/object-multiplex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.1.0.tgz", + "integrity": "sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==", + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.2" + }, + "engines": { + "node": "^16.20 || ^18.16 || >=20" + } + }, + "node_modules/@metamask/object-multiplex/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@metamask/onboarding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@metamask/onboarding/-/onboarding-1.0.1.tgz", + "integrity": "sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==", + "dependencies": { + "bowser": "^2.9.0" + } + }, + "node_modules/@metamask/providers": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-16.1.0.tgz", + "integrity": "sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==", + "dependencies": { + "@metamask/json-rpc-engine": "^8.0.1", + "@metamask/json-rpc-middleware-stream": "^7.0.1", + "@metamask/object-multiplex": "^2.0.0", + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.1.1", + "@metamask/utils": "^8.3.0", + "detect-browser": "^5.2.0", + "extension-port-stream": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "is-stream": "^2.0.0", + "readable-stream": "^3.6.2", + "webextension-polyfill": "^0.10.0" + }, + "engines": { + "node": "^18.18 || >=20" + } + }, + "node_modules/@metamask/providers/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@metamask/providers/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@metamask/rpc-errors": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.4.0.tgz", + "integrity": "sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg==", + "dependencies": { + "@metamask/utils": "^9.0.0", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/rpc-errors/node_modules/@metamask/utils": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-9.3.0.tgz", + "integrity": "sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g==", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.1.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/rpc-errors/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/safe-event-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", + "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/sdk": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@metamask/sdk/-/sdk-0.31.4.tgz", + "integrity": "sha512-HLUN4IZGdyiy5YeebXmXi+ndpmrl6zslCQLdR2QHplIy4JmUL/eDyKNFiK7eBLVKXVVIDYFIb6g1iSEb+i8Kew==", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@metamask/onboarding": "^1.0.1", + "@metamask/providers": "16.1.0", + "@metamask/sdk-communication-layer": "0.31.0", + "@metamask/sdk-install-modal-web": "0.31.2", + "@paulmillr/qr": "^0.2.1", + "bowser": "^2.9.0", + "cross-fetch": "^4.0.0", + "debug": "^4.3.4", + "eciesjs": "^0.4.11", + "eth-rpc-errors": "^4.0.3", + "eventemitter2": "^6.4.9", + "obj-multiplex": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.2", + "socket.io-client": "^4.5.1", + "tslib": "^2.6.0", + "util": "^0.12.4", + "uuid": "^8.3.2" + } + }, + "node_modules/@metamask/sdk-install-modal-web": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.31.2.tgz", + "integrity": "sha512-KPv36kQjmTwErU8g2neuHHSgkD5+1hp4D6ERfk5Kc2r73aOYNCdG9wDGRUmFmcY2MKkeK1EuDyZfJ4FPU30fxQ==", + "dependencies": { + "@paulmillr/qr": "^0.2.1" + } + }, + "node_modules/@metamask/sdk/node_modules/@metamask/sdk-communication-layer": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.31.0.tgz", + "integrity": "sha512-V9CxdzabDPjQVgmKGHsyU3SYt4Af27g+4DbGCx0fLoHqN/i1RBDZqs/LYbJX3ykJCANzE+llz/MolMCMrzM2RA==", + "dependencies": { + "bufferutil": "^4.0.8", + "date-fns": "^2.29.3", + "debug": "^4.3.4", + "utf-8-validate": "^5.0.2", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "cross-fetch": "^4.0.0", + "eciesjs": "*", + "eventemitter2": "^6.4.9", + "readable-stream": "^3.6.2", + "socket.io-client": "^4.5.1" + } + }, + "node_modules/@metamask/sdk/node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@metamask/sdk/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@metamask/superstruct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.1.0.tgz", + "integrity": "sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.0.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@motionone/animation": { "version": "10.18.0", "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.18.0.tgz", @@ -2243,13 +2659,23 @@ "tslib": "^2.3.1" } }, + "node_modules/@noble/ciphers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.0.tgz", + "integrity": "sha512-YGdEUzYEd+82jeaVbSKKVp1jFZb8LwaNMIIzHFkihGvYdd/KKAr7KaJHdEdSYGredE3ssSravXIa0Jxg28Sv5w==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@noble/curves": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", - "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", - "license": "MIT", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz", + "integrity": "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==", "dependencies": { - "@noble/hashes": "1.5.0" + "@noble/hashes": "1.6.0" }, "engines": { "node": "^14.21.3 || >=16" @@ -2259,10 +2685,9 @@ } }, "node_modules/@noble/hashes": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", - "license": "MIT", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz", + "integrity": "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==", "engines": { "node": "^14.21.3 || >=16" }, @@ -2646,6 +3071,14 @@ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT" }, + "node_modules/@paulmillr/qr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@paulmillr/qr/-/qr-0.2.1.tgz", + "integrity": "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2991,42 +3424,114 @@ "win32" ] }, - "node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/@safe-global/safe-apps-provider": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.5.tgz", + "integrity": "sha512-9v9wjBi3TwLsEJ3C2ujYoexp3pFJ0omDLH/GX91e2QB+uwCKTBYyhxFSrTQ9qzoyQd+bfsk4gjOGW87QcJhf7g==", + "dependencies": { + "@safe-global/safe-apps-sdk": "^9.1.0", + "events": "^3.3.0" } }, - "node_modules/@scure/bip32": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.5.0.tgz", - "integrity": "sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==", - "license": "MIT", + "node_modules/@safe-global/safe-apps-sdk": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-sdk/-/safe-apps-sdk-9.1.0.tgz", + "integrity": "sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q==", + "dependencies": { + "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", + "viem": "^2.1.1" + } + }, + "node_modules/@safe-global/safe-gateway-typescript-sdk": { + "version": "3.22.6", + "resolved": "https://registry.npmjs.org/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.22.6.tgz", + "integrity": "sha512-R0Ck7n8fj7KtFUpbsGi0j3e2t0/bhpHTY/U8P8315vQ8aT/sfZrWMcfFcD5I9Kw8TEU7rvKY0+sngT1lCptJmQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@scure/base": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", + "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dependencies": { - "@noble/curves": "~1.6.0", - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.7" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/@scure/bip39": { + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.4.0.tgz", - "integrity": "sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dependencies": { - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.8" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, + "node_modules/@scure/bip39/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@sentry-internal/feedback": { "version": "7.120.0", "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.120.0.tgz", @@ -3541,6 +4046,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, "node_modules/@square/svelte-store": { "version": "1.0.18", "resolved": "https://registry.npmjs.org/@square/svelte-store/-/svelte-store-1.0.18.tgz", @@ -3851,13 +4361,39 @@ "version": "5.59.20", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.20.tgz", "integrity": "sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@tanstack/react-query": { + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.64.1.tgz", + "integrity": "sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==", + "peer": true, + "dependencies": { + "@tanstack/query-core": "5.64.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-query/node_modules/@tanstack/query-core": { + "version": "5.64.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.64.1.tgz", + "integrity": "sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tanstack/svelte-query": { "version": "5.59.20", "resolved": "https://registry.npmjs.org/@tanstack/svelte-query/-/svelte-query-5.59.20.tgz", @@ -4050,6 +4586,14 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -4087,6 +4631,11 @@ "integrity": "sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==", "license": "MIT" }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/node": { "version": "18.19.64", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.64.tgz", @@ -5058,6 +5607,190 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@wagmi/connectors": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/@wagmi/connectors/-/connectors-5.7.3.tgz", + "integrity": "sha512-i7Gk5M/Fc9gMvkVHbqw2kGtXvY8POsSY798/9I5npyglVjBddxoVk3xTYmcYTB1VIa4Fi0T2gLTHpQnpLrq1CQ==", + "dependencies": { + "@coinbase/wallet-sdk": "4.2.3", + "@metamask/sdk": "0.31.4", + "@safe-global/safe-apps-provider": "0.18.5", + "@safe-global/safe-apps-sdk": "9.1.0", + "@walletconnect/ethereum-provider": "2.17.0", + "cbw-sdk": "npm:@coinbase/wallet-sdk@3.9.3" + }, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "@wagmi/core": "2.16.3", + "typescript": ">=5.0.4", + "viem": "2.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@wagmi/connectors/node_modules/@coinbase/wallet-sdk": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.2.3.tgz", + "integrity": "sha512-BcyHZ/Ec84z0emORzqdXDv4P0oV+tV3a0OirfA8Ko1JGBIAVvB+hzLvZzCDvnuZx7MTK+Dd8Y9Tjlo446BpCIg==", + "dependencies": { + "@noble/hashes": "^1.4.0", + "clsx": "^1.2.1", + "eventemitter3": "^5.0.1", + "preact": "^10.24.2" + } + }, + "node_modules/@wagmi/connectors/node_modules/@walletconnect/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.0.tgz", + "integrity": "sha512-On+uSaCfWdsMIQsECwWHZBmUXfrnqmv6B8SXRRuTJgd8tUpEvBkLQH4X7XkSm3zW6ozEkQTCagZ2ox2YPn3kbw==", + "dependencies": { + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/jsonrpc-ws-connection": "1.0.14", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.0", + "@walletconnect/utils": "2.17.0", + "events": "3.3.0", + "lodash.isequal": "4.5.0", + "uint8arrays": "3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@wagmi/connectors/node_modules/@walletconnect/ethereum-provider": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@walletconnect/ethereum-provider/-/ethereum-provider-2.17.0.tgz", + "integrity": "sha512-b+KTAXOb6JjoxkwpgYQQKPUcTwENGmdEdZoIDLeRicUmZTn/IQKfkMoC2frClB4YxkyoVMtj1oMV2JAax+yu9A==", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/modal": "2.7.0", + "@walletconnect/sign-client": "2.17.0", + "@walletconnect/types": "2.17.0", + "@walletconnect/universal-provider": "2.17.0", + "@walletconnect/utils": "2.17.0", + "events": "3.3.0" + } + }, + "node_modules/@wagmi/connectors/node_modules/@walletconnect/sign-client": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.17.0.tgz", + "integrity": "sha512-sErYwvSSHQolNXni47L3Bm10ptJc1s1YoJvJd34s5E9h9+d3rj7PrhbiW9X82deN+Dm5oA8X9tC4xty1yIBrVg==", + "dependencies": { + "@walletconnect/core": "2.17.0", + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.0", + "@walletconnect/utils": "2.17.0", + "events": "3.3.0" + } + }, + "node_modules/@wagmi/connectors/node_modules/@walletconnect/types": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.0.tgz", + "integrity": "sha512-i1pn9URpvt9bcjRDkabuAmpA9K7mzyKoLJlbsAujRVX7pfaG7wur7u9Jz0bk1HxvuABL5LHNncTnVKSXKQ5jZA==", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@wagmi/connectors/node_modules/@walletconnect/universal-provider": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.17.0.tgz", + "integrity": "sha512-d3V5Be7AqLrvzcdMZSBS8DmGDRdqnyLk1DWmRKAGgR6ieUWykhhUKlvfeoZtvJrIXrY7rUGYpH1X41UtFkW5Pw==", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/sign-client": "2.17.0", + "@walletconnect/types": "2.17.0", + "@walletconnect/utils": "2.17.0", + "events": "3.3.0" + } + }, + "node_modules/@wagmi/connectors/node_modules/@walletconnect/utils": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.0.tgz", + "integrity": "sha512-1aeQvjwsXy4Yh9G6g2eGmXrEl+BzkNjHRdCrGdMYqFTFa8ROEJfTGsSH3pLsNDlOY94CoBUvJvM55q/PMoN/FQ==", + "dependencies": { + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.17.0", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "^6.5.7", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@wagmi/connectors/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/@wagmi/core": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-2.16.3.tgz", + "integrity": "sha512-SVovoWHaQ2AIkmGf+ucNijT6AHXcTMffFcLmcFF6++y21x+ge7Gkh3UoJiU91SDDv8n08eTQ9jbyia3GEgU5jQ==", + "dependencies": { + "eventemitter3": "5.0.1", + "mipd": "0.0.7", + "zustand": "5.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "@tanstack/query-core": ">=5.0.0", + "typescript": ">=5.0.4", + "viem": "2.x" + }, + "peerDependenciesMeta": { + "@tanstack/query-core": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@wagmi/core/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, "node_modules/@walletconnect/core": { "version": "2.17.2", "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.2.tgz", @@ -5459,40 +6192,214 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, - "node_modules/@web3modal/common": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-4.2.3.tgz", - "integrity": "sha512-n0lvhoRjViqxmkgpy+iEM6E3HBylUgdxUDJU4hUxGmmrbGZGEP7USBRnQOEgXLqLCtWvxKjUAO33JBV/De+Osw==", - "license": "Apache-2.0", + "node_modules/@web3modal/base": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/base/-/base-5.1.11.tgz", + "integrity": "sha512-wJCsqQ1FG0Isiv0Exaz2Sv+FpijVmNPNay+sGdV5HP2SpBAR/1xxHca2/vLBdACX7rYAFAj723DYQE0fmUpIaw==", + "dependencies": { + "@walletconnect/utils": "2.16.1", + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "@web3modal/scaffold-ui": "5.1.11", + "@web3modal/scaffold-utils": "5.1.11", + "@web3modal/siwe": "5.1.11", + "@web3modal/ui": "5.1.11", + "@web3modal/wallet": "5.1.11" + }, + "optionalDependencies": { + "borsh": "0.7.0", + "bs58": "5.0.0" + } + }, + "node_modules/@web3modal/base/node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@web3modal/base/node_modules/@walletconnect/types": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.16.1.tgz", + "integrity": "sha512-9P4RG4VoDEF+yBF/n2TF12gsvT/aTaeZTVDb/AOayafqiPnmrQZMKmNCJJjq1sfdsDcHXFcZWMGsuCeSJCmrXA==", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@web3modal/base/node_modules/@walletconnect/utils": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.16.1.tgz", + "integrity": "sha512-aoQirVoDoiiEtYeYDtNtQxFzwO/oCrz9zqeEEXYJaAwXlGVTS34KFe7W3/Rxd/pldTYKFOZsku2EzpISfH8Wsw==", + "dependencies": { + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.16.1", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "^6.5.7", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@web3modal/base/node_modules/@web3modal/common": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-5.1.11.tgz", + "integrity": "sha512-YfSklKjjiM1RGxFTQm3ycYZ2Ktb6vswt9eg8lGXRknxN+SC7bCtuvgtyyCO0Z9/f9dPMOGIAmoJ/y6WHXWQqcg==", "dependencies": { "bignumber.js": "9.1.2", "dayjs": "1.11.10" } }, - "node_modules/@web3modal/common/node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", - "license": "MIT" - }, - "node_modules/@web3modal/core": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-4.2.3.tgz", - "integrity": "sha512-UykKZTELBpb6ey+IV6fkHWsLkjrIdILmRYzhlznyTPbm9qX5pOR9tH0Z3QGUo7YPFmUqMRH1tC9Irsr3SgIbbw==", - "license": "Apache-2.0", + "node_modules/@web3modal/base/node_modules/@web3modal/core": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-5.1.11.tgz", + "integrity": "sha512-ugUVFVml1vVW+V7yxkn/AYYdrUJzn4ulFbDlxDMpmukKY6sDYLMMGAJ84O8ZC/OPyC7009NYd3mKZurxEyWkHw==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", "dependencies": { - "@web3modal/common": "4.2.3", - "@web3modal/wallet": "4.2.3", + "@web3modal/common": "5.1.11", + "@web3modal/wallet": "5.1.11", "valtio": "1.11.2" } }, - "node_modules/@web3modal/ethers5": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@web3modal/ethers5/-/ethers5-4.2.3.tgz", - "integrity": "sha512-DoOWzWiGi5wCFdNEi8aDrPQSygOhQerrXCsnpL+f3F2UwMzLdldLIMF9Tyyt+zaOc9wsC1mzqXasE1WJ48n/OQ==", - "license": "Apache-2.0", + "node_modules/@web3modal/base/node_modules/@web3modal/polyfills": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/polyfills/-/polyfills-5.1.11.tgz", + "integrity": "sha512-BDIDYA2LGTCquahbZ+wyWQy4IBOPeKVSgt4ZpFir1fnVJUPkEluSwZStcKLtCzQvxJgER1sLicUrjJQHF36TOg==", "dependencies": { - "@coinbase/wallet-sdk": "4.0.0", + "buffer": "6.0.3" + } + }, + "node_modules/@web3modal/base/node_modules/@web3modal/scaffold-utils": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-5.1.11.tgz", + "integrity": "sha512-4bcYpQ3oxak5mDZMW5/7ayrhpaJHy6dCfUio15AGPHnQlFjkqcfSuuG0Io8Oj8VUXcK2UBLch9YiEDz4Xgce9Q==", + "dependencies": { + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "@web3modal/wallet": "5.1.11", + "valtio": "1.11.2" + } + }, + "node_modules/@web3modal/base/node_modules/@web3modal/siwe": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/siwe/-/siwe-5.1.11.tgz", + "integrity": "sha512-1aKEtMosACyY0SRjHjdcA/g3bRtMojTxlK7S/T6zBk57X/P3xcEZq9J8UM73plmGewjZdLaqGMgv6B/k/WleZQ==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", + "dependencies": { + "@walletconnect/utils": "2.16.1", + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/scaffold-utils": "5.1.11", + "@web3modal/ui": "5.1.11", + "@web3modal/wallet": "5.1.11", + "lit": "3.1.0", + "valtio": "1.11.2" + } + }, + "node_modules/@web3modal/base/node_modules/@web3modal/ui": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/ui/-/ui-5.1.11.tgz", + "integrity": "sha512-L0L+2YOK+ONx+W7GPtkSdKZuAQ8cjcS5N8kp+WZzKOMUTeDLuXKtSnES4p/ShOVmkpV6qB8r0pPA9xgFh1D3ow==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", + "dependencies": { + "lit": "3.1.0", + "qrcode": "1.5.3" + } + }, + "node_modules/@web3modal/base/node_modules/@web3modal/wallet": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/wallet/-/wallet-5.1.11.tgz", + "integrity": "sha512-/ooQZXK1h7LGBUemebldYPAV2oJAgxkgSiCMoHWynhuS0LO3BzhOhGL+jV19w4iU81bS1GSNFTxYT9LL6Scesw==", + "dependencies": { + "@walletconnect/logger": "2.1.2", + "@web3modal/common": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "zod": "3.22.4" + } + }, + "node_modules/@web3modal/base/node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/@web3modal/base/node_modules/lit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", + "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", + "dependencies": { + "@lit/reactive-element": "^2.0.0", + "lit-element": "^4.0.0", + "lit-html": "^3.1.0" + } + }, + "node_modules/@web3modal/base/node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/@web3modal/base/node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/@web3modal/common": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-4.2.3.tgz", + "integrity": "sha512-n0lvhoRjViqxmkgpy+iEM6E3HBylUgdxUDJU4hUxGmmrbGZGEP7USBRnQOEgXLqLCtWvxKjUAO33JBV/De+Osw==", + "license": "Apache-2.0", + "dependencies": { + "bignumber.js": "9.1.2", + "dayjs": "1.11.10" + } + }, + "node_modules/@web3modal/common/node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "license": "MIT" + }, + "node_modules/@web3modal/core": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-4.2.3.tgz", + "integrity": "sha512-UykKZTELBpb6ey+IV6fkHWsLkjrIdILmRYzhlznyTPbm9qX5pOR9tH0Z3QGUo7YPFmUqMRH1tC9Irsr3SgIbbw==", + "license": "Apache-2.0", + "dependencies": { + "@web3modal/common": "4.2.3", + "@web3modal/wallet": "4.2.3", + "valtio": "1.11.2" + } + }, + "node_modules/@web3modal/ethers5": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@web3modal/ethers5/-/ethers5-4.2.3.tgz", + "integrity": "sha512-DoOWzWiGi5wCFdNEi8aDrPQSygOhQerrXCsnpL+f3F2UwMzLdldLIMF9Tyyt+zaOc9wsC1mzqXasE1WJ48n/OQ==", + "license": "Apache-2.0", + "dependencies": { + "@coinbase/wallet-sdk": "4.0.0", "@walletconnect/ethereum-provider": "2.13.0", "@web3modal/polyfills": "4.2.3", "@web3modal/scaffold": "4.2.3", @@ -5717,6 +6624,174 @@ } } }, + "node_modules/@web3modal/scaffold-ui": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/scaffold-ui/-/scaffold-ui-5.1.11.tgz", + "integrity": "sha512-fBqzd7DStUaEjtdbEU86rzY4XIgt8c8JN8oxS/xnUEopmjFYvBLCCVEfbTkZyJrRvAAphz7+oS4TVzXw9k6t5A==", + "dependencies": { + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/scaffold-utils": "5.1.11", + "@web3modal/siwe": "5.1.11", + "@web3modal/ui": "5.1.11", + "@web3modal/wallet": "5.1.11", + "lit": "3.1.0" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@walletconnect/types": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.16.1.tgz", + "integrity": "sha512-9P4RG4VoDEF+yBF/n2TF12gsvT/aTaeZTVDb/AOayafqiPnmrQZMKmNCJJjq1sfdsDcHXFcZWMGsuCeSJCmrXA==", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@walletconnect/utils": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.16.1.tgz", + "integrity": "sha512-aoQirVoDoiiEtYeYDtNtQxFzwO/oCrz9zqeEEXYJaAwXlGVTS34KFe7W3/Rxd/pldTYKFOZsku2EzpISfH8Wsw==", + "dependencies": { + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.16.1", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "^6.5.7", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/common": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-5.1.11.tgz", + "integrity": "sha512-YfSklKjjiM1RGxFTQm3ycYZ2Ktb6vswt9eg8lGXRknxN+SC7bCtuvgtyyCO0Z9/f9dPMOGIAmoJ/y6WHXWQqcg==", + "dependencies": { + "bignumber.js": "9.1.2", + "dayjs": "1.11.10" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/core": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-5.1.11.tgz", + "integrity": "sha512-ugUVFVml1vVW+V7yxkn/AYYdrUJzn4ulFbDlxDMpmukKY6sDYLMMGAJ84O8ZC/OPyC7009NYd3mKZurxEyWkHw==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", + "dependencies": { + "@web3modal/common": "5.1.11", + "@web3modal/wallet": "5.1.11", + "valtio": "1.11.2" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/polyfills": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/polyfills/-/polyfills-5.1.11.tgz", + "integrity": "sha512-BDIDYA2LGTCquahbZ+wyWQy4IBOPeKVSgt4ZpFir1fnVJUPkEluSwZStcKLtCzQvxJgER1sLicUrjJQHF36TOg==", + "dependencies": { + "buffer": "6.0.3" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/scaffold-utils": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-5.1.11.tgz", + "integrity": "sha512-4bcYpQ3oxak5mDZMW5/7ayrhpaJHy6dCfUio15AGPHnQlFjkqcfSuuG0Io8Oj8VUXcK2UBLch9YiEDz4Xgce9Q==", + "dependencies": { + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "@web3modal/wallet": "5.1.11", + "valtio": "1.11.2" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/siwe": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/siwe/-/siwe-5.1.11.tgz", + "integrity": "sha512-1aKEtMosACyY0SRjHjdcA/g3bRtMojTxlK7S/T6zBk57X/P3xcEZq9J8UM73plmGewjZdLaqGMgv6B/k/WleZQ==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", + "dependencies": { + "@walletconnect/utils": "2.16.1", + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/scaffold-utils": "5.1.11", + "@web3modal/ui": "5.1.11", + "@web3modal/wallet": "5.1.11", + "lit": "3.1.0", + "valtio": "1.11.2" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/ui": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/ui/-/ui-5.1.11.tgz", + "integrity": "sha512-L0L+2YOK+ONx+W7GPtkSdKZuAQ8cjcS5N8kp+WZzKOMUTeDLuXKtSnES4p/ShOVmkpV6qB8r0pPA9xgFh1D3ow==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", + "dependencies": { + "lit": "3.1.0", + "qrcode": "1.5.3" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/wallet": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/wallet/-/wallet-5.1.11.tgz", + "integrity": "sha512-/ooQZXK1h7LGBUemebldYPAV2oJAgxkgSiCMoHWynhuS0LO3BzhOhGL+jV19w4iU81bS1GSNFTxYT9LL6Scesw==", + "dependencies": { + "@walletconnect/logger": "2.1.2", + "@web3modal/common": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "zod": "3.22.4" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/@web3modal/scaffold-ui/node_modules/lit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", + "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", + "dependencies": { + "@lit/reactive-element": "^2.0.0", + "lit-element": "^4.0.0", + "lit-html": "^3.1.0" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/@web3modal/scaffold-ui/node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/@web3modal/scaffold-utils": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-4.2.3.tgz", @@ -5974,10 +7049,9 @@ "dev": true }, "node_modules/abitype": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.6.tgz", - "integrity": "sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==", - "license": "MIT", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.7.tgz", + "integrity": "sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw==", "funding": { "url": "https://github.com/sponsors/wevm" }, @@ -5994,6 +7068,17 @@ } } }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -6359,6 +7444,20 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -6381,6 +7480,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "optional": true + }, "node_modules/base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -6510,6 +7615,40 @@ "dev": true, "license": "MIT" }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "optional": true, + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/borsh/node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "optional": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6581,6 +7720,15 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "optional": true, + "dependencies": { + "base-x": "^4.0.0" + } + }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -6627,8 +7775,6 @@ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "hasInstallScript": true, - "optional": true, - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -6667,17 +7813,41 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "license": "MIT", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -6767,12 +7937,34 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", - "dev": true, - "license": "MIT", + "node_modules/cbw-sdk": { + "name": "@coinbase/wallet-sdk", + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-3.9.3.tgz", + "integrity": "sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==", + "dependencies": { + "bn.js": "^5.2.1", + "buffer": "^6.0.3", + "clsx": "^1.2.1", + "eth-block-tracker": "^7.1.0", + "eth-json-rpc-filters": "^6.0.0", + "eventemitter3": "^5.0.1", + "keccak": "^3.0.3", + "preact": "^10.16.0", + "sha.js": "^2.4.11" + } + }, + "node_modules/cbw-sdk/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -7176,7 +8368,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, "license": "MIT" }, "node_modules/cors": { @@ -7200,6 +8391,17 @@ "dev": true, "license": "MIT" }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -7773,6 +8975,21 @@ "node": ">=18" } }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", @@ -7858,7 +9075,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -8069,6 +9285,19 @@ "dev": true, "license": "MIT" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -8088,6 +9317,22 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, + "node_modules/eciesjs": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.13.tgz", + "integrity": "sha512-zBdtR4K+wbj10bWPpIOF9DW+eFYQu8miU5ypunh0t4Bvt83ZPlEWgT5Dq/0G6uwEXumZKjfb5BZxYUZQ2Hzn/Q==", + "dependencies": { + "@ecies/ciphers": "^0.2.2", + "@noble/ciphers": "^1.0.0", + "@noble/curves": "^1.6.0", + "@noble/hashes": "^1.5.0" + }, + "engines": { + "bun": ">=1", + "deno": ">=2", + "node": ">=16" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -8154,6 +9399,46 @@ "once": "^1.4.0" } }, + "node_modules/engine.io-client": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz", + "integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -8168,14 +9453,9 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } @@ -8184,7 +9464,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8197,6 +9476,17 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.1.tgz", + "integrity": "sha512-BPOBuyUF9QIVhuNLhbToCLHP6+0MHwZ7xLBkPPCZqK4JmpJgGnv10035STzzQwFpqdzNFMB3irvDI63IagvDwA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", @@ -8609,6 +9899,117 @@ "node": ">= 0.6" } }, + "node_modules/eth-block-tracker": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-7.1.0.tgz", + "integrity": "sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg==", + "dependencies": { + "@metamask/eth-json-rpc-provider": "^1.0.0", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^5.0.1", + "json-rpc-random-id": "^1.0.1", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/eth-block-tracker/node_modules/@metamask/utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==", + "dependencies": { + "@ethereumjs/tx": "^4.1.2", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/eth-block-tracker/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-json-rpc-filters": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-6.0.1.tgz", + "integrity": "sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig==", + "dependencies": { + "@metamask/safe-event-emitter": "^3.0.0", + "async-mutex": "^0.2.6", + "eth-query": "^2.1.2", + "json-rpc-engine": "^6.1.0", + "pify": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/eth-json-rpc-filters/node_modules/async-mutex": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", + "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/eth-query": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", + "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/eth-rpc-errors": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", + "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/ethers": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", @@ -8657,6 +10058,19 @@ "@ethersproject/wordlists": "5.7.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" + }, "node_modules/eventemitter3": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", @@ -8795,6 +10209,41 @@ "dev": true, "license": "MIT" }, + "node_modules/extension-port-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-3.0.0.tgz", + "integrity": "sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==", + "dependencies": { + "readable-stream": "^3.6.2 || ^4.4.2", + "webextension-polyfill": ">=0.10.0 <1.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/extension-port-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/extension-port-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/fancy-canvas": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fancy-canvas/-/fancy-canvas-2.1.0.tgz", @@ -8804,8 +10253,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -8871,6 +10319,11 @@ "node": ">=6" } }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -9112,6 +10565,14 @@ "tailwindcss": "^3.3.2" } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/foreground-child": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", @@ -9344,17 +10805,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "license": "MIT", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -9369,6 +10833,18 @@ "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", "license": "MIT" }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", @@ -9499,13 +10975,11 @@ "license": "MIT" }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9611,7 +11085,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -9620,12 +11093,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "license": "MIT", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -9633,12 +11104,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "license": "MIT", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -10035,6 +11507,21 @@ "url": "https://github.com/sponsors/brc-dd" } }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -10047,6 +11534,17 @@ "node": ">=8" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", @@ -10095,6 +11593,23 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -10165,6 +11680,23 @@ "@types/estree": "^1.0.6" } }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", @@ -10177,6 +11709,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", @@ -10211,7 +11757,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, "license": "MIT" }, "node_modules/isexe": { @@ -10448,8 +11993,30 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", + "node_modules/json-rpc-engine": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", + "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", + "dependencies": { + "@metamask/safe-event-emitter": "^2.0.0", + "eth-rpc-errors": "^4.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/json-rpc-engine/node_modules/@metamask/safe-event-emitter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", + "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" + }, + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true @@ -10838,6 +12405,14 @@ "node": ">= 16" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -10889,6 +12464,11 @@ "node": ">= 0.6" } }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -11048,6 +12628,25 @@ "node": ">=8" } }, + "node_modules/mipd": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mipd/-/mipd-0.0.7.tgz", + "integrity": "sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -14320,6 +15919,16 @@ "dev": true, "license": "MIT" }, + "node_modules/obj-multiplex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/obj-multiplex/-/obj-multiplex-1.0.0.tgz", + "integrity": "sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==", + "dependencies": { + "end-of-stream": "^1.4.0", + "once": "^1.4.0", + "readable-stream": "^2.3.3" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14430,16 +16039,15 @@ } }, "node_modules/ox": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.1.2.tgz", - "integrity": "sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.0.tgz", + "integrity": "sha512-blUzTLidvUlshv0O02CnLFqBLidNzPoAZdIth894avUAotTuWziznv6IENv5idRuOSSP3dH8WzcYw84zVdu0Aw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/wevm" } ], - "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", @@ -14458,11 +16066,60 @@ } } }, + "node_modules/ox/node_modules/@noble/curves": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.0.tgz", + "integrity": "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==", + "dependencies": { + "@noble/hashes": "1.7.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/@scure/bip32": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.1.tgz", + "integrity": "sha512-jSO+5Ud1E588Y+LFo8TaB8JVPNAZw/lGGao+1SepHDeTs2dFLurdNIAgUuDlwezqEjRjElkCJajVrtrZaBxvaQ==", + "dependencies": { + "@noble/curves": "~1.8.0", + "@noble/hashes": "~1.7.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/@scure/bip39": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.1.tgz", + "integrity": "sha512-GnlufVSP9UdAo/H2Patfv22VTtpNTyfi+I3qCKpvuB5l1KWzEYx+l2TNpBy9Ksh4xTs3Rn06tBlpWCi/1Vz8gw==", + "dependencies": { + "@noble/hashes": "~1.7.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/ox/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/p-limit": { "version": "3.1.0", @@ -14773,7 +16430,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -14875,6 +16531,14 @@ "node": ">=10.13.0" } }, + "node_modules/pony-cause": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", + "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/portfinder": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", @@ -14900,6 +16564,14 @@ "ms": "^2.1.1" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", @@ -15249,11 +16921,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, "license": "MIT" }, "node_modules/process-warning": { @@ -15328,6 +17007,15 @@ "url": "https://bjornlu.com/sponsor" } }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -15522,7 +17210,6 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -15538,7 +17225,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, "license": "MIT" }, "node_modules/readdirp": { @@ -15821,6 +17507,22 @@ ], "license": "MIT" }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", @@ -15963,7 +17665,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -16090,6 +17791,32 @@ "npm": ">= 3.0.0" } }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", @@ -16451,6 +18178,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -16573,145 +18308,464 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/svelte-check/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", + "node_modules/svelte-check/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/svelte-codemirror-editor": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/svelte-codemirror-editor/-/svelte-codemirror-editor-1.4.1.tgz", + "integrity": "sha512-Pv350iro0Y/AZTT/y2OLaonheQqAwl50Hdfipa2Jv1Z04TSP5kPUyxQnRjqxeRW7DXOX9s5Nd11tHdBl9iYSzw==", + "license": "MIT", + "peerDependencies": { + "codemirror": "^6.0.0", + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/svelte-eslint-parser": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz", + "integrity": "sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "postcss": "^8.4.39", + "postcss-scss": "^4.0.9" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/svelte-hmr": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", + "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", + "license": "ISC", + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/svelte-markdown": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/svelte-markdown/-/svelte-markdown-0.4.1.tgz", + "integrity": "sha512-pOlLY6EruKJaWI9my/2bKX8PdTeP5CM0s4VMmwmC2prlOkjAf+AOmTM4wW/l19Y6WZ87YmP8+ZCJCCwBChWjYw==", + "license": "MIT", + "dependencies": { + "@types/marked": "^5.0.1", + "marked": "^5.1.2" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, + "node_modules/svelte-preprocess": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz", + "integrity": "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 16.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svelte-wagmi": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/svelte-wagmi/-/svelte-wagmi-1.0.7.tgz", + "integrity": "sha512-5UhI8IbJtWoYtbD7bLOt9xzeZDUOHUPXKkAe2BU3zXcEYMw+79/j5YUOCBgFEqgd2WWwIXfJn0z26HXfO4xmeA==", + "dependencies": { + "@web3modal/core": "^5.0.1", + "@web3modal/ui": "^5.0.1", + "@web3modal/wagmi": "^5.0.1" + }, + "peerDependencies": { + "@wagmi/connectors": "^5.0.14", + "@wagmi/core": "^2.0.0", + "svelte": "^4.0.0 || ^5.0.0", + "vite": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/core": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.16.1.tgz", + "integrity": "sha512-UlsnEMT5wwFvmxEjX8s4oju7R3zadxNbZgsFeHEsjh7uknY2zgmUe1Lfc5XU6zyPb1Jx7Nqpdx1KN485ee8ogw==", + "dependencies": { + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/jsonrpc-ws-connection": "1.0.14", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.16.1", + "@walletconnect/utils": "2.16.1", + "events": "3.3.0", + "lodash.isequal": "4.5.0", + "uint8arrays": "3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/ethereum-provider": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/ethereum-provider/-/ethereum-provider-2.16.1.tgz", + "integrity": "sha512-oD7DNCssUX3plS5gGUZ9JQ63muQB/vxO68X6RzD2wd8gBsYtSPw4BqYFc7KTO6dUizD6gfPirw32yW2pTvy92w==", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/modal": "2.6.2", + "@walletconnect/sign-client": "2.16.1", + "@walletconnect/types": "2.16.1", + "@walletconnect/universal-provider": "2.16.1", + "@walletconnect/utils": "2.16.1", + "events": "3.3.0" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/modal": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@walletconnect/modal/-/modal-2.6.2.tgz", + "integrity": "sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==", + "dependencies": { + "@walletconnect/modal-core": "2.6.2", + "@walletconnect/modal-ui": "2.6.2" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/modal-core": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-core/-/modal-core-2.6.2.tgz", + "integrity": "sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==", + "dependencies": { + "valtio": "1.11.2" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/modal-ui": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@walletconnect/modal-ui/-/modal-ui-2.6.2.tgz", + "integrity": "sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==", + "dependencies": { + "@walletconnect/modal-core": "2.6.2", + "lit": "2.8.0", + "motion": "10.16.2", + "qrcode": "1.5.3" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/modal-ui/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/sign-client": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.16.1.tgz", + "integrity": "sha512-s2Tx2n2duxt+sHtuWXrN9yZVaHaYqcEcjwlTD+55/vs5NUPlISf+fFmZLwSeX1kUlrSBrAuxPUcqQuRTKcjLOA==", + "dependencies": { + "@walletconnect/core": "2.16.1", + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.16.1", + "@walletconnect/utils": "2.16.1", + "events": "3.3.0" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/types": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.16.1.tgz", + "integrity": "sha512-9P4RG4VoDEF+yBF/n2TF12gsvT/aTaeZTVDb/AOayafqiPnmrQZMKmNCJJjq1sfdsDcHXFcZWMGsuCeSJCmrXA==", + "dependencies": { + "@walletconnect/events": "1.0.1", + "@walletconnect/heartbeat": "1.2.2", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/keyvaluestorage": "1.1.1", + "@walletconnect/logger": "2.1.2", + "events": "3.3.0" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/universal-provider": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.16.1.tgz", + "integrity": "sha512-q/tyWUVNenizuClEiaekx9FZj/STU1F3wpDK4PUIh3xh+OmUI5fw2dY3MaNDjyb5AyrS0M8BuQDeuoSuOR/Q7w==", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "1.0.8", + "@walletconnect/jsonrpc-provider": "1.0.14", + "@walletconnect/jsonrpc-types": "1.0.4", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "2.1.2", + "@walletconnect/sign-client": "2.16.1", + "@walletconnect/types": "2.16.1", + "@walletconnect/utils": "2.16.1", + "events": "3.3.0" + } + }, + "node_modules/svelte-wagmi/node_modules/@walletconnect/utils": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.16.1.tgz", + "integrity": "sha512-aoQirVoDoiiEtYeYDtNtQxFzwO/oCrz9zqeEEXYJaAwXlGVTS34KFe7W3/Rxd/pldTYKFOZsku2EzpISfH8Wsw==", + "dependencies": { + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "1.0.3", + "@walletconnect/relay-api": "1.0.11", + "@walletconnect/relay-auth": "1.0.4", + "@walletconnect/safe-json": "1.0.2", + "@walletconnect/time": "1.0.2", + "@walletconnect/types": "2.16.1", + "@walletconnect/window-getters": "1.0.1", + "@walletconnect/window-metadata": "1.0.1", + "detect-browser": "5.3.0", + "elliptic": "^6.5.7", + "query-string": "7.1.3", + "uint8arrays": "3.1.0" + } + }, + "node_modules/svelte-wagmi/node_modules/@web3modal/common": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-5.1.11.tgz", + "integrity": "sha512-YfSklKjjiM1RGxFTQm3ycYZ2Ktb6vswt9eg8lGXRknxN+SC7bCtuvgtyyCO0Z9/f9dPMOGIAmoJ/y6WHXWQqcg==", + "dependencies": { + "bignumber.js": "9.1.2", + "dayjs": "1.11.10" + } + }, + "node_modules/svelte-wagmi/node_modules/@web3modal/core": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-5.1.11.tgz", + "integrity": "sha512-ugUVFVml1vVW+V7yxkn/AYYdrUJzn4ulFbDlxDMpmukKY6sDYLMMGAJ84O8ZC/OPyC7009NYd3mKZurxEyWkHw==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" + "@web3modal/common": "5.1.11", + "@web3modal/wallet": "5.1.11", + "valtio": "1.11.2" } }, - "node_modules/svelte-codemirror-editor": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/svelte-codemirror-editor/-/svelte-codemirror-editor-1.4.1.tgz", - "integrity": "sha512-Pv350iro0Y/AZTT/y2OLaonheQqAwl50Hdfipa2Jv1Z04TSP5kPUyxQnRjqxeRW7DXOX9s5Nd11tHdBl9iYSzw==", - "license": "MIT", - "peerDependencies": { - "codemirror": "^6.0.0", - "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" + "node_modules/svelte-wagmi/node_modules/@web3modal/polyfills": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/polyfills/-/polyfills-5.1.11.tgz", + "integrity": "sha512-BDIDYA2LGTCquahbZ+wyWQy4IBOPeKVSgt4ZpFir1fnVJUPkEluSwZStcKLtCzQvxJgER1sLicUrjJQHF36TOg==", + "dependencies": { + "buffer": "6.0.3" } }, - "node_modules/svelte-eslint-parser": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz", - "integrity": "sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==", - "dev": true, - "license": "MIT", + "node_modules/svelte-wagmi/node_modules/@web3modal/scaffold-utils": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-5.1.11.tgz", + "integrity": "sha512-4bcYpQ3oxak5mDZMW5/7ayrhpaJHy6dCfUio15AGPHnQlFjkqcfSuuG0Io8Oj8VUXcK2UBLch9YiEDz4Xgce9Q==", "dependencies": { - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "postcss": "^8.4.39", - "postcss-scss": "^4.0.9" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "@web3modal/wallet": "5.1.11", + "valtio": "1.11.2" } }, - "node_modules/svelte-hmr": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", - "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", - "license": "ISC", - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0" + "node_modules/svelte-wagmi/node_modules/@web3modal/siwe": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/siwe/-/siwe-5.1.11.tgz", + "integrity": "sha512-1aKEtMosACyY0SRjHjdcA/g3bRtMojTxlK7S/T6zBk57X/P3xcEZq9J8UM73plmGewjZdLaqGMgv6B/k/WleZQ==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", + "dependencies": { + "@walletconnect/utils": "2.16.1", + "@web3modal/common": "5.1.11", + "@web3modal/core": "5.1.11", + "@web3modal/scaffold-utils": "5.1.11", + "@web3modal/ui": "5.1.11", + "@web3modal/wallet": "5.1.11", + "lit": "3.1.0", + "valtio": "1.11.2" } }, - "node_modules/svelte-markdown": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/svelte-markdown/-/svelte-markdown-0.4.1.tgz", - "integrity": "sha512-pOlLY6EruKJaWI9my/2bKX8PdTeP5CM0s4VMmwmC2prlOkjAf+AOmTM4wW/l19Y6WZ87YmP8+ZCJCCwBChWjYw==", - "license": "MIT", + "node_modules/svelte-wagmi/node_modules/@web3modal/ui": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/ui/-/ui-5.1.11.tgz", + "integrity": "sha512-L0L+2YOK+ONx+W7GPtkSdKZuAQ8cjcS5N8kp+WZzKOMUTeDLuXKtSnES4p/ShOVmkpV6qB8r0pPA9xgFh1D3ow==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", "dependencies": { - "@types/marked": "^5.0.1", - "marked": "^5.1.2" - }, - "peerDependencies": { - "svelte": "^4.0.0" + "lit": "3.1.0", + "qrcode": "1.5.3" } }, - "node_modules/svelte-preprocess": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz", - "integrity": "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", + "node_modules/svelte-wagmi/node_modules/@web3modal/wagmi": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/wagmi/-/wagmi-5.1.11.tgz", + "integrity": "sha512-etV1qfBVvh41EMuBHXUpcO/W818jZVNh5/l9Z5kqRPZxlQmBaJbt5mTzw6nw/Lujoe1yYKugGQFhgjfEQK+eyA==", + "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", "dependencies": { - "@types/pug": "^2.0.6", - "detect-indent": "^6.1.0", - "magic-string": "^0.30.5", - "sorcery": "^0.11.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 16.0.0" + "@walletconnect/ethereum-provider": "2.16.1", + "@walletconnect/utils": "2.16.1", + "@web3modal/base": "5.1.11", + "@web3modal/common": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "@web3modal/scaffold-utils": "5.1.11", + "@web3modal/siwe": "5.1.11", + "@web3modal/wallet": "5.1.11" }, "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", - "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + "@wagmi/connectors": ">=4", + "@wagmi/core": ">=2.0.0", + "react": ">=17", + "react-dom": ">=17", + "viem": ">=2.0.0", + "vue": ">=3", + "wagmi": ">=2.0.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { + "react": { "optional": true }, - "sugarss": { + "react-dom": { "optional": true }, - "typescript": { + "vue": { "optional": true } } }, + "node_modules/svelte-wagmi/node_modules/@web3modal/wallet": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@web3modal/wallet/-/wallet-5.1.11.tgz", + "integrity": "sha512-/ooQZXK1h7LGBUemebldYPAV2oJAgxkgSiCMoHWynhuS0LO3BzhOhGL+jV19w4iU81bS1GSNFTxYT9LL6Scesw==", + "dependencies": { + "@walletconnect/logger": "2.1.2", + "@web3modal/common": "5.1.11", + "@web3modal/polyfills": "5.1.11", + "zod": "3.22.4" + } + }, + "node_modules/svelte-wagmi/node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/svelte-wagmi/node_modules/lit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", + "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", + "dependencies": { + "@lit/reactive-element": "^2.0.0", + "lit-element": "^4.0.0", + "lit-html": "^3.1.0" + } + }, + "node_modules/svelte-wagmi/node_modules/lit/node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/svelte-wagmi/node_modules/lit/node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/svelte-wagmi/node_modules/lit/node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/svelte/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -17106,6 +19160,12 @@ "optional": true, "peer": true }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==", + "optional": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -17918,8 +19978,6 @@ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, - "optional": true, - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -17927,6 +19985,18 @@ "node": ">=6.14.2" } }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -17947,7 +20017,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -18006,9 +20075,9 @@ } }, "node_modules/viem": { - "version": "2.21.51", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.21.51.tgz", - "integrity": "sha512-IBZTFoo9cZvMBkFqaJq5G8Ori4IeEDe9AHE5CmOlvNw7ytkC3vdVrJ/APL+V3H4d/5i1FiV331UsckIqQLIM0w==", + "version": "2.22.8", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.22.8.tgz", + "integrity": "sha512-iB3PW/a/qzpYbpjo3R662u6a/zo6piZHez/N/bOC25C79FYXBCs8mQDqwiHk3FYErUhS4KVZLabKV9zGMd+EgQ==", "funding": [ { "type": "github", @@ -18016,13 +20085,13 @@ } ], "dependencies": { - "@noble/curves": "1.6.0", - "@noble/hashes": "1.5.0", - "@scure/bip32": "1.5.0", - "@scure/bip39": "1.4.0", - "abitype": "1.0.6", + "@noble/curves": "1.7.0", + "@noble/hashes": "1.6.1", + "@scure/bip32": "1.6.0", + "@scure/bip39": "1.5.0", + "abitype": "1.0.7", "isows": "1.0.6", - "ox": "0.1.2", + "ox": "0.6.0", "webauthn-p256": "0.0.10", "ws": "8.18.0" }, @@ -18035,6 +20104,42 @@ } } }, + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@scure/bip32": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.0.tgz", + "integrity": "sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA==", + "dependencies": { + "@noble/curves": "~1.7.0", + "@noble/hashes": "~1.6.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@scure/bip39": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.0.tgz", + "integrity": "sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A==", + "dependencies": { + "@noble/hashes": "~1.6.0", + "@scure/base": "~1.2.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/vite": { "version": "5.4.11", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", @@ -18518,6 +20623,40 @@ "node": ">=18" } }, + "node_modules/wagmi": { + "version": "2.14.7", + "resolved": "https://registry.npmjs.org/wagmi/-/wagmi-2.14.7.tgz", + "integrity": "sha512-IwAWy8/UoO8T7p+szhKTwsNGdkTu3GpOg7vEzH/F4P6CoFdE3h7qwnE5RoahAEjgKlGHjP0JuyOJF+aOjkQuyA==", + "peer": true, + "dependencies": { + "@wagmi/connectors": "5.7.3", + "@wagmi/core": "2.16.3", + "use-sync-external-store": "1.4.0" + }, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "@tanstack/react-query": ">=5.0.0", + "react": ">=18", + "typescript": ">=5.0.4", + "viem": "2.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/wagmi/node_modules/use-sync-external-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "peer": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/webauthn-p256": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/webauthn-p256/-/webauthn-p256-0.0.10.tgz", @@ -18534,6 +20673,11 @@ "@noble/hashes": "^1.4.0" } }, + "node_modules/webextension-polyfill": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz", + "integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==" + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -18622,6 +20766,25 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, + "node_modules/which-typed-array": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -18813,11 +20976,18 @@ "dev": true, "license": "MIT" }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4" @@ -19011,6 +21181,34 @@ "dev": true, "license": "MIT" }, + "node_modules/zustand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz", + "integrity": "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + }, "packages/orderbook": { "name": "@rainlanguage/orderbook", "version": "0.0.1-alpha.6", diff --git a/package.json b/package.json index e4954b281..fdc72bfeb 100644 --- a/package.json +++ b/package.json @@ -24,34 +24,35 @@ "lint:all": "npm run lint --workspaces --if-present", "format:all": "npm run format --workspaces --if-present", "check:all": "npm run check --workspaces --if-present", - "lint-format-check:all": "npm run lint:all && npm run format:all && npm run check:all" + "lint-format-check:all": "npm run lint:all && npm run format:all && npm run check:all" }, "devDependencies": { + "@square/svelte-store": "^1.0.18", + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/adapter-static": "^3.0.1", + "@sveltejs/vite-plugin-svelte": "^3.0.0", "@tanstack/svelte-query": "^5.59.20", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.3.1", "@testing-library/jest-dom": "^6.4.2", "@testing-library/svelte": "^5.1.0", "@testing-library/user-event": "^14.5.2", - "@sveltejs/adapter-auto": "^3.0.0", - "@sveltejs/adapter-static": "^3.0.1", - "@sveltejs/vite-plugin-svelte": "^3.0.0", "@types/eslint": "^9.6.0", - "@types/node": "^18.13.0", "@types/lodash": "^4.14.202", + "@types/node": "^18.13.0", "@types/uuid": "^9.0.7", + "@typescript-eslint/eslint-plugin": "^7.3.1", + "@typescript-eslint/parser": "^7.3.1", "@vitest/expect": "^1.5.2", - "@square/svelte-store": "^1.0.18", - "dayjs": "^1.11.13", - "jsdom": "^24.0.0", "autoprefixer": "^10.4.20", + "dayjs": "^1.11.13", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.1", "eslint-plugin-svelte": "^2.36.0", "globals": "^15.0.0", + "jsdom": "^24.0.0", "lodash": "^4.17.21", "mockttp": "^3.15.1", + "postcss": "^8.4.32", "prettier": "^3.3.2", "prettier-plugin-svelte": "^3.2.6", "prettier-plugin-tailwindcss": "^0.6.5", @@ -63,22 +64,24 @@ "ts-node": "^10.9.1", "typescript": "^5.0.0", "typescript-eslint": "^8.0.0", + "viem": "^2.22.8", "vite": "^5.0.11", - "viem": "^2.21.44", - "vitest": "^2.0.5", - "postcss": "^8.4.32" - - }, + "vitest": "^2.0.5" + }, "workspaces": [ - "packages/*", "tauri-app" + "packages/*", + "tauri-app" ], "dependencies": { - "flowbite": "^2.2.1", - "flowbite-svelte": "^0.44.21", - "flowbite-svelte-icons": "^0.4.5", "@rainlanguage/orderbook": "*", "@rainlanguage/ui-components": "*", + "@sveltejs/kit": "^2.0.0", "@sveltejs/package": "^2.0.0", - "@sveltejs/kit": "^2.0.0" + "@wagmi/connectors": "^5.7.3", + "@wagmi/core": "^2.16.3", + "flowbite": "^2.2.1", + "flowbite-svelte": "^0.44.21", + "flowbite-svelte-icons": "^0.4.5", + "svelte-wagmi": "^1.0.7" } } diff --git a/packages/ui-components/src/__tests__/WalletConnect.test.ts b/packages/ui-components/src/__tests__/WalletConnect.test.ts new file mode 100644 index 000000000..e754459aa --- /dev/null +++ b/packages/ui-components/src/__tests__/WalletConnect.test.ts @@ -0,0 +1,35 @@ +import { render, screen } from '@testing-library/svelte'; +import WalletConnect from '../lib/components/WalletConnect.svelte'; +import { describe, it, vi, beforeEach, expect } from 'vitest'; + +const { mockSignerAddressStore, mockConnectedStore } = await vi.hoisted( + () => import('../lib/__mocks__/stores') +); + +describe('WalletConnect component', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + it('displays "Connect" with red icon when wallet is not connected or wrong network', () => { + mockSignerAddressStore.mockSetSubscribeValue(''); + mockConnectedStore.mockSetSubscribeValue(false); + render(WalletConnect); + + const connectButton = screen.getByTestId('wallet-connect'); + expect(connectButton).toBeInTheDocument(); + expect(screen.getByTestId('not-connected')).toBeInTheDocument(); + }); + + it('displays "Connected" with green icon when wallet is connected', () => { + mockSignerAddressStore.mockSetSubscribeValue('0x123'); + mockConnectedStore.mockSetSubscribeValue(true); + + render(WalletConnect); + + const connectButton = screen.getByTestId('wallet-connect'); + expect(connectButton).toBeInTheDocument(); + expect(screen.getByTestId('connected')).toBeInTheDocument(); + }); +}); diff --git a/packages/ui-components/src/lib/__mocks__/mockWeb3Config.ts b/packages/ui-components/src/lib/__mocks__/mockWeb3Config.ts new file mode 100644 index 000000000..61062fd4d --- /dev/null +++ b/packages/ui-components/src/lib/__mocks__/mockWeb3Config.ts @@ -0,0 +1,16 @@ +import { createConfig, http, fallback, type Config } from '@wagmi/core'; +import { mock } from '@wagmi/connectors'; +import { polygonAmoy } from '@wagmi/core/chains'; + +export const mockWeb3Config: Config = createConfig({ + multiInjectedProviderDiscovery: true, + chains: [polygonAmoy], + connectors: [ + mock({ + accounts: ['0xf08bcbce72f62c95dcb7c07dcb5ed26acfcfbc11'] + }) + ], + transports: { + [polygonAmoy.id]: fallback([http(), http('https://rpc-amoy.polygon.technology')]) + } +}); diff --git a/packages/ui-components/src/lib/__mocks__/stores.ts b/packages/ui-components/src/lib/__mocks__/stores.ts index 7eccaf6e5..b7f7b19a6 100644 --- a/packages/ui-components/src/lib/__mocks__/stores.ts +++ b/packages/ui-components/src/lib/__mocks__/stores.ts @@ -2,6 +2,10 @@ import type { ConfigSource } from '$lib/typeshare/config'; import { writable } from 'svelte/store'; import settingsFixture from '../__fixtures__/settings-12-11-24.json'; +import { type Config } from '@wagmi/core'; +import { mockWeb3Config } from '../mockWeb3Config'; + + const mockSettingsWritable = writable(settingsFixture); const mockActiveSubgraphsWritable = writable>({}); const mockAccountsWritable = writable>({}); @@ -14,6 +18,10 @@ const mockActiveOrderbookRefWritable = writable(''); const mockActiveAccountsWritable = writable>({}); const mockSubgraphUrlWritable = writable(''); const mockWalletAddressMatchesOrBlankWritable = writable<() => boolean>(() => false); +const mockSignerAddressWritable = writable(''); +const mockChainIdWritable = writable(0); +const mockConnectedWritable = writable(false); +const mockWagmiConfigWritable = writable(mockWeb3Config); export const mockWalletAddressMatchesOrBlankStore = { subscribe: mockWalletAddressMatchesOrBlankWritable.subscribe, @@ -89,3 +97,28 @@ export const mockSubgraphUrlStore = { set: mockSubgraphUrlWritable.set, mockSetSubscribeValue: (value: string): void => mockSubgraphUrlWritable.set(value) }; + +export const mockSignerAddressStore = { + subscribe: mockSignerAddressWritable.subscribe, + set: mockSignerAddressWritable.set, + mockSetSubscribeValue: (value: string): void => mockSignerAddressWritable.set(value) +}; + +export const mockChainIdStore = { + subscribe: mockChainIdWritable.subscribe, + set: mockChainIdWritable.set, + mockSetSubscribeValue: (value: number): void => mockChainIdWritable.set(value) +}; + + +export const mockConnectedStore = { + subscribe: mockConnectedWritable.subscribe, + set: mockConnectedWritable.set, + mockSetSubscribeValue: (value: boolean): void => mockConnectedWritable.set(value) +}; + +export const mockWagmiConfigStore = { + subscribe: mockWagmiConfigWritable.subscribe, + set: mockWagmiConfigWritable.set, + mockSetSubscribeValue: (value: Config): void => mockWagmiConfigWritable.set(value) +}; \ No newline at end of file diff --git a/packages/ui-components/src/lib/components/SidebarWebapp.svelte b/packages/ui-components/src/lib/components/SidebarWebapp.svelte index 59e6cfa70..63a58ad5f 100644 --- a/packages/ui-components/src/lib/components/SidebarWebapp.svelte +++ b/packages/ui-components/src/lib/components/SidebarWebapp.svelte @@ -4,9 +4,9 @@ SidebarGroup, SidebarItem, SidebarWrapper, - SidebarBrand, - Button + SidebarBrand } from 'flowbite-svelte'; + import WalletConnect from './WalletConnect.svelte'; import WalletSolid from 'flowbite-svelte-icons/WalletSolid.svelte'; import ReceiptSolid from 'flowbite-svelte-icons/ReceiptSolid.svelte'; import GearSolid from 'flowbite-svelte-icons/GearSolid.svelte'; @@ -68,7 +68,7 @@ - + diff --git a/packages/ui-components/src/lib/components/WalletConnect.svelte b/packages/ui-components/src/lib/components/WalletConnect.svelte new file mode 100644 index 000000000..8d88f7381 --- /dev/null +++ b/packages/ui-components/src/lib/components/WalletConnect.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/webapp/env.example b/packages/webapp/env.example new file mode 100644 index 000000000..078a6784b --- /dev/null +++ b/packages/webapp/env.example @@ -0,0 +1 @@ +PLUBLIC_WALLETCONNECT_ID= \ No newline at end of file diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index 83ee8cf3f..6898c7d98 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -3,6 +3,26 @@ import { QueryClient, QueryClientProvider } from '@tanstack/svelte-query'; import { SidebarWebapp } from '@rainlanguage/ui-components'; import { colorTheme } from '$lib/darkMode'; + import { defaultConfig } from 'svelte-wagmi'; + import { injected, walletConnect } from '@wagmi/connectors'; + import { flare } from '@wagmi/core/chains'; + import { browser } from '$app/environment'; + + const initWallet = async () => { + const erckit = defaultConfig({ + autoConnect: true, + appName: 'cyclo', + walletConnectProjectId: 'a68d9b4020ecec5fd5d32dcd4008e7f4', + chains: [flare], + connectors: [injected(), walletConnect({ projectId: 'a68d9b4020ecec5fd5d32dcd4008e7f4' })] + }); + await erckit.init(); + }; + + $: if (browser && window.navigator) { + initWallet(); + } + const queryClient = new QueryClient({ defaultOptions: { queries: { From 5efb22029893838de53bc9d800e3a94af74dd66a Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 13:18:49 +0100 Subject: [PATCH 07/74] switch to reown appKit --- package-lock.json | 1170 +++++++---------- package.json | 5 +- .../src/lib/components/WalletConnect.svelte | 23 +- packages/webapp/src/routes/+layout.svelte | 20 - packages/webapp/src/routes/+layout.ts | 158 ++- 5 files changed, 553 insertions(+), 823 deletions(-) diff --git a/package-lock.json b/package-lock.json index 233c58643..4d322708f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,14 +13,15 @@ "dependencies": { "@rainlanguage/orderbook": "*", "@rainlanguage/ui-components": "*", + "@reown/appkit": "^1.6.4", + "@reown/appkit-adapter-wagmi": "^1.6.4", "@sveltejs/kit": "^2.0.0", "@sveltejs/package": "^2.0.0", - "@wagmi/connectors": "^5.7.3", "@wagmi/core": "^2.16.3", "flowbite": "^2.2.1", "flowbite-svelte": "^0.44.21", "flowbite-svelte-icons": "^0.4.5", - "svelte-wagmi": "^1.0.7" + "wagmi": "^2.14.7" }, "devDependencies": { "@square/svelte-store": "^1.0.18", @@ -518,24 +519,24 @@ } }, "node_modules/@coinbase/wallet-sdk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.0.0.tgz", - "integrity": "sha512-7q8k39a2Iuz30dAEeh86AaSAbLgVPW3gfLa1UYh2IqP7gS+X9witoMEMM8o016K6vxP5N++PrM+Lgu/O1KByBA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.2.4.tgz", + "integrity": "sha512-wJ9QOXOhRdGermKAoJSr4JgGqZm/Um0m+ecywzEC9qSOu3TXuVcG3k0XXTXW11UBgjdoPRuf5kAwRX3T9BynFA==", "license": "Apache-2.0", + "peer": true, "dependencies": { - "buffer": "^6.0.3", + "@noble/hashes": "^1.4.0", "clsx": "^1.2.1", "eventemitter3": "^5.0.1", - "keccak": "^3.0.3", - "preact": "^10.16.0", - "sha.js": "^2.4.11" + "preact": "^10.24.2" } }, "node_modules/@coinbase/wallet-sdk/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", @@ -565,6 +566,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.2.tgz", "integrity": "sha512-ylfGR7PyTd+Rm2PqQowG08BCKA22QuX8NzrL+LxAAvazN10DMwdJ2fWwAzRj05FI/M8vNFGm3cv9Wq/GFWCBLg==", + "license": "MIT", "engines": { "bun": ">=1", "deno": ">=2", @@ -1034,6 +1036,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "license": "MIT", "dependencies": { "@ethereumjs/util": "^8.1.0", "crc-32": "^1.2.0" @@ -1043,6 +1046,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", "bin": { "rlp": "bin/rlp" }, @@ -1054,6 +1058,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "license": "MPL-2.0", "dependencies": { "@ethereumjs/common": "^3.2.0", "@ethereumjs/rlp": "^4.0.1", @@ -1068,6 +1073,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", @@ -2236,6 +2242,7 @@ "version": "7.3.3", "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz", "integrity": "sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==", + "license": "ISC", "dependencies": { "@metamask/rpc-errors": "^6.2.1", "@metamask/safe-event-emitter": "^3.0.0", @@ -2249,6 +2256,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", + "license": "ISC", "dependencies": { "@ethereumjs/tx": "^4.2.0", "@metamask/superstruct": "^3.0.0", @@ -2268,6 +2276,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz", "integrity": "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==", + "license": "ISC", "dependencies": { "@ethereumjs/tx": "^4.1.2", "@types/debug": "^4.1.7", @@ -2287,6 +2296,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -2295,6 +2305,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz", "integrity": "sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==", + "license": "ISC", "dependencies": { "@metamask/rpc-errors": "^6.2.1", "@metamask/safe-event-emitter": "^3.0.0", @@ -2308,6 +2319,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-7.0.2.tgz", "integrity": "sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==", + "license": "ISC", "dependencies": { "@metamask/json-rpc-engine": "^8.0.2", "@metamask/safe-event-emitter": "^3.0.0", @@ -2322,6 +2334,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2335,6 +2348,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.1.0.tgz", "integrity": "sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==", + "license": "ISC", "dependencies": { "once": "^1.4.0", "readable-stream": "^3.6.2" @@ -2347,6 +2361,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2360,6 +2375,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@metamask/onboarding/-/onboarding-1.0.1.tgz", "integrity": "sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==", + "license": "MIT", "dependencies": { "bowser": "^2.9.0" } @@ -2368,6 +2384,7 @@ "version": "16.1.0", "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-16.1.0.tgz", "integrity": "sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==", + "license": "MIT", "dependencies": { "@metamask/json-rpc-engine": "^8.0.1", "@metamask/json-rpc-middleware-stream": "^7.0.1", @@ -2390,6 +2407,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -2401,6 +2419,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2414,6 +2433,7 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.4.0.tgz", "integrity": "sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg==", + "license": "MIT", "dependencies": { "@metamask/utils": "^9.0.0", "fast-safe-stringify": "^2.0.6" @@ -2426,6 +2446,7 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-9.3.0.tgz", "integrity": "sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g==", + "license": "ISC", "dependencies": { "@ethereumjs/tx": "^4.2.0", "@metamask/superstruct": "^3.1.0", @@ -2449,6 +2470,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -2457,6 +2479,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.2.tgz", "integrity": "sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==", + "license": "ISC", "engines": { "node": ">=12.0.0" } @@ -2518,6 +2541,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } @@ -2526,6 +2550,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2539,6 +2564,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.1.0.tgz", "integrity": "sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==", + "license": "MIT", "engines": { "node": ">=16.0.0" } @@ -2547,6 +2573,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", + "license": "ISC", "dependencies": { "@ethereumjs/tx": "^4.2.0", "@metamask/superstruct": "^3.0.0", @@ -2570,6 +2597,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -2663,6 +2691,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.0.tgz", "integrity": "sha512-YGdEUzYEd+82jeaVbSKKVp1jFZb8LwaNMIIzHFkihGvYdd/KKAr7KaJHdEdSYGredE3ssSravXIa0Jxg28Sv5w==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -3075,6 +3104,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/@paulmillr/qr/-/qr-0.2.1.tgz", "integrity": "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==", + "license": "(MIT OR Apache-2.0)", "funding": { "url": "https://paulmillr.com/funding/" } @@ -3144,6 +3174,284 @@ "resolved": "packages/webapp", "link": true }, + "node_modules/@reown/appkit": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit/-/appkit-1.6.4.tgz", + "integrity": "sha512-7mP37wB+Bvth8ae9wCqxrXb1vLbUw5ZYVYieTgPoEjPk5Fk0twnNy9pkxl8OdpDmKFir1FbRQJEq5imLLQIa/Q==", + "license": "Apache-2.0", + "dependencies": { + "@reown/appkit-common": "1.6.4", + "@reown/appkit-core": "1.6.4", + "@reown/appkit-polyfills": "1.6.4", + "@reown/appkit-scaffold-ui": "1.6.4", + "@reown/appkit-siwe": "1.6.4", + "@reown/appkit-ui": "1.6.4", + "@reown/appkit-utils": "1.6.4", + "@reown/appkit-wallet": "1.6.4", + "@walletconnect/types": "2.17.2", + "@walletconnect/universal-provider": "2.17.2", + "@walletconnect/utils": "2.17.2", + "bs58": "6.0.0", + "valtio": "1.11.2", + "viem": "2.x" + } + }, + "node_modules/@reown/appkit-adapter-wagmi": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-adapter-wagmi/-/appkit-adapter-wagmi-1.6.4.tgz", + "integrity": "sha512-gT65bf8HFHF1a9/St8kNHmYYMJm9H6ZXWwP6AnKl0WrZY1Sj6q7sumNcEvRpNFDlJu9ySPHFmCzkt6E7XxljiA==", + "license": "Apache-2.0", + "dependencies": { + "@reown/appkit": "1.6.4", + "@reown/appkit-common": "1.6.4", + "@reown/appkit-core": "1.6.4", + "@reown/appkit-polyfills": "1.6.4", + "@reown/appkit-scaffold-ui": "1.6.4", + "@reown/appkit-ui": "1.6.4", + "@reown/appkit-utils": "1.6.4", + "@reown/appkit-wallet": "1.6.4", + "@walletconnect/universal-provider": "2.17.2", + "@walletconnect/utils": "2.17.2", + "valtio": "1.11.2" + }, + "peerDependencies": { + "@coinbase/wallet-sdk": "4.2.4", + "@wagmi/connectors": ">=5.1", + "@wagmi/core": ">=2.13", + "viem": "2.x", + "wagmi": ">=2.12" + } + }, + "node_modules/@reown/appkit-common": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-common/-/appkit-common-1.6.4.tgz", + "integrity": "sha512-TN8mKZYiTl7VQ7csrxxgB9EBsmp1qGj5dqcAv2JPZqD3rMkJtMCipIuf/Lg8gUjOJ3B8OyeNFDe8g+dhLZgTag==", + "license": "Apache-2.0", + "dependencies": { + "bignumber.js": "9.1.2", + "dayjs": "1.11.10", + "viem": "2.x" + } + }, + "node_modules/@reown/appkit-common/node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "license": "MIT" + }, + "node_modules/@reown/appkit-core": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-core/-/appkit-core-1.6.4.tgz", + "integrity": "sha512-hewOtE6P+s5rYEcjB5lzgiALTH50xbjROkliulyHLasBUvbP/L/M5RIsuOM3n/9/3bUu/Sc3wX+cFdh0/YbBaQ==", + "license": "Apache-2.0", + "dependencies": { + "@reown/appkit-common": "1.6.4", + "@reown/appkit-wallet": "1.6.4", + "@walletconnect/universal-provider": "2.17.2", + "valtio": "1.11.2", + "viem": "2.x" + } + }, + "node_modules/@reown/appkit-polyfills": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-polyfills/-/appkit-polyfills-1.6.4.tgz", + "integrity": "sha512-JF4ypel+k6S108xTDwQVzouFqHCHSmItX6OcGf/MU+1VhIEQO9xxZV5ee2IVPtmgdgireNREPXr+VOepMNKBsQ==", + "license": "Apache-2.0", + "dependencies": { + "buffer": "6.0.3" + } + }, + "node_modules/@reown/appkit-scaffold-ui": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-scaffold-ui/-/appkit-scaffold-ui-1.6.4.tgz", + "integrity": "sha512-uhsmDE8PoWT2d4HvFkcwm3IdYUU7RQCPEv3SUjYWQP94g+vPgZl6TT1iEmw455WOcg0oeYZ9COFKBsGSgVmPbw==", + "license": "Apache-2.0", + "dependencies": { + "@reown/appkit-common": "1.6.4", + "@reown/appkit-core": "1.6.4", + "@reown/appkit-ui": "1.6.4", + "@reown/appkit-utils": "1.6.4", + "@reown/appkit-wallet": "1.6.4", + "lit": "3.1.0" + } + }, + "node_modules/@reown/appkit-scaffold-ui/node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@reown/appkit-scaffold-ui/node_modules/lit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", + "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.0.0", + "lit-element": "^4.0.0", + "lit-html": "^3.1.0" + } + }, + "node_modules/@reown/appkit-scaffold-ui/node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/@reown/appkit-scaffold-ui/node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/@reown/appkit-siwe": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-siwe/-/appkit-siwe-1.6.4.tgz", + "integrity": "sha512-++gmCXQBu3XI1lG1h8by6XfExcPMfdEovrlO2t7z8dUwQETc7FY6yDkvTO2piCDvqpMGR5MDYmlIv19xIpuAwQ==", + "license": "Apache-2.0", + "dependencies": { + "@reown/appkit-common": "1.6.4", + "@reown/appkit-core": "1.6.4", + "@reown/appkit-ui": "1.6.4", + "@reown/appkit-utils": "1.6.4", + "@reown/appkit-wallet": "1.6.4", + "@walletconnect/utils": "2.17.2", + "lit": "3.1.0", + "valtio": "1.11.2" + } + }, + "node_modules/@reown/appkit-siwe/node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@reown/appkit-siwe/node_modules/lit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", + "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.0.0", + "lit-element": "^4.0.0", + "lit-html": "^3.1.0" + } + }, + "node_modules/@reown/appkit-siwe/node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/@reown/appkit-siwe/node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/@reown/appkit-ui": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-ui/-/appkit-ui-1.6.4.tgz", + "integrity": "sha512-NprNidUe6SDrFJJ5MQHc5J3Y+e/SI43OKNmVg9Lgui7HLPsowxC3T6YSBTXh1HwsKHOHyMjiLyefoi0fLNaZ7A==", + "license": "Apache-2.0", + "dependencies": { + "lit": "3.1.0", + "qrcode": "1.5.3" + } + }, + "node_modules/@reown/appkit-ui/node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@reown/appkit-ui/node_modules/lit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", + "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.0.0", + "lit-element": "^4.0.0", + "lit-html": "^3.1.0" + } + }, + "node_modules/@reown/appkit-ui/node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/@reown/appkit-ui/node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/@reown/appkit-utils": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-utils/-/appkit-utils-1.6.4.tgz", + "integrity": "sha512-Dq3Z02Qvc404DqRVZ2ZTYH9ldTmwTUxP5V77H8XUwKaTNEn+NsigQ+PdjsMbdYuqzqFhEOw0VUQABgziBbcNAA==", + "license": "Apache-2.0", + "dependencies": { + "@reown/appkit-common": "1.6.4", + "@reown/appkit-core": "1.6.4", + "@reown/appkit-polyfills": "1.6.4", + "@reown/appkit-wallet": "1.6.4", + "@walletconnect/logger": "2.1.2", + "@walletconnect/universal-provider": "2.17.2", + "valtio": "1.11.2", + "viem": "2.x" + }, + "peerDependencies": { + "valtio": "1.11.2" + } + }, + "node_modules/@reown/appkit-wallet": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@reown/appkit-wallet/-/appkit-wallet-1.6.4.tgz", + "integrity": "sha512-GfS4+ESVEGubkLrPEOE/QOSufkzSU7FZRK+RG4mD4zMjx2dcXEMrSBOuNOOf5PdgCFdd3XLCPfPj6HhMyVcVWQ==", + "license": "Apache-2.0", + "dependencies": { + "@reown/appkit-common": "1.6.4", + "@reown/appkit-polyfills": "1.6.4", + "@walletconnect/logger": "2.1.2", + "zod": "3.22.4" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", @@ -3428,6 +3736,7 @@ "version": "0.18.5", "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.5.tgz", "integrity": "sha512-9v9wjBi3TwLsEJ3C2ujYoexp3pFJ0omDLH/GX91e2QB+uwCKTBYyhxFSrTQ9qzoyQd+bfsk4gjOGW87QcJhf7g==", + "license": "MIT", "dependencies": { "@safe-global/safe-apps-sdk": "^9.1.0", "events": "^3.3.0" @@ -3437,6 +3746,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-sdk/-/safe-apps-sdk-9.1.0.tgz", "integrity": "sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q==", + "license": "MIT", "dependencies": { "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", "viem": "^2.1.1" @@ -3446,6 +3756,7 @@ "version": "3.22.6", "resolved": "https://registry.npmjs.org/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.22.6.tgz", "integrity": "sha512-R0Ck7n8fj7KtFUpbsGi0j3e2t0/bhpHTY/U8P8315vQ8aT/sfZrWMcfFcD5I9Kw8TEU7rvKY0+sngT1lCptJmQ==", + "license": "MIT", "engines": { "node": ">=16" } @@ -3462,6 +3773,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -3475,6 +3787,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -3486,6 +3799,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -3497,6 +3811,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -3505,6 +3820,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -3517,6 +3833,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -3528,6 +3845,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -4049,7 +4367,8 @@ "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" }, "node_modules/@square/svelte-store": { "version": "1.0.18", @@ -4372,6 +4691,7 @@ "version": "5.64.1", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.64.1.tgz", "integrity": "sha512-vW5ggHpIO2Yjj44b4sB+Fd3cdnlMJppXRBJkEHvld6FXh3j5dwWJoQo7mGtKI2RbSFyiyu/PhGAy0+Vv5ev9Eg==", + "license": "MIT", "peer": true, "dependencies": { "@tanstack/query-core": "5.64.1" @@ -4388,6 +4708,7 @@ "version": "5.64.1", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.64.1.tgz", "integrity": "sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==", + "license": "MIT", "peer": true, "funding": { "type": "github", @@ -4590,6 +4911,7 @@ "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", "dependencies": { "@types/ms": "*" } @@ -4634,7 +4956,8 @@ "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "license": "MIT" }, "node_modules/@types/node": { "version": "18.19.64", @@ -5611,6 +5934,7 @@ "version": "5.7.3", "resolved": "https://registry.npmjs.org/@wagmi/connectors/-/connectors-5.7.3.tgz", "integrity": "sha512-i7Gk5M/Fc9gMvkVHbqw2kGtXvY8POsSY798/9I5npyglVjBddxoVk3xTYmcYTB1VIa4Fi0T2gLTHpQnpLrq1CQ==", + "license": "MIT", "dependencies": { "@coinbase/wallet-sdk": "4.2.3", "@metamask/sdk": "0.31.4", @@ -5637,6 +5961,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.2.3.tgz", "integrity": "sha512-BcyHZ/Ec84z0emORzqdXDv4P0oV+tV3a0OirfA8Ko1JGBIAVvB+hzLvZzCDvnuZx7MTK+Dd8Y9Tjlo446BpCIg==", + "license": "Apache-2.0", "dependencies": { "@noble/hashes": "^1.4.0", "clsx": "^1.2.1", @@ -5648,6 +5973,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.17.0.tgz", "integrity": "sha512-On+uSaCfWdsMIQsECwWHZBmUXfrnqmv6B8SXRRuTJgd8tUpEvBkLQH4X7XkSm3zW6ozEkQTCagZ2ox2YPn3kbw==", + "license": "Apache-2.0", "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", @@ -5674,6 +6000,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@walletconnect/ethereum-provider/-/ethereum-provider-2.17.0.tgz", "integrity": "sha512-b+KTAXOb6JjoxkwpgYQQKPUcTwENGmdEdZoIDLeRicUmZTn/IQKfkMoC2frClB4YxkyoVMtj1oMV2JAax+yu9A==", + "license": "Apache-2.0", "dependencies": { "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", @@ -5691,6 +6018,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.17.0.tgz", "integrity": "sha512-sErYwvSSHQolNXni47L3Bm10ptJc1s1YoJvJd34s5E9h9+d3rj7PrhbiW9X82deN+Dm5oA8X9tC4xty1yIBrVg==", + "license": "Apache-2.0", "dependencies": { "@walletconnect/core": "2.17.0", "@walletconnect/events": "1.0.1", @@ -5707,6 +6035,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.17.0.tgz", "integrity": "sha512-i1pn9URpvt9bcjRDkabuAmpA9K7mzyKoLJlbsAujRVX7pfaG7wur7u9Jz0bk1HxvuABL5LHNncTnVKSXKQ5jZA==", + "license": "Apache-2.0", "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", @@ -5720,6 +6049,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.17.0.tgz", "integrity": "sha512-d3V5Be7AqLrvzcdMZSBS8DmGDRdqnyLk1DWmRKAGgR6ieUWykhhUKlvfeoZtvJrIXrY7rUGYpH1X41UtFkW5Pw==", + "license": "Apache-2.0", "dependencies": { "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", @@ -5736,6 +6066,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.17.0.tgz", "integrity": "sha512-1aeQvjwsXy4Yh9G6g2eGmXrEl+BzkNjHRdCrGdMYqFTFa8ROEJfTGsSH3pLsNDlOY94CoBUvJvM55q/PMoN/FQ==", + "license": "Apache-2.0", "dependencies": { "@stablelib/chacha20poly1305": "1.0.1", "@stablelib/hkdf": "1.0.1", @@ -5758,12 +6089,14 @@ "node_modules/@wagmi/connectors/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" }, "node_modules/@wagmi/core": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-2.16.3.tgz", "integrity": "sha512-SVovoWHaQ2AIkmGf+ucNijT6AHXcTMffFcLmcFF6++y21x+ge7Gkh3UoJiU91SDDv8n08eTQ9jbyia3GEgU5jQ==", + "license": "MIT", "dependencies": { "eventemitter3": "5.0.1", "mipd": "0.0.7", @@ -5789,7 +6122,8 @@ "node_modules/@wagmi/core/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" }, "node_modules/@walletconnect/core": { "version": "2.17.2", @@ -6192,180 +6526,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, - "node_modules/@web3modal/base": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/base/-/base-5.1.11.tgz", - "integrity": "sha512-wJCsqQ1FG0Isiv0Exaz2Sv+FpijVmNPNay+sGdV5HP2SpBAR/1xxHca2/vLBdACX7rYAFAj723DYQE0fmUpIaw==", - "dependencies": { - "@walletconnect/utils": "2.16.1", - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "@web3modal/scaffold-ui": "5.1.11", - "@web3modal/scaffold-utils": "5.1.11", - "@web3modal/siwe": "5.1.11", - "@web3modal/ui": "5.1.11", - "@web3modal/wallet": "5.1.11" - }, - "optionalDependencies": { - "borsh": "0.7.0", - "bs58": "5.0.0" - } - }, - "node_modules/@web3modal/base/node_modules/@lit/reactive-element": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", - "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0" - } - }, - "node_modules/@web3modal/base/node_modules/@walletconnect/types": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.16.1.tgz", - "integrity": "sha512-9P4RG4VoDEF+yBF/n2TF12gsvT/aTaeZTVDb/AOayafqiPnmrQZMKmNCJJjq1sfdsDcHXFcZWMGsuCeSJCmrXA==", - "dependencies": { - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "events": "3.3.0" - } - }, - "node_modules/@web3modal/base/node_modules/@walletconnect/utils": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.16.1.tgz", - "integrity": "sha512-aoQirVoDoiiEtYeYDtNtQxFzwO/oCrz9zqeEEXYJaAwXlGVTS34KFe7W3/Rxd/pldTYKFOZsku2EzpISfH8Wsw==", - "dependencies": { - "@stablelib/chacha20poly1305": "1.0.1", - "@stablelib/hkdf": "1.0.1", - "@stablelib/random": "1.0.2", - "@stablelib/sha256": "1.0.1", - "@stablelib/x25519": "1.0.3", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.16.1", - "@walletconnect/window-getters": "1.0.1", - "@walletconnect/window-metadata": "1.0.1", - "detect-browser": "5.3.0", - "elliptic": "^6.5.7", - "query-string": "7.1.3", - "uint8arrays": "3.1.0" - } - }, - "node_modules/@web3modal/base/node_modules/@web3modal/common": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-5.1.11.tgz", - "integrity": "sha512-YfSklKjjiM1RGxFTQm3ycYZ2Ktb6vswt9eg8lGXRknxN+SC7bCtuvgtyyCO0Z9/f9dPMOGIAmoJ/y6WHXWQqcg==", - "dependencies": { - "bignumber.js": "9.1.2", - "dayjs": "1.11.10" - } - }, - "node_modules/@web3modal/base/node_modules/@web3modal/core": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-5.1.11.tgz", - "integrity": "sha512-ugUVFVml1vVW+V7yxkn/AYYdrUJzn4ulFbDlxDMpmukKY6sDYLMMGAJ84O8ZC/OPyC7009NYd3mKZurxEyWkHw==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "@web3modal/common": "5.1.11", - "@web3modal/wallet": "5.1.11", - "valtio": "1.11.2" - } - }, - "node_modules/@web3modal/base/node_modules/@web3modal/polyfills": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/polyfills/-/polyfills-5.1.11.tgz", - "integrity": "sha512-BDIDYA2LGTCquahbZ+wyWQy4IBOPeKVSgt4ZpFir1fnVJUPkEluSwZStcKLtCzQvxJgER1sLicUrjJQHF36TOg==", - "dependencies": { - "buffer": "6.0.3" - } - }, - "node_modules/@web3modal/base/node_modules/@web3modal/scaffold-utils": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-5.1.11.tgz", - "integrity": "sha512-4bcYpQ3oxak5mDZMW5/7ayrhpaJHy6dCfUio15AGPHnQlFjkqcfSuuG0Io8Oj8VUXcK2UBLch9YiEDz4Xgce9Q==", - "dependencies": { - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "@web3modal/wallet": "5.1.11", - "valtio": "1.11.2" - } - }, - "node_modules/@web3modal/base/node_modules/@web3modal/siwe": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/siwe/-/siwe-5.1.11.tgz", - "integrity": "sha512-1aKEtMosACyY0SRjHjdcA/g3bRtMojTxlK7S/T6zBk57X/P3xcEZq9J8UM73plmGewjZdLaqGMgv6B/k/WleZQ==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "@walletconnect/utils": "2.16.1", - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/scaffold-utils": "5.1.11", - "@web3modal/ui": "5.1.11", - "@web3modal/wallet": "5.1.11", - "lit": "3.1.0", - "valtio": "1.11.2" - } - }, - "node_modules/@web3modal/base/node_modules/@web3modal/ui": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/ui/-/ui-5.1.11.tgz", - "integrity": "sha512-L0L+2YOK+ONx+W7GPtkSdKZuAQ8cjcS5N8kp+WZzKOMUTeDLuXKtSnES4p/ShOVmkpV6qB8r0pPA9xgFh1D3ow==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "lit": "3.1.0", - "qrcode": "1.5.3" - } - }, - "node_modules/@web3modal/base/node_modules/@web3modal/wallet": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/wallet/-/wallet-5.1.11.tgz", - "integrity": "sha512-/ooQZXK1h7LGBUemebldYPAV2oJAgxkgSiCMoHWynhuS0LO3BzhOhGL+jV19w4iU81bS1GSNFTxYT9LL6Scesw==", - "dependencies": { - "@walletconnect/logger": "2.1.2", - "@web3modal/common": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "zod": "3.22.4" - } - }, - "node_modules/@web3modal/base/node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "node_modules/@web3modal/base/node_modules/lit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", - "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", - "dependencies": { - "@lit/reactive-element": "^2.0.0", - "lit-element": "^4.0.0", - "lit-html": "^3.1.0" - } - }, - "node_modules/@web3modal/base/node_modules/lit-element": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", - "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0", - "@lit/reactive-element": "^2.0.4", - "lit-html": "^3.2.0" - } - }, - "node_modules/@web3modal/base/node_modules/lit-html": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", - "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, "node_modules/@web3modal/common": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-4.2.3.tgz", @@ -6427,6 +6587,20 @@ } } }, + "node_modules/@web3modal/ethers5/node_modules/@coinbase/wallet-sdk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.0.0.tgz", + "integrity": "sha512-7q8k39a2Iuz30dAEeh86AaSAbLgVPW3gfLa1UYh2IqP7gS+X9witoMEMM8o016K6vxP5N++PrM+Lgu/O1KByBA==", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.3", + "clsx": "^1.2.1", + "eventemitter3": "^5.0.1", + "keccak": "^3.0.3", + "preact": "^10.16.0", + "sha.js": "^2.4.11" + } + }, "node_modules/@web3modal/ethers5/node_modules/@walletconnect/core": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.13.0.tgz", @@ -6580,6 +6754,12 @@ "uint8arrays": "3.1.0" } }, + "node_modules/@web3modal/ethers5/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, "node_modules/@web3modal/polyfills": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@web3modal/polyfills/-/polyfills-4.2.3.tgz", @@ -6624,174 +6804,6 @@ } } }, - "node_modules/@web3modal/scaffold-ui": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/scaffold-ui/-/scaffold-ui-5.1.11.tgz", - "integrity": "sha512-fBqzd7DStUaEjtdbEU86rzY4XIgt8c8JN8oxS/xnUEopmjFYvBLCCVEfbTkZyJrRvAAphz7+oS4TVzXw9k6t5A==", - "dependencies": { - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/scaffold-utils": "5.1.11", - "@web3modal/siwe": "5.1.11", - "@web3modal/ui": "5.1.11", - "@web3modal/wallet": "5.1.11", - "lit": "3.1.0" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@lit/reactive-element": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", - "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@walletconnect/types": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.16.1.tgz", - "integrity": "sha512-9P4RG4VoDEF+yBF/n2TF12gsvT/aTaeZTVDb/AOayafqiPnmrQZMKmNCJJjq1sfdsDcHXFcZWMGsuCeSJCmrXA==", - "dependencies": { - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "events": "3.3.0" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@walletconnect/utils": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.16.1.tgz", - "integrity": "sha512-aoQirVoDoiiEtYeYDtNtQxFzwO/oCrz9zqeEEXYJaAwXlGVTS34KFe7W3/Rxd/pldTYKFOZsku2EzpISfH8Wsw==", - "dependencies": { - "@stablelib/chacha20poly1305": "1.0.1", - "@stablelib/hkdf": "1.0.1", - "@stablelib/random": "1.0.2", - "@stablelib/sha256": "1.0.1", - "@stablelib/x25519": "1.0.3", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.16.1", - "@walletconnect/window-getters": "1.0.1", - "@walletconnect/window-metadata": "1.0.1", - "detect-browser": "5.3.0", - "elliptic": "^6.5.7", - "query-string": "7.1.3", - "uint8arrays": "3.1.0" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/common": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-5.1.11.tgz", - "integrity": "sha512-YfSklKjjiM1RGxFTQm3ycYZ2Ktb6vswt9eg8lGXRknxN+SC7bCtuvgtyyCO0Z9/f9dPMOGIAmoJ/y6WHXWQqcg==", - "dependencies": { - "bignumber.js": "9.1.2", - "dayjs": "1.11.10" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/core": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-5.1.11.tgz", - "integrity": "sha512-ugUVFVml1vVW+V7yxkn/AYYdrUJzn4ulFbDlxDMpmukKY6sDYLMMGAJ84O8ZC/OPyC7009NYd3mKZurxEyWkHw==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "@web3modal/common": "5.1.11", - "@web3modal/wallet": "5.1.11", - "valtio": "1.11.2" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/polyfills": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/polyfills/-/polyfills-5.1.11.tgz", - "integrity": "sha512-BDIDYA2LGTCquahbZ+wyWQy4IBOPeKVSgt4ZpFir1fnVJUPkEluSwZStcKLtCzQvxJgER1sLicUrjJQHF36TOg==", - "dependencies": { - "buffer": "6.0.3" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/scaffold-utils": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-5.1.11.tgz", - "integrity": "sha512-4bcYpQ3oxak5mDZMW5/7ayrhpaJHy6dCfUio15AGPHnQlFjkqcfSuuG0Io8Oj8VUXcK2UBLch9YiEDz4Xgce9Q==", - "dependencies": { - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "@web3modal/wallet": "5.1.11", - "valtio": "1.11.2" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/siwe": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/siwe/-/siwe-5.1.11.tgz", - "integrity": "sha512-1aKEtMosACyY0SRjHjdcA/g3bRtMojTxlK7S/T6zBk57X/P3xcEZq9J8UM73plmGewjZdLaqGMgv6B/k/WleZQ==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "@walletconnect/utils": "2.16.1", - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/scaffold-utils": "5.1.11", - "@web3modal/ui": "5.1.11", - "@web3modal/wallet": "5.1.11", - "lit": "3.1.0", - "valtio": "1.11.2" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/ui": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/ui/-/ui-5.1.11.tgz", - "integrity": "sha512-L0L+2YOK+ONx+W7GPtkSdKZuAQ8cjcS5N8kp+WZzKOMUTeDLuXKtSnES4p/ShOVmkpV6qB8r0pPA9xgFh1D3ow==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "lit": "3.1.0", - "qrcode": "1.5.3" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/@web3modal/wallet": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/wallet/-/wallet-5.1.11.tgz", - "integrity": "sha512-/ooQZXK1h7LGBUemebldYPAV2oJAgxkgSiCMoHWynhuS0LO3BzhOhGL+jV19w4iU81bS1GSNFTxYT9LL6Scesw==", - "dependencies": { - "@walletconnect/logger": "2.1.2", - "@web3modal/common": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "zod": "3.22.4" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "node_modules/@web3modal/scaffold-ui/node_modules/lit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", - "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", - "dependencies": { - "@lit/reactive-element": "^2.0.0", - "lit-element": "^4.0.0", - "lit-html": "^3.1.0" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/lit-element": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", - "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0", - "@lit/reactive-element": "^2.0.4", - "lit-html": "^3.2.0" - } - }, - "node_modules/@web3modal/scaffold-ui/node_modules/lit-html": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", - "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, "node_modules/@web3modal/scaffold-utils": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-4.2.3.tgz", @@ -7072,6 +7084,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -7448,6 +7461,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -7481,10 +7495,10 @@ "license": "MIT" }, "node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", - "optional": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==", + "license": "MIT" }, "node_modules/base64-arraybuffer": { "version": "0.1.5", @@ -7615,39 +7629,11 @@ "dev": true, "license": "MIT" }, - "node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "optional": true, - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "node_modules/borsh/node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/borsh/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "optional": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -7721,12 +7707,12 @@ } }, "node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "optional": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "license": "MIT", "dependencies": { - "base-x": "^4.0.0" + "base-x": "^5.0.0" } }, "node_modules/buffer": { @@ -7845,6 +7831,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" @@ -7942,6 +7929,7 @@ "version": "3.9.3", "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-3.9.3.tgz", "integrity": "sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==", + "license": "Apache-2.0", "dependencies": { "bn.js": "^5.2.1", "buffer": "^6.0.3", @@ -7957,7 +7945,8 @@ "node_modules/cbw-sdk/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" }, "node_modules/chai": { "version": "5.1.2", @@ -8395,6 +8384,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" }, @@ -8979,6 +8969,7 @@ "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -9321,6 +9312,7 @@ "version": "0.4.13", "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.13.tgz", "integrity": "sha512-zBdtR4K+wbj10bWPpIOF9DW+eFYQu8miU5ypunh0t4Bvt83ZPlEWgT5Dq/0G6uwEXumZKjfb5BZxYUZQ2Hzn/Q==", + "license": "MIT", "dependencies": { "@ecies/ciphers": "^0.2.2", "@noble/ciphers": "^1.0.0", @@ -9403,6 +9395,7 @@ "version": "6.6.2", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz", "integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", @@ -9415,6 +9408,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -9435,6 +9429,7 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -9903,6 +9898,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-7.1.0.tgz", "integrity": "sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg==", + "license": "MIT", "dependencies": { "@metamask/eth-json-rpc-provider": "^1.0.0", "@metamask/safe-event-emitter": "^3.0.0", @@ -9918,6 +9914,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz", "integrity": "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==", + "license": "ISC", "dependencies": { "@ethereumjs/tx": "^4.1.2", "@types/debug": "^4.1.7", @@ -9933,6 +9930,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", "engines": { "node": ">=4" } @@ -9941,6 +9939,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-6.0.1.tgz", "integrity": "sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig==", + "license": "ISC", "dependencies": { "@metamask/safe-event-emitter": "^3.0.0", "async-mutex": "^0.2.6", @@ -9956,6 +9955,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" } @@ -9964,6 +9964,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", + "license": "ISC", "dependencies": { "json-rpc-random-id": "^1.0.0", "xtend": "^4.0.1" @@ -9973,6 +9974,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", + "license": "MIT", "dependencies": { "fast-safe-stringify": "^2.0.6" } @@ -9981,6 +9983,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -9992,6 +9995,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -10003,6 +10007,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -10062,6 +10067,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -10069,7 +10075,8 @@ "node_modules/eventemitter2": { "version": "6.4.9", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" }, "node_modules/eventemitter3": { "version": "3.1.2", @@ -10213,6 +10220,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-3.0.0.tgz", "integrity": "sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==", + "license": "ISC", "dependencies": { "readable-stream": "^3.6.2 || ^4.4.2", "webextension-polyfill": ">=0.10.0 <1.0" @@ -10225,6 +10233,7 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -10240,6 +10249,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -10322,7 +10332,8 @@ "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", @@ -10569,6 +10580,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -11108,6 +11120,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -11511,6 +11524,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -11538,6 +11552,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11597,6 +11612,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", @@ -11684,6 +11700,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -11713,6 +11730,7 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -11997,6 +12015,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", + "license": "ISC", "dependencies": { "@metamask/safe-event-emitter": "^2.0.0", "eth-rpc-errors": "^4.0.2" @@ -12008,12 +12027,14 @@ "node_modules/json-rpc-engine/node_modules/@metamask/safe-event-emitter": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", - "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" + "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==", + "license": "ISC" }, "node_modules/json-rpc-random-id": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" + "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==", + "license": "ISC" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -12467,7 +12488,8 @@ "node_modules/micro-ftch": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", @@ -12638,6 +12660,7 @@ "url": "https://github.com/sponsors/wagmi-dev" } ], + "license": "MIT", "peerDependencies": { "typescript": ">=5.0.4" }, @@ -15923,6 +15946,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/obj-multiplex/-/obj-multiplex-1.0.0.tgz", "integrity": "sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==", + "license": "ISC", "dependencies": { "end-of-stream": "^1.4.0", "once": "^1.4.0", @@ -16535,6 +16559,7 @@ "version": "2.1.11", "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz", "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==", + "license": "0BSD", "engines": { "node": ">=12.0.0" } @@ -16568,6 +16593,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -16925,6 +16951,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -17011,6 +17038,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -17511,6 +17539,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -17795,6 +17824,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -17809,6 +17839,7 @@ "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -18182,6 +18213,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -18447,325 +18479,6 @@ } } }, - "node_modules/svelte-wagmi": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/svelte-wagmi/-/svelte-wagmi-1.0.7.tgz", - "integrity": "sha512-5UhI8IbJtWoYtbD7bLOt9xzeZDUOHUPXKkAe2BU3zXcEYMw+79/j5YUOCBgFEqgd2WWwIXfJn0z26HXfO4xmeA==", - "dependencies": { - "@web3modal/core": "^5.0.1", - "@web3modal/ui": "^5.0.1", - "@web3modal/wagmi": "^5.0.1" - }, - "peerDependencies": { - "@wagmi/connectors": "^5.0.14", - "@wagmi/core": "^2.0.0", - "svelte": "^4.0.0 || ^5.0.0", - "vite": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/core": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.16.1.tgz", - "integrity": "sha512-UlsnEMT5wwFvmxEjX8s4oju7R3zadxNbZgsFeHEsjh7uknY2zgmUe1Lfc5XU6zyPb1Jx7Nqpdx1KN485ee8ogw==", - "dependencies": { - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-provider": "1.0.14", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/jsonrpc-ws-connection": "1.0.14", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.16.1", - "@walletconnect/utils": "2.16.1", - "events": "3.3.0", - "lodash.isequal": "4.5.0", - "uint8arrays": "3.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/ethereum-provider": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/ethereum-provider/-/ethereum-provider-2.16.1.tgz", - "integrity": "sha512-oD7DNCssUX3plS5gGUZ9JQ63muQB/vxO68X6RzD2wd8gBsYtSPw4BqYFc7KTO6dUizD6gfPirw32yW2pTvy92w==", - "dependencies": { - "@walletconnect/jsonrpc-http-connection": "1.0.8", - "@walletconnect/jsonrpc-provider": "1.0.14", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/modal": "2.6.2", - "@walletconnect/sign-client": "2.16.1", - "@walletconnect/types": "2.16.1", - "@walletconnect/universal-provider": "2.16.1", - "@walletconnect/utils": "2.16.1", - "events": "3.3.0" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/modal": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@walletconnect/modal/-/modal-2.6.2.tgz", - "integrity": "sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==", - "dependencies": { - "@walletconnect/modal-core": "2.6.2", - "@walletconnect/modal-ui": "2.6.2" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/modal-core": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@walletconnect/modal-core/-/modal-core-2.6.2.tgz", - "integrity": "sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==", - "dependencies": { - "valtio": "1.11.2" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/modal-ui": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@walletconnect/modal-ui/-/modal-ui-2.6.2.tgz", - "integrity": "sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==", - "dependencies": { - "@walletconnect/modal-core": "2.6.2", - "lit": "2.8.0", - "motion": "10.16.2", - "qrcode": "1.5.3" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/modal-ui/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/sign-client": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.16.1.tgz", - "integrity": "sha512-s2Tx2n2duxt+sHtuWXrN9yZVaHaYqcEcjwlTD+55/vs5NUPlISf+fFmZLwSeX1kUlrSBrAuxPUcqQuRTKcjLOA==", - "dependencies": { - "@walletconnect/core": "2.16.1", - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/logger": "2.1.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.16.1", - "@walletconnect/utils": "2.16.1", - "events": "3.3.0" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/types": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.16.1.tgz", - "integrity": "sha512-9P4RG4VoDEF+yBF/n2TF12gsvT/aTaeZTVDb/AOayafqiPnmrQZMKmNCJJjq1sfdsDcHXFcZWMGsuCeSJCmrXA==", - "dependencies": { - "@walletconnect/events": "1.0.1", - "@walletconnect/heartbeat": "1.2.2", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/keyvaluestorage": "1.1.1", - "@walletconnect/logger": "2.1.2", - "events": "3.3.0" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/universal-provider": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/universal-provider/-/universal-provider-2.16.1.tgz", - "integrity": "sha512-q/tyWUVNenizuClEiaekx9FZj/STU1F3wpDK4PUIh3xh+OmUI5fw2dY3MaNDjyb5AyrS0M8BuQDeuoSuOR/Q7w==", - "dependencies": { - "@walletconnect/jsonrpc-http-connection": "1.0.8", - "@walletconnect/jsonrpc-provider": "1.0.14", - "@walletconnect/jsonrpc-types": "1.0.4", - "@walletconnect/jsonrpc-utils": "1.0.8", - "@walletconnect/logger": "2.1.2", - "@walletconnect/sign-client": "2.16.1", - "@walletconnect/types": "2.16.1", - "@walletconnect/utils": "2.16.1", - "events": "3.3.0" - } - }, - "node_modules/svelte-wagmi/node_modules/@walletconnect/utils": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.16.1.tgz", - "integrity": "sha512-aoQirVoDoiiEtYeYDtNtQxFzwO/oCrz9zqeEEXYJaAwXlGVTS34KFe7W3/Rxd/pldTYKFOZsku2EzpISfH8Wsw==", - "dependencies": { - "@stablelib/chacha20poly1305": "1.0.1", - "@stablelib/hkdf": "1.0.1", - "@stablelib/random": "1.0.2", - "@stablelib/sha256": "1.0.1", - "@stablelib/x25519": "1.0.3", - "@walletconnect/relay-api": "1.0.11", - "@walletconnect/relay-auth": "1.0.4", - "@walletconnect/safe-json": "1.0.2", - "@walletconnect/time": "1.0.2", - "@walletconnect/types": "2.16.1", - "@walletconnect/window-getters": "1.0.1", - "@walletconnect/window-metadata": "1.0.1", - "detect-browser": "5.3.0", - "elliptic": "^6.5.7", - "query-string": "7.1.3", - "uint8arrays": "3.1.0" - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/common": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/common/-/common-5.1.11.tgz", - "integrity": "sha512-YfSklKjjiM1RGxFTQm3ycYZ2Ktb6vswt9eg8lGXRknxN+SC7bCtuvgtyyCO0Z9/f9dPMOGIAmoJ/y6WHXWQqcg==", - "dependencies": { - "bignumber.js": "9.1.2", - "dayjs": "1.11.10" - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/core": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/core/-/core-5.1.11.tgz", - "integrity": "sha512-ugUVFVml1vVW+V7yxkn/AYYdrUJzn4ulFbDlxDMpmukKY6sDYLMMGAJ84O8ZC/OPyC7009NYd3mKZurxEyWkHw==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "@web3modal/common": "5.1.11", - "@web3modal/wallet": "5.1.11", - "valtio": "1.11.2" - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/polyfills": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/polyfills/-/polyfills-5.1.11.tgz", - "integrity": "sha512-BDIDYA2LGTCquahbZ+wyWQy4IBOPeKVSgt4ZpFir1fnVJUPkEluSwZStcKLtCzQvxJgER1sLicUrjJQHF36TOg==", - "dependencies": { - "buffer": "6.0.3" - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/scaffold-utils": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/scaffold-utils/-/scaffold-utils-5.1.11.tgz", - "integrity": "sha512-4bcYpQ3oxak5mDZMW5/7ayrhpaJHy6dCfUio15AGPHnQlFjkqcfSuuG0Io8Oj8VUXcK2UBLch9YiEDz4Xgce9Q==", - "dependencies": { - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "@web3modal/wallet": "5.1.11", - "valtio": "1.11.2" - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/siwe": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/siwe/-/siwe-5.1.11.tgz", - "integrity": "sha512-1aKEtMosACyY0SRjHjdcA/g3bRtMojTxlK7S/T6zBk57X/P3xcEZq9J8UM73plmGewjZdLaqGMgv6B/k/WleZQ==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "@walletconnect/utils": "2.16.1", - "@web3modal/common": "5.1.11", - "@web3modal/core": "5.1.11", - "@web3modal/scaffold-utils": "5.1.11", - "@web3modal/ui": "5.1.11", - "@web3modal/wallet": "5.1.11", - "lit": "3.1.0", - "valtio": "1.11.2" - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/ui": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/ui/-/ui-5.1.11.tgz", - "integrity": "sha512-L0L+2YOK+ONx+W7GPtkSdKZuAQ8cjcS5N8kp+WZzKOMUTeDLuXKtSnES4p/ShOVmkpV6qB8r0pPA9xgFh1D3ow==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "lit": "3.1.0", - "qrcode": "1.5.3" - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/wagmi": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/wagmi/-/wagmi-5.1.11.tgz", - "integrity": "sha512-etV1qfBVvh41EMuBHXUpcO/W818jZVNh5/l9Z5kqRPZxlQmBaJbt5mTzw6nw/Lujoe1yYKugGQFhgjfEQK+eyA==", - "deprecated": "Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown", - "dependencies": { - "@walletconnect/ethereum-provider": "2.16.1", - "@walletconnect/utils": "2.16.1", - "@web3modal/base": "5.1.11", - "@web3modal/common": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "@web3modal/scaffold-utils": "5.1.11", - "@web3modal/siwe": "5.1.11", - "@web3modal/wallet": "5.1.11" - }, - "peerDependencies": { - "@wagmi/connectors": ">=4", - "@wagmi/core": ">=2.0.0", - "react": ">=17", - "react-dom": ">=17", - "viem": ">=2.0.0", - "vue": ">=3", - "wagmi": ">=2.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/svelte-wagmi/node_modules/@web3modal/wallet": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@web3modal/wallet/-/wallet-5.1.11.tgz", - "integrity": "sha512-/ooQZXK1h7LGBUemebldYPAV2oJAgxkgSiCMoHWynhuS0LO3BzhOhGL+jV19w4iU81bS1GSNFTxYT9LL6Scesw==", - "dependencies": { - "@walletconnect/logger": "2.1.2", - "@web3modal/common": "5.1.11", - "@web3modal/polyfills": "5.1.11", - "zod": "3.22.4" - } - }, - "node_modules/svelte-wagmi/node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "node_modules/svelte-wagmi/node_modules/lit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz", - "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==", - "dependencies": { - "@lit/reactive-element": "^2.0.0", - "lit-element": "^4.0.0", - "lit-html": "^3.1.0" - } - }, - "node_modules/svelte-wagmi/node_modules/lit/node_modules/@lit/reactive-element": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", - "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0" - } - }, - "node_modules/svelte-wagmi/node_modules/lit/node_modules/lit-element": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", - "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0", - "@lit/reactive-element": "^2.0.4", - "lit-html": "^3.2.0" - } - }, - "node_modules/svelte-wagmi/node_modules/lit/node_modules/lit-html": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", - "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, "node_modules/svelte/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -19160,12 +18873,6 @@ "optional": true, "peer": true }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==", - "optional": true - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -19989,6 +19696,7 @@ "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -20084,6 +19792,7 @@ "url": "https://github.com/sponsors/wevm" } ], + "license": "MIT", "dependencies": { "@noble/curves": "1.7.0", "@noble/hashes": "1.6.1", @@ -20627,7 +20336,7 @@ "version": "2.14.7", "resolved": "https://registry.npmjs.org/wagmi/-/wagmi-2.14.7.tgz", "integrity": "sha512-IwAWy8/UoO8T7p+szhKTwsNGdkTu3GpOg7vEzH/F4P6CoFdE3h7qwnE5RoahAEjgKlGHjP0JuyOJF+aOjkQuyA==", - "peer": true, + "license": "MIT", "dependencies": { "@wagmi/connectors": "5.7.3", "@wagmi/core": "2.16.3", @@ -20652,7 +20361,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", - "peer": true, + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -20676,7 +20385,8 @@ "node_modules/webextension-polyfill": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz", - "integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==" + "integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==", + "license": "MPL-2.0" }, "node_modules/webidl-conversions": { "version": "3.0.1", @@ -20770,6 +20480,7 @@ "version": "1.1.18", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -21185,6 +20896,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz", "integrity": "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==", + "license": "MIT", "engines": { "node": ">=12.20.0" }, diff --git a/package.json b/package.json index fdc72bfeb..3629d69ae 100644 --- a/package.json +++ b/package.json @@ -75,13 +75,14 @@ "dependencies": { "@rainlanguage/orderbook": "*", "@rainlanguage/ui-components": "*", + "@reown/appkit": "^1.6.4", + "@reown/appkit-adapter-wagmi": "^1.6.4", "@sveltejs/kit": "^2.0.0", "@sveltejs/package": "^2.0.0", - "@wagmi/connectors": "^5.7.3", "@wagmi/core": "^2.16.3", "flowbite": "^2.2.1", "flowbite-svelte": "^0.44.21", "flowbite-svelte-icons": "^0.4.5", - "svelte-wagmi": "^1.0.7" + "wagmi": "^2.14.7" } } diff --git a/packages/ui-components/src/lib/components/WalletConnect.svelte b/packages/ui-components/src/lib/components/WalletConnect.svelte index 8d88f7381..ca1c1b6d5 100644 --- a/packages/ui-components/src/lib/components/WalletConnect.svelte +++ b/packages/ui-components/src/lib/components/WalletConnect.svelte @@ -1,17 +1,14 @@ - + + + diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index 6898c7d98..83ee8cf3f 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -3,26 +3,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/svelte-query'; import { SidebarWebapp } from '@rainlanguage/ui-components'; import { colorTheme } from '$lib/darkMode'; - import { defaultConfig } from 'svelte-wagmi'; - import { injected, walletConnect } from '@wagmi/connectors'; - import { flare } from '@wagmi/core/chains'; - import { browser } from '$app/environment'; - - const initWallet = async () => { - const erckit = defaultConfig({ - autoConnect: true, - appName: 'cyclo', - walletConnectProjectId: 'a68d9b4020ecec5fd5d32dcd4008e7f4', - chains: [flare], - connectors: [injected(), walletConnect({ projectId: 'a68d9b4020ecec5fd5d32dcd4008e7f4' })] - }); - await erckit.init(); - }; - - $: if (browser && window.navigator) { - initWallet(); - } - const queryClient = new QueryClient({ defaultOptions: { queries: { diff --git a/packages/webapp/src/routes/+layout.ts b/packages/webapp/src/routes/+layout.ts index 8b97108a1..e96d4b338 100644 --- a/packages/webapp/src/routes/+layout.ts +++ b/packages/webapp/src/routes/+layout.ts @@ -1,73 +1,113 @@ import type { - AppStoresInterface, - ConfigSource, - OrderbookConfigSource, - OrderbookRef + AppStoresInterface, + ConfigSource, + OrderbookConfigSource, + OrderbookRef } from '@rainlanguage/ui-components'; import { writable, derived } from 'svelte/store'; import settingsJson from '$lib/settings-12-11-24.json'; import pkg from 'lodash'; +import { AppKit, createAppKit } from '@reown/appkit'; +import { mainnet, arbitrum, flare } from '@reown/appkit/networks'; +import { WagmiAdapter } from '@reown/appkit-adapter-wagmi'; +import { browser } from '$app/environment'; const { pickBy } = pkg; + export interface LayoutData { - stores: AppStoresInterface; + stores: AppStoresInterface; } export const load = () => { - const activeNetworkRef = writable(''); - const settings = writable(settingsJson); - const activeOrderbookRef = writable(''); - const activeOrderbook = derived( - [settings, activeOrderbookRef], - ([$settings, $activeOrderbookRef]) => - $settings?.orderbooks !== undefined && $activeOrderbookRef !== undefined - ? $settings.orderbooks[$activeOrderbookRef] - : undefined - ); - const subgraphUrl = derived([settings, activeOrderbook], ([$settings, $activeOrderbook]) => - $settings?.subgraphs !== undefined && $activeOrderbook?.subgraph !== undefined - ? $settings.subgraphs[$activeOrderbook.subgraph] - : undefined - ); - const activeNetworkOrderbooks = derived( - [settings, activeNetworkRef], - ([$settings, $activeNetworkRef]) => - $settings?.orderbooks - ? (pickBy( - $settings.orderbooks, - (orderbook) => orderbook.network === $activeNetworkRef - ) as Record) - : ({} as Record) - ); + let appKitModal: AppKit | undefined; + // Initialize Reown AppKit (only in browser) + if (browser) { + const projectId = 'a68d9b4020ecec5fd5d32dcd4008e7f4'; // Replace with your actual project ID + + const networks = [mainnet, arbitrum]; + + const wagmiAdapter = new WagmiAdapter({ + projectId, + networks + }); + + const metadata = { + name: 'Your App Name', + description: 'Your App Description', + url: 'http://localhost:5173', // Update with your domain + icons: [] // Update with your icon + }; + + const modal = createAppKit({ + adapters: [wagmiAdapter], + networks: [mainnet, arbitrum, flare], + metadata, + projectId, + features: { + analytics: true + } + }); + + // Export the modal instance if needed elsewhere + appKitModal = modal; + } + + const activeNetworkRef = writable(''); + const settings = writable(settingsJson); + const activeOrderbookRef = writable(''); + const activeOrderbook = derived( + [settings, activeOrderbookRef], + ([$settings, $activeOrderbookRef]) => + $settings?.orderbooks !== undefined && $activeOrderbookRef !== undefined + ? $settings.orderbooks[$activeOrderbookRef] + : undefined + ); + const subgraphUrl = derived([settings, activeOrderbook], ([$settings, $activeOrderbook]) => + $settings?.subgraphs !== undefined && $activeOrderbook?.subgraph !== undefined + ? $settings.subgraphs[$activeOrderbook.subgraph] + : undefined + ); + const activeNetworkOrderbooks = derived( + [settings, activeNetworkRef], + ([$settings, $activeNetworkRef]) => + $settings?.orderbooks + ? (pickBy( + $settings.orderbooks, + (orderbook) => orderbook.network === $activeNetworkRef + ) as Record) + : ({} as Record) + ); + + const accounts = derived(settings, ($settings) => $settings?.accounts); + const activeAccountsItems = writable>({}); - const accounts = derived(settings, ($settings) => $settings?.accounts); - const activeAccountsItems = writable>({}); + const activeAccounts = derived( + [accounts, activeAccountsItems], + ([$accounts, $activeAccountsItems]) => + Object.keys($activeAccountsItems).length === 0 + ? {} + : Object.fromEntries( + Object.entries($accounts || {}).filter(([key]) => key in $activeAccountsItems) + ) + ); - const activeAccounts = derived( - [accounts, activeAccountsItems], - ([$accounts, $activeAccountsItems]) => - Object.keys($activeAccountsItems).length === 0 - ? {} - : Object.fromEntries( - Object.entries($accounts || {}).filter(([key]) => key in $activeAccountsItems) - ) - ); - return { - stores: { - settings, - activeSubgraphs: writable>({}), - accounts, - activeAccountsItems, - activeAccounts, - activeOrderStatus: writable(undefined), - orderHash: writable(''), - hideZeroBalanceVaults: writable(false), - activeNetworkRef, - activeOrderbookRef, - activeOrderbook, - subgraphUrl, - activeNetworkOrderbooks - } - }; + return { + stores: { + settings, + activeSubgraphs: writable>({}), + accounts, + activeAccountsItems, + activeAccounts, + activeOrderStatus: writable(undefined), + orderHash: writable(''), + hideZeroBalanceVaults: writable(false), + activeNetworkRef, + activeOrderbookRef, + activeOrderbook, + subgraphUrl, + activeNetworkOrderbooks, + }, + appKitModal: browser ? writable(appKitModal) : writable(null) + }; }; -export const ssr = false; +export const ssr = false; \ No newline at end of file From 43a2a2d0fe97712675cb37848e6111225b3f5869 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 15:46:46 +0100 Subject: [PATCH 08/74] add reusable hash --- .../HashActiveStatusIndicator.test.ts | 10 +++---- .../HashActiveStatusIndicator.svelte | 21 -------------- .../lib/components/OrderOrVaultHash.svelte | 28 +++++++++++++++++++ .../lib/components/detail/VaultDetail.svelte | 8 ++++-- .../components/tables/VaultsListTable.svelte | 8 ++++-- packages/ui-components/src/lib/index.ts | 1 + 6 files changed, 44 insertions(+), 32 deletions(-) delete mode 100644 packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte create mode 100644 packages/ui-components/src/lib/components/OrderOrVaultHash.svelte diff --git a/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts b/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts index c02ba0db3..ea1f71687 100644 --- a/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts +++ b/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts @@ -1,13 +1,13 @@ import { render, fireEvent } from '@testing-library/svelte'; import { describe, it, expect, vi } from 'vitest'; -import HashActiveStatusIndicator from '../lib/components/HashActiveStatusIndicator.svelte'; +import OrderOrVaultHash from '../lib/components/OrderOrVaultHash.svelte'; import { goto } from '$app/navigation'; vi.mock('$app/navigation', () => ({ goto: vi.fn() })); -describe('HashActiveStatusIndicator', () => { +describe('OrderOrVaultHash', () => { const mockOrder = { id: '123', orderHash: '0x123abc', @@ -23,7 +23,7 @@ describe('HashActiveStatusIndicator', () => { const mockUpdateFn = vi.fn(); it('renders with active order', () => { - const { getByTestId } = render(HashActiveStatusIndicator, { + const { getByTestId } = render(OrderOrVaultHash, { props: { order: mockOrder, subgraphName: mockSubgraphName, @@ -38,7 +38,7 @@ describe('HashActiveStatusIndicator', () => { }); it('renders with inactive order', () => { - const { getByTestId } = render(HashActiveStatusIndicator, { + const { getByTestId } = render(OrderOrVaultHash, { props: { order: mockInactiveOrder, subgraphName: mockSubgraphName, @@ -51,7 +51,7 @@ describe('HashActiveStatusIndicator', () => { }); it('handles click event correctly', async () => { - const { getByTestId } = render(HashActiveStatusIndicator, { + const { getByTestId } = render(OrderOrVaultHash, { props: { order: mockOrder, subgraphName: mockSubgraphName, diff --git a/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte b/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte deleted file mode 100644 index 42a19a708..000000000 --- a/packages/ui-components/src/lib/components/HashActiveStatusIndicator.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte new file mode 100644 index 000000000..f40fdde2c --- /dev/null +++ b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte @@ -0,0 +1,28 @@ + + +{#if hash && id && subgraphName} + +{/if} diff --git a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte index 133b1ea87..9227eec84 100644 --- a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte @@ -18,7 +18,7 @@ import { ArrowDownOutline, ArrowUpOutline } from 'flowbite-svelte-icons'; import type { Vault } from '@rainlanguage/orderbook/js_api'; - import HashActiveStatusIndicator from '../HashActiveStatusIndicator.svelte'; + import OrderOrVaultHash from '../OrderOrVaultHash.svelte'; export let id: string; export let network: string; @@ -131,7 +131,8 @@ tauri-app/src/lib/components/detail/VaultDetail.svelte {#if data.ordersAsInput && data.ordersAsInput.length > 0} {#each data.ordersAsInput as order} - {#if data.ordersAsOutput && data.ordersAsOutput.length > 0} {#each data.ordersAsOutput as order} - 0}
{#each item.vault.ordersAsInput.slice(0, 3) as order} - 0}
{#each item.vault.ordersAsOutput.slice(0, 3) as order} - Date: Tue, 14 Jan 2025 15:46:52 +0100 Subject: [PATCH 09/74] remove --- .../{HashActiveStatusIndicator.test.ts => OrderOrVaultHash.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/ui-components/src/__tests__/{HashActiveStatusIndicator.test.ts => OrderOrVaultHash.ts} (100%) diff --git a/packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts b/packages/ui-components/src/__tests__/OrderOrVaultHash.ts similarity index 100% rename from packages/ui-components/src/__tests__/HashActiveStatusIndicator.test.ts rename to packages/ui-components/src/__tests__/OrderOrVaultHash.ts From a907da599aed3045176f5242515b20f972ec1f26 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 15:49:15 +0100 Subject: [PATCH 10/74] fix test --- .../{OrderOrVaultHash.ts => OrderOrVaultHash.test.ts} | 3 +++ .../ui-components/src/lib/components/OrderOrVaultHash.svelte | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) rename packages/ui-components/src/__tests__/{OrderOrVaultHash.ts => OrderOrVaultHash.test.ts} (96%) diff --git a/packages/ui-components/src/__tests__/OrderOrVaultHash.ts b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts similarity index 96% rename from packages/ui-components/src/__tests__/OrderOrVaultHash.ts rename to packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts index ea1f71687..0004786c3 100644 --- a/packages/ui-components/src/__tests__/OrderOrVaultHash.ts +++ b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts @@ -25,6 +25,7 @@ describe('OrderOrVaultHash', () => { it('renders with active order', () => { const { getByTestId } = render(OrderOrVaultHash, { props: { + type: 'orders', order: mockOrder, subgraphName: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn @@ -40,6 +41,7 @@ describe('OrderOrVaultHash', () => { it('renders with inactive order', () => { const { getByTestId } = render(OrderOrVaultHash, { props: { + type: 'orders', order: mockInactiveOrder, subgraphName: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn @@ -53,6 +55,7 @@ describe('OrderOrVaultHash', () => { it('handles click event correctly', async () => { const { getByTestId } = render(OrderOrVaultHash, { props: { + type: 'orders', order: mockOrder, subgraphName: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn diff --git a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte index f40fdde2c..d0c382445 100644 --- a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte +++ b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte @@ -6,7 +6,7 @@ export let order: Order | OrderAsIO | undefined = undefined; export let vault: Vault | undefined = undefined; - export let type: string; + export let type: 'orders' | 'vaults'; export let subgraphName: string; export let updateActiveNetworkAndOrderbook: (subgraphName: string) => void; From bad27f37fc3a1c966deb87d92b592249c0917296 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 16:03:34 +0100 Subject: [PATCH 11/74] update usage --- .../lib/components/OrderOrVaultHash.svelte | 12 ++++++---- .../lib/components/detail/VaultDetail.svelte | 22 +++++-------------- .../components/tables/VaultsListTable.svelte | 4 ++-- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte index d0c382445..689375a38 100644 --- a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte +++ b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte @@ -7,22 +7,26 @@ export let order: Order | OrderAsIO | undefined = undefined; export let vault: Vault | undefined = undefined; export let type: 'orders' | 'vaults'; - export let subgraphName: string; + export let network: string; export let updateActiveNetworkAndOrderbook: (subgraphName: string) => void; $: id = order?.id || vault?.id; $: hash = order?.orderHash || vault?.id; + + $: console.log(id, hash, network); + + $: console.log(order); -{#if hash && id && subgraphName} +{#if hash && id && network} {/if} diff --git a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte index 5432742d4..718e6e810 100644 --- a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte @@ -20,6 +20,7 @@ import type { Vault } from '@rainlanguage/orderbook/js_api'; import OrderOrVaultHash from '../OrderOrVaultHash.svelte'; import type { AppStoresInterface } from '../../types/appStores'; + import { page } from '$app/stores'; export let id: string; export let network: string; @@ -44,6 +45,8 @@ enabled: !!subgraphUrl }); + $: console.log($vaultDetailQuery); + const updateActiveNetworkAndOrderbook = (subgraphName: string) => { activeNetworkRef.set(subgraphName); activeOrderbookRef.set(subgraphName); @@ -64,10 +67,7 @@ }); -tauri-app/src/lib/components/detail/VaultDetail.svelte +
{#if data.ordersAsInput && data.ordersAsInput.length > 0} {#each data.ordersAsInput as order} - + {/each} {:else} None @@ -153,12 +148,7 @@ tauri-app/src/lib/components/detail/VaultDetail.svelte {#if data.ordersAsOutput && data.ordersAsOutput.length > 0} {#each data.ordersAsOutput as order} - + {/each} {:else} None diff --git a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte index 9556d2062..923599041 100644 --- a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte +++ b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte @@ -170,7 +170,7 @@ {/each} @@ -185,7 +185,7 @@ {/each} From 4fa5ed8810bc054e98662a0cbaf213504bf03c3a Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 16:06:02 +0100 Subject: [PATCH 12/74] format --- .../ui-components/src/lib/components/detail/VaultDetail.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte index 718e6e810..26c394d99 100644 --- a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte @@ -20,7 +20,6 @@ import type { Vault } from '@rainlanguage/orderbook/js_api'; import OrderOrVaultHash from '../OrderOrVaultHash.svelte'; import type { AppStoresInterface } from '../../types/appStores'; - import { page } from '$app/stores'; export let id: string; export let network: string; From 8dca317178bdc5c3d74f8faca14be6bfbbc2cfb6 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 16:06:13 +0100 Subject: [PATCH 13/74] format --- packages/ui-components/src/lib/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-components/src/lib/index.ts b/packages/ui-components/src/lib/index.ts index a5a7869ed..29043b33a 100644 --- a/packages/ui-components/src/lib/index.ts +++ b/packages/ui-components/src/lib/index.ts @@ -51,7 +51,7 @@ export { default as VaultBalanceChart } from './components/charts/VaultBalanceCh export { default as VaultDetail } from './components/detail/VaultDetail.svelte'; export { default as InputToken } from './components/input/InputToken.svelte'; export { default as CodeMirrorDotrain } from './components/CodeMirrorDotrain.svelte'; -export {default as OrderOrVaultHash } from './components/OrderOrVaultHash.svelte' +export { default as OrderOrVaultHash } from './components/OrderOrVaultHash.svelte'; //Types export type { AppStoresInterface } from './types/appStores.ts'; From 7bce6e578ae8b37d881b6a100a7aed2f481252db Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 16:07:37 +0100 Subject: [PATCH 14/74] remove deployment --- .../webapp/src/routes/deployment/+page.svelte | 401 ------------------ 1 file changed, 401 deletions(-) delete mode 100644 packages/webapp/src/routes/deployment/+page.svelte diff --git a/packages/webapp/src/routes/deployment/+page.svelte b/packages/webapp/src/routes/deployment/+page.svelte deleted file mode 100644 index c9a40f161..000000000 --- a/packages/webapp/src/routes/deployment/+page.svelte +++ /dev/null @@ -1,401 +0,0 @@ - - -
- { - gui = undefined; - }} - /> -
- -
- - - - {#if selectedRef === undefined} - Select a deployment - {:else if selectedOption?.label} - {selectedOption.label} - {:else} - {selectedRef} - {/if} - - - -
-
{option.label ? option.label : ref}
-
-
-
-
- -{#if gui} - {#if isLimitStrat && selectTokens.size > 0} - - - {#each selectTokens.entries() as [token]} -
- - - { - if (currentTarget instanceof HTMLInputElement) { - if (!gui) return; - await gui.saveSelectTokenAddress(token, currentTarget.value); - selectTokens = gui.getSelectTokens(); - gui = gui; - } - }} - /> -
- {/each} - {/if} - - {#if allFieldDefinitions.length > 0} - - - {#each allFieldDefinitions as fieldDefinition} -
- - - [ - preset.id, - { - label: preset.name, - id: preset.id - } - ]) - ), - ...{ custom: { label: 'Custom value', id: '' } } - }} - on:change={({ detail }) => { - gui?.saveFieldValue(fieldDefinition.binding, { - isPreset: detail.value !== 'custom', - value: detail.value === 'custom' ? '' : detail.value || '' - }); - gui = gui; - }} - > - - {#if selectedRef === undefined} - Select a preset - {:else if selectedOption?.label} - {selectedOption.label} - {:else} - {selectedRef} - {/if} - - - -
-
{option.label ? option.label : ref}
-
-
-
- - {#if gui?.isFieldPreset(fieldDefinition.binding) === false} - { - if (currentTarget instanceof HTMLInputElement) { - gui?.saveFieldValue(fieldDefinition.binding, { - isPreset: false, - value: currentTarget.value - }); - } - }} - /> - {/if} -
- {/each} - {/if} - - {#if allDeposits.length > 0} - - - {#each allDeposits as deposit} -
- - - [ - preset, - { - label: preset - } - ]) - ), - ...{ custom: { label: 'Custom value' } } - }} - on:change={({ detail }) => { - gui?.saveDeposit( - deposit.token.key, - detail.value === 'custom' ? '' : detail.value || '' - ); - gui = gui; - }} - > - - {#if selectedRef === undefined} - Choose deposit amount - {:else if selectedOption?.label} - {selectedOption.label} - {:else} - {selectedRef} - {/if} - - - -
-
{option.label ? option.label : ref}
-
-
-
- - {#if gui?.isDepositPreset(deposit.token.key) === false} - { - if (currentTarget instanceof HTMLInputElement) { - gui?.saveDeposit(deposit.token.key, currentTarget.value); - } - }} - /> - {/if} -
- {/each} - {/if} - - {#if selectedDeployment} -
-
- -
- - {#if useCustomVaultIds} - - - {#if gui?.getCurrentDeployment().deployment.order.inputs.length > 0} - - {#each gui?.getCurrentDeployment().deployment.order.inputs as input, i} -
- - gui?.setVaultId(true, i, inputVaultIds[i])} - /> -
- {/each} - {/if} - - {#if gui?.getCurrentDeployment().deployment.order.outputs.length > 0} - - {#each gui?.getCurrentDeployment().deployment.order.outputs as output, i} -
- - gui?.setVaultId(false, i, outputVaultIds[i])} - /> -
- {/each} - {/if} - {/if} -
- - - {/if} -{/if} From c46114bdc31debbfcce14ac223b08ad9d928d040 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 16:13:38 +0100 Subject: [PATCH 15/74] fix tests --- .../src/__tests__/OrderOrVaultHash.test.ts | 6 +++--- .../ui-components/src/__tests__/VaultDetail.test.ts | 12 +++--------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts index 0004786c3..06f9f934d 100644 --- a/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts +++ b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts @@ -27,7 +27,7 @@ describe('OrderOrVaultHash', () => { props: { type: 'orders', order: mockOrder, - subgraphName: mockSubgraphName, + network: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn } }); @@ -43,7 +43,7 @@ describe('OrderOrVaultHash', () => { props: { type: 'orders', order: mockInactiveOrder, - subgraphName: mockSubgraphName, + network: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn } }); @@ -57,7 +57,7 @@ describe('OrderOrVaultHash', () => { props: { type: 'orders', order: mockOrder, - subgraphName: mockSubgraphName, + network: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn } }); diff --git a/packages/ui-components/src/__tests__/VaultDetail.test.ts b/packages/ui-components/src/__tests__/VaultDetail.test.ts index b6b193b6c..21b8c2393 100644 --- a/packages/ui-components/src/__tests__/VaultDetail.test.ts +++ b/packages/ui-components/src/__tests__/VaultDetail.test.ts @@ -39,9 +39,7 @@ test('calls the vault detail query fn with the correct vault id', async () => { id: '100', network: 'mainnet', settings: mockSettings, - lightweightChartsTheme: readable(darkChartTheme), - activeNetworkRef: writable('mainnet'), - activeOrderbookRef: writable('0x00') + lightweightChartsTheme: readable(darkChartTheme) }, context: new Map([['$$_queryClient', queryClient]]) }); @@ -62,9 +60,7 @@ test('shows the correct empty message when the query returns no data', async () activeNetworkRef: writable('mainnet'), activeOrderbookRef: writable('0x00'), settings: mockSettings, - lightweightChartsTheme: readable(darkChartTheme), - activeNetworkRef: writable('mainnet'), - activeOrderbookRef: writable('0x00') + lightweightChartsTheme: readable(darkChartTheme) }, context: new Map([['$$_queryClient', queryClient]]) }); @@ -107,9 +103,7 @@ test('shows the correct data when the query returns data', async () => { activeNetworkRef: writable('mainnet'), activeOrderbookRef: writable('0x00'), settings: mockSettings, - lightweightChartsTheme: readable(darkChartTheme), - activeNetworkRef: writable('mainnet'), - activeOrderbookRef: writable('0x00') + lightweightChartsTheme: readable(darkChartTheme) }, context: new Map([['$$_queryClient', queryClient]]) }); From 8d879014b75741b22b30e56e18a9110880680f9b Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 14 Jan 2025 16:32:21 +0100 Subject: [PATCH 16/74] remove logs --- .../lib/components/OrderOrVaultHash.svelte | 28 ++++++++----------- .../lib/components/detail/VaultDetail.svelte | 2 -- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte index 689375a38..88277e002 100644 --- a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte +++ b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte @@ -11,22 +11,16 @@ export let updateActiveNetworkAndOrderbook: (subgraphName: string) => void; $: id = order?.id || vault?.id; - $: hash = order?.orderHash || vault?.id; - - $: console.log(id, hash, network); - - $: console.log(order); + $: hash = order?.orderHash || vault?.id || ''; -{#if hash && id && network} - -{/if} + diff --git a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte index 26c394d99..b6843ae9a 100644 --- a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte @@ -44,8 +44,6 @@ enabled: !!subgraphUrl }); - $: console.log($vaultDetailQuery); - const updateActiveNetworkAndOrderbook = (subgraphName: string) => { activeNetworkRef.set(subgraphName); activeOrderbookRef.set(subgraphName); From 54d4edef05b9945dbc4398708660a7004645e1fc Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Wed, 15 Jan 2025 09:35:44 +0100 Subject: [PATCH 17/74] fix test --- packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts index 06f9f934d..c36ae7f49 100644 --- a/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts +++ b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts @@ -35,7 +35,7 @@ describe('OrderOrVaultHash', () => { const button = getByTestId('vault-order-input'); expect(button).toBeTruthy(); expect(button.classList.toString()).toContain('text-white bg-green'); - expect(button.getAttribute('data-order-id')).toBe('123'); + expect(button.getAttribute('data-id')).toBe('123'); }); it('renders with inactive order', () => { From b944bb01cd33a228bdad4e23cfa7cf292ebf3c6f Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 13:46:19 +0100 Subject: [PATCH 18/74] change props for type safety --- .../src/__tests__/OrderOrVaultHash.test.ts | 6 +++--- .../lib/components/OrderOrVaultHash.svelte | 21 ++++++++++++------- .../lib/components/detail/VaultDetail.svelte | 4 ++-- .../components/tables/VaultsListTable.svelte | 4 ++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts index c36ae7f49..9e81894ba 100644 --- a/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts +++ b/packages/ui-components/src/__tests__/OrderOrVaultHash.test.ts @@ -26,7 +26,7 @@ describe('OrderOrVaultHash', () => { const { getByTestId } = render(OrderOrVaultHash, { props: { type: 'orders', - order: mockOrder, + orderOrVault: mockOrder, network: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn } @@ -42,7 +42,7 @@ describe('OrderOrVaultHash', () => { const { getByTestId } = render(OrderOrVaultHash, { props: { type: 'orders', - order: mockInactiveOrder, + orderOrVault: mockInactiveOrder, network: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn } @@ -56,7 +56,7 @@ describe('OrderOrVaultHash', () => { const { getByTestId } = render(OrderOrVaultHash, { props: { type: 'orders', - order: mockOrder, + orderOrVault: mockOrder, network: mockSubgraphName, updateActiveNetworkAndOrderbook: mockUpdateFn } diff --git a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte index 88277e002..3c0a38d76 100644 --- a/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte +++ b/packages/ui-components/src/lib/components/OrderOrVaultHash.svelte @@ -2,25 +2,30 @@ import { Button } from 'flowbite-svelte'; import Hash, { HashType } from './Hash.svelte'; import { goto } from '$app/navigation'; - import type { Order, OrderAsIO, Vault } from '@rainlanguage/orderbook/js_api'; + import type { OrderAsIO, OrderSubgraph, Vault } from '@rainlanguage/orderbook/js_api'; - export let order: Order | OrderAsIO | undefined = undefined; - export let vault: Vault | undefined = undefined; + type OrderOrVault = OrderSubgraph | OrderAsIO | Vault; + + export let orderOrVault: OrderOrVault; export let type: 'orders' | 'vaults'; export let network: string; export let updateActiveNetworkAndOrderbook: (subgraphName: string) => void; - $: id = order?.id || vault?.id; - $: hash = order?.orderHash || vault?.id || ''; + let hash; + + $: isOrder = 'orderHash' in (orderOrVault || {}); + $: slug = isOrder ? (orderOrVault as OrderSubgraph).id : (orderOrVault as Vault)?.id; + $: hash = isOrder ? (orderOrVault as OrderSubgraph).id : (orderOrVault as Vault)?.id || ''; + $: isActive = isOrder ? (orderOrVault as OrderAsIO).active : false; diff --git a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte index b6843ae9a..ed17273d7 100644 --- a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte @@ -130,7 +130,7 @@

{#if data.ordersAsInput && data.ordersAsInput.length > 0} {#each data.ordersAsInput as order} - + {/each} {:else} None @@ -145,7 +145,7 @@

{#if data.ordersAsOutput && data.ordersAsOutput.length > 0} {#each data.ordersAsOutput as order} - + {/each} {:else} None diff --git a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte index 85518e33b..d201e5ae7 100644 --- a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte +++ b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte @@ -168,7 +168,7 @@ {#each item.vault.ordersAsInput.slice(0, 3) as order} @@ -183,7 +183,7 @@ {#each item.vault.ordersAsOutput.slice(0, 3) as order} From 5fa61bfea55a9a0a27800445b1a96f04a36922d8 Mon Sep 17 00:00:00 2001 From: nino Date: Mon, 20 Jan 2025 18:20:03 +0400 Subject: [PATCH 19/74] Move inputhex to ui components --- .../src/lib/components/input/InputHex.svelte | 48 +++++++++++++++++++ packages/ui-components/src/lib/index.ts | 1 + tauri-app/src/lib/components/InputHex.svelte | 48 ------------------- .../src/lib/components/InputVaultId.svelte | 2 +- 4 files changed, 50 insertions(+), 49 deletions(-) create mode 100644 packages/ui-components/src/lib/components/input/InputHex.svelte delete mode 100644 tauri-app/src/lib/components/InputHex.svelte diff --git a/packages/ui-components/src/lib/components/input/InputHex.svelte b/packages/ui-components/src/lib/components/input/InputHex.svelte new file mode 100644 index 000000000..ec0d8a280 --- /dev/null +++ b/packages/ui-components/src/lib/components/input/InputHex.svelte @@ -0,0 +1,48 @@ + + + diff --git a/packages/ui-components/src/lib/index.ts b/packages/ui-components/src/lib/index.ts index 92a2fe076..9bfd49bfb 100644 --- a/packages/ui-components/src/lib/index.ts +++ b/packages/ui-components/src/lib/index.ts @@ -58,6 +58,7 @@ export { default as VaultBalanceChart } from './components/charts/VaultBalanceCh export { default as VaultDetail } from './components/detail/VaultDetail.svelte'; export { default as InputToken } from './components/input/InputToken.svelte'; export { default as CodeMirrorDotrain } from './components/CodeMirrorDotrain.svelte'; +export { default as InputHex } from './components/input/InputHex.svelte'; //Types export type { AppStoresInterface } from './types/appStores.ts'; diff --git a/tauri-app/src/lib/components/InputHex.svelte b/tauri-app/src/lib/components/InputHex.svelte deleted file mode 100644 index ea13114fb..000000000 --- a/tauri-app/src/lib/components/InputHex.svelte +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/tauri-app/src/lib/components/InputVaultId.svelte b/tauri-app/src/lib/components/InputVaultId.svelte index 7e3deb59c..48a30a853 100644 --- a/tauri-app/src/lib/components/InputVaultId.svelte +++ b/tauri-app/src/lib/components/InputVaultId.svelte @@ -1,6 +1,6 @@ From 88dac935cfac2b2e1059d845f54660e2961ae381 Mon Sep 17 00:00:00 2001 From: nino Date: Mon, 20 Jan 2025 20:36:44 +0400 Subject: [PATCH 20/74] Add InputHex.test.ts and fix logging error --- .../src/__tests__/InputHex.test.ts | 22 +++++++++++++++++++ .../src/lib/components/input/InputHex.svelte | 6 +++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 packages/ui-components/src/__tests__/InputHex.test.ts diff --git a/packages/ui-components/src/__tests__/InputHex.test.ts b/packages/ui-components/src/__tests__/InputHex.test.ts new file mode 100644 index 000000000..157bb8032 --- /dev/null +++ b/packages/ui-components/src/__tests__/InputHex.test.ts @@ -0,0 +1,22 @@ +import { describe, it, expect } from 'vitest'; +import { render, screen } from '@testing-library/svelte'; +import InputHex from '../lib/components/input/InputHex.svelte'; + +describe('InputHex', () => { + it('renders an input element', () => { + render(InputHex); + expect(screen.getByRole('textbox')).toBeTruthy(); + }); + + it('initializes with empty string when no value provided', () => { + render(InputHex); + const input = screen.getByRole('textbox') as HTMLInputElement; + expect(input.value).toBe(''); + }); + + it('displays hex value when bigint is provided', () => { + render(InputHex, { props: { value: 255n } }); + const input = screen.getByRole('textbox') as HTMLInputElement; + expect(input.value).toBe('0xff'); + }); +}); \ No newline at end of file diff --git a/packages/ui-components/src/lib/components/input/InputHex.svelte b/packages/ui-components/src/lib/components/input/InputHex.svelte index ec0d8a280..20fa5bb36 100644 --- a/packages/ui-components/src/lib/components/input/InputHex.svelte +++ b/packages/ui-components/src/lib/components/input/InputHex.svelte @@ -2,7 +2,7 @@ import type { InputMask } from 'imask'; import { imask } from '@imask/svelte'; import { fromHex, toHex } from 'viem'; - import { HEX_INPUT_REGEX } from '@rainlanguage/ui-components'; + import { HEX_INPUT_REGEX } from '../../utils/hex'; let valueRaw: string = ''; export let value: bigint | undefined; @@ -33,7 +33,9 @@ try { value = fromHex(valuePrefixed as `0x${string}`, 'bigint'); // eslint-disable-next-line no-empty - } catch (_e) {} + } catch (e) { + console.error(e); + } } } From 4a3503e29bd659153436ff39d7bb5e5a83ec50ee Mon Sep 17 00:00:00 2001 From: nino Date: Mon, 20 Jan 2025 20:48:37 +0400 Subject: [PATCH 21/74] Format --- .../src/__tests__/InputHex.test.ts | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/ui-components/src/__tests__/InputHex.test.ts b/packages/ui-components/src/__tests__/InputHex.test.ts index 157bb8032..5e038c069 100644 --- a/packages/ui-components/src/__tests__/InputHex.test.ts +++ b/packages/ui-components/src/__tests__/InputHex.test.ts @@ -3,20 +3,20 @@ import { render, screen } from '@testing-library/svelte'; import InputHex from '../lib/components/input/InputHex.svelte'; describe('InputHex', () => { - it('renders an input element', () => { - render(InputHex); - expect(screen.getByRole('textbox')).toBeTruthy(); - }); + it('renders an input element', () => { + render(InputHex); + expect(screen.getByRole('textbox')).toBeTruthy(); + }); - it('initializes with empty string when no value provided', () => { - render(InputHex); - const input = screen.getByRole('textbox') as HTMLInputElement; - expect(input.value).toBe(''); - }); + it('initializes with empty string when no value provided', () => { + render(InputHex); + const input = screen.getByRole('textbox') as HTMLInputElement; + expect(input.value).toBe(''); + }); - it('displays hex value when bigint is provided', () => { - render(InputHex, { props: { value: 255n } }); - const input = screen.getByRole('textbox') as HTMLInputElement; - expect(input.value).toBe('0xff'); - }); -}); \ No newline at end of file + it('displays hex value when bigint is provided', () => { + render(InputHex, { props: { value: 255n } }); + const input = screen.getByRole('textbox') as HTMLInputElement; + expect(input.value).toBe('0xff'); + }); +}); From f92951a32601c0b978c96298e1b0384debdb8aab Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 19:05:04 +0100 Subject: [PATCH 22/74] setup vitest and move walletconnect --- .../src/lib/components/WalletConnect.svelte | 14 --------- .../src/lib}/__tests__/WalletConnect.test.ts | 0 .../src/lib/components/WalletConnect.svelte | 14 +++++++++ packages/webapp/test-setup.ts | 7 +++++ packages/webapp/vite.config.ts | 29 ++++++++++++++++--- 5 files changed, 46 insertions(+), 18 deletions(-) delete mode 100644 packages/ui-components/src/lib/components/WalletConnect.svelte rename packages/{ui-components/src => webapp/src/lib}/__tests__/WalletConnect.test.ts (100%) create mode 100644 packages/webapp/src/lib/components/WalletConnect.svelte create mode 100644 packages/webapp/test-setup.ts diff --git a/packages/ui-components/src/lib/components/WalletConnect.svelte b/packages/ui-components/src/lib/components/WalletConnect.svelte deleted file mode 100644 index ca1c1b6d5..000000000 --- a/packages/ui-components/src/lib/components/WalletConnect.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/packages/ui-components/src/__tests__/WalletConnect.test.ts b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts similarity index 100% rename from packages/ui-components/src/__tests__/WalletConnect.test.ts rename to packages/webapp/src/lib/__tests__/WalletConnect.test.ts diff --git a/packages/webapp/src/lib/components/WalletConnect.svelte b/packages/webapp/src/lib/components/WalletConnect.svelte new file mode 100644 index 000000000..2cde40516 --- /dev/null +++ b/packages/webapp/src/lib/components/WalletConnect.svelte @@ -0,0 +1,14 @@ + + +{#if !$connected} + +{:else} + Connected: {$signerAddress} +{/if} diff --git a/packages/webapp/test-setup.ts b/packages/webapp/test-setup.ts new file mode 100644 index 000000000..ebd8d7ce9 --- /dev/null +++ b/packages/webapp/test-setup.ts @@ -0,0 +1,7 @@ +import '@testing-library/jest-dom/vitest'; +import { vi } from 'vitest'; + +vi.mock('codemirror-rainlang', () => ({ + RainlangLR: vi.fn() +})); + diff --git a/packages/webapp/vite.config.ts b/packages/webapp/vite.config.ts index e027651be..ef13532ad 100644 --- a/packages/webapp/vite.config.ts +++ b/packages/webapp/vite.config.ts @@ -1,12 +1,33 @@ import { defineConfig } from 'vitest/config'; import { sveltekit } from '@sveltejs/kit/vite'; +import { loadEnv } from 'vite'; -export default defineConfig({ +export default defineConfig(({ mode }) => ({ + assetsInclude: ['**/*.rain'], plugins: [sveltekit()], + resolve: { + conditions: mode === 'test' ? ['browser'] : [] + }, define: { - 'process.env': {} + 'process.env': {}, + 'import.meta.vitest': 'undefined' }, + test: { - include: ['src/**/*.{test,spec}.{js,ts}'] + // Jest like globals + includeSource: ['src/**/*.{js,ts}'], + globals: true, + environment: 'jsdom', + include: ['src/**/*.{test,spec}.ts'], + // Extend jest-dom matchers + setupFiles: ['./test-setup.ts'], + // load env vars + env: loadEnv('', process.cwd(), ''), + testTimeout: 10000, + server: { + deps: { + inline: [/@tanstack\/svelte-query/] + } + } } -}); \ No newline at end of file +})); From 1a90c01a78e72bb4ab27743a5ee6d0a1115b2f12 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 19:05:45 +0100 Subject: [PATCH 23/74] move wagmi to stores --- .../ui-components/src/lib/__mocks__/stores.ts | 4 +- packages/webapp/src/lib/chains.ts | 12 ++ packages/webapp/src/lib/stores/wagmi.ts | 198 ++++++++++++++++++ packages/webapp/src/routes/+layout.ts | 143 +++++-------- .../webapp/src/routes/deploy/+page.svelte | 6 +- 5 files changed, 271 insertions(+), 92 deletions(-) create mode 100644 packages/webapp/src/lib/chains.ts create mode 100644 packages/webapp/src/lib/stores/wagmi.ts diff --git a/packages/ui-components/src/lib/__mocks__/stores.ts b/packages/ui-components/src/lib/__mocks__/stores.ts index b7f7b19a6..e6740aecb 100644 --- a/packages/ui-components/src/lib/__mocks__/stores.ts +++ b/packages/ui-components/src/lib/__mocks__/stores.ts @@ -5,7 +5,6 @@ import settingsFixture from '../__fixtures__/settings-12-11-24.json'; import { type Config } from '@wagmi/core'; import { mockWeb3Config } from '../mockWeb3Config'; - const mockSettingsWritable = writable(settingsFixture); const mockActiveSubgraphsWritable = writable>({}); const mockAccountsWritable = writable>({}); @@ -110,7 +109,6 @@ export const mockChainIdStore = { mockSetSubscribeValue: (value: number): void => mockChainIdWritable.set(value) }; - export const mockConnectedStore = { subscribe: mockConnectedWritable.subscribe, set: mockConnectedWritable.set, @@ -121,4 +119,4 @@ export const mockWagmiConfigStore = { subscribe: mockWagmiConfigWritable.subscribe, set: mockWagmiConfigWritable.set, mockSetSubscribeValue: (value: Config): void => mockWagmiConfigWritable.set(value) -}; \ No newline at end of file +}; diff --git a/packages/webapp/src/lib/chains.ts b/packages/webapp/src/lib/chains.ts new file mode 100644 index 000000000..592ab9a11 --- /dev/null +++ b/packages/webapp/src/lib/chains.ts @@ -0,0 +1,12 @@ +import { mainnet, polygon, arbitrum, base, flare, linea, bsc } from 'wagmi/chains'; + +export const SupportedChains = { + mainnet, + polygon, + arbitrum, + base, + flare, + linea, + bsc +} as const; +export const SupportedChainsList = [mainnet, polygon, arbitrum, base, flare, linea, bsc] as const; diff --git a/packages/webapp/src/lib/stores/wagmi.ts b/packages/webapp/src/lib/stores/wagmi.ts new file mode 100644 index 000000000..ba9fece3a --- /dev/null +++ b/packages/webapp/src/lib/stores/wagmi.ts @@ -0,0 +1,198 @@ +import { writable, get } from 'svelte/store'; +import { + createConfig, + getAccount, + disconnect, + watchAccount, + reconnect, + type CreateConnectorFn, + type GetAccountReturnType, + type Config, + http +} from '@wagmi/core'; +import { type Chain } from '@wagmi/core/chains'; +import { AppKit, createAppKit } from '@reown/appkit'; +import { WagmiAdapter } from '@reown/appkit-adapter-wagmi'; +import { SupportedChainsList } from '$lib/chains'; + +export const connected = writable(false); +export const wagmiLoaded = writable(false); +export const chainId = writable(null); +export const signerAddress = writable(null); +export const configuredConnectors = writable([]); +export const loading = writable(true); +export const appKitModal = writable(); +export const wagmiConfig = writable(); + +type DefaultConfigProps = { + appName: string; + appIcon?: string | null; + appDescription?: string | null; + appUrl?: string | null; + autoConnect?: boolean; + alchemyId?: string | null; + chains?: Chain[] | null; + connectors: CreateConnectorFn[]; + projectId: string; +}; + +export const defaultConfig = ({ + appName, + appDescription = null, + appUrl = null, + appIcon = null, + autoConnect = true, + chains = [], + alchemyId, + connectors, + projectId +}: DefaultConfigProps) => { + if (connectors) configuredConnectors.set(connectors); + + const url = alchemyId ? http(`https://eth-mainnet.g.alchemy.com/v2/${alchemyId}`) : http(); + + const chainsToUse = chains ? chains.map((chain) => chain) : []; + const transports = chains + ? chains.reduce( + (acc, chain) => ({ + ...acc, + [chain.id]: url + }), + {} + ) + : {}; + + const config = createConfig({ + chains: SupportedChainsList, + transports, + connectors: get(configuredConnectors) + }); + + wagmiConfig.set(config); + + if (autoConnect) reconnect(config); + + const wagmiAdapter = new WagmiAdapter({ + projectId, + networks: chainsToUse + }); + + const metadata = { + name: appName, + description: appDescription || 'AppKit Integration', + url: appUrl || window.location.origin, + icons: appIcon ? [appIcon] : [] + }; + + const modal = createAppKit({ + adapters: [wagmiAdapter], + networks: SupportedChainsList, + metadata, + projectId, + features: { + analytics: true + } + }); + + appKitModal.set(modal); + wagmiLoaded.set(true); + + return { init }; +}; + +export const init = async () => { + try { + setupListeners(); + const account = await waitForConnection(); + if (account.address) { + const chain = get(wagmiConfig).chains.find((chain) => chain.id === account.chainId); + if (chain) chainId.set(chain.id); + connected.set(true); + signerAddress.set(account.address); + } + loading.set(false); + } catch (err) { + loading.set(false); + } +}; + +const setupListeners = () => { + watchAccount(get(wagmiConfig), { + onChange(data) { + handleAccountChange(data); + } + }); +}; + +const handleAccountChange = (data: GetAccountReturnType) => { + // Wrap the original async logic in an immediately invoked function expression (IIFE) + return (async () => { + if (get(wagmiLoaded) && data.address) { + const chain = get(wagmiConfig).chains.find((chain) => chain.id === data.chainId); + + if (chain) chainId.set(chain.id); + connected.set(true); + loading.set(false); + signerAddress.set(data.address); + } else if (data.isDisconnected && get(connected)) { + loading.set(false); + await disconnectWagmi(); // Handle async operation inside + } + })(); +}; + +export const WC = async () => { + try { + get(appKitModal).open(); + await waitForAccount(); + + return { success: true }; + } catch (err) { + return { success: false }; + } +}; + +export const disconnectWagmi = async () => { + await disconnect(get(wagmiConfig)); + connected.set(false); + chainId.set(null); + signerAddress.set(null); + loading.set(false); +}; + +const waitForAccount = () => { + return new Promise((resolve, reject) => { + const unsub1 = get(appKitModal).subscribeEvents((newState) => { + if (newState.data.event === 'MODAL_CLOSE') { + reject('modal closed'); + unsub1(); + } + }); + const unsub = watchAccount(get(wagmiConfig), { + onChange(data) { + if (data?.isConnected) { + // Gottem, resolve the promise w/user's selected & connected Acc. + resolve(data); + unsub(); + } else { + console.warn('🔃 - No Account Connected Yet...'); + } + } + }); + }); +}; + +const waitForConnection = (): Promise => + new Promise((resolve, reject) => { + const attemptToGetAccount = () => { + const account = getAccount(get(wagmiConfig)); + if (account.isDisconnected) reject('account is disconnected'); + if (account.isConnecting) { + setTimeout(attemptToGetAccount, 250); + } else { + resolve(account); + } + }; + + attemptToGetAccount(); + }); \ No newline at end of file diff --git a/packages/webapp/src/routes/+layout.ts b/packages/webapp/src/routes/+layout.ts index 0207a6ece..374c99311 100644 --- a/packages/webapp/src/routes/+layout.ts +++ b/packages/webapp/src/routes/+layout.ts @@ -1,117 +1,84 @@ import type { - AppStoresInterface, - ConfigSource, - OrderbookConfigSource, - OrderbookRef + AppStoresInterface, + ConfigSource, + OrderbookConfigSource, + OrderbookRef } from '@rainlanguage/ui-components'; import { writable, derived } from 'svelte/store'; import pkg from 'lodash'; -import { AppKit, createAppKit } from '@reown/appkit'; -import { flare } from '@reown/appkit/networks'; -import { WagmiAdapter } from '@reown/appkit-adapter-wagmi'; -import { browser } from '$app/environment'; + const { pickBy } = pkg; export interface LayoutData { - stores: AppStoresInterface; + stores: AppStoresInterface; } - export const load = async () => { - let appKitModal: AppKit | undefined; - // Initialize Reown AppKit (only in browser) - if (browser) { - const projectId = 'a68d9b4020ecec5fd5d32dcd4008e7f4'; // Replace with your actual project ID - const networks = [flare]; - - const wagmiAdapter = new WagmiAdapter({ - projectId, - networks - }); - - const metadata = { - name: 'Your App Name', - description: 'Your App Description', - url: 'http://localhost:5173', // Update with your domain - icons: [] // Update with your icon - }; - const modal = createAppKit({ - adapters: [wagmiAdapter], - networks: [flare], - metadata, - projectId, - features: { - analytics: true - } - }); - // Export the modal instance if needed elsewhere - appKitModal = modal; - } const response = await fetch( 'https://raw.githubusercontent.com/rainlanguage/rain.strategies/refs/heads/main/settings.json' ); const settingsJson = await response.json(); const settings = writable(settingsJson); - const activeNetworkRef = writable(''); - const activeOrderbookRef = writable(''); + const activeNetworkRef = writable(''); + const activeOrderbookRef = writable(''); const activeOrderbook = derived( [settings, activeOrderbookRef], ([$settings, $activeOrderbookRef]) => $settings?.orderbooks !== undefined && $activeOrderbookRef !== undefined - ? $settings.orderbooks[$activeOrderbookRef] - : undefined + ? $settings.orderbooks[$activeOrderbookRef] + : undefined ); + const activeNetworkOrderbooks = derived( + [settings, activeNetworkRef], + ([$settings, $activeNetworkRef]) => + $settings?.orderbooks + ? (pickBy( + $settings.orderbooks, + (orderbook) => orderbook.network === $activeNetworkRef + ) as Record) + : ({} as Record) + ); + + const accounts = derived(settings, ($settings) => $settings?.accounts); + const activeAccountsItems = writable>({}); - const activeNetworkOrderbooks = derived( - [settings, activeNetworkRef], - ([$settings, $activeNetworkRef]) => - $settings?.orderbooks - ? (pickBy( - $settings.orderbooks, - (orderbook) => orderbook.network === $activeNetworkRef - ) as Record) - : ({} as Record) - ); + const subgraphUrl = derived([settings, activeOrderbook], ([$settings, $activeOrderbook]) => + $settings?.subgraphs !== undefined && $activeOrderbook?.subgraph !== undefined + ? $settings.subgraphs[$activeOrderbook.subgraph] + : undefined + ); + const activeAccounts = derived( + [accounts, activeAccountsItems], + ([$accounts, $activeAccountsItems]) => + Object.keys($activeAccountsItems).length === 0 + ? {} + : Object.fromEntries( + Object.entries($accounts || {}).filter(([key]) => key in $activeAccountsItems) + ) + ); - const accounts = derived(settings, ($settings) => $settings?.accounts); - const activeAccountsItems = writable>({}); - const subgraphUrl = derived([settings, activeOrderbook], ([$settings, $activeOrderbook]) => - $settings?.subgraphs !== undefined && $activeOrderbook?.subgraph !== undefined - ? $settings.subgraphs[$activeOrderbook.subgraph] - : undefined -); - const activeAccounts = derived( - [accounts, activeAccountsItems], - ([$accounts, $activeAccountsItems]) => - Object.keys($activeAccountsItems).length === 0 - ? {} - : Object.fromEntries( - Object.entries($accounts || {}).filter(([key]) => key in $activeAccountsItems) - ) - ); - return { - stores: { - settings, - activeSubgraphs: writable>({}), - accounts, - activeAccountsItems, - activeAccounts, - activeOrderStatus: writable(undefined), - orderHash: writable(''), - hideZeroBalanceVaults: writable(false), - activeNetworkRef, - activeOrderbookRef, - activeOrderbook, - subgraphUrl, - activeNetworkOrderbooks, - }, - appKitModal: browser ? writable(appKitModal) : writable(null) - }; + return { + stores: { + settings, + activeSubgraphs: writable>({}), + accounts, + activeAccountsItems, + activeAccounts, + activeOrderStatus: writable(undefined), + orderHash: writable(''), + hideZeroBalanceVaults: writable(false), + activeNetworkRef, + activeOrderbookRef, + activeOrderbook, + subgraphUrl, + activeNetworkOrderbooks + }, + }; }; -export const ssr = false; \ No newline at end of file +export const ssr = false; diff --git a/packages/webapp/src/routes/deploy/+page.svelte b/packages/webapp/src/routes/deploy/+page.svelte index d6104a5d9..6dddc7b03 100644 --- a/packages/webapp/src/routes/deploy/+page.svelte +++ b/packages/webapp/src/routes/deploy/+page.svelte @@ -1,7 +1,11 @@

- + + +
From c429af06abf29aa5f25d4d1b7387c0ad84f14cfe Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 19:06:21 +0100 Subject: [PATCH 24/74] add to deploy --- .../deployment/DeploymentSteps.svelte | 57 ++++++++++++++++++- .../webapp/src/lib/components/Sidebar.svelte | 3 +- packages/webapp/src/routes/+layout.svelte | 29 ++++++++++ 3 files changed, 87 insertions(+), 2 deletions(-) diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index 4b48e06ed..ae67658f2 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -19,6 +19,8 @@ import { Button, Input, Spinner } from 'flowbite-svelte'; import { createWalletClient, custom, type Chain } from 'viem'; import { base, flare, arbitrum, polygon, bsc, mainnet, linea } from 'viem/chains'; + import { getAccount, sendTransaction, type Config } from '@wagmi/core'; + import { type Writable } from 'svelte/store'; enum DeploymentStepErrors { NO_GUI = 'Error loading GUI', @@ -57,6 +59,13 @@ let guiDetails: GuiDetails; let inputVaultIds: string[] = []; let outputVaultIds: string[] = []; + let addOrderError: string | null = null; + let addOrderErrorDetails: string | null = null; + + export let wagmiConfig: Writable | null = null; + export let wagmiConnected: Writable | null = null; + + $: console.log($wagmiConnected); async function loadStrategyFromUrl() { isLoading = true; @@ -205,6 +214,38 @@ return chain; } + async function handleAddOrderWagmi() { + try { + if (!gui || !$wagmiConfig) return; + + console.log($wagmiConfig); + const { address } = getAccount($wagmiConfig); + + console.log(address); + + const approvals: ApprovalCalldataResult = await gui.generateApprovalCalldatas(address); + console.log(approvals); + + for (const approval of approvals) { + await sendTransaction($wagmiConfig, { + to: approval.token as `0x${string}`, + data: approval.calldata as `0x${string}` + }); + } + + const calldata: DepositAndAddOrderCalldataResult = + await gui.generateDepositAndAddOrderCalldatas(); + await sendTransaction($wagmiConfig, { + // @ts-expect-error orderbook is not typed + to: gui.getCurrentDeployment().deployment.order.orderbook.address as `0x${string}`, + data: calldata as `0x${string}` + }); + } catch (e) { + error = DeploymentStepErrors.ADD_ORDER_FAILED; + errorDetails = e instanceof Error ? e.message : 'Unknown error'; + } + } + async function handleAddOrder() { try { if (!gui) return; @@ -369,7 +410,21 @@ {/if}
{/if} - + {#if $wagmiConfig} + {#if $wagmiConnected} + + {:else} + + {/if} + {:else} + + {/if} + {#if addOrderError} +

{addOrderError}

+ {/if} + {#if addOrderErrorDetails} +

{addOrderErrorDetails}

+ {/if} {/if}
{/if} diff --git a/packages/webapp/src/lib/components/Sidebar.svelte b/packages/webapp/src/lib/components/Sidebar.svelte index ae6ff4ddc..e9e459719 100644 --- a/packages/webapp/src/lib/components/Sidebar.svelte +++ b/packages/webapp/src/lib/components/Sidebar.svelte @@ -15,6 +15,7 @@ logoDark, logoLight } from '@rainlanguage/ui-components'; + import WalletConnect from './WalletConnect.svelte'; export let colorTheme; @@ -56,7 +57,7 @@ - + { + const erckit = defaultConfig({ + chains: SupportedChainsList, + projectId: '10e64d97c18d5dbeecfb11d7834e2682' + }); + await erckit.init(); + }; + + $: console.log('wagmiconfig', $wagmiConfig); + + $: if (browser && window.navigator) { + initWallet(); + } From 60e072a1cc7fe171f33fe808d29512a1242d6f41 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 19:17:51 +0100 Subject: [PATCH 25/74] style errors --- .../deployment/DeploymentSteps.svelte | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index ae67658f2..f51b3609e 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -241,8 +241,8 @@ data: calldata as `0x${string}` }); } catch (e) { - error = DeploymentStepErrors.ADD_ORDER_FAILED; - errorDetails = e instanceof Error ? e.message : 'Unknown error'; + addOrderError = DeploymentStepErrors.ADD_ORDER_FAILED; + addOrderErrorDetails = e instanceof Error ? e.message : 'Unknown error'; } } @@ -410,21 +410,24 @@ {/if}
{/if} - {#if $wagmiConfig} - {#if $wagmiConnected} - +
+ {#if $wagmiConfig} + {#if $wagmiConnected} + + {:else} + + {/if} {:else} - + {/if} - {:else} - - {/if} - {#if addOrderError} -

{addOrderError}

- {/if} - {#if addOrderErrorDetails} -

{addOrderErrorDetails}

- {/if} +
+ {#if addOrderError} +

{addOrderError}

+ {/if} + {#if addOrderErrorDetails} +

{addOrderErrorDetails}

+ {/if} +
{/if}
{/if} From 707851b1a80210776cb0cee769ae93b138c1d248 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 19:30:31 +0100 Subject: [PATCH 26/74] add --- .../deployment/DeploymentSteps.svelte | 21 +++++---------- packages/webapp/src/lib/chains.ts | 2 +- packages/webapp/src/lib/stores/wagmi.ts | 13 ++++------ packages/webapp/src/routes/+layout.svelte | 26 +++++++------------ 4 files changed, 21 insertions(+), 41 deletions(-) diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index f51b3609e..0584a77c5 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -65,8 +65,6 @@ export let wagmiConfig: Writable | null = null; export let wagmiConnected: Writable | null = null; - $: console.log($wagmiConnected); - async function loadStrategyFromUrl() { isLoading = true; error = null; @@ -217,22 +215,14 @@ async function handleAddOrderWagmi() { try { if (!gui || !$wagmiConfig) return; - - console.log($wagmiConfig); const { address } = getAccount($wagmiConfig); - - console.log(address); - const approvals: ApprovalCalldataResult = await gui.generateApprovalCalldatas(address); - console.log(approvals); - for (const approval of approvals) { await sendTransaction($wagmiConfig, { to: approval.token as `0x${string}`, data: approval.calldata as `0x${string}` }); } - const calldata: DepositAndAddOrderCalldataResult = await gui.generateDepositAndAddOrderCalldatas(); await sendTransaction($wagmiConfig, { @@ -279,8 +269,8 @@ data: calldata as `0x${string}` }); } catch (e) { - error = DeploymentStepErrors.ADD_ORDER_FAILED; - errorDetails = e instanceof Error ? e.message : 'Unknown error'; + addOrderError = DeploymentStepErrors.ADD_ORDER_FAILED; + addOrderErrorDetails = e instanceof Error ? e.message : 'Unknown error'; } } @@ -424,9 +414,10 @@ {#if addOrderError}

{addOrderError}

{/if} - {#if addOrderErrorDetails} -

{addOrderErrorDetails}

- {/if} + {#if addOrderErrorDetails} +

{addOrderErrorDetails}

+ {/if} +
{/if}
diff --git a/packages/webapp/src/lib/chains.ts b/packages/webapp/src/lib/chains.ts index 592ab9a11..08c8cf174 100644 --- a/packages/webapp/src/lib/chains.ts +++ b/packages/webapp/src/lib/chains.ts @@ -9,4 +9,4 @@ export const SupportedChains = { linea, bsc } as const; -export const SupportedChainsList = [mainnet, polygon, arbitrum, base, flare, linea, bsc] as const; +export const supportedChainsList = [mainnet, polygon, arbitrum, base, flare, linea, bsc] as const; diff --git a/packages/webapp/src/lib/stores/wagmi.ts b/packages/webapp/src/lib/stores/wagmi.ts index ba9fece3a..120600c52 100644 --- a/packages/webapp/src/lib/stores/wagmi.ts +++ b/packages/webapp/src/lib/stores/wagmi.ts @@ -13,7 +13,7 @@ import { import { type Chain } from '@wagmi/core/chains'; import { AppKit, createAppKit } from '@reown/appkit'; import { WagmiAdapter } from '@reown/appkit-adapter-wagmi'; -import { SupportedChainsList } from '$lib/chains'; +import { supportedChainsList } from '$lib/chains'; export const connected = writable(false); export const wagmiLoaded = writable(false); @@ -61,9 +61,8 @@ export const defaultConfig = ({ {} ) : {}; - const config = createConfig({ - chains: SupportedChainsList, + chains: [supportedChainsList[0], ...supportedChainsList.slice(1)] as [Chain, ...Chain[]], transports, connectors: get(configuredConnectors) }); @@ -86,7 +85,7 @@ export const defaultConfig = ({ const modal = createAppKit({ adapters: [wagmiAdapter], - networks: SupportedChainsList, + networks: [supportedChainsList[0], ...supportedChainsList.slice(1)] as [Chain, ...Chain[]], metadata, projectId, features: { @@ -111,7 +110,7 @@ export const init = async () => { signerAddress.set(account.address); } loading.set(false); - } catch (err) { + } catch { loading.set(false); } }; @@ -147,7 +146,7 @@ export const WC = async () => { await waitForAccount(); return { success: true }; - } catch (err) { + } catch { return { success: false }; } }; @@ -174,8 +173,6 @@ const waitForAccount = () => { // Gottem, resolve the promise w/user's selected & connected Acc. resolve(data); unsub(); - } else { - console.warn('🔃 - No Account Connected Yet...'); } } }); diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index 132913fe2..c66b5e8c6 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -4,19 +4,11 @@ import Sidebar from '$lib/components/Sidebar.svelte'; import { colorTheme } from '$lib/darkMode'; import { browser } from '$app/environment'; - import { SupportedChainsList } from '$lib/chains'; - import { - connected, - disconnectWagmi, - signerAddress, - wagmiConfig, - configuredConnectors, - loading, - chainId, - appKitModal, - defaultConfig, - wagmiLoaded - } from '$lib/stores/wagmi'; + import { supportedChainsList } from '$lib/chains'; + import { defaultConfig } from '$lib/stores/wagmi'; + import { PUBLIC_WALLETCONNECT_ID } from '$env/static/public'; + import { injected } from '@wagmi/connectors'; + import { type Chain } from '@wagmi/core/chains'; const queryClient = new QueryClient({ defaultOptions: { @@ -28,14 +20,14 @@ const initWallet = async () => { const erckit = defaultConfig({ - chains: SupportedChainsList, - projectId: '10e64d97c18d5dbeecfb11d7834e2682' + appName: 'Rain Language', + connectors: [injected()], + chains: supportedChainsList as unknown as Chain[], + projectId: PUBLIC_WALLETCONNECT_ID }); await erckit.init(); }; - $: console.log('wagmiconfig', $wagmiConfig); - $: if (browser && window.navigator) { initWallet(); } From 92484cfb8b7863a3537fb17f7dc4030c8d15c07a Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 19:48:28 +0100 Subject: [PATCH 27/74] add stores --- .../src/lib/__mocks__/mockWeb3Config.ts | 16 +++++++++ packages/webapp/src/lib/__mocks__/stores.ts | 33 +++++++++++++++++++ .../src/lib/__tests__/WalletConnect.test.ts | 4 +-- packages/webapp/test-setup.mjs | 18 ++++++++++ packages/webapp/test-setup.ts | 7 ---- packages/webapp/tsconfig.json | 15 ++++----- packages/webapp/vite.config.ts | 13 ++++++-- 7 files changed, 87 insertions(+), 19 deletions(-) create mode 100644 packages/webapp/src/lib/__mocks__/mockWeb3Config.ts create mode 100644 packages/webapp/src/lib/__mocks__/stores.ts create mode 100644 packages/webapp/test-setup.mjs delete mode 100644 packages/webapp/test-setup.ts diff --git a/packages/webapp/src/lib/__mocks__/mockWeb3Config.ts b/packages/webapp/src/lib/__mocks__/mockWeb3Config.ts new file mode 100644 index 000000000..61062fd4d --- /dev/null +++ b/packages/webapp/src/lib/__mocks__/mockWeb3Config.ts @@ -0,0 +1,16 @@ +import { createConfig, http, fallback, type Config } from '@wagmi/core'; +import { mock } from '@wagmi/connectors'; +import { polygonAmoy } from '@wagmi/core/chains'; + +export const mockWeb3Config: Config = createConfig({ + multiInjectedProviderDiscovery: true, + chains: [polygonAmoy], + connectors: [ + mock({ + accounts: ['0xf08bcbce72f62c95dcb7c07dcb5ed26acfcfbc11'] + }) + ], + transports: { + [polygonAmoy.id]: fallback([http(), http('https://rpc-amoy.polygon.technology')]) + } +}); diff --git a/packages/webapp/src/lib/__mocks__/stores.ts b/packages/webapp/src/lib/__mocks__/stores.ts new file mode 100644 index 000000000..8145d4dfd --- /dev/null +++ b/packages/webapp/src/lib/__mocks__/stores.ts @@ -0,0 +1,33 @@ +import { writable } from 'svelte/store'; +import { type Config } from '@wagmi/core'; +import { mockWeb3Config } from './mockWeb3Config'; + +const mockSignerAddressWritable = writable(''); +const mockChainIdWritable = writable(0); +const mockConnectedWritable = writable(false); +const mockWagmiConfigWritable = writable(mockWeb3Config); + + +export const mockSignerAddressStore = { + subscribe: mockSignerAddressWritable.subscribe, + set: mockSignerAddressWritable.set, + mockSetSubscribeValue: (value: string): void => mockSignerAddressWritable.set(value) +}; + +export const mockChainIdStore = { + subscribe: mockChainIdWritable.subscribe, + set: mockChainIdWritable.set, + mockSetSubscribeValue: (value: number): void => mockChainIdWritable.set(value) +}; + +export const mockConnectedStore = { + subscribe: mockConnectedWritable.subscribe, + set: mockConnectedWritable.set, + mockSetSubscribeValue: (value: boolean): void => mockConnectedWritable.set(value) +}; + +export const mockWagmiConfigStore = { + subscribe: mockWagmiConfigWritable.subscribe, + set: mockWagmiConfigWritable.set, + mockSetSubscribeValue: (value: Config): void => mockWagmiConfigWritable.set(value) +}; diff --git a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts index e754459aa..851990bb4 100644 --- a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts +++ b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts @@ -1,9 +1,9 @@ import { render, screen } from '@testing-library/svelte'; -import WalletConnect from '../lib/components/WalletConnect.svelte'; +import WalletConnect from '../components/WalletConnect.svelte'; import { describe, it, vi, beforeEach, expect } from 'vitest'; const { mockSignerAddressStore, mockConnectedStore } = await vi.hoisted( - () => import('../lib/__mocks__/stores') + () => import('../__mocks__/stores') ); describe('WalletConnect component', () => { diff --git a/packages/webapp/test-setup.mjs b/packages/webapp/test-setup.mjs new file mode 100644 index 000000000..5746a6253 --- /dev/null +++ b/packages/webapp/test-setup.mjs @@ -0,0 +1,18 @@ +import '@testing-library/jest-dom/vitest'; +import { vi } from 'vitest'; + +vi.mock('codemirror-rainlang', () => ({ + RainlangLR: vi.fn() +})); + +vi.mock('@walletconnect/relay-auth', () => ({ + utils: vi.fn() +})); + +vi.mock('@walletconnect', () => ({ + default: vi.fn() +})); + +vi.mock('uint8arrays/concat', () => ({ + concat: vi.fn() +})); diff --git a/packages/webapp/test-setup.ts b/packages/webapp/test-setup.ts deleted file mode 100644 index ebd8d7ce9..000000000 --- a/packages/webapp/test-setup.ts +++ /dev/null @@ -1,7 +0,0 @@ -import '@testing-library/jest-dom/vitest'; -import { vi } from 'vitest'; - -vi.mock('codemirror-rainlang', () => ({ - RainlangLR: vi.fn() -})); - diff --git a/packages/webapp/tsconfig.json b/packages/webapp/tsconfig.json index 0b2d8865f..a988e6702 100644 --- a/packages/webapp/tsconfig.json +++ b/packages/webapp/tsconfig.json @@ -1,6 +1,8 @@ { "extends": "./.svelte-kit/tsconfig.json", "compilerOptions": { + "allowImportingTsExtensions": true, + "allowArbitraryExtensions": true, "allowJs": true, "checkJs": true, "esModuleInterop": true, @@ -9,11 +11,8 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, - "moduleResolution": "bundler" - } - // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias - // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in -} + "module": "es2022", + "moduleResolution": "bundler", + "types": ["vitest/globals", "@testing-library/jest-dom", "vitest/importMeta", "codemirror-rainlang", "@rainlanguage/dotrain"] + }, +} \ No newline at end of file diff --git a/packages/webapp/vite.config.ts b/packages/webapp/vite.config.ts index ef13532ad..0a9174653 100644 --- a/packages/webapp/vite.config.ts +++ b/packages/webapp/vite.config.ts @@ -20,14 +20,23 @@ export default defineConfig(({ mode }) => ({ environment: 'jsdom', include: ['src/**/*.{test,spec}.ts'], // Extend jest-dom matchers - setupFiles: ['./test-setup.ts'], + setupFiles: ['./test-setup.mjs'], // load env vars env: loadEnv('', process.cwd(), ''), testTimeout: 10000, server: { deps: { - inline: [/@tanstack\/svelte-query/] + inline: [ + /@tanstack\/svelte-query/, + /@walletconnect/, + /uint8arrays/, + /@web3modal/, + /@ethersproject/ + ] } + }, + deps: { + interopDefault: true } } })); From b3eb1a798ea5744e1d8ac41f12a5a9805fce3ade Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 19:53:42 +0100 Subject: [PATCH 28/74] fix path --- packages/ui-components/src/lib/__mocks__/stores.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-components/src/lib/__mocks__/stores.ts b/packages/ui-components/src/lib/__mocks__/stores.ts index e6740aecb..fa1b9b39c 100644 --- a/packages/ui-components/src/lib/__mocks__/stores.ts +++ b/packages/ui-components/src/lib/__mocks__/stores.ts @@ -3,7 +3,7 @@ import { writable } from 'svelte/store'; import settingsFixture from '../__fixtures__/settings-12-11-24.json'; import { type Config } from '@wagmi/core'; -import { mockWeb3Config } from '../mockWeb3Config'; +import { mockWeb3Config } from './mockWeb3Config'; const mockSettingsWritable = writable(settingsFixture); const mockActiveSubgraphsWritable = writable>({}); From d43ff2fb9ce699b7683d6d8d7cb0f5d62747aa96 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 20:02:34 +0100 Subject: [PATCH 29/74] mock stuff --- packages/webapp/src/lib/__mocks__/stores.ts | 8 ++++++++ .../webapp/src/lib/__tests__/WalletConnect.test.ts | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/webapp/src/lib/__mocks__/stores.ts b/packages/webapp/src/lib/__mocks__/stores.ts index 8145d4dfd..929792bd8 100644 --- a/packages/webapp/src/lib/__mocks__/stores.ts +++ b/packages/webapp/src/lib/__mocks__/stores.ts @@ -1,11 +1,13 @@ import { writable } from 'svelte/store'; import { type Config } from '@wagmi/core'; import { mockWeb3Config } from './mockWeb3Config'; +import type { AppKit } from '@reown/appkit'; const mockSignerAddressWritable = writable(''); const mockChainIdWritable = writable(0); const mockConnectedWritable = writable(false); const mockWagmiConfigWritable = writable(mockWeb3Config); +const mockAppKitModalWritable = writable(null); export const mockSignerAddressStore = { @@ -31,3 +33,9 @@ export const mockWagmiConfigStore = { set: mockWagmiConfigWritable.set, mockSetSubscribeValue: (value: Config): void => mockWagmiConfigWritable.set(value) }; + +export const mockAppKitModalStore = { + subscribe: mockAppKitModalWritable.subscribe, + set: mockAppKitModalWritable.set, + mockSetSubscribeValue: (value: Config): void => mockAppKitModalWritable.set(value) +}; diff --git a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts index 851990bb4..6cf2eb7ed 100644 --- a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts +++ b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts @@ -2,10 +2,20 @@ import { render, screen } from '@testing-library/svelte'; import WalletConnect from '../components/WalletConnect.svelte'; import { describe, it, vi, beforeEach, expect } from 'vitest'; -const { mockSignerAddressStore, mockConnectedStore } = await vi.hoisted( +const { mockSignerAddressStore, mockConnectedStore, mockAppKitModalStore } = await vi.hoisted( () => import('../__mocks__/stores') ); +vi.mock('$lib/stores/wagmi', async (importOriginal) => { + const original = (await importOriginal()) as object; + return { + ...original, + appKitModal: mockAppKitModalStore, + connected: mockConnectedStore + }; +}); + + describe('WalletConnect component', () => { beforeEach(() => { vi.clearAllMocks(); From da1820ccccad5bc516b137dc2f4ae266f1835b07 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 20:08:20 +0100 Subject: [PATCH 30/74] error test --- packages/webapp/src/lib/__mocks__/stores.ts | 3 +-- packages/webapp/src/lib/__tests__/WalletConnect.test.ts | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/webapp/src/lib/__mocks__/stores.ts b/packages/webapp/src/lib/__mocks__/stores.ts index 929792bd8..16f1815f4 100644 --- a/packages/webapp/src/lib/__mocks__/stores.ts +++ b/packages/webapp/src/lib/__mocks__/stores.ts @@ -9,7 +9,6 @@ const mockConnectedWritable = writable(false); const mockWagmiConfigWritable = writable(mockWeb3Config); const mockAppKitModalWritable = writable(null); - export const mockSignerAddressStore = { subscribe: mockSignerAddressWritable.subscribe, set: mockSignerAddressWritable.set, @@ -37,5 +36,5 @@ export const mockWagmiConfigStore = { export const mockAppKitModalStore = { subscribe: mockAppKitModalWritable.subscribe, set: mockAppKitModalWritable.set, - mockSetSubscribeValue: (value: Config): void => mockAppKitModalWritable.set(value) + mockSetSubscribeValue: (value: AppKit): void => mockAppKitModalWritable.set(value) }; diff --git a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts index 6cf2eb7ed..bf2635fcc 100644 --- a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts +++ b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts @@ -25,6 +25,7 @@ describe('WalletConnect component', () => { it('displays "Connect" with red icon when wallet is not connected or wrong network', () => { mockSignerAddressStore.mockSetSubscribeValue(''); mockConnectedStore.mockSetSubscribeValue(false); + mockAppKitModalStore.mockSetSubscribeValue({ open: vi.fn() }); render(WalletConnect); const connectButton = screen.getByTestId('wallet-connect'); @@ -35,7 +36,7 @@ describe('WalletConnect component', () => { it('displays "Connected" with green icon when wallet is connected', () => { mockSignerAddressStore.mockSetSubscribeValue('0x123'); mockConnectedStore.mockSetSubscribeValue(true); - + mockAppKitModalStore.mockSetSubscribeValue({ open: vi.fn() }); render(WalletConnect); const connectButton = screen.getByTestId('wallet-connect'); From 5a0e0e0c298400283032ade99682f58940d83e95 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 20:22:10 +0100 Subject: [PATCH 31/74] remove unused components --- .../components/DropdownActiveNetwork.svelte | 31 ------------ .../components/DropdownActiveOrderbook.svelte | 35 ------------- .../lib/components/InputBlockNumber.svelte | 50 ------------------- .../lib/components/PageContentDetail.svelte | 31 ------------ .../src/lib/components/SkeletonRow.svelte | 5 -- .../charts/LightweightChartHistogram.svelte | 10 ---- .../charts/LightweightChartLine.svelte | 10 ---- .../lib/components/detail/OrderDetail.svelte | 0 8 files changed, 172 deletions(-) delete mode 100644 tauri-app/src/lib/components/DropdownActiveNetwork.svelte delete mode 100644 tauri-app/src/lib/components/DropdownActiveOrderbook.svelte delete mode 100644 tauri-app/src/lib/components/InputBlockNumber.svelte delete mode 100644 tauri-app/src/lib/components/PageContentDetail.svelte delete mode 100644 tauri-app/src/lib/components/SkeletonRow.svelte delete mode 100644 tauri-app/src/lib/components/charts/LightweightChartHistogram.svelte delete mode 100644 tauri-app/src/lib/components/charts/LightweightChartLine.svelte delete mode 100644 tauri-app/src/lib/components/detail/OrderDetail.svelte diff --git a/tauri-app/src/lib/components/DropdownActiveNetwork.svelte b/tauri-app/src/lib/components/DropdownActiveNetwork.svelte deleted file mode 100644 index df7a59b9c..000000000 --- a/tauri-app/src/lib/components/DropdownActiveNetwork.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - -{#if !isEmpty($settings?.networks)} - - - {#if selectedRef === undefined} - Select a network - {:else if selectedOption?.label} - {selectedOption.label} - {:else} - {selectedRef} - {/if} - - - -
-
{option.label ? option.label : ref}
- {option.rpc} -
-
-
-{/if} diff --git a/tauri-app/src/lib/components/DropdownActiveOrderbook.svelte b/tauri-app/src/lib/components/DropdownActiveOrderbook.svelte deleted file mode 100644 index 3cf66909e..000000000 --- a/tauri-app/src/lib/components/DropdownActiveOrderbook.svelte +++ /dev/null @@ -1,35 +0,0 @@ - - - -{#if isEmpty($activeNetworkOrderbooks)} - -{:else} - - - {#if selectedRef === undefined} - Select an orderbook - {:else if selectedOption?.label} - {selectedOption.label} - {:else} - {selectedRef} - {/if} - - - -
-
{option.label ? option.label : ref}
- {option.address} -
-
-
-{/if} diff --git a/tauri-app/src/lib/components/InputBlockNumber.svelte b/tauri-app/src/lib/components/InputBlockNumber.svelte deleted file mode 100644 index 1688f8e6e..000000000 --- a/tauri-app/src/lib/components/InputBlockNumber.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - -
-
- -
- -
-
-
diff --git a/tauri-app/src/lib/components/PageContentDetail.svelte b/tauri-app/src/lib/components/PageContentDetail.svelte deleted file mode 100644 index 407683e9d..000000000 --- a/tauri-app/src/lib/components/PageContentDetail.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - -{#if !isEmpty} -
- -
-
-
- -
-
- -
-
-
- -
-{:else if isFetching} -
- -
-{:else} -
{emptyMessage}
-{/if} diff --git a/tauri-app/src/lib/components/SkeletonRow.svelte b/tauri-app/src/lib/components/SkeletonRow.svelte deleted file mode 100644 index 49e5068a6..000000000 --- a/tauri-app/src/lib/components/SkeletonRow.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -
diff --git a/tauri-app/src/lib/components/charts/LightweightChartHistogram.svelte b/tauri-app/src/lib/components/charts/LightweightChartHistogram.svelte deleted file mode 100644 index 96e21b07f..000000000 --- a/tauri-app/src/lib/components/charts/LightweightChartHistogram.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - chart.addHistogramSeries()} - {...$$props} - {lightweightChartsTheme} -/> diff --git a/tauri-app/src/lib/components/charts/LightweightChartLine.svelte b/tauri-app/src/lib/components/charts/LightweightChartLine.svelte deleted file mode 100644 index 759ad08ff..000000000 --- a/tauri-app/src/lib/components/charts/LightweightChartLine.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - chart.addLineSeries({ lineWidth: 1 })} - {...$$props} - {lightweightChartsTheme} -/> diff --git a/tauri-app/src/lib/components/detail/OrderDetail.svelte b/tauri-app/src/lib/components/detail/OrderDetail.svelte deleted file mode 100644 index e69de29bb..000000000 From 85582c2336eae5588d131c9c8c86232660b693f4 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 22:10:14 +0100 Subject: [PATCH 32/74] add tests --- .../src/lib/__tests__/WalletConnect.test.ts | 7 +- .../src/lib/components/WalletConnect.svelte | 4 +- packages/webapp/src/lib/stores/wagmi.test.ts | 116 ++++++++++++++++++ packages/webapp/test-setup.mjs | 18 --- packages/webapp/test-setup.ts | 6 + packages/webapp/vite.config.ts | 8 +- 6 files changed, 128 insertions(+), 31 deletions(-) create mode 100644 packages/webapp/src/lib/stores/wagmi.test.ts delete mode 100644 packages/webapp/test-setup.mjs create mode 100644 packages/webapp/test-setup.ts diff --git a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts index bf2635fcc..2848468fa 100644 --- a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts +++ b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts @@ -25,22 +25,19 @@ describe('WalletConnect component', () => { it('displays "Connect" with red icon when wallet is not connected or wrong network', () => { mockSignerAddressStore.mockSetSubscribeValue(''); mockConnectedStore.mockSetSubscribeValue(false); - mockAppKitModalStore.mockSetSubscribeValue({ open: vi.fn() }); + render(WalletConnect); const connectButton = screen.getByTestId('wallet-connect'); expect(connectButton).toBeInTheDocument(); - expect(screen.getByTestId('not-connected')).toBeInTheDocument(); }); it('displays "Connected" with green icon when wallet is connected', () => { mockSignerAddressStore.mockSetSubscribeValue('0x123'); mockConnectedStore.mockSetSubscribeValue(true); - mockAppKitModalStore.mockSetSubscribeValue({ open: vi.fn() }); + render(WalletConnect); - const connectButton = screen.getByTestId('wallet-connect'); - expect(connectButton).toBeInTheDocument(); expect(screen.getByTestId('connected')).toBeInTheDocument(); }); }); diff --git a/packages/webapp/src/lib/components/WalletConnect.svelte b/packages/webapp/src/lib/components/WalletConnect.svelte index 2cde40516..98a25dd40 100644 --- a/packages/webapp/src/lib/components/WalletConnect.svelte +++ b/packages/webapp/src/lib/components/WalletConnect.svelte @@ -8,7 +8,7 @@ {#if !$connected} - + {:else} - Connected: {$signerAddress} + Connected: {$signerAddress} {/if} diff --git a/packages/webapp/src/lib/stores/wagmi.test.ts b/packages/webapp/src/lib/stores/wagmi.test.ts new file mode 100644 index 000000000..39024396a --- /dev/null +++ b/packages/webapp/src/lib/stores/wagmi.test.ts @@ -0,0 +1,116 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { get } from 'svelte/store'; +import { + connected, + wagmiLoaded, + chainId, + signerAddress, + configuredConnectors, + loading, + defaultConfig, + init, + WC, + disconnectWagmi +} from './wagmi'; +import { createConfig, disconnect, getAccount, watchAccount } from '@wagmi/core'; +import { mainnet } from '@wagmi/core/chains'; + +// Mock external dependencies +vi.mock('@wagmi/core', async (importOriginal) => ({ + ...(await importOriginal()), + createConfig: vi.fn(), + disconnect: vi.fn(), + getAccount: vi.fn(), + watchAccount: vi.fn(), + reconnect: vi.fn(), + http: vi.fn() + +})); + +vi.mock('@reown/appkit', () => ({ + createAppKit: vi.fn(() => ({ + open: vi.fn(), + subscribeEvents: vi.fn() + })) +})); + +describe('wagmi store', () => { + beforeEach(() => { + // Reset all stores to initial state + connected.set(false); + wagmiLoaded.set(false); + chainId.set(null); + signerAddress.set(null); + configuredConnectors.set([]); + loading.set(true); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + describe('defaultConfig', () => { + it('should initialize with correct default values', () => { + const mockConfig = { chains: [mainnet] }; + vi.mocked(createConfig).mockReturnValue(mockConfig); + + const result = defaultConfig({ + appName: 'Test App', + projectId: 'test-project-id', + connectors: [] + }); + + expect(result).toHaveProperty('init'); + expect(get(wagmiLoaded)).toBe(true); + }); + }); + + describe('init', () => { + it('should initialize wallet connection successfully', async () => { + const mockAccount = { + address: '0x123', + chainId: 1, + isConnected: true + }; + + vi.mocked(getAccount).mockReturnValue(mockAccount); + vi.mocked(watchAccount).mockImplementation((_, { onChange }) => { + onChange(mockAccount, mockAccount); + return () => {}; + }); + + await init(); + + expect(get(connected)).toBe(true); + expect(get(signerAddress)).toBe('0x123'); + expect(get(loading)).toBe(false); + }); + + it('should handle initialization failure', async () => { + vi.mocked(getAccount).mockImplementation(() => { + throw new Error('Connection failed'); + }); + + await init(); + + expect(get(connected)).toBe(false); + expect(get(loading)).toBe(false); + }); + }); + + describe('disconnectWagmi', () => { + it('should disconnect wallet and reset stores', async () => { + connected.set(true); + chainId.set(1); + signerAddress.set('0x123'); + + await disconnectWagmi(); + + expect(vi.mocked(disconnect)).toHaveBeenCalled(); + expect(get(connected)).toBe(false); + expect(get(chainId)).toBe(null); + expect(get(signerAddress)).toBe(null); + expect(get(loading)).toBe(false); + }); + }); +}); \ No newline at end of file diff --git a/packages/webapp/test-setup.mjs b/packages/webapp/test-setup.mjs deleted file mode 100644 index 5746a6253..000000000 --- a/packages/webapp/test-setup.mjs +++ /dev/null @@ -1,18 +0,0 @@ -import '@testing-library/jest-dom/vitest'; -import { vi } from 'vitest'; - -vi.mock('codemirror-rainlang', () => ({ - RainlangLR: vi.fn() -})); - -vi.mock('@walletconnect/relay-auth', () => ({ - utils: vi.fn() -})); - -vi.mock('@walletconnect', () => ({ - default: vi.fn() -})); - -vi.mock('uint8arrays/concat', () => ({ - concat: vi.fn() -})); diff --git a/packages/webapp/test-setup.ts b/packages/webapp/test-setup.ts new file mode 100644 index 000000000..243a07ca2 --- /dev/null +++ b/packages/webapp/test-setup.ts @@ -0,0 +1,6 @@ +import '@testing-library/jest-dom/vitest'; +import { vi } from 'vitest'; + +vi.mock('@reown/appkit', () => ({ + default: vi.fn() +})); diff --git a/packages/webapp/vite.config.ts b/packages/webapp/vite.config.ts index 0a9174653..28c56593b 100644 --- a/packages/webapp/vite.config.ts +++ b/packages/webapp/vite.config.ts @@ -20,18 +20,14 @@ export default defineConfig(({ mode }) => ({ environment: 'jsdom', include: ['src/**/*.{test,spec}.ts'], // Extend jest-dom matchers - setupFiles: ['./test-setup.mjs'], + setupFiles: ['./test-setup.ts'], // load env vars env: loadEnv('', process.cwd(), ''), testTimeout: 10000, server: { deps: { inline: [ - /@tanstack\/svelte-query/, - /@walletconnect/, - /uint8arrays/, - /@web3modal/, - /@ethersproject/ + /@reown\/appkit/ ] } }, From b88994f84899380b53d5184f14a3f9813455758e Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 22:12:14 +0100 Subject: [PATCH 33/74] add tests --- packages/webapp/src/lib/stores/wagmi.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/webapp/src/lib/stores/wagmi.test.ts b/packages/webapp/src/lib/stores/wagmi.test.ts index 39024396a..dd4f6bdb2 100644 --- a/packages/webapp/src/lib/stores/wagmi.test.ts +++ b/packages/webapp/src/lib/stores/wagmi.test.ts @@ -9,10 +9,9 @@ import { loading, defaultConfig, init, - WC, disconnectWagmi } from './wagmi'; -import { createConfig, disconnect, getAccount, watchAccount } from '@wagmi/core'; +import { createConfig, disconnect, getAccount, watchAccount, type Config } from '@wagmi/core'; import { mainnet } from '@wagmi/core/chains'; // Mock external dependencies @@ -51,8 +50,8 @@ describe('wagmi store', () => { describe('defaultConfig', () => { it('should initialize with correct default values', () => { - const mockConfig = { chains: [mainnet] }; - vi.mocked(createConfig).mockReturnValue(mockConfig); + const mockConfig = { chains: [mainnet], subscribe: vi.fn() }; + vi.mocked(createConfig).mockReturnValue(mockConfig as unknown as Config); const result = defaultConfig({ appName: 'Test App', From 2c0298bc19c1026bb833beb0cf46073a07e398c4 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 22:15:47 +0100 Subject: [PATCH 34/74] add tests --- .../deployment/DeploymentSteps.svelte | 4 +- .../src/lib/__tests__/WalletConnect.test.ts | 1 - packages/webapp/src/lib/stores/wagmi.test.ts | 219 ++++++++++-------- packages/webapp/src/lib/stores/wagmi.ts | 2 +- packages/webapp/src/routes/+layout.ts | 6 +- 5 files changed, 120 insertions(+), 112 deletions(-) diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index 0584a77c5..7d28dbae3 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -216,6 +216,7 @@ try { if (!gui || !$wagmiConfig) return; const { address } = getAccount($wagmiConfig); + if (!address) return; const approvals: ApprovalCalldataResult = await gui.generateApprovalCalldatas(address); for (const approval of approvals) { await sendTransaction($wagmiConfig, { @@ -240,13 +241,12 @@ try { if (!gui) return; - // @ts-expect-error window.ethereum is not typed await window.ethereum?.request({ method: 'eth_requestAccounts' }); const walletClient = createWalletClient({ chain: getChainById( gui.getCurrentDeployment().deployment.order.network['chain-id'] as number ), - // @ts-expect-error window.ethereum is not typed + transport: custom(window.ethereum!) }); const [account] = await walletClient.getAddresses(); diff --git a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts index 2848468fa..06cf0a4f5 100644 --- a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts +++ b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts @@ -15,7 +15,6 @@ vi.mock('$lib/stores/wagmi', async (importOriginal) => { }; }); - describe('WalletConnect component', () => { beforeEach(() => { vi.clearAllMocks(); diff --git a/packages/webapp/src/lib/stores/wagmi.test.ts b/packages/webapp/src/lib/stores/wagmi.test.ts index dd4f6bdb2..f030d371d 100644 --- a/packages/webapp/src/lib/stores/wagmi.test.ts +++ b/packages/webapp/src/lib/stores/wagmi.test.ts @@ -1,115 +1,128 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; import { get } from 'svelte/store'; import { - connected, - wagmiLoaded, - chainId, - signerAddress, - configuredConnectors, - loading, - defaultConfig, - init, - disconnectWagmi + connected, + wagmiLoaded, + chainId, + signerAddress, + configuredConnectors, + loading, + defaultConfig, + init, + disconnectWagmi } from './wagmi'; -import { createConfig, disconnect, getAccount, watchAccount, type Config } from '@wagmi/core'; -import { mainnet } from '@wagmi/core/chains'; +import { + createConfig, + disconnect, + getAccount, + watchAccount, + type Config, + type GetAccountReturnType +} from '@wagmi/core'; +import { mainnet, type Chain } from '@wagmi/core/chains'; -// Mock external dependencies vi.mock('@wagmi/core', async (importOriginal) => ({ - ...(await importOriginal()), - createConfig: vi.fn(), - disconnect: vi.fn(), - getAccount: vi.fn(), - watchAccount: vi.fn(), - reconnect: vi.fn(), - http: vi.fn() - + ...(await importOriginal()), + createConfig: vi.fn(), + disconnect: vi.fn(), + getAccount: vi.fn(), + watchAccount: vi.fn(), + reconnect: vi.fn(), + http: vi.fn() })); vi.mock('@reown/appkit', () => ({ - createAppKit: vi.fn(() => ({ - open: vi.fn(), - subscribeEvents: vi.fn() - })) + createAppKit: vi.fn(() => ({ + open: vi.fn(), + subscribeEvents: vi.fn() + })) })); describe('wagmi store', () => { - beforeEach(() => { - // Reset all stores to initial state - connected.set(false); - wagmiLoaded.set(false); - chainId.set(null); - signerAddress.set(null); - configuredConnectors.set([]); - loading.set(true); - }); - - afterEach(() => { - vi.clearAllMocks(); - }); - - describe('defaultConfig', () => { - it('should initialize with correct default values', () => { - const mockConfig = { chains: [mainnet], subscribe: vi.fn() }; - vi.mocked(createConfig).mockReturnValue(mockConfig as unknown as Config); - - const result = defaultConfig({ - appName: 'Test App', - projectId: 'test-project-id', - connectors: [] - }); - - expect(result).toHaveProperty('init'); - expect(get(wagmiLoaded)).toBe(true); - }); - }); - - describe('init', () => { - it('should initialize wallet connection successfully', async () => { - const mockAccount = { - address: '0x123', - chainId: 1, - isConnected: true - }; - - vi.mocked(getAccount).mockReturnValue(mockAccount); - vi.mocked(watchAccount).mockImplementation((_, { onChange }) => { - onChange(mockAccount, mockAccount); - return () => {}; - }); - - await init(); - - expect(get(connected)).toBe(true); - expect(get(signerAddress)).toBe('0x123'); - expect(get(loading)).toBe(false); - }); - - it('should handle initialization failure', async () => { - vi.mocked(getAccount).mockImplementation(() => { - throw new Error('Connection failed'); - }); - - await init(); - - expect(get(connected)).toBe(false); - expect(get(loading)).toBe(false); - }); - }); - - describe('disconnectWagmi', () => { - it('should disconnect wallet and reset stores', async () => { - connected.set(true); - chainId.set(1); - signerAddress.set('0x123'); - - await disconnectWagmi(); - - expect(vi.mocked(disconnect)).toHaveBeenCalled(); - expect(get(connected)).toBe(false); - expect(get(chainId)).toBe(null); - expect(get(signerAddress)).toBe(null); - expect(get(loading)).toBe(false); - }); - }); -}); \ No newline at end of file + beforeEach(() => { + // Reset all stores to initial state + connected.set(false); + wagmiLoaded.set(false); + chainId.set(null); + signerAddress.set(null); + configuredConnectors.set([]); + loading.set(true); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + describe('defaultConfig', () => { + it('should initialize with correct default values', () => { + const mockConfig = { chains: [mainnet], subscribe: vi.fn() }; + vi.mocked(createConfig).mockReturnValue(mockConfig as unknown as Config); + + const result = defaultConfig({ + appName: 'Test App', + projectId: 'test-project-id', + connectors: [] + }); + + expect(result).toHaveProperty('init'); + expect(get(wagmiLoaded)).toBe(true); + }); + }); + + describe('init', () => { + it('should initialize wallet connection successfully', async () => { + const mockAccount = { + address: '0x123' as `0x${string}`, + addresses: ['0x123'] as readonly `0x${string}`[], + chainId: 1, + chain: mainnet, + connector: undefined, + isConnected: true, + isConnecting: false, + isDisconnected: false, + isReconnecting: false, + status: 'connected' as const + }; + + vi.mocked(getAccount).mockReturnValue( + mockAccount as unknown as GetAccountReturnType + ); + vi.mocked(watchAccount).mockImplementation(() => { + return () => {}; + }); + + await init(); + + expect(get(connected)).toBe(true); + expect(get(signerAddress)).toBe('0x123'); + expect(get(loading)).toBe(false); + }); + + it('should handle initialization failure', async () => { + vi.mocked(getAccount).mockImplementation(() => { + throw new Error('Connection failed'); + }); + + await init(); + + expect(get(connected)).toBe(false); + expect(get(loading)).toBe(false); + }); + }); + + describe('disconnectWagmi', () => { + it('should disconnect wallet and reset stores', async () => { + connected.set(true); + chainId.set(1); + signerAddress.set('0x123'); + + await disconnectWagmi(); + + expect(vi.mocked(disconnect)).toHaveBeenCalled(); + expect(get(connected)).toBe(false); + expect(get(chainId)).toBe(null); + expect(get(signerAddress)).toBe(null); + expect(get(loading)).toBe(false); + }); + }); +}); diff --git a/packages/webapp/src/lib/stores/wagmi.ts b/packages/webapp/src/lib/stores/wagmi.ts index 120600c52..9d29c6822 100644 --- a/packages/webapp/src/lib/stores/wagmi.ts +++ b/packages/webapp/src/lib/stores/wagmi.ts @@ -192,4 +192,4 @@ const waitForConnection = (): Promise => }; attemptToGetAccount(); - }); \ No newline at end of file + }); diff --git a/packages/webapp/src/routes/+layout.ts b/packages/webapp/src/routes/+layout.ts index 374c99311..43a317565 100644 --- a/packages/webapp/src/routes/+layout.ts +++ b/packages/webapp/src/routes/+layout.ts @@ -14,8 +14,6 @@ export interface LayoutData { } export const load = async () => { - - const response = await fetch( 'https://raw.githubusercontent.com/rainlanguage/rain.strategies/refs/heads/main/settings.json' ); @@ -60,8 +58,6 @@ export const load = async () => { ) ); - - return { stores: { settings, @@ -77,7 +73,7 @@ export const load = async () => { activeOrderbook, subgraphUrl, activeNetworkOrderbooks - }, + } }; }; From ee9fbbc4729648eab0361294fe8f23b394de3d08 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 22:18:15 +0100 Subject: [PATCH 35/74] rm logs --- packages/webapp/src/lib/stores/wagmi.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/webapp/src/lib/stores/wagmi.ts b/packages/webapp/src/lib/stores/wagmi.ts index 9d29c6822..63815852b 100644 --- a/packages/webapp/src/lib/stores/wagmi.ts +++ b/packages/webapp/src/lib/stores/wagmi.ts @@ -124,7 +124,7 @@ const setupListeners = () => { }; const handleAccountChange = (data: GetAccountReturnType) => { - // Wrap the original async logic in an immediately invoked function expression (IIFE) + return (async () => { if (get(wagmiLoaded) && data.address) { const chain = get(wagmiConfig).chains.find((chain) => chain.id === data.chainId); @@ -135,7 +135,7 @@ const handleAccountChange = (data: GetAccountReturnType) => { signerAddress.set(data.address); } else if (data.isDisconnected && get(connected)) { loading.set(false); - await disconnectWagmi(); // Handle async operation inside + await disconnectWagmi(); } })(); }; @@ -170,7 +170,6 @@ const waitForAccount = () => { const unsub = watchAccount(get(wagmiConfig), { onChange(data) { if (data?.isConnected) { - // Gottem, resolve the promise w/user's selected & connected Acc. resolve(data); unsub(); } From 2ade9e977ef56e7bc6affc47ae582eed2b756f76 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Mon, 20 Jan 2025 23:50:51 +0100 Subject: [PATCH 36/74] env --- packages/webapp/src/routes/+layout.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index c66b5e8c6..14d052e64 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -6,10 +6,11 @@ import { browser } from '$app/environment'; import { supportedChainsList } from '$lib/chains'; import { defaultConfig } from '$lib/stores/wagmi'; - import { PUBLIC_WALLETCONNECT_ID } from '$env/static/public'; import { injected } from '@wagmi/connectors'; import { type Chain } from '@wagmi/core/chains'; + const WALLETCONNECT_PROJECT_ID = import.meta.env.VITE_WALLETCONNECT_PROJECT_ID; + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -23,7 +24,7 @@ appName: 'Rain Language', connectors: [injected()], chains: supportedChainsList as unknown as Chain[], - projectId: PUBLIC_WALLETCONNECT_ID + projectId: WALLETCONNECT_PROJECT_ID }); await erckit.init(); }; From 9db9aa669782a4cd5d979c65b9142449bb3318dd Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 21 Jan 2025 01:54:58 +0100 Subject: [PATCH 37/74] f --- packages/webapp/src/lib/stores/wagmi.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/webapp/src/lib/stores/wagmi.ts b/packages/webapp/src/lib/stores/wagmi.ts index 63815852b..0fb401b03 100644 --- a/packages/webapp/src/lib/stores/wagmi.ts +++ b/packages/webapp/src/lib/stores/wagmi.ts @@ -124,7 +124,6 @@ const setupListeners = () => { }; const handleAccountChange = (data: GetAccountReturnType) => { - return (async () => { if (get(wagmiLoaded) && data.address) { const chain = get(wagmiConfig).chains.find((chain) => chain.id === data.chainId); From 96555e8219bb862bfae597cbd1fa3c7efed529fb Mon Sep 17 00:00:00 2001 From: nino Date: Tue, 21 Jan 2025 12:46:38 +0400 Subject: [PATCH 38/74] Remove console --- .../ui-components/src/lib/components/input/InputHex.svelte | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/ui-components/src/lib/components/input/InputHex.svelte b/packages/ui-components/src/lib/components/input/InputHex.svelte index 20fa5bb36..25002ef38 100644 --- a/packages/ui-components/src/lib/components/input/InputHex.svelte +++ b/packages/ui-components/src/lib/components/input/InputHex.svelte @@ -33,9 +33,7 @@ try { value = fromHex(valuePrefixed as `0x${string}`, 'bigint'); // eslint-disable-next-line no-empty - } catch (e) { - console.error(e); - } + } catch (e) {} } } From 78fa4ca08c60b4324371b06c84728859830f2aed Mon Sep 17 00:00:00 2001 From: nino Date: Tue, 21 Jan 2025 13:03:14 +0400 Subject: [PATCH 39/74] Add no-unused-vars --- .../ui-components/src/lib/components/input/InputHex.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/ui-components/src/lib/components/input/InputHex.svelte b/packages/ui-components/src/lib/components/input/InputHex.svelte index 25002ef38..2c34816c5 100644 --- a/packages/ui-components/src/lib/components/input/InputHex.svelte +++ b/packages/ui-components/src/lib/components/input/InputHex.svelte @@ -32,8 +32,10 @@ } try { value = fromHex(valuePrefixed as `0x${string}`, 'bigint'); - // eslint-disable-next-line no-empty - } catch (e) {} + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (e) { + value = 0n; + } } } From 9c357c0e9b7a443018e7015118578421541b36ee Mon Sep 17 00:00:00 2001 From: highonhopium Date: Tue, 21 Jan 2025 11:30:06 +0000 Subject: [PATCH 40/74] adding reown project id to env for webapp build --- .github/workflows/vercel-preview.yaml | 2 ++ .github/workflows/vercel-prod.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/vercel-preview.yaml b/.github/workflows/vercel-preview.yaml index 458fa344d..433940e13 100644 --- a/.github/workflows/vercel-preview.yaml +++ b/.github/workflows/vercel-preview.yaml @@ -24,6 +24,8 @@ jobs: - run: nix develop .#webapp-shell -c npm run build working-directory: packages/webapp + env: + VITE_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - name: Install Vercel CLI run: npm install --global vercel@canary diff --git a/.github/workflows/vercel-prod.yaml b/.github/workflows/vercel-prod.yaml index 203f7841b..b142aa4ce 100644 --- a/.github/workflows/vercel-prod.yaml +++ b/.github/workflows/vercel-prod.yaml @@ -24,6 +24,8 @@ jobs: - run: nix develop .#webapp-shell -c npm run build working-directory: packages/webapp + env: + VITE_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - name: Install Vercel CLI run: npm install --global vercel@canary From 186f5814eecd288d44e5a705fdc6a3b38cd51bb5 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 21 Jan 2025 12:43:14 +0100 Subject: [PATCH 41/74] remove unused --- .../deployment/DeploymentSteps.svelte | 47 ++----------------- .../src/lib/components/WalletConnect.svelte | 22 ++++++--- packages/webapp/src/lib/stores/wagmi.ts | 7 +-- packages/webapp/src/routes/+layout.svelte | 5 +- 4 files changed, 25 insertions(+), 56 deletions(-) diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index 7d28dbae3..7438ecc40 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -237,43 +237,6 @@ } } - async function handleAddOrder() { - try { - if (!gui) return; - - await window.ethereum?.request({ method: 'eth_requestAccounts' }); - const walletClient = createWalletClient({ - chain: getChainById( - gui.getCurrentDeployment().deployment.order.network['chain-id'] as number - ), - - transport: custom(window.ethereum!) - }); - const [account] = await walletClient.getAddresses(); - - const approvals: ApprovalCalldataResult = await gui.generateApprovalCalldatas(account); - for (const approval of approvals) { - await walletClient.sendTransaction({ - account, - to: approval.token as `0x${string}`, - data: approval.calldata as `0x${string}` - }); - } - - const calldata: DepositAndAddOrderCalldataResult = - await gui.generateDepositAndAddOrderCalldatas(); - await walletClient.sendTransaction({ - account, - // @ts-expect-error orderbook is not typed - to: gui.getCurrentDeployment().deployment.order.orderbook.address as `0x${string}`, - data: calldata as `0x${string}` - }); - } catch (e) { - addOrderError = DeploymentStepErrors.ADD_ORDER_FAILED; - addOrderErrorDetails = e instanceof Error ? e.message : 'Unknown error'; - } - } - function initializeVaultIdArrays() { if (!gui) return; const deployment = gui.getCurrentDeployment(); @@ -401,14 +364,10 @@
{/if}
- {#if $wagmiConfig} - {#if $wagmiConnected} - - {:else} - - {/if} + {#if $wagmiConnected} + {:else} - + {/if}
{#if addOrderError} diff --git a/packages/webapp/src/lib/components/WalletConnect.svelte b/packages/webapp/src/lib/components/WalletConnect.svelte index 98a25dd40..782f5e4aa 100644 --- a/packages/webapp/src/lib/components/WalletConnect.svelte +++ b/packages/webapp/src/lib/components/WalletConnect.svelte @@ -1,14 +1,24 @@ -{#if !$connected} - -{:else} - Connected: {$signerAddress} -{/if} + diff --git a/packages/webapp/src/lib/stores/wagmi.ts b/packages/webapp/src/lib/stores/wagmi.ts index 0fb401b03..62814dc91 100644 --- a/packages/webapp/src/lib/stores/wagmi.ts +++ b/packages/webapp/src/lib/stores/wagmi.ts @@ -43,13 +43,12 @@ export const defaultConfig = ({ appIcon = null, autoConnect = true, chains = [], - alchemyId, connectors, projectId }: DefaultConfigProps) => { if (connectors) configuredConnectors.set(connectors); - const url = alchemyId ? http(`https://eth-mainnet.g.alchemy.com/v2/${alchemyId}`) : http(); + const url = http(); const chainsToUse = chains ? chains.map((chain) => chain) : []; const transports = chains @@ -89,7 +88,9 @@ export const defaultConfig = ({ metadata, projectId, features: { - analytics: true + analytics: false, + socials: [], + email: false } }); diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index 14d052e64..5f1358822 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -8,8 +8,7 @@ import { defaultConfig } from '$lib/stores/wagmi'; import { injected } from '@wagmi/connectors'; import { type Chain } from '@wagmi/core/chains'; - - const WALLETCONNECT_PROJECT_ID = import.meta.env.VITE_WALLETCONNECT_PROJECT_ID; + import { PUBLIC_WALLETCONNECT_ID } from '$env/static/public'; const queryClient = new QueryClient({ defaultOptions: { @@ -24,7 +23,7 @@ appName: 'Rain Language', connectors: [injected()], chains: supportedChainsList as unknown as Chain[], - projectId: WALLETCONNECT_PROJECT_ID + projectId: PUBLIC_WALLETCONNECT_ID }); await erckit.init(); }; From 5a132cc574c117951be7d123d60efd423fc08142 Mon Sep 17 00:00:00 2001 From: highonhopium Date: Tue, 21 Jan 2025 11:50:14 +0000 Subject: [PATCH 42/74] naming --- .github/workflows/vercel-preview.yaml | 2 +- .github/workflows/vercel-prod.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/vercel-preview.yaml b/.github/workflows/vercel-preview.yaml index 433940e13..c50794a61 100644 --- a/.github/workflows/vercel-preview.yaml +++ b/.github/workflows/vercel-preview.yaml @@ -25,7 +25,7 @@ jobs: - run: nix develop .#webapp-shell -c npm run build working-directory: packages/webapp env: - VITE_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - name: Install Vercel CLI run: npm install --global vercel@canary diff --git a/.github/workflows/vercel-prod.yaml b/.github/workflows/vercel-prod.yaml index b142aa4ce..ce0cc3393 100644 --- a/.github/workflows/vercel-prod.yaml +++ b/.github/workflows/vercel-prod.yaml @@ -25,7 +25,7 @@ jobs: - run: nix develop .#webapp-shell -c npm run build working-directory: packages/webapp env: - VITE_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - name: Install Vercel CLI run: npm install --global vercel@canary From d58c442c010b5c91b038787ea57b17fae1d24964 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 21 Jan 2025 12:56:10 +0100 Subject: [PATCH 43/74] add --- packages/webapp/env.example | 2 +- packages/webapp/src/routes/+layout.svelte | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/webapp/env.example b/packages/webapp/env.example index 078a6784b..023f373ba 100644 --- a/packages/webapp/env.example +++ b/packages/webapp/env.example @@ -1 +1 @@ -PLUBLIC_WALLETCONNECT_ID= \ No newline at end of file +PLUBLIC_WALLETCONNECT_PROJECT_ID= \ No newline at end of file diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index 5f1358822..f59628641 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -8,7 +8,7 @@ import { defaultConfig } from '$lib/stores/wagmi'; import { injected } from '@wagmi/connectors'; import { type Chain } from '@wagmi/core/chains'; - import { PUBLIC_WALLETCONNECT_ID } from '$env/static/public'; + import { PUBLIC_WALLETCONNECT_PROJECT_ID } from '$env/static/public'; const queryClient = new QueryClient({ defaultOptions: { @@ -23,7 +23,7 @@ appName: 'Rain Language', connectors: [injected()], chains: supportedChainsList as unknown as Chain[], - projectId: PUBLIC_WALLETCONNECT_ID + projectId: PUBLIC_WALLETCONNECT_PROJECT_ID }); await erckit.init(); }; From e2f4bdd325c787ed5af8be13cfbcc0ad6750010a Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Tue, 21 Jan 2025 14:03:30 +0100 Subject: [PATCH 44/74] remove unused --- .../src/lib/components/deployment/DeploymentSteps.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index 7438ecc40..441684e5f 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -17,7 +17,7 @@ type OrderIO } from '@rainlanguage/orderbook/js_api'; import { Button, Input, Spinner } from 'flowbite-svelte'; - import { createWalletClient, custom, type Chain } from 'viem'; + import { type Chain } from 'viem'; import { base, flare, arbitrum, polygon, bsc, mainnet, linea } from 'viem/chains'; import { getAccount, sendTransaction, type Config } from '@wagmi/core'; import { type Writable } from 'svelte/store'; @@ -52,9 +52,9 @@ let errorDetails: string | null = null; let strategyUrl = ''; let selectTokens: string[] | null = null; - let allFieldDefinitions: GuiFieldDefinition[] = []; let allDepositFields: GuiDeposit[] = []; let allTokenOutputs: OrderIO[] = []; + let allFieldDefinitions: GuiFieldDefinition[] = []; let allTokensSelected: boolean = false; let guiDetails: GuiDetails; let inputVaultIds: string[] = []; @@ -87,6 +87,7 @@ let gui: DotrainOrderGui | null = null; let availableDeployments: Record = {}; + async function initialize() { try { let deployments: DeploymentKeys = await DotrainOrderGui.getDeploymentKeys(dotrain); From f62700853567a9ac661d57798498ca2ad7995b77 Mon Sep 17 00:00:00 2001 From: highonhopium Date: Tue, 21 Jan 2025 16:34:01 +0000 Subject: [PATCH 45/74] workflow --- .github/workflows/vercel-preview.yaml | 2 ++ .github/workflows/vercel-prod.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/vercel-preview.yaml b/.github/workflows/vercel-preview.yaml index c50794a61..4e9f198be 100644 --- a/.github/workflows/vercel-preview.yaml +++ b/.github/workflows/vercel-preview.yaml @@ -21,6 +21,8 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@main - run: ./prep-all.sh + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - run: nix develop .#webapp-shell -c npm run build working-directory: packages/webapp diff --git a/.github/workflows/vercel-prod.yaml b/.github/workflows/vercel-prod.yaml index ce0cc3393..f8cf878ab 100644 --- a/.github/workflows/vercel-prod.yaml +++ b/.github/workflows/vercel-prod.yaml @@ -21,6 +21,8 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@main - run: ./prep-all.sh + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - run: nix develop .#webapp-shell -c npm run build working-directory: packages/webapp From a3132577ec085bad73a47a47e1378feec0563f96 Mon Sep 17 00:00:00 2001 From: highonhopium Date: Tue, 21 Jan 2025 17:42:12 +0000 Subject: [PATCH 46/74] prep script --- prep-all.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/prep-all.sh b/prep-all.sh index 42145c858..b5095296c 100755 --- a/prep-all.sh +++ b/prep-all.sh @@ -23,6 +23,7 @@ keep=( -k CI_SEPOLIA_METABOARD_URL -k RPC_URL_ETHEREUM_FORK -k COMMIT_SHA + -k PUBLIC_WALLETCONNECT_PROJECT_ID ) echo "Installing Forge dependencies..." From 5891bb1f6d88e0c41a4245b1f70a6503e391c8d4 Mon Sep 17 00:00:00 2001 From: nino Date: Wed, 22 Jan 2025 15:49:04 +0400 Subject: [PATCH 47/74] ListViewOrderbookFilters responsive for orders and vaults pages --- .../ListViewOrderbookFilters.svelte | 2 +- .../components/tables/VaultsListTable.svelte | 68 +++++++++---------- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte b/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte index e5f892f24..50bd736ca 100644 --- a/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte +++ b/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte @@ -20,7 +20,7 @@ export let isOrdersPage: boolean; -
+
{#if isEmpty($settings?.networks)} No networks added to settings diff --git a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte index 57aa95cc3..924c3b02b 100644 --- a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte +++ b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte @@ -18,6 +18,7 @@ type VaultWithSubgraphName } from '@rainlanguage/orderbook/js_api'; import type { Writable, Readable } from 'svelte/store'; + export let activeOrderbook: Readable; export let subgraphUrl: Readable; export let orderHash: Writable; @@ -90,6 +91,17 @@ {#if $query} + -
+
Vaults
{#if handleDepositGenericModal} @@ -110,23 +122,11 @@ data-testid="new-vault-button" on:click={() => { handleDepositGenericModal(); - }}>New vault + }} + >New vault + {/if}
-
- -
@@ -148,12 +148,12 @@ {bigintStringToHex(item.vault.vaultId)} - - + + + + + + {item.vault.token.name} @@ -174,12 +174,9 @@ updateActiveNetworkAndOrderbook(item.subgraphName); goto(`/orders/${order.id}`); }} - > + + {/each} {#if item.vault.ordersAsInput.length > 3}...{/if}
@@ -198,12 +195,9 @@ updateActiveNetworkAndOrderbook(item.subgraphName); goto(`/orders/${order.id}`); }} - > + + {/each} {#if item.vault.ordersAsOutput.length > 3}...{/if}
@@ -237,15 +231,17 @@ on:click={(e) => { e.stopPropagation(); handleDepositModal(item.vault, $query.refetch); - }}>Deposit + }} + >Deposit + { e.stopPropagation(); handleWithdrawModal(item.vault, $query.refetch); - }}>Withdraw + }} + >Withdraw + {/if} {/if} From dd22da09df21dd2d2a42579473763d6d4e7e4148 Mon Sep 17 00:00:00 2001 From: nino Date: Wed, 22 Jan 2025 16:10:13 +0400 Subject: [PATCH 48/74] Make vaultId to be displayed as Hash --- .../src/lib/components/tables/VaultsListTable.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte index 924c3b02b..8df4726f2 100644 --- a/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte +++ b/packages/ui-components/src/lib/components/tables/VaultsListTable.svelte @@ -145,9 +145,9 @@ {item.subgraphName} - {bigintStringToHex(item.vault.vaultId)} + + + From 7e465d4bd65c8b2e0e6ccac1c4908e582a4123b9 Mon Sep 17 00:00:00 2001 From: nino Date: Wed, 22 Jan 2025 16:10:36 +0400 Subject: [PATCH 49/74] Table responsive styles --- .../ui-components/src/lib/components/TanstackAppTable.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ui-components/src/lib/components/TanstackAppTable.svelte b/packages/ui-components/src/lib/components/TanstackAppTable.svelte index bbb9b18d7..854c8140a 100644 --- a/packages/ui-components/src/lib/components/TanstackAppTable.svelte +++ b/packages/ui-components/src/lib/components/TanstackAppTable.svelte @@ -32,7 +32,7 @@
{:else if $query.data} @@ -42,6 +42,7 @@ {#each $query.data?.pages as page} {#each page as item} { dispatch('clickRow', { item }); From abff59512d90783376d470a5459496ffb35e8c1b Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 22 Jan 2025 16:04:12 +0300 Subject: [PATCH 50/74] add deployment key and order key support for active deployment --- crates/settings/src/yaml/context.rs | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/crates/settings/src/yaml/context.rs b/crates/settings/src/yaml/context.rs index bc2cd88eb..94730c30e 100644 --- a/crates/settings/src/yaml/context.rs +++ b/crates/settings/src/yaml/context.rs @@ -2,10 +2,17 @@ use crate::{Order, OrderIO, Token}; use std::sync::Arc; use thiserror::Error; +#[derive(Debug, Clone, Default)] +pub struct GuiContext { + pub current_deployment: Option, + pub current_order: Option, +} + #[derive(Debug, Clone, Default)] pub struct Context { pub order: Option>, pub select_tokens: Option>, + pub gui_context: Option, } #[derive(Error, Debug, PartialEq)] @@ -101,14 +108,45 @@ impl OrderContext for Context { } } +pub trait GuiContextTrait { + fn get_current_deployment(&self) -> Option<&String>; + + fn get_current_order(&self) -> Option<&String>; +} + +impl GuiContextTrait for Context { + fn get_current_deployment(&self) -> Option<&String> { + self.gui_context + .as_ref() + .and_then(|gui_context| gui_context.current_deployment.as_ref()) + } + + fn get_current_order(&self) -> Option<&String> { + self.gui_context + .as_ref() + .and_then(|gui_context| gui_context.current_order.as_ref()) + } +} + impl Context { pub fn new() -> Self { Self { order: None, select_tokens: None, + gui_context: None, } } + pub fn from_context(context: Option<&Context>) -> Self { + let mut new_context = Self::new(); + if let Some(context) = context { + new_context.order = context.order.clone(); + new_context.select_tokens = context.select_tokens.clone(); + new_context.gui_context = context.gui_context.clone(); + } + new_context + } + pub fn add_order(&mut self, order: Arc) -> &mut Self { self.order = Some(order); self @@ -119,6 +157,22 @@ impl Context { self } + pub fn add_current_deployment(&mut self, deployment: String) -> &mut Self { + self.gui_context = Some(GuiContext { + current_deployment: Some(deployment), + current_order: None, + }); + self + } + + pub fn add_current_order(&mut self, order: String) -> &mut Self { + self.gui_context = Some(GuiContext { + current_deployment: None, + current_order: Some(order), + }); + self + } + fn resolve_path(&self, path: &str) -> Result { let parts: Vec<&str> = path.split('.').collect(); From e813fc13baabfef7239258e3c5c1dc383294ac57 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 22 Jan 2025 16:05:53 +0300 Subject: [PATCH 51/74] implement new context to gui parsing --- crates/js_api/src/gui/mod.rs | 2 +- crates/settings/src/yaml/dotrain.rs | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/crates/js_api/src/gui/mod.rs b/crates/js_api/src/gui/mod.rs index 2f87c83e8..cdaf5b03b 100644 --- a/crates/js_api/src/gui/mod.rs +++ b/crates/js_api/src/gui/mod.rs @@ -87,7 +87,7 @@ impl DotrainOrderGui { let gui = self .dotrain_order .dotrain_yaml() - .get_gui()? + .get_gui(Some(self.selected_deployment.clone()))? .ok_or(GuiError::GuiConfigNotFound)?; Ok(gui) } diff --git a/crates/settings/src/yaml/dotrain.rs b/crates/settings/src/yaml/dotrain.rs index 4986623f8..7475b21ac 100644 --- a/crates/settings/src/yaml/dotrain.rs +++ b/crates/settings/src/yaml/dotrain.rs @@ -75,8 +75,12 @@ impl DotrainYaml { Deployment::parse_from_yaml(self.documents.clone(), key, None) } - pub fn get_gui(&self) -> Result, YamlError> { - Gui::parse_from_yaml_optional(self.documents.clone(), None) + pub fn get_gui(&self, current_deployment: Option) -> Result, YamlError> { + let mut context = Context::new(); + if let Some(deployment) = current_deployment { + context.add_current_deployment(deployment); + } + Gui::parse_from_yaml_optional(self.documents.clone(), Some(&context)) } } @@ -351,7 +355,7 @@ mod tests { "order1" ); - let gui = dotrain_yaml.get_gui().unwrap().unwrap(); + let gui = dotrain_yaml.get_gui(None).unwrap().unwrap(); assert_eq!(gui.name, "Test gui"); assert_eq!(gui.description, "Test description"); assert_eq!(gui.deployments.len(), 1); @@ -577,7 +581,7 @@ mod tests { fn test_handlebars() { let dotrain_yaml = DotrainYaml::new(vec![HANDLEBARS_YAML.to_string()], false).unwrap(); - let gui = dotrain_yaml.get_gui().unwrap().unwrap(); + let gui = dotrain_yaml.get_gui(None).unwrap().unwrap(); let deployment = gui.deployments.get("deployment1").unwrap(); assert_eq!( @@ -668,7 +672,7 @@ orders: ); let dotrain_yaml = DotrainYaml::new(vec![missing_input_token_yaml], false).unwrap(); - let error = dotrain_yaml.get_gui().unwrap_err(); + let error = dotrain_yaml.get_gui(None).unwrap_err(); assert_eq!( error, YamlError::ParseError( @@ -678,7 +682,7 @@ orders: ); let dotrain_yaml = DotrainYaml::new(vec![missing_output_token_yaml], false).unwrap(); - let error = dotrain_yaml.get_gui().unwrap_err(); + let error = dotrain_yaml.get_gui(None).unwrap_err(); assert_eq!( error, YamlError::ParseError( From 813bc0e3d8eabd761ba5cc7482f9d3ed955642cc Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 22 Jan 2025 16:09:14 +0300 Subject: [PATCH 52/74] implement context for gui, deployment and order --- crates/settings/src/deployment.rs | 23 +++++++++++++++-------- crates/settings/src/gui.rs | 17 +++++++++++++---- crates/settings/src/order.rs | 10 +++++++++- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/crates/settings/src/deployment.rs b/crates/settings/src/deployment.rs index f7ad9a202..f2140abff 100644 --- a/crates/settings/src/deployment.rs +++ b/crates/settings/src/deployment.rs @@ -8,7 +8,8 @@ use strict_yaml_rust::StrictYaml; use thiserror::Error; use typeshare::typeshare; use yaml::{ - context::Context, default_document, require_hash, require_string, YamlError, YamlParsableHash, + context::{Context, GuiContextTrait}, + default_document, require_hash, require_string, YamlError, YamlParsableHash, }; #[cfg(target_family = "wasm")] @@ -59,8 +60,6 @@ impl YamlParsableHash for Deployment { ) -> Result, YamlError> { let mut deployments = HashMap::new(); - let orders = Order::parse_all_from_yaml(documents.clone(), context)?; - for document in &documents { let document_read = document.read().map_err(|_| YamlError::ReadLockError)?; @@ -68,6 +67,16 @@ impl YamlParsableHash for Deployment { for (key_yaml, deployment_yaml) in deployments_hash { let deployment_key = key_yaml.as_str().unwrap_or_default().to_string(); + if let Some(context) = context { + if let Some(current_deployment) = context.get_current_deployment() { + if current_deployment != &deployment_key { + continue; + } + } + } + + let mut context = Context::from_context(context); + let order_key = require_string( deployment_yaml, Some("order"), @@ -75,12 +84,10 @@ impl YamlParsableHash for Deployment { "order string missing in deployment: {deployment_key}" )), )?; - let order = orders - .get(&order_key) - .ok_or_else(|| YamlError::KeyNotFound(order_key.clone()))? - .clone(); + context.add_current_order(order_key.clone()); - let mut context = Context::new(); + let order = + Order::parse_from_yaml(documents.clone(), &order_key, Some(&context))?; context.add_order(Arc::new(order.clone())); let scenario = Scenario::parse_from_yaml( diff --git a/crates/settings/src/gui.rs b/crates/settings/src/gui.rs index 9a3dc567f..77f1b7a95 100644 --- a/crates/settings/src/gui.rs +++ b/crates/settings/src/gui.rs @@ -1,7 +1,8 @@ use crate::{ yaml::{ - context::Context, default_document, get_hash_value, optional_hash, optional_string, - optional_vec, require_string, require_vec, YamlError, YamlParsableHash, YamlParseableValue, + context::{Context, GuiContextTrait}, + default_document, get_hash_value, optional_hash, optional_string, optional_vec, + require_string, require_vec, YamlError, YamlParsableHash, YamlParseableValue, }, Deployment, Token, TokenRef, }; @@ -349,7 +350,7 @@ impl YamlParseableValue for Gui { fn parse_from_yaml_optional( documents: Vec>>, - _: Option<&Context>, + context: Option<&Context>, ) -> Result, YamlError> { let mut gui_res: Option = None; let mut gui_deployments_res: HashMap = HashMap::new(); @@ -397,7 +398,15 @@ impl YamlParseableValue for Gui { for (deployment_name, deployment_yaml) in deployments { let deployment_name = deployment_name.as_str().unwrap_or_default().to_string(); - let mut context = Context::new(); + if let Some(context) = context { + if let Some(current_deployment) = context.get_current_deployment() { + if current_deployment != &deployment_name { + continue; + } + } + } + + let mut context = Context::from_context(context); let select_tokens = match optional_vec(deployment_yaml, "select-tokens") { Some(tokens) => Some( diff --git a/crates/settings/src/order.rs b/crates/settings/src/order.rs index 0bed2e978..9d2b5f348 100644 --- a/crates/settings/src/order.rs +++ b/crates/settings/src/order.rs @@ -10,7 +10,7 @@ use strict_yaml_rust::StrictYaml; use thiserror::Error; use typeshare::typeshare; use yaml::{ - context::{Context, SelectTokensContext}, + context::{Context, GuiContextTrait, SelectTokensContext}, default_document, optional_string, require_hash, require_string, require_vec, YamlError, YamlParsableHash, }; @@ -324,6 +324,14 @@ impl YamlParsableHash for Order { for (key_yaml, order_yaml) in orders_hash { let order_key = key_yaml.as_str().unwrap_or_default().to_string(); + if let Some(context) = context { + if let Some(current_order) = context.get_current_order() { + if current_order != &order_key { + continue; + } + } + } + let mut network: Option> = None; let deployer = match optional_string(order_yaml, "deployer") { From 7a140ff4427d993eb7319e053f123e03c5262a14 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 22 Jan 2025 16:31:01 +0300 Subject: [PATCH 53/74] run clippy --- crates/settings/src/yaml/context.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/settings/src/yaml/context.rs b/crates/settings/src/yaml/context.rs index 94730c30e..2eb528a13 100644 --- a/crates/settings/src/yaml/context.rs +++ b/crates/settings/src/yaml/context.rs @@ -140,9 +140,9 @@ impl Context { pub fn from_context(context: Option<&Context>) -> Self { let mut new_context = Self::new(); if let Some(context) = context { - new_context.order = context.order.clone(); - new_context.select_tokens = context.select_tokens.clone(); - new_context.gui_context = context.gui_context.clone(); + new_context.order.clone_from(&context.order); + new_context.select_tokens.clone_from(&context.select_tokens); + new_context.gui_context.clone_from(&context.gui_context); } new_context } From 9d0398626887c7c09519280a05bed578dcec653c Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 22 Jan 2025 17:12:24 +0300 Subject: [PATCH 54/74] add error cases for non hash values in gui parse methods --- crates/settings/src/deployer.rs | 60 ++++++++++++++ crates/settings/src/deployment.rs | 48 +++++++++++ crates/settings/src/gui.rs | 127 ++++++++++++++++++++++++++++++ crates/settings/src/network.rs | 45 +++++++++++ crates/settings/src/order.rs | 36 +++++++++ crates/settings/src/orderbook.rs | 36 +++++++++ 6 files changed, 352 insertions(+) diff --git a/crates/settings/src/deployer.rs b/crates/settings/src/deployer.rs index 17b052c00..5853a0760 100644 --- a/crates/settings/src/deployer.rs +++ b/crates/settings/src/deployer.rs @@ -59,6 +59,10 @@ impl Deployer { return require_string(deployer_yaml, Some("network"), None) .or_else(|_| Ok(deployer_key.to_string())); } + } else { + return Err(YamlError::ParseError( + "deployers field must be a map".to_string(), + )); } } Err(YamlError::ParseError(format!( @@ -333,4 +337,60 @@ deployers: let network_key = Deployer::parse_network_key(documents, "mainnet").unwrap(); assert_eq!(network_key, "mainnet"); } + + #[test] + fn test_parse_network_key() { + let yaml = r#" +networks: + mainnet: + rpc: https://rpc.com + chain-id: 1 +deployers: test +"#; + let error = Deployer::parse_network_key(vec![get_document(yaml)], "mainnet").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployers field must be a map".to_string()) + ); + + let yaml = r#" +networks: + mainnet: + rpc: https://rpc.com + chain-id: 1 +deployers: + - test +"#; + let error = Deployer::parse_network_key(vec![get_document(yaml)], "mainnet").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployers field must be a map".to_string()) + ); + + let yaml = r#" +networks: + mainnet: + rpc: https://rpc.com + chain-id: 1 +deployers: + - test: test +"#; + let error = Deployer::parse_network_key(vec![get_document(yaml)], "mainnet").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployers field must be a map".to_string()) + ); + + let yaml = r#" +networks: + mainnet: + rpc: https://rpc.com + chain-id: 1 +deployers: + mainnet: + address: 0x1234567890123456789012345678901234567890 +"#; + let res = Deployer::parse_network_key(vec![get_document(yaml)], "mainnet").unwrap(); + assert_eq!(res, "mainnet"); + } } diff --git a/crates/settings/src/deployment.rs b/crates/settings/src/deployment.rs index f7ad9a202..9361b8ed1 100644 --- a/crates/settings/src/deployment.rs +++ b/crates/settings/src/deployment.rs @@ -44,6 +44,10 @@ impl Deployment { { return require_string(deployment_yaml, Some("order"), None); } + } else { + return Err(YamlError::ParseError( + "deployments field must be a map".to_string(), + )); } } Err(YamlError::ParseError(format!( @@ -513,4 +517,48 @@ deployments: YamlError::KeyShadowing("DuplicateDeployment".to_string()) ); } + + #[test] + fn test_parse_order_key() { + let yaml = r#" +deployments: test +"#; + let error = + Deployment::parse_order_key(vec![get_document(yaml)], "deployment1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployments field must be a map".to_string()) + ); + + let yaml = r#" +deployments: + - test +"#; + let error = + Deployment::parse_order_key(vec![get_document(yaml)], "deployment1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployments field must be a map".to_string()) + ); + + let yaml = r#" +deployments: + - test: test +"#; + let error = + Deployment::parse_order_key(vec![get_document(yaml)], "deployment1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployments field must be a map".to_string()) + ); + + let yaml = r#" +deployments: + deployment1: + order: order1 + scenario: scenario1 +"#; + let res = Deployment::parse_order_key(vec![get_document(yaml)], "deployment1").unwrap(); + assert_eq!(res, "order1"); + } } diff --git a/crates/settings/src/gui.rs b/crates/settings/src/gui.rs index 9a3dc567f..d8fde3098 100644 --- a/crates/settings/src/gui.rs +++ b/crates/settings/src/gui.rs @@ -270,6 +270,10 @@ impl Gui { deployment_keys.push(key.clone()); } } + } else { + return Err(YamlError::ParseError( + "deployments field must be a map in gui".to_string(), + )); } } } @@ -1452,4 +1456,127 @@ gui: assert_eq!(error, YamlError::KeyShadowing("deployment1".to_string())); } + + #[test] + fn test_parse_deployment_keys() { + let yaml = r#" +networks: + network1: + rpc: https://eth.llamarpc.com + chain-id: 1 +tokens: + token1: + address: 0x0000000000000000000000000000000000000001 + network: network1 + token2: + address: 0x0000000000000000000000000000000000000002 + network: network1 +gui: + name: test + description: test +"#; + + let error = Gui::parse_deployment_keys(vec![get_document(yaml)]).unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployments field missing in gui".to_string()) + ); + + let yaml = r#" +networks: + network1: + rpc: https://eth.llamarpc.com + chain-id: 1 +tokens: + token1: + address: 0x0000000000000000000000000000000000000001 + network: network1 + token2: + address: 0x0000000000000000000000000000000000000002 + network: network1 +gui: + name: test + description: test + deployments: test +"#; + + let error = Gui::parse_deployment_keys(vec![get_document(yaml)]).unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployments field must be a map in gui".to_string()) + ); + + let yaml = r#" +networks: + network1: + rpc: https://eth.llamarpc.com + chain-id: 1 +tokens: + token1: + address: 0x0000000000000000000000000000000000000001 + network: network1 + token2: + address: 0x0000000000000000000000000000000000000002 + network: network1 +gui: + name: test + description: test + deployments: + - test +"#; + + let error = Gui::parse_deployment_keys(vec![get_document(yaml)]).unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployments field must be a map in gui".to_string()) + ); + + let yaml = r#" +networks: + network1: + rpc: https://eth.llamarpc.com + chain-id: 1 +tokens: + token1: + address: 0x0000000000000000000000000000000000000001 + network: network1 + token2: + address: 0x0000000000000000000000000000000000000002 + network: network1 +gui: + name: test + description: test + deployments: + - test: test +"#; + + let error = Gui::parse_deployment_keys(vec![get_document(yaml)]).unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("deployments field must be a map in gui".to_string()) + ); + + let yaml = r#" +networks: + network1: + rpc: https://eth.llamarpc.com + chain-id: 1 +tokens: + token1: + address: 0x0000000000000000000000000000000000000001 + network: network1 + token2: + address: 0x0000000000000000000000000000000000000002 + network: network1 +gui: + name: test + description: test + deployments: + test: test + test2: test2 +"#; + + let keys = Gui::parse_deployment_keys(vec![get_document(yaml)]).unwrap(); + assert_eq!(keys, vec!["test".to_string(), "test2".to_string()]); + } } diff --git a/crates/settings/src/network.rs b/crates/settings/src/network.rs index c415eab61..6d3ab0ea7 100644 --- a/crates/settings/src/network.rs +++ b/crates/settings/src/network.rs @@ -113,6 +113,10 @@ impl Network { None, )?)?); } + } else { + return Err(YamlError::ParseError( + "networks field must be a map".to_string(), + )); } } Err(YamlError::ParseError(format!( @@ -357,4 +361,45 @@ networks: .unwrap_err(); assert_eq!(error, YamlError::KeyShadowing("mainnet".to_string())); } + + #[test] + fn test_parse_network_key() { + let yaml = r#" +networks: test +"#; + let error = Network::parse_rpc(vec![get_document(yaml)], "mainnet").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("networks field must be a map".to_string()) + ); + + let yaml = r#" +networks: + - test +"#; + let error = Network::parse_rpc(vec![get_document(yaml)], "mainnet").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("networks field must be a map".to_string()) + ); + + let yaml = r#" +networks: + - test: test +"#; + let error = Network::parse_rpc(vec![get_document(yaml)], "mainnet").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("networks field must be a map".to_string()) + ); + + let yaml = r#" +networks: + mainnet: + rpc: https://rpc.com + chain-id: 1 +"#; + let res = Network::parse_rpc(vec![get_document(yaml)], "mainnet").unwrap(); + assert_eq!(res, Url::parse("https://rpc.com").unwrap()); + } } diff --git a/crates/settings/src/order.rs b/crates/settings/src/order.rs index 0bed2e978..dd2495cb9 100644 --- a/crates/settings/src/order.rs +++ b/crates/settings/src/order.rs @@ -295,6 +295,10 @@ impl Order { } } } + } else { + return Err(YamlError::ParseError( + "orders field must be a map".to_string(), + )); } } @@ -1006,4 +1010,36 @@ orders: assert_eq!(error, YamlError::KeyShadowing("DuplicateOrder".to_string())); } + + #[test] + fn parse_network_key() { + let yaml = r#" +orders: test +"#; + let error = Order::parse_network_key(vec![get_document(yaml)], "order1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("orders field must be a map".to_string()) + ); + + let yaml = r#" +orders: + - test +"#; + let error = Order::parse_network_key(vec![get_document(yaml)], "order1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("orders field must be a map".to_string()) + ); + + let yaml = r#" +orders: + - test: test +"#; + let error = Order::parse_network_key(vec![get_document(yaml)], "order1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("orders field must be a map".to_string()) + ); + } } diff --git a/crates/settings/src/orderbook.rs b/crates/settings/src/orderbook.rs index ad58aa265..60dfb1be0 100644 --- a/crates/settings/src/orderbook.rs +++ b/crates/settings/src/orderbook.rs @@ -49,6 +49,10 @@ impl Orderbook { return require_string(orderbook_yaml, Some("network"), None) .or_else(|_| Ok(orderbook_key.to_string())); } + } else { + return Err(YamlError::ParseError( + "orderbooks field must be a map".to_string(), + )); } } Err(YamlError::ParseError(format!( @@ -484,4 +488,36 @@ orderbooks: let network_key = Orderbook::parse_network_key(documents, "mainnet").unwrap(); assert_eq!(network_key, "mainnet"); } + + #[test] + fn test_parse_network_key() { + let yaml = r#" +orderbooks: test +"#; + let error = Orderbook::parse_network_key(vec![get_document(yaml)], "order1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("orderbooks field must be a map".to_string()) + ); + + let yaml = r#" +orderbooks: + - test +"#; + let error = Orderbook::parse_network_key(vec![get_document(yaml)], "order1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("orderbooks field must be a map".to_string()) + ); + + let yaml = r#" +orderbooks: + - test: test +"#; + let error = Orderbook::parse_network_key(vec![get_document(yaml)], "order1").unwrap_err(); + assert_eq!( + error, + YamlError::ParseError("orderbooks field must be a map".to_string()) + ); + } } From ff1266790088189cda432eab1ec68962582ace37 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 22 Jan 2025 17:21:12 +0300 Subject: [PATCH 55/74] turn gui details method into a static one --- crates/js_api/src/gui/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/js_api/src/gui/mod.rs b/crates/js_api/src/gui/mod.rs index 2f87c83e8..d9a05e77c 100644 --- a/crates/js_api/src/gui/mod.rs +++ b/crates/js_api/src/gui/mod.rs @@ -147,9 +147,10 @@ impl DotrainOrderGui { } #[wasm_bindgen(js_name = "getGuiDetails")] - pub fn get_gui_details(&self) -> Result { + pub async fn get_gui_details(dotrain: String) -> Result { + let dotrain_order = DotrainOrder::new(dotrain, None).await?; let (name, description) = - Gui::parse_gui_details(self.dotrain_order.dotrain_yaml().documents.clone())?; + Gui::parse_gui_details(dotrain_order.dotrain_yaml().documents.clone())?; Ok(GuiDetails { name, description }) } } From f59e1f9d243626a5c401daf9951d43a85724595b Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 22 Jan 2025 17:21:19 +0300 Subject: [PATCH 56/74] update tests --- packages/orderbook/test/js_api/gui.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/orderbook/test/js_api/gui.test.ts b/packages/orderbook/test/js_api/gui.test.ts index 27c54aaa8..f0f3d6fba 100644 --- a/packages/orderbook/test/js_api/gui.test.ts +++ b/packages/orderbook/test/js_api/gui.test.ts @@ -365,8 +365,10 @@ describe('Rain Orderbook JS API Package Bindgen Tests - Gui', async function () const guiConfig = gui.getGuiConfig() as Gui; assert.equal(guiConfig.name, 'Fixed limit'); assert.equal(guiConfig.description, 'Fixed limit order strategy'); + }); - const guiDetails: GuiDetails = gui.getGuiDetails(); + it('should get gui details', async () => { + const guiDetails: GuiDetails = await DotrainOrderGui.getGuiDetails(dotrainWithGui); assert.equal(guiDetails.name, 'Fixed limit'); assert.equal(guiDetails.description, 'Fixed limit order strategy'); }); From 9efbd65eb707392266e561776bf5772c474a677e Mon Sep 17 00:00:00 2001 From: nino Date: Thu, 23 Jan 2025 12:54:50 +0400 Subject: [PATCH 57/74] Main page padding --- packages/webapp/src/routes/+layout.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index 377e9d86c..49157f25f 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -16,7 +16,7 @@
-
+
From 553fe09451a52a4f77c6bffe5558bbed1c2ee356 Mon Sep 17 00:00:00 2001 From: nino Date: Thu, 23 Jan 2025 13:18:44 +0400 Subject: [PATCH 58/74] Make order page responsive --- .../src/lib/components/detail/OrderDetail.svelte | 4 +++- .../lib/components/detail/TanstackPageContentDetail.svelte | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte index 208dd4b48..b1f4360df 100644 --- a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte @@ -73,7 +73,9 @@ -
+
Order diff --git a/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte b/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte index d45ec7a72..8f2357a22 100644 --- a/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte @@ -21,7 +21,7 @@
-
+
From 8716d1f3873774e9fb85a3180e0470f5a523d37e Mon Sep 17 00:00:00 2001 From: nino Date: Thu, 23 Jan 2025 14:50:26 +0400 Subject: [PATCH 59/74] Order Quotes table overflow --- .../src/lib/components/detail/TanstackOrderQuote.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-components/src/lib/components/detail/TanstackOrderQuote.svelte b/packages/ui-components/src/lib/components/detail/TanstackOrderQuote.svelte index 157b9a9b1..265bd9067 100644 --- a/packages/ui-components/src/lib/components/detail/TanstackOrderQuote.svelte +++ b/packages/ui-components/src/lib/components/detail/TanstackOrderQuote.svelte @@ -91,7 +91,7 @@
-
+
Pair Maximum Output From df90cc41ae7194b844f4bbde98576135ab613d45 Mon Sep 17 00:00:00 2001 From: nino Date: Thu, 23 Jan 2025 15:08:03 +0400 Subject: [PATCH 60/74] Border to close button --- packages/webapp/src/lib/components/Sidebar.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webapp/src/lib/components/Sidebar.svelte b/packages/webapp/src/lib/components/Sidebar.svelte index 77adf4c41..f914833d0 100644 --- a/packages/webapp/src/lib/components/Sidebar.svelte +++ b/packages/webapp/src/lib/components/Sidebar.svelte @@ -61,7 +61,7 @@ {#if !sideBarHidden} (sideBarHidden = true)} /> {/if} From 1ba03b64f529ccdb2bc4e87dc646d62587f6e129 Mon Sep 17 00:00:00 2001 From: nino Date: Thu, 23 Jan 2025 15:35:39 +0400 Subject: [PATCH 61/74] ButtonVaultLink structure on responsive --- .../ui-components/src/lib/components/ButtonVaultLink.svelte | 2 +- .../lib/components/detail/TanstackPageContentDetail.svelte | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ui-components/src/lib/components/ButtonVaultLink.svelte b/packages/ui-components/src/lib/components/ButtonVaultLink.svelte index ba43689fd..e310475ac 100644 --- a/packages/ui-components/src/lib/components/ButtonVaultLink.svelte +++ b/packages/ui-components/src/lib/components/ButtonVaultLink.svelte @@ -18,7 +18,7 @@ on:click={() => goto(`/vaults/${subgraphName}-${tokenVault.id}`)} >
-
+
ID: {bigintStringToHex(tokenVault.vaultId)} diff --git a/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte b/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte index 8f2357a22..cb859b088 100644 --- a/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/TanstackPageContentDetail.svelte @@ -22,10 +22,10 @@
-
+
-
+
From 0610083ade48e29db1ce8665c44802d198319fe8 Mon Sep 17 00:00:00 2001 From: nino Date: Thu, 23 Jan 2025 15:43:49 +0400 Subject: [PATCH 62/74] Tooltip whitespace --- packages/ui-components/src/lib/components/Hash.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-components/src/lib/components/Hash.svelte b/packages/ui-components/src/lib/components/Hash.svelte index c223c3d99..b7faca74a 100644 --- a/packages/ui-components/src/lib/components/Hash.svelte +++ b/packages/ui-components/src/lib/components/Hash.svelte @@ -74,7 +74,7 @@ {/if} {#if shorten} - +
{#if type === HashType.Wallet} From 30d327d7cb643f71e8b751bca9d7b650809052dd Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Thu, 23 Jan 2025 13:42:17 +0100 Subject: [PATCH 63/74] add new functions --- .vscode/settings.json | 1 + crates/js_api/src/gui/mod.rs | 34 +++++++++++--- crates/settings/src/gui.rs | 46 ++++++++++++++++++- crates/settings/src/yaml/dotrain.rs | 8 +++- packages/orderbook/test/js_api/gui.test.ts | 23 ++++++++-- .../deployment/DeploymentSteps.svelte | 8 ++-- 6 files changed, 103 insertions(+), 17 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b8dfff267..606cd4bee 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,7 @@ "svelte.enable-ts-plugin": true, "rust-analyzer.linkedProjects": ["./Cargo.toml", "tauri-app/src-tauri/Cargo.toml"], + "rust-analyzer.cargo.target": "wasm32-unknown-unknown", "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer", diff --git a/crates/js_api/src/gui/mod.rs b/crates/js_api/src/gui/mod.rs index d9a05e77c..628a779f0 100644 --- a/crates/js_api/src/gui/mod.rs +++ b/crates/js_api/src/gui/mod.rs @@ -39,11 +39,11 @@ pub struct TokenInfo { impl_all_wasm_traits!(TokenInfo); #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Tsify)] -pub struct GuiDetails { +pub struct NameAndDescription { name: String, description: String, } -impl_all_wasm_traits!(GuiDetails); +impl_all_wasm_traits!(NameAndDescription); #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[wasm_bindgen] @@ -146,12 +146,34 @@ impl DotrainOrderGui { Ok(token_info) } - #[wasm_bindgen(js_name = "getGuiDetails")] - pub async fn get_gui_details(dotrain: String) -> Result { + #[wasm_bindgen(js_name = "getStrategyDetails")] + pub async fn get_strategy_details(dotrain: String) -> Result { let dotrain_order = DotrainOrder::new(dotrain, None).await?; let (name, description) = - Gui::parse_gui_details(dotrain_order.dotrain_yaml().documents.clone())?; - Ok(GuiDetails { name, description }) + Gui::parse_strategy_details(dotrain_order.dotrain_yaml().documents.clone())?; + Ok(NameAndDescription { name, description }) + } + + #[wasm_bindgen(js_name = "getDeploymentDetails")] + pub async fn get_deployment_details( + dotrain: String, + deployment_key: String, + ) -> Result { + let dotrain_order = DotrainOrder::new(dotrain, None).await?; + let gui = dotrain_order + .dotrain_yaml() + .get_gui()? + .ok_or(GuiError::GuiConfigNotFound)?; + + let deployment = gui + .deployments + .get(&deployment_key) + .ok_or(GuiError::DeploymentNotFound(deployment_key))?; + + Ok(NameAndDescription { + name: deployment.name.clone(), + description: deployment.description.clone(), + }) } } diff --git a/crates/settings/src/gui.rs b/crates/settings/src/gui.rs index 9a3dc567f..f80c68e88 100644 --- a/crates/settings/src/gui.rs +++ b/crates/settings/src/gui.rs @@ -309,7 +309,7 @@ impl Gui { Ok(None) } - pub fn parse_gui_details( + pub fn parse_strategy_details( documents: Vec>>, ) -> Result<(String, String), YamlError> { for document in documents { @@ -337,6 +337,50 @@ impl Gui { } Err(YamlError::ParseError("gui details not found".to_string())) } + pub fn parse_deployment_details( + documents: Vec>>, + deployment_key: &str, + ) -> Result<(String, String), YamlError> { + for document in documents { + let document_read = document.read().map_err(|_| YamlError::ReadLockError)?; + + if let Some(gui) = optional_hash(&document_read, "gui") { + let deployments = gui + .get(&StrictYaml::String("deployments".to_string())) + .ok_or(YamlError::ParseError( + "deployments field missing in gui".to_string(), + ))? + .as_hash() + .ok_or(YamlError::ParseError( + "deployments field must be a map in gui".to_string(), + ))?; + + for (deployment_name, deployment_yaml) in deployments { + let deployment_name = deployment_name.as_str().unwrap_or_default().to_string(); + + if deployment_name == deployment_key { + let name = require_string( + deployment_yaml, + Some("name"), + Some(format!( + "name string missing in gui deployment: {deployment_name}" + )), + )?; + + let description = require_string( + deployment_yaml, + Some("description"), + Some(format!( + "description string missing in gui deployment: {deployment_name}" + )), + )?; + return Ok((name, description)); + } + } + } + } + Err(YamlError::ParseError("gui details not found".to_string())) + } } impl YamlParseableValue for Gui { diff --git a/crates/settings/src/yaml/dotrain.rs b/crates/settings/src/yaml/dotrain.rs index 4986623f8..87ff3b8b5 100644 --- a/crates/settings/src/yaml/dotrain.rs +++ b/crates/settings/src/yaml/dotrain.rs @@ -377,10 +377,16 @@ mod tests { assert_eq!(select_tokens.len(), 1); assert_eq!(select_tokens[0], "token2"); - let (name, description) = Gui::parse_gui_details(dotrain_yaml.documents.clone()).unwrap(); + let (name, description) = + Gui::parse_strategy_details(dotrain_yaml.documents.clone()).unwrap(); assert_eq!(name, "Test gui"); assert_eq!(description, "Test description"); + let (name, description) = + Gui::parse_deployment_details(dotrain_yaml.documents.clone(), "deployment1").unwrap(); + assert_eq!(name, "Test deployment"); + assert_eq!(description, "Test description"); + let deployment_keys = Gui::parse_deployment_keys(dotrain_yaml.documents.clone()).unwrap(); assert_eq!(deployment_keys.len(), 1); assert_eq!(deployment_keys[0], "deployment1"); diff --git a/packages/orderbook/test/js_api/gui.test.ts b/packages/orderbook/test/js_api/gui.test.ts index f0f3d6fba..62a23c218 100644 --- a/packages/orderbook/test/js_api/gui.test.ts +++ b/packages/orderbook/test/js_api/gui.test.ts @@ -11,7 +11,7 @@ import { DepositCalldataResult, Gui, GuiDeployment, - GuiDetails, + NameAndDescription, TokenDeposit, TokenInfo } from '../../dist/types/js_api.js'; @@ -367,10 +367,23 @@ describe('Rain Orderbook JS API Package Bindgen Tests - Gui', async function () assert.equal(guiConfig.description, 'Fixed limit order strategy'); }); - it('should get gui details', async () => { - const guiDetails: GuiDetails = await DotrainOrderGui.getGuiDetails(dotrainWithGui); - assert.equal(guiDetails.name, 'Fixed limit'); - assert.equal(guiDetails.description, 'Fixed limit order strategy'); + it('should get strategy details', async () => { + const strategyDetails: NameAndDescription = + await DotrainOrderGui.getStrategyDetails(dotrainWithGui); + assert.equal(strategyDetails.name, 'Fixed limit'); + assert.equal(strategyDetails.description, 'Fixed limit order strategy'); + }); + + it('should get deployment details', async () => { + const deploymentDetails: NameAndDescription = await DotrainOrderGui.getDeploymentDetails( + dotrainWithGui, + 'some-deployment' + ); + assert.equal(deploymentDetails.name, 'Buy WETH with USDC on Base.'); + assert.equal( + deploymentDetails.description, + 'Buy WETH with USDC for fixed price on Base network.' + ); }); it('should get token infos', async () => { diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index 4b48e06ed..74f6d26d4 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -12,7 +12,7 @@ type DepositAndAddOrderCalldataResult, type GuiDeposit, type GuiFieldDefinition, - type GuiDetails, + type NameAndDescription, type GuiDeployment, type OrderIO } from '@rainlanguage/orderbook/js_api'; @@ -54,7 +54,7 @@ let allDepositFields: GuiDeposit[] = []; let allTokenOutputs: OrderIO[] = []; let allTokensSelected: boolean = false; - let guiDetails: GuiDetails; + let guiDetails: NameAndDescription; let inputVaultIds: string[] = []; let outputVaultIds: string[] = []; @@ -132,10 +132,10 @@ handleDeploymentChange(selectedDeployment as string); } - function getGuiDetails() { + async function getGuiDetails() { if (!gui) return; try { - guiDetails = gui.getGuiDetails(); + guiDetails = await DotrainOrderGui.getStrategyDetails(dotrain); } catch (e) { error = DeploymentStepErrors.NO_GUI_DETAILS; errorDetails = e instanceof Error ? e.message : 'Unknown error'; From b791dd0c27d499fa568797ef6d5d3ea090eaf85c Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Thu, 23 Jan 2025 17:56:46 +0100 Subject: [PATCH 64/74] update --- .../src/lib/__mocks__/MockComponent.svelte | 6 + .../webapp/src/lib/__mocks__/MockComponent.ts | 3 + .../webapp/src/lib/components/Sidebar.svelte | 192 +++++++++++------- packages/webapp/src/routes/+layout.svelte | 5 +- packages/webapp/src/tests/Sidebar.test.ts | 111 ++++++++++ packages/webapp/test-setup.ts | 4 + packages/webapp/vite.config.ts | 4 +- 7 files changed, 252 insertions(+), 73 deletions(-) create mode 100644 packages/webapp/src/lib/__mocks__/MockComponent.svelte create mode 100644 packages/webapp/src/lib/__mocks__/MockComponent.ts create mode 100644 packages/webapp/src/tests/Sidebar.test.ts diff --git a/packages/webapp/src/lib/__mocks__/MockComponent.svelte b/packages/webapp/src/lib/__mocks__/MockComponent.svelte new file mode 100644 index 000000000..47d0e6eb2 --- /dev/null +++ b/packages/webapp/src/lib/__mocks__/MockComponent.svelte @@ -0,0 +1,6 @@ + diff --git a/packages/webapp/src/lib/__mocks__/MockComponent.ts b/packages/webapp/src/lib/__mocks__/MockComponent.ts new file mode 100644 index 000000000..eb2e74c0d --- /dev/null +++ b/packages/webapp/src/lib/__mocks__/MockComponent.ts @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; + +export const props = writable(); diff --git a/packages/webapp/src/lib/components/Sidebar.svelte b/packages/webapp/src/lib/components/Sidebar.svelte index e9e459719..bdcb00080 100644 --- a/packages/webapp/src/lib/components/Sidebar.svelte +++ b/packages/webapp/src/lib/components/Sidebar.svelte @@ -4,10 +4,17 @@ SidebarGroup, SidebarItem, SidebarWrapper, - SidebarBrand + SidebarBrand, + CloseButton, + Button } from 'flowbite-svelte'; - import { WalletSolid, ReceiptSolid, FileLinesSolid, PlusOutline } from 'flowbite-svelte-icons'; - import { page } from '$app/stores'; + import { + WalletSolid, + ReceiptSolid, + FileLinesSolid, + PlusOutline, + BarsSolid + } from 'flowbite-svelte-icons'; import { ButtonDarkMode, IconTelegram, @@ -17,72 +24,119 @@ } from '@rainlanguage/ui-components'; import WalletConnect from './WalletConnect.svelte'; + import { onMount } from 'svelte'; export let colorTheme; + export let page; + let sideBarHidden: boolean = false; + let breakPoint: number = 1024; + let width: number; + $: sideBarHidden = width < breakPoint; + onMount(() => { + sideBarHidden = width < breakPoint; + }); + + const toggleSide = () => { + if (width < breakPoint) { + sideBarHidden = !sideBarHidden; + } + }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+ {#if sideBarHidden} + + {/if} + + {#if !sideBarHidden} + (sideBarHidden = true)} + /> + {/if} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/packages/webapp/src/routes/+layout.svelte b/packages/webapp/src/routes/+layout.svelte index f59628641..8670da8a6 100644 --- a/packages/webapp/src/routes/+layout.svelte +++ b/packages/webapp/src/routes/+layout.svelte @@ -10,6 +10,7 @@ import { type Chain } from '@wagmi/core/chains'; import { PUBLIC_WALLETCONNECT_PROJECT_ID } from '$env/static/public'; + import { page } from '$app/stores'; const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -35,8 +36,8 @@
- -
+ +
diff --git a/packages/webapp/src/tests/Sidebar.test.ts b/packages/webapp/src/tests/Sidebar.test.ts new file mode 100644 index 000000000..d48f8bed7 --- /dev/null +++ b/packages/webapp/src/tests/Sidebar.test.ts @@ -0,0 +1,111 @@ +import { render, cleanup, screen, fireEvent, waitFor } from '@testing-library/svelte'; +import { vi, describe, it, expect, afterEach } from 'vitest'; +import Sidebar from '../lib/components/Sidebar.svelte'; +import { writable } from 'svelte/store'; + +vi.mock('@rainlanguage/ui-components', async () => { + const MockComponent = (await import('../lib/__mocks__/MockComponent.svelte')).default; + return { + ButtonDarkMode: MockComponent, + logoLight: 'mock-logo-light.svg', + logoDark: 'mock-logo-dark.svg', + IconTelegram: MockComponent, + IconExternalLink: MockComponent + }; +}); + +vi.mock('svelte/store', () => { + return { + writable: () => ({ + subscribe: () => { + return () => {}; + }, + set: vi.fn() + }) + }; +}); + +const mockWindowSize = (width: number) => { + Object.defineProperty(window, 'innerWidth', { writable: true, configurable: true, value: width }); + window.dispatchEvent(new Event('resize')); +}; + +describe('Sidebar', () => { + afterEach(() => { + cleanup(); + }); + + it('renders correctly with colorTheme store', async () => { + const mockColorTheme = writable('light'); + const mockPage = { + url: { pathname: '/' } + }; + const { container } = render(Sidebar, { + props: { + colorTheme: mockColorTheme, + page: mockPage + } + }); + + expect(container).toBeTruthy(); + }); + it('renders menu bars button when screen width is small', () => { + // Mock small screen width + mockWindowSize(500); + const mockColorTheme = writable('light'); + const mockPage = { + url: { pathname: '/' } + }; + render(Sidebar, { colorTheme: mockColorTheme, page: mockPage }); + + const barsButton = screen.getByTestId('sidebar-bars'); + expect(barsButton).toBeInTheDocument(); + }); + it('shows sidebar on wide screen', () => { + mockWindowSize(1025); + const mockColorTheme = writable('light'); + const mockPage = { + url: { pathname: '/' } + }; + render(Sidebar, { colorTheme: mockColorTheme, page: mockPage }); + + expect(screen.getByTestId('sidebar')).toBeInTheDocument(); + }); + it('renders sidebar when bars button is clicked', async () => { + // Mock small screen width + mockWindowSize(500); + const mockColorTheme = writable('light'); + const mockPage = { + url: { pathname: '/' } + }; + render(Sidebar, { colorTheme: mockColorTheme, page: mockPage }); + + const barsButton = screen.getByTestId('sidebar-bars'); + fireEvent.click(barsButton); + + await waitFor(() => { + const sidebar = screen.getByTestId('sidebar'); + expect(sidebar.hidden).toBe(false); + }); + }); + it('hides sidebar when close button is clicked', async () => { + mockWindowSize(500); + const mockColorTheme = writable('light'); + const mockPage = { + url: { pathname: '/' } + }; + render(Sidebar, { colorTheme: mockColorTheme, page: mockPage }); + + const barsButton = screen.getByTestId('sidebar-bars'); + await fireEvent.click(barsButton); + await waitFor(() => { + expect(screen.getByTestId('sidebar')).toBeInTheDocument(); + }); + const closeButton = screen.getByTestId('close-button'); + await fireEvent.click(closeButton); + await waitFor(() => { + const sidebar = screen.getByTestId('sidebar'); + expect(sidebar.hidden).toBe(true); + }); + }); +}); diff --git a/packages/webapp/test-setup.ts b/packages/webapp/test-setup.ts index 243a07ca2..d24aad058 100644 --- a/packages/webapp/test-setup.ts +++ b/packages/webapp/test-setup.ts @@ -4,3 +4,7 @@ import { vi } from 'vitest'; vi.mock('@reown/appkit', () => ({ default: vi.fn() })); +// Mock for codemirror-rainlang +vi.mock('codemirror-rainlang', () => ({ + RainlangLR: vi.fn() +})); diff --git a/packages/webapp/vite.config.ts b/packages/webapp/vite.config.ts index 28c56593b..848d89537 100644 --- a/packages/webapp/vite.config.ts +++ b/packages/webapp/vite.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from 'vitest/config'; import { sveltekit } from '@sveltejs/kit/vite'; -import { loadEnv } from 'vite'; +import {loadEnv} from "vite"; export default defineConfig(({ mode }) => ({ assetsInclude: ['**/*.rain'], @@ -27,7 +27,7 @@ export default defineConfig(({ mode }) => ({ server: { deps: { inline: [ - /@reown\/appkit/ + /@reown\/appkit/, /@tanstack\/svelte-query/ ] } }, From 62f55ae9e01b9e6815d00026ee0725424382e44f Mon Sep 17 00:00:00 2001 From: highonhopium Date: Thu, 23 Jan 2025 19:43:13 +0000 Subject: [PATCH 65/74] more env --- .github/workflows/tauri-release.yml | 2 ++ .github/workflows/tauri.yaml | 2 ++ .github/workflows/test-ui-components.yaml | 2 ++ .github/workflows/test-webapp.yaml | 2 ++ 4 files changed, 8 insertions(+) diff --git a/.github/workflows/tauri-release.yml b/.github/workflows/tauri-release.yml index 1259c16b5..a84fcc80c 100644 --- a/.github/workflows/tauri-release.yml +++ b/.github/workflows/tauri-release.yml @@ -66,6 +66,8 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@v2 - run: ./prep-all.sh + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - run: nix develop .#tauri-shell -c ob-tauri-unit-test diff --git a/.github/workflows/tauri.yaml b/.github/workflows/tauri.yaml index 0a1540a00..724b339c6 100644 --- a/.github/workflows/tauri.yaml +++ b/.github/workflows/tauri.yaml @@ -58,6 +58,8 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@v2 - run: ./prep-all.sh + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - run: nix develop .#tauri-shell -c ob-tauri-unit-test diff --git a/.github/workflows/test-ui-components.yaml b/.github/workflows/test-ui-components.yaml index a47f0fb6c..ed78f1f04 100644 --- a/.github/workflows/test-ui-components.yaml +++ b/.github/workflows/test-ui-components.yaml @@ -20,6 +20,8 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@main - run: ./prep-all.sh + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - run: nix develop -c npm run svelte-lint-format-check working-directory: packages/ui-components diff --git a/.github/workflows/test-webapp.yaml b/.github/workflows/test-webapp.yaml index 2da6e78a2..1f0143c18 100644 --- a/.github/workflows/test-webapp.yaml +++ b/.github/workflows/test-webapp.yaml @@ -20,6 +20,8 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@main - run: ./prep-all.sh + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} - run: nix develop -c npm run svelte-lint-format-check working-directory: packages/webapp From 0906bac83772d1e0539008364c795d020b8b5c57 Mon Sep 17 00:00:00 2001 From: nino Date: Fri, 24 Jan 2025 11:39:18 +0400 Subject: [PATCH 66/74] Filters layout fix --- .../src/lib/components/ListViewOrderbookFilters.svelte | 9 ++++++--- .../src/lib/components/input/InputOrderHash.svelte | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte b/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte index 50bd736ca..9be01f768 100644 --- a/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte +++ b/packages/ui-components/src/lib/components/ListViewOrderbookFilters.svelte @@ -20,14 +20,17 @@ export let isOrdersPage: boolean; -
+
{#if isEmpty($settings?.networks)} - + No networks added to settings {:else} {#if isVaultsPage} -
+
{/if} diff --git a/packages/ui-components/src/lib/components/input/InputOrderHash.svelte b/packages/ui-components/src/lib/components/input/InputOrderHash.svelte index fa636450d..b560cdd4e 100644 --- a/packages/ui-components/src/lib/components/input/InputOrderHash.svelte +++ b/packages/ui-components/src/lib/components/input/InputOrderHash.svelte @@ -13,7 +13,7 @@
-
+
Date: Fri, 24 Jan 2025 11:48:49 +0400 Subject: [PATCH 67/74] change 'balance' position --- .../src/lib/components/detail/OrderDetail.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte index b1f4360df..b91c25c62 100644 --- a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte @@ -119,7 +119,7 @@ Input vaults -
+
Balance
@@ -133,7 +133,7 @@ Output vaults -
+
Balance
From d355a0c8e52b7b5d3506d18bafa8a98cff9fbfa1 Mon Sep 17 00:00:00 2001 From: nino Date: Fri, 24 Jan 2025 12:11:45 +0400 Subject: [PATCH 68/74] Update 'balance' position --- .../src/lib/components/ButtonVaultLink.svelte | 11 ++++++++--- .../src/lib/components/detail/OrderDetail.svelte | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/ui-components/src/lib/components/ButtonVaultLink.svelte b/packages/ui-components/src/lib/components/ButtonVaultLink.svelte index e310475ac..8e1a532c7 100644 --- a/packages/ui-components/src/lib/components/ButtonVaultLink.svelte +++ b/packages/ui-components/src/lib/components/ButtonVaultLink.svelte @@ -25,9 +25,14 @@ {tokenVault.token.name} ({tokenVault.token.symbol}) - - {formatUnits(BigInt(tokenVault.balance), parseInt(tokenVault.token.decimals || '18'))} - +
+
+ Balance +
+ + {formatUnits(BigInt(tokenVault.balance), parseInt(tokenVault.token.decimals || '18'))} + +
diff --git a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte index b91c25c62..d65db18b0 100644 --- a/packages/ui-components/src/lib/components/detail/OrderDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/OrderDetail.svelte @@ -119,7 +119,7 @@ Input vaults -
+
@@ -133,7 +133,7 @@ Output vaults -
+
Balance
From 0312e73a255fcab3a9b8a4d4b2189a9f5da69891 Mon Sep 17 00:00:00 2001 From: highonhopium Date: Fri, 24 Jan 2025 08:53:12 +0000 Subject: [PATCH 69/74] more env --- .github/workflows/test-webapp.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test-webapp.yaml b/.github/workflows/test-webapp.yaml index 1f0143c18..013e8f5f3 100644 --- a/.github/workflows/test-webapp.yaml +++ b/.github/workflows/test-webapp.yaml @@ -25,5 +25,10 @@ jobs: - run: nix develop -c npm run svelte-lint-format-check working-directory: packages/webapp + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} + - run: nix develop -c npm run test working-directory: packages/webapp + env: + PUBLIC_WALLETCONNECT_PROJECT_ID: ${{ secrets.WALLETCONNECT_PROJECT_ID }} From 543357364f7fcbb67ed9b2a2f2f123357d0e39e2 Mon Sep 17 00:00:00 2001 From: findolor Date: Fri, 24 Jan 2025 12:12:00 +0300 Subject: [PATCH 70/74] parse all deployments in gui in one go --- crates/js_api/src/gui/mod.rs | 39 ++++++------------- crates/settings/src/gui.rs | 60 +++++++++++++++++------------ crates/settings/src/yaml/dotrain.rs | 23 ++++++----- 3 files changed, 62 insertions(+), 60 deletions(-) diff --git a/crates/js_api/src/gui/mod.rs b/crates/js_api/src/gui/mod.rs index 628a779f0..acae92bcf 100644 --- a/crates/js_api/src/gui/mod.rs +++ b/crates/js_api/src/gui/mod.rs @@ -4,7 +4,10 @@ use base64::{engine::general_purpose::URL_SAFE, Engine}; use flate2::{read::GzDecoder, write::GzEncoder, Compression}; use rain_orderbook_app_settings::{ deployment::Deployment, - gui::{Gui, GuiDeployment, GuiFieldDefinition, GuiPreset, ParseGuiConfigSourceError}, + gui::{ + Gui, GuiDeployment, GuiFieldDefinition, GuiPreset, NameAndDescription, + ParseGuiConfigSourceError, + }, network::Network, order::Order, yaml::YamlError, @@ -39,11 +42,8 @@ pub struct TokenInfo { impl_all_wasm_traits!(TokenInfo); #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Tsify)] -pub struct NameAndDescription { - name: String, - description: String, -} -impl_all_wasm_traits!(NameAndDescription); +pub struct DeploymentDetails(BTreeMap); +impl_all_wasm_traits!(DeploymentDetails); #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[wasm_bindgen] @@ -149,31 +149,16 @@ impl DotrainOrderGui { #[wasm_bindgen(js_name = "getStrategyDetails")] pub async fn get_strategy_details(dotrain: String) -> Result { let dotrain_order = DotrainOrder::new(dotrain, None).await?; - let (name, description) = - Gui::parse_strategy_details(dotrain_order.dotrain_yaml().documents.clone())?; - Ok(NameAndDescription { name, description }) + let details = Gui::parse_strategy_details(dotrain_order.dotrain_yaml().documents.clone())?; + Ok(details) } #[wasm_bindgen(js_name = "getDeploymentDetails")] - pub async fn get_deployment_details( - dotrain: String, - deployment_key: String, - ) -> Result { + pub async fn get_deployment_details(dotrain: String) -> Result { let dotrain_order = DotrainOrder::new(dotrain, None).await?; - let gui = dotrain_order - .dotrain_yaml() - .get_gui()? - .ok_or(GuiError::GuiConfigNotFound)?; - - let deployment = gui - .deployments - .get(&deployment_key) - .ok_or(GuiError::DeploymentNotFound(deployment_key))?; - - Ok(NameAndDescription { - name: deployment.name.clone(), - description: deployment.description.clone(), - }) + let deployment_details = + Gui::parse_deployment_details(dotrain_order.dotrain_yaml().documents.clone())?; + Ok(DeploymentDetails(deployment_details.into_iter().collect())) } } diff --git a/crates/settings/src/gui.rs b/crates/settings/src/gui.rs index f80c68e88..733767b04 100644 --- a/crates/settings/src/gui.rs +++ b/crates/settings/src/gui.rs @@ -248,6 +248,15 @@ pub struct Gui { #[cfg(target_family = "wasm")] impl_all_wasm_traits!(Gui); +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] +#[cfg_attr(target_family = "wasm", derive(Tsify))] +pub struct NameAndDescription { + pub name: String, + pub description: String, +} +#[cfg(target_family = "wasm")] +impl_all_wasm_traits!(NameAndDescription); + impl Gui { pub fn parse_deployment_keys( documents: Vec>>, @@ -311,7 +320,7 @@ impl Gui { pub fn parse_strategy_details( documents: Vec>>, - ) -> Result<(String, String), YamlError> { + ) -> Result { for document in documents { let document_read = document.read().map_err(|_| YamlError::ReadLockError)?; @@ -332,15 +341,17 @@ impl Gui { Some("description field must be a string in gui".to_string()), )?; - return Ok((name, description)); + return Ok(NameAndDescription { name, description }); } } Err(YamlError::ParseError("gui details not found".to_string())) } + pub fn parse_deployment_details( documents: Vec>>, - deployment_key: &str, - ) -> Result<(String, String), YamlError> { + ) -> Result, YamlError> { + let mut deployment_details = HashMap::new(); + for document in documents { let document_read = document.read().map_err(|_| YamlError::ReadLockError)?; @@ -355,31 +366,32 @@ impl Gui { "deployments field must be a map in gui".to_string(), ))?; - for (deployment_name, deployment_yaml) in deployments { - let deployment_name = deployment_name.as_str().unwrap_or_default().to_string(); + for (key_yaml, deployment_yaml) in deployments { + let deployment_key = key_yaml.as_str().unwrap_or_default().to_string(); - if deployment_name == deployment_key { - let name = require_string( - deployment_yaml, - Some("name"), - Some(format!( - "name string missing in gui deployment: {deployment_name}" - )), - )?; + let name = require_string( + deployment_yaml, + Some("name"), + Some(format!( + "name string missing in gui deployment: {deployment_key}" + )), + )?; - let description = require_string( - deployment_yaml, - Some("description"), - Some(format!( - "description string missing in gui deployment: {deployment_name}" - )), - )?; - return Ok((name, description)); - } + let description = require_string( + deployment_yaml, + Some("description"), + Some(format!( + "description string missing in gui deployment: {deployment_key}" + )), + )?; + + deployment_details + .insert(deployment_key, NameAndDescription { name, description }); } } } - Err(YamlError::ParseError("gui details not found".to_string())) + + Ok(deployment_details) } } diff --git a/crates/settings/src/yaml/dotrain.rs b/crates/settings/src/yaml/dotrain.rs index 87ff3b8b5..6b67c2e20 100644 --- a/crates/settings/src/yaml/dotrain.rs +++ b/crates/settings/src/yaml/dotrain.rs @@ -377,15 +377,20 @@ mod tests { assert_eq!(select_tokens.len(), 1); assert_eq!(select_tokens[0], "token2"); - let (name, description) = - Gui::parse_strategy_details(dotrain_yaml.documents.clone()).unwrap(); - assert_eq!(name, "Test gui"); - assert_eq!(description, "Test description"); - - let (name, description) = - Gui::parse_deployment_details(dotrain_yaml.documents.clone(), "deployment1").unwrap(); - assert_eq!(name, "Test deployment"); - assert_eq!(description, "Test description"); + let details = Gui::parse_strategy_details(dotrain_yaml.documents.clone()).unwrap(); + assert_eq!(details.name, "Test gui"); + assert_eq!(details.description, "Test description"); + + let deployment_details = + Gui::parse_deployment_details(dotrain_yaml.documents.clone()).unwrap(); + assert_eq!( + deployment_details.get("deployment1").unwrap().name, + "Test deployment" + ); + assert_eq!( + deployment_details.get("deployment1").unwrap().description, + "Test description" + ); let deployment_keys = Gui::parse_deployment_keys(dotrain_yaml.documents.clone()).unwrap(); assert_eq!(deployment_keys.len(), 1); From e347e50e632388a324a0443aab8cb78c6cc1dd4d Mon Sep 17 00:00:00 2001 From: findolor Date: Fri, 24 Jan 2025 12:12:06 +0300 Subject: [PATCH 71/74] update tests --- packages/orderbook/test/js_api/gui.test.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/orderbook/test/js_api/gui.test.ts b/packages/orderbook/test/js_api/gui.test.ts index 62a23c218..bd0fb51ef 100644 --- a/packages/orderbook/test/js_api/gui.test.ts +++ b/packages/orderbook/test/js_api/gui.test.ts @@ -6,6 +6,7 @@ import { AllFieldValuesResult, AllowancesResult, ApprovalCalldataResult, + DeploymentDetails, DeploymentKeys, DepositAndAddOrderCalldataResult, DepositCalldataResult, @@ -375,15 +376,15 @@ describe('Rain Orderbook JS API Package Bindgen Tests - Gui', async function () }); it('should get deployment details', async () => { - const deploymentDetails: NameAndDescription = await DotrainOrderGui.getDeploymentDetails( - dotrainWithGui, - 'some-deployment' - ); - assert.equal(deploymentDetails.name, 'Buy WETH with USDC on Base.'); - assert.equal( - deploymentDetails.description, - 'Buy WETH with USDC for fixed price on Base network.' - ); + const deploymentDetails: DeploymentDetails = + await DotrainOrderGui.getDeploymentDetails(dotrainWithGui); + const entries = Array.from(deploymentDetails.entries()); + assert.equal(entries[0][0], 'other-deployment'); + assert.equal(entries[0][1].name, 'Test test'); + assert.equal(entries[0][1].description, 'Test test test'); + assert.equal(entries[1][0], 'some-deployment'); + assert.equal(entries[1][1].name, 'Buy WETH with USDC on Base.'); + assert.equal(entries[1][1].description, 'Buy WETH with USDC for fixed price on Base network.'); }); it('should get token infos', async () => { From fe823cf15d8999258510e3dc3548658afddb0e3e Mon Sep 17 00:00:00 2001 From: findolor Date: Fri, 24 Jan 2025 12:12:25 +0300 Subject: [PATCH 72/74] remove rust target settings --- .vscode/settings.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 606cd4bee..b8dfff267 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,6 @@ "svelte.enable-ts-plugin": true, "rust-analyzer.linkedProjects": ["./Cargo.toml", "tauri-app/src-tauri/Cargo.toml"], - "rust-analyzer.cargo.target": "wasm32-unknown-unknown", "[rust]": { "editor.defaultFormatter": "rust-lang.rust-analyzer", From ba69ee956bee5a29e6ae77ccc9fe050b73654e9e Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Fri, 24 Jan 2025 10:48:47 +0100 Subject: [PATCH 73/74] fix gui test --- packages/orderbook/test/js_api/gui.test.ts | 3 ++- .../src/__tests__/VaultDetail.test.ts | 12 +++--------- .../components/deployment/DeploymentSteps.svelte | 4 ++-- .../src/lib/components/detail/VaultDetail.svelte | 14 ++++++++++++-- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/orderbook/test/js_api/gui.test.ts b/packages/orderbook/test/js_api/gui.test.ts index 27c54aaa8..de94d88e8 100644 --- a/packages/orderbook/test/js_api/gui.test.ts +++ b/packages/orderbook/test/js_api/gui.test.ts @@ -12,6 +12,7 @@ import { Gui, GuiDeployment, GuiDetails, + NameAndDescription, TokenDeposit, TokenInfo } from '../../dist/types/js_api.js'; @@ -366,7 +367,7 @@ describe('Rain Orderbook JS API Package Bindgen Tests - Gui', async function () assert.equal(guiConfig.name, 'Fixed limit'); assert.equal(guiConfig.description, 'Fixed limit order strategy'); - const guiDetails: GuiDetails = gui.getGuiDetails(); + const guiDetails: NameAndDescription = await DotrainOrderGui.getStrategyDetails(dotrainWithGui); assert.equal(guiDetails.name, 'Fixed limit'); assert.equal(guiDetails.description, 'Fixed limit order strategy'); }); diff --git a/packages/ui-components/src/__tests__/VaultDetail.test.ts b/packages/ui-components/src/__tests__/VaultDetail.test.ts index b6b193b6c..21b8c2393 100644 --- a/packages/ui-components/src/__tests__/VaultDetail.test.ts +++ b/packages/ui-components/src/__tests__/VaultDetail.test.ts @@ -39,9 +39,7 @@ test('calls the vault detail query fn with the correct vault id', async () => { id: '100', network: 'mainnet', settings: mockSettings, - lightweightChartsTheme: readable(darkChartTheme), - activeNetworkRef: writable('mainnet'), - activeOrderbookRef: writable('0x00') + lightweightChartsTheme: readable(darkChartTheme) }, context: new Map([['$$_queryClient', queryClient]]) }); @@ -62,9 +60,7 @@ test('shows the correct empty message when the query returns no data', async () activeNetworkRef: writable('mainnet'), activeOrderbookRef: writable('0x00'), settings: mockSettings, - lightweightChartsTheme: readable(darkChartTheme), - activeNetworkRef: writable('mainnet'), - activeOrderbookRef: writable('0x00') + lightweightChartsTheme: readable(darkChartTheme) }, context: new Map([['$$_queryClient', queryClient]]) }); @@ -107,9 +103,7 @@ test('shows the correct data when the query returns data', async () => { activeNetworkRef: writable('mainnet'), activeOrderbookRef: writable('0x00'), settings: mockSettings, - lightweightChartsTheme: readable(darkChartTheme), - activeNetworkRef: writable('mainnet'), - activeOrderbookRef: writable('0x00') + lightweightChartsTheme: readable(darkChartTheme) }, context: new Map([['$$_queryClient', queryClient]]) }); diff --git a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte index 4b48e06ed..61aef18c6 100644 --- a/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte +++ b/packages/ui-components/src/lib/components/deployment/DeploymentSteps.svelte @@ -132,10 +132,10 @@ handleDeploymentChange(selectedDeployment as string); } - function getGuiDetails() { + async function getGuiDetails() { if (!gui) return; try { - guiDetails = gui.getGuiDetails(); + guiDetails = await DotrainOrderGui.getStrategyDetails(dotrain); } catch (e) { error = DeploymentStepErrors.NO_GUI_DETAILS; errorDetails = e instanceof Error ? e.message : 'Unknown error'; diff --git a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte index ed17273d7..9a7ae57dd 100644 --- a/packages/ui-components/src/lib/components/detail/VaultDetail.svelte +++ b/packages/ui-components/src/lib/components/detail/VaultDetail.svelte @@ -130,7 +130,12 @@

{#if data.ordersAsInput && data.ordersAsInput.length > 0} {#each data.ordersAsInput as order} - + {/each} {:else} None @@ -145,7 +150,12 @@

{#if data.ordersAsOutput && data.ordersAsOutput.length > 0} {#each data.ordersAsOutput as order} - + {/each} {:else} None From f0871adfc466cf3667662c0bcb609ec2d341a837 Mon Sep 17 00:00:00 2001 From: Jamie Harding Date: Fri, 24 Jan 2025 13:17:22 +0100 Subject: [PATCH 74/74] fix test --- packages/webapp/src/lib/__tests__/WalletConnect.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts index 06cf0a4f5..5466547cc 100644 --- a/packages/webapp/src/lib/__tests__/WalletConnect.test.ts +++ b/packages/webapp/src/lib/__tests__/WalletConnect.test.ts @@ -37,6 +37,6 @@ describe('WalletConnect component', () => { render(WalletConnect); - expect(screen.getByTestId('connected')).toBeInTheDocument(); + expect(screen.getByText('Connected')).toBeInTheDocument(); }); });