diff --git a/.dockerignore b/.dockerignore
index b919e1d011..27e04d0e0b 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -31,7 +31,7 @@ go/enclave/main/main
tools/walletextension/main/main
tools/walletextension/main/wallet_extension
tools/networkmanager/main/main
-tools/obscuroscan/main/main
+tools/tenscan/main/main
**/node_modules/
**/dist
.git
diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml
index 4d0fe8f8b8..db01164a33 100644
--- a/.github/workflows/build-pr.yml
+++ b/.github/workflows/build-pr.yml
@@ -42,8 +42,9 @@ jobs:
integration/.build/wallet_extension/wal-ext-*.txt
integration/.build/eth2/*
integration/.build/faucet/*
- integration/.build/obscuroscan/*
+ integration/.build/tenscan/*
integration/.build/tengateway/*
+ integration/.build/contractdeployer/*
integration/.build/smartcontracts/*
retention-days: 1
diff --git a/.github/workflows/manual-deploy-obscuro-scan-2.yml b/.github/workflows/manual-deploy-obscuro-scan-2.yml
deleted file mode 100644
index aea11d479e..0000000000
--- a/.github/workflows/manual-deploy-obscuro-scan-2.yml
+++ /dev/null
@@ -1,85 +0,0 @@
-# Deploys Obscuro Scan on Azure for Testnet
-# Builds the Obscuro Scan image, pushes the image to dockerhub and starts the Obscuro Scan on Azure
-
-name: '[M] Deploy Obscuro Scan 2 Testnet'
-run-name: '[M] Deploy Obscuro Scan Testnet ( ${{ github.event.inputs.testnet_type }} )'
-on:
- workflow_dispatch:
- inputs:
- testnet_type:
- description: 'Testnet Type'
- required: true
- default: 'dev-testnet'
- type: choice
- options:
- - 'dev-testnet'
- - 'uat-testnet'
- - 'sepolia-testnet'
-
-jobs:
- build-and-deploy:
- runs-on: ubuntu-latest
- environment:
- name: ${{ github.event.inputs.testnet_type }}
- steps:
- - name: 'Print GitHub variables'
- # This is a useful record of what the environment variables were at the time the job ran, for debugging and reference
- run: |
- echo "GitHub Variables = ${{ toJSON(vars) }}"
-
- - uses: actions/checkout@v3
-
- - name: 'Set up Docker'
- uses: docker/setup-buildx-action@v1
-
- - name: 'Login to Azure docker registry'
- uses: azure/docker-login@v1
- with:
- login-server: testnetobscuronet.azurecr.io
- username: testnetobscuronet
- password: ${{ secrets.REGISTRY_PASSWORD }}
-
- - name: 'Login via Azure CLI'
- uses: azure/login@v1
- with:
- creds: ${{ secrets.AZURE_CREDENTIALS }}
-
- - name: Build and Push Docker FE Image
- run: |
- DOCKER_BUILDKIT=1 docker build -t ${{ vars.DOCKER_BUILD_TAG_SCAN_FE }} -f ./tools/obscuroscan_v2/frontend/Dockerfile .
- docker push ${{ vars.DOCKER_BUILD_TAG_SCAN_FE }}
-
- - name: Build and Push Docker API Image
- run: |
- DOCKER_BUILDKIT=1 docker build -t ${{ vars.DOCKER_BUILD_TAG_SCAN_API }} -f ./tools/obscuroscan_v2/backend/Dockerfile .
- docker push ${{ vars.DOCKER_BUILD_TAG_SCAN_API }}
-
- - name: 'Deploy FE to Azure Container Instances'
- uses: 'azure/aci-deploy@v1'
- with:
- resource-group: ${{ secrets.RESOURCE_GROUP }}
- dns-name-label: ${{ github.event.inputs.testnet_type }}-obscuro-scan
- image: ${{ vars.DOCKER_BUILD_TAG_SCAN_FE }}
- name: ${{ github.event.inputs.testnet_type }}-fe-obscuro-scan
- location: 'uksouth'
- restart-policy: 'Never'
- environment-variables: VITE_APIHOSTADDRESS=https://${{ github.event.inputs.testnet_type }}-api.obscuroscan.io VITE_FE_VERSION=${{ GITHUB.RUN_NUMBER }}-${{ GITHUB.SHA }}
- command-line: npm run serve-prod
- ports: '80'
- cpu: 2
- memory: 2
-
- - name: 'Deploy API to Azure Container Instances'
- uses: 'azure/aci-deploy@v1'
- with:
- resource-group: ${{ secrets.RESOURCE_GROUP }}
- dns-name-label: ${{ github.event.inputs.testnet_type }}-api-obscuro-scan
- image: ${{ vars.DOCKER_BUILD_TAG_SCAN_API }}
- name: ${{ github.event.inputs.testnet_type }}-api-obscuro-scan
- location: 'uksouth'
- restart-policy: 'Never'
- command-line: ./cmd/backend --nodeHostAddress http://${{ vars.L2_RPC_URL_VALIDATOR }}:80 --serverAddress 0.0.0.0:80
- ports: '80'
- cpu: 2
- memory: 2
-
diff --git a/.gitignore b/.gitignore
index e57a7bf2d8..c9c85f15f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,7 +35,7 @@ tools/walletextension/main/main
tools/walletextension/bin/**
tools/walletextension/main/wallet_extension
tools/networkmanager/main/main
-tools/obscuroscan/main/main
+tools/tenscan/main/main
integration/eth2network/main/main
@@ -44,7 +44,7 @@ integration/eth2network/main/main
**/enclave_logs.txt
**/host_logs.txt
**/wallet_extension_logs.txt
-**/obscuroscan_logs.txt
+**/tenscan_logs.txt
# Temp env files
testnet/.env
diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml
index 1c7f50e2a6..9b425affa1 100644
--- a/docs/_data/navigation.yml
+++ b/docs/_data/navigation.yml
@@ -58,8 +58,8 @@ sidebar-list:
- title: Tools
children:
- - title: ObscuroScan
- url: testnet/obscuroscan
+ - title: Tenscan
+ url: testnet/tenscan
- title: Token Faucet
url: testnet/faucet
diff --git a/docs/_docs/testnet/deploying-a-smart-contract.md b/docs/_docs/testnet/deploying-a-smart-contract.md
index a74c0c532d..d549a6aa58 100644
--- a/docs/_docs/testnet/deploying-a-smart-contract.md
+++ b/docs/_docs/testnet/deploying-a-smart-contract.md
@@ -48,4 +48,4 @@ Congratulations, your smart contract is now deployed to Ten Testnet!
Because Ten provides full privacy, the details of your transaction are encrypted and only visible to you, as the holder of your wallet's private key.
-Now head over to the [TenScan page](https://docs.obscu.ro/testnet/obscuroscan/) to see how you can view the transaction details.
+Now head over to the [TenScan page](https://docs.obscu.ro/testnet/tenscan/) to see how you can view the transaction details.
diff --git a/go/common/httputil/httputil.go b/go/common/httputil/httputil.go
index de8a97ae53..85e7bf4f38 100644
--- a/go/common/httputil/httputil.go
+++ b/go/common/httputil/httputil.go
@@ -66,7 +66,7 @@ func ExecuteHTTPReq(client *http.Client, req *http.Request) ([]byte, error) {
return body, nil
}
-// EnableCORS Allows Obscuroscan and WalletExtension APIs to serve other web apps via CORS.
+// EnableCORS Allows Tenscan and WalletExtension APIs to serve other web apps via CORS.
func EnableCORS(resp http.ResponseWriter, req *http.Request) bool {
resp.Header().Set(CorsAllowOrigin, OriginAll)
if (*req).Method == ReqOptions {
diff --git a/go/common/log/log.go b/go/common/log/log.go
index 5b82607f0b..56aac0078b 100644
--- a/go/common/log/log.go
+++ b/go/common/log/log.go
@@ -41,7 +41,7 @@ const (
WalletExtCmp = "wallet_extension"
TestGethNetwCmp = "test_geth_network"
EthereumL1Cmp = "l1_host"
- ObscuroscanCmp = "obscuroscan"
+ TenscanCmp = "tenscan"
CrossChainCmp = "cross_chain"
)
diff --git a/go/host/container/host_container.go b/go/host/container/host_container.go
index e065e611d6..118955db78 100644
--- a/go/host/container/host_container.go
+++ b/go/host/container/host_container.go
@@ -26,14 +26,14 @@ import (
)
const (
- APIVersion1 = "1.0"
- APINamespaceObscuro = "obscuro"
- APINamespaceEth = "eth"
- APINamespaceObscuroScan = "obscuroscan"
- APINamespaceScan = "scan"
- APINamespaceNetwork = "net"
- APINamespaceTest = "test"
- APINamespaceDebug = "debug"
+ APIVersion1 = "1.0"
+ APINamespaceObscuro = "obscuro"
+ APINamespaceEth = "eth"
+ APINamespaceTenScan = "tenscan"
+ APINamespaceScan = "scan"
+ APINamespaceNetwork = "net"
+ APINamespaceTest = "test"
+ APINamespaceDebug = "debug"
)
type HostContainer struct {
@@ -173,9 +173,9 @@ func NewHostContainer(cfg *config.HostConfig, services *host.ServicesRegistry, p
Public: true,
},
{
- Namespace: APINamespaceObscuroScan,
+ Namespace: APINamespaceTenScan,
Version: APIVersion1,
- Service: clientapi.NewObscuroScanAPI(h),
+ Service: clientapi.NewTenScanAPI(h),
Public: true,
},
{
diff --git a/go/host/rpc/clientapi/client_api_obscuroscan.go b/go/host/rpc/clientapi/client_api_obscuroscan.go
index 153e5846de..41fa61cf74 100644
--- a/go/host/rpc/clientapi/client_api_obscuroscan.go
+++ b/go/host/rpc/clientapi/client_api_obscuroscan.go
@@ -16,19 +16,19 @@ import (
const txLimit = 100
-// ObscuroScanAPI implements ObscuroScan-specific JSON RPC operations.
-type ObscuroScanAPI struct {
+// TenScanAPI implements TenScan-specific JSON RPC operations.
+type TenScanAPI struct {
host host.Host
}
-func NewObscuroScanAPI(host host.Host) *ObscuroScanAPI {
- return &ObscuroScanAPI{
+func NewTenScanAPI(host host.Host) *TenScanAPI {
+ return &TenScanAPI{
host: host,
}
}
// GetBlockHeaderByHash returns the header for the block with the given hash.
-func (api *ObscuroScanAPI) GetBlockHeaderByHash(blockHash gethcommon.Hash) (*types.Header, error) {
+func (api *TenScanAPI) GetBlockHeaderByHash(blockHash gethcommon.Hash) (*types.Header, error) {
blockHeader, err := api.host.DB().GetBlockByHash(blockHash)
if err != nil {
if errors.Is(err, errutil.ErrNotFound) {
@@ -41,12 +41,12 @@ func (api *ObscuroScanAPI) GetBlockHeaderByHash(blockHash gethcommon.Hash) (*typ
// GetBatch returns the batch with the given hash. Unlike `EthereumAPI.GetBlockByHash()`, returns the full
// `ExtBatch`, and not just the header.
-func (api *ObscuroScanAPI) GetBatch(batchHash gethcommon.Hash) (*common.ExtBatch, error) {
+func (api *TenScanAPI) GetBatch(batchHash gethcommon.Hash) (*common.ExtBatch, error) {
return api.host.DB().GetBatch(batchHash)
}
// GetBatchForTx returns the batch containing a given transaction hash.
-func (api *ObscuroScanAPI) GetBatchForTx(txHash gethcommon.Hash) (*common.ExtBatch, error) {
+func (api *TenScanAPI) GetBatchForTx(txHash gethcommon.Hash) (*common.ExtBatch, error) {
batchNumber, err := api.host.DB().GetBatchNumber(txHash)
if err != nil {
return nil, fmt.Errorf("could not retrieve batch containing a transaction with hash %s. Cause: %w", txHash, err)
@@ -62,7 +62,7 @@ func (api *ObscuroScanAPI) GetBatchForTx(txHash gethcommon.Hash) (*common.ExtBat
// GetLatestTransactions returns the hashes of the latest `num` transactions confirmed in batches (or all the
// transactions if there are less than `num` total transactions).
-func (api *ObscuroScanAPI) GetLatestTransactions(num int) ([]gethcommon.Hash, error) {
+func (api *TenScanAPI) GetLatestTransactions(num int) ([]gethcommon.Hash, error) {
// We prevent someone from requesting an excessive amount of transactions.
if num > txLimit {
return nil, fmt.Errorf("cannot request more than 100 latest transactions")
@@ -105,11 +105,11 @@ func (api *ObscuroScanAPI) GetLatestTransactions(num int) ([]gethcommon.Hash, er
}
// GetTotalTransactions returns the number of recorded transactions on the network.
-func (api *ObscuroScanAPI) GetTotalTransactions() (*big.Int, error) {
+func (api *TenScanAPI) GetTotalTransactions() (*big.Int, error) {
return api.host.DB().GetTotalTransactions()
}
// Attestation returns the node's attestation details.
-func (api *ObscuroScanAPI) Attestation() (*common.AttestationReport, error) {
+func (api *TenScanAPI) Attestation() (*common.AttestationReport, error) {
return api.host.EnclaveClient().Attestation()
}
diff --git a/go/rpc/client.go b/go/rpc/client.go
index 768ffaa126..b9db9052a1 100644
--- a/go/rpc/client.go
+++ b/go/rpc/client.go
@@ -26,12 +26,12 @@ const (
Health = "obscuro_health"
Config = "obscuro_config"
- GetBlockHeaderByHash = "obscuroscan_getBlockHeaderByHash"
- GetBatch = "obscuroscan_getBatch"
- GetBatchForTx = "obscuroscan_getBatchForTx"
- GetLatestTxs = "obscuroscan_getLatestTransactions"
- GetTotalTxs = "obscuroscan_getTotalTransactions"
- Attestation = "obscuroscan_attestation"
+ GetBlockHeaderByHash = "tenscan_getBlockHeaderByHash"
+ GetBatch = "tenscan_getBatch"
+ GetBatchForTx = "tenscan_getBatchForTx"
+ GetLatestTxs = "tenscan_getLatestTransactions"
+ GetTotalTxs = "tenscan_getTotalTransactions"
+ Attestation = "tenscan_attestation"
StopHost = "test_stopHost"
Subscribe = "eth_subscribe"
Unsubscribe = "eth_unsubscribe"
diff --git a/integration/contractdeployer/contract_deployer_test.go b/integration/contractdeployer/contract_deployer_test.go
index 93785918e7..7fd64f6fa7 100644
--- a/integration/contractdeployer/contract_deployer_test.go
+++ b/integration/contractdeployer/contract_deployer_test.go
@@ -38,7 +38,7 @@ const (
func init() { //nolint:gochecknoinits
testlog.Setup(&testlog.Cfg{
LogDir: testLogs,
- TestType: "noderunner",
+ TestType: "contractdeployer",
TestSubtype: "test",
LogLevel: log.LvlInfo,
})
diff --git a/integration/obscurogateway/tengateway_test.go b/integration/obscurogateway/tengateway_test.go
index 9c38b4f8ce..901241036e 100644
--- a/integration/obscurogateway/tengateway_test.go
+++ b/integration/obscurogateway/tengateway_test.go
@@ -103,6 +103,8 @@ func TestTenGateway(t *testing.T) {
}
// Gracefully shutdown
+ // todo remove this sleep when tests stabilize
+ time.Sleep(20 * time.Second)
err = tenGwContainer.Stop()
assert.NoError(t, err)
}
diff --git a/integration/obscuroscan/obscuroscan_test.go b/integration/obscuroscan/obscuroscan_test.go
index 4d0ecf0589..b9b82e1c29 100644
--- a/integration/obscuroscan/obscuroscan_test.go
+++ b/integration/obscuroscan/obscuroscan_test.go
@@ -10,6 +10,9 @@ import (
"testing"
"time"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend/config"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend/container"
+
gethcommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/stretchr/testify/require"
@@ -19,8 +22,6 @@ import (
"github.com/ten-protocol/go-ten/go/rpc"
"github.com/ten-protocol/go-ten/go/wallet"
"github.com/ten-protocol/go-ten/integration/datagenerator"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend/config"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend/container"
"github.com/valyala/fasthttp"
"github.com/ethereum/go-ethereum/log"
@@ -36,31 +37,31 @@ import (
func init() { //nolint:gochecknoinits
testlog.Setup(&testlog.Cfg{
LogDir: testLogs,
- TestType: "obscuroscan",
+ TestType: "tenscan",
TestSubtype: "test",
LogLevel: log.LvlInfo,
})
}
const (
- testLogs = "../.build/obscuroscan/"
+ testLogs = "../.build/tenscan/"
)
-func TestObscuroscan(t *testing.T) {
+func TestTenscan(t *testing.T) {
startPort := integration.StartPortTenscanUnitTest
createObscuroNetwork(t, startPort)
- obsScanConfig := &config.Config{
+ tenScanConfig := &config.Config{
NodeHostAddress: fmt.Sprintf("http://127.0.0.1:%d", startPort+integration.DefaultHostRPCHTTPOffset),
ServerAddress: fmt.Sprintf("127.0.0.1:%d", startPort+integration.DefaultTenscanHTTPPortOffset),
LogPath: "sys_out",
}
- serverAddress := fmt.Sprintf("http://%s", obsScanConfig.ServerAddress)
+ serverAddress := fmt.Sprintf("http://%s", tenScanConfig.ServerAddress)
- obsScanContainer, err := container.NewObscuroScanContainer(obsScanConfig)
+ tenScanContainer, err := container.NewTenScanContainer(tenScanConfig)
require.NoError(t, err)
- err = obsScanContainer.Start()
+ err = tenScanContainer.Start()
require.NoError(t, err)
// wait for the msg bus contract to be deployed
@@ -182,7 +183,7 @@ func TestObscuroscan(t *testing.T) {
assert.NotEqual(t, configFetchObj.Item.SequencerID, gethcommon.Address{})
// Gracefully shutdown
- err = obsScanContainer.Stop()
+ err = tenScanContainer.Stop()
assert.NoError(t, err)
}
diff --git a/integration/simulation/p2p/in_mem_obscuro_client.go b/integration/simulation/p2p/in_mem_obscuro_client.go
index d597832a88..30e1072115 100644
--- a/integration/simulation/p2p/in_mem_obscuro_client.go
+++ b/integration/simulation/p2p/in_mem_obscuro_client.go
@@ -33,7 +33,7 @@ type inMemObscuroClient struct {
obscuroAPI *clientapi.ObscuroAPI
ethAPI *clientapi.EthereumAPI
filterAPI *clientapi.FilterAPI
- obscuroScanAPI *clientapi.ObscuroScanAPI
+ tenScanAPI *clientapi.TenScanAPI
testAPI *clientapi.TestAPI
enclavePublicKey *ecies.PublicKey
}
@@ -51,7 +51,7 @@ func NewInMemObscuroClient(hostContainer *container.HostContainer) rpc.Client {
obscuroAPI: clientapi.NewObscuroAPI(hostContainer.Host()),
ethAPI: clientapi.NewEthereumAPI(hostContainer.Host(), logger),
filterAPI: clientapi.NewFilterAPI(hostContainer.Host(), logger),
- obscuroScanAPI: clientapi.NewObscuroScanAPI(hostContainer.Host()),
+ tenScanAPI: clientapi.NewTenScanAPI(hostContainer.Host()),
testAPI: clientapi.NewTestAPI(hostContainer),
enclavePublicKey: enclPubKey,
}
@@ -277,7 +277,7 @@ func (c *inMemObscuroClient) health(result interface{}) error {
}
func (c *inMemObscuroClient) getTotalTransactions(result interface{}) error {
- totalTxs, err := c.obscuroScanAPI.GetTotalTransactions()
+ totalTxs, err := c.tenScanAPI.GetTotalTransactions()
if err != nil {
return fmt.Errorf("`%s` call failed. Cause: %w", rpc.GetTotalTxs, err)
}
@@ -295,7 +295,7 @@ func (c *inMemObscuroClient) getLatestTransactions(result interface{}, args []in
return fmt.Errorf("first arg to %s is of type %T, expected type int", rpc.GetLatestTxs, args[0])
}
- latestTxs, err := c.obscuroScanAPI.GetLatestTransactions(numTxs)
+ latestTxs, err := c.tenScanAPI.GetLatestTransactions(numTxs)
if err != nil {
return fmt.Errorf("`%s` call failed. Cause: %w", rpc.GetLatestTxs, err)
}
@@ -313,7 +313,7 @@ func (c *inMemObscuroClient) getBatchForTx(result interface{}, args []interface{
return fmt.Errorf("first arg to %s is of type %T, expected type int", rpc.GetBatchForTx, args[0])
}
- batch, err := c.obscuroScanAPI.GetBatchForTx(txHash)
+ batch, err := c.tenScanAPI.GetBatchForTx(txHash)
if err != nil {
return fmt.Errorf("`%s` call failed. Cause: %w", rpc.GetBatchForTx, err)
}
@@ -331,7 +331,7 @@ func (c *inMemObscuroClient) getBatch(result interface{}, args []interface{}) er
return fmt.Errorf("first arg to %s is of type %T, expected type int", rpc.GetBatch, args[0])
}
- batch, err := c.obscuroScanAPI.GetBatch(batchHash)
+ batch, err := c.tenScanAPI.GetBatch(batchHash)
if err != nil {
return fmt.Errorf("`%s` call failed. Cause: %w", rpc.GetBatch, err)
}
diff --git a/integration/simulation/validate_chain.go b/integration/simulation/validate_chain.go
index 3f5db642ea..30bbcf5425 100644
--- a/integration/simulation/validate_chain.go
+++ b/integration/simulation/validate_chain.go
@@ -56,7 +56,7 @@ func checkNetworkValidity(t *testing.T, s *Simulation) {
l1MaxHeight := checkEthereumBlockchainValidity(t, s)
checkObscuroBlockchainValidity(t, s, l1MaxHeight)
checkReceivedLogs(t, s)
- checkObscuroscan(t, s)
+ checkTenscan(t, s)
}
// Ensures that L1 and L2 txs were actually issued.
@@ -719,8 +719,8 @@ func assertNoDupeLogs(t *testing.T, logs []*types.Log) {
}
}
-// Checks that the various APIs powering Obscuroscan are working correctly.
-func checkObscuroscan(t *testing.T, s *Simulation) {
+// Checks that the various APIs powering Tenscan are working correctly.
+func checkTenscan(t *testing.T, s *Simulation) {
for idx, client := range s.RPCHandles.RPCClients {
checkTotalTransactions(t, client, idx)
latestTxHashes := checkLatestTxs(t, client, idx)
diff --git a/testnet/docker-compose.local.yml b/testnet/docker-compose.local.yml
index b7f0e86aad..3e065b38eb 100644
--- a/testnet/docker-compose.local.yml
+++ b/testnet/docker-compose.local.yml
@@ -24,11 +24,11 @@ services:
build:
context: $ROOT_PATH
dockerfile: ./dockerfiles/enclave.debug.Dockerfile
- obscuro-scan:
- image: "testnetobscuronet.azurecr.io/obscuronet/obscuroscan:latest"
+ ten-scan:
+ image: "testnetobscuronet.azurecr.io/obscuronet/tenscan:latest"
build:
context: $ROOT_PATH
- dockerfile: ./tools/obscuroscan/Dockerfile
+ dockerfile: ./tools/tenscan/backend/Dockerfile
hardhat-deployer:
image: "testnetobscuronet.azurecr.io/obscuronet/hardhatdeployer:latest"
build:
diff --git a/testnet/testnet-local-build_images.sh b/testnet/testnet-local-build_images.sh
index 8eadb57f1d..b1651a83d9 100755
--- a/testnet/testnet-local-build_images.sh
+++ b/testnet/testnet-local-build_images.sh
@@ -48,7 +48,7 @@ command docker build -t testnetobscuronet.azurecr.io/obscuronet/host:latest -f "
command docker build -t testnetobscuronet.azurecr.io/obscuronet/hardhatdeployer:latest -f "${tools_path}/hardhatdeployer/Dockerfile" "${root_path}" &
command docker build -t testnetobscuronet.azurecr.io/obscuronet/enclave:latest --build-arg TESTMODE=true -f "${root_path}/dockerfiles/enclave.Dockerfile" "${root_path}" &
command docker build -t testnetobscuronet.azurecr.io/obscuronet/enclave_debug:latest -f "${root_path}/dockerfiles/enclave.debug.Dockerfile" "${root_path}" &
-command docker build -t testnetobscuronet.azurecr.io/obscuronet/obscuroscan:latest -f "${tools_path}/obscuroscan/Dockerfile" "${root_path}" &
+command docker build -t testnetobscuronet.azurecr.io/obscuronet/tenscan:latest -f "${tools_path}/tenscan/Dockerfile" "${root_path}" &
command docker build -t testnetobscuronet.azurecr.io/obscuronet/faucet:latest -f "${tools_path}/faucet/Dockerfile" "${root_path}" &
command docker build -t testnetobscuronet.azurecr.io/obscuronet/obscuro_gateway:latest -f "${tools_path}/walletextension/Dockerfile" "${root_path}" &
diff --git a/tools/obscuroscan/Dockerfile b/tools/obscuroscan/Dockerfile
deleted file mode 100644
index fbfc48370a..0000000000
--- a/tools/obscuroscan/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-# Build Stages:
-# system = prepares the "OS" by downloading required binaries
-# get-dependencies = downloads the go modules using the prepared system
-# build-obscuroscan = copies over the source code and builds the binaries using a compiler cache
-# final = copies over only the executables in an alpine image that doesn't have any additional load.
-
-FROM golang:1.20-alpine3.18 as system
-
-# set the base libs to build / run
-RUN apk add build-base bash git
-ENV CGO_ENABLED=1
-
-# Standard build stage that initializes the go dependencies
-FROM system as get-dependencies
-# create the base directory
-# setup container data structure
-RUN mkdir -p /home/obscuro/go-obscuro
-
-# Ensures container layer caching when dependencies are not changed
-WORKDIR /home/obscuro/go-obscuro
-COPY go.mod .
-COPY go.sum .
-RUN go mod download
-
-FROM get-dependencies as build-obscuroscan
-# make sure the geth network code is available
-COPY . /home/obscuro/go-obscuro
-
-# build the contract deployer exec
-WORKDIR /home/obscuro/go-obscuro/tools/obscuroscan/main
-RUN --mount=type=cache,target=/root/.cache/go-build \
- go build
-
-FROM alpine:3.18
-
-COPY --from=build-obscuroscan /home/obscuro/go-obscuro/tools/obscuroscan/main /home/obscuro/go-obscuro/tools/obscuroscan/main
-WORKDIR /home/obscuro/go-obscuro
diff --git a/tools/obscuroscan/README.md b/tools/obscuroscan/README.md
deleted file mode 100644
index 45ca80af22..0000000000
--- a/tools/obscuroscan/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# TenScan
-
-See the documentation [here](https://docs.obscu.ro/testnet/obscuroscan.html).
-
-## Developer notes
diff --git a/tools/obscuroscan/container_run.sh b/tools/obscuroscan/container_run.sh
deleted file mode 100755
index 9eda45090e..0000000000
--- a/tools/obscuroscan/container_run.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env bash
-
-#
-# This script starts up the obscuroscan server
-#
-
-help_and_exit() {
- echo ""
- echo "Usage: $(basename "${0}") --rpcServerAddress=http://validator-host:13010 --receivingPort=80"
- echo ""
- echo " rpcServerAddress *Optional* Set the rpc server address (defaults to http://validator-host:13010)"
- echo ""
- echo " receivingPort *Optional* Set the ObscuroScan server receiving port (defaults to 80)"
- echo ""
- echo ""
- echo ""
- exit 1 # Exit with error explicitly
-}
-# Ensure any fail is loud and explicit
-set -euo pipefail
-
-# Define local usage vars
-start_path="$(cd "$(dirname "${0}")" && pwd)"
-testnet_path="${start_path}"
-
-# Define defaults
-receivingPort=80
-rpcServerAddress='http://validator-host:13010'
-docker_image="testnetobscuronet.azurecr.io/obscuronet/obscuroscan:latest"
-
-# Fetch options
-for argument in "$@"
-do
- key=$(echo $argument | cut -f1 -d=)
- value=$(echo $argument | cut -f2 -d=)
-
- case "$key" in
- --rpcServerAddress) rpcServerAddress=${value} ;;
- --receivingPort) receivingPort=${value} ;;
- --image) docker_image=${value} ;;
- --help) help_and_exit ;;
- *)
- esac
-done
-
-# ensure required fields
-if [[ -z ${rpcServerAddress:-} || -z ${receivingPort:-} ]];
-then
- help_and_exit
-fi
-
-# start the container
-echo "Starting the obscuroscan server..."
-docker network create --driver bridge node_network || true
-docker run --name=obscuroscan \
- --detach \
- --network=node_network \
- -p $receivingPort:$receivingPort \
- --entrypoint /home/obscuro/go-obscuro/tools/obscuroscan/main/main \
- "${docker_image}" \
- --address='0.0.0.0:'$receivingPort \
- --rpcServerAddress=${rpcServerAddress}
-echo ""
diff --git a/tools/obscuroscan/main/cli.go b/tools/obscuroscan/main/cli.go
deleted file mode 100644
index 33988f9af6..0000000000
--- a/tools/obscuroscan/main/cli.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package main
-
-import (
- "flag"
-)
-
-const (
- // Flag names and usages.
- nodeIDName = "nodeID"
- nodeIDUsage = "The 20 bytes of the node's address"
-
- rpcServerAddrName = "rpcServerAddress"
- rpcServerAddrUsage = "The address on which to send RPC requests"
-
- addressName = "address"
- addressUsage = "The address to serve Obscuroscan on"
-
- logPathName = "logPath"
- logPathUsage = "The path to use for Obscuroscan's log file"
-)
-
-type obscuroscanConfig struct {
- nodeID string
- rpcServerAddr string
- address string
- logPath string
-}
-
-func defaultObscuroClientConfig() obscuroscanConfig {
- return obscuroscanConfig{
- nodeID: "",
- rpcServerAddr: "http://erpc.sepolia-testnet.obscu.ro:80",
- address: "127.0.0.1:3000/v1",
- logPath: "obscuroscan_logs.txt",
- }
-}
-
-func parseCLIArgs() obscuroscanConfig {
- defaultConfig := defaultObscuroClientConfig()
-
- nodeID := flag.String(nodeIDName, defaultConfig.nodeID, nodeIDUsage)
- rpcServerAddr := flag.String(rpcServerAddrName, defaultConfig.rpcServerAddr, rpcServerAddrUsage)
- address := flag.String(addressName, defaultConfig.address, addressUsage)
- logPath := flag.String(logPathName, defaultConfig.logPath, logPathUsage)
-
- flag.Parse()
-
- return obscuroscanConfig{
- nodeID: *nodeID,
- rpcServerAddr: *rpcServerAddr,
- address: *address,
- logPath: *logPath,
- }
-}
diff --git a/tools/obscuroscan/main/main.go b/tools/obscuroscan/main/main.go
deleted file mode 100644
index b7a17408df..0000000000
--- a/tools/obscuroscan/main/main.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package main
-
-import (
- "fmt"
-
- gethlog "github.com/ethereum/go-ethereum/log"
- "github.com/ten-protocol/go-ten/go/common/log"
-
- "github.com/ten-protocol/go-ten/tools/obscuroscan"
-)
-
-func main() {
- config := parseCLIArgs()
-
- server := obscuroscan.NewObscuroscan(
- config.rpcServerAddr,
- log.New(log.ObscuroscanCmp, int(gethlog.LvlInfo), config.logPath),
- )
- go server.Serve(config.address)
- fmt.Printf("Obscuroscan started.\n💡 Visit %s to monitor the Obscuro network.\n", config.address)
-
- defer server.Shutdown()
- select {}
-}
diff --git a/tools/obscuroscan/obscuroscan.go b/tools/obscuroscan/obscuroscan.go
deleted file mode 100644
index 32c2d53b11..0000000000
--- a/tools/obscuroscan/obscuroscan.go
+++ /dev/null
@@ -1,548 +0,0 @@
-package obscuroscan
-
-import (
- "bytes"
- "context"
- "crypto/aes"
- "crypto/cipher"
- "embed"
- "encoding/base64"
- "encoding/json"
- "errors"
- "fmt"
- "io/fs"
- "math/big"
- "net/http"
- "os"
- "os/signal"
- "strconv"
- "strings"
- "syscall"
- "time"
-
- "github.com/ten-protocol/go-ten/go/common/compression"
-
- "github.com/edgelesssys/ego/enclave"
- "github.com/ethereum/go-ethereum/accounts/abi"
- gethcommon "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- gethlog "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ten-protocol/go-ten/go/common"
- "github.com/ten-protocol/go-ten/go/common/httputil"
- "github.com/ten-protocol/go-ten/go/common/log"
- "github.com/ten-protocol/go-ten/go/enclave/crypto"
- "github.com/ten-protocol/go-ten/go/ethadapter/mgmtcontractlib"
- "github.com/ten-protocol/go-ten/go/obsclient"
- "github.com/ten-protocol/go-ten/go/rpc"
-)
-
-const (
- pathAPI = "/api"
- pathNumRollups = "/numrollups/"
- pathNumTxs = "/numtxs/"
- pathGetRollupTime = "/rolluptime/"
- pathLatestRollups = "/latestrollups/"
- pathLatestTxs = "/latesttxs/"
- pathBlock = "/block/"
- pathRollup = "/rollup/"
- pathDecryptTxBlob = "/decrypttxblob/"
- pathAttestation = "/attestation/"
- pathAttestationReport = "/attestationreport/"
- pathRoot = "/"
-
- staticDir = "static"
- extDivider = "."
- extHTML = ".html"
- httpCodeErr = 500
-)
-
-//go:embed static
-var staticFiles embed.FS
-
-// Obscuroscan is a server that allows the monitoring of a running Obscuro network.
-type Obscuroscan struct {
- server *http.Server
- client rpc.Client
- obsClient *obsclient.ObsClient
- contractABI abi.ABI
- logger gethlog.Logger
-}
-
-// Identical to attestation.Report, but with the status mapped to a user-friendly string.
-type attestationReportExternal struct {
- Data []byte
- SecurityVersion uint
- Debug bool
- UniqueID []byte
- SignerID []byte
- ProductID []byte
- TCBStatus string
-}
-
-func NewObscuroscan(address string, logger gethlog.Logger) *Obscuroscan {
- client, err := rpc.NewNetworkClient(address)
- if err != nil {
- panic(err)
- }
- obsClient := obsclient.NewObsClient(client)
-
- contractABI, err := abi.JSON(strings.NewReader(mgmtcontractlib.MgmtContractABI))
- if err != nil {
- panic("could not parse management contract ABI to decrypt rollups")
- }
-
- return &Obscuroscan{
- client: client,
- obsClient: obsClient,
- contractABI: contractABI,
- logger: logger,
- }
-}
-
-// Serve listens for and serves Obscuroscan requests.
-func (o *Obscuroscan) Serve(hostAndPort string) {
- serveMux := http.NewServeMux()
-
- serveMux.HandleFunc(pathAPI+pathNumRollups, o.getNumRollups) // Get the number of published rollups.
- serveMux.HandleFunc(pathAPI+pathNumTxs, o.getNumTransactions) // Get the number of rolled-up transactions.
- serveMux.HandleFunc(pathAPI+pathGetRollupTime, o.getRollupTime) // Get the average rollup time.
- serveMux.HandleFunc(pathAPI+pathLatestRollups, o.getLatestRollups) // Get the latest rollup numbers.
- serveMux.HandleFunc(pathAPI+pathLatestTxs, o.getLatestTxs) // Get the latest transaction hashes.
- serveMux.HandleFunc(pathAPI+pathRollup, o.getRollupByNumOrTxHash) // Get the rollup given its number or the hash of a transaction it contains.
- serveMux.HandleFunc(pathAPI+pathBlock, o.getBlock) // Get the L1 block with the given number.
- serveMux.HandleFunc(pathAPI+pathDecryptTxBlob, o.decryptTxBlob) // Decrypt a transaction blob.
- serveMux.HandleFunc(pathAPI+pathAttestation, o.attestation) // Retrieve the node's attestation.
- serveMux.HandleFunc(pathAPI+pathAttestationReport, o.attestationReport) // Retrieve the node's attestation report.
-
- // Serves the web assets for the user interface.
- staticFileFS, err := fs.Sub(staticFiles, staticDir)
- if err != nil {
- o.logger.Crit("could not serve static files.", log.ErrKey, err)
- }
- staticFileFilesystem := http.FileServer(http.FS(staticFileFS))
- serveMux.Handle(pathRoot, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- // If we get a request without an extension (other than for the root), we tack on ".html".
- if r.URL.Path != pathRoot && !strings.Contains(r.URL.Path, extDivider) {
- r.URL.Path += extHTML
- }
- staticFileFilesystem.ServeHTTP(w, r)
- }))
-
- o.server = &http.Server{Addr: hostAndPort, Handler: serveMux, ReadHeaderTimeout: 10 * time.Second}
- err = o.server.ListenAndServe()
- if !errors.Is(err, http.ErrServerClosed) {
- panic(err)
- }
-}
-
-func (o *Obscuroscan) Shutdown() {
- if o.server != nil {
- err := o.server.Shutdown(context.Background())
- if err != nil {
- o.logger.Error("could not shut down Obscuroscan.", log.ErrKey, err)
- }
- }
-}
-
-// Retrieves the number of published rollups.
-func (o *Obscuroscan) getNumRollups(resp http.ResponseWriter, _ *http.Request) {
- numOfRollups, err := o.obsClient.BatchNumber()
- if err != nil {
- o.logger.Error("Could not fetch number of rollups.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch number of rollups.")
- return
- }
-
- numOfRollupsStr := strconv.Itoa(int(numOfRollups))
- _, err = resp.Write([]byte(numOfRollupsStr))
- if err != nil {
- o.logger.Error("could not return number of rollups to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch number of rollups.")
- return
- }
-}
-
-// Retrieves the total number of transactions.
-func (o *Obscuroscan) getNumTransactions(resp http.ResponseWriter, _ *http.Request) {
- var numTransactions *big.Int
- err := o.client.Call(&numTransactions, rpc.GetTotalTxs)
- if err != nil {
- o.logger.Error("Could not fetch total transactions.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch total transactions.")
- return
- }
-
- _, err = resp.Write([]byte(numTransactions.String()))
- if err != nil {
- o.logger.Error("could not return total number of transactions to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch total transactions.")
- return
- }
-}
-
-// Retrieves the average rollup time, as (time last rollup - time first rollup)/number of rollups
-func (o *Obscuroscan) getRollupTime(resp http.ResponseWriter, _ *http.Request) {
- numLatestRollup, err := o.obsClient.BatchNumber()
- if err != nil {
- o.logger.Error("Could not fetch latest rollup number.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch average rollup time.")
- return
- }
-
- firstRollupHeader, err := o.obsClient.BatchHeaderByNumber(big.NewInt(0))
- if err != nil || firstRollupHeader == nil {
- o.logger.Error("Could not fetch first rollup.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch average rollup time.")
- return
- }
-
- latestRollupHeader, err := o.obsClient.BatchHeaderByNumber(big.NewInt(int64(numLatestRollup)))
- if err != nil || latestRollupHeader == nil {
- o.logger.Error("Could not fetch latest rollup.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch average rollup time.")
- return
- }
-
- avgRollupTime := float64(latestRollupHeader.Time-firstRollupHeader.Time) / float64(numLatestRollup)
- _, err = resp.Write([]byte(fmt.Sprintf("%.2f", avgRollupTime)))
- if err != nil {
- o.logger.Error("could not return average rollup time to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch average rollup time.")
- return
- }
-}
-
-// Retrieves the last five rollup numbers.
-func (o *Obscuroscan) getLatestRollups(resp http.ResponseWriter, _ *http.Request) {
- latestRollupNum, err := o.obsClient.BatchNumber()
- if err != nil {
- o.logger.Error("Could not fetch latest rollups.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch latest rollups.")
- return
- }
-
- // We walk the chain of rollups, getting the number for the most recent five.
- rollupNums := make([]string, 5)
- for idx := 0; idx < 5; idx++ {
- rollupNum := int(latestRollupNum) - idx
- if rollupNum < 0 {
- // If there are less than five rollups, we return an N/A.
- rollupNums[idx] = "N/A"
- } else {
- rollupNums[idx] = strconv.Itoa(rollupNum)
- }
- }
-
- jsonRollupNums, err := json.Marshal(rollupNums)
- if err != nil {
- o.logger.Error("could not return latest rollups to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch latest rollups.")
- return
- }
- _, err = resp.Write(jsonRollupNums)
- if err != nil {
- o.logger.Error("could not return latest rollups to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch latest rollups.")
- return
- }
-}
-
-// Retrieves the last five transaction hashes.
-func (o *Obscuroscan) getLatestTxs(resp http.ResponseWriter, _ *http.Request) {
- numTransactions := 5
-
- var txHashes []gethcommon.Hash
- err := o.client.Call(&txHashes, rpc.GetLatestTxs, numTransactions)
- if err != nil {
- o.logger.Error("Could not fetch latest transactions.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch latest transactions.")
- }
-
- // We convert the hashes to strings and pad with N/As as needed.
- txHashStrings := make([]string, numTransactions)
- for idx := 0; idx < numTransactions; idx++ {
- if idx < len(txHashes) {
- txHashStrings[idx] = txHashes[idx].String()
- } else {
- txHashStrings[idx] = "N/A"
- }
- }
-
- jsonTxHashes, err := json.Marshal(txHashStrings)
- if err != nil {
- o.logger.Error("could not return latest transaction hashes to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch latest transactions.")
- return
- }
- _, err = resp.Write(jsonTxHashes)
- if err != nil {
- o.logger.Error("could not return latest transaction hashes to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch latest transactions.")
- return
- }
-}
-
-// Retrieves the L1 block header with the given number.
-func (o *Obscuroscan) getBlock(resp http.ResponseWriter, req *http.Request) {
- body := req.Body
- defer body.Close()
- buffer := new(bytes.Buffer)
- _, err := buffer.ReadFrom(body)
- if err != nil {
- o.logger.Error("could not read request body.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch block.")
- return
- }
- blockHashStr := buffer.String()
- blockHash := gethcommon.HexToHash(blockHashStr)
-
- var blockHeader *types.Header
- err = o.client.Call(&blockHeader, rpc.GetBlockHeaderByHash, blockHash)
- if err != nil {
- o.logger.Info("could not retrieve batch", log.BatchHashKey, blockHash, log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch block.")
- return
- }
-
- jsonBlock, err := json.Marshal(blockHeader)
- if err != nil {
- o.logger.Error("could not return block to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch block.")
- return
- }
- _, err = resp.Write(jsonBlock)
- if err != nil {
- o.logger.Error("could not return block to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch block.")
- return
- }
-}
-
-// Retrieves a rollup given its number or the hash of a transaction it contains.
-func (o *Obscuroscan) getRollupByNumOrTxHash(resp http.ResponseWriter, req *http.Request) {
- // Set a response header which allows the client to use a response served from a different domain, i.e. obscuroscan.io.
- if httputil.EnableCORS(resp, req) {
- return
- }
- body := req.Body
- defer body.Close()
- buffer := new(bytes.Buffer)
- _, err := buffer.ReadFrom(body)
- if err != nil {
- o.logger.Error("could not read request body.", log.ErrKey, err)
- logAndSendErr(resp, "Could not fetch rollup.")
- return
- }
-
- var rollup *common.ExtRollup
- if strings.HasPrefix(buffer.String(), "0x") {
- // A "0x" prefix indicates that we should retrieve the rollup by transaction hash.
- txHash := gethcommon.HexToHash(buffer.String())
-
- err = o.client.Call(&rollup, rpc.GetBatchForTx, txHash)
- if err != nil || rollup.Header == nil {
- o.logger.Error("could not retrieve rollup.", log.ErrKey, err)
- logAndSendErr(resp, fmt.Sprintf("Could not fetch rollup for transaction %s.", txHash))
- return
- }
- } else {
- // Otherwise, we treat the input as a rollup number.
- rollupNumber, err := strconv.Atoi(buffer.String())
- if err != nil {
- o.logger.Error(fmt.Sprintf("could not parse \"%s\" as an integer", buffer.String()))
- logAndSendErr(resp, fmt.Sprintf("Could not parse number %s.", buffer.String()))
- return
- }
- rollup, err = o.getRollupByNumber(int64(rollupNumber))
- if err != nil {
- o.logger.Error("Could not fetch rollup.", log.ErrKey, err)
- logAndSendErr(resp, fmt.Sprintf("Could not fetch rollup for number %d.", rollupNumber))
- return
- }
- }
-
- jsonRollup, err := json.Marshal(rollup)
- if err != nil {
- o.logger.Error("could not return rollup to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not marshal rollup to JSON.")
- return
- }
- _, err = resp.Write(jsonRollup)
- if err != nil {
- o.logger.Error("could not return rollup to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not return rollup to client.")
- return
- }
-}
-
-// Decrypts the provided transaction blob using the provided key.
-// todo (#1665) - use the passed-in key, rather than a hardcoded enclave key.
-func (o *Obscuroscan) decryptTxBlob(resp http.ResponseWriter, req *http.Request) {
- body := req.Body
- defer body.Close()
- buffer := new(bytes.Buffer)
- _, err := buffer.ReadFrom(body)
- if err != nil {
- o.logger.Error("could not read request body.", log.ErrKey, err)
- logAndSendErr(resp, "Could not decrypt transaction blob.")
- return
- }
-
- jsonTxs, err := decryptTxBlob(buffer.Bytes())
- if err != nil {
- o.logger.Error("could not decrypt transaction blob.", log.ErrKey, err)
- logAndSendErr(resp, "Could not decrypt transaction blob.")
- return
- }
-
- _, err = resp.Write(jsonTxs)
- if err != nil {
- o.logger.Error("could not write decrypted transactions to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not decrypt transaction blob.")
- return
- }
-}
-
-// Retrieves the node's attestation.
-func (o *Obscuroscan) attestation(resp http.ResponseWriter, _ *http.Request) {
- var attestation *common.AttestationReport
- err := o.client.Call(&attestation, rpc.Attestation)
- if err != nil {
- o.logger.Error("could not retrieve node's attestation.", log.ErrKey, err)
- logAndSendErr(resp, "Could not retrieve node's attestation.")
- return
- }
-
- jsonAttestation, err := json.Marshal(attestation)
- if err != nil {
- o.logger.Error("could not convert node's attestation to JSON.", log.ErrKey, err)
- logAndSendErr(resp, "Could not retrieve node's attestation.")
- return
- }
- _, err = resp.Write(jsonAttestation)
- if err != nil {
- o.logger.Error("could not return JSON attestation to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not retrieve node's attestation.")
- return
- }
-}
-
-// Retrieves the node's attestation report.
-func (o *Obscuroscan) attestationReport(resp http.ResponseWriter, _ *http.Request) {
- var attestation *common.AttestationReport
- err := o.client.Call(&attestation, rpc.Attestation)
- if err != nil {
- o.logger.Error("could not retrieve node's attestation.", log.ErrKey, err)
- logAndSendErr(resp, "Could not verify node's attestation.")
- return
- }
-
- // If DCAP isn't set up, verifying the report will send a SIGSYS signal. We catch this, so that it doesn't crash the program.
- sigChannel := make(chan os.Signal, 1)
- defer signal.Stop(sigChannel)
- signal.Notify(sigChannel, syscall.SIGSYS)
- attestationReport, err := enclave.VerifyRemoteReport(attestation.Report)
- signal.Stop(sigChannel)
-
- if err != nil {
- o.logger.Error("could not verify node's attestation.", log.ErrKey, err)
- logAndSendErr(resp, "Could not verify node's attestation.")
- return
- }
-
- attestationReportExt := attestationReportExternal{
- Data: attestationReport.Data,
- SecurityVersion: attestationReport.SecurityVersion,
- Debug: attestationReport.Debug,
- UniqueID: attestationReport.UniqueID,
- SignerID: attestationReport.SignerID,
- ProductID: attestationReport.ProductID,
- TCBStatus: attestationReport.TCBStatus.String(),
- }
-
- jsonAttestationReport, err := json.Marshal(attestationReportExt)
- if err != nil {
- o.logger.Error("could not convert node's attestation report to JSON.", log.ErrKey, err)
- logAndSendErr(resp, "Could not verify node's attestation.")
- return
- }
- _, err = resp.Write(jsonAttestationReport)
- if err != nil {
- o.logger.Error("could not return JSON attestation report to client.", log.ErrKey, err)
- logAndSendErr(resp, "Could not verify node's attestation.")
- return
- }
-}
-
-// Returns the rollup with the given number.
-func (o *Obscuroscan) getRollupByNumber(rollupNumber int64) (*common.ExtRollup, error) {
- // todo (#1665) - if required, consolidate the two calls below into a single RPCGetRollupByNumber call to minimise round trips.
- rollupHeader, err := o.obsClient.BatchHeaderByNumber(big.NewInt(rollupNumber))
- if err != nil {
- return nil, fmt.Errorf("could not retrieve rollup with number %d. Cause: %w", rollupNumber, err)
- }
-
- var rollup *common.ExtRollup
- err = o.client.Call(&rollup, rpc.GetBatch, rollupHeader.Hash())
- if err != nil {
- return nil, fmt.Errorf("could not retrieve rollup. Cause: %w", err)
- }
-
- if rollup.Header == nil {
- return nil, fmt.Errorf("retrieved rollup had a nil header")
- }
-
- return rollup, nil
-}
-
-// Decrypts the transaction blob and returns it as JSON.
-func decryptTxBlob(encryptedTxBytesBase64 []byte) ([]byte, error) {
- encryptedTxBytes, err := base64.StdEncoding.DecodeString(string(encryptedTxBytesBase64))
- if err != nil {
- return nil, fmt.Errorf("could not decode encrypted transaction blob from Base64. Cause: %w", err)
- }
-
- key := gethcommon.Hex2Bytes(crypto.RollupEncryptionKeyHex)
- block, err := aes.NewCipher(key)
- if err != nil {
- return nil, fmt.Errorf("could not initialise AES cipher for enclave rollup key. Cause: %w", err)
- }
- transactionCipher, err := cipher.NewGCM(block)
- if err != nil {
- return nil, fmt.Errorf("could not initialise wrapper for AES cipher for enclave rollup key. Cause: %w", err)
- }
-
- // The nonce is prepended to the ciphertext.
- nonce := encryptedTxBytes[0:crypto.NonceLength]
- ciphertext := encryptedTxBytes[crypto.NonceLength:]
- compressedTxs, err := transactionCipher.Open(nil, nonce, ciphertext, nil)
- if err != nil {
- return nil, fmt.Errorf("could not decrypt encrypted L2 transactions. Cause: %w", err)
- }
-
- compressionService := compression.NewBrotliDataCompressionService()
-
- encodedTxs, err := compressionService.Decompress(compressedTxs)
- if err != nil {
- return nil, fmt.Errorf("could not decompress L2 transactions. Cause: %w", err)
- }
-
- var cleartextTxs []*common.L2Tx
- if err = rlp.DecodeBytes(encodedTxs, &cleartextTxs); err != nil {
- return nil, fmt.Errorf("could not decode encoded L2 transactions. Cause: %w", err)
- }
-
- jsonRollup, err := json.Marshal(cleartextTxs)
- if err != nil {
- return nil, fmt.Errorf("could not decrypt transaction blob. Cause: %w", err)
- }
-
- return jsonRollup, nil
-}
-
-// Logs the error message and sends it as an HTTP error.
-func logAndSendErr(resp http.ResponseWriter, msg string) {
- fmt.Println(msg)
- http.Error(resp, msg, httpCodeErr)
-}
diff --git a/tools/obscuroscan/obscuroscan_test.go b/tools/obscuroscan/obscuroscan_test.go
deleted file mode 100644
index 2ac4ea843d..0000000000
--- a/tools/obscuroscan/obscuroscan_test.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package obscuroscan
-
-import (
- "context"
- "encoding/base64"
- "encoding/json"
- "net/http"
- "net/http/httptest"
- "testing"
-
- "github.com/ten-protocol/go-ten/go/common/compression"
-
- gethlog "github.com/ethereum/go-ethereum/log"
- "github.com/ten-protocol/go-ten/go/common"
- "github.com/ten-protocol/go-ten/go/common/httputil"
- "github.com/ten-protocol/go-ten/go/enclave/core"
- "github.com/ten-protocol/go-ten/go/enclave/crypto"
- "github.com/ten-protocol/go-ten/integration/datagenerator"
-)
-
-func TestCanDecryptTxBlob(t *testing.T) {
- txs := []*common.L2Tx{datagenerator.CreateL2Tx(), datagenerator.CreateL2Tx()}
-
- txsJSONBytes, err := decryptTxBlob(generateEncryptedTxBlob(txs))
- if err != nil {
- t.Fatalf("transaction blob decryption failed. Cause: %s", err)
- }
-
- expectedTxsJSONBytes, err := json.Marshal(txs)
- if err != nil {
- t.Fatalf("marshalling transactions to JSON failed. Cause: %s", err)
- }
-
- if string(expectedTxsJSONBytes) != string(txsJSONBytes) {
- t.Fatalf("expected %s, got %s", string(expectedTxsJSONBytes), string(txsJSONBytes))
- }
-}
-
-func TestThrowsIfEncryptedRollupIsInvalid(t *testing.T) {
- _, err := decryptTxBlob([]byte("invalid_tx_blob"))
- if err == nil {
- t.Fatal("did not error on invalid transaction blob")
- }
-}
-
-// Generates an encrypted transaction blob in Base64 encoding.
-func generateEncryptedTxBlob(txs []*common.L2Tx) []byte {
- rollup := core.Batch{Header: &common.BatchHeader{}, Transactions: txs}
- extB, err := rollup.ToExtBatch(crypto.NewDataEncryptionService(nil), compression.NewBrotliDataCompressionService())
- if err != nil {
- panic(err)
- }
- txBlob := extB.EncryptedTxBlob
- return []byte(base64.StdEncoding.EncodeToString(txBlob))
-}
-
-func TestObscuroscan_getRollupByNumOrTxHash(t *testing.T) {
- logger := gethlog.Logger.New(gethlog.Root())
- ob := NewObscuroscan("http://testnet.obscuroscan.io", logger)
- req, _ := http.NewRequestWithContext(context.Background(), http.MethodGet, "/", nil)
- req.Method = http.MethodOptions
- resp := httptest.NewRecorder()
- ob.getRollupByNumOrTxHash(resp, req)
- if resp.Header().Get(httputil.CorsAllowOrigin) != httputil.OriginAll {
- t.Fatal("CORS Allow Origin not set.")
- }
- if resp.Header().Get(httputil.CorsAllowMethods) != httputil.ReqOptions {
- t.Fatal("CORS Allow Methods not set.")
- }
- if resp.Header().Get(httputil.CorsAllowHeaders) != httputil.CorsHeaders {
- t.Fatal("CORS Allow Headers not set.")
- }
-}
diff --git a/tools/obscuroscan/static/attestation.html b/tools/obscuroscan/static/attestation.html
deleted file mode 100644
index 84eb156b10..0000000000
--- a/tools/obscuroscan/static/attestation.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
- Attestation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Node attestation and report
-
-
- This attestation, and the associated attestation report, allow you to verify that the node is running
- the expected Obscuro code on secure hardware.
-
-
-
-
Attestation
-
N/A
-
-
-
Attestation report
-
N/A
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan/static/attestation.js b/tools/obscuroscan/static/attestation.js
deleted file mode 100644
index 894471f79e..0000000000
--- a/tools/obscuroscan/static/attestation.js
+++ /dev/null
@@ -1,38 +0,0 @@
-"use strict";
-
-const eventDomLoaded = "DOMContentLoaded";
-
-const idAttestation = "attestation";
-const idAttestationReport = "attestationReport";
-
-const pathAttestation = "/api/attestation/";
-const pathAttestationReport = "/api/attestationreport/"
-
-// Updates the displayed stats.
-async function displayAttestation() {
- const fieldAttestation = document.getElementById(idAttestation);
- const fieldAttestationReport = document.getElementById(idAttestationReport);
-
- const respAttestation = await fetch(pathAttestation);
- if (respAttestation.ok) {
- const attestationJSON = JSON.parse(await respAttestation.text());
- fieldAttestation.innerText = JSON.stringify(attestationJSON, null, "\t");
- } else {
- fieldAttestation.innerText = "Failed to fetch attestation.";
- }
-
- const respAttestationReport = await fetch(pathAttestationReport);
- if (respAttestationReport.ok) {
- const attestationReportJSON = JSON.parse(await respAttestationReport.text());
- fieldAttestationReport.innerText = JSON.stringify(attestationReportJSON, null, "\t");
- } else {
- fieldAttestationReport.innerText = "Failed to fetch attestation report. Producing an attestation report is " +
- "currently only supported on SGX-enabled Azure virtual machines.";
- }
-}
-
-const initialize = async () => {
- await displayAttestation();
-}
-
-window.addEventListener(eventDomLoaded, initialize);
\ No newline at end of file
diff --git a/tools/obscuroscan/static/favicon-32x32.png b/tools/obscuroscan/static/favicon-32x32.png
deleted file mode 100644
index ec512be020..0000000000
Binary files a/tools/obscuroscan/static/favicon-32x32.png and /dev/null differ
diff --git a/tools/obscuroscan/static/image-dark.png b/tools/obscuroscan/static/image-dark.png
deleted file mode 100644
index 37deb98b42..0000000000
Binary files a/tools/obscuroscan/static/image-dark.png and /dev/null differ
diff --git a/tools/obscuroscan/static/index.html b/tools/obscuroscan/static/index.html
deleted file mode 100644
index f691b407d9..0000000000
--- a/tools/obscuroscan/static/index.html
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
-
-
- Obscuroscan
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Obscuro block explorer
-
Total rollups: Fetching...
-
Total transactions: Fetching...
-
Avg. rollup time: Fetching...
-
-
-
-
-
-
-
-
-
-
-
-
-
Latest transactions
-
-
-
-
-
-
-
-
-
-
-
-
Obscuro rollup
-
N/A
-
-
-
L1 block
-
N/A
-
-
-
Decrypted transaction blob
-
N/A
-
-
-
- Decrypting transaction blobs is only possible on testnet, where the rollup encryption key is
- long-lived and well-known. On mainnet, rollups will use rotating keys that are not known to anyone - or
- anything - other than the Obscuro enclaves.
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan/static/index.js b/tools/obscuroscan/static/index.js
deleted file mode 100644
index a6b9a2b821..0000000000
--- a/tools/obscuroscan/static/index.js
+++ /dev/null
@@ -1,208 +0,0 @@
-"use strict";
-
-const eventDomLoaded = "DOMContentLoaded";
-const typeSubmit = "submit";
-const typeClick = "click";
-const methodPost = "POST";
-const jsonKeyHeader = "Header";
-const jsonKeyL1Proof = "L1Proof";
-const jsonKeyEncryptedTxBlob = "EncryptedTxBlob";
-
-const idNumRollups = "numRollups";
-const idNumTxs = "numTxs";
-const idRollupTime = "rollupTime";
-const idFormGetRollup = "form-get-rollup";
-const idRollupID = "rollupID";
-const idResult = "result";
-const idBlock = "block";
-const idRollup = "rollup";
-const idDecryptedTxs = "decryptedTxs";
-const idRollupOne = "rollupOne";
-const idRollupTwo = "rollupTwo";
-const idRollupThree = "rollupThree";
-const idRollupFour = "rollupFour";
-const idRollupFive = "rollupFive";
-const idTxOne = "txOne";
-const idTxTwo = "txTwo";
-const idTxThree = "txThree";
-const idTxFour = "txFour";
-const idTxFive = "txFive";
-
-const pathNumRollups = "/api/numrollups/";
-const pathNumTxs = "/api/numtxs/";
-const pathRollupTime = "/api/rolluptime/";
-const pathLatestRollups = "/api/latestrollups/";
-const pathLatestTxs = "/api/latesttxs/";
-const pathBlock = "/api/block/";
-const pathRollup = "/api/rollup/";
-const pathDecryptTxBlob = "/api/decrypttxblob/";
-
-// Updates the displayed stats.
-async function updateStats() {
- const numRollupsField = document.getElementById(idNumRollups);
- const numTransactionsField = document.getElementById(idNumTxs);
- const rollupTimeField = document.getElementById(idRollupTime);
-
- const numRollupsResp = await fetch(pathNumRollups);
- if (numRollupsResp.ok) {
- numRollupsField.innerText = "Total rollups: " + await numRollupsResp.text();
- } else {
- numRollupsField.innerText = "Failed to fetch number of rollups.";
- }
-
- const numTransactionsResp = await fetch(pathNumTxs);
- if (numTransactionsResp.ok) {
- numTransactionsField.innerText = "Total transactions: " + await numTransactionsResp.text();
- } else {
- numTransactionsField.innerText = "Failed to fetch number of transactions.";
- }
-
- const rollupTimeResp = await fetch(pathRollupTime);
- if (rollupTimeResp.ok) {
- rollupTimeField.innerText = `Avg. rollup time: ${await rollupTimeResp.text()} secs`;
- } else {
- rollupTimeField.innerText = "Failed to fetch average rollup time.";
- }
-}
-
-// Updates the list of latest rollups.
-async function updateLatestRollups() {
- const rollupOneField = document.getElementById(idRollupOne);
- const rollupTwoField = document.getElementById(idRollupTwo);
- const rollupThreeField = document.getElementById(idRollupThree);
- const rollupFourField = document.getElementById(idRollupFour);
- const rollupFiveField = document.getElementById(idRollupFive);
-
- const latestRollupsResp = await fetch(pathLatestRollups);
-
- if (latestRollupsResp.ok) {
- const latestRollupsJSON = JSON.parse(await latestRollupsResp.text());
- rollupOneField.innerText = latestRollupsJSON[0];
- rollupTwoField.innerText = latestRollupsJSON[1];
- rollupThreeField.innerText = latestRollupsJSON[2];
- rollupFourField.innerText = latestRollupsJSON[3];
- rollupFiveField.innerText = latestRollupsJSON[4];
- } else {
- const errMsg = "Failed to fetch latest rollups.";
- rollupOneField.innerText = errMsg;
- rollupTwoField.innerText = errMsg;
- rollupThreeField.innerText = errMsg;
- rollupFourField.innerText = errMsg;
- rollupFiveField.innerText = errMsg;
- }
-}
-
-// Updates the list of latest transactions.
-async function updateLatestTxs() {
- const txOneField = document.getElementById(idTxOne);
- const txTwoField = document.getElementById(idTxTwo);
- const txThreeField = document.getElementById(idTxThree);
- const txFourField = document.getElementById(idTxFour);
- const txFiveField = document.getElementById(idTxFive);
-
- const latestTxsResp = await fetch(pathLatestTxs);
-
- if (latestTxsResp.ok) {
- const latestTxsJSON = JSON.parse(await latestTxsResp.text());
- txOneField.innerText = latestTxsJSON[0];
- txTwoField.innerText = latestTxsJSON[1];
- txThreeField.innerText = latestTxsJSON[2];
- txFourField.innerText = latestTxsJSON[3];
- txFiveField.innerText = latestTxsJSON[4];
- } else {
- const errMsg = "Failed to fetch latest transactions.";
- txOneField.innerText = errMsg;
- txTwoField.innerText = errMsg;
- txThreeField.innerText = errMsg;
- txFourField.innerText = errMsg;
- txFiveField.innerText = errMsg;
- }
-}
-
-// Displays the rollup based on the rollup number or transaction hash that has been clicked on.
-async function displayClickedItem(event) {
- event.preventDefault();
- const rollupNumber = document.getElementById(event.target.id).innerText;
- await displayRollup(rollupNumber);
-}
-
-// Displays the rollup with the given identifier (either a rollup number or a transaction hash that it contains).
-async function displayRollup(rollupID) {
- const resultPane = document.getElementById(idResult);
- const blockArea = document.getElementById(idBlock);
- const rollupArea = document.getElementById(idRollup);
- const decryptedTxsArea = document.getElementById(idDecryptedTxs);
-
- const rollupResp = await fetch(pathRollup, {
- body: rollupID,
- method: methodPost
- });
-
- if (!rollupResp.ok) {
- rollupArea.innerText = "Failed to fetch rollup.";
- blockArea.innerText = "Failed to fetch block.";
- decryptedTxsArea.innerText = "Failed to decrypt transaction blob.";
- resultPane.scrollIntoView();
- return;
- }
-
- const rollupJSON = JSON.parse(await rollupResp.text());
- rollupArea.innerText = JSON.stringify(rollupJSON, null, "\t");
-
- const blockResp = await fetch(pathBlock, {
- body: rollupJSON[jsonKeyHeader][jsonKeyL1Proof],
- method: methodPost
- });
-
- if (blockResp.ok) {
- const blockJSON = JSON.parse(await blockResp.text());
- blockArea.innerText = JSON.stringify(blockJSON, null, "\t");
- } else {
- blockArea.innerText = "Failed to fetch block.";
- }
-
- const encryptedTxBlob = rollupJSON[jsonKeyEncryptedTxBlob]
- const decryptTxBlobResp = await fetch(pathDecryptTxBlob, {
- body: encryptedTxBlob,
- method: methodPost
- });
-
- if (decryptTxBlobResp.ok) {
- const txBlobJSON = JSON.parse(await decryptTxBlobResp.text());
- decryptedTxsArea.innerText = JSON.stringify(txBlobJSON, null, "\t");
- } else {
- decryptedTxsArea.innerText = "Failed to decrypt transaction blob.";
- }
-
- resultPane.scrollIntoView();
-}
-
-const initialize = () => {
- // Updates the page's stats and latest rollups and transactions.
- setInterval(async () => {
- await updateStats();
- await updateLatestRollups();
- await updateLatestTxs();
- }, 1000);
-
- // Handles searches for rollups.
- document.getElementById(idFormGetRollup).addEventListener(typeSubmit, async (event) => {
- event.preventDefault();
- const rollupNumber = document.getElementById(idRollupID).value;
- await displayRollup(rollupNumber);
- });
-
- // Handles clicks on the latest rollups or transactions.
- document.getElementById(idRollupOne).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idRollupTwo).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idRollupThree).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idRollupFour).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idRollupFive).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idTxOne).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idTxTwo).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idTxThree).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idTxFour).addEventListener(typeClick, displayClickedItem);
- document.getElementById(idTxFive).addEventListener(typeClick, displayClickedItem);
-}
-
-window.addEventListener(eventDomLoaded, initialize);
\ No newline at end of file
diff --git a/tools/obscuroscan/static/logo.png b/tools/obscuroscan/static/logo.png
deleted file mode 100644
index bf8a0c6bab..0000000000
Binary files a/tools/obscuroscan/static/logo.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/.eslintrc.cjs b/tools/obscuroscan_v2/frontend/.eslintrc.cjs
deleted file mode 100644
index b64731a0fe..0000000000
--- a/tools/obscuroscan_v2/frontend/.eslintrc.cjs
+++ /dev/null
@@ -1,14 +0,0 @@
-/* eslint-env node */
-require('@rushstack/eslint-patch/modern-module-resolution')
-
-module.exports = {
- root: true,
- 'extends': [
- 'plugin:vue/vue3-essential',
- 'eslint:recommended',
- '@vue/eslint-config-prettier/skip-formatting'
- ],
- parserOptions: {
- ecmaVersion: 'latest'
- }
-}
diff --git a/tools/obscuroscan_v2/frontend/.gitignore b/tools/obscuroscan_v2/frontend/.gitignore
deleted file mode 100644
index 38adffa64e..0000000000
--- a/tools/obscuroscan_v2/frontend/.gitignore
+++ /dev/null
@@ -1,28 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-.DS_Store
-dist
-dist-ssr
-coverage
-*.local
-
-/cypress/videos/
-/cypress/screenshots/
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/tools/obscuroscan_v2/frontend/.prettierrc.json b/tools/obscuroscan_v2/frontend/.prettierrc.json
deleted file mode 100644
index 66e23359c3..0000000000
--- a/tools/obscuroscan_v2/frontend/.prettierrc.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/prettierrc",
- "semi": false,
- "tabWidth": 2,
- "singleQuote": true,
- "printWidth": 100,
- "trailingComma": "none"
-}
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/Dockerfile b/tools/obscuroscan_v2/frontend/Dockerfile
deleted file mode 100644
index e37630ff7c..0000000000
--- a/tools/obscuroscan_v2/frontend/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM node:18-buster as runner
-# setup container data structure
-RUN mkdir -p /home/obscuro/go-obscuro/tools/obscuroscan_v2/
-COPY ./tools/obscuroscan_v2/frontend /home/obscuro/go-obscuro/tools/obscuroscan_v2/frontend
-
-WORKDIR /home/obscuro/go-obscuro/tools/obscuroscan_v2/frontend
-RUN npm install && npm install http-server -g
-
-EXPOSE 80
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/README.md b/tools/obscuroscan_v2/frontend/README.md
deleted file mode 100644
index 31d6e8e9c2..0000000000
--- a/tools/obscuroscan_v2/frontend/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# frontend
-
-This template should help get you started developing with Vue 3 in Vite.
-
-## Customize configuration
-
-See [Vite Configuration Reference](https://vitejs.dev/config/).
-
-## Project Setup
-
-```sh
-npm install
-```
-
-### Compile and Hot-Reload for Development
-
-```sh
-npm run dev
-```
-
-### Compile and Minify for Production
-
-```sh
-npm run build
-```
-
-### Lint with [ESLint](https://eslint.org/)
-
-```sh
-npm run lint
-```
diff --git a/tools/obscuroscan_v2/frontend/index.html b/tools/obscuroscan_v2/frontend/index.html
deleted file mode 100644
index 789e32deb8..0000000000
--- a/tools/obscuroscan_v2/frontend/index.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
- ObscuroScan
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/package-lock.json b/tools/obscuroscan_v2/frontend/package-lock.json
deleted file mode 100644
index b5178d45c3..0000000000
--- a/tools/obscuroscan_v2/frontend/package-lock.json
+++ /dev/null
@@ -1,4144 +0,0 @@
-{
- "name": "frontend",
- "version": "0.0.0",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "frontend",
- "version": "0.0.0",
- "dependencies": {
- "@metamask/detect-provider": "^2.0.0",
- "axios": "^1.4.0",
- "element-plus": "^2.3.8",
- "ethers": "^6.6.7",
- "pinia": "^2.1.4",
- "vue": "^3.3.4",
- "vue-json-pretty": "^2.2.4",
- "vue-router": "^4.2.2"
- },
- "devDependencies": {
- "@rushstack/eslint-patch": "^1.2.0",
- "@vitejs/plugin-vue": "^4.2.3",
- "@vue/eslint-config-prettier": "^7.1.0",
- "eslint": "^8.39.0",
- "eslint-plugin-vue": "^9.11.0",
- "prettier": "^2.8.8",
- "vite": "^4.3.9"
- }
- },
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@adraffy/ens-normalize": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz",
- "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg=="
- },
- "node_modules/@babel/parser": {
- "version": "7.22.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
- "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@ctrl/tinycolor": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz",
- "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@element-plus/icons-vue": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz",
- "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
- "peerDependencies": {
- "vue": "^3.2.0"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.14.tgz",
- "integrity": "sha512-blODaaL+lngG5bdK/t4qZcQvq2BBqrABmYwqPPcS5VRxrCSGHb9R/rA3fqxh7R18I7WU4KKv+NYkt22FDfalcg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.14.tgz",
- "integrity": "sha512-rZ2v+Luba5/3D6l8kofWgTnqE+qsC/L5MleKIKFyllHTKHrNBMqeRCnZI1BtRx8B24xMYxeU32iIddRQqMsOsg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.14.tgz",
- "integrity": "sha512-qSwh8y38QKl+1Iqg+YhvCVYlSk3dVLk9N88VO71U4FUjtiSFylMWK3Ugr8GC6eTkkP4Tc83dVppt2n8vIdlSGg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.14.tgz",
- "integrity": "sha512-9Hl2D2PBeDYZiNbnRKRWuxwHa9v5ssWBBjisXFkVcSP5cZqzZRFBUWEQuqBHO4+PKx4q4wgHoWtfQ1S7rUqJ2Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.14.tgz",
- "integrity": "sha512-ZnI3Dg4ElQ6tlv82qLc/UNHtFsgZSKZ7KjsUNAo1BF1SoYDjkGKHJyCrYyWjFecmXpvvG/KJ9A/oe0H12odPLQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.14.tgz",
- "integrity": "sha512-h3OqR80Da4oQCIa37zl8tU5MwHQ7qgPV0oVScPfKJK21fSRZEhLE4IIVpmcOxfAVmqjU6NDxcxhYaM8aDIGRLw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.14.tgz",
- "integrity": "sha512-ha4BX+S6CZG4BoH9tOZTrFIYC1DH13UTCRHzFc3GWX74nz3h/N6MPF3tuR3XlsNjMFUazGgm35MPW5tHkn2lzQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.14.tgz",
- "integrity": "sha512-5+7vehI1iqru5WRtJyU2XvTOvTGURw3OZxe3YTdE9muNNIdmKAVmSHpB3Vw2LazJk2ifEdIMt/wTWnVe5V98Kg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.14.tgz",
- "integrity": "sha512-IXORRe22In7U65NZCzjwAUc03nn8SDIzWCnfzJ6t/8AvGx5zBkcLfknI+0P+hhuftufJBmIXxdSTbzWc8X/V4w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.14.tgz",
- "integrity": "sha512-BfHlMa0nibwpjG+VXbOoqJDmFde4UK2gnW351SQ2Zd4t1N3zNdmUEqRkw/srC1Sa1DRBE88Dbwg4JgWCbNz/FQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.14.tgz",
- "integrity": "sha512-j2/Ex++DRUWIAaUDprXd3JevzGtZ4/d7VKz+AYDoHZ3HjJzCyYBub9CU1wwIXN+viOP0b4VR3RhGClsvyt/xSw==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.14.tgz",
- "integrity": "sha512-qn2+nc+ZCrJmiicoAnJXJJkZWt8Nwswgu1crY7N+PBR8ChBHh89XRxj38UU6Dkthl2yCVO9jWuafZ24muzDC/A==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.14.tgz",
- "integrity": "sha512-aGzXzd+djqeEC5IRkDKt3kWzvXoXC6K6GyYKxd+wsFJ2VQYnOWE954qV2tvy5/aaNrmgPTb52cSCHFE+Z7Z0yg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.14.tgz",
- "integrity": "sha512-8C6vWbfr0ygbAiMFLS6OPz0BHvApkT2gCboOGV76YrYw+sD/MQJzyITNsjZWDXJwPu9tjrFQOVG7zijRzBCnLw==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.14.tgz",
- "integrity": "sha512-G/Lf9iu8sRMM60OVGOh94ZW2nIStksEcITkXdkD09/T6QFD/o+g0+9WVyR/jajIb3A0LvBJ670tBnGe1GgXMgw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.14.tgz",
- "integrity": "sha512-TBgStYBQaa3EGhgqIDM+ECnkreb0wkcKqL7H6m+XPcGUoU4dO7dqewfbm0mWEQYH3kzFHrzjOFNpSAVzDZRSJw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.14.tgz",
- "integrity": "sha512-stvCcjyCQR2lMTroqNhAbvROqRjxPEq0oQ380YdXxA81TaRJEucH/PzJ/qsEtsHgXlWFW6Ryr/X15vxQiyRXVg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.14.tgz",
- "integrity": "sha512-apAOJF14CIsN5ht1PA57PboEMsNV70j3FUdxLmA2liZ20gEQnfTG5QU0FhENo5nwbTqCB2O3WDsXAihfODjHYw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.14.tgz",
- "integrity": "sha512-fYRaaS8mDgZcGybPn2MQbn1ZNZx+UXFSUoS5Hd2oEnlsyUcr/l3c6RnXf1bLDRKKdLRSabTmyCy7VLQ7VhGdOQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.14.tgz",
- "integrity": "sha512-1c44RcxKEJPrVj62XdmYhxXaU/V7auELCmnD+Ri+UCt+AGxTvzxl9uauQhrFso8gj6ZV1DaORV0sT9XSHOAk8Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.14.tgz",
- "integrity": "sha512-EXAFttrdAxZkFQmpvcAQ2bywlWUsONp/9c2lcfvPUhu8vXBBenCXpoq9YkUvVP639ld3YGiYx0YUQ6/VQz3Maw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.14.tgz",
- "integrity": "sha512-K0QjGbcskx+gY+qp3v4/940qg8JitpXbdxFhRDA1aYoNaPff88+aEwoq45aqJ+ogpxQxmU0ZTjgnrQD/w8iiUg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
- "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
- "dev": true,
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
- "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.44.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
- "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@floating-ui/core": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz",
- "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g=="
- },
- "node_modules/@floating-ui/dom": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.5.tgz",
- "integrity": "sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==",
- "dependencies": {
- "@floating-ui/core": "^1.3.1"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
- "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "dev": true
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
- },
- "node_modules/@metamask/detect-provider": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-2.0.0.tgz",
- "integrity": "sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ==",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@noble/hashes": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz",
- "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==",
- "funding": [
- {
- "type": "individual",
- "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/"
- }
- ]
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@popperjs/core": {
- "name": "@sxzz/popperjs-es",
- "version": "2.11.7",
- "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
- "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/popperjs"
- }
- },
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz",
- "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==",
- "dev": true
- },
- "node_modules/@types/lodash": {
- "version": "4.14.195",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz",
- "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg=="
- },
- "node_modules/@types/lodash-es": {
- "version": "4.17.8",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.8.tgz",
- "integrity": "sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==",
- "dependencies": {
- "@types/lodash": "*"
- }
- },
- "node_modules/@types/node": {
- "version": "18.15.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz",
- "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q=="
- },
- "node_modules/@types/web-bluetooth": {
- "version": "0.0.16",
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
- "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
- },
- "node_modules/@vitejs/plugin-vue": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz",
- "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==",
- "dev": true,
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "peerDependencies": {
- "vite": "^4.0.0",
- "vue": "^3.2.25"
- }
- },
- "node_modules/@vue/compiler-core": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
- "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
- "dependencies": {
- "@babel/parser": "^7.21.3",
- "@vue/shared": "3.3.4",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.0.2"
- }
- },
- "node_modules/@vue/compiler-dom": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
- "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
- "dependencies": {
- "@vue/compiler-core": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "node_modules/@vue/compiler-sfc": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
- "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
- "dependencies": {
- "@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.4",
- "@vue/compiler-dom": "3.3.4",
- "@vue/compiler-ssr": "3.3.4",
- "@vue/reactivity-transform": "3.3.4",
- "@vue/shared": "3.3.4",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.0",
- "postcss": "^8.1.10",
- "source-map-js": "^1.0.2"
- }
- },
- "node_modules/@vue/compiler-ssr": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
- "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
- "dependencies": {
- "@vue/compiler-dom": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "node_modules/@vue/devtools-api": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
- "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
- },
- "node_modules/@vue/eslint-config-prettier": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz",
- "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==",
- "dev": true,
- "dependencies": {
- "eslint-config-prettier": "^8.3.0",
- "eslint-plugin-prettier": "^4.0.0"
- },
- "peerDependencies": {
- "eslint": ">= 7.28.0",
- "prettier": ">= 2.0.0"
- }
- },
- "node_modules/@vue/reactivity": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
- "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
- "dependencies": {
- "@vue/shared": "3.3.4"
- }
- },
- "node_modules/@vue/reactivity-transform": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
- "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
- "dependencies": {
- "@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.4",
- "@vue/shared": "3.3.4",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.0"
- }
- },
- "node_modules/@vue/runtime-core": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
- "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
- "dependencies": {
- "@vue/reactivity": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "node_modules/@vue/runtime-dom": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
- "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
- "dependencies": {
- "@vue/runtime-core": "3.3.4",
- "@vue/shared": "3.3.4",
- "csstype": "^3.1.1"
- }
- },
- "node_modules/@vue/server-renderer": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
- "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
- "dependencies": {
- "@vue/compiler-ssr": "3.3.4",
- "@vue/shared": "3.3.4"
- },
- "peerDependencies": {
- "vue": "3.3.4"
- }
- },
- "node_modules/@vue/shared": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
- "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
- },
- "node_modules/@vueuse/core": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
- "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
- "dependencies": {
- "@types/web-bluetooth": "^0.0.16",
- "@vueuse/metadata": "9.13.0",
- "@vueuse/shared": "9.13.0",
- "vue-demi": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@vueuse/core/node_modules/vue-demi": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
- "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
- "hasInstallScript": true,
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/@vueuse/metadata": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
- "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@vueuse/shared": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
- "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
- "dependencies": {
- "vue-demi": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@vueuse/shared/node_modules/vue-demi": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
- "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
- "hasInstallScript": true,
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.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",
- "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q=="
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "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
- },
- "node_modules/async-validator": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
- "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
- },
- "node_modules/axios": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
- "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
- "dependencies": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
- },
- "node_modules/dayjs": {
- "version": "1.11.9",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
- "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/element-plus": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.3.8.tgz",
- "integrity": "sha512-yHQR0/tG2LvPkpGUt7Te/hPmP2XW/BytBNUbx+EFO54VnGCOE3upmQcVffNp1PLgwg9sthYDXontUWpnpmLPJw==",
- "dependencies": {
- "@ctrl/tinycolor": "^3.4.1",
- "@element-plus/icons-vue": "^2.0.6",
- "@floating-ui/dom": "^1.0.1",
- "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
- "@types/lodash": "^4.14.182",
- "@types/lodash-es": "^4.17.6",
- "@vueuse/core": "^9.1.0",
- "async-validator": "^4.2.5",
- "dayjs": "^1.11.3",
- "escape-html": "^1.0.3",
- "lodash": "^4.17.21",
- "lodash-es": "^4.17.21",
- "lodash-unified": "^1.0.2",
- "memoize-one": "^6.0.0",
- "normalize-wheel-es": "^1.2.0"
- },
- "peerDependencies": {
- "vue": "^3.2.0"
- }
- },
- "node_modules/esbuild": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.14.tgz",
- "integrity": "sha512-uNPj5oHPYmj+ZhSQeYQVFZ+hAlJZbAGOmmILWIqrGvPVlNLbyOvU5Bu6Woi8G8nskcx0vwY0iFoMPrzT86Ko+w==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/android-arm": "0.18.14",
- "@esbuild/android-arm64": "0.18.14",
- "@esbuild/android-x64": "0.18.14",
- "@esbuild/darwin-arm64": "0.18.14",
- "@esbuild/darwin-x64": "0.18.14",
- "@esbuild/freebsd-arm64": "0.18.14",
- "@esbuild/freebsd-x64": "0.18.14",
- "@esbuild/linux-arm": "0.18.14",
- "@esbuild/linux-arm64": "0.18.14",
- "@esbuild/linux-ia32": "0.18.14",
- "@esbuild/linux-loong64": "0.18.14",
- "@esbuild/linux-mips64el": "0.18.14",
- "@esbuild/linux-ppc64": "0.18.14",
- "@esbuild/linux-riscv64": "0.18.14",
- "@esbuild/linux-s390x": "0.18.14",
- "@esbuild/linux-x64": "0.18.14",
- "@esbuild/netbsd-x64": "0.18.14",
- "@esbuild/openbsd-x64": "0.18.14",
- "@esbuild/sunos-x64": "0.18.14",
- "@esbuild/win32-arm64": "0.18.14",
- "@esbuild/win32-ia32": "0.18.14",
- "@esbuild/win32-x64": "0.18.14"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz",
- "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.1.0",
- "@eslint/js": "8.44.0",
- "@humanwhocodes/config-array": "^0.11.10",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.0",
- "eslint-visitor-keys": "^3.4.1",
- "espree": "^9.6.0",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-prettier": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
- "dev": true,
- "bin": {
- "eslint-config-prettier": "bin/cli.js"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-plugin-prettier": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
- "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
- "dev": true,
- "dependencies": {
- "prettier-linter-helpers": "^1.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "eslint": ">=7.28.0",
- "prettier": ">=2.0.0"
- },
- "peerDependenciesMeta": {
- "eslint-config-prettier": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-plugin-vue": {
- "version": "9.15.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz",
- "integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.3.0",
- "natural-compare": "^1.4.0",
- "nth-check": "^2.0.1",
- "postcss-selector-parser": "^6.0.9",
- "semver": "^7.3.5",
- "vue-eslint-parser": "^9.3.0",
- "xml-name-validator": "^4.0.0"
- },
- "engines": {
- "node": "^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz",
- "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
- "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ethers": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.6.7.tgz",
- "integrity": "sha512-1SdT3W5/IPAcx9l5/+9qKRYR/iqVIdNQIct18yeh+XvN+I4RK44mvOsAerMwJYCAwdQfsOgf3OkfozeuMInbtQ==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/ethers-io/"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "dependencies": {
- "@adraffy/ens-normalize": "1.9.2",
- "@noble/hashes": "1.1.2",
- "@noble/secp256k1": "1.7.1",
- "@types/node": "18.15.13",
- "aes-js": "4.0.0-beta.5",
- "tslib": "2.4.0",
- "ws": "8.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-diff": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
- "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
- "dev": true
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/find-up": {
- "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,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
- "dev": true
- },
- "node_modules/follow-redirects": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "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==",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "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",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "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,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "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==",
- "dev": true,
- "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",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/locate-path": {
- "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,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
- },
- "node_modules/lodash-unified": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
- "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
- "peerDependencies": {
- "@types/lodash-es": "*",
- "lodash": "*",
- "lodash-es": "*"
- }
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/magic-string": {
- "version": "0.30.1",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz",
- "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/memoize-one": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "node_modules/normalize-wheel-es": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
- "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
- "dev": true,
- "dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "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,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "node_modules/pinia": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.4.tgz",
- "integrity": "sha512-vYlnDu+Y/FXxv1ABo1vhjC+IbqvzUdiUC3sfDRrRyY2CQSrqqaa+iiHmqtARFxJVqWQMCJfXx1PBvFs9aJVLXQ==",
- "dependencies": {
- "@vue/devtools-api": "^6.5.0",
- "vue-demi": ">=0.14.5"
- },
- "funding": {
- "url": "https://github.com/sponsors/posva"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.4.0",
- "typescript": ">=4.4.4",
- "vue": "^2.6.14 || ^3.3.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- },
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/pinia/node_modules/vue-demi": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
- "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
- "hasInstallScript": true,
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/postcss": {
- "version": "8.4.26",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.26.tgz",
- "integrity": "sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
- "dev": true,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true,
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prettier-linter-helpers": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
- "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
- "dev": true,
- "dependencies": {
- "fast-diff": "^1.1.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
- },
- "node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rollup": {
- "version": "3.26.3",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz",
- "integrity": "sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==",
- "dev": true,
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=14.18.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "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,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "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,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "node_modules/tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/vite": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.4.tgz",
- "integrity": "sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg==",
- "dev": true,
- "dependencies": {
- "esbuild": "^0.18.10",
- "postcss": "^8.4.25",
- "rollup": "^3.25.2"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- },
- "peerDependencies": {
- "@types/node": ">= 14",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.4.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- }
- }
- },
- "node_modules/vue": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
- "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
- "dependencies": {
- "@vue/compiler-dom": "3.3.4",
- "@vue/compiler-sfc": "3.3.4",
- "@vue/runtime-dom": "3.3.4",
- "@vue/server-renderer": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "node_modules/vue-eslint-parser": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz",
- "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==",
- "dev": true,
- "dependencies": {
- "debug": "^4.3.4",
- "eslint-scope": "^7.1.1",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.1",
- "esquery": "^1.4.0",
- "lodash": "^4.17.21",
- "semver": "^7.3.6"
- },
- "engines": {
- "node": "^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=6.0.0"
- }
- },
- "node_modules/vue-json-pretty": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/vue-json-pretty/-/vue-json-pretty-2.2.4.tgz",
- "integrity": "sha512-JX80b3QDrspcH43C53CdtYeq/froApQGSV5y43bEMWFj2LGOxB96aH1VmvrFA21nD1WTP6nwfFMQqGXuS4jyFQ==",
- "engines": {
- "node": ">= 10.0.0",
- "npm": ">= 5.0.0"
- },
- "peerDependencies": {
- "vue": ">=3.0.0"
- }
- },
- "node_modules/vue-router": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz",
- "integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==",
- "dependencies": {
- "@vue/devtools-api": "^6.5.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/posva"
- },
- "peerDependencies": {
- "vue": "^3.2.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/ws": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
- "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xml-name-validator": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "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,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true
- },
- "@adraffy/ens-normalize": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz",
- "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg=="
- },
- "@babel/parser": {
- "version": "7.22.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
- "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q=="
- },
- "@ctrl/tinycolor": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz",
- "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ=="
- },
- "@element-plus/icons-vue": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz",
- "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
- "requires": {}
- },
- "@esbuild/android-arm": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.14.tgz",
- "integrity": "sha512-blODaaL+lngG5bdK/t4qZcQvq2BBqrABmYwqPPcS5VRxrCSGHb9R/rA3fqxh7R18I7WU4KKv+NYkt22FDfalcg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.14.tgz",
- "integrity": "sha512-rZ2v+Luba5/3D6l8kofWgTnqE+qsC/L5MleKIKFyllHTKHrNBMqeRCnZI1BtRx8B24xMYxeU32iIddRQqMsOsg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.14.tgz",
- "integrity": "sha512-qSwh8y38QKl+1Iqg+YhvCVYlSk3dVLk9N88VO71U4FUjtiSFylMWK3Ugr8GC6eTkkP4Tc83dVppt2n8vIdlSGg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.14.tgz",
- "integrity": "sha512-9Hl2D2PBeDYZiNbnRKRWuxwHa9v5ssWBBjisXFkVcSP5cZqzZRFBUWEQuqBHO4+PKx4q4wgHoWtfQ1S7rUqJ2Q==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.14.tgz",
- "integrity": "sha512-ZnI3Dg4ElQ6tlv82qLc/UNHtFsgZSKZ7KjsUNAo1BF1SoYDjkGKHJyCrYyWjFecmXpvvG/KJ9A/oe0H12odPLQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.14.tgz",
- "integrity": "sha512-h3OqR80Da4oQCIa37zl8tU5MwHQ7qgPV0oVScPfKJK21fSRZEhLE4IIVpmcOxfAVmqjU6NDxcxhYaM8aDIGRLw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.14.tgz",
- "integrity": "sha512-ha4BX+S6CZG4BoH9tOZTrFIYC1DH13UTCRHzFc3GWX74nz3h/N6MPF3tuR3XlsNjMFUazGgm35MPW5tHkn2lzQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.14.tgz",
- "integrity": "sha512-5+7vehI1iqru5WRtJyU2XvTOvTGURw3OZxe3YTdE9muNNIdmKAVmSHpB3Vw2LazJk2ifEdIMt/wTWnVe5V98Kg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.14.tgz",
- "integrity": "sha512-IXORRe22In7U65NZCzjwAUc03nn8SDIzWCnfzJ6t/8AvGx5zBkcLfknI+0P+hhuftufJBmIXxdSTbzWc8X/V4w==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ia32": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.14.tgz",
- "integrity": "sha512-BfHlMa0nibwpjG+VXbOoqJDmFde4UK2gnW351SQ2Zd4t1N3zNdmUEqRkw/srC1Sa1DRBE88Dbwg4JgWCbNz/FQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-loong64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.14.tgz",
- "integrity": "sha512-j2/Ex++DRUWIAaUDprXd3JevzGtZ4/d7VKz+AYDoHZ3HjJzCyYBub9CU1wwIXN+viOP0b4VR3RhGClsvyt/xSw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-mips64el": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.14.tgz",
- "integrity": "sha512-qn2+nc+ZCrJmiicoAnJXJJkZWt8Nwswgu1crY7N+PBR8ChBHh89XRxj38UU6Dkthl2yCVO9jWuafZ24muzDC/A==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ppc64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.14.tgz",
- "integrity": "sha512-aGzXzd+djqeEC5IRkDKt3kWzvXoXC6K6GyYKxd+wsFJ2VQYnOWE954qV2tvy5/aaNrmgPTb52cSCHFE+Z7Z0yg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-riscv64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.14.tgz",
- "integrity": "sha512-8C6vWbfr0ygbAiMFLS6OPz0BHvApkT2gCboOGV76YrYw+sD/MQJzyITNsjZWDXJwPu9tjrFQOVG7zijRzBCnLw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-s390x": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.14.tgz",
- "integrity": "sha512-G/Lf9iu8sRMM60OVGOh94ZW2nIStksEcITkXdkD09/T6QFD/o+g0+9WVyR/jajIb3A0LvBJ670tBnGe1GgXMgw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.14.tgz",
- "integrity": "sha512-TBgStYBQaa3EGhgqIDM+ECnkreb0wkcKqL7H6m+XPcGUoU4dO7dqewfbm0mWEQYH3kzFHrzjOFNpSAVzDZRSJw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/netbsd-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.14.tgz",
- "integrity": "sha512-stvCcjyCQR2lMTroqNhAbvROqRjxPEq0oQ380YdXxA81TaRJEucH/PzJ/qsEtsHgXlWFW6Ryr/X15vxQiyRXVg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/openbsd-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.14.tgz",
- "integrity": "sha512-apAOJF14CIsN5ht1PA57PboEMsNV70j3FUdxLmA2liZ20gEQnfTG5QU0FhENo5nwbTqCB2O3WDsXAihfODjHYw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/sunos-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.14.tgz",
- "integrity": "sha512-fYRaaS8mDgZcGybPn2MQbn1ZNZx+UXFSUoS5Hd2oEnlsyUcr/l3c6RnXf1bLDRKKdLRSabTmyCy7VLQ7VhGdOQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-arm64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.14.tgz",
- "integrity": "sha512-1c44RcxKEJPrVj62XdmYhxXaU/V7auELCmnD+Ri+UCt+AGxTvzxl9uauQhrFso8gj6ZV1DaORV0sT9XSHOAk8Q==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-ia32": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.14.tgz",
- "integrity": "sha512-EXAFttrdAxZkFQmpvcAQ2bywlWUsONp/9c2lcfvPUhu8vXBBenCXpoq9YkUvVP639ld3YGiYx0YUQ6/VQz3Maw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-x64": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.14.tgz",
- "integrity": "sha512-K0QjGbcskx+gY+qp3v4/940qg8JitpXbdxFhRDA1aYoNaPff88+aEwoq45aqJ+ogpxQxmU0ZTjgnrQD/w8iiUg==",
- "dev": true,
- "optional": true
- },
- "@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "@eslint-community/regexpp": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
- "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
- "dev": true
- },
- "@eslint/eslintrc": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
- "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- }
- },
- "@eslint/js": {
- "version": "8.44.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
- "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
- "dev": true
- },
- "@floating-ui/core": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz",
- "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g=="
- },
- "@floating-ui/dom": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.5.tgz",
- "integrity": "sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==",
- "requires": {
- "@floating-ui/core": "^1.3.1"
- }
- },
- "@humanwhocodes/config-array": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
- "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- }
- },
- "@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true
- },
- "@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "dev": true
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
- },
- "@metamask/detect-provider": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-2.0.0.tgz",
- "integrity": "sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ=="
- },
- "@noble/hashes": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz",
- "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA=="
- },
- "@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=="
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@popperjs/core": {
- "version": "npm:@sxzz/popperjs-es@2.11.7",
- "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
- "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
- },
- "@rushstack/eslint-patch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz",
- "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==",
- "dev": true
- },
- "@types/lodash": {
- "version": "4.14.195",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz",
- "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg=="
- },
- "@types/lodash-es": {
- "version": "4.17.8",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.8.tgz",
- "integrity": "sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==",
- "requires": {
- "@types/lodash": "*"
- }
- },
- "@types/node": {
- "version": "18.15.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz",
- "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q=="
- },
- "@types/web-bluetooth": {
- "version": "0.0.16",
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
- "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
- },
- "@vitejs/plugin-vue": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz",
- "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==",
- "dev": true,
- "requires": {}
- },
- "@vue/compiler-core": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
- "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
- "requires": {
- "@babel/parser": "^7.21.3",
- "@vue/shared": "3.3.4",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.0.2"
- }
- },
- "@vue/compiler-dom": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
- "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
- "requires": {
- "@vue/compiler-core": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "@vue/compiler-sfc": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
- "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
- "requires": {
- "@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.4",
- "@vue/compiler-dom": "3.3.4",
- "@vue/compiler-ssr": "3.3.4",
- "@vue/reactivity-transform": "3.3.4",
- "@vue/shared": "3.3.4",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.0",
- "postcss": "^8.1.10",
- "source-map-js": "^1.0.2"
- }
- },
- "@vue/compiler-ssr": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
- "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
- "requires": {
- "@vue/compiler-dom": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "@vue/devtools-api": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
- "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
- },
- "@vue/eslint-config-prettier": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz",
- "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==",
- "dev": true,
- "requires": {
- "eslint-config-prettier": "^8.3.0",
- "eslint-plugin-prettier": "^4.0.0"
- }
- },
- "@vue/reactivity": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
- "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
- "requires": {
- "@vue/shared": "3.3.4"
- }
- },
- "@vue/reactivity-transform": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
- "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
- "requires": {
- "@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.4",
- "@vue/shared": "3.3.4",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.0"
- }
- },
- "@vue/runtime-core": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
- "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
- "requires": {
- "@vue/reactivity": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "@vue/runtime-dom": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
- "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
- "requires": {
- "@vue/runtime-core": "3.3.4",
- "@vue/shared": "3.3.4",
- "csstype": "^3.1.1"
- }
- },
- "@vue/server-renderer": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
- "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
- "requires": {
- "@vue/compiler-ssr": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "@vue/shared": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
- "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
- },
- "@vueuse/core": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
- "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
- "requires": {
- "@types/web-bluetooth": "^0.0.16",
- "@vueuse/metadata": "9.13.0",
- "@vueuse/shared": "9.13.0",
- "vue-demi": "*"
- },
- "dependencies": {
- "vue-demi": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
- "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
- "requires": {}
- }
- }
- },
- "@vueuse/metadata": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
- "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
- },
- "@vueuse/shared": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
- "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
- "requires": {
- "vue-demi": "*"
- },
- "dependencies": {
- "vue-demi": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
- "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
- "requires": {}
- }
- }
- },
- "acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
- },
- "aes-js": {
- "version": "4.0.0-beta.5",
- "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz",
- "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q=="
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "argparse": {
- "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
- },
- "async-validator": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
- "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
- },
- "axios": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
- "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
- "requires": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true
- },
- "csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
- },
- "dayjs": {
- "version": "1.11.9",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
- "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "element-plus": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.3.8.tgz",
- "integrity": "sha512-yHQR0/tG2LvPkpGUt7Te/hPmP2XW/BytBNUbx+EFO54VnGCOE3upmQcVffNp1PLgwg9sthYDXontUWpnpmLPJw==",
- "requires": {
- "@ctrl/tinycolor": "^3.4.1",
- "@element-plus/icons-vue": "^2.0.6",
- "@floating-ui/dom": "^1.0.1",
- "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
- "@types/lodash": "^4.14.182",
- "@types/lodash-es": "^4.17.6",
- "@vueuse/core": "^9.1.0",
- "async-validator": "^4.2.5",
- "dayjs": "^1.11.3",
- "escape-html": "^1.0.3",
- "lodash": "^4.17.21",
- "lodash-es": "^4.17.21",
- "lodash-unified": "^1.0.2",
- "memoize-one": "^6.0.0",
- "normalize-wheel-es": "^1.2.0"
- }
- },
- "esbuild": {
- "version": "0.18.14",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.14.tgz",
- "integrity": "sha512-uNPj5oHPYmj+ZhSQeYQVFZ+hAlJZbAGOmmILWIqrGvPVlNLbyOvU5Bu6Woi8G8nskcx0vwY0iFoMPrzT86Ko+w==",
- "dev": true,
- "requires": {
- "@esbuild/android-arm": "0.18.14",
- "@esbuild/android-arm64": "0.18.14",
- "@esbuild/android-x64": "0.18.14",
- "@esbuild/darwin-arm64": "0.18.14",
- "@esbuild/darwin-x64": "0.18.14",
- "@esbuild/freebsd-arm64": "0.18.14",
- "@esbuild/freebsd-x64": "0.18.14",
- "@esbuild/linux-arm": "0.18.14",
- "@esbuild/linux-arm64": "0.18.14",
- "@esbuild/linux-ia32": "0.18.14",
- "@esbuild/linux-loong64": "0.18.14",
- "@esbuild/linux-mips64el": "0.18.14",
- "@esbuild/linux-ppc64": "0.18.14",
- "@esbuild/linux-riscv64": "0.18.14",
- "@esbuild/linux-s390x": "0.18.14",
- "@esbuild/linux-x64": "0.18.14",
- "@esbuild/netbsd-x64": "0.18.14",
- "@esbuild/openbsd-x64": "0.18.14",
- "@esbuild/sunos-x64": "0.18.14",
- "@esbuild/win32-arm64": "0.18.14",
- "@esbuild/win32-ia32": "0.18.14",
- "@esbuild/win32-x64": "0.18.14"
- }
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "eslint": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz",
- "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.1.0",
- "@eslint/js": "8.44.0",
- "@humanwhocodes/config-array": "^0.11.10",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.0",
- "eslint-visitor-keys": "^3.4.1",
- "espree": "^9.6.0",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- }
- },
- "eslint-config-prettier": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
- "dev": true,
- "requires": {}
- },
- "eslint-plugin-prettier": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
- "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
- "dev": true,
- "requires": {
- "prettier-linter-helpers": "^1.0.0"
- }
- },
- "eslint-plugin-vue": {
- "version": "9.15.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz",
- "integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.3.0",
- "natural-compare": "^1.4.0",
- "nth-check": "^2.0.1",
- "postcss-selector-parser": "^6.0.9",
- "semver": "^7.3.5",
- "vue-eslint-parser": "^9.3.0",
- "xml-name-validator": "^4.0.0"
- }
- },
- "eslint-scope": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz",
- "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
- "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
- "dev": true
- },
- "espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "requires": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- }
- },
- "esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "ethers": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.6.7.tgz",
- "integrity": "sha512-1SdT3W5/IPAcx9l5/+9qKRYR/iqVIdNQIct18yeh+XvN+I4RK44mvOsAerMwJYCAwdQfsOgf3OkfozeuMInbtQ==",
- "requires": {
- "@adraffy/ens-normalize": "1.9.2",
- "@noble/hashes": "1.1.2",
- "@noble/secp256k1": "1.7.1",
- "@types/node": "18.15.13",
- "aes-js": "4.0.0-beta.5",
- "tslib": "2.4.0",
- "ws": "8.5.0"
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-diff": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
- "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "find-up": {
- "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,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- }
- },
- "flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
- "dev": true
- },
- "follow-redirects": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
- },
- "form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- },
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "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
- },
- "ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "locate-path": {
- "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,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
- },
- "lodash-unified": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
- "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
- "requires": {}
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "magic-string": {
- "version": "0.30.1",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz",
- "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==",
- "requires": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- }
- },
- "memoize-one": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "normalize-wheel-es": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
- "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
- },
- "nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
- "dev": true,
- "requires": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "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,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "pinia": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.4.tgz",
- "integrity": "sha512-vYlnDu+Y/FXxv1ABo1vhjC+IbqvzUdiUC3sfDRrRyY2CQSrqqaa+iiHmqtARFxJVqWQMCJfXx1PBvFs9aJVLXQ==",
- "requires": {
- "@vue/devtools-api": "^6.5.0",
- "vue-demi": ">=0.14.5"
- },
- "dependencies": {
- "vue-demi": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
- "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
- "requires": {}
- }
- }
- },
- "postcss": {
- "version": "8.4.26",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.26.tgz",
- "integrity": "sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==",
- "requires": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
- "postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
- "dev": true,
- "requires": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true
- },
- "prettier-linter-helpers": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
- "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
- "dev": true,
- "requires": {
- "fast-diff": "^1.1.2"
- }
- },
- "proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
- },
- "punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "rollup": {
- "version": "3.26.3",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz",
- "integrity": "sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==",
- "dev": true,
- "requires": {
- "fsevents": "~2.3.2"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-json-comments": {
- "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
- },
- "supports-color": {
- "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,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "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==",
- "dev": true
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "vite": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.4.tgz",
- "integrity": "sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg==",
- "dev": true,
- "requires": {
- "esbuild": "^0.18.10",
- "fsevents": "~2.3.2",
- "postcss": "^8.4.25",
- "rollup": "^3.25.2"
- }
- },
- "vue": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
- "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
- "requires": {
- "@vue/compiler-dom": "3.3.4",
- "@vue/compiler-sfc": "3.3.4",
- "@vue/runtime-dom": "3.3.4",
- "@vue/server-renderer": "3.3.4",
- "@vue/shared": "3.3.4"
- }
- },
- "vue-eslint-parser": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz",
- "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==",
- "dev": true,
- "requires": {
- "debug": "^4.3.4",
- "eslint-scope": "^7.1.1",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.1",
- "esquery": "^1.4.0",
- "lodash": "^4.17.21",
- "semver": "^7.3.6"
- }
- },
- "vue-json-pretty": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/vue-json-pretty/-/vue-json-pretty-2.2.4.tgz",
- "integrity": "sha512-JX80b3QDrspcH43C53CdtYeq/froApQGSV5y43bEMWFj2LGOxB96aH1VmvrFA21nD1WTP6nwfFMQqGXuS4jyFQ==",
- "requires": {}
- },
- "vue-router": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz",
- "integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==",
- "requires": {
- "@vue/devtools-api": "^6.5.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "ws": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
- "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
- "requires": {}
- },
- "xml-name-validator": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "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
- }
- }
-}
diff --git a/tools/obscuroscan_v2/frontend/package.json b/tools/obscuroscan_v2/frontend/package.json
deleted file mode 100644
index 0e99f9267b..0000000000
--- a/tools/obscuroscan_v2/frontend/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "frontend",
- "version": "0.0.0",
- "private": true,
- "scripts": {
- "dev": "cp src/lib/config.dev.js src/lib/config.js && vite",
- "build": "vite build",
- "build-prod": "cp src/lib/config.prod.js src/lib/config.js && npm run build",
- "serve-prod": "npm run build-prod && http-server dist/ -a 0.0.0.0 -p 80",
- "preview": "vite preview",
- "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
- "format": "prettier --write src/"
- },
- "dependencies": {
- "@metamask/detect-provider": "^2.0.0",
- "axios": "^1.4.0",
- "element-plus": "^2.3.8",
- "ethers": "^6.6.7",
- "pinia": "^2.1.4",
- "vue": "^3.3.4",
- "vue-json-pretty": "^2.2.4",
- "vue-router": "^4.2.2"
- },
- "devDependencies": {
- "@rushstack/eslint-patch": "^1.2.0",
- "@vitejs/plugin-vue": "^4.2.3",
- "@vue/eslint-config-prettier": "^7.1.0",
- "eslint": "^8.39.0",
- "eslint-plugin-vue": "^9.11.0",
- "prettier": "^2.8.8",
- "vite": "^4.3.9"
- }
-}
diff --git a/tools/obscuroscan_v2/frontend/public/favicon-32x32.png b/tools/obscuroscan_v2/frontend/public/favicon-32x32.png
deleted file mode 100644
index ec512be020..0000000000
Binary files a/tools/obscuroscan_v2/frontend/public/favicon-32x32.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/App.vue b/tools/obscuroscan_v2/frontend/src/App.vue
deleted file mode 100644
index 2466145094..0000000000
--- a/tools/obscuroscan_v2/frontend/src/App.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/assets/base.css b/tools/obscuroscan_v2/frontend/src/assets/base.css
deleted file mode 100644
index d3de42ec96..0000000000
--- a/tools/obscuroscan_v2/frontend/src/assets/base.css
+++ /dev/null
@@ -1,73 +0,0 @@
-/* color palette from */
-:root {
- --vt-c-white: #ffffff;
- --vt-c-white-soft: #f8f8f8;
- --vt-c-white-mute: #f2f2f2;
-
- --vt-c-black: #181818;
- --vt-c-black-soft: #222222;
- --vt-c-black-mute: #282828;
-
- --vt-c-indigo: #2c3e50;
-
- --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
- --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
- --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
- --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
-
- --vt-c-text-light-1: var(--vt-c-indigo);
- --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
- --vt-c-text-dark-1: var(--vt-c-white);
- --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
-}
-
-/* semantic color variables for this project */
-:root {
- --color-background: var(--vt-c-white);
- --color-background-soft: var(--vt-c-white-soft);
- --color-background-mute: var(--vt-c-white-mute);
-
- --color-border: var(--vt-c-divider-light-2);
- --color-border-hover: var(--vt-c-divider-light-1);
-
- --color-heading: var(--vt-c-text-light-1);
- --color-text: var(--vt-c-text-light-1);
-
- --section-gap: 160px;
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --color-background: var(--vt-c-black);
- --color-background-soft: var(--vt-c-black-soft);
- --color-background-mute: var(--vt-c-black-mute);
-
- --color-border: var(--vt-c-divider-dark-2);
- --color-border-hover: var(--vt-c-divider-dark-1);
-
- --color-heading: var(--vt-c-text-dark-1);
- --color-text: var(--vt-c-text-dark-2);
- }
-}
-
-*,
-*::before,
-*::after {
- box-sizing: border-box;
- margin: 0;
- font-weight: normal;
-}
-
-body {
- min-height: 100vh;
- color: var(--color-text);
- background: var(--color-background);
- transition: color 0.5s, background-color 0.5s;
- line-height: 1.6;
- font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
- Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
- font-size: 15px;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/github-mark-white.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/github-mark-white.png
deleted file mode 100644
index 50b8175227..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/github-mark-white.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/github_logo.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/github_logo.png
deleted file mode 100644
index 3a4c6bd02b..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/github_logo.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_contracts.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_contracts.png
deleted file mode 100644
index d22f56f573..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_contracts.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_ethereum.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_ethereum.png
deleted file mode 100644
index c94b2857e9..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_ethereum.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_l1_rollup.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_l1_rollup.png
deleted file mode 100644
index 780575ecdb..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_l1_rollup.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_l2_batch.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_l2_batch.png
deleted file mode 100644
index 780575ecdb..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_l2_batch.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_metamask.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_metamask.png
deleted file mode 100644
index 9696ef127e..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_metamask.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_nodes.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_nodes.png
deleted file mode 100644
index c41d108cfc..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_nodes.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_transactions.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_transactions.png
deleted file mode 100644
index d22f56f573..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/icon_transactions.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/ten.svg b/tools/obscuroscan_v2/frontend/src/assets/imgs/ten.svg
deleted file mode 100644
index 1c51495c5b..0000000000
--- a/tools/obscuroscan_v2/frontend/src/assets/imgs/ten.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-TEN.
-
diff --git a/tools/obscuroscan_v2/frontend/src/assets/imgs/twitter_logo.png b/tools/obscuroscan_v2/frontend/src/assets/imgs/twitter_logo.png
deleted file mode 100644
index 26b539417b..0000000000
Binary files a/tools/obscuroscan_v2/frontend/src/assets/imgs/twitter_logo.png and /dev/null differ
diff --git a/tools/obscuroscan_v2/frontend/src/assets/main.css b/tools/obscuroscan_v2/frontend/src/assets/main.css
deleted file mode 100644
index a2ff76f1c9..0000000000
--- a/tools/obscuroscan_v2/frontend/src/assets/main.css
+++ /dev/null
@@ -1,7 +0,0 @@
-@import './base.css';
-
-#app {
- font-weight: normal;
-}
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/components/BatchDataGrid.vue b/tools/obscuroscan_v2/frontend/src/components/BatchDataGrid.vue
deleted file mode 100644
index 608db99a57..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/BatchDataGrid.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/components/BlocksDataGrid.vue b/tools/obscuroscan_v2/frontend/src/components/BlocksDataGrid.vue
deleted file mode 100644
index 591c28675b..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/BlocksDataGrid.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
- {{ Number(scope.row.blockHeader.number) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/components/BotBarItem.vue b/tools/obscuroscan_v2/frontend/src/components/BotBarItem.vue
deleted file mode 100644
index ef29ff5f85..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/BotBarItem.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
- version: {{ version }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/MetaMaskConnectButton.vue b/tools/obscuroscan_v2/frontend/src/components/MetaMaskConnectButton.vue
deleted file mode 100644
index 4a1bf18ef9..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/MetaMaskConnectButton.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
- Connected!
- Connect with MetaMask
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/PersonalTxsGrid.vue b/tools/obscuroscan_v2/frontend/src/components/PersonalTxsGrid.vue
deleted file mode 100644
index d505cd93eb..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/PersonalTxsGrid.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
- {{ Number(scope.row.blockNumber) }}
-
-
-
-
-
-
- {{ (Number(scope.row.status) === 1) ? "Success" : "Failed" }}
-
-
-
-
- {{ Number(scope.row.gasUsed) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/components/PublicTxDataGrid.vue b/tools/obscuroscan_v2/frontend/src/components/PublicTxDataGrid.vue
deleted file mode 100644
index c0b1fa1b40..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/PublicTxDataGrid.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
- Recent transactions
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/components/RotatingBatchesItem.vue b/tools/obscuroscan_v2/frontend/src/components/RotatingBatchesItem.vue
deleted file mode 100644
index 294cd3355a..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/RotatingBatchesItem.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/RotatingRollupsItem.vue b/tools/obscuroscan_v2/frontend/src/components/RotatingRollupsItem.vue
deleted file mode 100644
index 3ade490d46..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/RotatingRollupsItem.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
- Last Batch: {{ card.LastBatchSeqNo }}
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/SearchBarItem.vue b/tools/obscuroscan_v2/frontend/src/components/SearchBarItem.vue
deleted file mode 100644
index 16159ba87f..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/SearchBarItem.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/SummaryItem.vue b/tools/obscuroscan_v2/frontend/src/components/SummaryItem.vue
deleted file mode 100644
index 3ef5d95734..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/SummaryItem.vue
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
-
-
-
-
-
$ {{ ethPriceUSD }}
-
loading...
-
-
-
-
-
-
- Coming soon
-
-
-
-
-
-
-
-
{{ latestBatch }}
-
loading...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{ totalTransactionCount }}
-
loading...
-
-
-
-
-
-
-
-
{{ totalContractCount }}
-
loading...
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/components/SummaryRollupsListItem.vue b/tools/obscuroscan_v2/frontend/src/components/SummaryRollupsListItem.vue
deleted file mode 100644
index 9f6f4c007b..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/SummaryRollupsListItem.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
- Rollups
-
-
-
-
- Height
-
- No of Txs
- Time
- Batch Hash
-
-
-
-
-
-
-
- Height
-
- No of Txs
- Time
- Batch Hash
-
-
-
-
-
-
-
- Height
-
- No of Txs
- Time
- Batch Hash
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/VerifiedContractsDataGrid.vue b/tools/obscuroscan_v2/frontend/src/components/VerifiedContractsDataGrid.vue
deleted file mode 100644
index e9f03cbafa..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/VerifiedContractsDataGrid.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
- Verified Sequencer Data
-
-
-
-
-
-
-
-
-
- Verified Contracts
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/helper/BatchInfoWindow.vue b/tools/obscuroscan_v2/frontend/src/components/helper/BatchInfoWindow.vue
deleted file mode 100644
index 2589c984f0..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/helper/BatchInfoWindow.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- Decrypt Transactions
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/components/helper/ShortenedHash.vue b/tools/obscuroscan_v2/frontend/src/components/helper/ShortenedHash.vue
deleted file mode 100644
index 87d5092bac..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/helper/ShortenedHash.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- {{ shortenedHash }}
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/components/helper/Timestamp.vue b/tools/obscuroscan_v2/frontend/src/components/helper/Timestamp.vue
deleted file mode 100644
index c40b3fb517..0000000000
--- a/tools/obscuroscan_v2/frontend/src/components/helper/Timestamp.vue
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
- {{ formattedTimestamp }}
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/lib/cachedList.js b/tools/obscuroscan_v2/frontend/src/lib/cachedList.js
deleted file mode 100644
index a6eee42195..0000000000
--- a/tools/obscuroscan_v2/frontend/src/lib/cachedList.js
+++ /dev/null
@@ -1,27 +0,0 @@
-class CachedList {
- constructor() {
- // todo these should just be one storage
- this.items = [];
- this.itemsByHash = {};
- }
-
- add(item) {
- if (!this.items.some(i => i.hash === item.hash)) {
- this.items.push(item);
- }
- }
-
- get() {
- return this.items.slice(-5);
- }
-
- addByHash(item) {
- this.itemsByHash[item.Header.hash] = item
- }
-
- getByHash(hash) {
- return this.itemsByHash[hash]
- }
-}
-
-export default CachedList
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/lib/config.dev.js b/tools/obscuroscan_v2/frontend/src/lib/config.dev.js
deleted file mode 100644
index cf242044b4..0000000000
--- a/tools/obscuroscan_v2/frontend/src/lib/config.dev.js
+++ /dev/null
@@ -1,8 +0,0 @@
-class Config {
- static backendServerAddress = "http://127.0.0.1:43910"
- static pollingInterval = 1000
- static pricePollingInterval = 60*1000 // 1 minute
- static version = "dev"
-}
-
-export default Config
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/lib/config.js b/tools/obscuroscan_v2/frontend/src/lib/config.js
deleted file mode 100644
index cf242044b4..0000000000
--- a/tools/obscuroscan_v2/frontend/src/lib/config.js
+++ /dev/null
@@ -1,8 +0,0 @@
-class Config {
- static backendServerAddress = "http://127.0.0.1:43910"
- static pollingInterval = 1000
- static pricePollingInterval = 60*1000 // 1 minute
- static version = "dev"
-}
-
-export default Config
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/lib/config.prod.js b/tools/obscuroscan_v2/frontend/src/lib/config.prod.js
deleted file mode 100644
index affe11ac2b..0000000000
--- a/tools/obscuroscan_v2/frontend/src/lib/config.prod.js
+++ /dev/null
@@ -1,9 +0,0 @@
-class Config {
- // VITE_APIHOSTADDRESS should be used as an env var at the prod server
- static backendServerAddress = import.meta.env.VITE_APIHOSTADDRESS
- static pollingInterval = 1000
- static pricePollingInterval = 60*1000 // 1 minute
- static version = import.meta.env.VITE_FE_VERSION
-}
-
-export default Config
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/lib/poller.js b/tools/obscuroscan_v2/frontend/src/lib/poller.js
deleted file mode 100644
index 8a758bd94b..0000000000
--- a/tools/obscuroscan_v2/frontend/src/lib/poller.js
+++ /dev/null
@@ -1,25 +0,0 @@
-class Poller {
- constructor(fetchCallback, interval) {
- this.fetchCallback = fetchCallback;
- this.interval = interval;
- this.timer = null;
- }
-
- // Start polling - executes the fetchCallback immediately and every interval thereafter
- start() {
- this.stop(); // Ensure previous intervals are cleared
- this.fetchCallback();
- this.timer = setInterval(async () => {
- await this.fetchCallback();
- }, this.interval);
- }
-
- stop() {
- if (this.timer) {
- clearInterval(this.timer);
- this.timer = null;
- }
- }
-}
-
-export default Poller
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/main.js b/tools/obscuroscan_v2/frontend/src/main.js
deleted file mode 100644
index 26a2f9f48e..0000000000
--- a/tools/obscuroscan_v2/frontend/src/main.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import './assets/main.css'
-
-import { createApp } from 'vue'
-import {createPinia, setActivePinia} from 'pinia'
-import ElementPlus from 'element-plus'
-import 'element-plus/dist/index.css'
-import * as ElementPlusIconsVue from '@element-plus/icons-vue'
-import App from './App.vue'
-import router from './router'
-import Config from "@/lib/config";
-
-const pinia = createPinia()
-const app = createApp(App)
-
-app.use(pinia)
-setActivePinia(pinia)
-
-for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
- app.component(key, component)
-}
-
-app.use(ElementPlus)
-app.config.globalProperties.RunConfig =new Config()
-app.use(router)
-
-
-app.mount('#app')
diff --git a/tools/obscuroscan_v2/frontend/src/router/index.js b/tools/obscuroscan_v2/frontend/src/router/index.js
deleted file mode 100644
index f9830e81fc..0000000000
--- a/tools/obscuroscan_v2/frontend/src/router/index.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import { createRouter, createWebHistory } from 'vue-router'
-import HomeView from '../views/HomeView.vue'
-
-const router = createRouter({
- history: createWebHistory(import.meta.env.BASE_URL),
- routes: [
- {
- path: '/',
- name: 'home',
- component: HomeView
- },
- {
- path: '/personal',
- name: 'personal',
- component: () => import('../views/PersonalView.vue')
- },
- {
- path: '/transactions',
- name: 'transactions',
- component: () => import('../views/TransactionsView.vue')
- },
- {
- path: '/batches',
- name: 'batches',
- component: () => import('../views/BatchesView.vue')
- },
- {
- path: '/blocks',
- name: 'blocks',
- component: () => import('../views/BlocksView.vue')
- },
- {
- path: '/decrypt',
- name: 'decrypt',
- component: () => import('../views/DecryptView.vue')
- },
- {
- path: '/verified',
- name: 'verifiedData',
- component: () => import('../views/VerifiedData.vue')
- }
- ]
-})
-
-export default router
diff --git a/tools/obscuroscan_v2/frontend/src/stores/batchStore.js b/tools/obscuroscan_v2/frontend/src/stores/batchStore.js
deleted file mode 100644
index bb3535ec46..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/batchStore.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import { defineStore } from 'pinia';
-import Config from "@/lib/config";
-import CachedList from "@/lib/cachedList";
-import Poller from "@/lib/poller";
-
-export const useBatchStore = defineStore({
- id: 'batchStore',
- state: () => ({
- latestBatch: null,
- latestL1Proof: null,
-
- batchListing: null,
- batchListingCount: null,
- offset: 0,
- size: 10,
-
- batches: new CachedList(),
- poller: new Poller(() => {
- const store = useBatchStore();
- store.fetch();
- }, Config.pollingInterval)
- }),
- actions: {
- async fetch() {
- try {
- // fetch the latest batch
- const response = await fetch( Config.backendServerAddress+'/items/batch/latest/');
- const data = await response.json();
- this.latestBatch = data.item.number;
- this.latestL1Proof = data.item.l1Proof;
-
- this.batches.add(data.item);
-
- // fetch data listing
- const responseList = await fetch( Config.backendServerAddress+`/items/batches/?offset=${this.offset}&size=${this.size}`);
- const dataList = await responseList.json();
- this.batchListing = dataList.result.BatchesData;
- this.batchListingCount = dataList.result.Total;
-
- } catch (error) {
- console.error("Failed to fetch count:", error);
- }
- },
-
- startPolling() {
- this.poller.start();
- },
-
- stopPolling() {
- this.poller.stop();
- },
-
- async getByHash(hash) {
- let batch = this.batches.getByHash(hash)
- if (batch) {
- return batch
- }
-
- const response = await fetch( Config.backendServerAddress+`/items/batch/${hash}`);
- const data = await response.json();
- this.batches.addByHash(data.item);
-
- return this.batches.getByHash(hash)
- }
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/blockStore.js b/tools/obscuroscan_v2/frontend/src/stores/blockStore.js
deleted file mode 100644
index 78f1fae4ca..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/blockStore.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import { defineStore } from 'pinia';
-import Config from "@/lib/config";
-import Poller from "@/lib/poller";
-
-
-export const useBlockStore = defineStore({
- id: 'blockStore',
- state: () => ({
- blocksListing: null,
- blocksListingCount: null,
- offset: 0,
- size: 10,
-
- poller: new Poller(() => {
- const store = useBlockStore();
- store.fetch();
- }, Config.pollingInterval)
- }),
- actions: {
- async fetch() {
- this.loading = true;
- try {
- // fetch data listing
- const responseList = await fetch( Config.backendServerAddress+`/items/blocks/?offset=${this.offset}&size=${this.size}`);
- const dataList = await responseList.json();
- this.blocksListing = dataList.result.BlocksData;
- this.blocksListingCount = dataList.result.Total;
- } catch (error) {
- console.error("Failed to fetch count:", error);
- }
- },
-
- startPolling() {
- this.poller.start();
- },
-
- stopPolling() {
- this.poller.stop();
- }
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/counterStore.js b/tools/obscuroscan_v2/frontend/src/stores/counterStore.js
deleted file mode 100644
index 3df8057abe..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/counterStore.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import { defineStore } from 'pinia';
-import Config from "@/lib/config";
-import Poller from "@/lib/poller";
-
-export const useCounterStore = defineStore({
- id: 'counterStore',
- state: () => ({
- totalContractCount: 0,
- totalTransactionCount:0,
- poller: new Poller(() => {
- const store = useCounterStore();
- store.fetch();
- }, Config.pollingInterval)
- }),
- actions: {
- async fetch() {
- try {
- const totContractResp = await fetch( Config.backendServerAddress+'/count/contracts/');
- const totContractData = await totContractResp.json();
- this.totalContractCount = totContractData.count;
-
- const totTxResp = await fetch( Config.backendServerAddress+'/count/transactions/');
- const totTxData = await totTxResp.json();
- this.totalTransactionCount = totTxData.count;
- } catch (error) {
- console.error("Failed to fetch count:", error);
- }
- },
-
- startPolling() {
- this.poller.start();
- },
-
- stopPolling() {
- this.poller.stop();
- }
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/personalDataStore.js b/tools/obscuroscan_v2/frontend/src/stores/personalDataStore.js
deleted file mode 100644
index a380126e64..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/personalDataStore.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import { defineStore } from 'pinia';
-import Config from "@/lib/config";
-import {useWalletStore} from "@/stores/walletStore";
-import Poller from "@/lib/poller";
-
-export const usePersonalDataStore = defineStore({
- id: 'personalDataStore',
- state: () => ({
- walletStarted: false,
- personalTransactionList: null,
- personalTransactionCount: null,
- offset: 0,
- size: 10,
- poller: new Poller(() => {
- const store = usePersonalDataStore();
- store.fetch();
- }, Config.pollingInterval)
- }),
- actions: {
- async fetch() {
- try {
- const walletStore = useWalletStore()
- if (walletStore.provider == null) {
- return
- }
-
- console.log(this.address)
- const requestPayload = {
- "address": walletStore.address,
- "pagination": {"offset": this.offset, "size": this.size},
- }
- const personalTxData = await walletStore.provider.send('eth_getStorageAt', ["listPersonalTransactions", requestPayload, null])
- this.personalTransactionList = personalTxData.result.Receipts;
- this.personalTransactionCount = personalTxData.result.Total;
- } catch (error) {
- console.error("Failed to fetch count:", error);
- }
- },
-
- startPolling() {
- this.poller.start();
- },
-
- stopPolling() {
- this.poller.stop();
- }
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/priceStore.js b/tools/obscuroscan_v2/frontend/src/stores/priceStore.js
deleted file mode 100644
index 60c07a7dc3..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/priceStore.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import { defineStore } from 'pinia';
-import Config from "@/lib/config";
-import Poller from "@/lib/poller";
-
-export const usePriceStore = defineStore({
- id: 'priceStore',
- state: () => ({
- ethPriceUSD: null,
- poller: new Poller(() => {
- const store = usePriceStore();
- store.fetch();
- }, Config.pricePollingInterval)
- }),
- actions: {
- async fetch() {
- try {
- const response = await fetch( 'https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd');
- const data = await response.json();
- this.ethPriceUSD = data.ethereum.usd;
-
- console.log("Fetched " + this.ethPriceUSD);
- } catch (error) {
- console.error("Failed to fetch count:", error);
- }
- },
-
- startPolling() {
- this.poller.start();
- },
-
- stopPolling() {
- this.poller.stop();
- }
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/publicTxDataStore.js b/tools/obscuroscan_v2/frontend/src/stores/publicTxDataStore.js
deleted file mode 100644
index a9ddb0b9fe..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/publicTxDataStore.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import {defineStore} from 'pinia';
-import Config from "@/lib/config";
-import Poller from "@/lib/poller";
-
-export const usePublicDataStore = defineStore({
- id: 'publicDataStore',
- state: () => ({
- publicTransactionsData: null,
- publicTransactionsCount: null,
- offset: 0,
- size: 10,
- poller: new Poller(() => {
- const store = usePublicDataStore();
- store.fetch();
- }, Config.pollingInterval)
- }),
- actions: {
- async fetch() {
- try {
- const response = await fetch( Config.backendServerAddress+`/items/transactions/?offset=${this.offset}&size=${this.size}`);
-
- const data = await response.json();
- this.publicTransactionsData = data.result.TransactionsData;
- this.publicTransactionsCount = data.result.Total;
- } catch (error) {
- console.error("Failed to fetch count:", error);
- }
- },
-
- startPolling() {
- this.poller.start();
- },
-
- stopPolling() {
- this.poller.stop();
- }
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/rollupStore.js b/tools/obscuroscan_v2/frontend/src/stores/rollupStore.js
deleted file mode 100644
index 02e9b65928..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/rollupStore.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { defineStore } from 'pinia';
-import Config from "@/lib/config";
-import CachedList from "@/lib/cachedList";
-import Poller from "@/lib/poller";
-
-
-export const useRollupStore = defineStore({
- id: 'rollupStore',
- state: () => ({
- rollups: new CachedList(),
- poller: new Poller(() => {
- const store = useRollupStore();
- store.fetch();
- }, Config.pollingInterval)
- }),
- actions: {
- async fetch() {
- this.loading = true;
- try {
- const response = await fetch( Config.backendServerAddress+'/items/rollup/latest/');
- const data = await response.json();
- this.rollups.add(data.item);
- } catch (error) {
- console.error("Failed to fetch count:", error);
- }
- },
-
- startPolling() {
- this.poller.start();
- },
-
- stopPolling() {
- this.poller.stop();
- }
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/verifiedContractStore.js b/tools/obscuroscan_v2/frontend/src/stores/verifiedContractStore.js
deleted file mode 100644
index 5a32ca02b4..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/verifiedContractStore.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import {defineStore} from 'pinia';
-import Config from "@/lib/config";
-
-export const useVerifiedContractStore = defineStore({
- id: 'VerifiedContractStore',
- state: () => ({
- contracts: null,
- sequencerData: null
- }),
- actions: {
- async update() {
- try {
- const response = await fetch( Config.backendServerAddress+`/info/obscuro/`);
-
- const data = await response.json();
- this.contracts =
- [
- {
- "name": "Management Contract",
- "address": data.item.ManagementContractAddress,
- "confirmed": true
- },
- {
- "name": "Message Bus Contract",
- "address": data.item.MessageBusAddress,
- "confirmed": true
- }
- ];
- this.sequencerData = [
- {
- "name": "Sequencer ID",
- "address": data.item.SequencerID,
- "confirmed": true,
- },
- {
- "name": "L1 Start Hash",
- "address": data.item.L1StartHash,
- "confirmed": true,
- }
- ]
- } catch (error) {
- console.error("Failed to fetch item:", error);
- }
- },
- },
-});
diff --git a/tools/obscuroscan_v2/frontend/src/stores/walletStore.js b/tools/obscuroscan_v2/frontend/src/stores/walletStore.js
deleted file mode 100644
index 0d58cbb976..0000000000
--- a/tools/obscuroscan_v2/frontend/src/stores/walletStore.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { defineStore } from 'pinia';
-
-export const useWalletStore = defineStore({
- id: 'wallet',
- state: () => ({
- provider: null,
- address: null
- }),
- actions: {
- setProvider(provider) {
- this.provider = provider;
- },
- setAddress(address) {
- this.address = address;
- }
- }
-});
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/views/AboutView.vue b/tools/obscuroscan_v2/frontend/src/views/AboutView.vue
deleted file mode 100644
index 756ad2a179..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/AboutView.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
This is an about page
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/views/BatchesView.vue b/tools/obscuroscan_v2/frontend/src/views/BatchesView.vue
deleted file mode 100644
index 8b2d4764d7..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/BatchesView.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
- Batches
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/views/BlocksView.vue b/tools/obscuroscan_v2/frontend/src/views/BlocksView.vue
deleted file mode 100644
index 021a183d23..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/BlocksView.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
- Blocks
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/views/DecryptView.vue b/tools/obscuroscan_v2/frontend/src/views/DecryptView.vue
deleted file mode 100644
index 6b69249b5c..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/DecryptView.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
- Static Keys
-
-
- Decrypting transaction blobs is only possible on testnet, where the rollup encryption key is long-lived and well-known.
- On mainnet, rollups will use rotating keys that are not known to anyone - or anything - other than the Obscuro enclaves.
-
-
- Current Static Encryption Key: bddbc0d46a0666ce57a466168d99c1830b0c65e052d77188f2cbfc3f6486588c
-
-
-
-
- Encrypted Rollup
-
-
-
- Decrypt
- {{ error }}
-
- Decrypted Rollup
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/frontend/src/views/HomeView.vue b/tools/obscuroscan_v2/frontend/src/views/HomeView.vue
deleted file mode 100644
index 29f9dc2903..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/HomeView.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/views/NavbarView.vue b/tools/obscuroscan_v2/frontend/src/views/NavbarView.vue
deleted file mode 100644
index 99ee079803..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/NavbarView.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- Home
-
- Personal
-
-
- Blockchain
-
-
-
- Transactions
-
- Batches
-
- Blocks
-
-
-
-
-
-
- Resources
-
-
-
- Decrypt
-
- Verified Data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/views/PersonalView.vue b/tools/obscuroscan_v2/frontend/src/views/PersonalView.vue
deleted file mode 100644
index 5a31bfca7e..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/PersonalView.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- Personal Transactions
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/views/TransactionsView.vue b/tools/obscuroscan_v2/frontend/src/views/TransactionsView.vue
deleted file mode 100644
index efd7042198..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/TransactionsView.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
- Transactions
-
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/src/views/VerifiedData.vue b/tools/obscuroscan_v2/frontend/src/views/VerifiedData.vue
deleted file mode 100644
index 9b11d4eacc..0000000000
--- a/tools/obscuroscan_v2/frontend/src/views/VerifiedData.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- Official Verified Data
-
-
-
-
-
-
-
-
diff --git a/tools/obscuroscan_v2/frontend/vite.config.js b/tools/obscuroscan_v2/frontend/vite.config.js
deleted file mode 100644
index ed7848aca9..0000000000
--- a/tools/obscuroscan_v2/frontend/vite.config.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { fileURLToPath, URL } from 'node:url'
-
-import { defineConfig } from 'vite'
-import vue from '@vitejs/plugin-vue'
-
-// https://vitejs.dev/config/
-export default defineConfig({
- plugins: [
- vue(),
- ],
- resolve: {
- alias: {
- '@': fileURLToPath(new URL('./src', import.meta.url))
- }
- }
-})
-
-
diff --git a/tools/obscuroscan_v3/frontend/Dockerfile b/tools/obscuroscan_v3/frontend/Dockerfile
deleted file mode 100644
index 9f69ba44f0..0000000000
--- a/tools/obscuroscan_v3/frontend/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM node:18-buster as runner
-# setup container data structure
-RUN mkdir -p /home/obscuro/go-obscuro/tools/obscuroscan_v3/
-COPY ./tools/obscuroscan_v3/frontend /home/obscuro/go-obscuro/tools/obscuroscan_v3/frontend
-
-WORKDIR /home/obscuro/go-obscuro/tools/obscuroscan_v3/frontend
-RUN npm install
-
-EXPOSE 80
\ No newline at end of file
diff --git a/tools/obscuroscan_v3/frontend/public/favicon.ico b/tools/obscuroscan_v3/frontend/public/favicon.ico
deleted file mode 100644
index 1bb8f324a1..0000000000
Binary files a/tools/obscuroscan_v3/frontend/public/favicon.ico and /dev/null differ
diff --git a/tools/obscuroscan_v2/backend/Dockerfile b/tools/tenscan/backend/Dockerfile
similarity index 79%
rename from tools/obscuroscan_v2/backend/Dockerfile
rename to tools/tenscan/backend/Dockerfile
index 4d5424bc08..b408494f0e 100644
--- a/tools/obscuroscan_v2/backend/Dockerfile
+++ b/tools/tenscan/backend/Dockerfile
@@ -15,9 +15,9 @@ FROM get-dependencies as build
COPY . /home/obscuro/go-obscuro
# build exec
-WORKDIR /home/obscuro/go-obscuro/tools/obscuroscan_v2/backend/cmd
+WORKDIR /home/obscuro/go-obscuro/tools/tenscan/backend/cmd
RUN --mount=type=cache,target=/root/.cache/go-build \
go build -o backend
-WORKDIR /home/obscuro/go-obscuro/tools/obscuroscan_v2/backend
+WORKDIR /home/obscuro/go-obscuro/tools/tenscan/backend
EXPOSE 80
\ No newline at end of file
diff --git a/tools/obscuroscan_v2/backend/cmd/cli.go b/tools/tenscan/backend/cmd/cli.go
similarity index 77%
rename from tools/obscuroscan_v2/backend/cmd/cli.go
rename to tools/tenscan/backend/cmd/cli.go
index 2adcc1ca68..fe51f124c8 100644
--- a/tools/obscuroscan_v2/backend/cmd/cli.go
+++ b/tools/tenscan/backend/cmd/cli.go
@@ -3,14 +3,14 @@ package main
import (
"flag"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend/config"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend/config"
)
func parseCLIArgs() *config.Config {
defaultConfig := &config.Config{
NodeHostAddress: "http://erpc.dev-testnet.obscu.ro:80",
ServerAddress: "0.0.0.0:80",
- LogPath: "obscuroscan_logs.txt",
+ LogPath: "tenscan_logs.txt",
}
nodeHostAddress := flag.String(nodeHostAddressName, defaultConfig.NodeHostAddress, nodeHostAddressUsage)
@@ -31,8 +31,8 @@ const (
nodeHostAddressUsage = "The Obscuro Host Node address"
serverAddressName = "serverAddress"
- serverAddressUsage = "The address to serve Obscuroscan on"
+ serverAddressUsage = "The address to serve tenscan on"
logPathName = "logPath"
- logPathUsage = "The path to use for Obscuroscan's log file"
+ logPathUsage = "The path to use for tenscan's log file"
)
diff --git a/tools/obscuroscan_v2/backend/cmd/main.go b/tools/tenscan/backend/cmd/main.go
similarity index 77%
rename from tools/obscuroscan_v2/backend/cmd/main.go
rename to tools/tenscan/backend/cmd/main.go
index 7abddadab9..a90f15f4e3 100644
--- a/tools/obscuroscan_v2/backend/cmd/main.go
+++ b/tools/tenscan/backend/cmd/main.go
@@ -8,17 +8,17 @@ import (
"os/signal"
"time"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend/container"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend/container"
)
func main() {
cliConfig := parseCLIArgs()
- obsScanContainer, err := container.NewObscuroScanContainer(cliConfig)
+ tenScanContainer, err := container.NewTenScanContainer(cliConfig)
if err != nil {
panic(err)
}
- err = obsScanContainer.Start()
+ err = tenScanContainer.Start()
if err != nil {
panic(err)
}
@@ -43,7 +43,7 @@ func main() {
os.Exit(1)
}()
- err = obsScanContainer.Stop()
+ err = tenScanContainer.Stop()
if err != nil {
fmt.Printf("failed to stop gracefully - %s\n", err)
os.Exit(1)
diff --git a/tools/obscuroscan_v2/backend/config/config.go b/tools/tenscan/backend/config/config.go
similarity index 100%
rename from tools/obscuroscan_v2/backend/config/config.go
rename to tools/tenscan/backend/config/config.go
diff --git a/tools/obscuroscan_v2/backend/container/container.go b/tools/tenscan/backend/container/container.go
similarity index 60%
rename from tools/obscuroscan_v2/backend/container/container.go
rename to tools/tenscan/backend/container/container.go
index 7aeac74be0..1e6bfab7e1 100644
--- a/tools/obscuroscan_v2/backend/container/container.go
+++ b/tools/tenscan/backend/container/container.go
@@ -3,22 +3,22 @@ package container
import (
"fmt"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend/config"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend/webserver"
+
+ gethlog "github.com/ethereum/go-ethereum/log"
"github.com/ten-protocol/go-ten/go/common/log"
"github.com/ten-protocol/go-ten/go/obsclient"
"github.com/ten-protocol/go-ten/go/rpc"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend/config"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend/webserver"
-
- gethlog "github.com/ethereum/go-ethereum/log"
)
-type ObscuroScanContainer struct {
+type TenScanContainer struct {
backend *backend.Backend
webServer *webserver.WebServer
}
-func NewObscuroScanContainer(config *config.Config) (*ObscuroScanContainer, error) {
+func NewTenScanContainer(config *config.Config) (*TenScanContainer, error) {
client, err := rpc.NewNetworkClient(config.NodeHostAddress)
if err != nil {
return nil, fmt.Errorf("unable to connect to the obscuro node - %w", err)
@@ -27,20 +27,20 @@ func NewObscuroScanContainer(config *config.Config) (*ObscuroScanContainer, erro
obsClient := obsclient.NewObsClient(client)
scanBackend := backend.NewBackend(obsClient)
- logger := log.New(log.ObscuroscanCmp, int(gethlog.LvlInfo), config.LogPath)
+ logger := log.New(log.TenscanCmp, int(gethlog.LvlInfo), config.LogPath)
webServer := webserver.New(scanBackend, config.ServerAddress, logger)
logger.Info("Created Obscuro Scan with the following: ", "args", config)
- return &ObscuroScanContainer{
+ return &TenScanContainer{
backend: backend.NewBackend(obsClient),
webServer: webServer,
}, nil
}
-func (c *ObscuroScanContainer) Start() error {
+func (c *TenScanContainer) Start() error {
return c.webServer.Start()
}
-func (c *ObscuroScanContainer) Stop() error {
+func (c *TenScanContainer) Stop() error {
return c.webServer.Stop()
}
diff --git a/tools/obscuroscan_v2/backend/obscuroscan_backend.go b/tools/tenscan/backend/obscuroscan_backend.go
similarity index 100%
rename from tools/obscuroscan_v2/backend/obscuroscan_backend.go
rename to tools/tenscan/backend/obscuroscan_backend.go
diff --git a/tools/obscuroscan_v2/backend/webserver/webserver.go b/tools/tenscan/backend/webserver/webserver.go
similarity index 97%
rename from tools/obscuroscan_v2/backend/webserver/webserver.go
rename to tools/tenscan/backend/webserver/webserver.go
index 627c3e774b..871cf47901 100644
--- a/tools/obscuroscan_v2/backend/webserver/webserver.go
+++ b/tools/tenscan/backend/webserver/webserver.go
@@ -7,10 +7,11 @@ import (
"net/http"
"time"
+ "github.com/ten-protocol/go-ten/tools/tenscan/backend"
+
"github.com/ethereum/go-ethereum/log"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
- "github.com/ten-protocol/go-ten/tools/obscuroscan_v2/backend"
)
type WebServer struct {
diff --git a/tools/obscuroscan_v2/backend/webserver/webserver_routes_counts.go b/tools/tenscan/backend/webserver/webserver_routes_counts.go
similarity index 100%
rename from tools/obscuroscan_v2/backend/webserver/webserver_routes_counts.go
rename to tools/tenscan/backend/webserver/webserver_routes_counts.go
diff --git a/tools/obscuroscan_v2/backend/webserver/webserver_routes_items.go b/tools/tenscan/backend/webserver/webserver_routes_items.go
similarity index 100%
rename from tools/obscuroscan_v2/backend/webserver/webserver_routes_items.go
rename to tools/tenscan/backend/webserver/webserver_routes_items.go
diff --git a/tools/obscuroscan_v3/frontend/.eslintrc.json b/tools/tenscan/frontend/.eslintrc.json
similarity index 100%
rename from tools/obscuroscan_v3/frontend/.eslintrc.json
rename to tools/tenscan/frontend/.eslintrc.json
diff --git a/tools/obscuroscan_v3/frontend/.gitignore b/tools/tenscan/frontend/.gitignore
similarity index 100%
rename from tools/obscuroscan_v3/frontend/.gitignore
rename to tools/tenscan/frontend/.gitignore
diff --git a/tools/tenscan/frontend/Dockerfile b/tools/tenscan/frontend/Dockerfile
new file mode 100644
index 0000000000..3e3b16a02f
--- /dev/null
+++ b/tools/tenscan/frontend/Dockerfile
@@ -0,0 +1,9 @@
+FROM node:18-buster as runner
+# setup container data structure
+RUN mkdir -p /home/obscuro/go-obscuro/tools/tenscan/
+COPY ./tools/tenscan/frontend /home/obscuro/go-obscuro/tools/tenscan/frontend
+
+WORKDIR /home/obscuro/go-obscuro/tools/tenscan/frontend
+RUN npm install
+
+EXPOSE 80
\ No newline at end of file
diff --git a/tools/obscuroscan_v3/frontend/README.md b/tools/tenscan/frontend/README.md
similarity index 98%
rename from tools/obscuroscan_v3/frontend/README.md
rename to tools/tenscan/frontend/README.md
index 8132b6eaa9..cd81dea65d 100644
--- a/tools/obscuroscan_v3/frontend/README.md
+++ b/tools/tenscan/frontend/README.md
@@ -24,7 +24,7 @@ Tenscan is a Next.js and Tailwind CSS-powered application that serves as a Block
1. **Clone the Repository:**
```bash
git clone https://github.com/ten-protocol/go-ten.git
- cd go-ten/tools/obscuroscan_v3/frontend
+ cd go-ten/tools/tenscan/frontend
```
2. **Install Dependencies:**
diff --git a/tools/obscuroscan_v3/frontend/api/batches.ts b/tools/tenscan/frontend/api/batches.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/api/batches.ts
rename to tools/tenscan/frontend/api/batches.ts
diff --git a/tools/obscuroscan_v3/frontend/api/blocks.ts b/tools/tenscan/frontend/api/blocks.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/api/blocks.ts
rename to tools/tenscan/frontend/api/blocks.ts
diff --git a/tools/obscuroscan_v3/frontend/api/contracts.ts b/tools/tenscan/frontend/api/contracts.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/api/contracts.ts
rename to tools/tenscan/frontend/api/contracts.ts
diff --git a/tools/obscuroscan_v3/frontend/api/index.ts b/tools/tenscan/frontend/api/index.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/api/index.ts
rename to tools/tenscan/frontend/api/index.ts
diff --git a/tools/obscuroscan_v3/frontend/api/rollups.ts b/tools/tenscan/frontend/api/rollups.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/api/rollups.ts
rename to tools/tenscan/frontend/api/rollups.ts
diff --git a/tools/obscuroscan_v3/frontend/api/transactions.ts b/tools/tenscan/frontend/api/transactions.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/api/transactions.ts
rename to tools/tenscan/frontend/api/transactions.ts
diff --git a/tools/obscuroscan_v3/frontend/components.json b/tools/tenscan/frontend/components.json
similarity index 100%
rename from tools/obscuroscan_v3/frontend/components.json
rename to tools/tenscan/frontend/components.json
diff --git a/tools/obscuroscan_v3/frontend/env.example b/tools/tenscan/frontend/env.example
similarity index 100%
rename from tools/obscuroscan_v3/frontend/env.example
rename to tools/tenscan/frontend/env.example
diff --git a/tools/obscuroscan_v3/frontend/next.config.js b/tools/tenscan/frontend/next.config.js
similarity index 100%
rename from tools/obscuroscan_v3/frontend/next.config.js
rename to tools/tenscan/frontend/next.config.js
diff --git a/tools/obscuroscan_v3/frontend/package-lock.json b/tools/tenscan/frontend/package-lock.json
similarity index 100%
rename from tools/obscuroscan_v3/frontend/package-lock.json
rename to tools/tenscan/frontend/package-lock.json
diff --git a/tools/obscuroscan_v3/frontend/package.json b/tools/tenscan/frontend/package.json
similarity index 100%
rename from tools/obscuroscan_v3/frontend/package.json
rename to tools/tenscan/frontend/package.json
diff --git a/tools/obscuroscan_v3/frontend/pages/404.tsx b/tools/tenscan/frontend/pages/404.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/404.tsx
rename to tools/tenscan/frontend/pages/404.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/500.tsx b/tools/tenscan/frontend/pages/500.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/500.tsx
rename to tools/tenscan/frontend/pages/500.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/_app.tsx b/tools/tenscan/frontend/pages/_app.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/_app.tsx
rename to tools/tenscan/frontend/pages/_app.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/_document.tsx b/tools/tenscan/frontend/pages/_document.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/_document.tsx
rename to tools/tenscan/frontend/pages/_document.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/_error.tsx b/tools/tenscan/frontend/pages/_error.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/_error.tsx
rename to tools/tenscan/frontend/pages/_error.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/address/[address].tsx b/tools/tenscan/frontend/pages/address/[address].tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/address/[address].tsx
rename to tools/tenscan/frontend/pages/address/[address].tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/batches/[hash].tsx b/tools/tenscan/frontend/pages/batches/[hash].tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/batches/[hash].tsx
rename to tools/tenscan/frontend/pages/batches/[hash].tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/batches/index.tsx b/tools/tenscan/frontend/pages/batches/index.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/batches/index.tsx
rename to tools/tenscan/frontend/pages/batches/index.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/blocks/index.tsx b/tools/tenscan/frontend/pages/blocks/index.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/blocks/index.tsx
rename to tools/tenscan/frontend/pages/blocks/index.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/docs/[id].tsx b/tools/tenscan/frontend/pages/docs/[id].tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/docs/[id].tsx
rename to tools/tenscan/frontend/pages/docs/[id].tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/index.tsx b/tools/tenscan/frontend/pages/index.tsx
similarity index 89%
rename from tools/obscuroscan_v3/frontend/pages/index.tsx
rename to tools/tenscan/frontend/pages/index.tsx
index 2fde5d1991..c45044fb82 100644
--- a/tools/obscuroscan_v3/frontend/pages/index.tsx
+++ b/tools/tenscan/frontend/pages/index.tsx
@@ -5,7 +5,7 @@ import Dashboard from "@/src/components/modules/dashboard";
export const metadata: Metadata = {
title: "Dashboard",
- description: "Obscuroscan Dashboard",
+ description: "Tenscan Dashboard",
};
export default function DashboardPage() {
diff --git a/tools/obscuroscan_v3/frontend/pages/personal/index.tsx b/tools/tenscan/frontend/pages/personal/index.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/personal/index.tsx
rename to tools/tenscan/frontend/pages/personal/index.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/resources/decrypt.tsx b/tools/tenscan/frontend/pages/resources/decrypt.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/resources/decrypt.tsx
rename to tools/tenscan/frontend/pages/resources/decrypt.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/resources/verified-data.tsx b/tools/tenscan/frontend/pages/resources/verified-data.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/resources/verified-data.tsx
rename to tools/tenscan/frontend/pages/resources/verified-data.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/transactions/index.tsx b/tools/tenscan/frontend/pages/transactions/index.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/transactions/index.tsx
rename to tools/tenscan/frontend/pages/transactions/index.tsx
diff --git a/tools/obscuroscan_v3/frontend/pages/tx/[hash].tsx b/tools/tenscan/frontend/pages/tx/[hash].tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/pages/tx/[hash].tsx
rename to tools/tenscan/frontend/pages/tx/[hash].tsx
diff --git a/tools/obscuroscan_v3/frontend/postcss.config.js b/tools/tenscan/frontend/postcss.config.js
similarity index 100%
rename from tools/obscuroscan_v3/frontend/postcss.config.js
rename to tools/tenscan/frontend/postcss.config.js
diff --git a/tools/obscuroscan_v3/frontend/public/assets/images/clock.png b/tools/tenscan/frontend/public/assets/images/clock.png
similarity index 100%
rename from tools/obscuroscan_v3/frontend/public/assets/images/clock.png
rename to tools/tenscan/frontend/public/assets/images/clock.png
diff --git a/tools/obscuroscan_v3/frontend/public/assets/images/ten.svg b/tools/tenscan/frontend/public/assets/images/ten.svg
similarity index 100%
rename from tools/obscuroscan_v3/frontend/public/assets/images/ten.svg
rename to tools/tenscan/frontend/public/assets/images/ten.svg
diff --git a/tools/obscuroscan_v3/frontend/public/docs/privacy.json b/tools/tenscan/frontend/public/docs/privacy.json
similarity index 100%
rename from tools/obscuroscan_v3/frontend/public/docs/privacy.json
rename to tools/tenscan/frontend/public/docs/privacy.json
diff --git a/tools/obscuroscan_v3/frontend/public/docs/terms.json b/tools/tenscan/frontend/public/docs/terms.json
similarity index 100%
rename from tools/obscuroscan_v3/frontend/public/docs/terms.json
rename to tools/tenscan/frontend/public/docs/terms.json
diff --git a/tools/obscuroscan_v2/frontend/public/favicon.ico b/tools/tenscan/frontend/public/favicon.ico
similarity index 100%
rename from tools/obscuroscan_v2/frontend/public/favicon.ico
rename to tools/tenscan/frontend/public/favicon.ico
diff --git a/tools/obscuroscan_v3/frontend/public/next.svg b/tools/tenscan/frontend/public/next.svg
similarity index 100%
rename from tools/obscuroscan_v3/frontend/public/next.svg
rename to tools/tenscan/frontend/public/next.svg
diff --git a/tools/obscuroscan_v3/frontend/public/vercel.svg b/tools/tenscan/frontend/public/vercel.svg
similarity index 100%
rename from tools/obscuroscan_v3/frontend/public/vercel.svg
rename to tools/tenscan/frontend/public/vercel.svg
diff --git a/tools/obscuroscan_v3/frontend/src/components/date-range-picker.tsx b/tools/tenscan/frontend/src/components/date-range-picker.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/date-range-picker.tsx
rename to tools/tenscan/frontend/src/components/date-range-picker.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/head-seo.tsx b/tools/tenscan/frontend/src/components/head-seo.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/head-seo.tsx
rename to tools/tenscan/frontend/src/components/head-seo.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/layouts/default-layout.tsx b/tools/tenscan/frontend/src/components/layouts/default-layout.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/layouts/default-layout.tsx
rename to tools/tenscan/frontend/src/components/layouts/default-layout.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/layouts/footer.tsx b/tools/tenscan/frontend/src/components/layouts/footer.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/layouts/footer.tsx
rename to tools/tenscan/frontend/src/components/layouts/footer.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/layouts/header.tsx b/tools/tenscan/frontend/src/components/layouts/header.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/layouts/header.tsx
rename to tools/tenscan/frontend/src/components/layouts/header.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/main-nav.tsx b/tools/tenscan/frontend/src/components/main-nav.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/main-nav.tsx
rename to tools/tenscan/frontend/src/components/main-nav.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/mode-toggle.tsx b/tools/tenscan/frontend/src/components/mode-toggle.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/mode-toggle.tsx
rename to tools/tenscan/frontend/src/components/mode-toggle.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/batches/batch-details.tsx b/tools/tenscan/frontend/src/components/modules/batches/batch-details.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/batches/batch-details.tsx
rename to tools/tenscan/frontend/src/components/modules/batches/batch-details.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/batches/columns.tsx b/tools/tenscan/frontend/src/components/modules/batches/columns.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/batches/columns.tsx
rename to tools/tenscan/frontend/src/components/modules/batches/columns.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/batches/constants.tsx b/tools/tenscan/frontend/src/components/modules/batches/constants.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/batches/constants.tsx
rename to tools/tenscan/frontend/src/components/modules/batches/constants.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/blocks/columns.tsx b/tools/tenscan/frontend/src/components/modules/blocks/columns.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/blocks/columns.tsx
rename to tools/tenscan/frontend/src/components/modules/blocks/columns.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/blocks/constants.tsx b/tools/tenscan/frontend/src/components/modules/blocks/constants.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/blocks/constants.tsx
rename to tools/tenscan/frontend/src/components/modules/blocks/constants.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/connect-wallet.tsx b/tools/tenscan/frontend/src/components/modules/common/connect-wallet.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/connect-wallet.tsx
rename to tools/tenscan/frontend/src/components/modules/common/connect-wallet.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/copy.tsx b/tools/tenscan/frontend/src/components/modules/common/copy.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/copy.tsx
rename to tools/tenscan/frontend/src/components/modules/common/copy.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-column-header.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/data-table-column-header.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-column-header.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/data-table-column-header.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-faceted-filter.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/data-table-faceted-filter.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-faceted-filter.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/data-table-faceted-filter.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-pagination.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/data-table-pagination.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-pagination.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/data-table-pagination.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-row-actions.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/data-table-row-actions.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-row-actions.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/data-table-row-actions.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-toolbar.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/data-table-toolbar.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-toolbar.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/data-table-toolbar.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-view-options.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/data-table-view-options.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-view-options.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/data-table-view-options.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/data-table.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/data-table.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/skeleton-loader.tsx b/tools/tenscan/frontend/src/components/modules/common/data-table/skeleton-loader.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/skeleton-loader.tsx
rename to tools/tenscan/frontend/src/components/modules/common/data-table/skeleton-loader.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/empty-state.tsx b/tools/tenscan/frontend/src/components/modules/common/empty-state.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/empty-state.tsx
rename to tools/tenscan/frontend/src/components/modules/common/empty-state.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/network-status.tsx b/tools/tenscan/frontend/src/components/modules/common/network-status.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/network-status.tsx
rename to tools/tenscan/frontend/src/components/modules/common/network-status.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/common/truncated-address.tsx b/tools/tenscan/frontend/src/components/modules/common/truncated-address.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/common/truncated-address.tsx
rename to tools/tenscan/frontend/src/components/modules/common/truncated-address.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/dashboard/analytics-card.tsx b/tools/tenscan/frontend/src/components/modules/dashboard/analytics-card.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/dashboard/analytics-card.tsx
rename to tools/tenscan/frontend/src/components/modules/dashboard/analytics-card.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/dashboard/index.tsx b/tools/tenscan/frontend/src/components/modules/dashboard/index.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/dashboard/index.tsx
rename to tools/tenscan/frontend/src/components/modules/dashboard/index.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/dashboard/recent-batches.tsx b/tools/tenscan/frontend/src/components/modules/dashboard/recent-batches.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/dashboard/recent-batches.tsx
rename to tools/tenscan/frontend/src/components/modules/dashboard/recent-batches.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/dashboard/recent-blocks.tsx b/tools/tenscan/frontend/src/components/modules/dashboard/recent-blocks.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/dashboard/recent-blocks.tsx
rename to tools/tenscan/frontend/src/components/modules/dashboard/recent-blocks.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/dashboard/recent-transactions.tsx b/tools/tenscan/frontend/src/components/modules/dashboard/recent-transactions.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/dashboard/recent-transactions.tsx
rename to tools/tenscan/frontend/src/components/modules/dashboard/recent-transactions.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/personal/columns.tsx b/tools/tenscan/frontend/src/components/modules/personal/columns.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/personal/columns.tsx
rename to tools/tenscan/frontend/src/components/modules/personal/columns.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/personal/data.tsx b/tools/tenscan/frontend/src/components/modules/personal/data.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/personal/data.tsx
rename to tools/tenscan/frontend/src/components/modules/personal/data.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/personal/index.tsx b/tools/tenscan/frontend/src/components/modules/personal/index.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/personal/index.tsx
rename to tools/tenscan/frontend/src/components/modules/personal/index.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/resources/decrypt.tsx b/tools/tenscan/frontend/src/components/modules/resources/decrypt.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/resources/decrypt.tsx
rename to tools/tenscan/frontend/src/components/modules/resources/decrypt.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/resources/verified-data/VerifiedContracts.tsx b/tools/tenscan/frontend/src/components/modules/resources/verified-data/VerifiedContracts.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/resources/verified-data/VerifiedContracts.tsx
rename to tools/tenscan/frontend/src/components/modules/resources/verified-data/VerifiedContracts.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/resources/verified-data/VerifiedSequencerData.tsx b/tools/tenscan/frontend/src/components/modules/resources/verified-data/VerifiedSequencerData.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/resources/verified-data/VerifiedSequencerData.tsx
rename to tools/tenscan/frontend/src/components/modules/resources/verified-data/VerifiedSequencerData.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/resources/verified-data/index.tsx b/tools/tenscan/frontend/src/components/modules/resources/verified-data/index.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/resources/verified-data/index.tsx
rename to tools/tenscan/frontend/src/components/modules/resources/verified-data/index.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/transactions/columns.tsx b/tools/tenscan/frontend/src/components/modules/transactions/columns.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/transactions/columns.tsx
rename to tools/tenscan/frontend/src/components/modules/transactions/columns.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/modules/transactions/constants.tsx b/tools/tenscan/frontend/src/components/modules/transactions/constants.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/modules/transactions/constants.tsx
rename to tools/tenscan/frontend/src/components/modules/transactions/constants.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/overview.tsx b/tools/tenscan/frontend/src/components/overview.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/overview.tsx
rename to tools/tenscan/frontend/src/components/overview.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/providers/theme-provider.tsx b/tools/tenscan/frontend/src/components/providers/theme-provider.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/providers/theme-provider.tsx
rename to tools/tenscan/frontend/src/components/providers/theme-provider.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/providers/wallet-provider.tsx b/tools/tenscan/frontend/src/components/providers/wallet-provider.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/providers/wallet-provider.tsx
rename to tools/tenscan/frontend/src/components/providers/wallet-provider.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/search.tsx b/tools/tenscan/frontend/src/components/search.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/search.tsx
rename to tools/tenscan/frontend/src/components/search.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/team-switcher.tsx b/tools/tenscan/frontend/src/components/team-switcher.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/team-switcher.tsx
rename to tools/tenscan/frontend/src/components/team-switcher.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/alert.tsx b/tools/tenscan/frontend/src/components/ui/alert.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/alert.tsx
rename to tools/tenscan/frontend/src/components/ui/alert.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/avatar.tsx b/tools/tenscan/frontend/src/components/ui/avatar.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/avatar.tsx
rename to tools/tenscan/frontend/src/components/ui/avatar.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/badge.tsx b/tools/tenscan/frontend/src/components/ui/badge.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/badge.tsx
rename to tools/tenscan/frontend/src/components/ui/badge.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/button.tsx b/tools/tenscan/frontend/src/components/ui/button.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/button.tsx
rename to tools/tenscan/frontend/src/components/ui/button.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/calendar.tsx b/tools/tenscan/frontend/src/components/ui/calendar.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/calendar.tsx
rename to tools/tenscan/frontend/src/components/ui/calendar.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/card.tsx b/tools/tenscan/frontend/src/components/ui/card.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/card.tsx
rename to tools/tenscan/frontend/src/components/ui/card.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/checkbox.tsx b/tools/tenscan/frontend/src/components/ui/checkbox.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/checkbox.tsx
rename to tools/tenscan/frontend/src/components/ui/checkbox.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/command.tsx b/tools/tenscan/frontend/src/components/ui/command.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/command.tsx
rename to tools/tenscan/frontend/src/components/ui/command.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/dialog.tsx b/tools/tenscan/frontend/src/components/ui/dialog.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/dialog.tsx
rename to tools/tenscan/frontend/src/components/ui/dialog.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/dropdown-menu.tsx b/tools/tenscan/frontend/src/components/ui/dropdown-menu.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/dropdown-menu.tsx
rename to tools/tenscan/frontend/src/components/ui/dropdown-menu.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/external-link.tsx b/tools/tenscan/frontend/src/components/ui/external-link.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/external-link.tsx
rename to tools/tenscan/frontend/src/components/ui/external-link.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/input.tsx b/tools/tenscan/frontend/src/components/ui/input.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/input.tsx
rename to tools/tenscan/frontend/src/components/ui/input.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/key-value.tsx b/tools/tenscan/frontend/src/components/ui/key-value.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/key-value.tsx
rename to tools/tenscan/frontend/src/components/ui/key-value.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/label.tsx b/tools/tenscan/frontend/src/components/ui/label.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/label.tsx
rename to tools/tenscan/frontend/src/components/ui/label.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/navigation-menu.tsx b/tools/tenscan/frontend/src/components/ui/navigation-menu.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/navigation-menu.tsx
rename to tools/tenscan/frontend/src/components/ui/navigation-menu.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/popover.tsx b/tools/tenscan/frontend/src/components/ui/popover.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/popover.tsx
rename to tools/tenscan/frontend/src/components/ui/popover.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/select.tsx b/tools/tenscan/frontend/src/components/ui/select.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/select.tsx
rename to tools/tenscan/frontend/src/components/ui/select.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/separator.tsx b/tools/tenscan/frontend/src/components/ui/separator.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/separator.tsx
rename to tools/tenscan/frontend/src/components/ui/separator.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/skeleton.tsx b/tools/tenscan/frontend/src/components/ui/skeleton.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/skeleton.tsx
rename to tools/tenscan/frontend/src/components/ui/skeleton.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/spinner.tsx b/tools/tenscan/frontend/src/components/ui/spinner.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/spinner.tsx
rename to tools/tenscan/frontend/src/components/ui/spinner.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/table.tsx b/tools/tenscan/frontend/src/components/ui/table.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/table.tsx
rename to tools/tenscan/frontend/src/components/ui/table.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/tabs.tsx b/tools/tenscan/frontend/src/components/ui/tabs.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/tabs.tsx
rename to tools/tenscan/frontend/src/components/ui/tabs.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/textarea.tsx b/tools/tenscan/frontend/src/components/ui/textarea.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/textarea.tsx
rename to tools/tenscan/frontend/src/components/ui/textarea.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/toast.tsx b/tools/tenscan/frontend/src/components/ui/toast.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/toast.tsx
rename to tools/tenscan/frontend/src/components/ui/toast.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/toaster.tsx b/tools/tenscan/frontend/src/components/ui/toaster.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/toaster.tsx
rename to tools/tenscan/frontend/src/components/ui/toaster.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/tooltip.tsx b/tools/tenscan/frontend/src/components/ui/tooltip.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/tooltip.tsx
rename to tools/tenscan/frontend/src/components/ui/tooltip.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/components/ui/use-toast.ts b/tools/tenscan/frontend/src/components/ui/use-toast.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/ui/use-toast.ts
rename to tools/tenscan/frontend/src/components/ui/use-toast.ts
diff --git a/tools/obscuroscan_v3/frontend/src/components/user-nav.tsx b/tools/tenscan/frontend/src/components/user-nav.tsx
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/components/user-nav.tsx
rename to tools/tenscan/frontend/src/components/user-nav.tsx
diff --git a/tools/obscuroscan_v3/frontend/src/hooks/useCopy.ts b/tools/tenscan/frontend/src/hooks/useCopy.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/hooks/useCopy.ts
rename to tools/tenscan/frontend/src/hooks/useCopy.ts
diff --git a/tools/obscuroscan_v3/frontend/src/lib/constants.ts b/tools/tenscan/frontend/src/lib/constants.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/lib/constants.ts
rename to tools/tenscan/frontend/src/lib/constants.ts
diff --git a/tools/obscuroscan_v3/frontend/src/lib/siteMetadata.ts b/tools/tenscan/frontend/src/lib/siteMetadata.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/lib/siteMetadata.ts
rename to tools/tenscan/frontend/src/lib/siteMetadata.ts
diff --git a/tools/obscuroscan_v3/frontend/src/lib/utils.ts b/tools/tenscan/frontend/src/lib/utils.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/lib/utils.ts
rename to tools/tenscan/frontend/src/lib/utils.ts
diff --git a/tools/obscuroscan_v3/frontend/src/routes/index.ts b/tools/tenscan/frontend/src/routes/index.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/routes/index.ts
rename to tools/tenscan/frontend/src/routes/index.ts
diff --git a/tools/obscuroscan_v3/frontend/src/routes/router.ts b/tools/tenscan/frontend/src/routes/router.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/routes/router.ts
rename to tools/tenscan/frontend/src/routes/router.ts
diff --git a/tools/obscuroscan_v3/frontend/src/services/useBatchesService.ts b/tools/tenscan/frontend/src/services/useBatchesService.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/services/useBatchesService.ts
rename to tools/tenscan/frontend/src/services/useBatchesService.ts
diff --git a/tools/obscuroscan_v3/frontend/src/services/useBlocksService.ts b/tools/tenscan/frontend/src/services/useBlocksService.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/services/useBlocksService.ts
rename to tools/tenscan/frontend/src/services/useBlocksService.ts
diff --git a/tools/obscuroscan_v3/frontend/src/services/useContractsService.ts b/tools/tenscan/frontend/src/services/useContractsService.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/services/useContractsService.ts
rename to tools/tenscan/frontend/src/services/useContractsService.ts
diff --git a/tools/obscuroscan_v3/frontend/src/services/useRollupsService.ts b/tools/tenscan/frontend/src/services/useRollupsService.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/services/useRollupsService.ts
rename to tools/tenscan/frontend/src/services/useRollupsService.ts
diff --git a/tools/obscuroscan_v3/frontend/src/services/useTransactionsService.ts b/tools/tenscan/frontend/src/services/useTransactionsService.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/services/useTransactionsService.ts
rename to tools/tenscan/frontend/src/services/useTransactionsService.ts
diff --git a/tools/obscuroscan_v3/frontend/src/types/interfaces/BatchInterfaces.ts b/tools/tenscan/frontend/src/types/interfaces/BatchInterfaces.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/types/interfaces/BatchInterfaces.ts
rename to tools/tenscan/frontend/src/types/interfaces/BatchInterfaces.ts
diff --git a/tools/obscuroscan_v3/frontend/src/types/interfaces/BlockInterfaces.ts b/tools/tenscan/frontend/src/types/interfaces/BlockInterfaces.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/types/interfaces/BlockInterfaces.ts
rename to tools/tenscan/frontend/src/types/interfaces/BlockInterfaces.ts
diff --git a/tools/obscuroscan_v3/frontend/src/types/interfaces/ContractInterface.ts b/tools/tenscan/frontend/src/types/interfaces/ContractInterface.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/types/interfaces/ContractInterface.ts
rename to tools/tenscan/frontend/src/types/interfaces/ContractInterface.ts
diff --git a/tools/obscuroscan_v3/frontend/src/types/interfaces/TransactionInterfaces.ts b/tools/tenscan/frontend/src/types/interfaces/TransactionInterfaces.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/types/interfaces/TransactionInterfaces.ts
rename to tools/tenscan/frontend/src/types/interfaces/TransactionInterfaces.ts
diff --git a/tools/obscuroscan_v3/frontend/src/types/interfaces/WalletInterfaces.ts b/tools/tenscan/frontend/src/types/interfaces/WalletInterfaces.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/types/interfaces/WalletInterfaces.ts
rename to tools/tenscan/frontend/src/types/interfaces/WalletInterfaces.ts
diff --git a/tools/obscuroscan_v3/frontend/src/types/interfaces/index.ts b/tools/tenscan/frontend/src/types/interfaces/index.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/src/types/interfaces/index.ts
rename to tools/tenscan/frontend/src/types/interfaces/index.ts
diff --git a/tools/obscuroscan_v3/frontend/styles/fonts/CloudSoft-Bold_700.otf b/tools/tenscan/frontend/styles/fonts/CloudSoft-Bold_700.otf
similarity index 100%
rename from tools/obscuroscan_v3/frontend/styles/fonts/CloudSoft-Bold_700.otf
rename to tools/tenscan/frontend/styles/fonts/CloudSoft-Bold_700.otf
diff --git a/tools/obscuroscan_v3/frontend/styles/fonts/CloudSoft-Light_300.otf b/tools/tenscan/frontend/styles/fonts/CloudSoft-Light_300.otf
similarity index 100%
rename from tools/obscuroscan_v3/frontend/styles/fonts/CloudSoft-Light_300.otf
rename to tools/tenscan/frontend/styles/fonts/CloudSoft-Light_300.otf
diff --git a/tools/obscuroscan_v3/frontend/styles/fonts/README.txt b/tools/tenscan/frontend/styles/fonts/README.txt
similarity index 100%
rename from tools/obscuroscan_v3/frontend/styles/fonts/README.txt
rename to tools/tenscan/frontend/styles/fonts/README.txt
diff --git a/tools/obscuroscan_v3/frontend/styles/globals.css b/tools/tenscan/frontend/styles/globals.css
similarity index 100%
rename from tools/obscuroscan_v3/frontend/styles/globals.css
rename to tools/tenscan/frontend/styles/globals.css
diff --git a/tools/obscuroscan_v3/frontend/tailwind.config.js b/tools/tenscan/frontend/tailwind.config.js
similarity index 100%
rename from tools/obscuroscan_v3/frontend/tailwind.config.js
rename to tools/tenscan/frontend/tailwind.config.js
diff --git a/tools/obscuroscan_v3/frontend/tailwind.config.ts b/tools/tenscan/frontend/tailwind.config.ts
similarity index 100%
rename from tools/obscuroscan_v3/frontend/tailwind.config.ts
rename to tools/tenscan/frontend/tailwind.config.ts
diff --git a/tools/obscuroscan_v3/frontend/tsconfig.json b/tools/tenscan/frontend/tsconfig.json
similarity index 100%
rename from tools/obscuroscan_v3/frontend/tsconfig.json
rename to tools/tenscan/frontend/tsconfig.json