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