diff --git a/README.md b/README.md
index c888d5f..5679185 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,16 @@
# Nexus Tools
-Nexus Tools is an installer for the [Android SDK Platform Tools](https://developer.android.com/studio/releases/platform-tools) package, which includes [ADB](https://developer.android.com/studio/command-line/adb.html), Fastboot, and other applications. Nexus Tools is writen in Dart, and can run on Linux, macOS, Windows, Windows Subsystem for Linux, and Chrome OS.
+Nexus Tools is an installer and updater for [Android SDK Platform Tools](https://developer.android.com/studio/releases/platform-tools), which includes [ADB](https://developer.android.com/studio/command-line/adb.html), Fastboot, and other applications. Nexus Tools is writen in Dart, and can run on Linux, macOS, Windows, and Chrome OS.
-Nexus Tools downloads the latest Platform tools package directly from Google's servers (so you're always getting the latest version), saves them to `~/.nexustools` (`$Home\NexusTools` on Windows), and adds the directory to your system's path. On Windows, Nexus Tools can optionally install [Koush's Universal ADB Driver](https://github.com/koush/UniversalAdbDriver).
+Nexus Tools downloads the latest Platform tools package directly from Google's servers, so you're always getting the latest version. The tools are installed to `~/.nexustools` (`%AppData%\NexusTools` on Windows), and adds the directory to your system's path. On Windows, Nexus Tools can optionally install [Koush's Universal ADB Driver](https://github.com/koush/UniversalAdbDriver). The SDK Platform Tools can be updated by running `nexustools -i`, or you can uninstall everything by running `nexustools -r`.
-Once Nexus Tools is finished, you can run `adb`, `fastboot`, and other commands with no problems. **You need to open a new terminal/command line window after installation for changes to take effect.** The SDK Platform Tools can be updated by running `nexustools -i`, or you can uninstall everything by running `nexustools -r`.
+
+
+
-_Featured on [MakeUseOf](https://www.makeuseof.com/how-to-unlock-android-device-bootloader), [XDA](https://www.xda-developers.com/set-up-adb-and-fastboot-on-linux-mac-os-x-and-chrome-os-with-a-single-command/), [Android Police](https://www.androidpolice.com/install-and-use-adb-on-windows-mac-linux-android-chromebooks-browser/), [9to5Google](https://9to5google.com/2021/12/02/how-to-downgrade-from-android-12-to-android-11-on-google-pixel/#:~:text=Nexus%20Tools), [Wccftech](https://wccftech.com/set-android-adb-fastboot-mac-os/), [Redmond Pie](https://www.redmondpie.com/how-to-install-android-5.0-lollipop-on-nexus-5-using-mac-the-easy-way/), and others!_
+## How to use on Linux, macOS, and Chrome OS
-### How to use on Linux, macOS, and Chrome OS
-
-Paste this command into the Terminal app:
+Paste this command into your Terminal app:
```
bash <(curl -s https://raw.githubusercontent.com/corbindavenport/nexus-tools/main/install.sh)
@@ -18,7 +18,7 @@ bash <(curl -s https://raw.githubusercontent.com/corbindavenport/nexus-tools/mai
You can also download the Mac and Linux versions from the [latest release page](https://github.com/corbindavenport/nexus-tools/releases/), un-zip the file, and run it from the Terminal.
-### How to use on Windows
+## How to use on Windows
Open Windows PowerShell from the Start Menu and paste this command:
@@ -28,15 +28,9 @@ iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercon
You can also download the Windows version from the [latest release page](https://github.com/corbindavenport/nexus-tools/releases/), un-zip the file, and run it from Windows PowerShell or the Command Prompt.
-### Compatibility
-
-The Nexus Tools installer is compiled as an x86_64 (64-bit x86) application for macOS, x86_64 Linux, and Windows. It can run in the [Rosetta 2 compatibility layer](https://support.apple.com/en-us/HT211861) on Macs with Apple Silicon chips, like M1 and M2. It also works on ARM Windows 10 and 11 through the [WOW64 translation layer](https://docs.microsoft.com/en-us/windows/arm/apps-on-arm-x86-emulation).
-
-ADB, Fastboot, and other applications in the Platform Tools package are compiled for x86_64 on Windows and Linux. The Mac versions are Universal Binaries, so they run natively on both Intel and Apple Silicon Mac computers.
+## Privacy & Analytics
-### Analytics
-
-Nexus Tools uses [Plausible Analytics](https://plausible.io) to transmit your operating system and CPU architecture during the installation process. This data is not sold or shared in any way, it's only for me to know which hardware platforms I should focus my attention on. You can disable analytics reporting by adding the `--no-analytics` parameter to the install command, like this:
+Nexus Tools uses [Plausible Analytics](https://plausible.io) to transmit your operating system and CPU architecture during the installation process for development purposes. This analytics data is viewable publicly at [plausible.io/nexustools.corbin.io](https://plausible.io/nexustools.corbin.io). You can disable analytics reporting by adding the `--no-analytics` parameter to the install command, like this:
```
bash <(curl -s https://raw.githubusercontent.com/corbindavenport/nexus-tools/main/install.sh) --no-analytics
@@ -48,14 +42,6 @@ It also works when running Nexus Tools locally:
nexustools --no-analytics
```
-This analytics data is viewable publicly at [plausible.io/nexustools.corbin.io](https://plausible.io/nexustools.corbin.io).
-
-### Development info
-
-Nexus Tools is written in Dart, so you need the [Dart SDK](https://dart.dev/get-dart) to work on it. You can run Nexus Tools from source like this:
-
-```
-dart ./bin/main.dart
-```
+---
-The `compile.sh` (macOS and Linux) and `compile.ps1` scripts create executables and zip them. You can also use GitHub Actions to compile Nexus Tools, by navigating to Actions > Compile Nexus Tools > Run workflow.
+Nexus Tools has been featured on [MakeUseOf](https://www.makeuseof.com/how-to-unlock-android-device-bootloader), [XDA](https://www.xda-developers.com/set-up-adb-and-fastboot-on-linux-mac-os-x-and-chrome-os-with-a-single-command/), [Android Police](https://www.androidpolice.com/install-and-use-adb-on-windows-mac-linux-android-chromebooks-browser/), [9to5Google](https://9to5google.com/2021/12/02/how-to-downgrade-from-android-12-to-android-11-on-google-pixel/#:~:text=Nexus%20Tools), [Wccftech](https://wccftech.com/set-android-adb-fastboot-mac-os/), [Redmond Pie](https://www.redmondpie.com/how-to-install-android-5.0-lollipop-on-nexus-5-using-mac-the-easy-way/), and other places.
\ No newline at end of file
diff --git a/bin/main.dart b/bin/main.dart
index fa0c10c..6b6bf45 100644
--- a/bin/main.dart
+++ b/bin/main.dart
@@ -3,29 +3,25 @@ import 'package:http/http.dart' as http;
import 'dart:io' as io;
import 'package:uuid/uuid.dart';
import 'dart:convert';
+import 'package:dart_ipify/dart_ipify.dart';
import 'package:nexustools/sys.dart' as sys;
-String macZip =
- 'https://dl.google.com/android/repository/platform-tools-latest-darwin.zip';
-String linuxZip =
- 'https://dl.google.com/android/repository/platform-tools-latest-linux.zip';
-String windowsZip =
- 'https://dl.google.com/android/repository/platform-tools-latest-windows.zip';
-List supportedCPUs = ['amd64', 'x86_64', 'AMD64'];
+String macZip = 'https://dl.google.com/android/repository/platform-tools-latest-darwin.zip';
+String linuxZip = 'https://dl.google.com/android/repository/platform-tools-latest-linux.zip';
+String windowsZip = 'https://dl.google.com/android/repository/platform-tools-latest-windows.zip';
Map envVars = io.Platform.environment;
-double appVersion = 5.4;
+double appVersion = 5.5;
+String baseRepo = 'corbindavenport/nexus-tools';
// Function for checking for update
Future checkUpdate() async {
- var net = Uri.parse(
- 'https://api.github.com/repos/corbindavenport/nexus-tools/releases/latest');
+ var net = Uri.parse('https://api.github.com/repos/$baseRepo/releases/latest');
try {
var data = await http.read(net);
var parsedData = json.decode(data);
// Compare versions
if (double.parse(parsedData['tag_name']) > appVersion) {
- print(
- '[INFO] Nexus Tools update available! Download: https://git.io/JBuTh');
+ print('[INFO] Nexus Tools update available! https://github.com/$baseRepo/blob/main/README.md');
} else {
print('[INFO] You have the latest version of Nexus Tools.');
}
@@ -43,7 +39,7 @@ String nexusToolsDir() {
} else if (io.Platform.isLinux) {
home = envVars['HOME'];
} else if (io.Platform.isWindows) {
- home = envVars['UserProfile'];
+ home = envVars['AppData'];
}
if (home.endsWith('/')) {
home = home.substring(0, home.length - 1);
@@ -81,13 +77,10 @@ Future installPlatformTools() async {
}
// Move files out of platform-tools subdirectory and delete the subdirectory
if (io.Platform.isWindows) {
- await io.Process.run('move', ['$dir\\platform-tools\\*', '$dir'],
- runInShell: true);
- await io.Process.run('rmdir', ['/Q', '/S', '$dir\\platform-tools'],
- runInShell: true);
+ await io.Process.run('move', ['$dir\\platform-tools\\*', '$dir'], runInShell: true);
+ await io.Process.run('rmdir', ['/Q', '/S', '$dir\\platform-tools'], runInShell: true);
} else {
- await io.Process.run(
- '/bin/sh', ['-c', 'mv -f -v $dir/platform-tools/* $dir/']);
+ await io.Process.run('/bin/sh', ['-c', 'mv -f -v $dir/platform-tools/* $dir/']);
await io.Process.run('/bin/sh', ['-c', 'rm -rf $dir/platform-tools']);
}
// Mark binaries in directory as executable
@@ -101,21 +94,15 @@ Future installPlatformTools() async {
// Create help link
if (io.Platform.isWindows) {
var file = io.File('$dir\\About Nexus Tools.url');
- await file.writeAsString(
- '[InternetShortcut]\nURL=https://github.com/corbindavenport/nexus-tools/blob/master/README.md',
- mode: io.FileMode.writeOnly);
+ await file.writeAsString('[InternetShortcut]\nURL=https://github.com/$baseRepo/blob/main/README.md', mode: io.FileMode.writeOnly);
} else if (io.Platform.isMacOS) {
var file = io.File('$dir/About Nexus Tools.url');
- await file.writeAsString(
- '[InternetShortcut]\nURL=https://github.com/corbindavenport/nexus-tools/blob/master/README.md',
- mode: io.FileMode.writeOnly);
+ await file.writeAsString('[InternetShortcut]\nURL=https://github.com/$baseRepo/blob/main/README.md', mode: io.FileMode.writeOnly);
} else if (io.Platform.isLinux) {
var file = io.File('$dir/About Nexus Tools.desktop');
- await file.writeAsString(
- '[Desktop Entry]\nEncoding=UTF-8\nIcon=text-html\nType=Link\nName=About Nexus Tools\nURL=https://github.com/corbindavenport/nexus-tools/blob/master/README.md',
- mode: io.FileMode.writeOnly);
+ await file.writeAsString('[Desktop Entry]\nEncoding=UTF-8\nIcon=text-html\nType=Link\nName=About Nexus Tools\nURL=https://github.com/$baseRepo/blob/main/README.md', mode: io.FileMode.writeOnly);
}
- // Install drivers on Windows
+ // Windows-specific functions
if (io.Platform.isWindows) {
// Check if Universal Adb Driver package is already installed
var info = await io.Process.run('wmic', ['product', 'get', 'Name']);
@@ -124,59 +111,85 @@ Future installPlatformTools() async {
print('[ OK ] Universal ADB Drivers already installed.');
} else {
// Prompt to install drivers
- print(
- '[WARN] Drivers may be required for ADB if they are not already installed.');
- io.stdout
- .write('[WARN] Install drivers from adb.clockworkmod.com? [Y/N] ');
+ print('[WARN] Drivers may be required for ADB if they are not already installed.');
+ io.stdout.write('[WARN] Install drivers from adb.clockworkmod.com? [Y/N] ');
var input = io.stdin.readLineSync();
if (input?.toLowerCase() == 'y') {
await installWindowsDrivers(dir);
}
}
+ // Check if old Nexus Tools directory needs to be deleted
+ var oldFolder = envVars['UserProfile'] + r'\NexusTools';
+ var oldFolderExists = await io.Directory(oldFolder).exists();
+ if (oldFolderExists) {
+ await io.Directory(oldFolder).delete(recursive: true);
+ print('[ OK ] Deleted old directory at $oldFolder.');
+ }
+ // Add entry to Windows Installed Apps List
+ // Documentation: https://learn.microsoft.com/en-us/windows/win32/msi/uninstall-registry-key
+ var uninstallString = dir + r'\nexustools.exe';
+ var regEntry = 'Windows Registry Editor Version 5.00\n\n';
+ regEntry += r'[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\NexusTools]';
+ regEntry += '\n"DisplayName"="Nexus Tools (ADB, Fastboot, Android SDK Platform Tools)"';
+ regEntry += '\n"Publisher"="Corbin Davenport"';
+ regEntry += '\n"URLInfoAbout"="https://github.com/$baseRepo"';
+ regEntry += '\n"NoModify"=dword:00000001';
+ regEntry += '\n' + r'"UninstallString"="\"' + uninstallString.replaceAll(r'\', r'\\') + r'\" --remove"';
+ var regFile = await io.File('$dir/nexustools.reg');
+ await regFile.writeAsString(regEntry, mode: io.FileMode.writeOnly);
+ await io.Process.run('reg', ['import', '$dir/nexustools.reg']);
}
}
// Function for removing Platform Tools package
Future removePlatformTools() async {
+ print('[WARN] This will delete the Android System Tools (ADB, Fastboot, etc.) installed by Nexus Tools, as well as the Nexus Tools application.');
+ io.stdout.write('[WARN] Continue with removal? [Y/N] ');
+ var input = io.stdin.readLineSync();
+ if (input?.toLowerCase() != 'y') {
+ return;
+ }
+ // Delete primary directory if it exists
+ // TODO: Add support for new directory on Windows
// Nexus Tools 3.2+ (August 2016-Present) installs binaries in ~/.nexustools
var dir = nexusToolsDir();
var installExists = false;
installExists = await io.Directory(dir).exists();
if (installExists) {
- print(
- '[WARN] Deleting $dir will delete Android System Tools (ADB, Fastboot, etc.).');
- print('[WARN] This will also delete the Nexus Tools application.');
- io.stdout.write('[WARN] Continue with removal? [Y/N] ');
- var input = io.stdin.readLineSync();
- if (input?.toLowerCase() != 'y') {
- return;
- }
// Proceed with deletion
await io.Directory(dir).delete(recursive: true);
print('[ OK ] Deleted directory at $dir.');
- print('[INFO] Nexus Tools can be re-installed at https://git.io/JBuTh.');
- } else {
- print('[EROR] No installation found at $dir.');
}
+ // Windows-specific functions
+ if (io.Platform.isWindows) {
+ var oldDir = envVars['UserProfile'] + r'\NexusTools';
+ var oldinstallExists = await io.Directory(oldDir).exists();
+ if (oldinstallExists) {
+ // Proceed with deletion
+ await io.Directory(oldDir).delete(recursive: true);
+ print('[ OK ] Deleted directory at $oldDir.');
+ }
+ // Clean up registry
+ await io.Process.run('reg', ['delete', r'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\NexusTools', '/f']);
+ print('[ OK ] Removed registry keys.');
+ }
+ // Exit message
+ print('[INFO] Nexus Tools can be reinstalled from here: https://github.com/$baseRepo\n');
}
// Function for installing Windows Universal ADB drivers
// Drivers provided by ClockWorkMod: https://adb.clockworkmod.com/
Future installWindowsDrivers(String dir) async {
print('[....] Downloading drivers, please wait.');
- var net = Uri.parse(
- 'https://github.com/koush/adb.clockworkmod.com/releases/latest/download/UniversalAdbDriverSetup.msi');
+ var net = Uri.parse('https://github.com/koush/adb.clockworkmod.com/releases/latest/download/UniversalAdbDriverSetup.msi');
try {
var data = await http.readBytes(net);
var file = io.File('$dir\\ADB Drivers.msi');
await file.writeAsBytes(data, mode: io.FileMode.writeOnly);
print('[....] Opening driver installer.');
- await io.Process.run(
- 'start', ['/wait', 'msiexec.exe', '/i', '$dir\\ADB Drivers.msi'],
- runInShell: true);
+ await io.Process.run('start', ['/wait', 'msiexec.exe', '/i', '$dir\\ADB Drivers.msi'], runInShell: true);
} catch (e) {
- print(
- '[EROR] There was an error downloading drivers, try downloading them from adb.clockworkmod.com.');
+ print('[EROR] There was an error downloading drivers, try downloading them from adb.clockworkmod.com.');
}
}
@@ -198,15 +211,9 @@ void connectAnalytics() async {
var cpu = await sys.getCPUArchitecture();
// Set data
var net = Uri.parse('https://plausible.io/api/event');
- var netHeaders = {
- 'user-agent': 'Nexus Tools',
- 'X-Forwarded-For': '127.0.0.1',
- 'Content-Type': 'application/json',
- 'User-Agent':
- 'Mozilla/5.0 ($realOS) AppleWebKit/500 (KHTML, like Gecko) Chrome/$appVersion $id'
- };
- var netBody =
- '{"name":"pageview","url":"app://localhost/$realOS/$cpu","domain":"nexustools.corbin.io"}';
+ final ipv4 = await Ipify.ipv4();
+ var netHeaders = {'user-agent': 'Nexus Tools', 'X-Forwarded-For': ipv4, 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 ($realOS) AppleWebKit/500 (KHTML, like Gecko) Chrome/$appVersion $id'};
+ var netBody = '{"name":"pageview","url":"app://localhost/$realOS/$cpu","domain":"nexustools.corbin.io"}';
// Send request
try {
await http.post(net, headers: netHeaders, body: netBody);
@@ -226,8 +233,7 @@ Future checkInstall() async {
installExists = await io.File('$dir/adb').exists();
}
if (installExists) {
- io.stdout.write(
- '[WARN] Platform tools already installed in $dir. Continue? [Y/N] ');
+ io.stdout.write('[WARN] Platform tools already installed in $dir. Continue? [Y/N] ');
var input = io.stdin.readLineSync();
if (input?.toLowerCase() != 'y') {
io.exit(0);
@@ -241,23 +247,11 @@ Future checkInstall() async {
sys.checkIfInstalled(dir, 'adb', 'ADB');
// Check if Fastboot is already installed
sys.checkIfInstalled(dir, 'fastboot', 'Fastboot');
- // Check CPU architecture
- var cpu = await sys.getCPUArchitecture();
- if (supportedCPUs.contains(cpu)) {
- print('[ OK ] Your hardware platform is supported, yay!');
- } else if (io.Platform.isMacOS && (cpu == 'arm64')) {
- print('[ OK ] Your hardware platform is supported, yay!');
- } else {
- print(
- '[EROR] Your hardware platform is detected as $cpu. Google only provides Platform Tools for x86-based platforms.');
- io.exit(1);
- }
// Display environment-specific warnings
var isWSL = await io.Directory('/mnt/c/Windows').exists();
var isChromeOS = await io.Directory('/usr/share/themes/CrosAdapta').exists();
if (isWSL) {
- print(
- '[WARN] WSL does not support USB devices, you will only be able to use ADB over Wi-Fi.');
+ print('[WARN] WSL does not support USB devices, you will only be able to use ADB over Wi-Fi.');
} else if (isChromeOS) {
print('[WARN] Chrome OS 75 or higher is required for USB support.');
}
@@ -273,7 +267,7 @@ Usage: nexustools [OPTIONS]
Example: nexustools -i (this installs Platform Tools)
-i, --install Install/update Android Platform Tools
- -r, --remove Remove Platform Tools
+ -r, --remove Remove Nexus Tools & Android Platform Tools
-n, --no-analytics Run Nexus Tools without Plausible Analytics
(analytics is only run on install)
-c, --check Check for Nexus Tools update
@@ -306,12 +300,10 @@ void main(List arguments) async {
} else {
appName = 'Terminal window';
}
- print(
- '[INFO] Installation complete! Open a new $appName to apply changes.');
+ print('[INFO] Installation complete! Open a new $appName to apply changes.');
print('[INFO] Run "nexustools --help" at any time for more options.');
- print(
- '[INFO] Join the Discord server: https://discord.com/invite/59wfy5cNHw');
- print('[INFO] Donate to support development: https://git.io/J4jct');
+ print('[INFO] Join the Discord server: https://discord.com/invite/59wfy5cNHw');
+ print('[INFO] Donate to support development: https://tinyurl.com/nexusdonate\n');
} else if (arguments.contains('-r') || arguments.contains('--remove')) {
print('[INFO] Nexus Tools $appVersion');
// Start removal
@@ -321,6 +313,6 @@ void main(List arguments) async {
} else if (arguments.contains('-c') || arguments.contains('--check')) {
await checkUpdate();
} else {
- print('[EROR] Invalid arguments. Run nexustools -h for help!');
+ print('[EROR] Invalid arguments. Run nexustools -h for help!\n');
}
}
diff --git a/install.ps1 b/install.ps1
index 0648285..6a8addb 100644
--- a/install.ps1
+++ b/install.ps1
@@ -1,6 +1,6 @@
# This script is just a wrapper to start the Dart executable from the GitHub releases page.
-$Dir = "$Home\NexusTools"
+$Dir = "$ENV:APPDATA\NexusTools"
$Arch = $ENV:Processor_Architecture
$BaseUrl = "https://github.com/corbindavenport/nexus-tools"
$Download = "$BaseUrl/releases/latest/download/nexustools-windows-x64.zip"
diff --git a/install.sh b/install.sh
index 297e9c9..5a4b3bb 100755
--- a/install.sh
+++ b/install.sh
@@ -36,9 +36,7 @@ mkdir -p $DIR
if [ "$OS" = "Darwin" ]; then # macOS
# Install Rosetta x86 emulation layer if needed
if [ "$ARCH" = "arm64" ]; then
- echo "[WARN] Apple Rosetta compatibility layer will be enabled, if it has not been already. Press ENTER to install or X to cancel."
- read -sn1 input
- [ "$input" = "" ] && /usr/sbin/softwareupdate --install-rosetta --agree-to-license || exit
+ echo "[WARN] Rosetta 2 compatibility layer is required. If installation fails, run Nexus Tools again after running this command: /usr/sbin/softwareupdate --install-rosetta"
fi
DOWNLOAD="$BASEURL/releases/latest/download/nexustools-macos-x64.zip"
_run_executable
diff --git a/lib/sys.dart b/lib/sys.dart
index a68b1b8..7daf3d6 100644
--- a/lib/sys.dart
+++ b/lib/sys.dart
@@ -76,4 +76,4 @@ Future addPath(String path) async {
print('[WARN] Shell could not be detected, you will need to manually add $path to your PATH.');
}
}
-}
\ No newline at end of file
+}
diff --git a/pubspec.lock b/pubspec.lock
index 0e1a545..e3fda98 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,120 +5,161 @@ packages:
dependency: "direct dev"
description:
name: archive
- url: "https://pub.dartlang.org"
+ sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a"
+ url: "https://pub.dev"
source: hosted
- version: "3.2.2"
+ version: "3.3.7"
async:
dependency: transitive
description:
name: async
- url: "https://pub.dartlang.org"
+ sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ url: "https://pub.dev"
source: hosted
- version: "2.8.2"
- charcode:
- dependency: transitive
- description:
- name: charcode
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.3.1"
+ version: "2.11.0"
collection:
dependency: transitive
description:
name: collection
- url: "https://pub.dartlang.org"
+ sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
+ url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.17.1"
console:
dependency: "direct dev"
description:
name: console
- url: "https://pub.dartlang.org"
+ sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a
+ url: "https://pub.dev"
source: hosted
version: "4.1.0"
+ convert:
+ dependency: transitive
+ description:
+ name: convert
+ sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.1"
crypto:
dependency: transitive
description:
name: crypto
- url: "https://pub.dartlang.org"
+ sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ dart_ipify:
+ dependency: "direct dev"
+ description:
+ name: dart_ipify
+ sha256: "3b70d589504126107e81ad0703d91394cc8e2039cb0a11ebd92b9b824a5e9561"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "1.1.1"
http:
dependency: "direct dev"
description:
name: http
- url: "https://pub.dartlang.org"
+ sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
+ url: "https://pub.dev"
source: hosted
- version: "0.13.4"
+ version: "0.13.5"
http_parser:
dependency: transitive
description:
name: http_parser
- url: "https://pub.dartlang.org"
+ sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+ url: "https://pub.dev"
source: hosted
- version: "4.0.0"
+ version: "4.0.2"
io:
dependency: "direct dev"
description:
name: io
- url: "https://pub.dartlang.org"
+ sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
+ url: "https://pub.dev"
source: hosted
- version: "1.0.3"
+ version: "1.0.4"
+ js:
+ dependency: transitive
+ description:
+ name: js
+ sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.7"
meta:
dependency: transitive
description:
name: meta
- url: "https://pub.dartlang.org"
+ sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
+ url: "https://pub.dev"
source: hosted
- version: "1.7.0"
+ version: "1.9.1"
path:
dependency: transitive
description:
name: path
- url: "https://pub.dartlang.org"
+ sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+ url: "https://pub.dev"
source: hosted
- version: "1.8.1"
+ version: "1.8.3"
+ pointycastle:
+ dependency: transitive
+ description:
+ name: pointycastle
+ sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.7.3"
source_span:
dependency: transitive
description:
name: source_span
- url: "https://pub.dartlang.org"
+ sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ url: "https://pub.dev"
source: hosted
- version: "1.8.2"
+ version: "1.10.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
- url: "https://pub.dartlang.org"
+ sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
- url: "https://pub.dartlang.org"
+ sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.2.1"
typed_data:
dependency: transitive
description:
name: typed_data
- url: "https://pub.dartlang.org"
+ sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.3.1"
uuid:
dependency: "direct dev"
description:
name: uuid
- url: "https://pub.dartlang.org"
+ sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.7"
vector_math:
dependency: transitive
description:
name: vector_math
- url: "https://pub.dartlang.org"
+ sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
sdks:
- dart: ">=2.14.0 <3.0.0"
+ dart: ">=2.19.0 <3.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 962f8b0..5e5eb37 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -14,4 +14,5 @@ dev_dependencies:
io:
uuid:
archive: ^3.2.2
- console:
\ No newline at end of file
+ console:
+ dart_ipify: ^1.1.1
\ No newline at end of file