feat(walletconnect): initial code organization

Closes #14395
This commit is contained in:
Sale Djenic 2024-04-10 22:56:10 +02:00 committed by Stefan Dunca
parent 0146db8da8
commit dd104960ba
51 changed files with 991 additions and 305 deletions

View File

@ -1,49 +1,50 @@
import NimQml, sequtils, sugar, chronicles, uuids
import ../../app_service/service/general/service as general_service
import ../../app_service/service/keychain/service as keychain_service
import ../../app_service/service/keycard/service as keycard_service
import ../../app_service/service/accounts/service as accounts_service
import ../../app_service/service/contacts/service as contacts_service
import ../../app_service/service/language/service as language_service
import ../../app_service/service/chat/service as chat_service
import ../../app_service/service/community/service as community_service
import ../../app_service/service/message/service as message_service
import ../../app_service/service/token/service as token_service
import ../../app_service/service/collectible/service as collectible_service
import ../../app_service/service/currency/service as currency_service
import ../../app_service/service/transaction/service as transaction_service
import ../../app_service/service/wallet_account/service as wallet_account_service
import ../../app_service/service/bookmarks/service as bookmark_service
import ../../app_service/service/dapp_permissions/service as dapp_permissions_service
import ../../app_service/service/privacy/service as privacy_service
import ../../app_service/service/provider/service as provider_service
import ../../app_service/service/node/service as node_service
import ../../app_service/service/profile/service as profile_service
import ../../app_service/service/settings/service as settings_service
import ../../app_service/service/stickers/service as stickers_service
import ../../app_service/service/about/service as about_service
import ../../app_service/service/node_configuration/service as node_configuration_service
import ../../app_service/service/network/service as network_service
import ../../app_service/service/activity_center/service as activity_center_service
import ../../app_service/service/saved_address/service as saved_address_service
import ../../app_service/service/devices/service as devices_service
import ../../app_service/service/mailservers/service as mailservers_service
import ../../app_service/service/gif/service as gif_service
import ../../app_service/service/ens/service as ens_service
import ../../app_service/service/community_tokens/service as tokens_service
import ../../app_service/service/network_connection/service as network_connection_service
import ../../app_service/service/shared_urls/service as shared_urls_service
import app_service/service/general/service as general_service
import app_service/service/keychain/service as keychain_service
import app_service/service/keycard/service as keycard_service
import app_service/service/accounts/service as accounts_service
import app_service/service/contacts/service as contacts_service
import app_service/service/language/service as language_service
import app_service/service/chat/service as chat_service
import app_service/service/community/service as community_service
import app_service/service/message/service as message_service
import app_service/service/token/service as token_service
import app_service/service/collectible/service as collectible_service
import app_service/service/currency/service as currency_service
import app_service/service/transaction/service as transaction_service
import app_service/service/wallet_account/service as wallet_account_service
import app_service/service/wallet_connect/service as wallet_connect_service
import app_service/service/bookmarks/service as bookmark_service
import app_service/service/dapp_permissions/service as dapp_permissions_service
import app_service/service/privacy/service as privacy_service
import app_service/service/provider/service as provider_service
import app_service/service/node/service as node_service
import app_service/service/profile/service as profile_service
import app_service/service/settings/service as settings_service
import app_service/service/stickers/service as stickers_service
import app_service/service/about/service as about_service
import app_service/service/node_configuration/service as node_configuration_service
import app_service/service/network/service as network_service
import app_service/service/activity_center/service as activity_center_service
import app_service/service/saved_address/service as saved_address_service
import app_service/service/devices/service as devices_service
import app_service/service/mailservers/service as mailservers_service
import app_service/service/gif/service as gif_service
import app_service/service/ens/service as ens_service
import app_service/service/community_tokens/service as tokens_service
import app_service/service/network_connection/service as network_connection_service
import app_service/service/shared_urls/service as shared_urls_service
import ../modules/shared_modules/keycard_popup/module as keycard_shared_module
import ../modules/startup/module as startup_module
import ../modules/main/module as main_module
import ../core/notifications/notifications_manager
import ../../constants as main_constants
import app/modules/shared_modules/keycard_popup/module as keycard_shared_module
import app/modules/startup/module as startup_module
import app/modules/main/module as main_module
import app/core/notifications/notifications_manager
import app/global/global_singleton
import app/global/app_signals
import app/core/[main]
import ../core/[main]
import constants as main_constants
logScope:
topics = "app-controller"
@ -80,6 +81,7 @@ type
currencyService: currency_service.Service
transactionService: transaction_service.Service
walletAccountService: wallet_account_service.Service
walletConnectService: wallet_connect_service.Service
bookmarkService: bookmark_service.Service
dappPermissionsService: dapp_permissions_service.Service
providerService: provider_service.Service
@ -190,6 +192,7 @@ proc newAppController*(statusFoundation: StatusFoundation): AppController =
statusFoundation.events, statusFoundation.threadpool, result.settingsService, result.accountsService,
result.tokenService, result.networkService, result.currencyService
)
result.walletConnectService = wallet_connect_service.newService(statusFoundation.events, statusFoundation.threadpool)
result.messageService = message_service.newService(
statusFoundation.events,
statusFoundation.threadpool,
@ -324,6 +327,7 @@ proc delete*(self: AppController) =
self.tokenService.delete
self.transactionService.delete
self.walletAccountService.delete
self.walletConnectService.delete
self.aboutService.delete
self.networkService.delete
self.activityCenterService.delete
@ -451,6 +455,7 @@ proc load(self: AppController) =
self.collectibleService.init()
self.currencyService.init()
self.walletAccountService.init()
self.walletConnectService.init()
# Apply runtime log level settings
if not main_constants.runtimeLogLevelSet():

View File

@ -16,7 +16,7 @@ import ./send/module as send_module
import ./activity/controller as activityc
import ./activity/details_controller as activity_detailsc
import ./wallet_connect/controller as wcc
import ./poc_wallet_connect/controller as wcc
import app/modules/shared_modules/collectible_details/controller as collectible_detailsc

View File

@ -1,7 +1,11 @@
################################################################################
# WalletConnect POC - to remove this file
################################################################################
import NimQml, strutils, json, chronicles
import backend/wallet as backend_wallet
import backend/wallet_connect as backend_wallet_connect
import backend/poc_wallet_connect as backend_wallet_connect
import app/global/global_singleton
import app/global/app_signals

View File

@ -1,3 +1,7 @@
################################################################################
# WalletConnect POC - to remove this file
################################################################################
import json, strutils
import uri

View File

@ -1,3 +1,7 @@
################################################################################
# WalletConnect POC - to remove this file
################################################################################
import json
include app_service/common/json_utils

View File

@ -5,7 +5,7 @@ import ./activity/details_controller as activity_detailsc
import app/modules/shared_modules/collectible_details/controller as collectible_detailsc
import ./io_interface
import ../../shared_models/currency_amount
import ./wallet_connect/controller as wcc
import ./poc_wallet_connect/controller as wcc
type
ActivityControllerArray* = array[2, activityc.Controller]

View File

@ -0,0 +1,32 @@
import chronicles
import io_interface
import app/core/eventemitter
import app_service/service/wallet_account/service as wallet_account_service
import app_service/service/wallet_connect/service as wallet_connect_service
logScope:
topics = "wallet-connect-controller"
type
Controller* = ref object of RootObj
delegate: io_interface.AccessInterface
events: EventEmitter
walletAccountService: wallet_account_service.Service
walletConnectService: wallet_connect_service.Service
proc newController*(delegate: io_interface.AccessInterface,
events: EventEmitter,
walletAccountService: wallet_account_service.Service,
walletConnectService: wallet_connect_service.Service): Controller =
result = Controller()
result.delegate = delegate
result.events = events
result.walletAccountService = walletAccountService
result.walletConnectService = walletConnectService
proc delete*(self: Controller) =
self.disconnectAll()
proc init*(self: Controller) =
discard

View File

@ -0,0 +1,14 @@
import NimQml
type
AccessInterface* {.pure inheritable.} = ref object of RootObj
method delete*(self: AccessInterface) {.base.} =
raise newException(ValueError, "No implementation available")
method getModuleAsVariant*(self: AccessInterface): QVariant {.base.} =
raise newException(ValueError, "No implementation available")
type
DelegateInterface* = concept c

View File

@ -0,0 +1,49 @@
import NimQml, chronicles
import io_interface
import view, controller
import app/core/eventemitter
import app_service/service/wallet_account/service as wallet_account_service
import app_service/service/wallet_connect/service as wallet_connect_service
import app_service/service/keychain/service as keychain_service
export io_interface
logScope:
topics = "wallet-connect-module"
type
Module*[T: io_interface.DelegateInterface] = ref object of io_interface.AccessInterface
delegate: T
view: View
viewVariant: QVariant
controller: Controller
proc newModule*[T](delegate: T,
uniqueIdentifier: string,
events: EventEmitter,
walletAccountService: wallet_account_service.Service,
walletConnectService: wallet_connect_service.Service):
Module[T] =
result = Module[T]()
result.delegate = delegate
result.view = view.newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = controller.newController(result, walletAccountService, walletConnectService)
{.push warning[Deprecated]: off.}
method delete*[T](self: Module[T]) =
self.view.delete
self.viewVariant.delete
self.controller.delete
proc init[T](self: Module[T], fullConnect = true) =
self.controller.init()
method getModuleAsVariant*[T](self: Module[T]): QVariant =
return self.viewVariant
{.pop.}

View File

@ -0,0 +1,15 @@
import NimQml
import io_interface
QtObject:
type
View* = ref object of QObject
delegate: io_interface.AccessInterface
proc delete*(self: View) =
self.QObject.delete
proc newView*(delegate: io_interface.AccessInterface): View =
new(result, delete)
result.QObject.setup
result.delegate = delegate

View File

@ -0,0 +1,3 @@
#################################################
# Async
#################################################

View File

@ -0,0 +1,34 @@
import NimQml, chronicles
# import backend/wallet_connect as status_go_wallet_connect
import app/global/global_singleton
import app/core/eventemitter
import app/core/signals/types
import app/core/tasks/[threadpool]
logScope:
topics = "wallet-connect-service"
# include async_tasks
QtObject:
type Service* = ref object of QObject
events: EventEmitter
threadpool: ThreadPool
proc delete*(self: Service) =
self.QObject.delete
proc newService*(
events: EventEmitter,
threadpool: ThreadPool,
): Service =
new(result, delete)
result.QObject.setup
result.events = events
result.threadpool = threadpool
proc init*(self: Service) =
discard

View File

@ -0,0 +1,97 @@
################################################################################
# WalletConnect POC - to remove this file
################################################################################
import options, logging
import json
import core, response_type
from gen import rpc
import backend
# Declared in services/wallet/walletconnect/walletconnect.go
const eventWCProposeUserPair*: string = "WalletConnectProposeUserPair"
# Declared in services/wallet/walletconnect/walletconnect.go
const ErrorChainsNotSupported*: string = "chains not supported"
rpc(wCSignMessage, "wallet"):
message: string
address: string
password: string
rpc(wCBuildRawTransaction, "wallet"):
signature: string
rpc(wCSendTransactionWithSignature, "wallet"):
signature: string
rpc(wCPairSessionProposal, "wallet"):
sessionProposalJson: string
rpc(wCSaveOrUpdateSession, "wallet"):
sessionJson: string
rpc(wCChangeSessionState, "wallet"):
topic: string
active: bool
rpc(wCSessionRequest, "wallet"):
sessionRequestJson: string
rpc(wCAuthRequest, "wallet"):
address: string
message: string
proc isErrorResponse(rpcResponse: RpcResponse[JsonNode]): bool =
return not rpcResponse.error.isNil
proc prepareResponse(res: var JsonNode, rpcResponse: RpcResponse[JsonNode]): string =
if isErrorResponse(rpcResponse):
return rpcResponse.error.message
if rpcResponse.result.isNil:
return "no result"
res = rpcResponse.result
# TODO #12434: async answer
proc pair*(res: var JsonNode, sessionProposalJson: string): string =
try:
let response = wCPairSessionProposal(sessionProposalJson)
return prepareResponse(res, response)
except Exception as e:
warn e.msg
return e.msg
proc saveOrUpdateSession*(sessionJson: string): bool =
try:
let response = wCSaveOrUpdateSession(sessionJson)
return not isErrorResponse(response)
except Exception as e:
warn e.msg
return false
proc deleteSession*(topic: string): bool =
try:
let response = wCChangeSessionState(topic, false)
return not isErrorResponse(response)
except Exception as e:
warn e.msg
return false
proc sessionRequest*(res: var JsonNode, sessionRequestJson: string): string =
try:
let response = wCSessionRequest(sessionRequestJson)
return prepareResponse(res, response)
except Exception as e:
warn e.msg
return e.msg
proc authRequest*(res: var JsonNode, address: string, authMessage: string): string =
try:
let response = wCAuthRequest(address, authMessage)
return prepareResponse(res, response)
except Exception as e:
warn e.msg
return e.msg

View File

@ -1,93 +1,2 @@
import options, logging
import json
import core, response_type
from gen import rpc
import backend
# Declared in services/wallet/walletconnect/walletconnect.go
const eventWCProposeUserPair*: string = "WalletConnectProposeUserPair"
# Declared in services/wallet/walletconnect/walletconnect.go
const ErrorChainsNotSupported*: string = "chains not supported"
rpc(wCSignMessage, "wallet"):
message: string
address: string
password: string
rpc(wCBuildRawTransaction, "wallet"):
signature: string
rpc(wCSendTransactionWithSignature, "wallet"):
signature: string
rpc(wCPairSessionProposal, "wallet"):
sessionProposalJson: string
rpc(wCSaveOrUpdateSession, "wallet"):
sessionJson: string
rpc(wCChangeSessionState, "wallet"):
topic: string
active: bool
rpc(wCSessionRequest, "wallet"):
sessionRequestJson: string
rpc(wCAuthRequest, "wallet"):
address: string
message: string
proc isErrorResponse(rpcResponse: RpcResponse[JsonNode]): bool =
return not rpcResponse.error.isNil
proc prepareResponse(res: var JsonNode, rpcResponse: RpcResponse[JsonNode]): string =
if isErrorResponse(rpcResponse):
return rpcResponse.error.message
if rpcResponse.result.isNil:
return "no result"
res = rpcResponse.result
# TODO #12434: async answer
proc pair*(res: var JsonNode, sessionProposalJson: string): string =
try:
let response = wCPairSessionProposal(sessionProposalJson)
return prepareResponse(res, response)
except Exception as e:
warn e.msg
return e.msg
proc saveOrUpdateSession*(sessionJson: string): bool =
try:
let response = wCSaveOrUpdateSession(sessionJson)
return not isErrorResponse(response)
except Exception as e:
warn e.msg
return false
proc deleteSession*(topic: string): bool =
try:
let response = wCChangeSessionState(topic, false)
return not isErrorResponse(response)
except Exception as e:
warn e.msg
return false
proc sessionRequest*(res: var JsonNode, sessionRequestJson: string): string =
try:
let response = wCSessionRequest(sessionRequestJson)
return prepareResponse(res, response)
except Exception as e:
warn e.msg
return e.msg
proc authRequest*(res: var JsonNode, address: string, authMessage: string): string =
try:
let response = wCAuthRequest(address, authMessage)
return prepareResponse(res, response)
except Exception as e:
warn e.msg
return e.msg

View File

@ -4,7 +4,7 @@
<head>
<script src="qrc:/StatusQ/Components/private/qwebchannel/qwebchannel.js" defer></script>
<script src="qrc:/StatusQ/Components/private/qwebchannel/helpers.js" defer></script>
<script src="../../../../../../../ui/app/AppLayouts/Wallet/views/walletconnect/sdk/generated/bundle.js" defer></script>
<script src="../../../../../../../ui/imports/shared/popups/walletconnect/sdk/generated/bundle.js" defer></script>
</head>
<body></body>
</html>

View File

@ -1,6 +1,6 @@
import unittest
import app/modules/main/wallet_section/wallet_connect/helpers
import app/modules/main/wallet_section/poc_wallet_connect/helpers
suite "wallet connect":

View File

@ -65,6 +65,9 @@ StatusSectionLayout {
case Constants.settingsSubsection.keycard:
keycardView.item.handleBackAction()
break;
case Constants.settingsSubsection.dapps:
dappsView.item.handleBackAction()
break;
}
Global.settingsSubSubsection = -1
}
@ -130,6 +133,8 @@ StatusSectionLayout {
walletView.item.resetStack()
} else if (currentIndex === Constants.settingsSubsection.keycard) {
keycardView.item.handleBackAction()
} else if (currentIndex === Constants.settingsSubsection.dapps) {
dappsView.item.handleBackAction()
}
}
@ -257,6 +262,21 @@ StatusSectionLayout {
onLoaded: root.store.backButtonName = ""
}
Loader {
id: dappsView
active: false
asynchronous: true
sourceComponent: DappsView {
implicitWidth: parent.width
implicitHeight: parent.height
profileSectionStore: root.store
sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.dapps)
mainSectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.dapps)
contentWidth: d.contentWidth
}
onLoaded: root.store.backButtonName = ""
}
Loader {
active: false
asynchronous: true

View File

@ -122,6 +122,9 @@ QtObject {
append({subsection: Constants.settingsSubsection.wallet,
text: qsTr("Wallet"),
icon: "wallet"})
append({subsection: Constants.settingsSubsection.dapps,
text: qsTr("dApps"),
icon: "dapp"})
append({subsection: Constants.settingsSubsection.browserSettings,
text: qsTr("Browser"),
icon: "browser"})

View File

@ -24,10 +24,10 @@ import "../controls"
import "../popups"
import "../panels"
// TODO: remove DEV import
import AppLayouts.Wallet.stores 1.0 as WalletStores
import AppLayouts.Wallet.views.walletconnect 1.0
// TODO end
/////////////////////////////////////////////////////
// WalletConnect POC - to remove
import AppLayouts.Wallet.views.pocwalletconnect 1.0
/////////////////////////////////////////////////////
SettingsContentBase {
id: root
@ -171,16 +171,19 @@ SettingsContentBase {
}
}
/////////////////////////////////////////////////////
// WalletConnect POC - to remove
StatusSettingsLineButton {
anchors.leftMargin: 0
anchors.rightMargin: 0
text: qsTr("Debug Wallet Connect")
text: qsTr("POC Wallet Connect")
visible: root.advancedStore.isDebugEnabled
onClicked: {
Global.popupWalletConnect()
}
}
/////////////////////////////////////////////////////
Separator {
width: parent.width

View File

@ -0,0 +1,88 @@
import QtQuick 2.14
import QtQuick.Controls 2.14
import QtQuick.Layouts 1.14
import QtQml.Models 2.14
import StatusQ.Core 0.1
import StatusQ.Controls 0.1
import StatusQ.Core.Theme 0.1
import utils 1.0
import "../stores"
import "./dapps"
SettingsContentBase {
id: root
required property ProfileSectionStore profileSectionStore
required property string mainSectionTitle
titleRowComponentLoader.sourceComponent: stackLayout.currentIndex === d.mainViewIndex ||
stackLayout.currentIndex === d.connectedDappsIndex?
d.headerButton : undefined
function handleBackAction() {
if (stackLayout.currentIndex !== d.mainViewIndex) {
root.profileSectionStore.backButtonName = ""
root.sectionTitle = root.mainSectionTitle
stackLayout.currentIndex = d.mainViewIndex
}
}
StackLayout {
id: stackLayout
currentIndex: d.mainViewIndex
QtObject {
id: d
readonly property int mainViewIndex: 0
readonly property int connectedDappsIndex: 1
readonly property int approvalsIndex: 2
readonly property int trustLevelsIndex: 3
readonly property int securityIndex: 4
function changeSubsection(title, index) {
root.profileSectionStore.backButtonName = root.mainSectionTitle
root.sectionTitle = title
stackLayout.currentIndex = index
}
property Component headerButton: Component {
StatusButton {
text: qsTr("Connect a dApp via WalletConnect")
onClicked: {
console.warn("TODO: run wallet connect popup...")
}
}
}
}
Main {
Layout.preferredWidth: root.contentWidth
onDisplayConnectedDapps: d.changeSubsection(title, d.connectedDappsIndex)
onDisplayApprovals: d.changeSubsection(title, d.approvalsIndex)
onDisplayTrustLevels: d.changeSubsection(title, d.trustLevelsIndex)
onDisplaySecurity: d.changeSubsection(title, d.securityIndex)
}
ConnectedDapps {
Layout.preferredWidth: root.contentWidth
}
Approvals {
Layout.preferredWidth: root.contentWidth
}
TrustLevels {
Layout.preferredWidth: root.contentWidth
}
Security {
Layout.preferredWidth: root.contentWidth
}
}
}

View File

@ -0,0 +1,44 @@
import QtQuick 2.14
import QtQuick.Layouts 1.14
import StatusQ.Controls 0.1
import utils 1.0
import shared.controls 1.0
ColumnLayout {
id: root
spacing: Constants.settingsSection.itemSpacing
QtObject {
id: d
}
StatusTabBar {
id: walletTabBar
Layout.fillWidth: true
StatusTabButton {
leftPadding: 0
width: implicitWidth
text: qsTr("By dApp")
}
StatusTabButton {
width: implicitWidth
text: qsTr("By token")
}
StatusTabButton {
width: implicitWidth
text: qsTr("By account")
}
}
ShapeRectangle {
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
text: qsTr("Your dApp approvals will appear here")
}
}

View File

@ -0,0 +1,39 @@
import QtQuick 2.14
import QtQuick.Layouts 1.14
import StatusQ.Controls 0.1
import utils 1.0
import shared.controls 1.0
ColumnLayout {
id: root
spacing: Constants.settingsSection.itemSpacing
QtObject {
id: d
}
StatusTabBar {
id: walletTabBar
Layout.fillWidth: true
StatusTabButton {
leftPadding: 0
width: implicitWidth
text: qsTr("By dApp")
}
StatusTabButton {
width: implicitWidth
text: qsTr("By account")
}
}
ShapeRectangle {
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
text: qsTr("Your connected dApps will appear here")
}
}

View File

@ -0,0 +1,79 @@
import QtQuick 2.14
import QtQuick.Layouts 1.14
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Components 0.1
import utils 1.0
ColumnLayout {
id: root
signal displayConnectedDapps(string title)
signal displayApprovals(string title)
signal displayTrustLevels(string title)
signal displaySecurity(string title)
spacing: Constants.settingsSection.itemSpacing
QtObject {
id: d
}
StatusListItem {
Layout.fillWidth: true
title: qsTr("Connected")
components: [
StatusIcon {
icon: "next"
color: Theme.palette.baseColor1
}
]
onClicked: {
root.displayConnectedDapps(title)
}
}
StatusListItem {
Layout.fillWidth: true
title: qsTr("Approvals")
components: [
StatusIcon {
icon: "next"
color: Theme.palette.baseColor1
}
]
onClicked: {
root.displayApprovals(title)
}
}
StatusListItem {
Layout.fillWidth: true
title: qsTr("Trust levels")
components: [
StatusIcon {
icon: "next"
color: Theme.palette.baseColor1
}
]
onClicked: {
root.displayTrustLevels(title)
}
}
StatusListItem {
Layout.fillWidth: true
title: qsTr("Security")
components: [
StatusIcon {
icon: "next"
color: Theme.palette.baseColor1
}
]
onClicked: {
root.displaySecurity(title)
}
}
}

View File

@ -0,0 +1,14 @@
import QtQuick 2.14
import QtQuick.Layouts 1.14
import utils 1.0
ColumnLayout {
id: root
spacing: Constants.settingsSection.itemSpacing
QtObject {
id: d
}
}

View File

@ -0,0 +1,23 @@
import QtQuick 2.14
import QtQuick.Layouts 1.14
import StatusQ.Controls 0.1
import utils 1.0
import shared.controls 1.0
ColumnLayout {
id: root
spacing: Constants.settingsSection.itemSpacing
QtObject {
id: d
}
ShapeRectangle {
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
text: qsTr("Your trust level for dApps you have interacted with will appear here")
}
}

View File

@ -0,0 +1,90 @@
import QtQuick 2.15
import QtGraphicalEffects 1.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import shared.controls 1.0
import StatusQ.Core.Theme 0.1
import StatusQ.Controls 0.1
StatusButton {
id: root
property int menuWidth: 312
signal connectDapp()
borderColor: Theme.palette.directColor7
normalColor: Theme.palette.transparent
hoverColor: Theme.palette.baseColor2
textPosition: StatusBaseButton.TextPosition.Left
textColor: Theme.palette.baseColor1
icon.name: "dapp"
icon.height: 16
icon.width: 16
icon.color: hovered ? Theme.palette.directColor1 : Theme.palette.baseColor1
highlighted: popup.opened
onClicked: {
if (popup.opened) {
popup.close()
return
}
popup.x = width - root.menuWidth - 2 * popup.padding
popup.y = height + 4
popup.open()
}
Popup {
id: popup
contentWidth: root.menuWidth
contentHeight: list.height
modal: false
padding: 8
closePolicy: Popup.CloseOnEscape | Popup.CloseOnOutsideClick | Popup.CloseOnPressOutside
background: Rectangle {
id: bckgContent
color: Theme.palette.statusMenu.backgroundColor
radius: 8
layer.enabled: true
layer.effect: DropShadow {
anchors.fill: parent
source: bckgContent
horizontalOffset: 0
verticalOffset: 4
radius: 12
samples: 25
spread: 0.2
color: Theme.palette.dropShadow
}
}
ColumnLayout {
id: list
anchors.left: parent.left
anchors.right: parent.right
width: parent.width
spacing: 8
ShapeRectangle {
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
text: qsTr("Connected dApps will appear here")
}
StatusButton {
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
text: qsTr("Connect a dApp via WalletConnect")
onClicked: {
root.connectDapp()
}
}
}
}
}

View File

@ -13,3 +13,4 @@ ManageTokensGroupDelegate 1.0 ManageTokensGroupDelegate.qml
InformationTileAssetDetails 1.0 InformationTileAssetDetails.qml
StatusNetworkListItemTag 1.0 StatusNetworkListItemTag.qml
CollectibleBalanceTag 1.0 CollectibleBalanceTag.qml
ConnectedDappsButton 1.0 ConnectedDappsButton.qml

View File

@ -7,6 +7,7 @@ import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Core.Utils 0.1 as StatusQUtils
import StatusQ.Popups 0.1
import SortFilterProxyModel 0.2
@ -73,6 +74,19 @@ Item {
Layout.alignment: Qt.AlignTrailing
Layout.topMargin: 5
ConnectedDappsButton {
Layout.preferredHeight: 38
Layout.alignment: Qt.AlignTop
spacing: 8
size: StatusBaseButton.Size.Small
visible: !root.walletStore.showSavedAddresses
onConnectDapp: {
console.warn("TODO: run ConnectDappPopup...")
}
}
StatusButton {
id: headerButton
objectName: "walletHeaderButton"

View File

@ -56,7 +56,6 @@ QtObject {
property var activityDetailsController: walletSectionInst.activityDetailsController
property string signingPhrase: walletSectionInst.signingPhrase
property string mnemonicBackedUp: walletSectionInst.isMnemonicBackedUp
property var walletConnectController: walletSectionInst.walletConnectController
property CollectiblesStore collectiblesStore: CollectiblesStore {}

View File

@ -1,3 +1,7 @@
/////////////////////////////////////////////////////
// WalletConnect POC - to remove this file
/////////////////////////////////////////////////////
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

View File

@ -1,3 +1,7 @@
/////////////////////////////////////////////////////
// WalletConnect POC - to remove this file
/////////////////////////////////////////////////////
import QtQuick 2.15
import QtQuick.Controls 2.15

View File

@ -1,3 +1,7 @@
/////////////////////////////////////////////////////
// WalletConnect POC - to remove this file
/////////////////////////////////////////////////////
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

View File

@ -1,7 +1,13 @@
/////////////////////////////////////////////////////
// WalletConnect POC - to remove this file
/////////////////////////////////////////////////////
import QtQuick 2.15
import AppLayouts.Wallet.stores 1.0 as WalletStores
import shared.popups.walletconnect 1.0
Item {
id: root
@ -11,7 +17,7 @@ Item {
property alias sdk: sdk
property alias url: sdk.url
WalletConnectModal {
POCWalletConnectModal {
id: modal
controller: root.controller

View File

@ -1,3 +1,7 @@
/////////////////////////////////////////////////////
// WalletConnect POC - to remove this file
/////////////////////////////////////////////////////
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
@ -6,6 +10,8 @@ import StatusQ.Controls 0.1
import StatusQ.Core 0.1
import StatusQ.Popups 0.1
import shared.popups.walletconnect 1.0
Popup {
id: root
@ -147,7 +153,7 @@ Popup {
id: selAccBtnGroup
}
SelectAccount {
POCSelectAccount {
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
@ -201,7 +207,7 @@ Popup {
ColumnLayout {
Layout.fillWidth: true
Sessions {
POCSessions {
Layout.fillWidth: true
Layout.preferredHeight: contentHeight
@ -220,7 +226,7 @@ Popup {
ColumnLayout {
Layout.fillWidth: true
Pairings {
POCPairings {
Layout.fillWidth: true
Layout.preferredHeight: contentHeight

View File

@ -0,0 +1,3 @@
POCWalletConnect 1.0 POCWalletConnect.qml
POCWalletConnectModal 1.0 POCWalletConnectModal.qml
POCPairings 1.0 POCPairings.qml

View File

@ -1,4 +0,0 @@
WalletConnect 1.0 WalletConnect.qml
WalletConnectModal 1.0 WalletConnectModal.qml
WalletConnectSDK 1.0 WalletConnectSDK.qml
Pairings 1.0 Pairings.qml

File diff suppressed because one or more lines are too long

View File

@ -42,7 +42,11 @@ import AppLayouts.Chat.stores 1.0 as ChatStores
import AppLayouts.Communities.stores 1.0
import AppLayouts.Wallet.stores 1.0 as WalletStore
import AppLayouts.Wallet.popups 1.0 as WalletPopups
import AppLayouts.Wallet.views.walletconnect 1.0
/////////////////////////////////////////////////////
// WalletConnect POC - to remove
import AppLayouts.Wallet.views.pocwalletconnect 1.0
/////////////////////////////////////////////////////
import mainui.activitycenter.stores 1.0
import mainui.activitycenter.popups 1.0
@ -2029,13 +2033,15 @@ Item {
}
}
WalletConnect {
/////////////////////////////////////////////////////
// WalletConnect POC - to remove
POCWalletConnect {
id: walletConnect
anchors.top: parent.bottom
width: 100
height: 100
controller: WalletStore.RootStore.walletConnectController
controller: WalletStore.RootStore.walletSectionInst.walletConnectController
Connections {
target: Global
@ -2044,4 +2050,5 @@ Item {
}
}
}
/////////////////////////////////////////////////////
}

View File

@ -0,0 +1,57 @@
import QtQuick 2.15
import StatusQ.Core 0.1
import StatusQ.Popups 0.1
import StatusQ.Controls 0.1
import utils 1.0
StatusModal {
id: root
width: Constants.dapps.connectDappPopupWidth
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
headerSettings.title: qsTr("Connect a Dapp via WalletConnect")
StatusScrollView {
id: scrollView
anchors.fill: parent
padding: 0
contentWidth: availableWidth
Item {
id: content
implicitWidth: loader.implicitWidth
implicitHeight: loader.implicitHeight
width: scrollView.availableWidth
Loader {
id: loader
width: parent.width
sourceComponent: {
// TODO
return undefined
}
}
}
}
rightButtons: [
StatusButton {
id: primaryButton
height: Constants.dapps.footerButtonsHeight
text: qsTr("Done")
visible: text !== ""
enabled: root.store.primaryPopupButtonEnabled
onClicked: {
console.warn("TODO: done...")
}
}
]
}

View File

@ -537,7 +537,7 @@ Item {
anchors.fill: parent
url: "qrc:/app/AppLayouts/Wallet/views/walletconnect/sdk/src/index.html"
url: "qrc:/imports/shared/popups/walletconnect/sdk/src/index.html"
webChannelObjects: [ statusObject ]
onPageLoaded: function() {

View File

@ -0,0 +1,2 @@
WalletConnectSDK 1.0 WalletConnectSDK.qml
ConnectDappPopup 1.0 ConnectDappPopup.qml

File diff suppressed because one or more lines are too long

View File

@ -9,12 +9,12 @@
"version": "0.1.0",
"license": "MPL-2.0",
"dependencies": {
"@walletconnect/web3wallet": "^1.9.0"
"@walletconnect/web3wallet": "^1.11.2"
},
"devDependencies": {
"webpack": "^5.88.2",
"webpack": "^5.91.0",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1"
"webpack-dev-server": "^4.15.2"
}
},
"node_modules/@discoveryjs/json-ext": {
@ -380,45 +380,45 @@
"integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
"integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
@ -428,9 +428,9 @@
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.20",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
"integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@ -1098,9 +1098,9 @@
}
},
"node_modules/@walletconnect/core": {
"version": "2.10.5",
"resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.10.5.tgz",
"integrity": "sha512-QnGHkA05KzJrtqExPqXm/TsstM1uTDI8tQT0x86/DuR6LdiYEntzSpVjnv7kKK6Mo9UxlXfud431dNRfOW5uJg==",
"version": "2.12.2",
"resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.12.2.tgz",
"integrity": "sha512-7Adv/b3pp9F42BkvReaaM4KS8NEvlkS7AMtwO3uF/o6aRMKtcfTJq9/jgWdKJh4RP8pPRTRFjCw6XQ/RZtT4aQ==",
"dependencies": {
"@walletconnect/heartbeat": "1.2.1",
"@walletconnect/jsonrpc-provider": "1.0.13",
@ -1108,14 +1108,15 @@
"@walletconnect/jsonrpc-utils": "1.0.8",
"@walletconnect/jsonrpc-ws-connection": "1.0.14",
"@walletconnect/keyvaluestorage": "^1.1.1",
"@walletconnect/logger": "^2.0.1",
"@walletconnect/logger": "^2.1.2",
"@walletconnect/relay-api": "^1.0.9",
"@walletconnect/relay-auth": "^1.0.4",
"@walletconnect/safe-json": "^1.0.2",
"@walletconnect/time": "^1.0.2",
"@walletconnect/types": "2.10.5",
"@walletconnect/utils": "2.10.5",
"@walletconnect/types": "2.12.2",
"@walletconnect/utils": "2.12.2",
"events": "^3.3.0",
"isomorphic-unfetch": "3.1.0",
"lodash.isequal": "4.5.0",
"uint8arrays": "^3.1.0"
}
@ -1206,12 +1207,12 @@
}
},
"node_modules/@walletconnect/logger": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.0.1.tgz",
"integrity": "sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ==",
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz",
"integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==",
"dependencies": {
"pino": "7.11.0",
"tslib": "1.14.1"
"@walletconnect/safe-json": "^1.0.2",
"pino": "7.11.0"
}
},
"node_modules/@walletconnect/relay-api": {
@ -1245,18 +1246,18 @@
}
},
"node_modules/@walletconnect/sign-client": {
"version": "2.10.5",
"resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.10.5.tgz",
"integrity": "sha512-HEYsoeGC6fGplQy0NIZSRNHgOwZwQ892UWG1Ahkcasf2R35QaBgnTVQkSCisl1PAAOKXZG7yB1YDoAAZBF+g5Q==",
"version": "2.12.2",
"resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.12.2.tgz",
"integrity": "sha512-cM0ualXj6nVvLqS4BDNRk+ZWR+lubcsz/IHreH+3wYrQ2sV+C0fN6ctrd7MMGZss0C0qacWCx0pm62ZBuoKvqA==",
"dependencies": {
"@walletconnect/core": "2.10.5",
"@walletconnect/core": "2.12.2",
"@walletconnect/events": "^1.0.1",
"@walletconnect/heartbeat": "1.2.1",
"@walletconnect/jsonrpc-utils": "1.0.8",
"@walletconnect/logger": "^2.0.1",
"@walletconnect/logger": "^2.1.2",
"@walletconnect/time": "^1.0.2",
"@walletconnect/types": "2.10.5",
"@walletconnect/utils": "2.10.5",
"@walletconnect/types": "2.12.2",
"@walletconnect/utils": "2.12.2",
"events": "^3.3.0"
}
},
@ -1269,9 +1270,9 @@
}
},
"node_modules/@walletconnect/types": {
"version": "2.10.5",
"resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.10.5.tgz",
"integrity": "sha512-N8xaN7/Kob93rKxKDaT6oy6symgIkAwyLqq0/dLJEhXfv7S/gyNvDka4SosjVVTc4oTvE1+OmxNIR8pB1DuwJw==",
"version": "2.12.2",
"resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.12.2.tgz",
"integrity": "sha512-9CmwTlPbrFTzayTL9q7xM7s3KTJkS6kYFtH2m1/fHFgALs6pIUjf1qAx1TF2E4tv7SEzLAIzU4NqgYUt2vWXTg==",
"dependencies": {
"@walletconnect/events": "^1.0.1",
"@walletconnect/heartbeat": "1.2.1",
@ -1282,9 +1283,9 @@
}
},
"node_modules/@walletconnect/utils": {
"version": "2.10.5",
"resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.10.5.tgz",
"integrity": "sha512-3yeclD9/AlPEIHBqBVzrHUO/KRAEIXVK0ViIQ5oUH+zT3TpdsDGDiW1Z0TsAQ1EiYoiiz8dOQzd80a3eZVwnrg==",
"version": "2.12.2",
"resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.12.2.tgz",
"integrity": "sha512-zf50HeS3SfoLv1N9GPl2IXTZ9TsXfet4usVAsZmX9P6/Xzq7d/7QakjVQCHH/Wk1O9XkcsfeoZoUhRxoMJ5uJw==",
"dependencies": {
"@stablelib/chacha20poly1305": "1.0.1",
"@stablelib/hkdf": "1.0.1",
@ -1294,7 +1295,7 @@
"@walletconnect/relay-api": "^1.0.9",
"@walletconnect/safe-json": "^1.0.2",
"@walletconnect/time": "^1.0.2",
"@walletconnect/types": "2.10.5",
"@walletconnect/types": "2.12.2",
"@walletconnect/window-getters": "^1.0.1",
"@walletconnect/window-metadata": "^1.0.1",
"detect-browser": "5.3.0",
@ -1303,18 +1304,18 @@
}
},
"node_modules/@walletconnect/web3wallet": {
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/@walletconnect/web3wallet/-/web3wallet-1.9.4.tgz",
"integrity": "sha512-daoISghTC4693wExQN1X7arUBNF9jZuHERRTYCbEokMz2y/AmocMsanFx6g6MlIJumcBX6moYResygWltYI6mg==",
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/@walletconnect/web3wallet/-/web3wallet-1.11.2.tgz",
"integrity": "sha512-jrxXmZyg+czkHXg4d0jdhxajjfbgPvS9dW4UzdGdz12dXsX7CFgZxz+LWc/oakhLyngUtwHtyBlgaFWxamS3AQ==",
"dependencies": {
"@walletconnect/auth-client": "2.1.2",
"@walletconnect/core": "2.10.5",
"@walletconnect/core": "2.12.2",
"@walletconnect/jsonrpc-provider": "1.0.13",
"@walletconnect/jsonrpc-utils": "1.0.8",
"@walletconnect/logger": "2.0.1",
"@walletconnect/sign-client": "2.10.5",
"@walletconnect/types": "2.10.5",
"@walletconnect/utils": "2.10.5"
"@walletconnect/logger": "2.1.2",
"@walletconnect/sign-client": "2.12.2",
"@walletconnect/types": "2.12.2",
"@walletconnect/utils": "2.12.2"
}
},
"node_modules/@walletconnect/window-getters": {
@ -1335,9 +1336,9 @@
}
},
"node_modules/@webassemblyjs/ast": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
"integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
"integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
"dev": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.11.6",
@ -1357,9 +1358,9 @@
"dev": true
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
"integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
"integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
"dev": true
},
"node_modules/@webassemblyjs/helper-numbers": {
@ -1380,15 +1381,15 @@
"dev": true
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
"integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
"integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-buffer": "1.11.6",
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/wasm-gen": "1.11.6"
"@webassemblyjs/wasm-gen": "1.12.1"
}
},
"node_modules/@webassemblyjs/ieee754": {
@ -1416,28 +1417,28 @@
"dev": true
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
"integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
"integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-buffer": "1.11.6",
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/helper-wasm-section": "1.11.6",
"@webassemblyjs/wasm-gen": "1.11.6",
"@webassemblyjs/wasm-opt": "1.11.6",
"@webassemblyjs/wasm-parser": "1.11.6",
"@webassemblyjs/wast-printer": "1.11.6"
"@webassemblyjs/helper-wasm-section": "1.12.1",
"@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-opt": "1.12.1",
"@webassemblyjs/wasm-parser": "1.12.1",
"@webassemblyjs/wast-printer": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-gen": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
"integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
"integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6",
@ -1445,24 +1446,24 @@
}
},
"node_modules/@webassemblyjs/wasm-opt": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
"integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
"integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/helper-buffer": "1.11.6",
"@webassemblyjs/wasm-gen": "1.11.6",
"@webassemblyjs/wasm-parser": "1.11.6"
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-parser": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-parser": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
"integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
"integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
@ -1471,12 +1472,12 @@
}
},
"node_modules/@webassemblyjs/wast-printer": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
"integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
"integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.11.6",
"@webassemblyjs/ast": "1.12.1",
"@xtuc/long": "4.2.2"
}
},
@ -2305,9 +2306,9 @@
}
},
"node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
"integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
"integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
@ -4284,9 +4285,9 @@
"dev": true
},
"node_modules/serialize-javascript": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
"integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"dependencies": {
"randombytes": "^2.1.0"
@ -4634,9 +4635,9 @@
}
},
"node_modules/terser": {
"version": "5.24.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz",
"integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==",
"version": "5.30.3",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz",
"integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@ -4652,16 +4653,16 @@
}
},
"node_modules/terser-webpack-plugin": {
"version": "5.3.9",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
"integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
"version": "5.3.10",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
"integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.17",
"@jridgewell/trace-mapping": "^0.3.20",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.1",
"terser": "^5.16.8"
"terser": "^5.26.0"
},
"engines": {
"node": ">= 10.13.0"
@ -4952,9 +4953,9 @@
}
},
"node_modules/watchpack": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
"integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
"integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
"dev": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
@ -4979,34 +4980,34 @@
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"node_modules/webpack": {
"version": "5.89.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz",
"integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==",
"version": "5.91.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
"integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
"dev": true,
"dependencies": {
"@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.0",
"@webassemblyjs/ast": "^1.11.5",
"@webassemblyjs/wasm-edit": "^1.11.5",
"@webassemblyjs/wasm-parser": "^1.11.5",
"@types/estree": "^1.0.5",
"@webassemblyjs/ast": "^1.12.1",
"@webassemblyjs/wasm-edit": "^1.12.1",
"@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
"acorn-import-assertions": "^1.9.0",
"browserslist": "^4.14.5",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.15.0",
"enhanced-resolve": "^5.16.0",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.9",
"graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.7",
"watchpack": "^2.4.0",
"terser-webpack-plugin": "^5.3.10",
"watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
@ -5080,9 +5081,9 @@
}
},
"node_modules/webpack-dev-middleware": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
"integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==",
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
"integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
"dev": true,
"dependencies": {
"colorette": "^2.0.10",
@ -5156,9 +5157,9 @@
}
},
"node_modules/webpack-dev-server": {
"version": "4.15.1",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz",
"integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==",
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
"integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
"dev": true,
"dependencies": {
"@types/bonjour": "^3.5.9",
@ -5189,7 +5190,7 @@
"serve-index": "^1.9.1",
"sockjs": "^0.3.24",
"spdy": "^4.0.2",
"webpack-dev-middleware": "^5.3.1",
"webpack-dev-middleware": "^5.3.4",
"ws": "^8.13.0"
},
"bin": {

View File

@ -4,9 +4,9 @@
"description": "Wallet Connect integration for status-desktop",
"private": true,
"devDependencies": {
"webpack": "^5.89.0",
"webpack": "^5.91.0",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1"
"webpack-dev-server": "^4.15.2"
},
"license": "MPL-2.0",
"scripts": {
@ -16,6 +16,6 @@
"start": "webpack serve --mode development --open"
},
"dependencies": {
"@walletconnect/web3wallet": "^1.9.4"
"@walletconnect/web3wallet": "^1.11.2"
}
}

View File

@ -3,7 +3,7 @@
<head>
<script src="qrc:/StatusQ/Components/private/qwebchannel/qwebchannel.js" defer></script>
<script src="qrc:/StatusQ/Components/private/qwebchannel/helpers.js" defer></script>
<script src="qrc:/app/AppLayouts/Wallet/views/walletconnect/sdk/generated/bundle.js" defer></script>
<script src="qrc:/imports/shared/popups/walletconnect/sdk/generated/bundle.js" defer></script>
</head>
<body>
</body>

View File

@ -337,21 +337,22 @@ QtObject {
readonly property int ensUsernames: 3
readonly property int messaging: 4
readonly property int wallet:5
readonly property int appearance: 6
readonly property int language: 7
readonly property int notifications: 8
readonly property int syncingSettings: 9
readonly property int browserSettings: 10
readonly property int advanced: 11
readonly property int about: 12
readonly property int communitiesSettings: 13
readonly property int keycard: 14
readonly property int about_terms: 15 // a subpage under "About"
readonly property int about_privacy: 16 // a subpage under "About"
readonly property int dapps: 6
readonly property int appearance: 7
readonly property int language: 8
readonly property int notifications: 9
readonly property int syncingSettings: 10
readonly property int browserSettings: 11
readonly property int advanced: 12
readonly property int about: 13
readonly property int communitiesSettings: 14
readonly property int keycard: 15
readonly property int about_terms: 16 // a subpage under "About"
readonly property int about_privacy: 17 // a subpage under "About"
// special treatment; these do not participate in the main settings' StackLayout
readonly property int signout: 17
readonly property int backUpSeed: 18
readonly property int signout: 18
readonly property int backUpSeed: 19
}
readonly property QtObject walletSettingsSubsection: QtObject {
@ -788,6 +789,11 @@ QtObject {
}
}
readonly property QtObject dapps: QtObject {
readonly property int connectDappPopupWidth: 480
readonly property int footerButtonsHeight: 44
}
readonly property QtObject localPairingAction: QtObject {
readonly property int actionUnknown: 0
readonly property int actionConnect: 1

View File

@ -97,7 +97,10 @@ QtObject {
signal openTestnetPopup()
/////////////////////////////////////////////////////
// WalletConnect POC - to remove
signal popupWalletConnect()
/////////////////////////////////////////////////////
signal openAddEditSavedAddressesPopup(var params)
signal openDeleteSavedAddressesPopup(var params)