Compare commits

..
Author SHA1 Message Date
Matthew Russell 1912054d14 fix: imports after rebase 2023-02-28 10:20:02 -08:00
Matthew Russell 51a4136fa9 chore: update wrong path for mock test 2023-02-28 10:07:06 -08:00
Matthew Russell 69f2a4885f chore: update test describe 2023-02-28 10:07:06 -08:00
Matthew Russell f87188e4be fix: export path for cypress mocks 2023-02-28 10:07:06 -08:00
Matthew Russell 9acd27d870 chore: fix lint 2023-02-28 10:07:06 -08:00
Matthew Russell 749b20735d test: update unit tests with correct imports and mocks 2023-02-28 10:07:06 -08:00
Matthew Russell ee50b76046 chore: rename token-e2e to governance-e2e 2023-02-28 10:07:06 -08:00
Matthew Russell 15ca94caad chore: rename apps/token to apps/governance 2023-02-28 10:07:03 -08:00
Matthew Russell 42b1a66833 chore: rename libs/governance to libs/proposals 2023-02-28 10:04:00 -08:00
Matthew Russell f1f1fd2cd7 chore: fixup import 2023-02-28 10:01:35 -08:00
Matthew Russell b4c329343d fix: incorrect imports 2023-02-28 10:01:35 -08:00
Matthew Russell 2b7a1067b2 chore: add i18n library 2023-02-28 10:01:35 -08:00
Matthew Russell 0b4d1e5c77 fix: import issues 2023-02-28 10:01:35 -08:00
Matthew Russell 1d8952c8d1 chore: add datagrid lib 2023-02-28 10:01:35 -08:00
Matthew Russell 0419ef5c4a chore: use input error in date range filter now circ dep is fixed 2023-02-28 10:01:35 -08:00
Matthew Russell 1113ba66af chore: convert compact number to component 2023-02-28 10:01:35 -08:00
Matthew Russell d8a525601d chore: move react components, fix imports 2023-02-28 10:01:35 -08:00
Matthew Russell fb24b9d914 chore: add utils lib and move non react libs 2023-02-28 10:01:33 -08:00
37 changed files with 415 additions and 609 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ on:
type: choice
options:
- explorer-e2e
- governance-e2e
- token-e2e
- trading-e2e
tags:
description: 'Test tags to run'
+1 -1
View File
@@ -10,5 +10,5 @@ jobs:
uses: ./.github/workflows/cypress-run.yml
secrets: inherit
with:
projects: '["explorer-e2e","governance-e2e","trading-e2e"]'
projects: '["explorer-e2e","token-e2e","trading-e2e"]'
tags: '@smoke @regression @slow'
+2 -2
View File
@@ -42,10 +42,10 @@ jobs:
affected=$(yarn nx print-affected --base=${{ env.NX_BASE }} --head=${{ env.NX_HEAD }} --select=projects)
echo -n "Affected projects: $affected"
projects=""
if [[ $affected == *"governance"* ]]; then projects+='"governance-e2e" '; fi
if [[ $affected == *"token"* ]]; then projects+='"token-e2e" '; fi
if [[ $affected == *"trading"* ]]; then projects+='"trading-e2e" '; fi
if [[ $affected == *"explorer"* ]]; then projects+='"explorer-e2e" '; fi
if [[ -z "$projects" ]]; then projects+='"governance-e2e" "trading-e2e" "explorer-e2e" '; fi
if [[ -z "$projects" ]]; then projects+='"token-e2e" "trading-e2e" "explorer-e2e" '; fi
projects=${projects%?}
projects=[${projects// /,}]
echo PROJECTS=$projects >> $GITHUB_ENV
-2
View File
@@ -12,8 +12,6 @@ on:
- react-helpers
- tailwindcss-config
- types
- utils
- i18n
jobs:
publish:
+1 -1
View File
@@ -161,7 +161,7 @@ In order to setup and run vegawallet for e2e capsule tests, in a separate termin
bash setup-vegawallet.sh
```
3. copy generated `api-token` and paste the token into `CYPRESS_VEGA_WALLET_API_TOKEN` environment variable in either `apps/governance-e2e/.env` or `apps/explorer-e2e/.env` depending on which project needs testing.
3. copy generated `api-token` and paste the token into `CYPRESS_VEGA_WALLET_API_TOKEN` environment variable in either `apps/token-e2e/.env` or `apps/explorer-e2e/.env` depending on which project needs testing.
Note: The script is only needed if capsule was built for first time or fresh. To run existing wallet service for capsule:
+1 -1
View File
@@ -1,6 +1,6 @@
# App configuration variables
NX_TENDERMINT_URL=https://tm.be.devnet1.vega.xyz/tm
NX_TENDERMINT_WEBSOCKET_URL=wss://be.devnet1.vega.xyz/websocket
NX_TENDERMINT_WEBSOCKET_URL=wss://tm.be.devnet1.vega.xyz/websocket
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/devnet-network.json
NX_VEGA_NETWORKS={\"MAINNET"\:\"https://explorer.vega.xyz"\,\"TESTNET\":\"https://explorer.fairground.wtf\"}
NX_VEGA_ENV=DEVNET
+2 -2
View File
@@ -1,10 +1,10 @@
# App configuration variables
NX_TENDERMINT_URL=https://be.explorer.vega.xyz
NX_TENDERMINT_WEBSOCKET_URL=wss://be.explorer.vega.xyz/websocket
NX_TENDERMINT_WEBSOCKET_URL=wss://be.explorer.vega.xyz
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/mainnet-network.json
NX_VEGA_NETWORKS={\"MAINNET"\:\"https://explorer.vega.xyz"\,\"TESTNET\":\"https://explorer.fairground.wtf\"}
NX_VEGA_ENV=MAINNET
NX_GITHUB_FEEDBACK_URL=https://github.com/vegaprotocol/feedback/discussions
NX_BLOCK_EXPLORER=https://be.explorer.vega.xyz/rest/
NX_ETHERSCAN_URL=https://etherscan.io
NX_VEGA_GOVERNANCE_URL=https://token.vega.xyz
NX_VEGA_GOVERNANCE_URL=https://token.vega.xyz
+1 -1
View File
@@ -1,6 +1,6 @@
# App configuration variables
NX_TENDERMINT_URL=https://tm.be.mainnet-mirror.vega.xyz
NX_TENDERMINT_WEBSOCKET_URL=wss://be.mainnet-mirror.vega.xyz/websocket
NX_TENDERMINT_WEBSOCKET_URL=https://tm.be.mainnet-mirror.vega.xyz
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/mirror-network.json
NX_VEGA_NETWORKS='{"DEVNET":"https://dev.token.vega.xyz","STAGNET3":"https://stagnet3.token.vega.xyz","TESTNET":"https://token.fairground.wtf","MAINNET":"https://token.vega.xyz"}'
NX_VEGA_ENV=MIRROR
+1 -1
View File
@@ -7,6 +7,6 @@ NX_ETHEREUM_PROVIDER_URL=https://sepolia.infura.io/v3/4f846e79e13f44d1b51bbd7ed9
NX_ETHERSCAN_URL=https://sepolia.etherscan.io
NX_VEGA_NETWORKS={\"MAINNET"\:\"https://explorer.vega.xyz"\,\"TESTNET\":\"https://explorer.fairground.wtf\"}
NX_TENDERMINT_URL=https://tm.sandbox.vega.xyz
NX_TENDERMINT_WEBSOCKET_URL=wss://be.sandbox.vega.xyz/websocket
NX_TENDERMINT_WEBSOCKET_URL=wss://tm.sandbox.vega.xyz/websocket
NX_ETHERSCAN_URL=https://sepolia.etherscan.io
NX_VEGA_GOVERNANCE_URL=https://sandbox.token.vega.xyz
+1 -1
View File
@@ -1,5 +1,5 @@
NX_TENDERMINT_URL=https://tm.n00.stagnet3.vega.xyz
NX_TENDERMINT_WEBSOCKET_URL=wss://be.stagnet3.vega.xyz/websocket
NX_TENDERMINT_WEBSOCKET_URL=wss://tm.n00.stagnet3.vega.xyz/websocket
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/stagnet3-network.json
NX_VEGA_NETWORKS={\"MAINNET"\:\"https://explorer.vega.xyz"\,\"TESTNET\":\"https://explorer.fairground.wtf\"}
NX_VEGA_ENV=STAGNET3
+1 -1
View File
@@ -1,7 +1,7 @@
# App configuration variables
NX_TENDERMINT_URL=https://tm.be.testnet.vega.xyz
NX_BLOCK_EXPLORER=https://be.testnet.vega.xyz/rest
NX_TENDERMINT_WEBSOCKET_URL=wss://be.testnet.vega.xyz/websocket
NX_TENDERMINT_WEBSOCKET_URL=wss://tm.be.testnet.vega.xyz/websocket/
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/testnet-network.json
NX_VEGA_NETWORKS={\"MAINNET"\:\"https://explorer.vega.xyz"\,\"TESTNET\":\"https://explorer.fairground.wtf\"}
NX_VEGA_ENV=TESTNET
+2 -2
View File
@@ -1,7 +1,7 @@
# App configuration variables
NX_VEGA_ENV=VALIDATOR_TESTNET
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/validator-testnet-network.json
NX_VEGA_URL=https://api.validators-testnet.vega.xyz/graphql
NX_VEGA_URL=https://api.validators-testnet.vega.xyz/query
NX_VEGA_REST=https://api.validators-testnet.vega.xyz/
NX_VEGA_NETWORKS='{"DEVNET":"https://dev.token.vega.xyz","STAGNET3":"https://stagnet3.token.vega.xyz","TESTNET":"https://token.fairground.wtf","MAINNET":"https://token.vega.xyz"}'
NX_ETHEREUM_PROVIDER_URL=https://sepolia.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8
@@ -11,4 +11,4 @@ NX_GITHUB_FEEDBACK_URL=https://github.com/vegaprotocol/feedback/discussions
NX_VEGA_GOVERNANCE_URL=https://validator-testnet.governance.vega.xyz
NX_TENDERMINT_URL=https://tm.be.validators-testnet.vega.xyz
NX_BLOCK_EXPLORER=https://be.validators-testnet.vega.xyz/rest
NX_TENDERMINT_WEBSOCKET_URL=wss://be.validators-testnet.vega.xyz/websocket
NX_TENDERMINT_WEBSOCKET_URL=wss://tm.be.validators-testnet.vega.xyz/websocket/
@@ -22,3 +22,29 @@ query ExplorerFutureEpoch {
}
}
}
# query ExplorerEpoch($id: ID!) {
#
##### This could be useful for calculating roughly when a future epoch will
##### occur, but epoch not exist results in a total error
# networkParameter(key: "validators.epoch.length") {
# value
# }
#
##### This could be useful for relating where we are in time, but as above
##### the total failure caused by epoch(id) not existing
##### means this is useful
# currentEpoch: epoch {
# id
# }
#
# epoch(id: $id) {
# id
# timestamps {
# start
# end
# firstBlock
# lastBlock
# }
# }
#}
@@ -101,7 +101,7 @@ const DeterministicOrderDetails = ({
{t('Remaining')}
</h2>
<h5 className="text-lg font-medium text-gray-500 mb-0">
<SizeInMarket size={o.remaining} marketId={o.market.id} />
{o.remaining}
</h5>
</div>
)}
+1 -1
View File
@@ -11,7 +11,7 @@
"noPropertyAccessFromIndexSignature": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"lib": ["es2021", "dom", "dom.iterable"]
"lib": ["es5", "es6", "dom", "dom.iterable"]
},
"exclude": ["./src/types/explorer.d.ts"],
"include": [],
+2 -2
View File
@@ -19,8 +19,8 @@ module.exports = defineConfig({
supportFile: './src/support/index.js',
video: false,
videoUploadOnPasses: false,
videosFolder: '../../dist/cypress/apps/governance-e2e/videos',
screenshotsFolder: '../../dist/cypress/apps/governance-e2e/screenshots',
videosFolder: '../../dist/cypress/apps/token-e2e/videos',
screenshotsFolder: '../../dist/cypress/apps/token-e2e/screenshots',
chromeWebSecurity: false,
viewportWidth: 1440,
viewportHeight: 900,
+1 -1
View File
@@ -1,7 +1,7 @@
# App configuration variables
NX_VEGA_ENV=VALIDATOR_TESTNET
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/validator-testnet-network.json
NX_VEGA_URL=https://api.validators-testnet.vega.xyz/graphql
NX_VEGA_URL=https://api.validators-testnet.vega.xyz/query
NX_VEGA_REST=https://api.validators-testnet.vega.xyz/
NX_VEGA_NETWORKS='{"DEVNET":"https://dev.token.vega.xyz","STAGNET3":"https://stagnet3.token.vega.xyz","TESTNET":"https://token.fairground.wtf","MAINNET":"https://token.vega.xyz"}'
NX_ETHEREUM_PROVIDER_URL=https://sepolia.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8
@@ -1,5 +0,0 @@
# App configuration variables
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/validator-testnet-network.json
NX_VEGA_URL=https://api.validators-testnet.vega.xyz/graphql
NX_VEGA_NETWORKS='{"TESTNET":"https://multisig-signer.fairground.wtf","MAINNET":"https://multisig-signer.vega.xyz"}'
NX_VEGA_ENV=VALIDATOR_TESTNET
+2 -1
View File
@@ -10,7 +10,8 @@
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
"noFallthroughCasesInSwitch": true,
"lib": ["es5", "es6", "dom", "dom.iterable"]
},
"include": [],
"references": [
+51 -184
View File
@@ -2761,7 +2761,7 @@
"tranche_end": "2023-12-05T00:00:00.000Z",
"total_added": "86666.297",
"total_removed": "0",
"locked_amount": "66067.0378744539887664482",
"locked_amount": "66363.3098645820638555771",
"deposits": [
{
"amount": "86666.297",
@@ -2827,7 +2827,7 @@
"tranche_end": "2023-06-01T00:00:00.000Z",
"total_added": "2500",
"total_removed": "0",
"locked_amount": "1253.36617953805475",
"locked_amount": "1270.50582519332525",
"deposits": [
{
"amount": "2500",
@@ -2948,7 +2948,7 @@
"tranche_end": "2023-09-01T00:00:00.000Z",
"total_added": "17500",
"total_removed": "0",
"locked_amount": "17428.19843875805275",
"locked_amount": "17500",
"deposits": [
{
"amount": "12500",
@@ -3214,8 +3214,8 @@
"tranche_start": "2023-02-01T00:00:00.000Z",
"tranche_end": "2023-08-01T00:00:00.000Z",
"total_added": "37500",
"total_removed": "3451.5629793",
"locked_amount": "31542.48436540822875",
"total_removed": "3376.096819125",
"locked_amount": "31800.99946286065125",
"deposits": [
{
"amount": "7500",
@@ -3239,11 +3239,6 @@
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tx": "0x1a73c48a20c37eb5f8214ecb3c1986d0b6a24ae6472533c556ec6c264814abb6"
},
{
"amount": "75.466160175",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tx": "0x7d9d6e2a37fbe030faf08b7b1b0fc5b09f1f4295c4d7f4e28e0bdac1bdd294ac"
},
{
"amount": "142.173112275",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
@@ -3304,12 +3299,6 @@
"tranche_id": 34,
"tx": "0x1a73c48a20c37eb5f8214ecb3c1986d0b6a24ae6472533c556ec6c264814abb6"
},
{
"amount": "75.466160175",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tranche_id": 34,
"tx": "0x7d9d6e2a37fbe030faf08b7b1b0fc5b09f1f4295c4d7f4e28e0bdac1bdd294ac"
},
{
"amount": "142.173112275",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
@@ -3348,8 +3337,8 @@
}
],
"total_tokens": "7500",
"withdrawn_tokens": "1176.4497966",
"remaining_tokens": "6323.5502034"
"withdrawn_tokens": "1100.983636425",
"remaining_tokens": "6399.016363575"
},
{
"address": "0x0B4e6fcE839B01ef43DA6F890FAC7B1Afb004600",
@@ -3381,7 +3370,7 @@
"tranche_end": "2023-12-05T00:00:00.000Z",
"total_added": "129999.45",
"total_removed": "0",
"locked_amount": "66006.760015267000693995",
"locked_amount": "66302.761694482463735865",
"deposits": [
{
"amount": "129999.45",
@@ -3447,7 +3436,7 @@
"tranche_end": "2023-09-03T00:00:00.000Z",
"total_added": "62600",
"total_removed": "0",
"locked_amount": "31770.79622653475404",
"locked_amount": "31984.79667681380592",
"deposits": [
{
"amount": "10000",
@@ -3640,7 +3629,7 @@
"tranche_end": "2023-09-17T00:00:00.000Z",
"total_added": "5000",
"total_removed": "0",
"locked_amount": "2729.3843543886355",
"locked_amount": "2746.477042110604",
"deposits": [
{
"amount": "5000",
@@ -3851,7 +3840,7 @@
"tranche_end": "2023-04-05T00:00:00.000Z",
"total_added": "97499.58",
"total_removed": "0",
"locked_amount": "7968.6843900639785516424",
"locked_amount": "8259.0344635706695729506",
"deposits": [
{
"amount": "97499.58",
@@ -3884,7 +3873,7 @@
"tranche_end": "2023-04-05T00:00:00.000Z",
"total_added": "135173.4239508",
"total_removed": "98230.390980249184455396",
"locked_amount": "10891.815825250007847523299096",
"locked_amount": "11288.674248884641168728801336",
"deposits": [
{
"amount": "135173.4239508",
@@ -3930,7 +3919,7 @@
"tranche_end": "2023-04-05T00:00:00.000Z",
"total_added": "32499.86",
"total_removed": "0",
"locked_amount": "3352.287911081129354365",
"locked_amount": "3474.433172927820788048",
"deposits": [
{
"amount": "32499.86",
@@ -3963,7 +3952,7 @@
"tranche_end": "2023-04-05T00:00:00.000Z",
"total_added": "10833.29",
"total_removed": "0",
"locked_amount": "1091.137185225013668482",
"locked_amount": "1130.8942826865467812457",
"deposits": [
{
"amount": "10833.29",
@@ -3996,7 +3985,7 @@
"tranche_end": "2023-04-05T00:00:00.000Z",
"total_added": "22749.93",
"total_removed": "4720.860935375",
"locked_amount": "4078.914499460078704314",
"locked_amount": "4227.535409358637757934",
"deposits": [
{
"amount": "6500",
@@ -4147,8 +4136,8 @@
"tranche_start": "2022-11-01T00:00:00.000Z",
"tranche_end": "2023-05-01T00:00:00.000Z",
"total_added": "22500",
"total_removed": "4988.60449275",
"locked_amount": "7489.02653084714535",
"total_removed": "4913.13257745",
"locked_amount": "7644.13558931859975",
"deposits": [
{
"amount": "7500",
@@ -4172,11 +4161,6 @@
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tx": "0xe5b0236fdb114d861139db0bdec5bdc26b4e107ff73eb66bc4ba262a003fd872"
},
{
"amount": "75.4719153",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tx": "0x27d0868963dc1e725d9b4da891a4df20b48107f1b0c803dd3f752362aa1d4335"
},
{
"amount": "142.17311235",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
@@ -4292,12 +4276,6 @@
"tranche_id": 33,
"tx": "0xe5b0236fdb114d861139db0bdec5bdc26b4e107ff73eb66bc4ba262a003fd872"
},
{
"amount": "75.4719153",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tranche_id": 33,
"tx": "0x27d0868963dc1e725d9b4da891a4df20b48107f1b0c803dd3f752362aa1d4335"
},
{
"amount": "142.17311235",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
@@ -4408,8 +4386,8 @@
}
],
"total_tokens": "7500",
"withdrawn_tokens": "4988.60449275",
"remaining_tokens": "2511.39550725"
"withdrawn_tokens": "4913.13257745",
"remaining_tokens": "2586.86742255"
},
{
"address": "0x2539b51EbDE65a75672aBcfE9439a706a99D18D1",
@@ -4434,7 +4412,7 @@
"tranche_end": "2023-06-02T00:00:00.000Z",
"total_added": "1939928.38",
"total_removed": "928642.9598472029154",
"locked_amount": "490270.700486229719709276",
"locked_amount": "496902.418486694568232482",
"deposits": [
{
"amount": "1852091.69",
@@ -36813,8 +36791,8 @@
"tranche_start": "2022-03-05T00:00:00.000Z",
"tranche_end": "2023-06-05T00:00:00.000Z",
"total_added": "3732368.4671",
"total_removed": "618385.665327542135993",
"locked_amount": "777876.602721610569750322568",
"total_removed": "615950.831401702010493",
"locked_amount": "788067.33889606523904645906",
"deposits": [
{
"amount": "1998.95815",
@@ -36983,11 +36961,6 @@
}
],
"withdrawals": [
{
"amount": "2434.8339258401255",
"user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0",
"tx": "0xcba878ae28c2c84219f8281dc2a57d0d9b6c99b7920900d5344c76aabe8f1e84"
},
{
"amount": "16659.576193025747093",
"user": "0xB523235B6c7C74DDB26b10E78bFb2d0Cb63Ae289",
@@ -37362,12 +37335,6 @@
}
],
"withdrawals": [
{
"amount": "2434.8339258401255",
"user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0",
"tranche_id": 1,
"tx": "0xcba878ae28c2c84219f8281dc2a57d0d9b6c99b7920900d5344c76aabe8f1e84"
},
{
"amount": "6293.20485405503",
"user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0",
@@ -37652,8 +37619,8 @@
}
],
"total_tokens": "187637.95",
"withdrawn_tokens": "148489.3376297531685",
"remaining_tokens": "39148.6123702468315"
"withdrawn_tokens": "146054.503703913043",
"remaining_tokens": "41583.446296086957"
},
{
"address": "0x1A71e3ED1996CAbB91bB043f880CE963D601707e",
@@ -38173,8 +38140,8 @@
"tranche_start": "2022-06-05T00:00:00.000Z",
"tranche_end": "2023-12-05T00:00:00.000Z",
"total_added": "15870102.715470999700000001",
"total_removed": "585576.10171211141869452",
"locked_amount": "8057988.074440156474389167629569634847256",
"total_removed": "582201.49676312452960452",
"locked_amount": "8094123.7706069735612090126362156915950257",
"deposits": [
{
"amount": "16249.93",
@@ -38703,26 +38670,6 @@
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tx": "0x1438fbbc780cb382033855d295fa2511deed15cd64506a62ae4e3cfe82b3678e"
},
{
"amount": "2345.954988",
"user": "0xF4c75FdbAe821C6B5DBB9f001bB23cBA58D1bA37",
"tx": "0x1887d1fb77d9fa555dd5b55da307edc91e395f3a7e0ca5f874740f5a10077cdf"
},
{
"amount": "449.22099392749209",
"user": "0xe3eB4CF43C072658401996b71D43eE26E573562D",
"tx": "0x3c76f03b71481a44c6ba2c7cea407f5f1bac60bcaa9242af18de287f94c8ed90"
},
{
"amount": "445.6540155068705",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tx": "0xb54d54fd5a6211e97495020ad17e9f045d032999ed94ea31994958304010aa85"
},
{
"amount": "133.7749515525265",
"user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0",
"tx": "0xed77ed534414a1949b1473707782223907e0ac001f899037ff822f10bd4a358a"
},
{
"amount": "535.4042378778335",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
@@ -40510,12 +40457,6 @@
"tranche_id": 2,
"tx": "0x1438fbbc780cb382033855d295fa2511deed15cd64506a62ae4e3cfe82b3678e"
},
{
"amount": "445.6540155068705",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
"tranche_id": 2,
"tx": "0xb54d54fd5a6211e97495020ad17e9f045d032999ed94ea31994958304010aa85"
},
{
"amount": "535.4042378778335",
"user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b",
@@ -41730,8 +41671,8 @@
}
],
"total_tokens": "259998.8875",
"withdrawn_tokens": "127812.81440269060675",
"remaining_tokens": "132186.07309730939325"
"withdrawn_tokens": "127367.16038718373625",
"remaining_tokens": "132631.72711281626375"
},
{
"address": "0x89051CAb67Bc7F8CC44F7e270c6EDaf1EC57676c",
@@ -41958,12 +41899,6 @@
"tranche_id": 2,
"tx": "0x525f9427c131bc2fdea7f556d16b7781faaa41e09c7735d1c02d1f7585cc49ab"
},
{
"amount": "449.22099392749209",
"user": "0xe3eB4CF43C072658401996b71D43eE26E573562D",
"tranche_id": 2,
"tx": "0x3c76f03b71481a44c6ba2c7cea407f5f1bac60bcaa9242af18de287f94c8ed90"
},
{
"amount": "1640.93679110232897",
"user": "0xe3eB4CF43C072658401996b71D43eE26E573562D",
@@ -42206,8 +42141,8 @@
}
],
"total_tokens": "150551.801",
"withdrawn_tokens": "73885.95651128121547",
"remaining_tokens": "76665.84448871878453"
"withdrawn_tokens": "73436.73551735372338",
"remaining_tokens": "77115.06548264627662"
},
{
"address": "0x4d982Ab0823fD2f48e934a7be2bb0a5374a26148",
@@ -42409,12 +42344,6 @@
}
],
"withdrawals": [
{
"amount": "2345.954988",
"user": "0xF4c75FdbAe821C6B5DBB9f001bB23cBA58D1bA37",
"tranche_id": 2,
"tx": "0x1887d1fb77d9fa555dd5b55da307edc91e395f3a7e0ca5f874740f5a10077cdf"
},
{
"amount": "2820.55961",
"user": "0xF4c75FdbAe821C6B5DBB9f001bB23cBA58D1bA37",
@@ -42627,8 +42556,8 @@
}
],
"total_tokens": "200000",
"withdrawn_tokens": "98152.824242",
"remaining_tokens": "101847.175758"
"withdrawn_tokens": "95806.869254",
"remaining_tokens": "104193.130746"
},
{
"address": "0x1b956E6c00E238194B331eddEFF72Cb5f28A8d01",
@@ -43088,12 +43017,6 @@
}
],
"withdrawals": [
{
"amount": "133.7749515525265",
"user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0",
"tranche_id": 2,
"tx": "0xed77ed534414a1949b1473707782223907e0ac001f899037ff822f10bd4a358a"
},
{
"amount": "345.7620519411935",
"user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0",
@@ -43360,8 +43283,8 @@
}
],
"total_tokens": "12362.05",
"withdrawn_tokens": "6082.9485904763035",
"remaining_tokens": "6279.1014095236965"
"withdrawn_tokens": "5949.173638923777",
"remaining_tokens": "6412.876361076223"
},
{
"address": "0xb091D456d0dFCB94dcba6f355379056C5bb995fC",
@@ -43992,8 +43915,8 @@
"tranche_start": "2021-11-05T00:00:00.000Z",
"tranche_end": "2023-05-05T00:00:00.000Z",
"total_added": "14597706.0446472999",
"total_removed": "5577730.800522677126225156",
"locked_amount": "1717637.913293206087167300482305332",
"total_removed": "5577113.077460725181649906",
"locked_amount": "1750998.157265811220227145011388614",
"deposits": [
{
"amount": "129284.449",
@@ -44222,11 +44145,6 @@
"user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b",
"tx": "0x904f971f68cc70ba987688b8b26bcbd4e16ab1964b095de013e364f3ae7530c6"
},
{
"amount": "617.72306195194457525",
"user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b",
"tx": "0xcc545119eac3fe838555697dae55ce68273cb4c5f414c8983bac9f7ef8338f2c"
},
{
"amount": "800.792718381487871",
"user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b",
@@ -47206,12 +47124,6 @@
"tranche_id": 3,
"tx": "0x904f971f68cc70ba987688b8b26bcbd4e16ab1964b095de013e364f3ae7530c6"
},
{
"amount": "617.72306195194457525",
"user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b",
"tranche_id": 3,
"tx": "0xcc545119eac3fe838555697dae55ce68273cb4c5f414c8983bac9f7ef8338f2c"
},
{
"amount": "800.792718381487871",
"user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b",
@@ -49728,8 +49640,8 @@
}
],
"total_tokens": "359123.469575",
"withdrawn_tokens": "316627.82419217025121175",
"remaining_tokens": "42495.64538282974878825"
"withdrawn_tokens": "316010.1011302183066365",
"remaining_tokens": "43113.3684447816933635"
},
{
"address": "0xBdd412797c1B78535Afc5F71503b91fAbD0160fB",
@@ -51072,8 +50984,8 @@
"tranche_start": "2021-10-05T00:00:00.000Z",
"tranche_end": "2023-04-05T00:00:00.000Z",
"total_added": "5778205.3912159303",
"total_removed": "3077573.36197477479025324",
"locked_amount": "361745.724189576549364124598838149",
"total_removed": "3063522.787392713967070295",
"locked_amount": "374926.558344229352055062527996886",
"deposits": [
{
"amount": "552496.6455",
@@ -51222,16 +51134,6 @@
"user": "0xafa64cCa337eFEE0AD827F6C2684e69275226e90",
"tx": "0xb1d21b6f9cce4bfaf8870592e4cbc7a40f1ca7c13cd7c8c8bb1defeb49bc31b8"
},
{
"amount": "2341.4608038512383296",
"user": "0x6ae83EAB68b7112BaD5AfD72d6B24546AbFF137D",
"tx": "0xda4d9f820cb3c34b3c743ba99fef0c1963499bd0410ce0367f184627dc35c790"
},
{
"amount": "11709.113778209584853345",
"user": "0xC24da173A250e9Ca5c54870639EbE5f88be5102d",
"tx": "0x99d518cf3c7dcee238caa3a3297a291cd0810913f9275a8c28b5544ef6379e7c"
},
{
"amount": "990.74735267405816",
"user": "0xBc934494675a6ceB639B9EfEe5b9C0f017D35a75",
@@ -52328,12 +52230,6 @@
}
],
"withdrawals": [
{
"amount": "2341.4608038512383296",
"user": "0x6ae83EAB68b7112BaD5AfD72d6B24546AbFF137D",
"tranche_id": 4,
"tx": "0xda4d9f820cb3c34b3c743ba99fef0c1963499bd0410ce0367f184627dc35c790"
},
{
"amount": "2174.40565875071598655",
"user": "0x6ae83EAB68b7112BaD5AfD72d6B24546AbFF137D",
@@ -52426,8 +52322,8 @@
}
],
"total_tokens": "92082.572555",
"withdrawn_tokens": "86147.9161416650213055",
"remaining_tokens": "5934.6564133349786945"
"withdrawn_tokens": "83806.4553378137829759",
"remaining_tokens": "8276.1172171862170241"
},
{
"address": "0x1dC9B91DE003fd503F25cB5d114cf0fc68F7aFe6",
@@ -52455,12 +52351,6 @@
}
],
"withdrawals": [
{
"amount": "11709.113778209584853345",
"user": "0xC24da173A250e9Ca5c54870639EbE5f88be5102d",
"tranche_id": 4,
"tx": "0x99d518cf3c7dcee238caa3a3297a291cd0810913f9275a8c28b5544ef6379e7c"
},
{
"amount": "10871.612867264090097103",
"user": "0xC24da173A250e9Ca5c54870639EbE5f88be5102d",
@@ -52577,8 +52467,8 @@
}
],
"total_tokens": "460415.072915097",
"withdrawn_tokens": "430742.466734400422466334",
"remaining_tokens": "29672.606180696577533666"
"withdrawn_tokens": "419033.352956190837612989",
"remaining_tokens": "41381.719958906162387011"
},
{
"address": "0xd66e4853c0880df150e7329974715BFC8d2da47D",
@@ -53144,8 +53034,8 @@
"tranche_start": "2022-06-05T00:00:00.000Z",
"tranche_end": "2023-06-05T00:00:00.000Z",
"total_added": "472355.6199999996",
"total_removed": "34992.4553336210685",
"locked_amount": "123258.994233467654924929872552024",
"total_removed": "34799.2735287010685",
"locked_amount": "124873.77463304148219969237087774",
"deposits": [
{
"amount": "3000",
@@ -59789,16 +59679,6 @@
"user": "0xB3ae40b11af91BbD456022Bd42B4f36A8C0AEA9D",
"tx": "0x7d1caeef005902492763cabe888b5dc76fd9f224520323ac30c1927ae91a1778"
},
{
"amount": "45.996042618",
"user": "0xfeF4b56A370135A17Eef5ba8f5c308451a64Cf86",
"tx": "0xaad1a0343ca68a9af7c639ed61387a33a27418ee9df60aed2ad89a3a683873c2"
},
{
"amount": "147.185762302",
"user": "0x454D87e666a106F3545B7cde91F32aE8B9616a72",
"tx": "0xcefe8932dc5a8ef8bbbb4f4ac1ec86c2de0e064cab91c381e222411c4661d34a"
},
{
"amount": "57.900076104",
"user": "0x96d882E908C06cD697Ea07266Fb8D14ae129A50b",
@@ -66650,12 +66530,6 @@
}
],
"withdrawals": [
{
"amount": "45.996042618",
"user": "0xfeF4b56A370135A17Eef5ba8f5c308451a64Cf86",
"tranche_id": 5,
"tx": "0xaad1a0343ca68a9af7c639ed61387a33a27418ee9df60aed2ad89a3a683873c2"
},
{
"amount": "51.030511162",
"user": "0xfeF4b56A370135A17Eef5ba8f5c308451a64Cf86",
@@ -66676,8 +66550,8 @@
}
],
"total_tokens": "200",
"withdrawn_tokens": "147.153722728",
"remaining_tokens": "52.846277272"
"withdrawn_tokens": "101.15768011",
"remaining_tokens": "98.84231989"
},
{
"address": "0x84390738e072ac47EbC85171663Ce76608553abC",
@@ -75820,17 +75694,10 @@
"tx": "0xb1425d9b0d5f10c5b06236d6f9d61ebddd21c4027e0f41deb5ec227a1753c715"
}
],
"withdrawals": [
{
"amount": "147.185762302",
"user": "0x454D87e666a106F3545B7cde91F32aE8B9616a72",
"tranche_id": 5,
"tx": "0xcefe8932dc5a8ef8bbbb4f4ac1ec86c2de0e064cab91c381e222411c4661d34a"
}
],
"withdrawals": [],
"total_tokens": "200",
"withdrawn_tokens": "147.185762302",
"remaining_tokens": "52.814237698"
"withdrawn_tokens": "0",
"remaining_tokens": "200"
},
{
"address": "0xD611CCE7daE8359371b190AFa289B0610B53B928",
+4 -3
View File
@@ -1,11 +1,12 @@
NX_ETHEREUM_PROVIDER_URL=https://sepolia.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8
NX_ETHERSCAN_URL=https://sepolia.etherscan.io
NX_HOSTED_WALLET_URL=https://wallet.testnet.vega.xyz
NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/validator-testnet-network.json
NX_VEGA_ENV=VALIDATOR_TESTNET
NX_VEGA_EXPLORER_URL=https://validator-testnet.explorer.vega.xyz
NX_VEGA_NETWORKS={\"STAGNET3\":\"https://stagnet3.console.vega.xyz\",\"STAGNET1\":\"https://stagnet1.console.vega.xyz\",\"TESTNET\":\"https://console.fairground.wtf\"}
NX_VEGA_TOKEN_URL=https://validator-testnet.governance.fairground.wtf
NX_VEGA_EXPLORER_URL=https://dev.explorer.vega.xyz
NX_VEGA_NETWORKS='{"DEVNET":"https://dev.token.vega.xyz","STAGNET3":"https://stagnet3.token.vega.xyz","TESTNET":"https://token.fairground.wtf","MAINNET":"https://token.vega.xyz"}'
NX_VEGA_TOKEN_URL=https://token.fairground.wtf
NX_VEGA_WALLET_URL=http://localhost:1789
NX_VEGA_DOCS_URL=https://docs.vega.xyz/testnet
NX_VEGA_REPO_URL=https://github.com/vegaprotocol/vega/releases
+58
View File
@@ -0,0 +1,58 @@
.pre-loader {
display: flex;
width: 100%;
min-height: 100vh;
justify-content: center;
align-items: center;
.loader-item {
width: 10px;
height: 10px;
background: black;
}
.pre-loader-center {
align-items: center;
display: flex;
flex-direction: column;
}
.pre-loader-wrapper {
width: 50px;
height: 50px;
display: flex;
flex-wrap: wrap;
}
@for $i from 0 through 16 {
.loader-item:nth-child(#{$i}) {
@if $i % 2 == 0 {
animation-delay: #{$i * 50 * random(5)}ms;
animation-direction: reverse;
} @else {
animation-delay: #{$i * -50 * random(5)}ms;
animation-direction: alternate;
}
}
}
.loader-item {
animation: flickering 0.4s linear alternate infinite;
}
@keyframes flickering {
0% {
opacity: 1;
}
25% {
opacity: 1;
}
26% {
opacity: 0;
}
100% {
opacity: 0;
}
}
}
html.dark {
.pre-loader {
.loader-item {
background: white;
}
}
}
@@ -1,6 +1,5 @@
import { Tooltip } from '@vegaprotocol/ui-toolkit';
import type { ReactNode } from 'react';
import { useMemo } from 'react';
import type { OrderSubmissionBody } from '@vegaprotocol/wallet';
import type { Market, MarketData } from '@vegaprotocol/market-list';
import {
@@ -27,7 +26,7 @@ export const DealTicketFeeDetails = ({
marketData,
}: DealTicketFeeDetailsProps) => {
const feeDetails = useFeeDealTicketDetails(order, market, marketData);
const details = useMemo(() => getFeeDetailsValues(feeDetails), [feeDetails]);
const details = getFeeDetailsValues(feeDetails);
return (
<div>
{details.map(({ label, value, labelDescription, symbol }) => (
@@ -36,7 +36,6 @@ import {
usePersistedOrderStore,
usePersistedOrderStoreSubscription,
} from '@vegaprotocol/orders';
import { OrderType } from '@vegaprotocol/types';
export type TransactionStatus = 'default' | 'pending';
@@ -83,12 +82,7 @@ export const DealTicket = ({
const order = watch();
watch((orderData) => {
const persistable = !(
orderData.type === OrderType.TYPE_LIMIT && orderData.price === ''
);
if (persistable) {
setPersistedOrder(orderData as DealTicketFormFields);
}
setPersistedOrder(orderData as DealTicketFormFields);
});
usePersistedOrderStoreSubscription(market.id, (storedOrder) => {
@@ -375,7 +369,7 @@ const SummaryMessage = memo(
if (balanceError) {
return (
<div className="mb-2">
<MarginWarning balance={balance} margin={margin} asset={asset} />
<MarginWarning balance={balance} margin={margin} asset={asset} />;
</div>
);
}
@@ -1,20 +1,14 @@
import { renderHook, waitFor } from '@testing-library/react';
import { act } from 'react-dom/test-utils';
import type { ClientOptions } from '@vegaprotocol/apollo-client';
import { createClient } from '@vegaprotocol/apollo-client';
import { Networks } from '../types';
import { STORAGE_KEY, useEnvironment } from './use-environment';
import { useEnvironment } from './use-environment';
const noop = () => {
/* no op*/
};
jest.mock('@vegaprotocol/apollo-client');
jest.mock('zustand');
const mockCreateClient = createClient as jest.Mock;
const createDefaultMockClient = () => {
return () => ({
jest.mock('@vegaprotocol/apollo-client', () => ({
createClient: () => ({
query: () =>
Promise.resolve({
data: {
@@ -31,10 +25,12 @@ const createDefaultMockClient = () => {
obj.next();
},
}),
});
};
}),
}));
jest.mock('zustand');
global.fetch = jest.fn();
// eslint-disable-next-line
const setupFetch = (result: any) => {
return () => {
@@ -60,17 +56,6 @@ const mockEnvVars = {
describe('useEnvironment', () => {
const env = process.env;
// eslint-disable-next-line
let warn: any;
beforeAll(() => {
warn = console.warn;
console.warn = noop;
});
afterAll(() => {
console.warn = warn;
});
beforeEach(() => {
jest.resetModules();
@@ -88,9 +73,6 @@ describe('useEnvironment', () => {
// @ts-ignore clear mocked node config fetch
fetch.mockClear();
// reset default apollo client behaviour
mockCreateClient.mockImplementation(createDefaultMockClient());
});
afterEach(() => {
@@ -110,7 +92,6 @@ describe('useEnvironment', () => {
];
// @ts-ignore: typscript doesn't recognise the mock implementation
global.fetch.mockImplementation(setupFetch({ hosts: nodes }));
const { result } = setup();
expect(result.current.status).toBe('default');
@@ -126,169 +107,10 @@ describe('useEnvironment', () => {
});
// resulting VEGA_URL should be one of the nodes from the config
expect(nodes.includes(result.current.VEGA_URL as string)).toBe(true);
expect(result.current).toMatchObject({
...mockEnvVars,
nodes,
});
expect(fetch).toHaveBeenCalledTimes(1);
expect(fetch).toHaveBeenCalledWith(configUrl);
});
it('uses the first successfully responding node', async () => {
jest.useFakeTimers();
const configUrl = 'https://vega.xyz/testnet-config.json';
process.env['NX_VEGA_CONFIG_URL'] = configUrl;
const slowNode = 'https://api.n00.foo.vega.xyz';
const slowWait = 2000;
const fastNode = 'https://api.n01.foo.vega.xyz';
const fastWait = 1000;
const nodes = [slowNode, fastNode];
// @ts-ignore: typscript doesn't recognise the mock implementation
global.fetch.mockImplementation(setupFetch({ hosts: nodes }));
mockCreateClient.mockImplementation((obj: ClientOptions) => ({
query: () =>
new Promise((resolve) => {
const wait = obj.url === fastNode ? fastWait : slowWait;
setTimeout(() => {
resolve({
data: {
statistics: {
chainId: 'chain-id',
blockHeight: '100',
vegaTime: new Date().toISOString(),
},
},
});
}, wait);
}),
subscribe: () => ({
// eslint-disable-next-line
subscribe: (obj: any) => {
obj.next();
},
}),
}));
const { result } = setup();
expect(result.current.status).toBe('default');
act(() => {
result.current.initialize();
});
expect(result.current.status).toBe('pending');
// wait for nodes request to finish before running timer
await waitFor(() => {
expect(result.current.nodes).toEqual(nodes);
});
jest.runAllTimers();
await waitFor(() => {
expect(result.current.status).toEqual('success');
});
expect(result.current.VEGA_URL).toBe(fastNode);
expect(localStorage.getItem(STORAGE_KEY)).toBe(fastNode);
expect(result.current).toMatchObject({
...mockEnvVars,
nodes,
});
expect(fetch).toHaveBeenCalledTimes(1);
expect(fetch).toHaveBeenCalledWith(configUrl);
jest.useRealTimers();
});
it('passes a node if both queries and subscriptions working', async () => {
const configUrl = 'https://vega.xyz/testnet-config.json';
process.env['NX_VEGA_CONFIG_URL'] = configUrl;
const successNode = 'https://api.n01.foo.vega.xyz';
const failNode = 'https://api.n00.foo.vega.xyz';
const nodes = [failNode, successNode];
// @ts-ignore: typscript doesn't recognise the mock implementation
global.fetch.mockImplementation(setupFetch({ hosts: nodes }));
mockCreateClient.mockImplementation((clientOptions: ClientOptions) => ({
query: () =>
Promise.resolve({
data: {
statistics: {
chainId: 'chain-id',
blockHeight: '100',
vegaTime: new Date().toISOString(),
},
},
}),
subscribe: () => ({
// eslint-disable-next-line
subscribe: (obj: any) => {
if (clientOptions.url === failNode) {
// make n00 fail the subscription
obj.error();
} else {
obj.next();
}
},
}),
}));
const { result } = setup();
expect(result.current.status).toBe('default');
act(() => {
result.current.initialize();
});
expect(result.current.status).toBe('pending');
await waitFor(() => {
expect(result.current.status).toBe('success');
});
expect(result.current.VEGA_URL).toBe(successNode);
expect(localStorage.getItem(STORAGE_KEY)).toBe(successNode);
});
it('fails initialization if no suitable node is found', async () => {
const configUrl = 'https://vega.xyz/testnet-config.json';
process.env['NX_VEGA_CONFIG_URL'] = configUrl;
const nodes = [
'https://api.n00.foo.vega.xyz',
'https://api.n01.foo.vega.xyz',
];
// @ts-ignore: typscript doesn't recognise the mock implementation
global.fetch.mockImplementation(setupFetch({ hosts: nodes }));
// set all clients to fail both query and subscription
mockCreateClient.mockImplementation(() => ({
query: () => Promise.reject(),
subscribe: () => ({
// eslint-disable-next-line
subscribe: (obj: any) => {
obj.error();
},
}),
}));
const { result } = setup();
expect(result.current.status).toBe('default');
act(() => {
result.current.initialize();
});
expect(result.current.status).toBe('pending');
await waitFor(() => {
expect(result.current.status).toBe('failed');
});
expect(result.current.VEGA_URL).toBe(undefined); // VEGA_URL is unset, app should handle some UI
expect(
result.current.VEGA_URL === nodes[0] ||
result.current.VEGA_URL === nodes[1]
).toBe(true);
expect(result.current).toMatchObject({
...mockEnvVars,
nodes,
@@ -332,12 +154,9 @@ describe('useEnvironment', () => {
process.env['NX_VEGA_URL'] = url;
process.env['NX_VEGA_CONFIG_URL'] = undefined;
const { result } = setup();
act(() => {
await act(async () => {
result.current.initialize();
});
await waitFor(() => {
expect(result.current.status).toBe('success');
});
expect(result.current).toMatchObject({
VEGA_URL: url,
VEGA_CONFIG_URL: undefined,
@@ -355,16 +174,16 @@ describe('useEnvironment', () => {
// @ts-ignore setup mock fetch for config url
global.fetch.mockImplementation(setupFetch({ hosts: nodes }));
const { result } = setup();
act(() => {
await act(async () => {
result.current.initialize();
});
await waitFor(() => {
expect(result.current.status).toBe('success');
});
expect(nodes.includes(result.current.VEGA_URL as string)).toBe(true);
expect(typeof result.current.VEGA_URL).toEqual('string');
expect(result.current.VEGA_URL).not.toBeFalsy();
});
it('handles error if node config cannot be fetched', async () => {
const warn = console.warn;
console.warn = noop;
const configUrl = 'https://vega.xyz/testnet-config.json';
process.env['NX_VEGA_CONFIG_URL'] = configUrl;
process.env['NX_VEGA_URL'] = undefined;
@@ -377,14 +196,16 @@ describe('useEnvironment', () => {
result.current.initialize();
});
expect(result.current.status).toEqual('failed');
expect(result.current.error).toBe(
`Failed to fetch node config from ${configUrl}`
);
expect(typeof result.current.error).toBe('string');
expect(result.current.error).toBeTruthy();
expect(fetch).toHaveBeenCalledTimes(1);
expect(fetch).toHaveBeenCalledWith(configUrl);
console.warn = warn;
});
it('handles an invalid node config', async () => {
const warn = console.warn;
console.warn = noop;
const configUrl = 'https://vega.xyz/testnet-config.json';
process.env['NX_VEGA_CONFIG_URL'] = configUrl;
process.env['NX_VEGA_URL'] = undefined;
@@ -395,11 +216,11 @@ describe('useEnvironment', () => {
result.current.initialize();
});
expect(result.current.status).toEqual('failed');
expect(result.current.error).toBe(
`Failed to fetch node config from ${configUrl}`
);
expect(typeof result.current.error).toBe('string');
expect(result.current.error).toBeTruthy();
expect(fetch).toHaveBeenCalledTimes(1);
expect(fetch).toHaveBeenCalledWith(configUrl);
console.warn = warn;
});
it('uses stored url', async () => {
@@ -410,7 +231,7 @@ describe('useEnvironment', () => {
setupFetch({ hosts: ['http://foo.bar.com'] })
);
const url = 'https://api.n00.foo.com';
localStorage.setItem(STORAGE_KEY, url);
localStorage.setItem('vega_url', url);
const { result } = setup();
await act(async () => {
result.current.initialize();
@@ -433,6 +254,6 @@ describe('useEnvironment', () => {
result.current.setUrl(newUrl);
});
expect(result.current.VEGA_URL).toBe(newUrl);
expect(localStorage.getItem(STORAGE_KEY)).toBe(newUrl);
expect(localStorage.getItem('vega_url')).toBe(newUrl);
});
});
+15 -23
View File
@@ -31,7 +31,7 @@ type Actions = {
export type Env = Environment & EnvState;
export type EnvStore = Env & Actions;
export const STORAGE_KEY = 'vega_url';
const STORAGE_KEY = 'vega_url';
const SUBSCRIPTION_TIMEOUT = 3000;
export const useEnvironment = create<EnvStore>((set, get) => ({
@@ -168,15 +168,9 @@ const fetchConfig = async (url?: string) => {
* Find a suitable node by running a test query and test
* subscription, against a list of clients, first to resolve wins
*/
const findNode = async (clients: ClientCollection): Promise<string | null> => {
const findNode = (clients: ClientCollection): Promise<string | null> => {
const tests = Object.entries(clients).map((args) => testNode(...args));
try {
const url = await Promise.any(tests);
return url;
} catch {
// All tests rejected, no suitable node found
return null;
}
return Promise.race(tests);
};
/**
@@ -186,21 +180,19 @@ const testNode = async (
url: string,
client: Client
): Promise<string | null> => {
const results = await Promise.all([
// these promises will only resolve with true/false
testQuery(client),
testSubscription(client),
]);
if (results[0] && results[1]) {
return url;
try {
const results = await Promise.all([
testQuery(client),
testSubscription(client),
]);
if (results[0] && results[1]) {
return url;
}
return null;
} catch (err) {
console.warn(`Tests failed for ${url}`);
return null;
}
const message = `Tests failed for node: ${url}`;
console.warn(message);
// throwing here will mean this tests is ignored and a different
// node that hopefully does resolve will fulfill the Promise.any
throw new Error(message);
};
/**
+58 -13
View File
@@ -1,4 +1,4 @@
import { act, render, screen } from '@testing-library/react';
import { act, render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { getDateTimeFormat } from '@vegaprotocol/utils';
import * as Schema from '@vegaprotocol/types';
@@ -8,6 +8,19 @@ import type { Trade } from './fills-data-provider';
import { FillsTable } from './fills-table';
import { generateFill } from './test-helpers';
const waitForGridToBeInTheDOM = () => {
return waitFor(() => {
expect(document.querySelector('.ag-root-wrapper')).toBeInTheDocument();
});
};
// since our grid starts with no data, when the overlay has gone, data has loaded
const waitForDataToHaveLoaded = () => {
return waitFor(() => {
expect(document.querySelector('.ag-overlay-no-rows-center')).toBeNull();
});
};
describe('FillsTable', () => {
let defaultFill: PartialDeep<Trade>;
@@ -38,6 +51,8 @@ describe('FillsTable', () => {
await act(async () => {
render(<FillsTable partyId="party-id" rowData={[generateFill()]} />);
});
await waitForGridToBeInTheDOM();
await waitForDataToHaveLoaded();
const headers = screen.getAllByRole('columnheader');
const expectedHeaders = [
@@ -67,7 +82,12 @@ describe('FillsTable', () => {
liquidityFee: '2',
},
});
render(<FillsTable partyId={partyId} rowData={[{ ...buyerFill }]} />);
await act(async () => {
render(<FillsTable partyId={partyId} rowData={[{ ...buyerFill }]} />);
});
await waitForGridToBeInTheDOM();
await waitForDataToHaveLoaded();
const cells = screen.getAllByRole('gridcell');
const expectedValues = [
buyerFill.market?.tradableInstrument.instrument.name || '',
@@ -100,7 +120,11 @@ describe('FillsTable', () => {
liquidityFee: '1',
},
});
render(<FillsTable partyId={partyId} rowData={[buyerFill]} />);
await act(async () => {
render(<FillsTable partyId={partyId} rowData={[buyerFill]} />);
});
await waitForGridToBeInTheDOM();
await waitForDataToHaveLoaded();
const cells = screen.getAllByRole('gridcell');
const expectedValues = [
@@ -128,9 +152,16 @@ describe('FillsTable', () => {
},
aggressor: Schema.Side.SIDE_SELL,
});
const { rerender } = render(
<FillsTable partyId={partyId} rowData={[takerFill]} />
);
let rerenderer: (ui: React.ReactElement) => void;
await act(async () => {
const { rerender } = render(
<FillsTable partyId={partyId} rowData={[takerFill]} />
);
rerenderer = rerender;
});
await waitForGridToBeInTheDOM();
await waitForDataToHaveLoaded();
expect(
screen
.getAllByRole('gridcell')
@@ -143,7 +174,11 @@ describe('FillsTable', () => {
},
aggressor: Schema.Side.SIDE_BUY,
});
rerender(<FillsTable partyId={partyId} rowData={[makerFill]} />);
await act(async () => {
rerenderer(<FillsTable partyId={partyId} rowData={[makerFill]} />);
});
await waitForGridToBeInTheDOM();
await waitForDataToHaveLoaded();
expect(
screen
@@ -160,7 +195,11 @@ describe('FillsTable', () => {
},
aggressor: Schema.Side.SIDE_SELL,
});
render(<FillsTable partyId={partyId} rowData={[takerFill]} />);
await act(async () => {
render(<FillsTable partyId={partyId} rowData={[takerFill]} />);
});
await waitForGridToBeInTheDOM();
await waitForDataToHaveLoaded();
const feeCell = screen
.getAllByRole('gridcell')
@@ -170,10 +209,16 @@ describe('FillsTable', () => {
'market.tradableInstrument.instrument.product'
);
expect(feeCell).toBeInTheDocument();
await userEvent.hover(feeCell as HTMLElement);
expect(
await screen.findByTestId('fee-breakdown-tooltip')
).toBeInTheDocument();
await waitFor(() => {
expect(feeCell).toBeInTheDocument();
});
await act(async () => {
userEvent.hover(feeCell as HTMLElement);
await new Promise((res) => setTimeout(() => res(true), 1000));
});
await act(async () => {
expect(screen.getByTestId('fee-breakdown-tooltip')).toBeInTheDocument();
});
});
});
@@ -22,11 +22,7 @@ import {
normalizeOrderAmendment,
useVegaTransactionStore,
} from '@vegaprotocol/wallet';
import type {
VegaTxState,
TransactionResult,
OrderTxUpdateFieldsFragment,
} from '@vegaprotocol/wallet';
import type { VegaTxState, TransactionResult } from '@vegaprotocol/wallet';
import { OrderEditDialog } from '../order-list/order-edit-dialog';
import type { OrderSubFieldsFragment } from '../../order-hooks';
import * as Schema from '@vegaprotocol/types';
@@ -207,19 +203,7 @@ export const OrderListManager = ({
fields.limitPrice,
fields.size
);
const originalOrder: OrderTxUpdateFieldsFragment = {
type: editOrder.type,
id: editOrder.id,
status: editOrder.status,
createdAt: editOrder.createdAt,
size: editOrder.size,
price: editOrder.price,
timeInForce: editOrder.timeInForce,
expiresAt: editOrder.expiresAt,
side: editOrder.side,
marketId: editOrder.market.id,
};
create({ orderAmendment }, originalOrder);
create({ orderAmendment });
setEditOrder(null);
}}
/>
@@ -82,7 +82,7 @@ export const Notification = ({
{title}
</div>
)}
<div className="text-sm [word-break:break-word]">{message}</div>
<div className="text-sm">{message}</div>
{buttonProps && (
<Button
size={buttonProps.size || 'sm'}
@@ -2,16 +2,9 @@ import { useVegaTransactionStore } from './use-vega-transaction-store';
import { VegaTxStatus } from './use-vega-transaction';
import type { VegaStoredTxState } from './use-vega-transaction-store';
import type {
OrderAmendmentBody,
OrderCancellationBody,
WithdrawSubmissionBody,
} from './connectors/vega-connector';
import {
OrderStatus,
OrderTimeInForce,
OrderType,
Side,
} from '@vegaprotocol/types';
jest.mock('./utils', () => ({
...jest.requireActual('./utils'),
@@ -31,33 +24,6 @@ describe('useVegaTransactionStore', () => {
},
},
};
const orderAmendment: OrderAmendmentBody = {
orderAmendment: {
orderId:
'6a4fcd0ba478df2f284ef5f6d3c64a478cb8043d3afe36f66f92c0ed92631e64',
marketId:
'3aa2a828687cc3d59e92445d294891cbbd40e2165bbfb15674158ef5d4e8848d',
price: '1122',
timeInForce: OrderTimeInForce.TIME_IN_FORCE_GTC,
sizeDelta: 0,
},
};
const originalOrder = {
type: OrderType.TYPE_LIMIT,
id: '6902dea1fa01f0b98cceb382cb9c95df244747fa27ba591de084cdd876d2f7c2',
status: OrderStatus.STATUS_ACTIVE,
createdAt: '2023-03-01T14:08:13.48478Z',
size: '12',
price: '1125',
timeInForce: OrderTimeInForce.TIME_IN_FORCE_GTC,
expiresAt: null,
side: Side.SIDE_BUY,
marketId:
'3aa2a828687cc3d59e92445d294891cbbd40e2165bbfb15674158ef5d4e8848d',
};
const processedTransactionUpdate = {
status: VegaTxStatus.Pending,
txHash: 'txHash',
@@ -97,45 +63,6 @@ describe('useVegaTransactionStore', () => {
VegaTxStatus.Requested,
]);
});
it('updates an order with order amendment', () => {
useVegaTransactionStore.getState().create(orderAmendment, originalOrder);
useVegaTransactionStore.getState().create(orderAmendment, originalOrder);
useVegaTransactionStore.getState().create(orderAmendment, originalOrder);
const transaction = useVegaTransactionStore.getState().transactions[1];
useVegaTransactionStore
.getState()
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
.update(transaction!.id, { status: VegaTxStatus.Pending });
expect(
useVegaTransactionStore.getState().transactions.map((t) => t?.status)
).toEqual([
VegaTxStatus.Requested,
VegaTxStatus.Pending,
VegaTxStatus.Requested,
]);
expect(
useVegaTransactionStore
.getState()
.transactions.map((t) => t?.order?.price)
).toEqual(['1125', '1125', '1125']);
const result = {
orderAmendment: {
marketId:
'3aa2a828687cc3d59e92445d294891cbbd40e2165bbfb15674158ef5d4e8848d',
orderId:
'6a4fcd0ba478df2f284ef5f6d3c64a478cb8043d3afe36f66f92c0ed92631e64',
price: '1122',
sizeDelta: 0,
timeInForce: OrderTimeInForce.TIME_IN_FORCE_GTC,
},
};
expect(
useVegaTransactionStore.getState().transactions.map((t) => t?.body)
).toStrictEqual([result, result, result]);
});
it('sets dialogOpen to false on dismiss', () => {
useVegaTransactionStore.getState().create(orderCancellation);
useVegaTransactionStore.getState().dismiss(0);
@@ -143,7 +70,6 @@ describe('useVegaTransactionStore', () => {
useVegaTransactionStore.getState().transactions[0]?.dialogOpen
).toEqual(false);
});
it('updates transaction result', () => {
useVegaTransactionStore.getState().create(withdrawSubmission);
useVegaTransactionStore.getState().update(0, processedTransactionUpdate);
@@ -154,7 +80,6 @@ describe('useVegaTransactionStore', () => {
useVegaTransactionStore.getState().transactions[0]?.transactionResult
).toEqual(transactionResult);
});
it('updates withdrawal', () => {
useVegaTransactionStore.getState().create(withdrawSubmission);
useVegaTransactionStore.getState().update(0, processedTransactionUpdate);
@@ -33,7 +33,7 @@ export interface VegaStoredTxState extends VegaTxState {
}
export interface VegaTransactionStore {
transactions: (VegaStoredTxState | undefined)[];
create: (tx: Transaction, order?: OrderTxUpdateFieldsFragment) => number;
create: (tx: Transaction) => number;
update: (
index: number,
update: Partial<
@@ -55,7 +55,7 @@ export interface VegaTransactionStore {
export const useVegaTransactionStore = create(
subscribeWithSelector<VegaTransactionStore>((set, get) => ({
transactions: [] as VegaStoredTxState[],
create: (body: Transaction, order?: OrderTxUpdateFieldsFragment) => {
create: (body: Transaction) => {
const transactions = get().transactions;
const now = new Date();
const transaction: VegaStoredTxState = {
@@ -68,7 +68,6 @@ export const useVegaTransactionStore = create(
signature: null,
status: VegaTxStatus.Requested,
dialogOpen: true,
order,
};
set({ transactions: transactions.concat(transaction) });
return transaction.id;
@@ -166,11 +165,7 @@ export const useVegaTransactionStore = create(
// TODO: handle multiple orders from batch market instructions
// Note: If multiple orders are submitted the first order ID is determined by hashing the signature of the transaction
// (see determineId function). For each subsequent order's ID, a hash of the previous orders ID is used
transaction.order =
isOrderAmendmentTransaction(transaction?.body) &&
transaction.order
? transaction.order // the transaction.order would be the original order amended
: order;
transaction.order = order;
transaction.status = VegaTxStatus.Complete;
transaction.dialogOpen = true;
transaction.updatedAt = new Date();
@@ -21,11 +21,9 @@ import type { NetworkParamsQuery } from '@vegaprotocol/react-helpers';
const mockWeb3Provider = jest.fn();
let mockChainId = 111111;
jest.mock('@web3-react/core', () => ({
useWeb3React: () => ({
provider: mockWeb3Provider(),
chainId: mockChainId,
}),
}));
@@ -65,16 +63,15 @@ jest.mock('./use-get-withdraw-delay', () => ({
useGetWithdrawDelay: () => mockUseGetWithdrawDelay(),
}));
const mockUseEthereumConfig = {
const mockUseEthereumConfig = jest.fn(() => ({
collateral_bridge_contract: {
address: 'address',
},
chain_id: '111111',
};
}));
jest.mock('./use-ethereum-config', () => ({
useEthereumConfig: () => ({
config: mockUseEthereumConfig,
config: mockUseEthereumConfig(),
}),
}));
@@ -304,19 +301,4 @@ describe('useEthWithdrawApprovalsManager', () => {
erc20WithdrawalApproval.signatures,
]);
});
it('detect wrong chainId', () => {
mockChainId = 1;
const transaction = createWithdrawTransaction();
mockEthTransactionStoreState.mockReturnValue({ create });
mockEthWithdrawApprovalsStoreState.mockReturnValue({
transactions: [transaction],
update,
});
render();
expect(update.mock.calls[0][1].status).toEqual(ApprovalStatus.Error);
expect(update.mock.calls[0][1].message).toEqual(
'You are on the wrong network'
);
});
});
@@ -28,7 +28,7 @@ export const useEthWithdrawApprovalsManager = () => {
const getThreshold = useGetWithdrawThreshold();
const getDelay = useGetWithdrawDelay();
const { query } = useApolloClient();
const { provider, chainId } = useWeb3React();
const { provider } = useWeb3React();
const { config } = useEthereumConfig();
const createEthTransaction = useEthTransactionStore((state) => state.create);
const update = useEthWithdrawApprovalsStore((state) => state.update);
@@ -57,13 +57,6 @@ export const useEthWithdrawApprovalsManager = () => {
});
return;
}
if (chainId?.toString() !== config?.chain_id) {
update(transaction.id, {
status: ApprovalStatus.Error,
message: t(`You are on the wrong network`),
});
return;
}
update(transaction.id, {
status: ApprovalStatus.Pending,
message: t('Verifying withdrawal approval'),
@@ -138,6 +131,5 @@ export const useEthWithdrawApprovalsManager = () => {
query,
transaction,
update,
chainId,
]);
};
+1 -1
View File
@@ -216,7 +216,7 @@ export const getVerifyDialogProps = (status: ApprovalStatus) => {
export const VerificationStatus = ({ state }: { state: VerifyState }) => {
if (state.status === ApprovalStatus.Error) {
return <p>{state.message || t('Something went wrong')}</p>;
return <p>{t('Something went wrong')}</p>;
}
if (state.status === ApprovalStatus.Pending) {
+4
View File
@@ -20,6 +20,8 @@
"dependencies": {
"@apollo/client": "^3.5.8",
"@blueprintjs/icons": "^3.32.0",
"@emotion/react": "11.10.0",
"@emotion/styled": "11.10.0",
"@radix-ui/react-accordion": "^1.1.0",
"@radix-ui/react-checkbox": "^1.0.1",
"@radix-ui/react-dialog": "^1.0.2",
@@ -46,10 +48,12 @@
"apollo": "^2.33.9",
"apollo-link-timeout": "^4.0.0",
"bignumber.js": "^9.0.2",
"buffer": "^6.0.3",
"classnames": "^2.3.1",
"core-js": "^3.6.5",
"date-fns": "^2.28.0",
"duration-js": "^4.0.0",
"env-cmd": "^10.1.0",
"ethers": "^5.6.0",
"graphql": "^15.7.2",
"graphql-request": "^5.0.0",
+1 -1
View File
@@ -10,7 +10,7 @@
"importHelpers": true,
"target": "es2015",
"module": "esnext",
"lib": ["es2021", "dom"],
"lib": ["es2017", "dom"],
"skipLibCheck": true,
"skipDefaultLibCheck": true,
"baseUrl": ".",
+136 -9
View File
@@ -355,7 +355,7 @@
dependencies:
"@babel/types" "^7.18.9"
"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6":
"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
@@ -802,7 +802,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.18.6":
"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
@@ -1491,7 +1491,7 @@
dependencies:
regenerator-runtime "^0.13.10"
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.18.9", "@babel/runtime@^7.19.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.9.2":
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.19.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.9.2":
version "7.19.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78"
integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==
@@ -1831,6 +1831,107 @@
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
"@emotion/babel-plugin@^11.10.0":
version "11.10.2"
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz#879db80ba622b3f6076917a1e6f648b1c7d008c7"
integrity sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==
dependencies:
"@babel/helper-module-imports" "^7.16.7"
"@babel/plugin-syntax-jsx" "^7.17.12"
"@babel/runtime" "^7.18.3"
"@emotion/hash" "^0.9.0"
"@emotion/memoize" "^0.8.0"
"@emotion/serialize" "^1.1.0"
babel-plugin-macros "^3.1.0"
convert-source-map "^1.5.0"
escape-string-regexp "^4.0.0"
find-root "^1.1.0"
source-map "^0.5.7"
stylis "4.0.13"
"@emotion/cache@^11.10.0":
version "11.10.3"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.3.tgz#c4f67904fad10c945fea5165c3a5a0583c164b87"
integrity sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==
dependencies:
"@emotion/memoize" "^0.8.0"
"@emotion/sheet" "^1.2.0"
"@emotion/utils" "^1.2.0"
"@emotion/weak-memoize" "^0.3.0"
stylis "4.0.13"
"@emotion/hash@^0.9.0":
version "0.9.0"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7"
integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==
"@emotion/is-prop-valid@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83"
integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==
dependencies:
"@emotion/memoize" "^0.8.0"
"@emotion/memoize@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f"
integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
"@emotion/react@11.10.0":
version "11.10.0"
resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.0.tgz#53c577f063f26493f68a05188fb87528d912ff2e"
integrity sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ==
dependencies:
"@babel/runtime" "^7.18.3"
"@emotion/babel-plugin" "^11.10.0"
"@emotion/cache" "^11.10.0"
"@emotion/serialize" "^1.1.0"
"@emotion/utils" "^1.2.0"
"@emotion/weak-memoize" "^0.3.0"
hoist-non-react-statics "^3.3.1"
"@emotion/serialize@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8"
integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==
dependencies:
"@emotion/hash" "^0.9.0"
"@emotion/memoize" "^0.8.0"
"@emotion/unitless" "^0.8.0"
"@emotion/utils" "^1.2.0"
csstype "^3.0.2"
"@emotion/sheet@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5"
integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==
"@emotion/styled@11.10.0":
version "11.10.0"
resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.0.tgz#c19484dab4206ae46727c07efb4316423dd21312"
integrity sha512-V9oaEH6V4KePeQpgUE83i8ht+4Ri3E8Djp/ZPJ4DQlqWhSKITvgzlR3/YQE2hdfP4Jw3qVRkANJz01LLqK9/TA==
dependencies:
"@babel/runtime" "^7.18.3"
"@emotion/babel-plugin" "^11.10.0"
"@emotion/is-prop-valid" "^1.2.0"
"@emotion/serialize" "^1.1.0"
"@emotion/utils" "^1.2.0"
"@emotion/unitless@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db"
integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
"@emotion/utils@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561"
integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==
"@emotion/weak-memoize@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb"
integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==
"@endemolshinegroup/cosmiconfig-typescript-loader@^3.0.2":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d"
@@ -8872,7 +8973,7 @@ babel-plugin-macros@^2.8.0:
cosmiconfig "^6.0.0"
resolve "^1.12.0"
babel-plugin-macros@^3.0.1:
babel-plugin-macros@^3.0.1, babel-plugin-macros@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
@@ -9390,6 +9491,14 @@ buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
buffer@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
dependencies:
base64-js "^1.3.1"
ieee754 "^1.2.1"
builtin-modules@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
@@ -10142,7 +10251,7 @@ commander@^2.19.0, commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^4.1.1:
commander@^4.0.0, commander@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
@@ -10329,7 +10438,7 @@ conventional-commits-parser@^3.2.2:
split2 "^3.0.0"
through2 "^4.0.0"
convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
@@ -11767,6 +11876,14 @@ env-ci@7.1.0:
fromentries "^1.3.2"
java-properties "^1.0.0"
env-cmd@^10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/env-cmd/-/env-cmd-10.1.0.tgz#c7f5d3b550c9519f137fdac4dd8fb6866a8c8c4b"
integrity sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==
dependencies:
commander "^4.0.0"
cross-spawn "^7.0.0"
errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
version "0.1.8"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
@@ -12819,6 +12936,11 @@ find-cache-dir@^3.3.1, find-cache-dir@^3.3.2:
make-dir "^3.0.2"
pkg-dir "^4.1.0"
find-root@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
find-test-names@^1.19.0:
version "1.21.0"
resolved "https://registry.yarnpkg.com/find-test-names/-/find-test-names-1.21.0.tgz#fe0d0bdd7e8ad9df6b5e0f08986e982654fc4417"
@@ -13853,7 +13975,7 @@ hmac-drbg@^1.0.1:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
hoist-non-react-statics@^3.3.2:
hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -14184,7 +14306,7 @@ identity-obj-proxy@3.0.0:
dependencies:
harmony-reflect "^1.4.6"
ieee754@^1.1.13, ieee754@^1.1.4:
ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
@@ -20478,7 +20600,7 @@ source-map@0.7.3:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
source-map@^0.5.0, source-map@^0.5.6:
source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
@@ -20988,6 +21110,11 @@ stylehacks@^5.1.0:
browserslist "^4.16.6"
postcss-selector-parser "^6.0.4"
stylis@4.0.13:
version "4.0.13"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91"
integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
stylus-loader@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-6.2.0.tgz#0ba499e744e7fb9d9b3977784c8639728a7ced8c"