This commit is contained in:
Georges KABBOUCHI 2021-08-31 22:23:47 +03:00
parent fe8e9a7e70
commit fe9ba6d716
42 changed files with 559 additions and 161 deletions

View File

@ -1,6 +1,10 @@
<template>
<div>
<div v-if="active && activeAccount" class="relative w-[193px]" v-click-outside="hide">
<div
v-if="active && activeAccount"
class="relative w-[193px]"
v-click-outside="hide"
>
<button
type="button"
class=" relative w-full border border-primary-blue-border rounded pl-3 pr-10 py-2 text-left focus:outline-none focus:ring-1 focus:ring-[#0846E4] focus:border-[#0846E4] sm:text-sm"
@ -143,7 +147,7 @@
</div>
<button
v-else-if="!active"
@click="activate"
@click="open"
class="hidden md:flex bg-primary-blue-dark hover:bg-primary-blue-hover shadow text-white p-3 rounded h-9 items-center justify-center w-40"
>
Connect
@ -155,12 +159,14 @@
import { defineComponent, ref, watch } from '@nuxtjs/composition-api'
import { useDSA } from "~/composables/useDSA";
import { useFormatting } from '~/composables/useFormatting';
import { useWeb3 } from '~/composables/useWeb3';
import { useWeb3Modal } from '~/composables/useWeb3Modal';
import { useWeb3 } from '@kabbouchi/vue-web3';
export default defineComponent({
setup() {
const { activeAccount } = useDSA()
const { active, deactivate, activate } = useWeb3()
const { open } = useWeb3Modal()
const { shortenHash } = useFormatting()
const show = ref(false)
@ -172,6 +178,7 @@ export default defineComponent({
return {
hide,
show,
open,
activeAccount,
active,
activate,

View File

@ -53,7 +53,7 @@
<script lang="ts">
import { defineComponent } from "@nuxtjs/composition-api";
import { useTenderly } from "~/composables/useTenderly";
import { useWeb3 } from "~/composables/useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import ToggleButton from "./common/input/ToggleButton.vue";
export default defineComponent({

View File

@ -0,0 +1,51 @@
<template>
<div
class="inline-block w-full max-w-md px-8 py-7 overflow-hidden text-left align-bottom transition-all transform bg-white border border-opacity-50 rounded-lg shadow-xl dark:bg-dark-400 sm:my-8 sm:align-middle sm:p-6 border-green-light"
role="dialog"
aria-modal="true"
aria-labelledby="modal-headline"
>
<div>
<div class="mt-3 text-center sm:mt-5">
<h3 id="modal-headline" class="font-bold text-2xl">
Connect your wallet
</h3>
</div>
<div class="my-10">
<button @click="connect">
Metamask
</button>
</div>
</div>
</div>
</template>
<script>
import { defineComponent, ref } from '@nuxtjs/composition-api'
import Input from '~/components/common/input/Input.vue'
import { useModal } from '~/composables/useModal'
import { useWeb3 } from '@kabbouchi/vue-web3'
import { injected } from '~/connectors'
import ButtonCTA from '../../common/input/ButtonCTA.vue'
import ButtonCTAOutlined from '../../common/input/ButtonCTAOutlined.vue'
export default defineComponent({
components: { ButtonCTA, ButtonCTAOutlined, Input },
setup() {
const { close } = useModal()
const { activate } = useWeb3()
const connect = async () => {
await activate(injected)
close()
}
return {
close,
connect
}
},
})
</script>

View File

@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import atokens from '~/constant/atokens'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
@ -87,6 +87,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
import { useNotification } from '~/composables/useNotification'
import Button from '~/components/Button.vue'
import { useSidebar } from '~/composables/useSidebar'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, Input, ToggleButton, ButtonCTA, Button },
@ -95,7 +96,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account, web3 } = useWeb3()
const { account, library } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { formatNumber, formatUsdMax, formatUsd } = useFormatting()
@ -109,7 +111,7 @@ export default defineComponent({
const amount = ref('')
const amountParsed = computed(() => parseSafeFloat(amount.value))
const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const token = computed(() => getTokenByKey(rootTokenKey.value))
const symbol = computed(() => token.value?.symbol)
@ -126,7 +128,7 @@ export default defineComponent({
return {
amount: { message: validateAmount(amountParsed.value, balance.value), show: hasAmountValue },
accountAddress: { message: web3.value && !web3.value.utils.isAddress(accountAddress.value) ? 'Enter valid address!' : null, show: accountAddress.value.length > 0 },
accountAddress: { message: library.value && !library.value.utils.isAddress(accountAddress.value) ? 'Enter valid address!' : null, show: accountAddress.value.length > 0 },
auth: { message: validateIsLoggedIn(!!account.value), show: true },
}
})

View File

@ -76,7 +76,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import atokens from '~/constant/atokens'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
@ -84,6 +84,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
import { useNotification } from '~/composables/useNotification'
import Button from '~/components/Button.vue'
import { useSidebar } from '~/composables/useSidebar'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
@ -92,7 +93,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { formatNumber, formatUsdMax, formatUsd } = useFormatting()
@ -117,7 +119,7 @@ export default defineComponent({
const amount = ref('')
const amountParsed = computed(() => parseSafeFloat(amount.value))
const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const currentPosition = computed(() =>
displayPositions.value.find((position) => position.key === rootTokenKey.value)

View File

@ -99,7 +99,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import atokens from '~/constant/atokens'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
@ -107,6 +107,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
import { useNotification } from '~/composables/useNotification'
import Button from '~/components/Button.vue'
import { useSidebar } from '~/composables/useSidebar'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
@ -115,7 +116,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { getBalanceByKey, getBalanceRawByKey, fetchBalances } = useBalances()
@ -139,7 +141,7 @@ export default defineComponent({
const amount = ref('')
const amountParsed = computed(() => parseSafeFloat(amount.value))
const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const currentPosition = computed(() =>
displayPositions.value.find((position) => position.key === rootTokenKey.value)

View File

@ -80,7 +80,7 @@ import { useValidation } from "~/composables/useValidation";
import { useToken } from "~/composables/useToken";
import { useParsing } from "~/composables/useParsing";
import { useMaxAmountActive } from "~/composables/useMaxAmountActive";
import { useWeb3 } from "~/composables/useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import atokens from "~/constant/atokens";
import ToggleButton from "~/components/common/input/ToggleButton.vue";
import { useDSA } from "~/composables/useDSA";
@ -88,6 +88,7 @@ import ButtonCTA from "~/components/common/input/ButtonCTA.vue";
import Button from "~/components/Button.vue";
import { useSidebar } from "~/composables/useSidebar";
import DSA from "dsa-connect";
import { useNetwork } from "~/composables/useNetwork";
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
props: {
@ -95,7 +96,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar();
const { networkName, account } = useWeb3();
const { account } = useWeb3();
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA();
const { getTokenByKey, valInt } = useToken();
const { getBalanceByKey, fetchBalances } = useBalances();
@ -129,7 +131,7 @@ export default defineComponent({
const amountParsed = computed(() => parseSafeFloat(amount.value));
const rootTokenKey = computed(() =>
atokens[networkName.value].rootTokens.includes(props.tokenKey)
atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey)
? props.tokenKey
: "eth"
);

View File

@ -81,7 +81,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import atokens from '~/constant/atokens'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
@ -89,6 +89,7 @@ import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
import { useNotification } from '~/composables/useNotification'
import Button from '~/components/Button.vue'
import { useSidebar } from '~/composables/useSidebar'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
@ -97,7 +98,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { formatNumber, formatUsdMax, formatUsd } = useFormatting()
@ -132,7 +134,7 @@ export default defineComponent({
const amount = ref('')
const amountParsed = computed(() => parseSafeFloat(amount.value))
const rootTokenKey = computed(() => atokens[networkName.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const rootTokenKey = computed(() => atokens[activeNetworkId.value].rootTokens.includes(props.tokenKey) ? props.tokenKey : 'eth')
const token = computed(() => getTokenByKey(rootTokenKey.value))
const symbol = computed(() => token.value?.symbol)

View File

@ -65,7 +65,7 @@ import { useValidators } from '~/composables/useValidators'
import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
@ -76,6 +76,7 @@ import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition
import ctokens from '~/constant/ctokens'
import tokenIdMapping from '~/constant/tokenIdMapping'
import { useBalances } from '~/composables/useBalances'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
@ -84,7 +85,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { fetchBalances } = useBalances()
@ -96,7 +98,7 @@ export default defineComponent({
const tokenId = computed(() => props.tokenId)
const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value])
const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const { stats, status: initialStatus, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({
overridePosition: (position) => {

View File

@ -90,7 +90,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
@ -100,6 +100,7 @@ import { useSidebar } from '~/composables/useSidebar'
import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition'
import ctokens from '~/constant/ctokens'
import tokenIdMapping from '~/constant/tokenIdMapping'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
@ -108,7 +109,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { getBalanceByKey, getBalanceRawByKey, fetchBalances } = useBalances()
@ -119,7 +121,7 @@ export default defineComponent({
const tokenId = computed(() => props.tokenId)
const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value])
const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const { status, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({

View File

@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
@ -88,6 +88,7 @@ import { useSidebar } from '~/composables/useSidebar'
import tokenIdMapping from '~/constant/tokenIdMapping'
import ctokens from '~/constant/ctokens'
import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
@ -96,7 +97,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { getBalanceByKey, fetchBalances } = useBalances()
@ -108,7 +110,7 @@ export default defineComponent({
const tokenId = computed(() => props.tokenId)
const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value])
const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const { status, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({
overridePosition: (position) => {

View File

@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
@ -90,6 +90,7 @@ import tokenIdMapping from '~/constant/tokenIdMapping'
import ctokens from '~/constant/ctokens'
import { useCompoundPosition } from '~/composables/protocols/useCompoundPosition'
import { useBalances } from '~/composables/useBalances'
import { useNetwork } from '~/composables/useNetwork'
export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
@ -98,7 +99,8 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { activeNetworkId } = useNetwork()
const { dsa } = useDSA()
const { fetchBalances } = useBalances()
const { getTokenByKey, valInt } = useToken()
@ -110,7 +112,7 @@ export default defineComponent({
const tokenId = computed(() => props.tokenId)
const tokenKey = computed(() => tokenIdMapping.idToToken[tokenId.value])
const rootTokenKey = computed(() => ctokens[networkName.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const rootTokenKey = computed(() => ctokens[activeNetworkId.value].rootTokens.includes(tokenKey.value) ? tokenKey.value : 'eth')
const { stats, status, position, displayPositions, liquidation, liquidationPrice, liquidationMaxPrice, refreshPosition } = useCompoundPosition({

View File

@ -97,7 +97,7 @@ import { useValidators } from '~/composables/useValidators'
import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'

View File

@ -107,7 +107,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import atokens from '~/constant/atokens'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'

View File

@ -95,7 +95,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
@ -108,7 +108,7 @@ export default defineComponent({
components: { InputNumeric, ToggleButton, ButtonCTA, Button },
setup() {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { dsa } = useDSA()
const { valInt } = useToken()
const { getBalanceByKey, fetchBalances } = useBalances()

View File

@ -84,7 +84,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'

View File

@ -96,7 +96,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'

View File

@ -69,7 +69,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
@ -87,7 +87,7 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { fetchBalances } = useBalances()

View File

@ -91,7 +91,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'
@ -107,7 +107,7 @@ export default defineComponent({
},
setup(props) {
const { close } = useSidebar()
const { networkName, account } = useWeb3()
const { account } = useWeb3()
const { dsa } = useDSA()
const { getTokenByKey, valInt } = useToken()
const { getBalanceByKey, getBalanceRawByKey, fetchBalances } = useBalances()

View File

@ -79,7 +79,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'

View File

@ -77,7 +77,7 @@ import { useValidation } from '~/composables/useValidation'
import { useToken } from '~/composables/useToken'
import { useParsing } from '~/composables/useParsing'
import { useMaxAmountActive } from '~/composables/useMaxAmountActive'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import ToggleButton from '~/components/common/input/ToggleButton.vue'
import { useDSA } from '~/composables/useDSA'
import ButtonCTA from '~/components/common/input/ButtonCTA.vue'

View File

@ -3,11 +3,11 @@ import { AbiItem } from "web3-utils";
import aaveV2ABI from "~/abis/read/aaveV2.json";
import { computed, ref, watch } from "@nuxtjs/composition-api";
import { useDSA } from "~/composables/useDSA";
import { useWeb3 } from "~/composables/useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import BigNumber from "bignumber.js";
import atokensV2 from "~/constant/atokensV2";
import tokens from "~/constant/tokens";
import { Network } from "~/composables/useNetwork";
import { Network, useNetwork } from "~/composables/useNetwork";
import { useBigNumber } from "~/composables/useBigNumber";
import { usePosition } from "~/composables/usePosition";
import { useToken } from "~/composables/useToken";
@ -65,11 +65,12 @@ export function useAaveV2Position(
) {
overridePosition = overridePosition || (pos => pos);
const { web3, chainId, networkName } = useWeb3();
const { library, chainId } = useWeb3();
const { activeNetworkId } = useNetwork();
const { activeAccount } = useDSA();
const { getTokenByKey, allATokensV2 } = useToken();
const { byMaxSupplyOrBorrowDesc } = useSorting()
const { byMaxSupplyOrBorrowDesc } = useSorting();
const resolver = computed(() =>
chainId.value === 1
? "0xFb3a1D56eD56F046721B9aCa749895100754578b"
@ -77,7 +78,7 @@ export function useAaveV2Position(
);
const fetchPosition = async () => {
if (!web3.value) {
if (!library.value) {
return;
}
@ -85,20 +86,20 @@ export function useAaveV2Position(
return;
}
const aaveResolverInstance = new web3.value.eth.Contract(
const aaveResolverInstance = new library.value.eth.Contract(
aaveV2ABI as AbiItem[],
resolver.value
);
const aaveTokensArr = atokensV2[networkName.value].allTokens.map(
a => tokens[networkName.value].getTokenByKey(a.root).address
const aaveTokensArr = atokensV2[activeNetworkId.value].allTokens.map(
a => tokens[activeNetworkId.value].getTokenByKey(a.root).address
);
const aaveRawData = await aaveResolverInstance.methods
.getPosition(activeAccount.value.address, aaveTokensArr)
.call();
const newPos = calculateAavePosition(aaveRawData, networkName.value);
const newPos = calculateAavePosition(aaveRawData, activeNetworkId.value);
return newPos;
};
@ -107,9 +108,8 @@ export function useAaveV2Position(
position.value = await fetchPosition();
};
watch(
web3,
library,
async val => {
if (val) {
refreshPosition();
@ -165,7 +165,7 @@ export function useAaveV2Position(
);
const rewardTokenPriceInUsd = computed(() => {
if (networkName.value === Network.Polygon) {
if (activeNetworkId.value === Network.Polygon) {
return ensureValue(
position.value.data.find(position => position.key === "matic")
?.priceInUsd

View File

@ -3,10 +3,10 @@ import { AbiItem } from "web3-utils";
import compoundABI from "~/abis/read/compound.json";
import { computed, ref, watch } from "@nuxtjs/composition-api";
import { useDSA } from "~/composables/useDSA";
import { useWeb3 } from "~/composables/useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import BigNumber from "bignumber.js";
import tokens from "~/constant/tokens";
import { Network } from "~/composables/useNetwork";
import { Network, useNetwork } from "~/composables/useNetwork";
import { useBigNumber } from "~/composables/useBigNumber";
import { usePosition } from "~/composables/usePosition";
import { useToken } from "~/composables/useToken";
@ -62,14 +62,15 @@ export function useCompoundPosition(
) {
overridePosition = overridePosition || (pos => pos);
const { web3, networkName } = useWeb3();
const { library } = useWeb3();
const { activeNetworkId } = useNetwork()
const { activeAccount } = useDSA();
const { getTokenByKey } = useToken();
const { byMaxSupplyOrBorrowDesc } = useSorting()
const resolver = computed(() => addresses.mainnet.resolver.compound);
const fetchPosition = async () => {
if (!web3.value) {
if (!library.value) {
return;
}
@ -77,12 +78,12 @@ export function useCompoundPosition(
return;
}
const resolverInstance = new web3.value.eth.Contract(
const resolverInstance = new library.value.eth.Contract(
compoundABI as AbiItem[],
resolver.value
);
const tokensArr = ctokens[networkName.value].allTokens.map(a => a.address);
const tokensArr = ctokens[activeNetworkId.value].allTokens.map(a => a.address);
const compoundRawData = await resolverInstance.methods
.getPosition(activeAccount.value.address, tokensArr)
@ -90,7 +91,7 @@ export function useCompoundPosition(
const newPos = calculateCompoundPosition(
compoundRawData,
networkName.value
activeNetworkId.value
);
return newPos;
@ -101,7 +102,7 @@ export function useCompoundPosition(
};
watch(
web3,
library,
async val => {
if (val) {
refreshPosition();
@ -162,7 +163,7 @@ export function useCompoundPosition(
return [];
}
return ctokens[networkName.value].allTokens
return ctokens[activeNetworkId.value].allTokens
.flatMap(ctoken => {
const token = getTokenByKey(ctoken.root);
if (!token) {

View File

@ -2,7 +2,7 @@ import { computed, Ref, ref, watch } from "@nuxtjs/composition-api";
import { useBalances } from "../useBalances";
import { useBigNumber } from "../useBigNumber";
import { useToken } from "../useToken";
import { useWeb3 } from "~/composables/useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import { AbiItem } from "web3-utils";
import BigNumber from "bignumber.js";
BigNumber.config({ POW_PRECISION: 200 });
@ -49,7 +49,7 @@ export function useLiquityPosition(
collateralAmountRef: Ref = null,
debtAmountRef: Ref = null
) {
const { web3 } = useWeb3();
const { library } = useWeb3();
const { activeAccount } = useDSA();
const { isZero, times, div, max, minus, plus } = useBigNumber();
@ -137,22 +137,22 @@ export function useLiquityPosition(
);
const fetchPosition = async () => {
if (!web3.value) {
if (!library.value) {
return;
}
troveTypes.value = await getTroveTypes(web3.value);
troveTypes.value = await getTroveTypes(library.value);
if (!activeAccount.value) {
return;
}
trove.value = await getTrove(activeAccount.value.address, web3.value);
trove.value = await getTrove(activeAccount.value.address, library.value);
};
async function getTrovePositionHints(collateralInWei, debtInWei) {
try {
const liquityInstance = new web3.value.eth.Contract(
const liquityInstance = new library.value.eth.Contract(
abis.resolver.liquity as AbiItem[],
addresses.mainnet.resolver.liquity
);
@ -179,7 +179,7 @@ export function useLiquityPosition(
}
watch(
web3,
library,
async val => {
if (val) {
fetchPosition();

View File

@ -7,7 +7,7 @@ import makerVaults from "~/constant/tokens/vaults";
import { useBigNumber } from "~/composables/useBigNumber";
import { useDSA } from "~/composables/useDSA";
import { useToken } from "~/composables/useToken";
import { useWeb3 } from "~/composables/useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import { AbiItem } from "web3-utils";
const defaultVault = {
@ -54,7 +54,7 @@ export function useMakerdaoPosition(
collateralAmountRef: Ref = null,
debtAmountRef: Ref = null
) {
const { web3, chainId, networkName } = useWeb3();
const { library } = useWeb3();
const { activeAccount } = useDSA();
const { isZero, ensureValue, times, div, max, gt } = useBigNumber();
const { getTokenByKey } = useToken();
@ -117,23 +117,23 @@ export function useMakerdaoPosition(
);
const fetchPosition = async () => {
if (!web3.value) {
if (!library.value) {
return;
}
vaultTypes.value = await getVaultTypes(web3.value);
vaultTypes.value = await getVaultTypes(library.value);
if (!activeAccount.value) {
return;
}
vaults.value = await getVaults(activeAccount.value.address, web3.value);
vaults.value = await getVaults(activeAccount.value.address, library.value);
if (vaults.value.length > 0 && !vaultId.value) {
vaultId.value = vaults.value[0].id;
}
};
watch(
web3,
library,
async val => {
if (val) {
fetchPosition();

View File

@ -11,8 +11,8 @@ import addresses from "~/constant/addresses";
import tokens from "~/constant/tokens";
import uniPoolTokens from "~/constant/uniPoolTokens";
import { useDSA } from "./useDSA";
import { Network } from "./useNetwork";
import { useWeb3 } from "./useWeb3";
import { Network, useNetwork } from "./useNetwork";
import { useWeb3 } from "@kabbouchi/vue-web3";
import Web3 from "web3";
import { AbiItem } from "web3-utils";
import { useToken } from "./useToken";
@ -32,7 +32,8 @@ const prices = reactive({
export function useBalances() {
const { $axios } = useContext();
const { times, plus, ensureValue } = useBigNumber();
const { account, networkName, web3 } = useWeb3();
const { account, library } = useWeb3();
const { activeNetworkId } = useNetwork()
const { activeAccount } = useDSA();
const { getTokenByKey } = useToken();
const { by } = useSorting();
@ -48,12 +49,12 @@ export function useBalances() {
if (!account.value) return;
balances.user = {
mainnet:
networkName.value === Network.Mainnet
? await getBalances(account.value, Network.Mainnet, web3.value)
activeNetworkId.value === Network.Mainnet
? await getBalances(account.value, Network.Mainnet, library.value)
: {},
polygon:
networkName.value === Network.Polygon
? await getBalances(account.value, Network.Polygon, web3.value)
activeNetworkId.value === Network.Polygon
? await getBalances(account.value, Network.Polygon, library.value)
: {}
};
}
@ -63,19 +64,19 @@ export function useBalances() {
balances.dsa = {
mainnet:
networkName.value === Network.Mainnet
activeNetworkId.value === Network.Mainnet
? await getBalances(
activeAccount.value.address,
Network.Mainnet,
web3.value
library.value
)
: {},
polygon:
networkName.value === Network.Polygon
activeNetworkId.value === Network.Polygon
? await getBalances(
activeAccount.value.address,
Network.Polygon,
web3.value
library.value
)
: {}
};
@ -88,27 +89,27 @@ export function useBalances() {
const getBalanceByAddress = (address, network = null, type = "dsa") => {
return (
balances[type]?.[network || networkName.value][address]?.balance || "0"
balances[type]?.[network || activeNetworkId.value][address]?.balance || "0"
);
};
const getBalanceRawByKey = (tokenKey, network = null, type = "dsa") => {
return (
balances[type]?.[network || networkName.value][
balances[type]?.[network || activeNetworkId.value][
getTokenByKey(tokenKey)?.address
]?.raw || "0"
);
};
const netWorth = (address, type = "dsa") => {
const balance = getBalanceByAddress(address, networkName.value, type);
const price = ensureValue(prices[networkName.value][address]).toFixed();
const balance = getBalanceByAddress(address, activeNetworkId.value, type);
const price = ensureValue(prices[activeNetworkId.value][address]).toFixed();
return times(balance, price).toFixed();
};
const balanceTotal = computed(() =>
tokens[networkName.value].allTokens.reduce(
tokens[activeNetworkId.value].allTokens.reduce(
(totalNetWorth, token) =>
plus(totalNetWorth, netWorth(token.address)).toFixed(),
"0"
@ -116,16 +117,16 @@ export function useBalances() {
);
const getAssets = (type = "dsa") => {
return tokens[networkName.value].allTokens
return tokens[activeNetworkId.value].allTokens
.map(token => ({
...token,
balance: getBalanceByAddress(token.address, networkName.value, type),
balance: getBalanceByAddress(token.address, activeNetworkId.value, type),
netWorth: netWorth(token.address, type)
}))
.sort(by("-netWorth"));
};
watch(web3, () => {
watch(library, () => {
fetchBalances(true);
});
return {

View File

@ -1,10 +1,11 @@
import { computed, readonly, ref, watch } from "@nuxtjs/composition-api";
import { useWeb3 } from "./useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import DSA from "dsa-connect";
import addresses from "~/constant/addresses";
import abis from "~/constant/abis";
import { AbiItem } from "web3-utils";
import { useNotification } from "./useNotification";
import { useNetwork } from "./useNetwork";
const dsa = ref<DSA>();
const accounts = ref<any[]>([]);
@ -12,18 +13,28 @@ const activeAccount = ref<any>();
const authorities = ref<string[]>();
export function useDSA() {
const { web3, chainId, networkName, account } = useWeb3();
const { active, library, chainId, account } = useWeb3();
const { activeNetworkId } = useNetwork()
const { showWarning } = useNotification();
watch(web3, () => {
if (web3.value) {
dsa.value = new DSA(web3.value, chainId.value);
watch(library, () => {
if (library.value) {
dsa.value = new DSA(library.value, chainId.value);
}
});
watch(active, () => {
console.log("here");
if (library.value) {
dsa.value = new DSA(library.value, chainId.value);
}
});
watch(chainId, () => {
if (web3.value) {
dsa.value = new DSA(web3.value, chainId.value);
if (library.value) {
dsa.value = new DSA(library.value, chainId.value);
}
});
@ -82,9 +93,9 @@ export function useDSA() {
async function fethAuthorities() {
try {
const accountsResolverInstance = new web3.value.eth.Contract(
const accountsResolverInstance = new library.value.eth.Contract(
abis.resolver.accounts as AbiItem[],
addresses[networkName.value].resolver.accounts
addresses[activeNetworkId.value].resolver.accounts
);
const rawData = await accountsResolverInstance.methods
.getAccountAuthorities(activeAccount.value.address)
@ -170,7 +181,7 @@ export function useDSA() {
createAccount,
creatingAccount,
setAccount,
web3,
library,
chainId,
authorities,
createAuthority,

View File

@ -0,0 +1,32 @@
import { useWeb3 } from "@kabbouchi/vue-web3";
import { injected } from "../connectors";
import { onMounted, ref, watch } from "@nuxtjs/composition-api";
export function useEagerConnect() {
const { activate, active } = useWeb3();
const tried = ref(false);
onMounted(() => {
injected.isAuthorized().then((isAuthorized: boolean) => {
if (isAuthorized) {
activate(injected, undefined, true).catch(() => {
tried.value = true;
});
} else {
tried.value = true;
}
});
});
// if the connection worked, wait until we get confirmation of that to flip the flag
watch([tried, active], () => {
if (!tried.value && active.value) {
tried.value = true;
}
});
return {
tried
};
}

View File

@ -1,22 +1,25 @@
import { computed } from '@nuxtjs/composition-api'
import { useWeb3 } from './useWeb3'
import { computed } from "@nuxtjs/composition-api";
import { useNetwork } from "./useNetwork";
export function useLink() {
const { networkName } = useWeb3()
const { activeNetworkId } = useNetwork();
const addressDetailsLink = computed(() => {
if (networkName.value === 'polygon') {
return 'https://polygonscan.com/address'
if (activeNetworkId.value === "polygon") {
return "https://polygonscan.com/address";
}
return 'https://etherscan.io/address'
})
return "https://etherscan.io/address";
});
return { addressDetailsLink }
return { addressDetailsLink };
}
export const getEtherscanLink = (transactionHash) => `https://etherscan.io/tx/${transactionHash}`
export const getMaticLink = (transactionHash) => `https://polygonscan.com/tx/${transactionHash}`
export const getPolygonLink = (transactionHash) => `https://polygonscan.com/tx/${transactionHash}`
export const getTenderlyLink = (simulationId) =>
`https://dashboard.tenderly.co/public/InstaDApp/dsa-simulations/fork-simulation/${simulationId}?hideSidebar=true`
export const getEtherscanLink = transactionHash =>
`https://etherscan.io/tx/${transactionHash}`;
export const getMaticLink = transactionHash =>
`https://polygonscan.com/tx/${transactionHash}`;
export const getPolygonLink = transactionHash =>
`https://polygonscan.com/tx/${transactionHash}`;
export const getTenderlyLink = simulationId =>
`https://dashboard.tenderly.co/public/InstaDApp/dsa-simulations/fork-simulation/${simulationId}?hideSidebar=true`;

View File

@ -5,7 +5,7 @@ import MainnetSVG from "~/assets/icons/mainnet.svg?inline";
import PolygonSVG from "~/assets/icons/polygon.svg?inline";
import { useModal } from "./useModal";
import { useNotification } from "./useNotification";
import { useWeb3 } from "./useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
export enum Network {
Mainnet = "mainnet",
@ -24,11 +24,11 @@ export const activeNetwork = computed(
export function useNetwork() {
const { showWarning } = useNotification();
const { account, networkName, refreshWeb3 } = useWeb3();
const { account, chainId } = useWeb3();
const { showNetworksMismatchDialog } = useModal();
const networkMismatch = computed(
() => networkName.value != activeNetworkId.value
() => chainId.value != activeNetwork.value?.chainId
);
const checkForNetworkMismatch = () => {
@ -117,7 +117,7 @@ export function useNetwork() {
//@ts-ignore
activeNetworkId.value = localStorage.getItem("network") || "mainnet";
refreshWeb3();
// refreshWeb3()
});
return {

View File

@ -8,7 +8,7 @@ import {
} from "@nuxtjs/composition-api";
import { useDSA } from "./useDSA";
import { useWeb3 } from "./useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import SidebarAaveV2Supply from "~/components/sidebar/context/aaveV2/SidebarAaveV2Supply.vue";
import SidebarAaveV2Withdraw from '~/components/sidebar/context/aaveV2/SidebarAaveV2Withdraw.vue'
import SidebarAaveV2Borrow from '~/components/sidebar/context/aaveV2/SidebarAaveV2Borrow.vue'

View File

@ -1,14 +1,14 @@
import { useContext, ref, onMounted, computed } from "@nuxtjs/composition-api";
import axios from "axios";
import { activeNetwork, useNetwork } from "./useNetwork";
import { useWeb3 } from "./useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import Web3 from "web3";
import { useDSA } from "./useDSA";
const forkId = ref(null);
export function useTenderly() {
const { $config } = useContext();
const { setWeb3, refreshWeb3 } = useWeb3();
const { activate, provider } = useWeb3();
const { accounts, refreshAccounts } = useDSA();
const canSimulate = computed(
() => $config.TENDERLY_FORK_PATH && $config.TENDERLY_KEY
@ -66,7 +66,7 @@ export function useTenderly() {
forkId.value = null;
window.localStorage.removeItem("forkId");
await refreshWeb3();
// await refreshWeb3();
loading.value = false;
};
@ -77,13 +77,13 @@ export function useTenderly() {
}
forkId.value = fork;
setWeb3(
new Web3(
new Web3.providers.HttpProvider(
`https://rpc.tenderly.co/fork/${forkId.value}`
)
)
);
// setWeb3(
// new Web3(
// new Web3.providers.HttpProvider(
// `https://rpc.tenderly.co/fork/${forkId.value}`
// )
// )
// );
window.localStorage.setItem("forkId", forkId.value);
};

View File

@ -2,18 +2,18 @@ import { computed } from "@nuxtjs/composition-api";
import atokensV2 from "~/constant/atokensV2";
import tokens from "~/constant/tokens";
import { useBigNumber } from "./useBigNumber";
import { useWeb3 } from "./useWeb3";
import { useNetwork } from "./useNetwork";
export function useToken() {
const { networkName } = useWeb3();
const { activeNetworkId } = useNetwork();
const { toBN, times, minus, div, pow } = useBigNumber();
const getTokenByKey = key =>
tokens[networkName.value].allTokens.find(
tokens[activeNetworkId.value].allTokens.find(
token => String(token.key).toLowerCase() === String(key).toLowerCase()
);
const allATokensV2 = computed(() => atokensV2[networkName.value].allTokens);
const allATokensV2 = computed(() => atokensV2[activeNetworkId.value].allTokens);
function valInt(val, decimals) {
const num = toBN(val);

View File

@ -0,0 +1,10 @@
import { useModal } from "./useModal";
import Web3Modal from "~/components/modal/web3/Web3Modal.vue";
export const useWeb3Modal = () => {
const { showComponent } = useModal();
return {
open: () => showComponent(Web3Modal)
};
};

19
connectors/index.ts Normal file
View File

@ -0,0 +1,19 @@
import { setWeb3LibraryCallback } from "@kabbouchi/vue-web3";
import { InjectedConnector } from "@web3-react/injected-connector";
import { WalletConnectConnector } from "@web3-react/walletconnect-connector";
import Web3 from "web3";
setWeb3LibraryCallback(provider => new Web3(provider));
export const injected = new InjectedConnector({
supportedChainIds: [1, 137]
});
export const walletconnect = new WalletConnectConnector({
rpc: {
1: `https://mainnet.infura.io/v3/${process.env.INFURA_ID}`,
137: "https://rpc-mainnet.maticvigil.com"
},
supportedChainIds: [1, 137]
});

View File

@ -80,12 +80,13 @@ import { defineComponent, nextTick, onErrorCaptured, onMounted, useContext, useR
import MakerDAOIcon from '~/assets/icons/makerdao.svg?inline'
import CompoundIcon from '~/assets/icons/compound.svg?inline'
import AaveIcon from '~/assets/icons/aave.svg?inline'
import { useWeb3 } from '~/composables/useWeb3'
import { useWeb3 } from '@kabbouchi/vue-web3'
import { init as initSidebars, useSidebar } from '~/composables/useSidebar'
import { useBackdrop } from '@/composables/useBackdrop'
import { useNetwork } from "~/composables/useNetwork";
import { useTenderly } from "~/composables/useTenderly";
import { useModal } from "~/composables/useModal";
import { useEagerConnect } from "~/composables/useEagerConnect";
export default defineComponent({
components: {
@ -100,6 +101,7 @@ export default defineComponent({
const { redirect } = useContext()
const { showSidebarBalances } = useSidebar()
const { showNetworksMismatchDialog } = useModal()
useEagerConnect()
const route = useRoute()
watch(isBackdropShown, () => {

View File

@ -50,7 +50,7 @@ export default {
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
plugins: [
"~/plugins/v-click-outside.js",
"~/plugins/web3modal.js",
// "~/plugins/web3modal.js",
{ src: '~/plugins/v-tooltip', mode: 'client' },
{ src: '~/plugins/v-clipboard2', mode: 'client' },
],

View File

@ -11,12 +11,15 @@
"dependencies": {
"@gnosis.pm/safe-apps-sdk": "^4.2.0",
"@gnosis.pm/safe-apps-web3modal": "^2.0.0",
"@kabbouchi/vue-web3": "^0.2.16",
"@nuxtjs/axios": "^5.13.6",
"@nuxtjs/composition-api": "^0.24.7",
"@nuxtjs/composition-api": "^0.27.0",
"@portis/web3": "^4.0.5",
"@tailwindcss/forms": "^0.3.3",
"@vueuse/core": "^5.1.4",
"@walletconnect/web3-provider": "^1.4.1",
"@web3-react/injected-connector": "^6.0.7",
"@web3-react/walletconnect-connector": "^6.2.4",
"bignumber.js": "^9.0.1",
"core-js": "^3.15.1",
"css-color-function": "^1.3.3",

View File

@ -56,7 +56,7 @@ import { useBigNumber } from "~/composables/useBigNumber";
import { useNetwork } from "~/composables/useNetwork";
import { useDSA } from "~/composables/useDSA";
import { use1InchSwap } from "~/composables/swap/use1InchSwap";
import { useWeb3 } from "~/composables/useWeb3";
import { useWeb3 } from "@kabbouchi/vue-web3";
import { useNotification } from "~/composables/useNotification";
import { useBalances } from "~/composables/useBalances";

View File

@ -1,5 +1,5 @@
import WalletConnectProvider from "@walletconnect/web3-provider";
import { setProviders } from "~/composables/useWeb3"
import { setProviders } from "@kabbouchi/vue-web3"
import WalletLink from 'walletlink'
import Portis from '@portis/web3'
import SVGcoinbase from '~/assets/coinbase.svg'

272
yarn.lock
View File

@ -1170,6 +1170,18 @@
dependencies:
"@json-rpc-tools/types" "^1.6.1"
"@kabbouchi/vue-web3@^0.2.16":
version "0.2.16"
resolved "https://registry.yarnpkg.com/@kabbouchi/vue-web3/-/vue-web3-0.2.16.tgz#be6af2c1f83350a4fddc1004455d76cd5fe6a436"
integrity sha512-JjZhr8xXj0ugq15ZSDBB29jG+VhOdPlMB+a7szuk6IpU+bdSAK1g02vZir8KP0n5OQuLf3ITxv+bwkClbon/IA==
dependencies:
"@ethersproject/bytes" "^5.4.0"
"@ethersproject/keccak256" "^5.4.0"
"@web3-react/abstract-connector" "^6.0.7"
"@web3-react/types" "^6.0.7"
tiny-invariant "^1.1.0"
vue-demi "^0.11.3"
"@koa/router@^9.0.1":
version "9.4.0"
resolved "https://registry.yarnpkg.com/@koa/router/-/router-9.4.0.tgz#734b64c0ae566eb5af752df71e4143edc4748e48"
@ -1592,17 +1604,17 @@
consola "^2.15.3"
defu "^5.0.0"
"@nuxtjs/composition-api@^0.24.7":
version "0.24.7"
resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.24.7.tgz#76ec3660a03cd7bdb8b85fd31e8dc6a2b7194e8f"
integrity sha512-q633RvsCi3veuGzTSkP/+a55Fn9EZS1APV2GJrdjajnBKKOMNPIXlAC8xAWGcsHE73/Cgf9DfGURQhcFvERRJA==
"@nuxtjs/composition-api@^0.27.0":
version "0.27.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.27.0.tgz#cbe4df6a7306e4a34770fbad5b1ad79717f8fdb7"
integrity sha512-YtQ1KX+ls13zbukII8/vhKskoI1FrngDxegGVW31576qlaiEQUQGpOATF0cGrZ1W7Wgmz3rsAz1CNdSd5FFXOA==
dependencies:
"@vue/composition-api" "1.0.0-rc.14"
"@vue/composition-api" "^1.1.1"
defu "^5.0.0"
estree-walker "^2.0.2"
fs-extra "^9.1.0"
magic-string "^0.25.7"
ufo "^0.7.7"
ufo "^0.7.9"
upath "^2.0.1"
"@nuxtjs/google-fonts@^1.3.0":
@ -2213,10 +2225,10 @@
optionalDependencies:
prettier "^1.18.2"
"@vue/composition-api@1.0.0-rc.14":
version "1.0.0-rc.14"
resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.0.0-rc.14.tgz#4803fbccf3f3c770416e69095010c7bc0c4aa1c3"
integrity sha512-WKbOiy1zk8loM7ma88fOH0yacOEfMIQb0IZJEq561A+4C8GvLSqVSLT5K1iBVkzzJ07Pha8ntbeWSUQlBhRDKg==
"@vue/composition-api@^1.1.1":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.1.4.tgz#b4cd566e575350b86c22fa02632e4a356ac2e26e"
integrity sha512-f618a79X0VepQUoZofaAYzaherBuzfIIYah4gQPcwmXgN3oeuGdhO7DY2s3Rjcw7r9yTEh5sQIowbNWy6INGjg==
dependencies:
tslib "^2.3.0"
@ -2251,6 +2263,17 @@
window-getters "1.0.0"
window-metadata "1.0.0"
"@walletconnect/browser-utils@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.6.5.tgz#01180682e90b95384e820191a1c6ad4a78729439"
integrity sha512-HLTysmlCkc2HN2OS6ewMG0v8E9oY2h9zNaDHe0BLN3ZxnsoMCVzkJxy7ryaXCemVdapmr6HgHFexGJoMbWaC4w==
dependencies:
"@walletconnect/safe-json" "1.0.0"
"@walletconnect/types" "^1.6.5"
"@walletconnect/window-getters" "1.0.0"
"@walletconnect/window-metadata" "1.0.0"
detect-browser "5.2.0"
"@walletconnect/client@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.4.1.tgz#c9c50df5afde23a35e23d96fe6d207c102e53850"
@ -2261,6 +2284,16 @@
"@walletconnect/types" "^1.4.1"
"@walletconnect/utils" "^1.4.1"
"@walletconnect/client@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.6.5.tgz#6616ae926abc7c87c48a2d3693f2eb697858e685"
integrity sha512-dRq1D3NEGwM2I3CpiwFsWy1rrdMKCMSfDUu3rCCXUE4zInx+pyq7IEFjYiSjtOEZzjRlUTqYwhjnYIezQZgh4w==
dependencies:
"@walletconnect/core" "^1.6.5"
"@walletconnect/iso-crypto" "^1.6.5"
"@walletconnect/types" "^1.6.5"
"@walletconnect/utils" "^1.6.5"
"@walletconnect/core@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.4.1.tgz#68310ee7c9737a7a0a7f1308abbfc1c31212b9a6"
@ -2270,6 +2303,39 @@
"@walletconnect/types" "^1.4.1"
"@walletconnect/utils" "^1.4.1"
"@walletconnect/core@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.6.5.tgz#acb687fc7c2d71ce2adad6a921ec1b343c4b4dd7"
integrity sha512-mmMTP8nZunjSCAy0ckafvt/JcdzcuSZPaAybqgKwx2rC9cc/3XWrdNsfiKMt8AFoQF87jGHem3905eFZYTqLXw==
dependencies:
"@walletconnect/socket-transport" "^1.6.5"
"@walletconnect/types" "^1.6.5"
"@walletconnect/utils" "^1.6.5"
"@walletconnect/crypto@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.1.tgz#d4c1b1cd5dd1be88fe9a82dfc54cadbbb3f9d325"
integrity sha512-IgUReNrycIFxkGgq8YT9HsosCkhutakWD9Q411PR0aJfxpEa/VKJeaLRtoz6DvJpztWStwhIHnAbBoOVR72a6g==
dependencies:
"@walletconnect/encoding" "^1.0.0"
"@walletconnect/environment" "^1.0.0"
"@walletconnect/randombytes" "^1.0.1"
aes-js "^3.1.2"
hash.js "^1.1.7"
"@walletconnect/encoding@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.0.tgz#e24190cb5e803526f9dfd7191fb0e4dc53c6d864"
integrity sha512-4nkJFnS0QF5JdieG/3VPD1/iEWkLSZ14EBInLZ00RWxmC6EMZrzAeHNAWIgm+xP3NK0lqz+7lEsmWGtcl5gYnQ==
dependencies:
is-typedarray "1.0.0"
typedarray-to-buffer "3.1.5"
"@walletconnect/environment@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.0.tgz#c4545869fa9c389ec88c364e1a5f8178e8ab5034"
integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ==
"@walletconnect/http-connection@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.4.1.tgz#a36d3645eea2606c876e3824b7d46549bf237833"
@ -2280,6 +2346,16 @@
eventemitter3 "4.0.7"
xhr2-cookies "1.1.0"
"@walletconnect/http-connection@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.6.5.tgz#18529b7556bc09d7c794f4adc76ef0742cd500aa"
integrity sha512-5kr6wZ3DnqaBiwkeA9iKdawvIb3bIJNf8WA8X89YHE5KOzbkAsymjniZWs8asdl9Y9+8ZHJMPXtylyrkpT8wXA==
dependencies:
"@walletconnect/types" "^1.6.5"
"@walletconnect/utils" "^1.6.5"
eventemitter3 "4.0.7"
xhr2-cookies "1.1.0"
"@walletconnect/iso-crypto@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.4.1.tgz#0d9793c679d6c5443c49cce83f5d8dd476a65df2"
@ -2289,6 +2365,30 @@
"@walletconnect/types" "^1.4.1"
"@walletconnect/utils" "^1.4.1"
"@walletconnect/iso-crypto@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.6.5.tgz#1c6471506283817e7e797c5e2e733f6c3d88f8dc"
integrity sha512-145VRX1+gudhHrnT2s81lLW/BEu3QgFMMRCrkxx9Tsl5JiLGcGbWkMxAl8zjGTMqnHeuQngyjvY1mO+3z27a7A==
dependencies:
"@walletconnect/crypto" "^1.0.1"
"@walletconnect/types" "^1.6.5"
"@walletconnect/utils" "^1.6.5"
"@walletconnect/jsonrpc-types@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.0.tgz#fa75ad5e8f106a2e33287b1e6833e22ed0225055"
integrity sha512-11QXNq5H1PKZk7bP8SxgmCw3HRaDuPOVE+wObqEvmhc7OWYUZqfuaaMb+OXGRSOHL3sbC+XHfdeCxFTMXSFyng==
dependencies:
keyvaluestorage-interface "^1.0.0"
"@walletconnect/jsonrpc-utils@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.0.tgz#1a2f668d606e8f0b6e7d8fdebae86001bd037a3f"
integrity sha512-qUHbKUK6sHeHn67qtHZoLoYk5hS6x1arTPjKDRkY93/6Fx+ZmNIpdm1owX3l6aYueyegJ7mz43FpvYHUqJ8xcw==
dependencies:
"@walletconnect/environment" "^1.0.0"
"@walletconnect/jsonrpc-types" "^1.0.0"
"@walletconnect/mobile-registry@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5"
@ -2305,6 +2405,32 @@
preact "10.4.1"
qrcode "1.4.4"
"@walletconnect/qrcode-modal@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.6.5.tgz#58974ca8f826bd500121e85694dd342b3535cf2c"
integrity sha512-XII/Pm7zS5pRxrakURuhbWO+SfwgOuLuvOBk/hr1ATK/y7R5p19P62mCSUrvSxHXca27IX1tZJRe9D161R0WgQ==
dependencies:
"@walletconnect/browser-utils" "^1.6.5"
"@walletconnect/mobile-registry" "^1.4.0"
"@walletconnect/types" "^1.6.5"
copy-to-clipboard "^3.3.1"
preact "10.4.1"
qrcode "1.4.4"
"@walletconnect/randombytes@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.1.tgz#87f0f02d9206704ce1c9e23f07d3b28898c48385"
integrity sha512-YJTyq69i0PtxVg7osEpKfvjTaWuAsR49QEcqGKZRKVQWMbGXBZ65fovemK/SRgtiFRv0V8PwsrlKSheqzfPNcg==
dependencies:
"@walletconnect/encoding" "^1.0.0"
"@walletconnect/environment" "^1.0.0"
randombytes "^2.1.0"
"@walletconnect/safe-json@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2"
integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==
"@walletconnect/socket-transport@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.4.1.tgz#d9b7ebb9a2843cc44cf96c880c62be78d4a1625f"
@ -2314,11 +2440,25 @@
"@walletconnect/utils" "^1.4.1"
ws "7.3.0"
"@walletconnect/socket-transport@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.6.5.tgz#f190f2d994021287fdeaf071114a5415096b2535"
integrity sha512-FRlgBr3EIxD3du5l/tuK6jdiva85YeRG+iZmo/RPnlVw4opy74WXb5JdCK9jXLcBEoDiY9Hz4j69aqnht6gIDQ==
dependencies:
"@walletconnect/types" "^1.6.5"
"@walletconnect/utils" "^1.6.5"
ws "7.5.3"
"@walletconnect/types@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.4.1.tgz#48297238b86f846b8c694504ca45f0059a2cca88"
integrity sha512-lzS9NbXjVb5N+W/UnCZAflxjLtYepUi4ev1IeFozSvr/cWxAhEe/sjixe7WEIpYklW27kfBhKccMH/KjUoRC7w==
"@walletconnect/types@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.6.5.tgz#31ad1415fc6e1e89e25a10ad5fed6958f56cefa8"
integrity sha512-S9DsODI35PbIDuOSkIiF8SzTstqCqX/4+kV7n18vyukEFPlpSSHwZMwJUfzo9yJ0pqsqLNZta+jvb88gJRuAaA==
"@walletconnect/utils@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.4.1.tgz#86108470c211a02609274a6c7bbd516c5182a22e"
@ -2332,6 +2472,19 @@
js-sha3 "0.8.0"
query-string "6.13.5"
"@walletconnect/utils@^1.6.5":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.6.5.tgz#6edd749cb52a363feda117121dc865d7cc6169f7"
integrity sha512-QB5rn/1s0PKVitAQ2/mgWbay2XfN21y3ob+5g6IhxtJRW31bbMoZw5YfO6s4ixLaZZez5LNQXstvQAclRzB7jQ==
dependencies:
"@walletconnect/browser-utils" "^1.6.5"
"@walletconnect/encoding" "^1.0.0"
"@walletconnect/jsonrpc-utils" "^1.0.0"
"@walletconnect/types" "^1.6.5"
bn.js "4.11.8"
js-sha3 "0.8.0"
query-string "6.13.5"
"@walletconnect/web3-provider@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.4.1.tgz#34f6319ab2473ab9ff0fcf1e8bc280c697fa01ff"
@ -2344,6 +2497,61 @@
"@walletconnect/utils" "^1.4.1"
web3-provider-engine "16.0.1"
"@walletconnect/web3-provider@^1.5.0":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.6.5.tgz#7c4ac2f89ddda1a4069d500ed29cc4396e7fdade"
integrity sha512-SeC7+1saHxvFn2wjt/3F0sTkDemHDNDbMkdZ3jtA7vjEw91Q0CmaYIuZk2UxyVM+tC1jL1l4yci/sgaFeAcXpQ==
dependencies:
"@walletconnect/client" "^1.6.5"
"@walletconnect/http-connection" "^1.6.5"
"@walletconnect/qrcode-modal" "^1.6.5"
"@walletconnect/types" "^1.6.5"
"@walletconnect/utils" "^1.6.5"
web3-provider-engine "16.0.1"
"@walletconnect/window-getters@1.0.0", "@walletconnect/window-getters@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8"
integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==
"@walletconnect/window-metadata@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5"
integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==
dependencies:
"@walletconnect/window-getters" "^1.0.0"
"@web3-react/abstract-connector@^6.0.7":
version "6.0.7"
resolved "https://registry.yarnpkg.com/@web3-react/abstract-connector/-/abstract-connector-6.0.7.tgz#401b3c045f1e0fab04256311be49d5144e9badc6"
integrity sha512-RhQasA4Ox8CxUC0OENc1AJJm8UTybu/oOCM61Zjg6y0iF7Z0sqv1Ai1VdhC33hrQpA8qSBgoXN9PaP8jKmtdqg==
dependencies:
"@web3-react/types" "^6.0.7"
"@web3-react/injected-connector@^6.0.7":
version "6.0.7"
resolved "https://registry.yarnpkg.com/@web3-react/injected-connector/-/injected-connector-6.0.7.tgz#1e0be23f51fa07fe6547fe986768a46b74c3a426"
integrity sha512-Y7aJSz6pg+MWKtvdyuqyy6LWuH+4Tqtph1LWfiyVms9II9ar/9B/de4R8wh4wjg91wmHkU+D75yP09E/Soh2RA==
dependencies:
"@web3-react/abstract-connector" "^6.0.7"
"@web3-react/types" "^6.0.7"
tiny-warning "^1.0.3"
"@web3-react/types@^6.0.7":
version "6.0.7"
resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-6.0.7.tgz#34a6204224467eedc6123abaf55fbb6baeb2809f"
integrity sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A==
"@web3-react/walletconnect-connector@^6.2.4":
version "6.2.4"
resolved "https://registry.yarnpkg.com/@web3-react/walletconnect-connector/-/walletconnect-connector-6.2.4.tgz#0a128699fc93ddac885935f4aeca32925f6285f0"
integrity sha512-IEVjCXrlcfVa6ggUBEyKtLRaLQuZGtT2lGuzOFtdbJJkN84u1++pzzeDrcsVhKAoS5wq33zyJT9baEbG1Aed8g==
dependencies:
"@walletconnect/web3-provider" "^1.5.0"
"@web3-react/abstract-connector" "^6.0.7"
"@web3-react/types" "^6.0.7"
tiny-invariant "^1.0.6"
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
@ -3949,6 +4157,13 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
copy-to-clipboard@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae"
integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==
dependencies:
toggle-selection "^1.0.6"
core-js-compat@^3.12.1, core-js-compat@^3.14.0, core-js-compat@^3.15.0:
version "3.15.2"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb"
@ -11050,6 +11265,16 @@ tiny-emitter@^2.0.0:
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
tiny-invariant@^1.0.6, tiny-invariant@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==
tiny-warning@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@ -11111,6 +11336,11 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
toggle-selection@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI=
toidentifier@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
@ -11227,11 +11457,16 @@ ua-parser-js@^0.7.28:
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31"
integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==
ufo@^0.7.4, ufo@^0.7.5, ufo@^0.7.7:
ufo@^0.7.4, ufo@^0.7.5:
version "0.7.7"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.7.tgz#0062f9e5e790819b0fb23ca24d7c63a4011c036a"
integrity sha512-N25aY3HBkJBnahm+2l4JRBBrX5I+JPakF/tDHYDTjd3wUR7iFLdyiPhj8mBwBz21v728BKwM9L9tgBfCntgdlw==
ufo@^0.7.9:
version "0.7.9"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.9.tgz#0268e3734b413c9ed6f3510201f42372821b875c"
integrity sha512-6t9LrLk3FhqTS+GW3IqlITtfRB5JAVr5MMNjpBECfK827W+Vh5Ilw/LhTcHWrt6b3hkeBvcbjx4Ti7QVFzmcww==
uglify-js@^3.5.1:
version "3.13.10"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.10.tgz#a6bd0d28d38f592c3adb6b180ea6e07e1e540a8d"
@ -11569,6 +11804,11 @@ vue-demi@*:
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.11.2.tgz#faa06da53887c493a695b997f4fcb4784a667990"
integrity sha512-J+X8Au6BhQdcej6LY4O986634hZLu55L0ewU2j8my7WIKlu8cK0dqmdUxqVHHMd/cMrKKZ9SywB/id6aLhwCtA==
vue-demi@^0.11.3:
version "0.11.3"
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.11.3.tgz#dd7495b92b495ecfa35675bf024b1358a7add150"
integrity sha512-DpM0TTMpclRZDV6AIacgg837zrim/C9Zn+2ztXBs9hsESJN9vC83ztjTe4KC4HgJuVle8YUjPp7HTwWtwOHfmg==
vue-hot-reload-api@^2.3.0:
version "2.3.4"
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
@ -12217,6 +12457,11 @@ ws@7.3.0:
resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd"
integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==
ws@7.5.3, ws@^7.3.1:
version "7.5.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==
ws@^3.0.0:
version "3.3.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
@ -12233,11 +12478,6 @@ ws@^5.1.1:
dependencies:
async-limiter "~1.0.0"
ws@^7.3.1:
version "7.5.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==
xhr-request-promise@^0.1.2:
version "0.1.3"
resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c"