diff --git a/package-lock.json b/package-lock.json
index e1c48c99..82fd0803 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,7 +10,7 @@
"license": "GPL",
"dependencies": {
"@chenfengyuan/vue-qrcode": "^2.0.0",
- "@edge/account-utils": "^0.4.1",
+ "@edge/account-utils": "github:edge/account-utils#feature/vpn",
"@edge/cache-config": "^1.1.0",
"@edge/index-utils": "^0.6.2",
"@headlessui/vue": "^1.7.3",
@@ -1882,8 +1882,8 @@
},
"node_modules/@edge/account-utils": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@edge/account-utils/-/account-utils-0.4.1.tgz",
- "integrity": "sha512-3NDXXR3B/518yVVOEhFLtyi179m4IyS3EbK9WAATC5BElnwKoF3DtZtJaRaMdRvdyAgjpAnrtPBIsWI+yo/cbQ==",
+ "resolved": "git+ssh://git@github.com/edge/account-utils.git#f5fb45ab1be29b722b43625dbba937735a71a794",
+ "license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
"@edge/cache-config": "^1.1.0",
"@edge/xe-utils": "^1.11.1",
@@ -15412,9 +15412,8 @@
"requires": {}
},
"@edge/account-utils": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@edge/account-utils/-/account-utils-0.4.1.tgz",
- "integrity": "sha512-3NDXXR3B/518yVVOEhFLtyi179m4IyS3EbK9WAATC5BElnwKoF3DtZtJaRaMdRvdyAgjpAnrtPBIsWI+yo/cbQ==",
+ "version": "git+ssh://git@github.com/edge/account-utils.git#f5fb45ab1be29b722b43625dbba937735a71a794",
+ "from": "@edge/account-utils@github:edge/account-utils#feature/vpn",
"requires": {
"@edge/cache-config": "^1.1.0",
"@edge/xe-utils": "^1.11.1",
diff --git a/package.json b/package.json
index fc62592f..c409fc8a 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
"main": "server/index.js",
"dependencies": {
"@chenfengyuan/vue-qrcode": "^2.0.0",
- "@edge/account-utils": "^0.4.1",
+ "@edge/account-utils": "github:edge/account-utils#feature/vpn",
"@edge/cache-config": "^1.1.0",
"@edge/index-utils": "^0.6.2",
"@headlessui/vue": "^1.7.3",
diff --git a/src/components/MobileNavigation.vue b/src/components/MobileNavigation.vue
index 819f4ed9..ac6cde43 100644
--- a/src/components/MobileNavigation.vue
+++ b/src/components/MobileNavigation.vue
@@ -51,6 +51,11 @@ export default {
link: '/servers',
text: 'Servers'
},
+ {
+ _key: 'gpu',
+ link: '/gpus',
+ text: 'GPUs'
+ },
{
_key: 'dns',
link: '/domains',
diff --git a/src/components/SideNavigation.vue b/src/components/SideNavigation.vue
index 3777863f..d6315fd0 100644
--- a/src/components/SideNavigation.vue
+++ b/src/components/SideNavigation.vue
@@ -34,6 +34,16 @@ export default {
link: '/servers',
text: 'Servers'
},
+ {
+ _key: 'gpu',
+ link: '/gpus',
+ text: 'GPUs'
+ },
+ {
+ _key: 'vpn',
+ link: '/vpns',
+ text: 'VPN'
+ },
{
_key: 'dns',
link: '/domains',
diff --git a/src/components/UserMenu.vue b/src/components/UserMenu.vue
index 957885b3..c76028cc 100644
--- a/src/components/UserMenu.vue
+++ b/src/components/UserMenu.vue
@@ -28,7 +28,7 @@
- Add an email address .
+ Add an email address .
Your email address is {{ accountEmail }} .
- You can change your email address if you need to.
+ You can change your email address if you need to.
diff --git a/src/components/billing/PaymentCards.vue b/src/components/billing/PaymentCards.vue
index 0363789d..dc55ef3b 100644
--- a/src/components/billing/PaymentCards.vue
+++ b/src/components/billing/PaymentCards.vue
@@ -101,7 +101,7 @@
View your wallet to start funding your account manually.
- Enable Crypto View to start funding your account manually.
+ Enable Crypto View to start funding your account manually.
diff --git a/src/components/billing/Wallet.vue b/src/components/billing/Wallet.vue
index 6a1ec4c6..fc43eb09 100644
--- a/src/components/billing/Wallet.vue
+++ b/src/components/billing/Wallet.vue
@@ -108,7 +108,7 @@ async function startPurchase() {
You're currently using the crypto view, which provides comprehensive visibility of your wallet and transactions on the XE blockchain.
This page enables you to manage your account balance directly using XE.
If you're new to cryptocurrency, you can learn more about XE on the Edge Wiki .
- Alternatively, if you prefer a more streamlined interface, you can disable the crypto view .
+ Alternatively, if you prefer a more streamlined interface, you can disable the crypto view .
diff --git a/src/components/server/ServerPowerToggle.vue b/src/components/server/ServerPowerToggle.vue
index c19173b6..a350d21a 100644
--- a/src/components/server/ServerPowerToggle.vue
+++ b/src/components/server/ServerPowerToggle.vue
@@ -55,7 +55,7 @@ import { mapGetters, mapState } from 'vuex'
export default {
name: 'ServerPowerToggle',
- props: ['activeTasks', 'disableActions', 'server'],
+ props: ['disableActions', 'server'],
data() {
return {
showConfirmationModal: false,
@@ -71,6 +71,9 @@ export default {
computed: {
...mapGetters(['balanceSuspend']),
...mapState(['session']),
+ activeTasks() {
+ return this.$store.getters.tasksByServerId(this.serverId)
+ },
destroying() {
return this.activeTasks.some(task => task.action === 'destroy')
},
diff --git a/src/layout/EditableTitle.vue b/src/layout/EditableTitle.vue
new file mode 100644
index 00000000..a33c6b40
--- /dev/null
+++ b/src/layout/EditableTitle.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/ErrorV2.vue b/src/layout/ErrorV2.vue
new file mode 100644
index 00000000..1bfebdcd
--- /dev/null
+++ b/src/layout/ErrorV2.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
diff --git a/src/layout/PowerToggle.vue b/src/layout/PowerToggle.vue
new file mode 100644
index 00000000..427d4cd4
--- /dev/null
+++ b/src/layout/PowerToggle.vue
@@ -0,0 +1,46 @@
+
+
+
+
+ Status
+
+
+
+
+
+ {{ onText || 'ON' }}
+
+
+
+
+
+ {{ offText || 'OFF' }}
+
+
+
+
+
+
diff --git a/src/layout/Slider.vue b/src/layout/Slider.vue
new file mode 100644
index 00000000..68871cb9
--- /dev/null
+++ b/src/layout/Slider.vue
@@ -0,0 +1,60 @@
+
+
+
+
+ {{ title }}
+ emit('change', val)"
+ />
+
+
+
+
diff --git a/src/modules/gpu/components/GPUDestroyPanel.vue b/src/modules/gpu/components/GPUDestroyPanel.vue
new file mode 100644
index 00000000..f7761e51
--- /dev/null
+++ b/src/modules/gpu/components/GPUDestroyPanel.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
Destroy GPU
+
This is irreversible. All data will be irretrievable.
+
Upon destruction, you will no longer be billed for this GPU.
+
+
+
+ Destroying
+
+
+ Destroy this GPU
+
+
+
+
+
+
+
+
+
+
+
+ Destroy {{ gpu.name }}
+
+
+ Warning: this cannot be undone.
+
+
All data will be lost and cannot be recovered
+ Server will be powered off immediately
+ IP Address will be unassigned
+
+
+
+
+ Cancel
+
+
+ Yes, Destroy GPU
+
+
+
+
+
diff --git a/src/modules/gpu/components/GPUOverviewPanel.vue b/src/modules/gpu/components/GPUOverviewPanel.vue
new file mode 100644
index 00000000..d776129b
--- /dev/null
+++ b/src/modules/gpu/components/GPUOverviewPanel.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
Details
+
+
+
+
+ Name {{ gpu.name }}
+
+
+ Hostname {{ gpu.hostname }}
+
+
+
IP Address
+
+
{{ gpu.ipAddress }}
+
+
+
+
Copied!
+
+
+
+
+
+ Status
+
+
+
+
+
+ Created
+ {{ gpu.created }}
+
+
+
+
+
+
+
GPU specs
+
+
+
+ GPU Model
+ {{ gpu.gpuModel }}
+
+
+ GPU
+ {{ gpu.gpuCount }}
+
+
+ vCPUs
+ {{ gpu.cpuCount }}
+
+
+ RAM
+ {{ gpu.memoryGiB }}
+
+
+ Disk
+ {{ gpu.diskGiB }}
+
+
+
+
+
+
+
diff --git a/src/modules/gpu/components/GPUSelect.vue b/src/modules/gpu/components/GPUSelect.vue
new file mode 100644
index 00000000..0975d722
--- /dev/null
+++ b/src/modules/gpu/components/GPUSelect.vue
@@ -0,0 +1,132 @@
+
+
+
+
+ GPU Model
+
+
+
+
+
+
+ {{ gpu.modelName }}
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/gpu/views/GPUDeploy.vue b/src/modules/gpu/views/GPUDeploy.vue
new file mode 100644
index 00000000..3573f5c0
--- /dev/null
+++ b/src/modules/gpu/views/GPUDeploy.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
Deploy a new Edge GPU
+
+
+
+
diff --git a/src/modules/gpu/views/GPUDetail.vue b/src/modules/gpu/views/GPUDetail.vue
new file mode 100644
index 00000000..80035990
--- /dev/null
+++ b/src/modules/gpu/views/GPUDetail.vue
@@ -0,0 +1,440 @@
+
+
+
+
+
+
Destroy GPU
+
Your GPU and backups have been successfully deleted.
+
+ Return to GPUs
+
+
+
+
Destroy GPU
+
+ Destroying {{ gpu && gpu.name }}
+
+
+
+
+
+
+
+
+
+
+
+
Error
+
+
{{ error.message }}
+
+ Return to Edge GPUs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ gpu.gpuModel }}
+
+
+
+ {{ gpu.gpuCount }} GPU
+
+ {{ gpu.cpuCount }} vCPU
+
+ {{ gpu.diskGiB }} Disk
+
+ {{ gpu.memoryGiB }} RAM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Overview
+
+
+ Destroy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
GPU not found
+
+
This GPU does not exist or has been destroyed.
+
+ Return to Edge GPUs
+
+
+
+
+
+
+
diff --git a/src/modules/gpu/views/GPUList.vue b/src/modules/gpu/views/GPUList.vue
new file mode 100644
index 00000000..11b10c9f
--- /dev/null
+++ b/src/modules/gpu/views/GPUList.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
Edge GPUs
+
+ Deploy GPU
+
+
+
+
+
+
+
+
+
+
You haven't deployed any GPUs yet. Once you deploy your first GPU it will be available here.
+
+ Deploy GPU
+
+
+
+
+
diff --git a/src/modules/settings/components/APIKeysPanel.vue b/src/modules/settings/components/APIKeysPanel.vue
new file mode 100644
index 00000000..660fedee
--- /dev/null
+++ b/src/modules/settings/components/APIKeysPanel.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+ Loading
+
+
+
+
+
+
+
+
Your new API key
+
+ {{ generatedKey.secret }}
+
+
+
+
+
+ Copy this API key to a safe place.
+ This key's ID is {{ generatedKey.id }}.
+
+
+ I confirm have stored my API key in a safe place
+
+
+
+
+
+ Generate API Key
+
+
+
+
+
+
+
+
You haven't created any API keys yet.
+
+ Generate API Key
+
+
+
+
+
+
+
+
diff --git a/src/modules/settings/components/AccountPanel.vue b/src/modules/settings/components/AccountPanel.vue
new file mode 100644
index 00000000..3008d894
--- /dev/null
+++ b/src/modules/settings/components/AccountPanel.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
Account Number
+
Write down your account number and keep it secret. You can use your account number to sign into the account.
+
+
+
+ {{ accountNumber }}
+
+
+
+
+
+
+
+
+
+
+
+
Two-factor Authentication (2FA)
+
+
+
+
+ {{ showAddTwoFactor ? 'Return to remove existing 2FA code' : 'Add extra 2FA code' }}
+
+
+
+
+
diff --git a/src/modules/settings/components/CryptoPaymentsPanel.vue b/src/modules/settings/components/CryptoPaymentsPanel.vue
new file mode 100644
index 00000000..f3e9eed5
--- /dev/null
+++ b/src/modules/settings/components/CryptoPaymentsPanel.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
Crypto Payments
+
+ Edge runs on its own layer 0 blockchain, and payments are settled in its own coin, called XE, in the background.
+ By default payment information in the account interface is presented in fiat.
+ If you would prefer to see payment information in crypto, you can enable it here.
+
+
Disable Crypto Payments
+
Enable Crypto Payments
+
+
diff --git a/src/modules/settings/views/SettingsView.vue b/src/modules/settings/views/SettingsView.vue
new file mode 100644
index 00000000..6a518f6a
--- /dev/null
+++ b/src/modules/settings/views/SettingsView.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
Settings
+
+
+
+
+
+
+
+ Account
+
+
+ API Keys
+
+
+ Crypto Payments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/vpns/components/MultiuserToggle.vue b/src/modules/vpns/components/MultiuserToggle.vue
new file mode 100644
index 00000000..a0296bc6
--- /dev/null
+++ b/src/modules/vpns/components/MultiuserToggle.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Single-user VPN
+
+
+ Ideal for individual use.
+
+
+
+
+
+
+
+
+
+
+
+
+ Multi-user VPN
+
+
+ Multi-user VPN includes up to five users. You can pay for additional users.
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/vpns/components/SpeedSlider.vue b/src/modules/vpns/components/SpeedSlider.vue
new file mode 100644
index 00000000..5ee4cc97
--- /dev/null
+++ b/src/modules/vpns/components/SpeedSlider.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
diff --git a/src/modules/vpns/components/VPNOverview.vue b/src/modules/vpns/components/VPNOverview.vue
new file mode 100644
index 00000000..6145d5f4
--- /dev/null
+++ b/src/modules/vpns/components/VPNOverview.vue
@@ -0,0 +1,273 @@
+
+
+
+
VPN details
+
+
+
+
+ VPN Name {{ vpn.name }}
+
+
+ Hostname {{ server.settings.domain }}
+
+
+
IP Address
+
+
{{ server.network.ip[0] }}
+
+
+
+
Copied!
+
+
+
+ Region
+ {{ region ? region.name : 'Unknown' }}
+
+
+
+
+
+ Status
+
+
+
+
+ OS {{ server.settings.os.version }}
+
+
+ Created {{ created }}
+
+
+ Last Updated {{ updated }}
+
+
+
+
+
+
VPN specs
+
+
+ Type
+ Multiuser
+ Single-user
+
+
+ Speed
+ Fastest
+ Faster
+ Fast
+
+
+
+
+
Cost
+
+
+
+ Hourly ${{ formattedHourlyCost }}
+
+
+ Daily ${{ formattedDailyCost }}
+
+
+
+
+
+
+
+
diff --git a/src/modules/vpns/components/VPNSettings.vue b/src/modules/vpns/components/VPNSettings.vue
new file mode 100644
index 00000000..4dd34164
--- /dev/null
+++ b/src/modules/vpns/components/VPNSettings.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
VPN Settings
+
+
+
+
+
+
+
+
+
You are unable to increase this VPN's specs while your available balance is below ${{ balance.threshold.warning.usd }}. Please add funds or set up Pay by Credit Card to enable this service.
+
+
+
+
+ Updating
+ Update
+
+
+
+
+
+
+
+
+ We're over capacity
+ It appears that we are at capacity in this region. We're working hard to increase this. Please check back soon.
+
+
+ Something went wrong
+ There was an issue while deploying this VPN. Please try again, or contact support@edge.network if the issue persists.
+
+
+
+
+
+
+
+
+ Update {{ vpn.name }}
+
+
+
+ Warning: VPN will be powered off while updating.
+
+
+
Your VPN was updated less than one hour ago. If you continue to update it again, you will be charged a full hour for the previous settings.
+ Cost will {{ costs.increased ? 'increase' : 'decrease' }} from {{ formatCost(costs.current30d) }} to {{ formatCost(costs.new30d) }} per 30 days.
+
+
+
+
+ Cancel
+
+
+ Yes, Update VPN
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/vpns/views/DeployVPN.vue b/src/modules/vpns/views/DeployVPN.vue
new file mode 100644
index 00000000..9acf5f64
--- /dev/null
+++ b/src/modules/vpns/views/DeployVPN.vue
@@ -0,0 +1,262 @@
+
+
+
+
+
+
+
diff --git a/src/modules/vpns/views/VPN.vue b/src/modules/vpns/views/VPN.vue
new file mode 100644
index 00000000..ac5491fd
--- /dev/null
+++ b/src/modules/vpns/views/VPN.vue
@@ -0,0 +1,366 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ server.settings.os.version }}
+
+
+
+ Multiuser
+ Single-user
+
+
+ Fastest
+ Faster
+ Fast
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
VPN Destroyed
+
This VPN and all of its associated backups have been destroyed.
+
+ Return to VPNs
+
+
+
+
+
+
+
+
Server Crashed
+
There was a problem with your VPN, please either delete and re-deploy the VPN or contact support@edge.network for assistance.
+
+
+ Destroying
+
+
+ Destroy VPN
+
+
+
+
+
+
+
+
+
+
+ Deploying your new VPN
+ Destroying your VPN
+ Resizing your VPN
+ Restoring your VPN backup
+
+
This may take a few minutes. Feel free to close this page.
+
+
+
+
+
+
+
+
+
+ Overview
+
+
+
+
+ Metrics
+
+
+
+
+ Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/vpns/views/VPNs.vue b/src/modules/vpns/views/VPNs.vue
new file mode 100644
index 00000000..338b2d75
--- /dev/null
+++ b/src/modules/vpns/views/VPNs.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+
Edge VPN
+
+ Deploy VPN
+
+
+
+
+ There was a problem loading your VPNs. Please try again or contact support for assistance.
+
+
+
+
+
+
+
+
+
You haven't deployed any VPNs yet. Once you deploy your first VPN it will be available here.
+
+ Deploy VPN
+
+
+
+
+
+
+
+
diff --git a/src/router/index.js b/src/router/index.js
index bc93f410..8724286b 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -5,7 +5,6 @@
/* global process */
import * as utils from '@edge/account-utils'
-import Account from '@/views/dashboard/Account'
import BareMetal from '../modules/bareMetals/views/BareMetal.vue'
import BareMetals from '../modules/bareMetals/views/BareMetals.vue'
import Billing from '@/views/dashboard/Billing'
@@ -14,6 +13,7 @@ import CdnIntegration from '@/views/dashboard/CdnIntegration'
import CdnIntegrations from '@/views/dashboard/CdnIntegrations'
import CreateAccount from '@/views/landing/CreateAccount'
import Dashboard from '@/views/Dashboard'
+import DeployVPN from '../modules/vpns/views/DeployVPN.vue'
import Domain from '@/views/dashboard/Domain'
import Domains from '@/views/dashboard/Domains'
import GettingStarted from '@/views/dashboard/GettingStarted'
@@ -40,6 +40,8 @@ import Storage from '@/views/dashboard/Storage'
import StorageDeploy from '@/views/dashboard/StorageDeploy'
import StorageIntegration from '@/views/dashboard/StorageIntegration'
import Support from '@/views/dashboard/Support'
+import VPN from '../modules/vpns/views/VPN.vue'
+import VPNs from '../modules/vpns/views/VPNs.vue'
import Wallet from '@/components/billing/Wallet'
import store from '@/store'
import { createRouter, createWebHistory } from 'vue-router'
@@ -56,11 +58,6 @@ const routes = [
name: 'Index',
component: Index
},
- {
- path: 'account',
- name: 'Account',
- component: Account
- },
{
path: 'bare-metals',
name: 'Bare Metals',
@@ -138,6 +135,21 @@ const routes = [
name: 'Getting Started',
component: GettingStarted
},
+ {
+ path: 'gpus',
+ name: 'GPUs',
+ component: () => import('../modules/gpu/views/GPUList.vue')
+ },
+ {
+ path: 'gpus/deploy',
+ name: 'Deploy GPU',
+ component: () => import('../modules/gpu/views/GPUDeploy.vue')
+ },
+ {
+ path: 'gpu/:id',
+ name: 'GPU',
+ component: () => import('../modules/gpu/views/GPUDetail.vue')
+ },
{
path: 'notifications',
name: 'Notifications',
@@ -178,6 +190,11 @@ const routes = [
name: 'Server',
component: Server
},
+ {
+ path: 'settings',
+ name: 'Settings',
+ component: () => import('../modules/settings/views/SettingsView.vue')
+ },
{
path: 'shield',
name: 'Shield',
@@ -202,6 +219,21 @@ const routes = [
path: '/support',
name: 'Support',
component: Support
+ },
+ {
+ path: '/vpns',
+ name: 'VPNs',
+ component: VPNs
+ },
+ {
+ path: '/vpns/deploy',
+ name: 'Deploy VPN',
+ component: DeployVPN
+ },
+ {
+ path: '/vpn/:id',
+ name: 'VPN',
+ component: VPN
}
]
},
diff --git a/src/utils/validation.js b/src/utils/validation.js
index e9579f5b..cecde5f8 100644
--- a/src/utils/validation.js
+++ b/src/utils/validation.js
@@ -10,6 +10,11 @@ import { email as _email, required as _required, helpers, or } from '@vuelidate/
*/
export const required = helpers.withMessage('A value is required.', _required)
+export const oneOf = values => {
+ const message = `Must be one of "${values.join('", "')}"`
+ return helpers.withMessage(message, value => values.includes(value))
+}
+
/**
* Account number validator.
*/
diff --git a/src/views/dashboard/Account.vue b/src/views/dashboard/Account.vue
deleted file mode 100644
index 33542910..00000000
--- a/src/views/dashboard/Account.vue
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
Account
-
-
-
Account Number
-
Write down your account number and keep it secret. You can use your account number to sign into the account.
-
-
-
- {{ formattedAccountNumber }}
- {{ formattedAccountNumberMasked }}
-
-
-
-
-
-
-
-
-
-
Two-factor Authentication (2FA)
-
-
-
-
- {{ showAddExtra2FA ? 'Return to remove existing 2FA code' : 'Add extra 2FA code' }}
-
-
-
-
-
-
Crypto Payments
-
- Edge runs on its own layer 0 blockchain, and payments are settled in its own coin, called XE, in the background.
- By default payment information in the account interface is presented in fiat.
- If you would prefer to see payment information in crypto, you can enable it here.
-
-
Disable Crypto Payments
-
Enable Crypto Payments
-
-
-
-
-
-
diff --git a/src/views/dashboard/Server.vue b/src/views/dashboard/Server.vue
index 0bdc3ba4..65135c5f 100644
--- a/src/views/dashboard/Server.vue
+++ b/src/views/dashboard/Server.vue
@@ -59,11 +59,7 @@
-
+