2023-01-24 18:24:46 +00:00
|
|
|
import 'package:cake_wallet/core/address_validator.dart';
|
2022-03-15 09:11:53 +00:00
|
|
|
import 'package:cake_wallet/core/yat_service.dart';
|
2023-09-25 13:47:39 +00:00
|
|
|
import 'package:cake_wallet/entities/ens_record.dart';
|
2021-07-07 13:50:55 +00:00
|
|
|
import 'package:cake_wallet/entities/openalias_record.dart';
|
2021-07-07 14:31:16 +00:00
|
|
|
import 'package:cake_wallet/entities/parsed_address.dart';
|
2021-07-07 13:50:55 +00:00
|
|
|
import 'package:cake_wallet/entities/unstoppable_domain_address.dart';
|
2022-03-15 09:11:53 +00:00
|
|
|
import 'package:cake_wallet/entities/emoji_string_extension.dart';
|
2024-05-06 19:16:25 +00:00
|
|
|
import 'package:cake_wallet/exchange/provider/thorchain_exchange.provider.dart';
|
2023-10-05 12:18:35 +00:00
|
|
|
import 'package:cake_wallet/mastodon/mastodon_api.dart';
|
2024-01-27 02:34:38 +00:00
|
|
|
import 'package:cake_wallet/nostr/nostr_api.dart';
|
2023-11-03 19:23:11 +00:00
|
|
|
import 'package:cake_wallet/store/settings_store.dart';
|
2023-01-24 18:24:46 +00:00
|
|
|
import 'package:cake_wallet/twitter/twitter_api.dart';
|
|
|
|
import 'package:cw_core/crypto_currency.dart';
|
2024-12-09 18:23:59 +00:00
|
|
|
import 'package:cw_core/utils/print_verbose.dart';
|
2023-10-03 14:55:38 +00:00
|
|
|
import 'package:cw_core/wallet_base.dart';
|
2022-06-28 15:46:32 +00:00
|
|
|
import 'package:cw_core/wallet_type.dart';
|
2022-06-13 11:41:46 +00:00
|
|
|
import 'package:cake_wallet/entities/fio_address_provider.dart';
|
2024-01-27 02:34:38 +00:00
|
|
|
import 'package:flutter/cupertino.dart';
|
2022-03-15 09:11:53 +00:00
|
|
|
|
|
|
|
class AddressResolver {
|
2023-11-03 19:23:11 +00:00
|
|
|
AddressResolver({required this.yatService, required this.wallet, required this.settingsStore})
|
|
|
|
: walletType = wallet.type;
|
2023-01-31 19:39:08 +00:00
|
|
|
|
2022-03-15 09:11:53 +00:00
|
|
|
final YatService yatService;
|
2022-06-28 15:46:32 +00:00
|
|
|
final WalletType walletType;
|
2023-10-03 17:07:05 +00:00
|
|
|
final WalletBase wallet;
|
2023-11-03 19:23:11 +00:00
|
|
|
final SettingsStore settingsStore;
|
2023-01-24 18:24:46 +00:00
|
|
|
|
2022-03-15 09:11:53 +00:00
|
|
|
static const unstoppableDomains = [
|
2024-11-25 16:26:41 +00:00
|
|
|
"888",
|
|
|
|
"altimist",
|
|
|
|
"anime",
|
|
|
|
"austin",
|
|
|
|
"bald",
|
|
|
|
"benji",
|
|
|
|
"bet",
|
|
|
|
"binanceus",
|
|
|
|
"bitcoin",
|
|
|
|
"bitget",
|
|
|
|
"blockchain",
|
|
|
|
"ca",
|
|
|
|
"chomp",
|
|
|
|
"clay",
|
|
|
|
"co",
|
|
|
|
"com",
|
|
|
|
"crypto",
|
|
|
|
"dao",
|
|
|
|
"dfz",
|
|
|
|
"digital",
|
|
|
|
"dream",
|
|
|
|
"eth",
|
|
|
|
"ethermail",
|
|
|
|
"farms",
|
|
|
|
"fun",
|
|
|
|
"go",
|
|
|
|
"group",
|
|
|
|
"hi",
|
|
|
|
"host",
|
|
|
|
"info",
|
|
|
|
"io",
|
|
|
|
"klever",
|
|
|
|
"kresus",
|
|
|
|
"kryptic",
|
|
|
|
"lfg",
|
|
|
|
"life",
|
|
|
|
"live",
|
|
|
|
"ltd",
|
|
|
|
"manga",
|
|
|
|
"metropolis",
|
|
|
|
"moon",
|
|
|
|
"mumu",
|
|
|
|
"net",
|
|
|
|
"nft",
|
|
|
|
"online",
|
|
|
|
"org",
|
|
|
|
"pog",
|
|
|
|
"polygon",
|
|
|
|
"press",
|
|
|
|
"pro",
|
|
|
|
"propykeys",
|
|
|
|
"pudgy",
|
|
|
|
"pw",
|
|
|
|
"raiin",
|
|
|
|
"secret",
|
|
|
|
"site",
|
|
|
|
"smobler",
|
|
|
|
"space",
|
|
|
|
"stepn",
|
|
|
|
"store",
|
|
|
|
"tball",
|
|
|
|
"tech",
|
|
|
|
"ubu",
|
|
|
|
"uno",
|
|
|
|
"unstoppable",
|
|
|
|
"wallet",
|
|
|
|
"website",
|
|
|
|
"wifi",
|
|
|
|
"witg",
|
|
|
|
"wrkx",
|
|
|
|
"x",
|
|
|
|
"xmr",
|
|
|
|
"xyz",
|
|
|
|
"zil",
|
2023-01-31 19:39:08 +00:00
|
|
|
];
|
2021-07-07 13:50:55 +00:00
|
|
|
|
2023-01-24 18:24:46 +00:00
|
|
|
static String? extractAddressByType({required String raw, required CryptoCurrency type}) {
|
|
|
|
final addressPattern = AddressValidator.getAddressFromStringPattern(type);
|
|
|
|
|
|
|
|
if (addressPattern == null) {
|
2023-04-21 18:36:47 +00:00
|
|
|
throw Exception('Unexpected token: $type for getAddressFromStringPattern');
|
2023-01-24 18:24:46 +00:00
|
|
|
}
|
|
|
|
|
2024-09-20 14:24:25 +00:00
|
|
|
final match = RegExp(addressPattern, multiLine: true).firstMatch(raw);
|
Bitcoin derivations (#1089)
* - Update and Fix Conflicts with main
* Add Balances for ERC20 tokens
* Fix conflicts with main
* Add erc20 abi json
* Add send erc20 tokens initial function
* add missing getHeightByDate in Haven [skip ci]
* Allow contacts and wallets from the same tag
* Add Shiba Inu icon
* Add send ERC-20 tokens initial flow
* Add missing import in generated file
* Add initial approach for transaction sending for ERC-20 tokens
* Refactor signing/sending transactions
* Add initial flow for transactions subscription
* Refactor signing/sending transactions
* Add home settings icon
* Fix conflicts with main
* Initial flow for home settings
* Add logic flow for adding erc20 tokens
* Fix initial UI
* Finalize UI for Tokens
* Integrate UI with Ethereum flow
* Add "Enable/Disable" feature for ERC20 tokens
* Add initial Erc20 tokens
* Add Sorting and Pin Native Token features
* Fix price sorting
* Sort tokens list as well when Sort criteria changes
* - Improve sorting balances flow
- Add initial add token from search bar flow
* Fix Accounts Popup UI
* Fix Pin native token
* Fix Enabling/Disabling tokens
Fix sorting by fiat once app is opened
Improve token availability mechanism
* Fix deleting token
Fix renaming tokens
* Fix issue with search
* Add more tokens
* - Fix scroll issue
- Add ERC20 tokens placeholder image in picker
* - Separate and organize default erc20 tokens
- Fix scrolling
- Add token placeholder images in picker
- Sort disabled tokens alphabetically
* Change BNB token initial availability [skip ci]
* Fix Conflicts with main
* Fix Conflicts with main
* Add Verse ERC20 token to the initial tokens list
* Add rename wallet to Ethereum
* Integrate EtherScan API for fetching address transactions
Generate Ethereum specific secrets in Ethereum package
* Adjust transactions fiat price for ERC20 tokens
* Free Up GitHub Actions Ubuntu Runner Disk Space
* Free Up GitHub Actions Ubuntu Runner Disk space (trial 2)
* Fix Transaction Fee display
* Save transaction history
* Enhance loading time for erc20 tokens transactions
* Minor Fixes and Enhancements
* Fix sending erc20
fix block explorer issue
* Fix int overflow
* Fix transaction amount conversions
* Minor: `slow` -> `Slow` [skip-ci]
* initial changes
* more base config stuff
* config changes
* successfully builds!
* save
* successfully add nano wallet
* save
* seed generation
* receive screen + node screen working
* tx history working and fiat fixes
* balance working
* derivation updates
* nano-unfinished
* sends working
* remove fees from send screen, send and receive transactions working
* fixes + auto receive incoming txs
* fix for scanning QR codes
* save
* update translations
* fixes
* more fixes
* more strings
* small fix
* fix github actions workflow
* potential fix
* potential fix
* ci/cd fix
* change rep working
* seed generation fixes
* fixes
* save
* change rep screen functional
* save
* banano changes
* fixes, start adding ui for PoW
* pow node changes
* update translations
* fix
* account changing barely working
* save
* disable account generation
* small fix
* save
* UI work
* save
* fixes after merge main
* fixes
* remove monero stuff, work on derivation ui
* lots of fixes + finish up seed derivation
* last minute fixes
* node related fixes
* more fixes
* small fix
* more fixes
* fixes
* pretty big refactor for pow, still some bugs
* finally works!
* get transactions after send
* fix
* merge conflict fixes
* save
* fix pow node showing up twice
* done
* initial changes
* small fix
* more merge fixes
* fixes
* more fixes
* fix
* save
* fix manage pow nodes setting appearing on other wallets
* fix contact bug
* fixes
* fiat fixes
* save
* save
* save
* save
* updates
* cleanup
* restore fix
* fixes
* remove deprecated alert
* fix
* small fix
* remove outdated warning
* electrum restore fixes
* fixes
* fixes
* fix
* derivation fixes
* nano fixes pt.1
* nano fixes pt.2
* bip39 fixes
* pownode refactor
* nodes pages fixes
* observer fix
* ssl fix
* remove old references
* remove unused imports
* code cleanup
* small fix
* small potential fix
* save
* derivation fixes
* deterministic fix
* fix pt.2
* derivation class fixes
* review fixes from nano that also apply here
* formatting
* stuff that should've stayed deleted
* post merge fixes
* remove problematic imports and duplicate changes
* Delete lib/nano/nano.dart
* move wallet restore page proxy code to the view model
* fix dashboard page indicators being the same color
* debatably better refactoring of derivationInfo, migration needed
* additional refactor improvements
* blanket comment some stuff out to narrow down this issue
* refactor fixes
* fix nano exchange
* fix , bug, i.e. replace , with . when making a nano transaction
* fix nano sending, update restore page wording, and other minor fixes
* write migration for existing bitcoin and nano wallets
* merge fixes
* minor fixes
* use default derivation type when restoring from qr code
* fixes for restoring
* fixes
* fixes
* merge fix
* Fix issues with Creating Electrum and Restoring Bip39
* updates & fixes
* Add missing case for no transactions BIP39 wallet restore
* Make the default BIP39 the 84 derivation path
* Add Samourai Deposit
* litecoin mnemonic error fix
* Bip39 passphrase support (#1412)
* save
* passphrase working
* fix for when loading wallets + translation update
* minor fix
* Fix Nano
* minor fix [skip ci]
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
* change error state seed conditions into throwables [skip ci]
* litecoin fixes
* Bip39 minor enhancements (#1416)
* minor enhancements
* rename bitcoin_derivations -> electrum_derivations
* Remove duplicate derivations
handle default case
* minor fix
* Enable passphrase for Litecoin
* obscure text of passphrase
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Justin Ehrenhofer <justin.ehrenhofer@gmail.com>
Co-authored-by: fossephate <fosse@book.local>
2024-04-30 00:49:56 +00:00
|
|
|
return match?.group(0)?.replaceAllMapped(RegExp('[^0-9a-zA-Z]|bitcoincash:|nano_|ban_'),
|
2024-03-04 17:32:10 +00:00
|
|
|
(Match match) {
|
2023-10-17 15:59:41 +00:00
|
|
|
String group = match.group(0)!;
|
Bitcoin derivations (#1089)
* - Update and Fix Conflicts with main
* Add Balances for ERC20 tokens
* Fix conflicts with main
* Add erc20 abi json
* Add send erc20 tokens initial function
* add missing getHeightByDate in Haven [skip ci]
* Allow contacts and wallets from the same tag
* Add Shiba Inu icon
* Add send ERC-20 tokens initial flow
* Add missing import in generated file
* Add initial approach for transaction sending for ERC-20 tokens
* Refactor signing/sending transactions
* Add initial flow for transactions subscription
* Refactor signing/sending transactions
* Add home settings icon
* Fix conflicts with main
* Initial flow for home settings
* Add logic flow for adding erc20 tokens
* Fix initial UI
* Finalize UI for Tokens
* Integrate UI with Ethereum flow
* Add "Enable/Disable" feature for ERC20 tokens
* Add initial Erc20 tokens
* Add Sorting and Pin Native Token features
* Fix price sorting
* Sort tokens list as well when Sort criteria changes
* - Improve sorting balances flow
- Add initial add token from search bar flow
* Fix Accounts Popup UI
* Fix Pin native token
* Fix Enabling/Disabling tokens
Fix sorting by fiat once app is opened
Improve token availability mechanism
* Fix deleting token
Fix renaming tokens
* Fix issue with search
* Add more tokens
* - Fix scroll issue
- Add ERC20 tokens placeholder image in picker
* - Separate and organize default erc20 tokens
- Fix scrolling
- Add token placeholder images in picker
- Sort disabled tokens alphabetically
* Change BNB token initial availability [skip ci]
* Fix Conflicts with main
* Fix Conflicts with main
* Add Verse ERC20 token to the initial tokens list
* Add rename wallet to Ethereum
* Integrate EtherScan API for fetching address transactions
Generate Ethereum specific secrets in Ethereum package
* Adjust transactions fiat price for ERC20 tokens
* Free Up GitHub Actions Ubuntu Runner Disk Space
* Free Up GitHub Actions Ubuntu Runner Disk space (trial 2)
* Fix Transaction Fee display
* Save transaction history
* Enhance loading time for erc20 tokens transactions
* Minor Fixes and Enhancements
* Fix sending erc20
fix block explorer issue
* Fix int overflow
* Fix transaction amount conversions
* Minor: `slow` -> `Slow` [skip-ci]
* initial changes
* more base config stuff
* config changes
* successfully builds!
* save
* successfully add nano wallet
* save
* seed generation
* receive screen + node screen working
* tx history working and fiat fixes
* balance working
* derivation updates
* nano-unfinished
* sends working
* remove fees from send screen, send and receive transactions working
* fixes + auto receive incoming txs
* fix for scanning QR codes
* save
* update translations
* fixes
* more fixes
* more strings
* small fix
* fix github actions workflow
* potential fix
* potential fix
* ci/cd fix
* change rep working
* seed generation fixes
* fixes
* save
* change rep screen functional
* save
* banano changes
* fixes, start adding ui for PoW
* pow node changes
* update translations
* fix
* account changing barely working
* save
* disable account generation
* small fix
* save
* UI work
* save
* fixes after merge main
* fixes
* remove monero stuff, work on derivation ui
* lots of fixes + finish up seed derivation
* last minute fixes
* node related fixes
* more fixes
* small fix
* more fixes
* fixes
* pretty big refactor for pow, still some bugs
* finally works!
* get transactions after send
* fix
* merge conflict fixes
* save
* fix pow node showing up twice
* done
* initial changes
* small fix
* more merge fixes
* fixes
* more fixes
* fix
* save
* fix manage pow nodes setting appearing on other wallets
* fix contact bug
* fixes
* fiat fixes
* save
* save
* save
* save
* updates
* cleanup
* restore fix
* fixes
* remove deprecated alert
* fix
* small fix
* remove outdated warning
* electrum restore fixes
* fixes
* fixes
* fix
* derivation fixes
* nano fixes pt.1
* nano fixes pt.2
* bip39 fixes
* pownode refactor
* nodes pages fixes
* observer fix
* ssl fix
* remove old references
* remove unused imports
* code cleanup
* small fix
* small potential fix
* save
* derivation fixes
* deterministic fix
* fix pt.2
* derivation class fixes
* review fixes from nano that also apply here
* formatting
* stuff that should've stayed deleted
* post merge fixes
* remove problematic imports and duplicate changes
* Delete lib/nano/nano.dart
* move wallet restore page proxy code to the view model
* fix dashboard page indicators being the same color
* debatably better refactoring of derivationInfo, migration needed
* additional refactor improvements
* blanket comment some stuff out to narrow down this issue
* refactor fixes
* fix nano exchange
* fix , bug, i.e. replace , with . when making a nano transaction
* fix nano sending, update restore page wording, and other minor fixes
* write migration for existing bitcoin and nano wallets
* merge fixes
* minor fixes
* use default derivation type when restoring from qr code
* fixes for restoring
* fixes
* fixes
* merge fix
* Fix issues with Creating Electrum and Restoring Bip39
* updates & fixes
* Add missing case for no transactions BIP39 wallet restore
* Make the default BIP39 the 84 derivation path
* Add Samourai Deposit
* litecoin mnemonic error fix
* Bip39 passphrase support (#1412)
* save
* passphrase working
* fix for when loading wallets + translation update
* minor fix
* Fix Nano
* minor fix [skip ci]
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
* change error state seed conditions into throwables [skip ci]
* litecoin fixes
* Bip39 minor enhancements (#1416)
* minor enhancements
* rename bitcoin_derivations -> electrum_derivations
* Remove duplicate derivations
handle default case
* minor fix
* Enable passphrase for Litecoin
* obscure text of passphrase
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Justin Ehrenhofer <justin.ehrenhofer@gmail.com>
Co-authored-by: fossephate <fosse@book.local>
2024-04-30 00:49:56 +00:00
|
|
|
if (group.startsWith('bitcoincash:') ||
|
|
|
|
group.startsWith('nano_') ||
|
|
|
|
group.startsWith('ban_')) {
|
2023-10-17 15:59:41 +00:00
|
|
|
return group;
|
|
|
|
}
|
|
|
|
return '';
|
|
|
|
});
|
2023-01-24 18:24:46 +00:00
|
|
|
}
|
|
|
|
|
2024-01-27 02:34:38 +00:00
|
|
|
bool isEmailFormat(String address) {
|
|
|
|
final RegExp emailRegex = RegExp(
|
|
|
|
r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$',
|
|
|
|
caseSensitive: false,
|
|
|
|
);
|
|
|
|
return emailRegex.hasMatch(address);
|
|
|
|
}
|
|
|
|
|
2024-05-06 19:16:25 +00:00
|
|
|
Future<ParsedAddress> resolve(BuildContext context, String text, CryptoCurrency currency) async {
|
|
|
|
final ticker = currency.title;
|
2022-03-15 09:11:53 +00:00
|
|
|
try {
|
2023-01-24 18:24:46 +00:00
|
|
|
if (text.startsWith('@') && !text.substring(1).contains('@')) {
|
2024-03-01 19:38:48 +00:00
|
|
|
if (settingsStore.lookupsTwitter) {
|
2023-11-03 19:23:11 +00:00
|
|
|
final formattedName = text.substring(1);
|
|
|
|
final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName);
|
|
|
|
final addressFromBio = extractAddressByType(
|
2024-03-04 17:32:10 +00:00
|
|
|
raw: twitterUser.description,
|
|
|
|
type: CryptoCurrency.fromString(ticker, walletCurrency: wallet.currency));
|
2023-11-03 19:23:11 +00:00
|
|
|
if (addressFromBio != null) {
|
2024-03-01 19:38:48 +00:00
|
|
|
return ParsedAddress.fetchTwitterAddress(
|
|
|
|
address: addressFromBio,
|
|
|
|
name: text,
|
|
|
|
profileImageUrl: twitterUser.profileImageUrl,
|
|
|
|
profileName: twitterUser.name);
|
2023-11-03 19:23:11 +00:00
|
|
|
}
|
2023-02-12 22:38:12 +00:00
|
|
|
|
2023-11-03 19:23:11 +00:00
|
|
|
final pinnedTweet = twitterUser.pinnedTweet?.text;
|
|
|
|
if (pinnedTweet != null) {
|
2024-03-04 17:32:10 +00:00
|
|
|
final addressFromPinnedTweet = extractAddressByType(
|
|
|
|
raw: pinnedTweet,
|
|
|
|
type: CryptoCurrency.fromString(ticker, walletCurrency: wallet.currency));
|
2023-11-03 19:23:11 +00:00
|
|
|
if (addressFromPinnedTweet != null) {
|
2024-03-01 19:38:48 +00:00
|
|
|
return ParsedAddress.fetchTwitterAddress(
|
|
|
|
address: addressFromPinnedTweet,
|
|
|
|
name: text,
|
|
|
|
profileImageUrl: twitterUser.profileImageUrl,
|
|
|
|
profileName: twitterUser.name);
|
2023-11-03 19:23:11 +00:00
|
|
|
}
|
2023-02-12 22:38:12 +00:00
|
|
|
}
|
2023-01-24 18:24:46 +00:00
|
|
|
}
|
|
|
|
}
|
2023-10-05 12:18:35 +00:00
|
|
|
|
|
|
|
if (text.startsWith('@') && text.contains('@', 1) && text.contains('.', 1)) {
|
2023-11-03 19:23:11 +00:00
|
|
|
if (settingsStore.lookupsMastodon) {
|
|
|
|
final subText = text.substring(1);
|
|
|
|
final hostNameIndex = subText.indexOf('@');
|
|
|
|
final hostName = subText.substring(hostNameIndex + 1);
|
|
|
|
final userName = subText.substring(0, hostNameIndex);
|
|
|
|
|
|
|
|
final mastodonUser =
|
2024-03-04 17:32:10 +00:00
|
|
|
await MastodonAPI.lookupUserByUserName(userName: userName, apiHost: hostName);
|
2023-11-03 19:23:11 +00:00
|
|
|
|
|
|
|
if (mastodonUser != null) {
|
2024-05-06 19:16:25 +00:00
|
|
|
String? addressFromBio = extractAddressByType(raw: mastodonUser.note, type: currency);
|
2023-11-03 19:23:11 +00:00
|
|
|
|
|
|
|
if (addressFromBio != null) {
|
2024-03-01 19:38:48 +00:00
|
|
|
return ParsedAddress.fetchMastodonAddress(
|
|
|
|
address: addressFromBio,
|
|
|
|
name: text,
|
|
|
|
profileImageUrl: mastodonUser.profileImageUrl,
|
|
|
|
profileName: mastodonUser.username);
|
2023-11-03 19:23:11 +00:00
|
|
|
} else {
|
|
|
|
final pinnedPosts =
|
2024-03-04 17:32:10 +00:00
|
|
|
await MastodonAPI.getPinnedPosts(userId: mastodonUser.id, apiHost: hostName);
|
2023-11-03 19:23:11 +00:00
|
|
|
|
|
|
|
if (pinnedPosts.isNotEmpty) {
|
|
|
|
final userPinnedPostsText = pinnedPosts.map((item) => item.content).join('\n');
|
2024-05-06 19:16:25 +00:00
|
|
|
String? addressFromPinnedPost =
|
|
|
|
extractAddressByType(raw: userPinnedPostsText, type: currency);
|
2023-11-03 19:23:11 +00:00
|
|
|
|
|
|
|
if (addressFromPinnedPost != null) {
|
|
|
|
return ParsedAddress.fetchMastodonAddress(
|
2024-03-01 19:38:48 +00:00
|
|
|
address: addressFromPinnedPost,
|
|
|
|
name: text,
|
|
|
|
profileImageUrl: mastodonUser.profileImageUrl,
|
|
|
|
profileName: mastodonUser.username);
|
2023-11-03 19:23:11 +00:00
|
|
|
}
|
2023-10-05 12:18:35 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-24 18:24:46 +00:00
|
|
|
if (!text.startsWith('@') && text.contains('@') && !text.contains('.')) {
|
2022-06-13 11:41:46 +00:00
|
|
|
final bool isFioRegistered = await FioAddressProvider.checkAvail(text);
|
|
|
|
if (isFioRegistered) {
|
|
|
|
final address = await FioAddressProvider.getPubAddress(text, ticker);
|
2023-01-31 19:39:08 +00:00
|
|
|
return ParsedAddress.fetchFioAddress(address: address, name: text);
|
|
|
|
}
|
2022-06-13 11:41:46 +00:00
|
|
|
}
|
2022-03-15 09:11:53 +00:00
|
|
|
if (text.hasOnlyEmojis) {
|
2024-03-04 17:32:10 +00:00
|
|
|
if (settingsStore.lookupsYatService) {
|
2023-11-03 19:23:11 +00:00
|
|
|
if (walletType != WalletType.haven) {
|
|
|
|
final addresses = await yatService.fetchYatAddress(text, ticker);
|
|
|
|
return ParsedAddress.fetchEmojiAddress(addresses: addresses, name: text);
|
|
|
|
}
|
2022-06-28 15:46:32 +00:00
|
|
|
}
|
2021-08-27 17:46:24 +00:00
|
|
|
}
|
2024-05-06 19:16:25 +00:00
|
|
|
|
|
|
|
final thorChainAddress = await ThorChainExchangeProvider.lookupAddressByName(text);
|
|
|
|
if (thorChainAddress != null) {
|
|
|
|
String? address =
|
|
|
|
thorChainAddress[ticker] ?? (ticker == 'RUNE' ? thorChainAddress['THOR'] : null);
|
|
|
|
if (address != null) {
|
|
|
|
return ParsedAddress.thorChainAddress(address: address, name: text);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-15 09:11:53 +00:00
|
|
|
final formattedName = OpenaliasRecord.formatDomainName(text);
|
|
|
|
final domainParts = formattedName.split('.');
|
|
|
|
final name = domainParts.last;
|
2021-07-07 13:50:55 +00:00
|
|
|
|
2022-03-15 09:11:53 +00:00
|
|
|
if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) {
|
|
|
|
return ParsedAddress(addresses: [text]);
|
2021-07-07 13:50:55 +00:00
|
|
|
}
|
|
|
|
|
2022-11-11 13:55:21 +00:00
|
|
|
if (unstoppableDomains.any((domain) => name.trim() == domain)) {
|
2024-03-04 17:32:10 +00:00
|
|
|
if (settingsStore.lookupsUnstoppableDomains) {
|
2023-11-03 19:23:11 +00:00
|
|
|
final address = await fetchUnstoppableDomainAddress(text, ticker);
|
|
|
|
return ParsedAddress.fetchUnstoppableDomainAddress(address: address, name: text);
|
|
|
|
}
|
2022-03-15 09:11:53 +00:00
|
|
|
}
|
2021-07-07 13:50:55 +00:00
|
|
|
|
2023-09-29 15:58:19 +00:00
|
|
|
if (text.endsWith(".eth")) {
|
2023-11-03 19:23:11 +00:00
|
|
|
if (settingsStore.lookupsENS) {
|
|
|
|
final address = await EnsRecord.fetchEnsAddress(text, wallet: wallet);
|
|
|
|
if (address.isNotEmpty && address != "0x0000000000000000000000000000000000000000") {
|
|
|
|
return ParsedAddress.fetchEnsAddress(name: text, address: address);
|
|
|
|
}
|
2023-09-25 13:47:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-31 19:39:08 +00:00
|
|
|
if (formattedName.contains(".")) {
|
2024-03-04 17:32:10 +00:00
|
|
|
if (settingsStore.lookupsOpenAlias) {
|
2023-11-03 19:23:11 +00:00
|
|
|
final txtRecord = await OpenaliasRecord.lookupOpenAliasRecord(formattedName);
|
|
|
|
if (txtRecord != null) {
|
|
|
|
final record = await OpenaliasRecord.fetchAddressAndName(
|
2024-06-25 16:52:31 +00:00
|
|
|
formattedName: formattedName, ticker: ticker.toLowerCase(), txtRecord: txtRecord);
|
2023-11-03 19:23:11 +00:00
|
|
|
return ParsedAddress.fetchOpenAliasAddress(record: record, name: text);
|
|
|
|
}
|
2023-01-31 19:39:08 +00:00
|
|
|
}
|
|
|
|
}
|
2024-01-27 02:34:38 +00:00
|
|
|
if (isEmailFormat(text)) {
|
|
|
|
final nostrProfile = await NostrProfileHandler.queryProfile(context, text);
|
|
|
|
if (nostrProfile?.relays != null) {
|
|
|
|
final nostrUserData =
|
|
|
|
await NostrProfileHandler.processRelays(context, nostrProfile!, text);
|
|
|
|
|
|
|
|
if (nostrUserData != null) {
|
2024-09-20 14:24:25 +00:00
|
|
|
String? addressFromBio = extractAddressByType(raw: nostrUserData.about, type: currency);
|
2024-01-27 02:34:38 +00:00
|
|
|
if (addressFromBio != null) {
|
2024-03-04 17:32:10 +00:00
|
|
|
return ParsedAddress.nostrAddress(
|
|
|
|
address: addressFromBio,
|
|
|
|
name: text,
|
|
|
|
profileImageUrl: nostrUserData.picture,
|
|
|
|
profileName: nostrUserData.name);
|
2024-01-27 02:34:38 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-03-15 09:11:53 +00:00
|
|
|
} catch (e) {
|
2024-12-09 18:23:59 +00:00
|
|
|
printV(e.toString());
|
2021-07-07 13:50:55 +00:00
|
|
|
}
|
|
|
|
|
2022-03-15 09:11:53 +00:00
|
|
|
return ParsedAddress(addresses: [text]);
|
2021-07-07 13:50:55 +00:00
|
|
|
}
|
2022-01-14 13:18:03 +00:00
|
|
|
}
|