2017-09-05 14:14:45 +00:00
|
|
|
(ns status-im.native-module.core
|
2022-12-20 14:45:37 +00:00
|
|
|
(:require ["react-native" :as react-native]
|
|
|
|
[re-frame.core :as re-frame]
|
2019-09-07 12:57:22 +00:00
|
|
|
[status-im.utils.db :as utils.db]
|
2019-09-04 18:59:41 +00:00
|
|
|
[status-im.utils.platform :as platform]
|
2022-12-20 14:45:37 +00:00
|
|
|
[status-im.utils.react-native :as react-native-utils]
|
2019-11-15 08:09:17 +00:00
|
|
|
[status-im.utils.types :as types]
|
2022-12-20 14:45:37 +00:00
|
|
|
[taoensso.timbre :as log]))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn status
|
|
|
|
[]
|
2019-09-07 12:57:22 +00:00
|
|
|
(when (exists? (.-NativeModules react-native))
|
|
|
|
(.-Status ^js (.-NativeModules react-native))))
|
2017-09-05 14:14:45 +00:00
|
|
|
|
|
|
|
(def adjust-resize 16)
|
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn clear-web-data
|
|
|
|
[]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] clear-web-data")
|
2019-09-04 18:59:41 +00:00
|
|
|
(when (status)
|
2019-09-07 12:57:22 +00:00
|
|
|
(.clearCookies ^js (status))
|
|
|
|
(.clearStorageAPIs ^js (status))))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn init-keystore
|
|
|
|
[key-uid callback]
|
2020-07-09 10:14:38 +00:00
|
|
|
(log/debug "[native-module] init-keystore" key-uid)
|
|
|
|
(.initKeystore ^js (status) key-uid callback))
|
2019-07-31 16:10:38 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn open-accounts
|
|
|
|
[callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] open-accounts")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.openAccounts ^js (status) #(callback (types/json->clj %))))
|
2017-08-21 14:49:31 +00:00
|
|
|
|
2019-09-04 18:59:41 +00:00
|
|
|
(defn prepare-dir-and-update-config
|
2020-07-09 10:14:38 +00:00
|
|
|
[key-uid config callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] prepare-dir-and-update-config")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.prepareDirAndUpdateConfig ^js (status)
|
2020-07-09 10:14:38 +00:00
|
|
|
key-uid
|
2019-09-04 18:59:41 +00:00
|
|
|
config
|
|
|
|
#(callback (types/json->clj %))))
|
2018-12-19 12:20:03 +00:00
|
|
|
|
2019-08-01 20:11:59 +00:00
|
|
|
(defn save-account-and-login
|
2019-09-04 20:59:44 +00:00
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
2020-07-09 10:14:38 +00:00
|
|
|
[key-uid multiaccount-data hashed-password settings config accounts-data]
|
2019-12-05 06:02:31 +00:00
|
|
|
(log/debug "[native-module] save-account-and-login"
|
2022-12-20 14:45:37 +00:00
|
|
|
"multiaccount-data"
|
|
|
|
multiaccount-data)
|
2019-09-04 18:59:41 +00:00
|
|
|
(clear-web-data)
|
2020-07-09 10:14:38 +00:00
|
|
|
(init-keystore
|
|
|
|
key-uid
|
|
|
|
#(.saveAccountAndLogin
|
2022-12-20 14:45:37 +00:00
|
|
|
^js (status)
|
|
|
|
multiaccount-data
|
|
|
|
hashed-password
|
|
|
|
settings
|
|
|
|
config
|
|
|
|
accounts-data)))
|
2018-11-26 15:52:29 +00:00
|
|
|
|
2020-04-24 07:45:54 +00:00
|
|
|
(defn save-multiaccount-and-login-with-keycard
|
2019-08-15 14:44:25 +00:00
|
|
|
"NOTE: chat-key is a whisper private key sent from keycard"
|
2020-07-09 10:14:38 +00:00
|
|
|
[key-uid multiaccount-data password settings config accounts-data chat-key]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] save-account-and-login-with-keycard")
|
2020-07-09 10:14:38 +00:00
|
|
|
(init-keystore
|
|
|
|
key-uid
|
|
|
|
#(.saveAccountAndLoginWithKeycard
|
2022-12-20 14:45:37 +00:00
|
|
|
^js (status)
|
|
|
|
multiaccount-data
|
|
|
|
password
|
|
|
|
settings
|
|
|
|
config
|
|
|
|
accounts-data
|
|
|
|
chat-key)))
|
2019-08-15 14:44:25 +00:00
|
|
|
|
2019-08-01 20:11:59 +00:00
|
|
|
(defn login
|
2019-09-04 20:59:44 +00:00
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
2020-07-09 10:14:38 +00:00
|
|
|
[key-uid account-data hashed-password]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] login")
|
2019-09-04 18:59:41 +00:00
|
|
|
(clear-web-data)
|
2020-07-09 10:14:38 +00:00
|
|
|
(init-keystore
|
|
|
|
key-uid
|
|
|
|
#(.login ^js (status) account-data hashed-password)))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2022-06-09 12:42:36 +00:00
|
|
|
(defn login-with-config
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
|
|
|
[key-uid account-data hashed-password config]
|
|
|
|
(log/debug "[native-module] loginWithConfig")
|
|
|
|
(clear-web-data)
|
|
|
|
(let [config (if config (types/clj->json config) "")]
|
|
|
|
(init-keystore
|
|
|
|
key-uid
|
|
|
|
#(.loginWithConfig ^js (status) account-data hashed-password config))))
|
|
|
|
|
2021-01-18 13:01:57 +00:00
|
|
|
(defn export-db
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
2021-11-01 12:08:54 +00:00
|
|
|
[key-uid account-data hashed-password callback]
|
2021-01-18 13:01:57 +00:00
|
|
|
(log/debug "[native-module] export-db")
|
|
|
|
(clear-web-data)
|
|
|
|
(init-keystore
|
|
|
|
key-uid
|
2021-11-01 12:08:54 +00:00
|
|
|
#(.exportUnencryptedDatabase ^js (status) account-data hashed-password callback)))
|
2021-01-18 13:01:57 +00:00
|
|
|
|
|
|
|
(defn import-db
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
|
|
|
[key-uid account-data hashed-password]
|
|
|
|
(log/debug "[native-module] import-db")
|
|
|
|
(clear-web-data)
|
|
|
|
(init-keystore
|
|
|
|
key-uid
|
|
|
|
#(.importUnencryptedDatabase ^js (status) account-data hashed-password)))
|
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn logout
|
|
|
|
[]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] logout")
|
2019-09-04 18:59:41 +00:00
|
|
|
(clear-web-data)
|
2019-09-07 12:57:22 +00:00
|
|
|
(.logout ^js (status)))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
|
|
|
(defonce listener
|
2022-12-20 14:45:37 +00:00
|
|
|
(.addListener ^js react-native-utils/device-event-emitter
|
|
|
|
"gethEvent"
|
|
|
|
#(re-frame/dispatch [:signals/signal-received (.-jsonEvent ^js %)])))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
|
|
|
(defn multiaccount-load-account
|
2019-09-04 20:59:44 +00:00
|
|
|
"NOTE: beware, the password has to be sha3 hashed
|
|
|
|
|
|
|
|
this function is used after storing an account when you still want to
|
2019-09-04 18:59:41 +00:00
|
|
|
derive accounts from it, because saving an account flushes the loaded keys
|
|
|
|
from memory"
|
2019-09-04 20:59:44 +00:00
|
|
|
[address hashed-password callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] multiaccount-load-account")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.multiAccountLoadAccount ^js (status)
|
2022-12-20 14:45:37 +00:00
|
|
|
(types/clj->json {:address address
|
2019-09-04 20:59:44 +00:00
|
|
|
:password hashed-password})
|
2019-09-04 18:59:41 +00:00
|
|
|
callback))
|
|
|
|
|
|
|
|
(defn multiaccount-reset
|
|
|
|
"TODO: this function is not used anywhere
|
|
|
|
if usage isn't planned, remove"
|
|
|
|
[callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] multiaccount-reset")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.multiAccountReset ^js (status)
|
2019-09-04 18:59:41 +00:00
|
|
|
callback))
|
|
|
|
|
|
|
|
(defn multiaccount-derive-addresses
|
|
|
|
"NOTE: this should be named derive-accounts
|
|
|
|
this only derive addresses, they still need to be stored
|
|
|
|
with `multiaccount-store-derived` if you want to be able to
|
|
|
|
reuse the derived addresses later"
|
|
|
|
[account-id paths callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] multiaccount-derive-addresses")
|
2019-09-04 18:59:41 +00:00
|
|
|
(when (status)
|
2019-09-07 12:57:22 +00:00
|
|
|
(.multiAccountDeriveAddresses ^js (status)
|
2019-09-04 18:59:41 +00:00
|
|
|
(types/clj->json {:accountID account-id
|
2022-12-20 14:45:37 +00:00
|
|
|
:paths paths})
|
2019-09-04 18:59:41 +00:00
|
|
|
callback)))
|
|
|
|
|
|
|
|
(defn multiaccount-store-account
|
2019-09-04 20:59:44 +00:00
|
|
|
"NOTE: beware, the password has to be sha3 hashed
|
|
|
|
|
|
|
|
this stores the account and flush keys in memory so
|
2019-09-04 18:59:41 +00:00
|
|
|
in order to also store derived accounts like initial wallet
|
|
|
|
and chat accounts, you need to load the account again with
|
|
|
|
`multiaccount-load-account` before using `multiaccount-store-derived`
|
|
|
|
and the id of the account stored will have changed"
|
2020-07-09 10:14:38 +00:00
|
|
|
[account-id key-uid hashed-password callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] multiaccount-store-account")
|
2019-09-04 18:59:41 +00:00
|
|
|
(when (status)
|
2020-07-09 10:14:38 +00:00
|
|
|
(init-keystore
|
|
|
|
key-uid
|
2022-12-20 14:45:37 +00:00
|
|
|
#(.multiAccountStoreAccount ^js (status)
|
|
|
|
(types/clj->json {:accountID account-id
|
|
|
|
:password hashed-password})
|
|
|
|
callback))))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
|
|
|
(defn multiaccount-store-derived
|
2019-09-04 20:59:44 +00:00
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
2020-07-09 10:14:38 +00:00
|
|
|
[account-id key-uid paths hashed-password callback]
|
|
|
|
(log/debug "[native-module] multiaccount-store-derived"
|
2022-12-20 14:45:37 +00:00
|
|
|
"account-id"
|
|
|
|
account-id)
|
2020-07-09 10:14:38 +00:00
|
|
|
(init-keystore
|
|
|
|
key-uid
|
2022-12-20 14:45:37 +00:00
|
|
|
#(.multiAccountStoreDerived ^js (status)
|
|
|
|
(types/clj->json {:accountID account-id
|
|
|
|
:paths paths
|
|
|
|
:password hashed-password})
|
|
|
|
callback)))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
|
|
|
(defn multiaccount-generate-and-derive-addresses
|
|
|
|
"used to generate multiple multiaccounts for onboarding
|
|
|
|
NOTE: nothing is saved so you will need to use
|
|
|
|
`multiaccount-store-account` on the selected multiaccount
|
|
|
|
to store the key"
|
|
|
|
[n mnemonic-length paths callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] multiaccount-generate-and-derive-addresses")
|
2022-12-20 14:45:37 +00:00
|
|
|
(.multiAccountGenerateAndDeriveAddresses ^js (status)
|
|
|
|
(types/clj->json {:n n
|
|
|
|
:mnemonicPhraseLength mnemonic-length
|
|
|
|
:bip39Passphrase ""
|
|
|
|
:paths paths})
|
|
|
|
callback))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
|
|
|
(defn multiaccount-import-mnemonic
|
|
|
|
[mnemonic password callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] multiaccount-import-mnemonic")
|
2022-12-20 14:45:37 +00:00
|
|
|
(.multiAccountImportMnemonic ^js (status)
|
|
|
|
(types/clj->json {:mnemonicPhrase mnemonic
|
|
|
|
;;NOTE this is not the multiaccount password
|
|
|
|
:Bip39Passphrase password})
|
|
|
|
callback))
|
2019-08-01 15:49:33 +00:00
|
|
|
|
2020-02-28 11:37:16 +00:00
|
|
|
(defn multiaccount-import-private-key
|
|
|
|
[private-key callback]
|
|
|
|
(log/debug "[native-module] multiaccount-import-private-key")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.multiAccountImportPrivateKey ^js (status)
|
2022-12-20 14:45:37 +00:00
|
|
|
(types/clj->json {:privateKey private-key})
|
2020-02-28 11:37:16 +00:00
|
|
|
callback))
|
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn verify
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
|
|
|
[address hashed-password callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] verify")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.verify ^js (status) address hashed-password callback))
|
2018-11-26 15:52:29 +00:00
|
|
|
|
2021-07-13 13:41:45 +00:00
|
|
|
(defn verify-database-password
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
|
|
|
[key-uid hashed-password callback]
|
|
|
|
(log/debug "[native-module] verify-database-password")
|
|
|
|
(.verifyDatabasePassword ^js (status) key-uid hashed-password callback))
|
|
|
|
|
2018-12-04 13:49:09 +00:00
|
|
|
(defn login-with-keycard
|
2020-07-09 10:14:38 +00:00
|
|
|
[{:keys [key-uid multiaccount-data password chat-key]}]
|
2019-11-28 09:57:58 +00:00
|
|
|
(log/debug "[native-module] login-with-keycard")
|
2019-09-04 18:59:41 +00:00
|
|
|
(clear-web-data)
|
2020-07-09 10:14:38 +00:00
|
|
|
(init-keystore
|
|
|
|
key-uid
|
|
|
|
#(.loginWithKeycard ^js (status) multiaccount-data password chat-key)))
|
2018-12-04 13:49:09 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn set-soft-input-mode
|
|
|
|
[mode]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] set-soft-input-mode")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.setSoftInputMode ^js (status) mode))
|
2017-09-05 14:14:45 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn call-rpc
|
|
|
|
[payload callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] call-rpc")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.callRPC ^js (status) payload callback))
|
2017-09-05 14:14:45 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn call-private-rpc
|
|
|
|
[payload callback]
|
2019-09-07 12:57:22 +00:00
|
|
|
(.callPrivateRPC ^js (status) payload callback))
|
2018-04-18 08:49:15 +00:00
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn hash-transaction
|
|
|
|
"used for keycard"
|
|
|
|
[rpcParams callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] hash-transaction")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.hashTransaction ^js (status) rpcParams callback))
|
2019-02-28 15:09:21 +00:00
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn hash-message
|
|
|
|
"used for keycard"
|
|
|
|
[message callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] hash-message")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.hashMessage ^js (status) message callback))
|
2019-04-03 08:46:53 +00:00
|
|
|
|
2022-12-16 13:10:56 +00:00
|
|
|
(defn get-connection-string-for-bootstrapping-another-device
|
|
|
|
"Generates connection string form status-go for the purpose of local pairing on the sender end"
|
|
|
|
[config-json callback]
|
|
|
|
(log/info "[native-module] Fetching Connection String"
|
2022-12-20 14:45:37 +00:00
|
|
|
{:fn :get-connection-string-for-bootstrapping-another-device
|
2022-12-16 13:10:56 +00:00
|
|
|
:config-json config-json})
|
|
|
|
(.getConnectionStringForBootstrappingAnotherDevice ^js (status) config-json callback))
|
|
|
|
|
|
|
|
(defn input-connection-string-for-bootstrapping
|
|
|
|
"Provides connection string to status-go for the purpose of local pairing on the receiver end"
|
|
|
|
[connection-string config-json callback]
|
|
|
|
(log/info "[native-module] Sending Connection String"
|
2022-12-20 14:45:37 +00:00
|
|
|
{:fn :input-connection-string-for-bootstrapping
|
|
|
|
:config-json config-json
|
2022-12-16 13:10:56 +00:00
|
|
|
:connection-string connection-string})
|
|
|
|
(.inputConnectionStringForBootstrapping ^js (status) connection-string config-json callback))
|
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn hash-typed-data
|
|
|
|
"used for keycard"
|
|
|
|
[data callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] hash-typed-data")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.hashTypedData ^js (status) data callback))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2021-05-12 08:13:41 +00:00
|
|
|
(defn hash-typed-data-v4
|
|
|
|
"used for keycard"
|
|
|
|
[data callback]
|
|
|
|
(log/debug "[native-module] hash-typed-data-v4")
|
|
|
|
(.hashTypedDataV4 ^js (status) data callback))
|
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn send-transaction-with-signature
|
|
|
|
"used for keycard"
|
|
|
|
[rpcParams sig callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] send-transaction-with-signature")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.sendTransactionWithSignature ^js (status) rpcParams sig callback))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn sign-message
|
|
|
|
"NOTE: beware, the password in rpcParams has to be sha3 hashed"
|
|
|
|
[rpcParams callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] sign-message")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.signMessage ^js (status) rpcParams callback))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2022-01-06 13:54:18 +00:00
|
|
|
(defn recover-message
|
|
|
|
[rpcParams callback]
|
|
|
|
(log/debug "[native-module] recover")
|
|
|
|
(.recover ^js (status) rpcParams callback))
|
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn send-transaction
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
|
|
|
[rpcParams hashed-password callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] send-transaction")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.sendTransaction ^js (status) rpcParams hashed-password callback))
|
2019-04-03 08:46:53 +00:00
|
|
|
|
2019-09-04 20:59:44 +00:00
|
|
|
(defn sign-typed-data
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
|
|
|
[data account hashed-password callback]
|
2021-04-06 07:42:01 +00:00
|
|
|
(log/debug "[native-module] sign-typed-data")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.signTypedData ^js (status) data account hashed-password callback))
|
2019-02-28 15:09:21 +00:00
|
|
|
|
2021-04-06 07:42:01 +00:00
|
|
|
(defn sign-typed-data-v4
|
|
|
|
"NOTE: beware, the password has to be sha3 hashed"
|
|
|
|
[data account hashed-password callback]
|
|
|
|
(log/debug "[native-module] sign-typed-data-v4")
|
|
|
|
(.signTypedDataV4 ^js (status) data account hashed-password callback))
|
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn send-logs
|
|
|
|
[dbJson js-logs callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] send-logs")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.sendLogs ^js (status) dbJson js-logs callback))
|
2018-12-15 18:57:00 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn add-peer
|
|
|
|
[enode on-result]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] add-peer")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.addPeer ^js (status) enode on-result))
|
2017-12-05 10:18:30 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn close-application
|
|
|
|
[]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] close-application")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.closeApplication ^js (status)))
|
2018-02-26 02:27:29 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn connection-change
|
|
|
|
[type expensive?]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] connection-change")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.connectionChange ^js (status) type (boolean expensive?)))
|
2018-03-16 12:01:10 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn app-state-change
|
|
|
|
[state]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] app-state-change")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.appStateChange ^js (status) state))
|
2018-05-01 10:27:04 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn stop-local-notifications
|
|
|
|
[]
|
2020-09-25 12:35:10 +00:00
|
|
|
(log/debug "[native-module] stop-local-notifications")
|
|
|
|
(.stopLocalNotifications ^js (status)))
|
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn start-local-notifications
|
|
|
|
[]
|
2020-09-25 12:35:10 +00:00
|
|
|
(log/debug "[native-module] start-local-notifications")
|
|
|
|
(.startLocalNotifications ^js (status)))
|
2020-07-28 11:10:42 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn set-blank-preview-flag
|
|
|
|
[flag]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] set-blank-preview-flag")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.setBlankPreviewFlag ^js (status) flag))
|
2019-05-08 12:26:39 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn is24Hour
|
|
|
|
[]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] is24Hour")
|
2019-09-04 18:59:41 +00:00
|
|
|
;;NOTE: we have to check for status module because of tests
|
|
|
|
(when (status)
|
2019-09-07 12:57:22 +00:00
|
|
|
(.-is24Hour ^js (status))))
|
2018-07-19 15:51:06 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn get-device-model-info
|
|
|
|
[]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] get-device-model-info")
|
2019-09-04 18:59:41 +00:00
|
|
|
;;NOTE: we have to check for status module because of tests
|
2019-09-07 12:57:22 +00:00
|
|
|
(when-let [^js status (status)]
|
|
|
|
{:model (.-model status)
|
|
|
|
:brand (.-brand status)
|
|
|
|
:build-id (.-buildId status)
|
|
|
|
:device-id (.-deviceId status)}))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
|
|
|
(defn extract-group-membership-signatures
|
|
|
|
[signature-pairs callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] extract-group-membership-signatures")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.extractGroupMembershipSignatures ^js (status) signature-pairs callback))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn sign-group-membership
|
|
|
|
[content callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] sign-group-membership")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.signGroupMembership ^js (status) content callback))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn get-node-config
|
|
|
|
[callback]
|
2021-05-31 13:10:54 +00:00
|
|
|
(log/debug "[native-module] get-node-config")
|
|
|
|
(.getNodeConfig ^js (status) callback))
|
|
|
|
|
2019-09-04 18:59:41 +00:00
|
|
|
(defn update-mailservers
|
|
|
|
[enodes on-result]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] update-mailservers")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.updateMailservers ^js (status) enodes on-result))
|
2019-09-04 18:59:41 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn toggle-webview-debug
|
|
|
|
[on]
|
2020-08-06 13:49:35 +00:00
|
|
|
(log/debug "[native-module] toggle-webview-debug" on)
|
|
|
|
(.toggleWebviewDebug ^js (status) on))
|
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn rooted-device?
|
|
|
|
[callback]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] rooted-device?")
|
2019-09-04 18:59:41 +00:00
|
|
|
(cond
|
|
|
|
;; we assume that iOS is safe by default
|
|
|
|
platform/ios?
|
|
|
|
(callback false)
|
|
|
|
|
|
|
|
;; we check root on android
|
|
|
|
platform/android?
|
|
|
|
(if (status)
|
2019-09-07 12:57:22 +00:00
|
|
|
(.isDeviceRooted ^js (status) callback)
|
2019-09-04 18:59:41 +00:00
|
|
|
;; if module isn't initialized we return true to avoid degrading security
|
|
|
|
(callback true))
|
|
|
|
|
|
|
|
;; in unknown scenarios we also consider the device rooted to avoid degrading security
|
2022-12-20 14:45:37 +00:00
|
|
|
:else (callback true)))
|
2019-09-12 09:41:25 +00:00
|
|
|
|
|
|
|
(defn generate-gfycat
|
|
|
|
"Generate a 3 words random name based on the user public-key, synchronously"
|
|
|
|
[public-key]
|
|
|
|
{:pre [(utils.db/valid-public-key? public-key)]}
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] generate-gfycat")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.generateAlias ^js (status) public-key))
|
2019-09-12 09:41:25 +00:00
|
|
|
|
2019-11-28 10:00:29 +00:00
|
|
|
(defn generate-gfycat-async
|
|
|
|
"Generate a 3 words random name based on the user public-key, asynchronously"
|
|
|
|
[public-key callback]
|
|
|
|
{:pre [(utils.db/valid-public-key? public-key)]}
|
2019-09-07 12:57:22 +00:00
|
|
|
(.generateAliasAsync ^js (status) public-key callback))
|
2019-11-28 10:00:29 +00:00
|
|
|
|
2019-09-12 09:41:25 +00:00
|
|
|
(defn identicon
|
|
|
|
"Generate a icon based on a string, synchronously"
|
|
|
|
[seed]
|
2019-11-15 08:09:17 +00:00
|
|
|
(log/debug "[native-module] identicon")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.identicon ^js (status) seed))
|
2019-11-28 10:00:29 +00:00
|
|
|
|
2022-08-26 08:43:04 +00:00
|
|
|
(defn encode-transfer
|
|
|
|
[to-norm amount-hex]
|
|
|
|
(log/debug "[native-module] encode-transfer")
|
|
|
|
(.encodeTransfer ^js (status) to-norm amount-hex))
|
|
|
|
|
|
|
|
(defn encode-function-call
|
|
|
|
[method params]
|
|
|
|
(log/debug "[native-module] encode-function-call")
|
|
|
|
(.encodeFunctionCall ^js (status) method (types/clj->json params)))
|
|
|
|
|
|
|
|
(defn decode-parameters
|
|
|
|
[bytes-string types]
|
|
|
|
(log/debug "[native-module] decode-parameters")
|
2022-12-20 14:45:37 +00:00
|
|
|
(let [json-str (.decodeParameters ^js (status)
|
|
|
|
(types/clj->json {:bytesString bytes-string :types types}))]
|
2022-08-26 08:43:04 +00:00
|
|
|
(types/json->clj json-str)))
|
|
|
|
|
|
|
|
(defn hex-to-number
|
|
|
|
[hex]
|
|
|
|
(log/debug "[native-module] hex-to-number")
|
|
|
|
(let [json-str (.hexToNumber ^js (status) hex)]
|
|
|
|
(types/json->clj json-str)))
|
|
|
|
|
|
|
|
(defn number-to-hex
|
|
|
|
[num]
|
|
|
|
(log/debug "[native-module] number-to-hex")
|
|
|
|
(.numberToHex ^js (status) (str num)))
|
|
|
|
|
2022-10-18 16:05:07 +00:00
|
|
|
(defn sha3
|
|
|
|
[str]
|
|
|
|
(log/debug "[native-module] sha3")
|
|
|
|
(.sha3 ^js (status) str))
|
|
|
|
|
|
|
|
(defn utf8-to-hex
|
|
|
|
[str]
|
|
|
|
(log/debug "[native-module] utf8-to-hex")
|
|
|
|
(.utf8ToHex ^js (status) str))
|
|
|
|
|
|
|
|
(defn hex-to-utf8
|
|
|
|
[str]
|
|
|
|
(log/debug "[native-module] hex-to-utf8")
|
|
|
|
(.hexToUtf8 ^js (status) str))
|
|
|
|
|
|
|
|
(defn check-address-checksum
|
|
|
|
[address]
|
|
|
|
(log/debug "[native-module] check-address-checksum")
|
|
|
|
(let [result (.checkAddressChecksum ^js (status) address)]
|
|
|
|
(types/json->clj result)))
|
|
|
|
|
|
|
|
(defn address?
|
|
|
|
[address]
|
|
|
|
(log/debug "[native-module] address?")
|
|
|
|
(let [result (.isAddress ^js (status) address)]
|
|
|
|
(types/json->clj result)))
|
|
|
|
|
|
|
|
(defn to-checksum-address
|
|
|
|
[address]
|
|
|
|
(log/debug "[native-module] to-checksum-address")
|
|
|
|
(.toChecksumAddress ^js (status) address))
|
|
|
|
|
2019-11-28 10:00:29 +00:00
|
|
|
(defn identicon-async
|
|
|
|
"Generate a icon based on a string, asynchronously"
|
|
|
|
[seed callback]
|
2019-09-07 12:57:22 +00:00
|
|
|
(.identiconAsync ^js (status) seed callback))
|
2019-11-28 10:00:29 +00:00
|
|
|
|
|
|
|
(defn gfycat-identicon-async
|
|
|
|
"Generate an icon based on a string and 3 words random name asynchronously"
|
|
|
|
[seed callback]
|
2019-12-11 15:25:25 +00:00
|
|
|
(log/debug "[native-module] gfycat-identicon-async")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.generateAliasAndIdenticonAsync ^js (status) seed callback))
|
2019-12-31 10:50:45 +00:00
|
|
|
|
|
|
|
(defn validate-mnemonic
|
|
|
|
"Validate that a mnemonic conforms to BIP39 dictionary/checksum standards"
|
|
|
|
[mnemonic callback]
|
|
|
|
(log/debug "[native-module] validate-mnemonic")
|
2019-09-07 12:57:22 +00:00
|
|
|
(.validateMnemonic ^js (status) mnemonic callback))
|
2020-07-14 13:33:59 +00:00
|
|
|
|
|
|
|
(defn delete-multiaccount
|
|
|
|
"Delete multiaccount from database, deletes multiaccount's database and
|
|
|
|
key files."
|
|
|
|
[key-uid callback]
|
|
|
|
(log/debug "[native-module] delete-multiaccount")
|
|
|
|
(.deleteMultiaccount ^js (status) key-uid callback))
|
2020-07-28 11:06:58 +00:00
|
|
|
|
2021-08-13 07:53:40 +00:00
|
|
|
(defn delete-imported-key
|
|
|
|
"Delete imported key file."
|
|
|
|
[key-uid address hashed-password callback]
|
|
|
|
(log/debug "[native-module] delete-imported-key")
|
|
|
|
(.deleteImportedKey ^js (status) key-uid address hashed-password callback))
|
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn activate-keep-awake
|
|
|
|
[]
|
2020-07-28 11:06:58 +00:00
|
|
|
(log/debug "[native-module] activateKeepAwake")
|
|
|
|
(.activateKeepAwake ^js (status)))
|
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn deactivate-keep-awake
|
|
|
|
[]
|
2020-07-28 11:06:58 +00:00
|
|
|
(log/debug "[native-module] deactivateKeepAwake")
|
|
|
|
(.deactivateKeepAwake ^js (status)))
|
2020-09-28 10:37:03 +00:00
|
|
|
|
2022-12-20 14:45:37 +00:00
|
|
|
(defn reset-keyboard-input
|
|
|
|
[input selection]
|
2020-09-28 10:37:03 +00:00
|
|
|
(log/debug "[native-module] resetKeyboardInput")
|
|
|
|
(when platform/android?
|
|
|
|
(.resetKeyboardInputCursor ^js (status) input selection)))
|
2021-05-26 08:55:01 +00:00
|
|
|
|
|
|
|
;; passwords are hashed
|
|
|
|
(defn reset-password
|
|
|
|
[key-uid current-password# new-password# callback]
|
|
|
|
(log/debug "[native-module] change-database-password")
|
|
|
|
(init-keystore
|
|
|
|
key-uid
|
|
|
|
#(.reEncryptDbAndKeystore ^js (status) key-uid current-password# new-password# callback)))
|
2021-07-13 13:41:45 +00:00
|
|
|
|
|
|
|
(defn convert-to-keycard-account
|
|
|
|
[{:keys [key-uid] :as multiaccount-data} settings current-password# new-password callback]
|
|
|
|
(log/debug "[native-module] convert-to-keycard-account")
|
|
|
|
(.convertToKeycardAccount ^js (status)
|
|
|
|
key-uid
|
|
|
|
(types/clj->json multiaccount-data)
|
|
|
|
(types/clj->json settings)
|
|
|
|
current-password#
|
|
|
|
new-password
|
|
|
|
callback))
|