From 67ee922a9c6e8ad466ee830ddfb2323a81cd1943 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Wed, 15 Oct 2025 11:24:36 +0200 Subject: [PATCH 01/33] feat: add tab navigation for app details and deals in AppsRoute component --- .../$chainSlug/_layout/app/$appAddress.tsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/routes/$chainSlug/_layout/app/$appAddress.tsx b/src/routes/$chainSlug/_layout/app/$appAddress.tsx index 60971734..044fdb9e 100644 --- a/src/routes/$chainSlug/_layout/app/$appAddress.tsx +++ b/src/routes/$chainSlug/_layout/app/$appAddress.tsx @@ -5,8 +5,10 @@ import { createFileRoute } from '@tanstack/react-router'; import { LoaderCircle } from 'lucide-react'; import AppIcon from '@/components/icons/AppIcon'; import { BackButton } from '@/components/ui/BackButton'; +import { useTabParam } from '@/hooks/usePageParam'; import { DetailsTable } from '@/modules/DetailsTable'; import { ErrorAlert } from '@/modules/ErrorAlert'; +import { Tabs } from '@/modules/Tabs'; import { AppBreadcrumbs } from '@/modules/apps/app/AppBreadcrumbs'; import { AppDealsTable } from '@/modules/apps/app/AppDealsTable'; import { appQuery } from '@/modules/apps/app/appQuery'; @@ -55,6 +57,8 @@ function useAppData(appAddress: string, chainId: number) { } function AppsRoute() { + const tabLabels = ['DETAILS', 'DEALS', 'ORDERS']; + const [currentTab, setCurrentTab] = useTabParam('appTab', tabLabels, 0); const { chainId } = useUserStore(); const { appAddress } = Route.useParams(); const { @@ -101,14 +105,19 @@ function AppsRoute() { -
- {hasPastError && !appDetails ? ( + + {currentTab === 0 && + (hasPastError && !appDetails ? ( ) : ( - )} - -
+ ))} + {currentTab === 1 && } + {/* {currentTab === 2 && } */} ); } From e2de6019a0e9ddb36d010f92029a9d186d098372 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 11:47:41 +0200 Subject: [PATCH 02/33] feat: add AppAccessTable component and integrate into AppsRoute --- src/modules/access/columns.tsx | 68 +++++++++++++++ src/modules/apps/app/AppAccessTable.tsx | 87 +++++++++++++++++++ src/modules/apps/app/AppDealsTable.tsx | 11 --- .../$chainSlug/_layout/app/$appAddress.tsx | 5 +- 4 files changed, 158 insertions(+), 13 deletions(-) create mode 100644 src/modules/access/columns.tsx create mode 100644 src/modules/apps/app/AppAccessTable.tsx diff --git a/src/modules/access/columns.tsx b/src/modules/access/columns.tsx new file mode 100644 index 00000000..0dd43d9e --- /dev/null +++ b/src/modules/access/columns.tsx @@ -0,0 +1,68 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { PublishedApporder } from 'iexec/IExecOrderbookModule'; +import CopyButton from '@/components/CopyButton'; +import { truncateAddress } from '@/utils/truncateAddress'; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'order.app', + header: 'App', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.appprice', + header: 'App Price', + cell: ({ row }) => {row.original.order.appprice} RLC, + }, + { + accessorKey: 'order.datasetrestrict', + header: 'Dataset Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.requesterrestrict', + header: 'Requester Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.workerpoolrestrict', + header: 'Workerpool Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.volume', + header: 'Volume', + cell: ({ row }) => {row.original.order.volume}, + }, + { + accessorKey: 'remaining', + header: 'Remaining', + cell: ({ row }) => {row.original.remaining}, + }, +]; diff --git a/src/modules/apps/app/AppAccessTable.tsx b/src/modules/apps/app/AppAccessTable.tsx new file mode 100644 index 00000000..ddd9629f --- /dev/null +++ b/src/modules/apps/app/AppAccessTable.tsx @@ -0,0 +1,87 @@ +import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; +// import { execute } from '@/graphql/poco/execute'; +import { useQuery } from '@tanstack/react-query'; +import { LoaderCircle } from 'lucide-react'; +import { DataTable } from '@/components/DataTable'; +import { PaginatedNavigation } from '@/components/PaginatedNavigation'; +import { getIExec } from '@/externals/iexecSdkClient'; +import { usePageParam } from '@/hooks/usePageParam'; +import { ErrorAlert } from '@/modules/ErrorAlert'; +import { columns } from '@/modules/access/columns'; +import useUserStore from '@/stores/useUser.store'; +import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; + +// import { appAccessQuery } from './appAccessQuery'; + +function useAppAccessData({ + appAddress, + currentPage, +}: { + appAddress: string; + currentPage: number; +}) { + const { chainId } = useUserStore(); + + const queryKey = [chainId, 'app', 'access', appAddress, currentPage]; + const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( + { + queryKey, + queryFn: async () => { + const iexec = await getIExec(); + + const { count, orders } = + await iexec.orderbook.fetchAppOrderbook(appAddress); + return { count, orders }; + }, + refetchInterval: TABLE_REFETCH_INTERVAL, + placeholderData: createPlaceholderDataFnForQueryKey(queryKey), + } + ); + + const access = data?.orders || []; + const count = data?.count || 0; + const hasNextPage = count > DETAIL_TABLE_LENGTH; + const additionalPages = hasNextPage + ? Math.ceil(count / DETAIL_TABLE_LENGTH) - 1 + : 0; + + return { + data: access, + isLoading, + isRefetching, + isError, + additionalPages, + hasPastError: isError || errorUpdateCount > 0, + }; +} + +export function AppAccessTable({ appAddress }: { appAddress: string }) { + const [currentPage, setCurrentPage] = usePageParam('appAccessPage'); + const { + data: access, + isError, + isLoading, + isRefetching, + additionalPages, + hasPastError, + } = useAppAccessData({ appAddress, currentPage: currentPage - 1 }); + + return ( +
+ {hasPastError && !access.length ? ( + + ) : ( + + )} + +
+ ); +} diff --git a/src/modules/apps/app/AppDealsTable.tsx b/src/modules/apps/app/AppDealsTable.tsx index ab8a82a5..2d4d42a7 100644 --- a/src/modules/apps/app/AppDealsTable.tsx +++ b/src/modules/apps/app/AppDealsTable.tsx @@ -73,17 +73,6 @@ export function AppDealsTable({ appAddress }: { appAddress: string }) { return (
-

- Latests deals - {!deals && isError && ( - - (outdated) - - )} - {(isLoading || isRefetching) && ( - - )} -

{hasPastError && !deals.length ? ( ) : ( diff --git a/src/routes/$chainSlug/_layout/app/$appAddress.tsx b/src/routes/$chainSlug/_layout/app/$appAddress.tsx index 044fdb9e..ea7a592a 100644 --- a/src/routes/$chainSlug/_layout/app/$appAddress.tsx +++ b/src/routes/$chainSlug/_layout/app/$appAddress.tsx @@ -9,6 +9,7 @@ import { useTabParam } from '@/hooks/usePageParam'; import { DetailsTable } from '@/modules/DetailsTable'; import { ErrorAlert } from '@/modules/ErrorAlert'; import { Tabs } from '@/modules/Tabs'; +import { AppAccessTable } from '@/modules/apps/app/AppAccessTable'; import { AppBreadcrumbs } from '@/modules/apps/app/AppBreadcrumbs'; import { AppDealsTable } from '@/modules/apps/app/AppDealsTable'; import { appQuery } from '@/modules/apps/app/appQuery'; @@ -57,7 +58,7 @@ function useAppData(appAddress: string, chainId: number) { } function AppsRoute() { - const tabLabels = ['DETAILS', 'DEALS', 'ORDERS']; + const tabLabels = ['DETAILS', 'DEALS', 'ACCESS']; const [currentTab, setCurrentTab] = useTabParam('appTab', tabLabels, 0); const { chainId } = useUserStore(); const { appAddress } = Route.useParams(); @@ -117,7 +118,7 @@ function AppsRoute() { ))} {currentTab === 1 && } - {/* {currentTab === 2 && } */} + {currentTab === 2 && }
); } From ca724b524992eb51626c3c772736edde8ae447b8 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 12:21:18 +0200 Subject: [PATCH 03/33] feat: enhance AppAccessTable and AppDealsTable with loading and outdated state management --- src/modules/apps/app/AppAccessTable.tsx | 17 +++++++---- src/modules/apps/app/AppDealsTable.tsx | 14 +++++++-- .../$chainSlug/_layout/app/$appAddress.tsx | 29 +++++++++++++++---- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/modules/apps/app/AppAccessTable.tsx b/src/modules/apps/app/AppAccessTable.tsx index ddd9629f..c120a16a 100644 --- a/src/modules/apps/app/AppAccessTable.tsx +++ b/src/modules/apps/app/AppAccessTable.tsx @@ -1,7 +1,5 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; -// import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; -import { LoaderCircle } from 'lucide-react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { getIExec } from '@/externals/iexecSdkClient'; @@ -11,8 +9,6 @@ import { columns } from '@/modules/access/columns'; import useUserStore from '@/stores/useUser.store'; import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; -// import { appAccessQuery } from './appAccessQuery'; - function useAppAccessData({ appAddress, currentPage, @@ -55,7 +51,15 @@ function useAppAccessData({ }; } -export function AppAccessTable({ appAddress }: { appAddress: string }) { +export function AppAccessTable({ + appAddress, + setLoading, + setOutdated, +}: { + appAddress: string; + setLoading: (loading: boolean) => void; + setOutdated: (outdated: boolean) => void; +}) { const [currentPage, setCurrentPage] = usePageParam('appAccessPage'); const { data: access, @@ -66,6 +70,9 @@ export function AppAccessTable({ appAddress }: { appAddress: string }) { hasPastError, } = useAppAccessData({ appAddress, currentPage: currentPage - 1 }); + setLoading(isLoading || isRefetching); + setOutdated(access.length > 0 && isError); + return (
{hasPastError && !access.length ? ( diff --git a/src/modules/apps/app/AppDealsTable.tsx b/src/modules/apps/app/AppDealsTable.tsx index 2d4d42a7..7b951390 100644 --- a/src/modules/apps/app/AppDealsTable.tsx +++ b/src/modules/apps/app/AppDealsTable.tsx @@ -1,7 +1,6 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; -import { LoaderCircle } from 'lucide-react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { usePageParam } from '@/hooks/usePageParam'; @@ -58,7 +57,15 @@ function useAppDealsData({ }; } -export function AppDealsTable({ appAddress }: { appAddress: string }) { +export function AppDealsTable({ + appAddress, + setLoading, + setOutdated, +}: { + appAddress: string; + setLoading: (loading: boolean) => void; + setOutdated: (outdated: boolean) => void; +}) { const [currentPage, setCurrentPage] = usePageParam('appDealsPage'); const { data: deals, @@ -69,6 +76,9 @@ export function AppDealsTable({ appAddress }: { appAddress: string }) { hasPastError, } = useAppDealsData({ appAddress, currentPage: currentPage - 1 }); + setLoading(isLoading || isRefetching); + setOutdated(deals.length > 0 && isError); + const filteredColumns = columns.filter((col) => col.accessorKey !== 'app'); return ( diff --git a/src/routes/$chainSlug/_layout/app/$appAddress.tsx b/src/routes/$chainSlug/_layout/app/$appAddress.tsx index ea7a592a..c8fc533d 100644 --- a/src/routes/$chainSlug/_layout/app/$appAddress.tsx +++ b/src/routes/$chainSlug/_layout/app/$appAddress.tsx @@ -3,6 +3,7 @@ import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; import { createFileRoute } from '@tanstack/react-router'; import { LoaderCircle } from 'lucide-react'; +import { useState } from 'react'; import AppIcon from '@/components/icons/AppIcon'; import { BackButton } from '@/components/ui/BackButton'; import { useTabParam } from '@/hooks/usePageParam'; @@ -72,6 +73,9 @@ function AppsRoute() { error, } = useAppData((appAddress as string).toLowerCase(), chainId!); + const [isLoadingChild, setIsLoadingChild] = useState(false); + const [isOutdatedChild, setIsOutdatedChild] = useState(false); + const appDetails = app ? buildAppDetails({ app }) : undefined; if (!isValid) { @@ -82,6 +86,9 @@ function AppsRoute() { return ; } + const showOutdated = app && (isError || isOutdatedChild); + const showLoading = isLoading || isRefetching || isLoadingChild; + return (
@@ -90,14 +97,12 @@ function AppsRoute() {

App details - {app && isError && ( + {showOutdated && ( (outdated) )} - {(isLoading || isRefetching) && ( - - )} + {showLoading && }

@@ -117,8 +122,20 @@ function AppsRoute() { ) : ( ))} - {currentTab === 1 && } - {currentTab === 2 && } + {currentTab === 1 && ( + + )} + {currentTab === 2 && ( + + )}
); } From aeae1647f3c47cdbdbda4024e7894d1b77d95d9b Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 13:42:13 +0200 Subject: [PATCH 04/33] feat: rename columns to appColumns and remove app address and price column --- .../access/{columns.tsx => appColumns.tsx} | 15 --------------- src/modules/apps/app/AppAccessTable.tsx | 2 +- 2 files changed, 1 insertion(+), 16 deletions(-) rename src/modules/access/{columns.tsx => appColumns.tsx} (79%) diff --git a/src/modules/access/columns.tsx b/src/modules/access/appColumns.tsx similarity index 79% rename from src/modules/access/columns.tsx rename to src/modules/access/appColumns.tsx index 0dd43d9e..928e5dd4 100644 --- a/src/modules/access/columns.tsx +++ b/src/modules/access/appColumns.tsx @@ -4,21 +4,6 @@ import CopyButton from '@/components/CopyButton'; import { truncateAddress } from '@/utils/truncateAddress'; export const columns: ColumnDef[] = [ - { - accessorKey: 'order.app', - header: 'App', - cell: ({ row }) => ( - - ), - }, - { - accessorKey: 'order.appprice', - header: 'App Price', - cell: ({ row }) => {row.original.order.appprice} RLC, - }, { accessorKey: 'order.datasetrestrict', header: 'Dataset Restriction', diff --git a/src/modules/apps/app/AppAccessTable.tsx b/src/modules/apps/app/AppAccessTable.tsx index c120a16a..6270fe17 100644 --- a/src/modules/apps/app/AppAccessTable.tsx +++ b/src/modules/apps/app/AppAccessTable.tsx @@ -5,7 +5,7 @@ import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { getIExec } from '@/externals/iexecSdkClient'; import { usePageParam } from '@/hooks/usePageParam'; import { ErrorAlert } from '@/modules/ErrorAlert'; -import { columns } from '@/modules/access/columns'; +import { columns } from '@/modules/access/appColumns'; import useUserStore from '@/stores/useUser.store'; import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; From 10c2da9d1e48b4bc1dbc3d707608e04b0b5d1eb7 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 13:44:46 +0200 Subject: [PATCH 05/33] feat: add tab navigation for dataset details, deals, and access in DatasetsRoute --- .../_layout/dataset/$datasetAddress.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx index 2c27c24e..04e5560f 100644 --- a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx +++ b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx @@ -6,9 +6,11 @@ import { createFileRoute } from '@tanstack/react-router'; import { LoaderCircle } from 'lucide-react'; import DatasetIcon from '@/components/icons/DatasetIcon'; import { BackButton } from '@/components/ui/BackButton'; +import { useTabParam } from '@/hooks/usePageParam'; import { useSchemaSearch } from '@/hooks/useSchemaSearch'; import { DetailsTable } from '@/modules/DetailsTable'; import { ErrorAlert } from '@/modules/ErrorAlert'; +import { Tabs } from '@/modules/Tabs'; import { DatasetBreadcrumbs } from '@/modules/datasets/dataset/DatasetBreadcrumbs'; import { DatasetDealsTable } from '@/modules/datasets/dataset/DatasetDealsTable'; import { buildDatasetDetails } from '@/modules/datasets/dataset/buildDatasetDetails'; @@ -86,7 +88,10 @@ function useDatasetData(datasetAddress: string, chainId: number) { } function DatasetsRoute() { + const tabLabels = ['DETAILS', 'DEALS', 'ACCESS']; + const [currentTab, setCurrentTab] = useTabParam('appTab', tabLabels, 0); const { chainId } = useUserStore(); + const { datasetAddress } = Route.useParams(); const { navigateToDatasets } = useSchemaSearch(); @@ -136,14 +141,20 @@ function DatasetsRoute() {
-
- {dataset.hasPastError && !datasetDetails ? ( + + {currentTab === 0 && + (dataset.hasPastError && !datasetDetails ? ( ) : ( - )} + ))} + {currentTab === 1 && ( -
+ )}
); } From df51a0eb341b1fd8250879e356dad31b0091346f Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 13:45:19 +0200 Subject: [PATCH 06/33] feat: integrate loading and outdated state management in DatasetDealsTable --- .../datasets/dataset/DatasetDealsTable.tsx | 19 +++++++----------- .../_layout/dataset/$datasetAddress.tsx | 20 ++++++++++++++----- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/modules/datasets/dataset/DatasetDealsTable.tsx b/src/modules/datasets/dataset/DatasetDealsTable.tsx index d9e6f802..8e4b6ef1 100644 --- a/src/modules/datasets/dataset/DatasetDealsTable.tsx +++ b/src/modules/datasets/dataset/DatasetDealsTable.tsx @@ -1,7 +1,6 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; -import { LoaderCircle } from 'lucide-react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { usePageParam } from '@/hooks/usePageParam'; @@ -66,8 +65,12 @@ function useDatasetDealsData({ export function DatasetDealsTable({ datasetAddress, + setLoading, + setOutdated, }: { datasetAddress: string; + setLoading: (loading: boolean) => void; + setOutdated: (outdated: boolean) => void; }) { const [currentPage, setCurrentPage] = usePageParam('datasetDealsPage'); const { @@ -79,21 +82,13 @@ export function DatasetDealsTable({ hasPastError, } = useDatasetDealsData({ datasetAddress, currentPage: currentPage - 1 }); + setLoading(isLoading || isRefetching); + setOutdated(deals.length > 0 && isError); + const filteredColumns = columns.filter((col) => col.accessorKey !== 'dealid'); return (
-

- Latests deals - {!deals && isError && ( - - (outdated) - - )} - {(isLoading || isRefetching) && ( - - )} -

{hasPastError && !deals.length ? ( ) : ( diff --git a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx index 04e5560f..b98493c2 100644 --- a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx +++ b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx @@ -4,6 +4,7 @@ import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; import { createFileRoute } from '@tanstack/react-router'; import { LoaderCircle } from 'lucide-react'; +import { useState } from 'react'; import DatasetIcon from '@/components/icons/DatasetIcon'; import { BackButton } from '@/components/ui/BackButton'; import { useTabParam } from '@/hooks/usePageParam'; @@ -100,6 +101,9 @@ function DatasetsRoute() { chainId! ); + const [isLoadingChild, setIsLoadingChild] = useState(false); + const [isOutdatedChild, setIsOutdatedChild] = useState(false); + const datasetDetails = dataset.data ? buildDatasetDetails({ dataset: dataset.data, @@ -117,6 +121,10 @@ function DatasetsRoute() { return ; } + const showOutdated = dataset.data && (dataset.isError || isOutdatedChild); + const showLoading = + dataset.isLoading || dataset.isRefetching || isLoadingChild; + return (
@@ -125,14 +133,12 @@ function DatasetsRoute() {

Dataset details - {dataset.data && dataset.isError && ( + {showOutdated && ( (outdated) )} - {(dataset.isLoading || dataset.isRefetching) && ( - - )} + {showLoading && }

@@ -153,7 +159,11 @@ function DatasetsRoute() { ))} {currentTab === 1 && ( - + )}
); From 6970d14c60efa9ad87050cd12c74e93d7dacadb7 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 13:51:43 +0200 Subject: [PATCH 07/33] feat: add DatasetAccessTable component and integrate it into DatasetsRoute --- src/modules/access/datasetColumns.tsx | 53 +++++++++++ .../datasets/dataset/DatasetAccessTable.tsx | 94 +++++++++++++++++++ .../_layout/dataset/$datasetAddress.tsx | 8 ++ 3 files changed, 155 insertions(+) create mode 100644 src/modules/access/datasetColumns.tsx create mode 100644 src/modules/datasets/dataset/DatasetAccessTable.tsx diff --git a/src/modules/access/datasetColumns.tsx b/src/modules/access/datasetColumns.tsx new file mode 100644 index 00000000..23241790 --- /dev/null +++ b/src/modules/access/datasetColumns.tsx @@ -0,0 +1,53 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { PublishedDatasetorder } from 'iexec/IExecOrderbookModule'; +import CopyButton from '@/components/CopyButton'; +import { truncateAddress } from '@/utils/truncateAddress'; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'order.apprestrict', + header: 'App Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.requesterrestrict', + header: 'Requester Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.workerpoolrestrict', + header: 'Workerpool Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.volume', + header: 'Volume', + cell: ({ row }) => {row.original.order.volume}, + }, + { + accessorKey: 'remaining', + header: 'Remaining', + cell: ({ row }) => {row.original.remaining}, + }, +]; diff --git a/src/modules/datasets/dataset/DatasetAccessTable.tsx b/src/modules/datasets/dataset/DatasetAccessTable.tsx new file mode 100644 index 00000000..c5c56424 --- /dev/null +++ b/src/modules/datasets/dataset/DatasetAccessTable.tsx @@ -0,0 +1,94 @@ +import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; +import { useQuery } from '@tanstack/react-query'; +import { DataTable } from '@/components/DataTable'; +import { PaginatedNavigation } from '@/components/PaginatedNavigation'; +import { getIExec } from '@/externals/iexecSdkClient'; +import { usePageParam } from '@/hooks/usePageParam'; +import { ErrorAlert } from '@/modules/ErrorAlert'; +import { columns } from '@/modules/access/datasetColumns'; +import useUserStore from '@/stores/useUser.store'; +import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; + +function useDatasetAccessData({ + datasetAddress, + currentPage, +}: { + datasetAddress: string; + currentPage: number; +}) { + const { chainId } = useUserStore(); + + const queryKey = [chainId, 'dataset', 'access', datasetAddress, currentPage]; + const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( + { + queryKey, + queryFn: async () => { + const iexec = await getIExec(); + + const { count, orders } = + await iexec.orderbook.fetchDatasetOrderbook(datasetAddress); + return { count, orders }; + }, + refetchInterval: TABLE_REFETCH_INTERVAL, + placeholderData: createPlaceholderDataFnForQueryKey(queryKey), + } + ); + + const access = data?.orders || []; + const count = data?.count || 0; + const hasNextPage = count > DETAIL_TABLE_LENGTH; + const additionalPages = hasNextPage + ? Math.ceil(count / DETAIL_TABLE_LENGTH) - 1 + : 0; + + return { + data: access, + isLoading, + isRefetching, + isError, + additionalPages, + hasPastError: isError || errorUpdateCount > 0, + }; +} + +export function DatasetAccessTable({ + datasetAddress, + setLoading, + setOutdated, +}: { + datasetAddress: string; + setLoading: (loading: boolean) => void; + setOutdated: (outdated: boolean) => void; +}) { + const [currentPage, setCurrentPage] = usePageParam('datasetAccessPage'); + const { + data: access, + isError, + isLoading, + isRefetching, + additionalPages, + hasPastError, + } = useDatasetAccessData({ datasetAddress, currentPage: currentPage - 1 }); + + setLoading(isLoading || isRefetching); + setOutdated(access.length > 0 && isError); + + return ( +
+ {hasPastError && !access.length ? ( + + ) : ( + + )} + +
+ ); +} diff --git a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx index b98493c2..77c11acb 100644 --- a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx +++ b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx @@ -12,6 +12,7 @@ import { useSchemaSearch } from '@/hooks/useSchemaSearch'; import { DetailsTable } from '@/modules/DetailsTable'; import { ErrorAlert } from '@/modules/ErrorAlert'; import { Tabs } from '@/modules/Tabs'; +import { DatasetAccessTable } from '@/modules/datasets/dataset/DatasetAccessTable'; import { DatasetBreadcrumbs } from '@/modules/datasets/dataset/DatasetBreadcrumbs'; import { DatasetDealsTable } from '@/modules/datasets/dataset/DatasetDealsTable'; import { buildDatasetDetails } from '@/modules/datasets/dataset/buildDatasetDetails'; @@ -165,6 +166,13 @@ function DatasetsRoute() { setOutdated={setIsOutdatedChild} /> )} + {currentTab === 2 && ( + + )}
); } From 691c2766501c8b8a84a8e1f105d12e354fcc23e7 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 13:54:46 +0200 Subject: [PATCH 08/33] feat: add tab navigation for workerpool details, deals, and access --- .../_layout/workerpool/$workerpoolAddress.tsx | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx index 844dd730..395e9a3f 100644 --- a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx +++ b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx @@ -5,8 +5,10 @@ import { createFileRoute } from '@tanstack/react-router'; import { LoaderCircle } from 'lucide-react'; import WorkerpoolIcon from '@/components/icons/WorkerpoolIcon'; import { BackButton } from '@/components/ui/BackButton'; +import { useTabParam } from '@/hooks/usePageParam'; import { DetailsTable } from '@/modules/DetailsTable'; import { ErrorAlert } from '@/modules/ErrorAlert'; +import { Tabs } from '@/modules/Tabs'; import { SearcherBar } from '@/modules/search/SearcherBar'; import { WorkerpoolDealsTable } from '@/modules/workerpools/workerpool/WorkerpoolDealsTable'; import { buildWorkerpoolDetails } from '@/modules/workerpools/workerpool/buildWorkerpoolDetails'; @@ -57,6 +59,12 @@ function useWorkerpoolData(workerpoolAddress: string, chainId: number) { } function WorkerpoolsRoute() { + const tabLabels = ['DETAILS', 'DEALS', 'ACCESS']; + const [currentTab, setCurrentTab] = useTabParam( + 'workerpoolTab', + tabLabels, + 0 + ); const { chainId } = useUserStore(); const { workerpoolAddress } = Route.useParams(); const { @@ -107,14 +115,20 @@ function WorkerpoolsRoute() {
-
- {hasPastError && !workerpoolDetails ? ( + + {currentTab === 0 && + (hasPastError && !workerpoolDetails ? ( ) : ( - )} + ))} + {currentTab === 1 && ( -
+ )} ); } From 9a9ac27aa5ece185b35f01ca7de402a3e8ab31b5 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 17:23:53 +0200 Subject: [PATCH 09/33] feat: enhance WorkerpoolDealsTable with loading and outdated state management --- .../workerpool/WorkerpoolDealsTable.tsx | 18 +++++++----------- .../_layout/workerpool/$workerpoolAddress.tsx | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx b/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx index 453dfbaf..833f9452 100644 --- a/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx +++ b/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx @@ -72,8 +72,12 @@ function useWorkerpoolDealsData({ export function WorkerpoolDealsTable({ workerpoolAddress, + setLoading, + setOutdated, }: { workerpoolAddress: string; + setLoading: (loading: boolean) => void; + setOutdated: (outdated: boolean) => void; }) { const [currentPage, setCurrentPage] = usePageParam('workerpoolDealsPage'); const { @@ -88,23 +92,15 @@ export function WorkerpoolDealsTable({ currentPage: currentPage - 1, }); + setLoading(isLoading || isRefetching); + setOutdated(deals.length > 0 && isError); + const filteredColumns = columns.filter( (col) => col.accessorKey !== 'dataset.address' ); return (
-

- Latests deals - {!deals && isError && ( - - (outdated) - - )} - {(isLoading || isRefetching) && ( - - )} -

{hasPastError && !deals.length ? ( ) : ( diff --git a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx index 395e9a3f..6aed24a0 100644 --- a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx +++ b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx @@ -3,6 +3,7 @@ import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; import { createFileRoute } from '@tanstack/react-router'; import { LoaderCircle } from 'lucide-react'; +import { useState } from 'react'; import WorkerpoolIcon from '@/components/icons/WorkerpoolIcon'; import { BackButton } from '@/components/ui/BackButton'; import { useTabParam } from '@/hooks/usePageParam'; @@ -77,6 +78,9 @@ function WorkerpoolsRoute() { error, } = useWorkerpoolData((workerpoolAddress as string).toLowerCase(), chainId!); + const [isLoadingChild, setIsLoadingChild] = useState(false); + const [isOutdatedChild, setIsOutdatedChild] = useState(false); + const workerpoolDetails = workerpool ? buildWorkerpoolDetails({ workerpool }) : undefined; @@ -91,6 +95,9 @@ function WorkerpoolsRoute() { return ; } + const showOutdated = workerpool && (isError || isOutdatedChild); + const showLoading = isLoading || isRefetching || isLoadingChild; + return (
@@ -99,14 +106,12 @@ function WorkerpoolsRoute() {

Workerpool details - {workerpool && isError && ( + {showOutdated && ( (outdated) )} - {(isLoading || isRefetching) && ( - - )} + {showLoading && }

@@ -127,7 +132,11 @@ function WorkerpoolsRoute() { ))} {currentTab === 1 && ( - + )}
); From f26634d9d31ef151ad1f17b0b93267a253e774ba Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 17:42:50 +0200 Subject: [PATCH 10/33] feat: add WorkerpoolAccessTable component and integrate it into WorkerpoolsRoute --- src/modules/access/workerpoolColumns.tsx | 53 +++++++++ .../workerpool/WorkerpoolAccessTable.tsx | 104 ++++++++++++++++++ .../workerpool/WorkerpoolDealsTable.tsx | 1 - .../_layout/workerpool/$workerpoolAddress.tsx | 8 ++ 4 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 src/modules/access/workerpoolColumns.tsx create mode 100644 src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx diff --git a/src/modules/access/workerpoolColumns.tsx b/src/modules/access/workerpoolColumns.tsx new file mode 100644 index 00000000..ba300585 --- /dev/null +++ b/src/modules/access/workerpoolColumns.tsx @@ -0,0 +1,53 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { PublishedWorkerpoolorder } from 'iexec/IExecOrderbookModule'; +import CopyButton from '@/components/CopyButton'; +import { truncateAddress } from '@/utils/truncateAddress'; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'order.apprestrict', + header: 'App Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.requesterrestrict', + header: 'Requester Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.datasetrestrict', + header: 'Dataset Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.volume', + header: 'Volume', + cell: ({ row }) => {row.original.order.volume}, + }, + { + accessorKey: 'remaining', + header: 'Remaining', + cell: ({ row }) => {row.original.remaining}, + }, +]; diff --git a/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx b/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx new file mode 100644 index 00000000..91574209 --- /dev/null +++ b/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx @@ -0,0 +1,104 @@ +import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; +import { useQuery } from '@tanstack/react-query'; +import { DataTable } from '@/components/DataTable'; +import { PaginatedNavigation } from '@/components/PaginatedNavigation'; +import { getIExec } from '@/externals/iexecSdkClient'; +import { usePageParam } from '@/hooks/usePageParam'; +import { ErrorAlert } from '@/modules/ErrorAlert'; +import { columns } from '@/modules/access/workerpoolColumns'; +import useUserStore from '@/stores/useUser.store'; +import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; + +function useWorkerpoolAccessData({ + workerpoolAddress, + currentPage, +}: { + workerpoolAddress: string; + currentPage: number; +}) { + const { chainId } = useUserStore(); + + const queryKey = [ + chainId, + 'workerpool', + 'access', + workerpoolAddress, + currentPage, + ]; + const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( + { + queryKey, + queryFn: async () => { + const iexec = await getIExec(); + + const { count, orders } = + await iexec.orderbook.fetchWorkerpoolOrderbook(); + + return { count, orders }; + }, + refetchInterval: TABLE_REFETCH_INTERVAL, + placeholderData: createPlaceholderDataFnForQueryKey(queryKey), + } + ); + + const access = data?.orders || []; + const count = data?.count || 0; + const hasNextPage = count > DETAIL_TABLE_LENGTH; + const additionalPages = hasNextPage + ? Math.ceil(count / DETAIL_TABLE_LENGTH) - 1 + : 0; + + return { + data: access, + isLoading, + isRefetching, + isError, + additionalPages, + hasPastError: isError || errorUpdateCount > 0, + }; +} + +export function WorkerpoolAccessTable({ + workerpoolAddress, + setLoading, + setOutdated, +}: { + workerpoolAddress: string; + setLoading: (loading: boolean) => void; + setOutdated: (outdated: boolean) => void; +}) { + const [currentPage, setCurrentPage] = usePageParam('workerpoolAccessPage'); + const { + data: access, + isError, + isLoading, + isRefetching, + additionalPages, + hasPastError, + } = useWorkerpoolAccessData({ + workerpoolAddress, + currentPage: currentPage - 1, + }); + + setLoading(isLoading || isRefetching); + setOutdated(access.length > 0 && isError); + + return ( +
+ {hasPastError && !access.length ? ( + + ) : ( + + )} + +
+ ); +} diff --git a/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx b/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx index 833f9452..c2571ad8 100644 --- a/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx +++ b/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx @@ -1,7 +1,6 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; -import { LoaderCircle } from 'lucide-react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { usePageParam } from '@/hooks/usePageParam'; diff --git a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx index 6aed24a0..ea2e6956 100644 --- a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx +++ b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx @@ -13,6 +13,7 @@ import { Tabs } from '@/modules/Tabs'; import { SearcherBar } from '@/modules/search/SearcherBar'; import { WorkerpoolDealsTable } from '@/modules/workerpools/workerpool/WorkerpoolDealsTable'; import { buildWorkerpoolDetails } from '@/modules/workerpools/workerpool/buildWorkerpoolDetails'; +import { WorkerpoolAccessTable } from '@/modules/workerpools/workerpool/workerpoolAccessTable'; import { WorkerpoolBreadcrumbs } from '@/modules/workerpools/workerpool/workerpoolBreadcrumbs'; import { workerpoolQuery } from '@/modules/workerpools/workerpool/workerpoolQuery'; import useUserStore from '@/stores/useUser.store'; @@ -138,6 +139,13 @@ function WorkerpoolsRoute() { setOutdated={setIsOutdatedChild} /> )} + {currentTab === 2 && ( + + )}
); } From d05f86459495ec57d6d8c02f5ea743b20a62f993 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Thu, 16 Oct 2025 18:07:41 +0200 Subject: [PATCH 11/33] feat: refactor loading and outdated state management in access and deals tables using useEffect --- src/modules/apps/app/AppAccessTable.tsx | 11 +++++++++-- src/modules/apps/app/AppDealsTable.tsx | 11 +++++++++-- src/modules/datasets/dataset/DatasetAccessTable.tsx | 11 +++++++++-- src/modules/datasets/dataset/DatasetDealsTable.tsx | 11 +++++++++-- .../workerpools/workerpool/WorkerpoolAccessTable.tsx | 11 +++++++++-- .../workerpools/workerpool/WorkerpoolDealsTable.tsx | 11 +++++++++-- 6 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/modules/apps/app/AppAccessTable.tsx b/src/modules/apps/app/AppAccessTable.tsx index 6270fe17..20583a22 100644 --- a/src/modules/apps/app/AppAccessTable.tsx +++ b/src/modules/apps/app/AppAccessTable.tsx @@ -1,5 +1,6 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { useQuery } from '@tanstack/react-query'; +import { useEffect } from 'react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { getIExec } from '@/externals/iexecSdkClient'; @@ -70,8 +71,14 @@ export function AppAccessTable({ hasPastError, } = useAppAccessData({ appAddress, currentPage: currentPage - 1 }); - setLoading(isLoading || isRefetching); - setOutdated(access.length > 0 && isError); + useEffect( + () => setLoading(isLoading || isRefetching), + [isLoading, isRefetching, setLoading] + ); + useEffect( + () => setOutdated(access.length > 0 && isError), + [access.length, isError, setOutdated] + ); return (
diff --git a/src/modules/apps/app/AppDealsTable.tsx b/src/modules/apps/app/AppDealsTable.tsx index 7b951390..6cb48c5e 100644 --- a/src/modules/apps/app/AppDealsTable.tsx +++ b/src/modules/apps/app/AppDealsTable.tsx @@ -1,6 +1,7 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; +import { useEffect } from 'react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { usePageParam } from '@/hooks/usePageParam'; @@ -76,8 +77,14 @@ export function AppDealsTable({ hasPastError, } = useAppDealsData({ appAddress, currentPage: currentPage - 1 }); - setLoading(isLoading || isRefetching); - setOutdated(deals.length > 0 && isError); + useEffect( + () => setLoading(isLoading || isRefetching), + [isLoading, isRefetching, setLoading] + ); + useEffect( + () => setOutdated(deals.length > 0 && isError), + [deals.length, isError, setOutdated] + ); const filteredColumns = columns.filter((col) => col.accessorKey !== 'app'); diff --git a/src/modules/datasets/dataset/DatasetAccessTable.tsx b/src/modules/datasets/dataset/DatasetAccessTable.tsx index c5c56424..93ea8304 100644 --- a/src/modules/datasets/dataset/DatasetAccessTable.tsx +++ b/src/modules/datasets/dataset/DatasetAccessTable.tsx @@ -1,5 +1,6 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { useQuery } from '@tanstack/react-query'; +import { useEffect } from 'react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { getIExec } from '@/externals/iexecSdkClient'; @@ -70,8 +71,14 @@ export function DatasetAccessTable({ hasPastError, } = useDatasetAccessData({ datasetAddress, currentPage: currentPage - 1 }); - setLoading(isLoading || isRefetching); - setOutdated(access.length > 0 && isError); + useEffect( + () => setLoading(isLoading || isRefetching), + [isLoading, isRefetching, setLoading] + ); + useEffect( + () => setOutdated(access.length > 0 && isError), + [access.length, isError, setOutdated] + ); return (
diff --git a/src/modules/datasets/dataset/DatasetDealsTable.tsx b/src/modules/datasets/dataset/DatasetDealsTable.tsx index 8e4b6ef1..267e5df3 100644 --- a/src/modules/datasets/dataset/DatasetDealsTable.tsx +++ b/src/modules/datasets/dataset/DatasetDealsTable.tsx @@ -1,6 +1,7 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; +import { useEffect } from 'react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { usePageParam } from '@/hooks/usePageParam'; @@ -82,8 +83,14 @@ export function DatasetDealsTable({ hasPastError, } = useDatasetDealsData({ datasetAddress, currentPage: currentPage - 1 }); - setLoading(isLoading || isRefetching); - setOutdated(deals.length > 0 && isError); + useEffect( + () => setLoading(isLoading || isRefetching), + [isLoading, isRefetching, setLoading] + ); + useEffect( + () => setOutdated(deals.length > 0 && isError), + [deals.length, isError, setOutdated] + ); const filteredColumns = columns.filter((col) => col.accessorKey !== 'dealid'); diff --git a/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx b/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx index 91574209..affdedd3 100644 --- a/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx +++ b/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx @@ -1,5 +1,6 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { useQuery } from '@tanstack/react-query'; +import { useEffect } from 'react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { getIExec } from '@/externals/iexecSdkClient'; @@ -80,8 +81,14 @@ export function WorkerpoolAccessTable({ currentPage: currentPage - 1, }); - setLoading(isLoading || isRefetching); - setOutdated(access.length > 0 && isError); + useEffect( + () => setLoading(isLoading || isRefetching), + [isLoading, isRefetching, setLoading] + ); + useEffect( + () => setOutdated(access.length > 0 && isError), + [access.length, isError, setOutdated] + ); return (
diff --git a/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx b/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx index c2571ad8..75ce23cc 100644 --- a/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx +++ b/src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx @@ -1,6 +1,7 @@ import { DETAIL_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; import { execute } from '@/graphql/poco/execute'; import { useQuery } from '@tanstack/react-query'; +import { useEffect } from 'react'; import { DataTable } from '@/components/DataTable'; import { PaginatedNavigation } from '@/components/PaginatedNavigation'; import { usePageParam } from '@/hooks/usePageParam'; @@ -91,8 +92,14 @@ export function WorkerpoolDealsTable({ currentPage: currentPage - 1, }); - setLoading(isLoading || isRefetching); - setOutdated(deals.length > 0 && isError); + useEffect( + () => setLoading(isLoading || isRefetching), + [isLoading, isRefetching, setLoading] + ); + useEffect( + () => setOutdated(deals.length > 0 && isError), + [deals.length, isError, setOutdated] + ); const filteredColumns = columns.filter( (col) => col.accessorKey !== 'dataset.address' From 6a02688f9d81977a172d056510d622ee54ba2cc2 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 13:55:45 +0200 Subject: [PATCH 12/33] feat: add access tables for apps, datasets, and workerpools on address page --- package-lock.json | 2631 ++++++++++++++--- package.json | 2 +- .../address/access/AddressAppsAccessTable.tsx | 126 + .../access/AddressDatasetsAccessTable.tsx | 134 + .../access/AddressWorkerpoolsAccessTable.tsx | 135 + .../address/access/addressAppColumns.tsx | 70 + .../address/access/addressDatasetColumns.tsx | 70 + .../access/addressWorkerpoolColumns.tsx | 70 + .../_layout/address/$addressAddress.tsx | 11 + 9 files changed, 2918 insertions(+), 331 deletions(-) create mode 100644 src/modules/addresses/address/access/AddressAppsAccessTable.tsx create mode 100644 src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx create mode 100644 src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx create mode 100644 src/modules/addresses/address/access/addressAppColumns.tsx create mode 100644 src/modules/addresses/address/access/addressDatasetColumns.tsx create mode 100644 src/modules/addresses/address/access/addressWorkerpoolColumns.tsx diff --git a/package-lock.json b/package-lock.json index 9a4cc663..59334fc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "graphql": "^16.11.0", - "iexec": "^8.18.0", + "iexec": "^8.20.0", "lucide-react": "^0.536.0", "prettier-plugin-tailwindcss": "^0.6.14", "react": "^19.1.1", @@ -1077,14 +1077,18 @@ "license": "BSD-2-Clause" }, "node_modules/@ensdomains/ens-contracts": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@ensdomains/ens-contracts/-/ens-contracts-1.5.2.tgz", - "integrity": "sha512-AdHgy3Qd6iCaQC6ruWTIhI6RjQdLR1F1m4mmORijLL+gUB0260IY6dsNEXk5NJdv2yvjzb2E5Rc/zsN+QY4hGA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@ensdomains/ens-contracts/-/ens-contracts-1.6.0.tgz", + "integrity": "sha512-BHVoPNVpD2fSGSkO3RbTBnHA3rMZ7ZvALBmkwGm+9FazKAf9bGu6qJoOJxRX09ym4jv2UYYzjo8Q/d1f7h8fPQ==", "license": "MIT", "dependencies": { "@ensdomains/buffer": "^0.1.1", "@ensdomains/solsha1": "0.0.3", - "@openzeppelin/contracts": "^4.1.0", + "@nomicfoundation/hardhat-verify": "^2.0.4", + "@openzeppelin/contracts": "4.9.3", + "@openzeppelin/contracts-v5": "npm:@openzeppelin/contracts@5.1.0", + "@unruggable/gateways": "^1.2.2", + "clones-with-immutable-args": "Arachnid/clones-with-immutable-args#feature/create2", "dns-packet": "^5.3.0" } }, @@ -1746,6 +1750,398 @@ "node": ">=14" } }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, "node_modules/@fastify/busboy": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", @@ -2880,16 +3276,25 @@ "@openzeppelin/contracts": "5.4.0" } }, - "node_modules/@inquirer/checkbox": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.0.tgz", - "integrity": "sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA==", + "node_modules/@inquirer/ansi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.1.tgz", + "integrity": "sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==", "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.0.tgz", + "integrity": "sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -2905,13 +3310,13 @@ } }, "node_modules/@inquirer/confirm": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", - "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.19.tgz", + "integrity": "sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" }, "engines": { "node": ">=18" @@ -2926,14 +3331,14 @@ } }, "node_modules/@inquirer/core": { - "version": "10.1.15", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.15.tgz", - "integrity": "sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.0.tgz", + "integrity": "sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==", "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", + "@inquirer/ansi": "^1.0.1", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", @@ -2983,14 +3388,14 @@ } }, "node_modules/@inquirer/editor": { - "version": "4.2.15", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.15.tgz", - "integrity": "sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==", + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.21.tgz", + "integrity": "sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "external-editor": "^3.1.0" + "@inquirer/core": "^10.3.0", + "@inquirer/external-editor": "^1.0.2", + "@inquirer/type": "^3.0.9" }, "engines": { "node": ">=18" @@ -3005,13 +3410,13 @@ } }, "node_modules/@inquirer/expand": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.17.tgz", - "integrity": "sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw==", + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.21.tgz", + "integrity": "sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -3026,23 +3431,66 @@ } } }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor/node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "license": "MIT" + }, + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/@inquirer/figures": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", - "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.14.tgz", + "integrity": "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@inquirer/input": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.1.tgz", - "integrity": "sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.5.tgz", + "integrity": "sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" }, "engines": { "node": ">=18" @@ -3057,13 +3505,13 @@ } }, "node_modules/@inquirer/number": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.17.tgz", - "integrity": "sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.21.tgz", + "integrity": "sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" }, "engines": { "node": ">=18" @@ -3078,14 +3526,14 @@ } }, "node_modules/@inquirer/password": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.17.tgz", - "integrity": "sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA==", + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.21.tgz", + "integrity": "sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2" + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" }, "engines": { "node": ">=18" @@ -3100,21 +3548,21 @@ } }, "node_modules/@inquirer/prompts": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.0.tgz", - "integrity": "sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", + "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.2.0", - "@inquirer/confirm": "^5.1.14", - "@inquirer/editor": "^4.2.15", - "@inquirer/expand": "^4.0.17", - "@inquirer/input": "^4.2.1", - "@inquirer/number": "^3.0.17", - "@inquirer/password": "^4.0.17", - "@inquirer/rawlist": "^4.1.5", - "@inquirer/search": "^3.1.0", - "@inquirer/select": "^4.3.1" + "@inquirer/checkbox": "^4.3.0", + "@inquirer/confirm": "^5.1.19", + "@inquirer/editor": "^4.2.21", + "@inquirer/expand": "^4.0.21", + "@inquirer/input": "^4.2.5", + "@inquirer/number": "^3.0.21", + "@inquirer/password": "^4.0.21", + "@inquirer/rawlist": "^4.1.9", + "@inquirer/search": "^3.2.0", + "@inquirer/select": "^4.4.0" }, "engines": { "node": ">=18" @@ -3129,13 +3577,13 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.5.tgz", - "integrity": "sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.9.tgz", + "integrity": "sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8", + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -3151,14 +3599,14 @@ } }, "node_modules/@inquirer/search": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.0.tgz", - "integrity": "sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.0.tgz", + "integrity": "sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -3174,15 +3622,15 @@ } }, "node_modules/@inquirer/select": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.1.tgz", - "integrity": "sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.0.tgz", + "integrity": "sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -3198,9 +3646,9 @@ } }, "node_modules/@inquirer/type": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", - "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.9.tgz", + "integrity": "sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==", "license": "MIT", "engines": { "node": ">=18" @@ -3707,6 +4155,15 @@ "multiformats": "^13.0.0" } }, + "node_modules/@namestone/ezccip": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@namestone/ezccip/-/ezccip-0.1.1.tgz", + "integrity": "sha512-MZ0pLyAT695OfbXGIKNqHRHylIsk9KHMhpRP3ZgHVJxv5TZi1ouptylfEYr05qDqX33wYnR1w9BIqvcYcqruvA==", + "license": "MIT", + "dependencies": { + "ethers": "^6.13.4" + } + }, "node_modules/@noble/ciphers": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.1.tgz", @@ -3759,6 +4216,18 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3797,17 +4266,206 @@ "node": ">= 8" } }, + "node_modules/@nomicfoundation/edr": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.11.3.tgz", + "integrity": "sha512-kqILRkAd455Sd6v8mfP3C1/0tCOynJWY+Ir+k/9Boocu2kObCrsFgG+ZWB7fSBVdd9cPVSNrnhWS+V+PEo637g==", + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.11.3", + "@nomicfoundation/edr-darwin-x64": "0.11.3", + "@nomicfoundation/edr-linux-arm64-gnu": "0.11.3", + "@nomicfoundation/edr-linux-arm64-musl": "0.11.3", + "@nomicfoundation/edr-linux-x64-gnu": "0.11.3", + "@nomicfoundation/edr-linux-x64-musl": "0.11.3", + "@nomicfoundation/edr-win32-x64-msvc": "0.11.3" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.11.3.tgz", + "integrity": "sha512-w0tksbdtSxz9nuzHKsfx4c2mwaD0+l5qKL2R290QdnN9gi9AV62p9DHkOgfBdyg6/a6ZlnQqnISi7C9avk/6VA==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.11.3.tgz", + "integrity": "sha512-QR4jAFrPbOcrO7O2z2ESg+eUeIZPe2bPIlQYgiJ04ltbSGW27FblOzdd5+S3RoOD/dsZGKAvvy6dadBEl0NgoA==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.11.3.tgz", + "integrity": "sha512-Ktjv89RZZiUmOFPspuSBVJ61mBZQ2+HuLmV67InNlh9TSUec/iDjGIwAn59dx0bF/LOSrM7qg5od3KKac4LJDQ==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.11.3.tgz", + "integrity": "sha512-B3sLJx1rL2E9pfdD4mApiwOZSrX0a/KQSBWdlq1uAhFKqkl00yZaY4LejgZndsJAa4iKGQJlGnw4HCGeVt0+jA==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.11.3.tgz", + "integrity": "sha512-D/4cFKDXH6UYyKPu6J3Y8TzW11UzeQI0+wS9QcJzjlrrfKj0ENW7g9VihD1O2FvXkdkTjcCZYb6ai8MMTCsaVw==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.11.3.tgz", + "integrity": "sha512-ergXuIb4nIvmf+TqyiDX5tsE49311DrBky6+jNLgsGDTBaN1GS3OFwFS8I6Ri/GGn6xOaT8sKu3q7/m+WdlFzg==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.11.3.tgz", + "integrity": "sha512-snvEf+WB3OV0wj2A7kQ+ZQqBquMcrozSLXcdnMdEl7Tmn+KDCbmFKBt3Tk0X3qOU4RKQpLPnTxdM07TJNVtung==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.1.tgz", + "integrity": "sha512-K1plXIS42xSHDJZRkrE2TZikqxp9T4y6jUMUNI/imLgN5uCcEQokmfU0DlyP9zzHncYK92HlT5IWP35UVCLrPw==", + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/@openzeppelin/contracts": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", - "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", "license": "MIT" }, "node_modules/@openzeppelin/contracts-v5": { "name": "@openzeppelin/contracts", - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.4.0.tgz", - "integrity": "sha512-eCYgWnLg6WO+X52I16TZt8uEjbtdkgLC0SUX/xnAksjjrQI4Xfn4iBRoI5j55dmlOhDv1Y7BoR3cU7e3WWhC6A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.1.0.tgz", + "integrity": "sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==", "license": "MIT" }, "node_modules/@parcel/watcher": { @@ -5977,75 +6635,238 @@ "url": "https://paulmillr.com/funding/" } }, - "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==", - "license": "MIT" + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/@standard-schema/utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", - "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", - "license": "MIT" + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" }, - "node_modules/@tailwindcss/node": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", - "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", - "license": "MIT", + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "license": "BSD-3-Clause", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "lightningcss": "1.30.1", - "magic-string": "^0.30.17", - "source-map-js": "^1.2.1", - "tailwindcss": "4.1.11" + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@tailwindcss/oxide": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", - "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", - "hasInstallScript": true, - "license": "MIT", + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "license": "BSD-3-Clause", "dependencies": { - "detect-libc": "^2.0.4", - "tar": "^7.4.3" + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.1.11", - "@tailwindcss/oxide-darwin-arm64": "4.1.11", - "@tailwindcss/oxide-darwin-x64": "4.1.11", - "@tailwindcss/oxide-freebsd-x64": "4.1.11", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", - "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", - "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", - "@tailwindcss/oxide-linux-x64-musl": "4.1.11", - "@tailwindcss/oxide-wasm32-wasi": "4.1.11", - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", - "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + "node": ">=6" } }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", - "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, "engines": { - "node": ">= 10" + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@sentry/node/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "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==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", + "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz", + "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-arm64": "4.1.11", + "@tailwindcss/oxide-darwin-x64": "4.1.11", + "@tailwindcss/oxide-freebsd-x64": "4.1.11", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", + "@tailwindcss/oxide-linux-x64-musl": "4.1.11", + "@tailwindcss/oxide-wasm32-wasi": "4.1.11", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz", + "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { @@ -6721,6 +7542,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.0.tgz", "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.10.0" } @@ -7080,6 +7902,19 @@ "node": ">=10" } }, + "node_modules/@unruggable/gateways": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@unruggable/gateways/-/gateways-1.2.5.tgz", + "integrity": "sha512-U80POq7FZ9BtKpmjd+TtIlktl5qDC0k3z9No+PiGQqtNfUMIx4i3+m2OSL6TAlY/rPi8VNvpl7ogK4Hn96bmpg==", + "dependencies": { + "@namestone/ezccip": "^0.1.0", + "ethers": "^6.13", + "fzstd": "^0.1.1" + }, + "peerDependencies": { + "typescript": "^5.5.2" + } + }, "node_modules/@vitejs/plugin-react": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.0.tgz", @@ -8815,6 +9650,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, "node_modules/aes-js": { "version": "4.0.0-beta.5", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", @@ -8835,7 +9679,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -8862,6 +9705,24 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -8928,7 +9789,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/aria-hidden": { @@ -8977,7 +9837,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9052,7 +9911,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/base-x": { @@ -9105,7 +9963,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9318,6 +10175,69 @@ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", "license": "MIT" }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -9333,7 +10253,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -9346,8 +10265,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT", - "optional": true + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", @@ -9479,6 +10403,12 @@ "node": ">=0.10.0" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -9492,7 +10422,6 @@ "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -9500,6 +10429,15 @@ "node": ">=6.14.2" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -9610,6 +10548,18 @@ "upper-case-first": "^2.0.2" } }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "license": "MIT", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, "node_modules/cbw-sdk": { "name": "@coinbase/wallet-sdk", "version": "3.9.3", @@ -9641,7 +10591,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -9698,13 +10647,13 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, "license": "MIT" }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -9729,7 +10678,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -9747,6 +10695,12 @@ "node": ">=18" } }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" + }, "node_modules/cipher-base": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", @@ -9777,12 +10731,23 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -9878,6 +10843,11 @@ "node": ">=0.8" } }, + "node_modules/clones-with-immutable-args": { + "version": "1.1.0", + "resolved": "git+ssh://git@github.com/Arachnid/clones-with-immutable-args.git#23768824cdc037f361f7065538b8f949cae9d3d1", + "license": "BSD" + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -9921,6 +10891,12 @@ "node": ">=0.1.90" } }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "license": "MIT" + }, "node_modules/commander": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", @@ -9972,6 +10948,15 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookie-es": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", @@ -10248,6 +11233,15 @@ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "license": "MIT" }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -10465,7 +11459,6 @@ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", - "optional": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -10480,8 +11473,7 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -10577,11 +11569,23 @@ "node": ">=10.13.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "license": "MIT", "engines": { "node": ">=6" @@ -10690,7 +11694,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -10700,7 +11703,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11179,6 +12181,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, "license": "MIT", "dependencies": { "chardet": "^0.7.0", @@ -11261,6 +12264,22 @@ "license": "Unlicense", "optional": true }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -11378,7 +12397,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -11410,7 +12428,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -11423,6 +12440,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -11444,6 +12470,26 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -11472,10 +12518,16 @@ "node": ">=12.20.0" } }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "license": "MIT" + }, "node_modules/fs-extra": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", - "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -11486,6 +12538,12 @@ "node": ">=14.14" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -11509,6 +12567,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/fzstd": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/fzstd/-/fzstd-0.1.1.tgz", + "integrity": "sha512-dkuVSOKKwh3eas5VkJy1AW1vFpet8TA/fGmVA5krThl8YcOVE/8ZIoEA1+U1vEn5ckxxhLirSdY837azmbaNHA==", + "license": "MIT" + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11529,9 +12593,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "license": "MIT", "engines": { "node": ">=18" @@ -11599,6 +12663,26 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -11612,6 +12696,27 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/globals": { "version": "16.3.0", "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", @@ -11785,75 +12890,362 @@ "@graphql-typed-document-node/core": "^3.2.0", "cross-fetch": "^3.1.5" }, - "peerDependencies": { - "graphql": "14 - 16" + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-ws": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.4.tgz", + "integrity": "sha512-8b4OZtNOvv8+NZva8HXamrc0y1jluYC0+13gdh7198FKjVzXyTvVc95DCwGzaKEfn3YuWZxUqjJlHe3qKM/F2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@fastify/websocket": "^10 || ^11", + "graphql": "^15.10.1 || ^16", + "uWebSockets.js": "^20", + "ws": "^8" + }, + "peerDependenciesMeta": { + "@fastify/websocket": { + "optional": true + }, + "uWebSockets.js": { + "optional": true + }, + "ws": { + "optional": true + } + } + }, + "node_modules/h3": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.1.tgz", + "integrity": "sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.0", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hardhat": { + "version": "2.26.3", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.26.3.tgz", + "integrity": "sha512-gBfjbxCCEaRgMCRgTpjo1CEoJwqNPhyGMMVHYZJxoQ3LLftp2erSVf8ZF6hTQC0r2wst4NcqNmLWqMnHg1quTw==", + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "^0.11.3", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/hardhat/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/hardhat/node_modules/@ethereumjs/util/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==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@ethereumjs/util/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==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/hardhat/node_modules/@noble/curves": { + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@noble/curves/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==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/hardhat/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/hardhat/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "license": "MIT" + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "dev": true, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "node": ">= 4.0.0" } }, - "node_modules/graphql-ws": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-6.0.4.tgz", - "integrity": "sha512-8b4OZtNOvv8+NZva8HXamrc0y1jluYC0+13gdh7198FKjVzXyTvVc95DCwGzaKEfn3YuWZxUqjJlHe3qKM/F2g==", - "dev": true, + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { - "node": ">=20" + "node": ">=8.3.0" }, "peerDependencies": { - "@fastify/websocket": "^10 || ^11", - "graphql": "^15.10.1 || ^16", - "uWebSockets.js": "^20", - "ws": "^8" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { - "@fastify/websocket": { - "optional": true - }, - "uWebSockets.js": { + "bufferutil": { "optional": true }, - "ws": { + "utf-8-validate": { "optional": true } } }, - "node_modules/h3": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.1.tgz", - "integrity": "sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==", - "license": "MIT", - "dependencies": { - "cookie-es": "^1.2.2", - "crossws": "^0.3.3", - "defu": "^6.1.4", - "destr": "^2.0.3", - "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.0", - "radix3": "^1.1.2", - "ufo": "^1.5.4", - "uncrypto": "^0.1.3" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11924,7 +13316,6 @@ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "license": "MIT", - "optional": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -11948,6 +13339,15 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/header-case": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", @@ -11964,13 +13364,28 @@ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "license": "MIT", - "optional": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -12038,9 +13453,9 @@ "license": "BSD-3-Clause" }, "node_modules/iexec": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/iexec/-/iexec-8.18.0.tgz", - "integrity": "sha512-lj2La67p0IKyCHhpV4F2SZD7kmE1AFhGmD26jf8si7/sTelrXun3wNTun6WAOEO9uMi49J0AlA6MxUNBxuCflg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/iexec/-/iexec-8.20.0.tgz", + "integrity": "sha512-ce0l1eJWqOj85kWXbUJ7yF6IhbHiHz1hRqLdDEAJhCvlIAArdyrwJcWtXz6gmuYoSQ0F8gkKvEWC/FHg4Gr/8w==", "license": "Apache-2.0", "dependencies": { "@ensdomains/ens-contracts": "^1.2.5", @@ -12072,9 +13487,9 @@ } }, "node_modules/iexec/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -12084,9 +13499,9 @@ } }, "node_modules/iexec/node_modules/chalk": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", - "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -12120,9 +13535,9 @@ } }, "node_modules/iexec/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "license": "MIT" }, "node_modules/iexec/node_modules/filter-obj": { @@ -12138,9 +13553,9 @@ } }, "node_modules/iexec/node_modules/graphql-request": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.2.0.tgz", - "integrity": "sha512-0GR7eQHBFYz372u9lxS16cOtEekFlZYB2qOyq8wDvzRmdRSJ0mgUVX1tzNcIzk3G+4NY+mGtSz411wZdeDF/+A==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.3.0.tgz", + "integrity": "sha512-cxmQfa/ZknSNtuJpgPpr4CQTwPjSP57EYzOyNoyhPakXqr1yvTtOXNFbxQYaz4DMQ801i2DjnwUkifGLjtXhSQ==", "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.2.0" @@ -12150,15 +13565,15 @@ } }, "node_modules/iexec/node_modules/inquirer": { - "version": "12.9.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.9.0.tgz", - "integrity": "sha512-LlFVmvWVCun7uEgPB3vups9NzBrjJn48kRNtFGw3xU1H5UXExTEz/oF1JGLaB0fvlkUB+W6JfgLcSEaSdH7RPA==", + "version": "12.10.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.10.0.tgz", + "integrity": "sha512-K/epfEnDBZj2Q3NMDcgXWZye3nhSPeoJnOh8lcKWrldw54UEZfS4EmAMsAsmVbl7qKi+vjAsy39Sz4fbgRMewg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/prompts": "^7.8.0", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/prompts": "^7.9.0", + "@inquirer/type": "^3.0.9", "mute-stream": "^2.0.0", "run-async": "^4.0.5", "rxjs": "^7.8.2" @@ -12275,9 +13690,9 @@ } }, "node_modules/iexec/node_modules/query-string": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.2.2.tgz", - "integrity": "sha512-pDSIZJ9sFuOp6VnD+5IkakSVf+rICAuuU88Hcsr6AKL0QtxSIfVuKiVP2oahFI7tk3CRSexwV+Ya6MOoTxzg9g==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.3.1.tgz", + "integrity": "sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==", "license": "MIT", "dependencies": { "decode-uri-component": "^0.4.1", @@ -12308,18 +13723,18 @@ } }, "node_modules/iexec/node_modules/run-async": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.5.tgz", - "integrity": "sha512-oN9GTgxUNDBumHTTDmQ8dep6VIJbgj9S3dPP+9XylVLIK4xB9XTXtKWROd5pnhdXR9k0EgO1JRcNh0T+Ny2FsA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/iexec/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12370,9 +13785,9 @@ } }, "node_modules/iexec/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -12454,12 +13869,22 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -12509,6 +13934,15 @@ "loose-envify": "^1.0.0" } }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, "node_modules/iron-webcrypto": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", @@ -12559,7 +13993,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -12599,7 +14032,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12636,7 +14068,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -12669,12 +14100,20 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -12750,7 +14189,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -12852,6 +14290,12 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12862,7 +14306,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -12937,6 +14380,15 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "license": "MIT", + "engines": { + "node": ">=7.10.1" + } + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -12971,9 +14423,9 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -13401,7 +14853,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -13417,7 +14868,12 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "devOptional": true, + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "license": "MIT" }, "node_modules/lodash.merge": { @@ -13434,11 +14890,16 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -13520,6 +14981,12 @@ "tslib": "^2.0.3" } }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "license": "MIT" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -13579,6 +15046,14 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -13607,12 +15082,62 @@ } } }, + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" + } + }, + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.2" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "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==", "license": "MIT" }, + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "license": "MIT", + "dependencies": { + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -13653,15 +15178,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/minimatch": { "version": "3.1.2", @@ -13700,45 +15223,189 @@ "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "license": "MIT", "dependencies": { - "minipass": "^7.1.2" + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "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" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "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" - } - ], + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", - "peerDependencies": { - "typescript": ">=5.0.4" + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" } }, "node_modules/ms": { @@ -13897,6 +15564,15 @@ "dev": true, "license": "MIT" }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "license": "MIT", + "engines": { + "node": ">=12.19" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -13963,6 +15639,12 @@ "node": ">=0.10.0" } }, + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "license": "MIT" + }, "node_modules/ofetch": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", @@ -14144,7 +15826,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -14160,7 +15841,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -14176,7 +15856,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -14330,6 +16009,12 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", @@ -14868,11 +16553,25 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "license": "MIT", - "optional": true, "dependencies": { "safe-buffer": "^5.1.0" } }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -15041,7 +16740,6 @@ "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" @@ -15165,12 +16863,33 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "license": "ISC" }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -15439,7 +17158,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -15457,6 +17175,15 @@ "upper-case-first": "^2.0.2" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/seroval": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", @@ -15508,6 +17235,12 @@ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "license": "MIT" }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -15670,6 +17403,45 @@ } } }, + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/solid-js": { "version": "1.9.8", "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.8.tgz", @@ -15714,6 +17486,25 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split-on-first": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", @@ -15748,6 +17539,36 @@ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "license": "MIT" }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/stdin-discarder": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", @@ -15821,7 +17642,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15843,7 +17663,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -15896,6 +17715,61 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/tailwind-merge": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", @@ -16061,7 +17935,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -16070,6 +17943,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/toposort": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", @@ -16115,6 +17997,12 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "license": "MIT" + }, "node_modules/tsx": { "version": "4.19.3", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", @@ -16187,7 +18075,6 @@ "version": "5.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", - "devOptional": true, "license": "Apache-2.0", "peer": true, "bin": { @@ -16329,12 +18216,33 @@ "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", "license": "MIT" }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "license": "MIT" }, + "node_modules/undici/node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -16370,6 +18278,15 @@ "node": ">=0.10.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unplugin": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.2.tgz", @@ -16677,7 +18594,6 @@ "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -17060,6 +18976,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wif": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", @@ -17112,6 +19040,12 @@ "node": ">=0.10.0" } }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "license": "Apache-2.0" + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -17175,7 +19109,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -17237,11 +19170,49 @@ "node": ">=12" } }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -17251,9 +19222,9 @@ } }, "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "license": "MIT", "engines": { "node": ">=18" @@ -17263,9 +19234,9 @@ } }, "node_modules/yup": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.0.tgz", - "integrity": "sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz", + "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==", "license": "MIT", "dependencies": { "property-expr": "^2.0.5", diff --git a/package.json b/package.json index ab81aaeb..809c064f 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "graphql": "^16.11.0", - "iexec": "^8.18.0", + "iexec": "^8.20.0", "lucide-react": "^0.536.0", "prettier-plugin-tailwindcss": "^0.6.14", "react": "^19.1.1", diff --git a/src/modules/addresses/address/access/AddressAppsAccessTable.tsx b/src/modules/addresses/address/access/AddressAppsAccessTable.tsx new file mode 100644 index 00000000..6f928dd0 --- /dev/null +++ b/src/modules/addresses/address/access/AddressAppsAccessTable.tsx @@ -0,0 +1,126 @@ +import { PREVIEW_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; +import { useQuery } from '@tanstack/react-query'; +import { LoaderCircle } from 'lucide-react'; +import { DataTable } from '@/components/DataTable'; +import { PaginatedNavigation } from '@/components/PaginatedNavigation'; +import { getIExec } from '@/externals/iexecSdkClient'; +import { usePageParam } from '@/hooks/usePageParam'; +import { ErrorAlert } from '@/modules/ErrorAlert'; +import useUserStore from '@/stores/useUser.store'; +import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; +import { columns } from './addressAppColumns'; + +function useAddressAppsAccessData({ + addressAddress, + currentPage, +}: { + addressAddress: string; + currentPage: number; +}) { + const { chainId } = useUserStore(); + + const pageSize = PREVIEW_TABLE_LENGTH * 2; + + // API returns min 10 items, but we display only 5 per page + const apiBatch = Math.floor((currentPage * PREVIEW_TABLE_LENGTH) / pageSize); + const startIndexInBatch = (currentPage * PREVIEW_TABLE_LENGTH) % pageSize; + + const queryKey = [chainId, 'address', 'appsAccess', addressAddress, apiBatch]; + + const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( + { + queryKey, + queryFn: async () => { + const iexec = await getIExec(); + console.log( + 'fetching app access for address:', + addressAddress, + 'batch:', + apiBatch + ); + + const { count, orders } = await iexec.orderbook.fetchAppOrderbook({ + app: 'any', + requester: addressAddress, + page: apiBatch, + pageSize, + }); + console.log('got app access data:', { + count, + orders, + apiBatch, + startIndexInBatch, + }); + + return { count, orders }; + }, + refetchInterval: TABLE_REFETCH_INTERVAL, + placeholderData: createPlaceholderDataFnForQueryKey(queryKey), + } + ); + + const allOrders = data?.orders || []; + const access = allOrders.slice( + startIndexInBatch, + startIndexInBatch + PREVIEW_TABLE_LENGTH + ); + const count = data?.count || 0; + + return { + data: access, + totalCount: count, + isLoading, + isRefetching, + isError, + hasPastError: isError || errorUpdateCount > 0, + }; +} + +export function AddressAppsAccessTable({ + addressAddress, +}: { + addressAddress: string; +}) { + const [currentPage, setCurrentPage] = usePageParam('addressAppsAccessPage'); + const { + data: access, + totalCount, + isError, + isLoading, + isRefetching, + hasPastError, + } = useAddressAppsAccessData({ + addressAddress, + currentPage: currentPage - 1, + }); + + return ( +
+

+ Latest apps access + {!access && isError && ( + + (outdated) + + )} + {(isLoading || isRefetching) && ( + + )} +

+ {hasPastError && !access.length ? ( + + ) : ( + + )} + +
+ ); +} diff --git a/src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx b/src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx new file mode 100644 index 00000000..1964ccb3 --- /dev/null +++ b/src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx @@ -0,0 +1,134 @@ +import { PREVIEW_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; +import { useQuery } from '@tanstack/react-query'; +import { LoaderCircle } from 'lucide-react'; +import { DataTable } from '@/components/DataTable'; +import { PaginatedNavigation } from '@/components/PaginatedNavigation'; +import { getIExec } from '@/externals/iexecSdkClient'; +import { usePageParam } from '@/hooks/usePageParam'; +import { ErrorAlert } from '@/modules/ErrorAlert'; +import useUserStore from '@/stores/useUser.store'; +import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; +import { columns } from './addressDatasetColumns'; + +function useAddressDatasetsAccessData({ + addressAddress, + currentPage, +}: { + addressAddress: string; + currentPage: number; +}) { + const { chainId } = useUserStore(); + + const pageSize = PREVIEW_TABLE_LENGTH * 2; + + // API returns min 10 items, but we display only 5 per page + const apiBatch = Math.floor((currentPage * PREVIEW_TABLE_LENGTH) / pageSize); + const startIndexInBatch = (currentPage * PREVIEW_TABLE_LENGTH) % pageSize; + + const queryKey = [ + chainId, + 'address', + 'datasetsAccess', + addressAddress, + apiBatch, + ]; + + const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( + { + queryKey, + queryFn: async () => { + const iexec = await getIExec(); + console.log( + 'fetching dataset access for address:', + addressAddress, + 'batch:', + apiBatch + ); + + const { count, orders } = await iexec.orderbook.fetchDatasetOrderbook({ + dataset: 'any', + requester: addressAddress, + page: apiBatch, + pageSize, + }); + console.log('got dataset access data:', { + count, + orders, + apiBatch, + startIndexInBatch, + }); + + return { count, orders }; + }, + refetchInterval: TABLE_REFETCH_INTERVAL, + placeholderData: createPlaceholderDataFnForQueryKey(queryKey), + } + ); + + const allOrders = data?.orders || []; + const access = allOrders.slice( + startIndexInBatch, + startIndexInBatch + PREVIEW_TABLE_LENGTH + ); + const count = data?.count || 0; + + return { + data: access, + totalCount: count, + isLoading, + isRefetching, + isError, + hasPastError: isError || errorUpdateCount > 0, + }; +} + +export function AddressDatasetsAccessTable({ + addressAddress, +}: { + addressAddress: string; +}) { + const [currentPage, setCurrentPage] = usePageParam( + 'addressDatasetsAccessPage' + ); + const { + data: access, + totalCount, + isError, + isLoading, + isRefetching, + hasPastError, + } = useAddressDatasetsAccessData({ + addressAddress, + currentPage: currentPage - 1, + }); + + return ( +
+

+ Latest datasets access + {!access && isError && ( + + (outdated) + + )} + {(isLoading || isRefetching) && ( + + )} +

+ {hasPastError && !access.length ? ( + + ) : ( + + )} + +
+ ); +} diff --git a/src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx b/src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx new file mode 100644 index 00000000..ab12d882 --- /dev/null +++ b/src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx @@ -0,0 +1,135 @@ +import { PREVIEW_TABLE_LENGTH, TABLE_REFETCH_INTERVAL } from '@/config'; +import { useQuery } from '@tanstack/react-query'; +import { LoaderCircle } from 'lucide-react'; +import { DataTable } from '@/components/DataTable'; +import { PaginatedNavigation } from '@/components/PaginatedNavigation'; +import { getIExec } from '@/externals/iexecSdkClient'; +import { usePageParam } from '@/hooks/usePageParam'; +import { ErrorAlert } from '@/modules/ErrorAlert'; +import useUserStore from '@/stores/useUser.store'; +import { createPlaceholderDataFnForQueryKey } from '@/utils/createPlaceholderDataFnForQueryKey'; +import { columns } from './addressWorkerpoolColumns'; + +function useAddressWorkerpoolsAccessData({ + addressAddress, + currentPage, +}: { + addressAddress: string; + currentPage: number; +}) { + const { chainId } = useUserStore(); + + const pageSize = PREVIEW_TABLE_LENGTH * 2; + + // API returns min 10 items, but we display only 5 per page + const apiBatch = Math.floor((currentPage * PREVIEW_TABLE_LENGTH) / pageSize); + const startIndexInBatch = (currentPage * PREVIEW_TABLE_LENGTH) % pageSize; + + const queryKey = [ + chainId, + 'address', + 'workerpoolsAccess', + addressAddress, + apiBatch, + ]; + + const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( + { + queryKey, + queryFn: async () => { + const iexec = await getIExec(); + console.log( + 'fetching workerpool access for address:', + addressAddress, + 'batch:', + apiBatch + ); + + const { count, orders } = + await iexec.orderbook.fetchWorkerpoolOrderbook({ + workerpool: 'any', + requester: addressAddress, + page: apiBatch, + pageSize, + }); + console.log('got workerpool access data:', { + count, + orders, + apiBatch, + startIndexInBatch, + }); + + return { count, orders }; + }, + refetchInterval: TABLE_REFETCH_INTERVAL, + placeholderData: createPlaceholderDataFnForQueryKey(queryKey), + } + ); + + const allOrders = data?.orders || []; + const access = allOrders.slice( + startIndexInBatch, + startIndexInBatch + PREVIEW_TABLE_LENGTH + ); + const count = data?.count || 0; + + return { + data: access, + totalCount: count, + isLoading, + isRefetching, + isError, + hasPastError: isError || errorUpdateCount > 0, + }; +} + +export function AddressWorkerpoolsAccessTable({ + addressAddress, +}: { + addressAddress: string; +}) { + const [currentPage, setCurrentPage] = usePageParam( + 'addressWorkerpoolsAccessPage' + ); + const { + data: access, + totalCount, + isError, + isLoading, + isRefetching, + hasPastError, + } = useAddressWorkerpoolsAccessData({ + addressAddress, + currentPage: currentPage - 1, + }); + + return ( +
+

+ Latest workerpools access + {!access && isError && ( + + (outdated) + + )} + {(isLoading || isRefetching) && ( + + )} +

+ {hasPastError && !access.length ? ( + + ) : ( + + )} + +
+ ); +} diff --git a/src/modules/addresses/address/access/addressAppColumns.tsx b/src/modules/addresses/address/access/addressAppColumns.tsx new file mode 100644 index 00000000..f0b2964f --- /dev/null +++ b/src/modules/addresses/address/access/addressAppColumns.tsx @@ -0,0 +1,70 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { PublishedApporder } from 'iexec/IExecOrderbookModule'; +import CopyButton from '@/components/CopyButton'; +import { truncateAddress } from '@/utils/truncateAddress'; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'order.app', + header: 'App', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.appprice', + header: 'Price', + cell: ({ row }) => {row.original.order.appprice}, + }, + { + accessorKey: 'order.requesterrestrict', + header: 'Requester Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.datasetrestrict', + header: 'Dataset Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.workerpoolrestrict', + header: 'Workerpool Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.volume', + header: 'Volume', + cell: ({ row }) => {row.original.order.volume}, + }, + { + accessorKey: 'remaining', + header: 'Remaining', + cell: ({ row }) => {row.original.remaining}, + }, +]; diff --git a/src/modules/addresses/address/access/addressDatasetColumns.tsx b/src/modules/addresses/address/access/addressDatasetColumns.tsx new file mode 100644 index 00000000..59c7f9c5 --- /dev/null +++ b/src/modules/addresses/address/access/addressDatasetColumns.tsx @@ -0,0 +1,70 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { PublishedDatasetorder } from 'iexec/IExecOrderbookModule'; +import CopyButton from '@/components/CopyButton'; +import { truncateAddress } from '@/utils/truncateAddress'; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'order.dataset', + header: 'Dataset', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.datasetprice', + header: 'Price', + cell: ({ row }) => {row.original.order.datasetprice}, + }, + { + accessorKey: 'order.requesterrestrict', + header: 'Requester Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.apprestrict', + header: 'App Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.workerpoolrestrict', + header: 'Workerpool Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.volume', + header: 'Volume', + cell: ({ row }) => {row.original.order.volume}, + }, + { + accessorKey: 'remaining', + header: 'Remaining', + cell: ({ row }) => {row.original.remaining}, + }, +]; diff --git a/src/modules/addresses/address/access/addressWorkerpoolColumns.tsx b/src/modules/addresses/address/access/addressWorkerpoolColumns.tsx new file mode 100644 index 00000000..b68bbbd5 --- /dev/null +++ b/src/modules/addresses/address/access/addressWorkerpoolColumns.tsx @@ -0,0 +1,70 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { PublishedWorkerpoolorder } from 'iexec/IExecOrderbookModule'; +import CopyButton from '@/components/CopyButton'; +import { truncateAddress } from '@/utils/truncateAddress'; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'order.workerpool', + header: 'Workerpool', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.workerpoolprice', + header: 'Price', + cell: ({ row }) => {row.original.order.workerpoolprice}, + }, + { + accessorKey: 'order.requesterrestrict', + header: 'Requester Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.datasetrestrict', + header: 'Dataset Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.apprestrict', + header: 'App Restriction', + cell: ({ row }) => ( + + ), + }, + { + accessorKey: 'order.volume', + header: 'Volume', + cell: ({ row }) => {row.original.order.volume}, + }, + { + accessorKey: 'remaining', + header: 'Remaining', + cell: ({ row }) => {row.original.remaining}, + }, +]; diff --git a/src/routes/$chainSlug/_layout/address/$addressAddress.tsx b/src/routes/$chainSlug/_layout/address/$addressAddress.tsx index f787990d..8338862f 100644 --- a/src/routes/$chainSlug/_layout/address/$addressAddress.tsx +++ b/src/routes/$chainSlug/_layout/address/$addressAddress.tsx @@ -12,6 +12,9 @@ import { DetailsTable } from '@/modules/DetailsTable'; import { ErrorAlert } from '@/modules/ErrorAlert'; import { Tabs } from '@/modules/Tabs'; import { AddressBreadcrumbs } from '@/modules/addresses/address/AddressBreadcrumbs'; +import { AddressAppsAccessTable } from '@/modules/addresses/address/access/AddressAppsAccessTable'; +import { AddressDatasetsAccessTable } from '@/modules/addresses/address/access/AddressDatasetsAccessTable'; +import { AddressWorkerpoolsAccessTable } from '@/modules/addresses/address/access/AddressWorkerpoolsAccessTable'; import { addressQuery } from '@/modules/addresses/address/addressQuery'; import { AddressAppsTable } from '@/modules/addresses/address/apps/AddressAppsTable'; import { buildAddressDetails } from '@/modules/addresses/address/buildAddressDetails'; @@ -74,6 +77,7 @@ function AddressRoute() { 'APPS', 'DATASETS', 'WORKERPOOLS', + 'ACCESS', ]; const [currentTab, setCurrentTab] = useTabParam('addressTab', tabLabels, 0); const { chainId, address: userAddress } = useUserStore(); @@ -234,6 +238,13 @@ function AddressRoute() { )} + {currentTab === 6 && ( + <> + + + + + )}
); From f93cdc2bf980cc3394b96dca51007436ca72e690 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 14:01:44 +0200 Subject: [PATCH 13/33] fix: correct import path for WorkerpoolAccessTable component --- src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx index ea2e6956..4c0b21c6 100644 --- a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx +++ b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx @@ -13,7 +13,7 @@ import { Tabs } from '@/modules/Tabs'; import { SearcherBar } from '@/modules/search/SearcherBar'; import { WorkerpoolDealsTable } from '@/modules/workerpools/workerpool/WorkerpoolDealsTable'; import { buildWorkerpoolDetails } from '@/modules/workerpools/workerpool/buildWorkerpoolDetails'; -import { WorkerpoolAccessTable } from '@/modules/workerpools/workerpool/workerpoolAccessTable'; +import { WorkerpoolAccessTable } from '@/modules/workerpools/workerpool/WorkerpoolAccessTable'; import { WorkerpoolBreadcrumbs } from '@/modules/workerpools/workerpool/workerpoolBreadcrumbs'; import { workerpoolQuery } from '@/modules/workerpools/workerpool/workerpoolQuery'; import useUserStore from '@/stores/useUser.store'; From f34018835eb8db245936f6064cd03d6dd8391308 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 14:33:11 +0200 Subject: [PATCH 14/33] refactor: remove console logs from access data fetching functions --- .../address/access/AddressAppsAccessTable.tsx | 12 ------------ .../address/access/AddressDatasetsAccessTable.tsx | 12 ------------ .../address/access/AddressWorkerpoolsAccessTable.tsx | 12 ------------ 3 files changed, 36 deletions(-) diff --git a/src/modules/addresses/address/access/AddressAppsAccessTable.tsx b/src/modules/addresses/address/access/AddressAppsAccessTable.tsx index 6f928dd0..c71bcbed 100644 --- a/src/modules/addresses/address/access/AddressAppsAccessTable.tsx +++ b/src/modules/addresses/address/access/AddressAppsAccessTable.tsx @@ -32,12 +32,6 @@ function useAddressAppsAccessData({ queryKey, queryFn: async () => { const iexec = await getIExec(); - console.log( - 'fetching app access for address:', - addressAddress, - 'batch:', - apiBatch - ); const { count, orders } = await iexec.orderbook.fetchAppOrderbook({ app: 'any', @@ -45,12 +39,6 @@ function useAddressAppsAccessData({ page: apiBatch, pageSize, }); - console.log('got app access data:', { - count, - orders, - apiBatch, - startIndexInBatch, - }); return { count, orders }; }, diff --git a/src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx b/src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx index 1964ccb3..4ff1e080 100644 --- a/src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx +++ b/src/modules/addresses/address/access/AddressDatasetsAccessTable.tsx @@ -38,12 +38,6 @@ function useAddressDatasetsAccessData({ queryKey, queryFn: async () => { const iexec = await getIExec(); - console.log( - 'fetching dataset access for address:', - addressAddress, - 'batch:', - apiBatch - ); const { count, orders } = await iexec.orderbook.fetchDatasetOrderbook({ dataset: 'any', @@ -51,12 +45,6 @@ function useAddressDatasetsAccessData({ page: apiBatch, pageSize, }); - console.log('got dataset access data:', { - count, - orders, - apiBatch, - startIndexInBatch, - }); return { count, orders }; }, diff --git a/src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx b/src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx index ab12d882..4ed9f1d7 100644 --- a/src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx +++ b/src/modules/addresses/address/access/AddressWorkerpoolsAccessTable.tsx @@ -38,12 +38,6 @@ function useAddressWorkerpoolsAccessData({ queryKey, queryFn: async () => { const iexec = await getIExec(); - console.log( - 'fetching workerpool access for address:', - addressAddress, - 'batch:', - apiBatch - ); const { count, orders } = await iexec.orderbook.fetchWorkerpoolOrderbook({ @@ -52,12 +46,6 @@ function useAddressWorkerpoolsAccessData({ page: apiBatch, pageSize, }); - console.log('got workerpool access data:', { - count, - orders, - apiBatch, - startIndexInBatch, - }); return { count, orders }; }, From d35aa68c08ff6bcbefabf8eeb2ebeb1ede64edcd Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 14:36:10 +0200 Subject: [PATCH 15/33] feat: enhance pagination logic to display all pages for 7 or fewer total pages --- src/components/PaginatedNavigation.tsx | 33 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/components/PaginatedNavigation.tsx b/src/components/PaginatedNavigation.tsx index 495e3a45..7abb275e 100644 --- a/src/components/PaginatedNavigation.tsx +++ b/src/components/PaginatedNavigation.tsx @@ -22,21 +22,36 @@ export const PaginatedNavigation = ({ const generatePages = () => { const pages: (number | 'ellipsis')[] = []; - if (totalPages <= 5) { + if (totalPages <= 7) { + // Show all pages if 7 or fewer for (let i = 1; i <= totalPages; i++) { pages.push(i); } - } else if (currentPage <= 3) { - for (let i = 1; i <= Math.min(currentPage + 2, totalPages); i++) { - pages.push(i); - } } else { + // Always show first page pages.push(1); - pages.push('ellipsis'); - const maxPage = Math.min(currentPage + 2, totalPages); - for (let i = currentPage; i <= maxPage; i++) { - pages.push(i); + if (currentPage <= 3) { + // Near beginning: 1 2 3 4 ... last + for (let i = 2; i <= 4; i++) { + pages.push(i); + } + pages.push('ellipsis'); + pages.push(totalPages); + } else if (currentPage >= totalPages - 2) { + // Near end: 1 ... (last-3) (last-2) (last-1) last + pages.push('ellipsis'); + for (let i = totalPages - 3; i <= totalPages; i++) { + pages.push(i); + } + } else { + // In middle: 1 ... (current-1) current (current+1) ... last + pages.push('ellipsis'); + for (let i = currentPage - 1; i <= currentPage + 1; i++) { + pages.push(i); + } + pages.push('ellipsis'); + pages.push(totalPages); } } From 4efb46f7cd837a9a5e903b78f1890e23df3df83a Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 14:36:16 +0200 Subject: [PATCH 16/33] feat: update pagination logic to support mobile-first design and dynamic page visibility --- src/components/PaginatedNavigation.tsx | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/components/PaginatedNavigation.tsx b/src/components/PaginatedNavigation.tsx index 7abb275e..c87da08a 100644 --- a/src/components/PaginatedNavigation.tsx +++ b/src/components/PaginatedNavigation.tsx @@ -22,13 +22,29 @@ export const PaginatedNavigation = ({ const generatePages = () => { const pages: (number | 'ellipsis')[] = []; - if (totalPages <= 7) { - // Show all pages if 7 or fewer + // Mobile-first approach: show fewer pages on small screens + const isMobile = typeof window !== 'undefined' && window.innerWidth < 640; + const maxVisiblePages = isMobile ? 3 : 7; + + if (totalPages <= maxVisiblePages) { + // Show all pages if within limit for (let i = 1; i <= totalPages; i++) { pages.push(i); } + } else if (isMobile) { + // Mobile: simplified pagination - only show current and neighbors + if (currentPage === 1) { + // At start: 1 2 ... last + pages.push(1, 2, 'ellipsis', totalPages); + } else if (currentPage === totalPages) { + // At end: 1 ... (last-1) last + pages.push(1, 'ellipsis', totalPages - 1, totalPages); + } else { + // Middle: 1 ... current ... last + pages.push(1, 'ellipsis', currentPage, 'ellipsis', totalPages); + } } else { - // Always show first page + // Desktop: full pagination logic pages.push(1); if (currentPage <= 3) { From 6332132b8faf4e989bcb76bb93230756d9184323 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 15:02:13 +0200 Subject: [PATCH 17/33] feat: update access data fetching logic to support pagination and total count for apps, datasets, and workerpools --- src/modules/apps/app/AppAccessTable.tsx | 30 ++++++++++++------- .../datasets/dataset/DatasetAccessTable.tsx | 29 +++++++++++------- .../workerpool/WorkerpoolAccessTable.tsx | 28 +++++++++++------ 3 files changed, 57 insertions(+), 30 deletions(-) diff --git a/src/modules/apps/app/AppAccessTable.tsx b/src/modules/apps/app/AppAccessTable.tsx index 20583a22..2dfcb2b8 100644 --- a/src/modules/apps/app/AppAccessTable.tsx +++ b/src/modules/apps/app/AppAccessTable.tsx @@ -19,6 +19,12 @@ function useAppAccessData({ }) { const { chainId } = useUserStore(); + const pageSize = DETAIL_TABLE_LENGTH * 2; + + // API returns min 10 items, but we display only 5 per page + const apiBatch = Math.floor((currentPage * DETAIL_TABLE_LENGTH) / pageSize); + const startIndexInBatch = (currentPage * DETAIL_TABLE_LENGTH) % pageSize; + const queryKey = [chainId, 'app', 'access', appAddress, currentPage]; const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( { @@ -26,28 +32,30 @@ function useAppAccessData({ queryFn: async () => { const iexec = await getIExec(); - const { count, orders } = - await iexec.orderbook.fetchAppOrderbook(appAddress); + const { count, orders } = await iexec.orderbook.fetchAppOrderbook({ + app: appAddress, + page: apiBatch, + pageSize, + }); return { count, orders }; }, refetchInterval: TABLE_REFETCH_INTERVAL, placeholderData: createPlaceholderDataFnForQueryKey(queryKey), } ); - - const access = data?.orders || []; + const allOrders = data?.orders || []; + const access = allOrders.slice( + startIndexInBatch, + startIndexInBatch + DETAIL_TABLE_LENGTH + ); const count = data?.count || 0; - const hasNextPage = count > DETAIL_TABLE_LENGTH; - const additionalPages = hasNextPage - ? Math.ceil(count / DETAIL_TABLE_LENGTH) - 1 - : 0; return { data: access, + totalCount: count, isLoading, isRefetching, isError, - additionalPages, hasPastError: isError || errorUpdateCount > 0, }; } @@ -64,10 +72,10 @@ export function AppAccessTable({ const [currentPage, setCurrentPage] = usePageParam('appAccessPage'); const { data: access, + totalCount, isError, isLoading, isRefetching, - additionalPages, hasPastError, } = useAppAccessData({ appAddress, currentPage: currentPage - 1 }); @@ -93,7 +101,7 @@ export function AppAccessTable({ )}
diff --git a/src/modules/datasets/dataset/DatasetAccessTable.tsx b/src/modules/datasets/dataset/DatasetAccessTable.tsx index 93ea8304..d8690518 100644 --- a/src/modules/datasets/dataset/DatasetAccessTable.tsx +++ b/src/modules/datasets/dataset/DatasetAccessTable.tsx @@ -19,6 +19,12 @@ function useDatasetAccessData({ }) { const { chainId } = useUserStore(); + const pageSize = DETAIL_TABLE_LENGTH * 2; + + // API returns min 10 items, but we display only 8 per page + const apiBatch = Math.floor((currentPage * DETAIL_TABLE_LENGTH) / pageSize); + const startIndexInBatch = (currentPage * DETAIL_TABLE_LENGTH) % pageSize; + const queryKey = [chainId, 'dataset', 'access', datasetAddress, currentPage]; const { data, isLoading, isRefetching, isError, errorUpdateCount } = useQuery( { @@ -26,8 +32,11 @@ function useDatasetAccessData({ queryFn: async () => { const iexec = await getIExec(); - const { count, orders } = - await iexec.orderbook.fetchDatasetOrderbook(datasetAddress); + const { count, orders } = await iexec.orderbook.fetchDatasetOrderbook({ + dataset: datasetAddress, + page: apiBatch, + pageSize, + }); return { count, orders }; }, refetchInterval: TABLE_REFETCH_INTERVAL, @@ -35,19 +44,19 @@ function useDatasetAccessData({ } ); - const access = data?.orders || []; + const allOrders = data?.orders || []; + const access = allOrders.slice( + startIndexInBatch, + startIndexInBatch + DETAIL_TABLE_LENGTH + ); const count = data?.count || 0; - const hasNextPage = count > DETAIL_TABLE_LENGTH; - const additionalPages = hasNextPage - ? Math.ceil(count / DETAIL_TABLE_LENGTH) - 1 - : 0; return { data: access, + totalCount: count, isLoading, isRefetching, isError, - additionalPages, hasPastError: isError || errorUpdateCount > 0, }; } @@ -64,10 +73,10 @@ export function DatasetAccessTable({ const [currentPage, setCurrentPage] = usePageParam('datasetAccessPage'); const { data: access, + totalCount, isError, isLoading, isRefetching, - additionalPages, hasPastError, } = useDatasetAccessData({ datasetAddress, currentPage: currentPage - 1 }); @@ -93,7 +102,7 @@ export function DatasetAccessTable({ )}
diff --git a/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx b/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx index affdedd3..98225b6f 100644 --- a/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx +++ b/src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx @@ -19,6 +19,12 @@ function useWorkerpoolAccessData({ }) { const { chainId } = useUserStore(); + const pageSize = DETAIL_TABLE_LENGTH * 2; + + // API returns min 10 items, but we display only 5 per page + const apiBatch = Math.floor((currentPage * DETAIL_TABLE_LENGTH) / pageSize); + const startIndexInBatch = (currentPage * DETAIL_TABLE_LENGTH) % pageSize; + const queryKey = [ chainId, 'workerpool', @@ -33,7 +39,11 @@ function useWorkerpoolAccessData({ const iexec = await getIExec(); const { count, orders } = - await iexec.orderbook.fetchWorkerpoolOrderbook(); + await iexec.orderbook.fetchWorkerpoolOrderbook({ + workerpool: workerpoolAddress, + page: apiBatch, + pageSize, + }); return { count, orders }; }, @@ -42,19 +52,19 @@ function useWorkerpoolAccessData({ } ); - const access = data?.orders || []; + const allOrders = data?.orders || []; + const access = allOrders.slice( + startIndexInBatch, + startIndexInBatch + DETAIL_TABLE_LENGTH + ); const count = data?.count || 0; - const hasNextPage = count > DETAIL_TABLE_LENGTH; - const additionalPages = hasNextPage - ? Math.ceil(count / DETAIL_TABLE_LENGTH) - 1 - : 0; return { data: access, + totalCount: count, isLoading, isRefetching, isError, - additionalPages, hasPastError: isError || errorUpdateCount > 0, }; } @@ -71,10 +81,10 @@ export function WorkerpoolAccessTable({ const [currentPage, setCurrentPage] = usePageParam('workerpoolAccessPage'); const { data: access, + totalCount, isError, isLoading, isRefetching, - additionalPages, hasPastError, } = useWorkerpoolAccessData({ workerpoolAddress, @@ -103,7 +113,7 @@ export function WorkerpoolAccessTable({ )}
From 2e677ba076a65cfb9d7363f0489bcc4acb746647 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 15:10:34 +0200 Subject: [PATCH 18/33] fix: prevent rendering of pagination controls for invalid states --- src/components/PaginatedNavigation.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/PaginatedNavigation.tsx b/src/components/PaginatedNavigation.tsx index c87da08a..566615e8 100644 --- a/src/components/PaginatedNavigation.tsx +++ b/src/components/PaginatedNavigation.tsx @@ -19,6 +19,11 @@ export const PaginatedNavigation = ({ totalPages, onPageChange, }: PaginationControlsProps) => { + // Don't render pagination if no pages or invalid state + if (!totalPages || totalPages <= 0 || currentPage <= 0) { + return null; + } + const generatePages = () => { const pages: (number | 'ellipsis')[] = []; From 83f837efbbb30394d4594950024b83c528d5106f Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 15:14:56 +0200 Subject: [PATCH 19/33] refactor: prettier --- src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx index 4c0b21c6..95e3cff4 100644 --- a/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx +++ b/src/routes/$chainSlug/_layout/workerpool/$workerpoolAddress.tsx @@ -11,9 +11,9 @@ import { DetailsTable } from '@/modules/DetailsTable'; import { ErrorAlert } from '@/modules/ErrorAlert'; import { Tabs } from '@/modules/Tabs'; import { SearcherBar } from '@/modules/search/SearcherBar'; +import { WorkerpoolAccessTable } from '@/modules/workerpools/workerpool/WorkerpoolAccessTable'; import { WorkerpoolDealsTable } from '@/modules/workerpools/workerpool/WorkerpoolDealsTable'; import { buildWorkerpoolDetails } from '@/modules/workerpools/workerpool/buildWorkerpoolDetails'; -import { WorkerpoolAccessTable } from '@/modules/workerpools/workerpool/WorkerpoolAccessTable'; import { WorkerpoolBreadcrumbs } from '@/modules/workerpools/workerpool/workerpoolBreadcrumbs'; import { workerpoolQuery } from '@/modules/workerpools/workerpool/workerpoolQuery'; import useUserStore from '@/stores/useUser.store'; From 66d27df59f0d4174e7bac8a733ad0f1350c8638e Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 15:19:07 +0200 Subject: [PATCH 20/33] fix: stabilize pagination rendering during lading state --- src/components/PaginatedNavigation.tsx | 39 +++++++++++++++++--------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/src/components/PaginatedNavigation.tsx b/src/components/PaginatedNavigation.tsx index 566615e8..305b5026 100644 --- a/src/components/PaginatedNavigation.tsx +++ b/src/components/PaginatedNavigation.tsx @@ -1,3 +1,4 @@ +import { useRef } from 'react'; import { Pagination, PaginationContent, @@ -19,8 +20,18 @@ export const PaginatedNavigation = ({ totalPages, onPageChange, }: PaginationControlsProps) => { + // Keep stable totalPages to prevent pagination from disappearing during loading + const lastValidTotalPagesRef = useRef(1); + + // Only update the ref if we have a valid totalPages (> 0) + if (totalPages > 0) { + lastValidTotalPagesRef.current = totalPages; + } + + const stableTotalPages = lastValidTotalPagesRef.current; + // Don't render pagination if no pages or invalid state - if (!totalPages || totalPages <= 0 || currentPage <= 0) { + if (!stableTotalPages || stableTotalPages <= 0 || currentPage <= 0) { return null; } @@ -31,22 +42,22 @@ export const PaginatedNavigation = ({ const isMobile = typeof window !== 'undefined' && window.innerWidth < 640; const maxVisiblePages = isMobile ? 3 : 7; - if (totalPages <= maxVisiblePages) { + if (stableTotalPages <= maxVisiblePages) { // Show all pages if within limit - for (let i = 1; i <= totalPages; i++) { + for (let i = 1; i <= stableTotalPages; i++) { pages.push(i); } } else if (isMobile) { // Mobile: simplified pagination - only show current and neighbors if (currentPage === 1) { // At start: 1 2 ... last - pages.push(1, 2, 'ellipsis', totalPages); - } else if (currentPage === totalPages) { + pages.push(1, 2, 'ellipsis', stableTotalPages); + } else if (currentPage === stableTotalPages) { // At end: 1 ... (last-1) last - pages.push(1, 'ellipsis', totalPages - 1, totalPages); + pages.push(1, 'ellipsis', stableTotalPages - 1, stableTotalPages); } else { // Middle: 1 ... current ... last - pages.push(1, 'ellipsis', currentPage, 'ellipsis', totalPages); + pages.push(1, 'ellipsis', currentPage, 'ellipsis', stableTotalPages); } } else { // Desktop: full pagination logic @@ -58,11 +69,11 @@ export const PaginatedNavigation = ({ pages.push(i); } pages.push('ellipsis'); - pages.push(totalPages); - } else if (currentPage >= totalPages - 2) { + pages.push(stableTotalPages); + } else if (currentPage >= stableTotalPages - 2) { // Near end: 1 ... (last-3) (last-2) (last-1) last pages.push('ellipsis'); - for (let i = totalPages - 3; i <= totalPages; i++) { + for (let i = stableTotalPages - 3; i <= stableTotalPages; i++) { pages.push(i); } } else { @@ -72,7 +83,7 @@ export const PaginatedNavigation = ({ pages.push(i); } pages.push('ellipsis'); - pages.push(totalPages); + pages.push(stableTotalPages); } } @@ -86,7 +97,7 @@ export const PaginatedNavigation = ({ }; const handleNext = () => { - if (currentPage < totalPages) onPageChange(currentPage + 1); + if (currentPage < stableTotalPages) onPageChange(currentPage + 1); }; return ( @@ -122,7 +133,9 @@ export const PaginatedNavigation = ({ From 198d0edf4c88c85d1b3295f776f463afe7a22534 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 15:28:22 +0200 Subject: [PATCH 21/33] fix: normalize case for order restrictions in CopyButton components --- src/modules/access/appColumns.tsx | 33 +++++++++----- src/modules/access/datasetColumns.tsx | 33 +++++++++----- src/modules/access/workerpoolColumns.tsx | 33 +++++++++----- .../address/access/addressAppColumns.tsx | 37 ++++++++++------ .../address/access/addressDatasetColumns.tsx | 37 ++++++++++------ .../access/addressWorkerpoolColumns.tsx | 44 ++++++++++++------- 6 files changed, 137 insertions(+), 80 deletions(-) diff --git a/src/modules/access/appColumns.tsx b/src/modules/access/appColumns.tsx index 928e5dd4..da287d11 100644 --- a/src/modules/access/appColumns.tsx +++ b/src/modules/access/appColumns.tsx @@ -9,10 +9,13 @@ export const columns: ColumnDef[] = [ header: 'Dataset Restriction', cell: ({ row }) => ( ), }, @@ -21,10 +24,13 @@ export const columns: ColumnDef[] = [ header: 'Requester Restriction', cell: ({ row }) => ( ), }, @@ -33,10 +39,13 @@ export const columns: ColumnDef[] = [ header: 'Workerpool Restriction', cell: ({ row }) => ( ), }, diff --git a/src/modules/access/datasetColumns.tsx b/src/modules/access/datasetColumns.tsx index 23241790..961101f3 100644 --- a/src/modules/access/datasetColumns.tsx +++ b/src/modules/access/datasetColumns.tsx @@ -9,10 +9,13 @@ export const columns: ColumnDef[] = [ header: 'App Restriction', cell: ({ row }) => ( ), }, @@ -21,10 +24,13 @@ export const columns: ColumnDef[] = [ header: 'Requester Restriction', cell: ({ row }) => ( ), }, @@ -33,10 +39,13 @@ export const columns: ColumnDef[] = [ header: 'Workerpool Restriction', cell: ({ row }) => ( ), }, diff --git a/src/modules/access/workerpoolColumns.tsx b/src/modules/access/workerpoolColumns.tsx index ba300585..295bb47d 100644 --- a/src/modules/access/workerpoolColumns.tsx +++ b/src/modules/access/workerpoolColumns.tsx @@ -9,10 +9,13 @@ export const columns: ColumnDef[] = [ header: 'App Restriction', cell: ({ row }) => ( ), }, @@ -21,10 +24,13 @@ export const columns: ColumnDef[] = [ header: 'Requester Restriction', cell: ({ row }) => ( ), }, @@ -33,10 +39,13 @@ export const columns: ColumnDef[] = [ header: 'Dataset Restriction', cell: ({ row }) => ( ), }, diff --git a/src/modules/addresses/address/access/addressAppColumns.tsx b/src/modules/addresses/address/access/addressAppColumns.tsx index f0b2964f..8110dd72 100644 --- a/src/modules/addresses/address/access/addressAppColumns.tsx +++ b/src/modules/addresses/address/access/addressAppColumns.tsx @@ -9,10 +9,10 @@ export const columns: ColumnDef[] = [ header: 'App', cell: ({ row }) => ( ), }, @@ -26,10 +26,13 @@ export const columns: ColumnDef[] = [ header: 'Requester Restriction', cell: ({ row }) => ( ), }, @@ -38,10 +41,13 @@ export const columns: ColumnDef[] = [ header: 'Dataset Restriction', cell: ({ row }) => ( ), }, @@ -50,10 +56,13 @@ export const columns: ColumnDef[] = [ header: 'Workerpool Restriction', cell: ({ row }) => ( ), }, diff --git a/src/modules/addresses/address/access/addressDatasetColumns.tsx b/src/modules/addresses/address/access/addressDatasetColumns.tsx index 59c7f9c5..00bc6d73 100644 --- a/src/modules/addresses/address/access/addressDatasetColumns.tsx +++ b/src/modules/addresses/address/access/addressDatasetColumns.tsx @@ -9,10 +9,10 @@ export const columns: ColumnDef[] = [ header: 'Dataset', cell: ({ row }) => ( ), }, @@ -26,10 +26,13 @@ export const columns: ColumnDef[] = [ header: 'Requester Restriction', cell: ({ row }) => ( ), }, @@ -38,10 +41,13 @@ export const columns: ColumnDef[] = [ header: 'App Restriction', cell: ({ row }) => ( ), }, @@ -50,10 +56,13 @@ export const columns: ColumnDef[] = [ header: 'Workerpool Restriction', cell: ({ row }) => ( ), }, diff --git a/src/modules/addresses/address/access/addressWorkerpoolColumns.tsx b/src/modules/addresses/address/access/addressWorkerpoolColumns.tsx index b68bbbd5..080713cb 100644 --- a/src/modules/addresses/address/access/addressWorkerpoolColumns.tsx +++ b/src/modules/addresses/address/access/addressWorkerpoolColumns.tsx @@ -9,10 +9,13 @@ export const columns: ColumnDef[] = [ header: 'Workerpool', cell: ({ row }) => ( ), }, @@ -26,10 +29,13 @@ export const columns: ColumnDef[] = [ header: 'Requester Restriction', cell: ({ row }) => ( ), }, @@ -38,10 +44,13 @@ export const columns: ColumnDef[] = [ header: 'Dataset Restriction', cell: ({ row }) => ( ), }, @@ -50,10 +59,13 @@ export const columns: ColumnDef[] = [ header: 'App Restriction', cell: ({ row }) => ( ), }, From 53f512f35e6adbe89c4c76f60745d15ef15456ae Mon Sep 17 00:00:00 2001 From: Erwan Decoster <36567542+ErwanDecoster@users.noreply.github.com> Date: Fri, 17 Oct 2025 15:41:34 +0200 Subject: [PATCH 22/33] fix: useTabParam() name in dataset Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx index 77c11acb..f23d3354 100644 --- a/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx +++ b/src/routes/$chainSlug/_layout/dataset/$datasetAddress.tsx @@ -91,7 +91,7 @@ function useDatasetData(datasetAddress: string, chainId: number) { function DatasetsRoute() { const tabLabels = ['DETAILS', 'DEALS', 'ACCESS']; - const [currentTab, setCurrentTab] = useTabParam('appTab', tabLabels, 0); + const [currentTab, setCurrentTab] = useTabParam('datasetTab', tabLabels, 0); const { chainId } = useUserStore(); const { datasetAddress } = Route.useParams(); From 985787e224397774c8190d25a4fd03ff81ff9c57 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 15:44:45 +0200 Subject: [PATCH 23/33] fix: correct error message wording in loading alerts across multiple tables --- src/modules/addresses/address/access/AddressAppsAccessTable.tsx | 2 +- .../addresses/address/access/AddressDatasetsAccessTable.tsx | 2 +- .../addresses/address/access/AddressWorkerpoolsAccessTable.tsx | 2 +- src/modules/addresses/address/apps/AddressAppsTable.tsx | 2 +- src/modules/addresses/address/datasets/AddressDatasetsTable.tsx | 2 +- .../requests/beneficiaryDeals/AddressBeneficiaryDealsTable.tsx | 2 +- .../requests/requestedDeals/AddressRequestedDealsTable.tsx | 2 +- .../requests/requestedTasks/AddressRequestedTasksTable.tsx | 2 +- .../addresses/address/workerpools/AddressWorkerpoolsTable.tsx | 2 +- .../workers/beneficiaryDeals/addressContributionTable.tsx | 2 +- src/modules/apps/AppsPreviewTable.tsx | 2 +- src/modules/apps/app/AppAccessTable.tsx | 2 +- src/modules/apps/app/AppDealsTable.tsx | 2 +- src/modules/datasets/DatasetsPreviewTable.tsx | 2 +- src/modules/datasets/dataset/DatasetAccessTable.tsx | 2 +- src/modules/datasets/dataset/DatasetDealsTable.tsx | 2 +- src/modules/workerpools/workerpool/WorkerpoolAccessTable.tsx | 2 +- src/modules/workerpools/workerpool/WorkerpoolDealsTable.tsx | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/modules/addresses/address/access/AddressAppsAccessTable.tsx b/src/modules/addresses/address/access/AddressAppsAccessTable.tsx index c71bcbed..8abfa1c2 100644 --- a/src/modules/addresses/address/access/AddressAppsAccessTable.tsx +++ b/src/modules/addresses/address/access/AddressAppsAccessTable.tsx @@ -96,7 +96,7 @@ export function AddressAppsAccessTable({ )} {hasPastError && !access.length ? ( - + ) : ( {hasPastError && !access.length ? ( - + ) : ( {hasPastError && !access.length ? ( - + ) : ( {hasPastError && !apps.length ? ( - + ) : ( {hasPastError && !datasets.length ? ( - + ) : ( {hasPastError && !beneficiaryDeals.length ? ( - + ) : ( {hasPastError && !requestedDeals.length ? ( - + ) : ( {hasPastError && !requestedTasks.length ? ( - + ) : ( {hasPastError && !workerpools.length ? ( - + ) : ( {hasPastError && !contribution.length ? ( - + ) : ( {(apps.isError || apps.errorUpdateCount > 0) && !apps.data ? ( - + ) : ( {hasPastError && !access.length ? ( - + ) : ( {hasPastError && !deals.length ? ( - + ) : ( {(datasets.isError || datasets.errorUpdateCount > 0) && !datasets.data ? ( - + ) : ( {hasPastError && !access.length ? ( - + ) : ( {hasPastError && !deals.length ? ( - + ) : ( {hasPastError && !access.length ? ( - + ) : ( {hasPastError && !deals.length ? ( - + ) : ( Date: Fri, 17 Oct 2025 16:33:00 +0200 Subject: [PATCH 24/33] feat: add accessibility attributes to buttons in CopyButton, Navbar, and SchemaSearch components --- src/components/CopyButton.tsx | 3 +++ src/components/navbar/NavBar.tsx | 4 ++++ src/modules/datasets/SchemaSearch.tsx | 9 ++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/components/CopyButton.tsx b/src/components/CopyButton.tsx index e61b53a1..eeec7056 100644 --- a/src/components/CopyButton.tsx +++ b/src/components/CopyButton.tsx @@ -63,6 +63,9 @@ const CopyButton = ({ onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} className="hover:before:bg-muted active:before:bg-secondary relative z-0 -mx-1 -my-1 flex items-center gap-1 px-1 py-1 transition-colors before:absolute before:inset-0 before:-z-10 before:rounded-lg before:duration-200 active:before:scale-x-[0.98] active:before:scale-y-[0.94]" + id="copy-button" + type="button" + aria-label="Copy" > {buttonText && {buttonText}} diff --git a/src/components/navbar/NavBar.tsx b/src/components/navbar/NavBar.tsx index bfe859af..ab322247 100644 --- a/src/components/navbar/NavBar.tsx +++ b/src/components/navbar/NavBar.tsx @@ -50,6 +50,8 @@ export function Navbar() { From f5e75ceeb1b1eb19bc5d18f492df53a345434242 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 17 Oct 2025 16:59:18 +0200 Subject: [PATCH 25/33] feat: add accessibility attributes to ChainLink and Button components in Footer, Navbar, and AddressChip --- src/components/Footer.tsx | 8 ++++++-- src/components/ModeToggle.tsx | 2 +- src/components/navbar/AddressChip.tsx | 1 + src/components/navbar/NavBar.tsx | 18 ++++++++++++++---- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 246e99b0..588b7e1b 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -78,8 +78,12 @@ export function Footer({ className }: { className?: string }) { )} >
- - iExec logo + + iExec Explorer diff --git a/src/components/ModeToggle.tsx b/src/components/ModeToggle.tsx index 86b52490..2723c093 100644 --- a/src/components/ModeToggle.tsx +++ b/src/components/ModeToggle.tsx @@ -34,7 +34,7 @@ export function ModeToggle() { size="none" role="radio" aria-checked={selected} - aria-label={label} + aria-label={`Toggle ${label} mode`} title={label} className={cn( 'text-foreground hover:bg-muted p-1', diff --git a/src/components/navbar/AddressChip.tsx b/src/components/navbar/AddressChip.tsx index 1cb4d45b..6f540554 100644 --- a/src/components/navbar/AddressChip.tsx +++ b/src/components/navbar/AddressChip.tsx @@ -42,6 +42,7 @@ export function AddressChip({ address }: { address: string }) {
-
-
From 590531a6cca190babbcbfe3952a3558967bf9009 Mon Sep 17 00:00:00 2001 From: Erwan Decoster <36567542+ErwanDecoster@users.noreply.github.com> Date: Fri, 19 Dec 2025 18:26:23 +0100 Subject: [PATCH 28/33] fix: fix typo Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/components/Footer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 4fa0e21a..02e20bf2 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -18,7 +18,7 @@ function SocialLinksItems({ className }: { className?: string }) { { href: 'https://twitter.com/iEx_ec', icon: , - arialLabel: 'Twitter', + ariaLabel: 'Twitter', }, { href: 'https://discord.gg/pbt9m98wnU', From cc1f0b04a9c5b810c1dcbbec62b33db29069bb2b Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 19 Dec 2025 18:28:20 +0100 Subject: [PATCH 29/33] fix: improve accessibility roles in Navbar and Tabs components --- src/components/navbar/NavBar.tsx | 8 ++++---- src/modules/Tabs.tsx | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/navbar/NavBar.tsx b/src/components/navbar/NavBar.tsx index 3beddcf9..e4b79cae 100644 --- a/src/components/navbar/NavBar.tsx +++ b/src/components/navbar/NavBar.tsx @@ -100,7 +100,7 @@ export function Navbar() {
diff --git a/src/modules/Tabs.tsx b/src/modules/Tabs.tsx index a6fb527a..1ad6f130 100644 --- a/src/modules/Tabs.tsx +++ b/src/modules/Tabs.tsx @@ -62,6 +62,7 @@ export function Tabs({ left: `${indicatorStyle.left}px`, width: `${indicatorStyle.width}px`, }} + role="tablist" /> {tabLabels.map((label, index) => { @@ -73,7 +74,7 @@ export function Tabs({ key={label} data-tab-index={index} variant="link" - role="radio" + role="tab" size={'none'} onClick={() => { if (!isDisabled) onTabChange(index); From f1f5e937679e991cf0c443e390d8e63e3ba5cb44 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Fri, 19 Dec 2025 19:11:03 +0100 Subject: [PATCH 30/33] fix: update package-lock file --- package-lock.json | 417 +++------------------------------------------- 1 file changed, 21 insertions(+), 396 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35a28df9..78cf907d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2600,49 +2600,6 @@ } } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", - "license": "MIT", - "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor/node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", - "license": "MIT" - }, - "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/@inquirer/figures": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", @@ -3186,18 +3143,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -7713,15 +7658,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "license": "MIT", - "engines": { - "node": ">=0.3.0" - } - }, "node_modules/aes-js": { "version": "4.0.0-beta.5", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", @@ -7758,24 +7694,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", @@ -7856,6 +7774,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, "node_modules/aria-hidden": { @@ -8033,6 +7952,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8304,6 +8224,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -8376,6 +8297,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -8650,15 +8572,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/cookie-es": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", @@ -9107,23 +9020,11 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9289,6 +9190,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9298,6 +9200,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -9824,6 +9727,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -9836,15 +9740,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -9917,12 +9812,6 @@ "node": ">=12.20.0" } }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "license": "MIT" - }, "node_modules/fs-extra": { "version": "11.3.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", @@ -9937,12 +9826,6 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -9967,12 +9850,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fzstd": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/fzstd/-/fzstd-0.1.1.tgz", - "integrity": "sha512-dkuVSOKKwh3eas5VkJy1AW1vFpet8TA/fGmVA5krThl8YcOVE/8ZIoEA1+U1vEn5ckxxhLirSdY837azmbaNHA==", - "license": "MIT" - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10071,26 +9948,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -10109,27 +9966,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/globals": { "version": "16.5.0", "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", @@ -10533,6 +10369,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10586,15 +10423,6 @@ "node": ">= 0.4" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, "node_modules/header-case": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", @@ -10928,6 +10756,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -11084,6 +10913,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11380,12 +11210,6 @@ "node": ">=14" } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11446,15 +11270,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", - "license": "MIT", - "engines": { - "node": ">=7.10.1" - } - }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -11981,6 +11796,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -12020,16 +11836,11 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "license": "MIT" - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -12150,12 +11961,6 @@ "tslib": "^2.0.3" } }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "license": "MIT" - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -12516,15 +12321,6 @@ "dev": true, "license": "MIT" }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "license": "MIT", - "engines": { - "node": ">=12.19" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -12550,12 +12346,6 @@ "node": ">=0.10.0" } }, - "node_modules/obliterator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "license": "MIT" - }, "node_modules/ofetch": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", @@ -12785,6 +12575,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -12800,6 +12591,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -12976,12 +12768,6 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", @@ -13748,6 +13534,7 @@ "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" @@ -13865,33 +13652,12 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "license": "ISC" }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "license": "MIT", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -14118,6 +13884,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -14135,15 +13902,6 @@ "upper-case-first": "^2.0.2" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/seroval": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.0.tgz", @@ -14352,25 +14110,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/split-on-first": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", @@ -14408,36 +14147,6 @@ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "license": "MIT" }, - "node_modules/stacktrace-parser": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", - "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/std-env": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", @@ -14534,6 +14243,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -14556,6 +14266,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -14621,61 +14332,6 @@ "url": "https://opencollective.com/node-fetch" } }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, "node_modules/tailwind-merge": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", @@ -14815,15 +14471,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/toposort": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", @@ -14862,12 +14509,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "license": "MIT" - }, "node_modules/tsx": { "version": "4.21.0", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", @@ -15053,15 +14694,6 @@ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, - "node_modules/undici/node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -15097,15 +14729,6 @@ "node": ">=0.10.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/unplugin": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", @@ -16376,6 +15999,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -16485,6 +16109,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" From 7bcdeb6ce39468b11415783b30144b9123d732c2 Mon Sep 17 00:00:00 2001 From: ErwanDecoster Date: Wed, 7 Jan 2026 15:30:36 +0100 Subject: [PATCH 31/33] fix: remove unnecessary id attributes for accessibility improvements --- src/components/CopyButton.tsx | 1 - src/components/navbar/NavBar.tsx | 2 -- src/modules/datasets/SchemaSearch.tsx | 1 - 3 files changed, 4 deletions(-) diff --git a/src/components/CopyButton.tsx b/src/components/CopyButton.tsx index 08f3f497..41d21af8 100644 --- a/src/components/CopyButton.tsx +++ b/src/components/CopyButton.tsx @@ -65,7 +65,6 @@ const CopyButton = ({ onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} className="hover:before:bg-muted active:before:bg-secondary relative z-0 -mx-1 -my-1 flex items-center gap-1 px-1 py-1 transition-colors before:absolute before:inset-0 before:-z-10 before:rounded-lg before:duration-200 active:before:scale-x-[0.98] active:before:scale-y-[0.94]" - id="copy-button" type="button" aria-label="Copy" > diff --git a/src/components/navbar/NavBar.tsx b/src/components/navbar/NavBar.tsx index e4b79cae..c335bad9 100644 --- a/src/components/navbar/NavBar.tsx +++ b/src/components/navbar/NavBar.tsx @@ -80,7 +80,6 @@ export function Navbar() {