Skip to content
111 changes: 111 additions & 0 deletions bucket/peerbanhelper.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
{
"version": "9.2.3",
"description": "Automatically block unwanted, leeches and abnormal BT peers with support for customized and cloud rules.",
"homepage": "https://docs.pbh-btn.com/en/",
"license": "GPL-3.0-or-later",
"notes": [
"[Tutorial](https://docs.pbh-btn.com/en/docs/category/%E4%B8%8B%E8%BD%BD%E5%99%A8%E9%85%8D%E7%BD%AE)",
"Console mode can be started via the shell with `peerbanhelper-cli`",
"or `peerbanhelper-cli-jbr`.",
"",
"[教程](https://docs.pbh-btn.com/docs/category/%E4%B8%8B%E8%BD%BD%E5%99%A8%E9%85%8D%E7%BD%AE/)",
"控制台模式可以在命令行中使用`peerbanhelper-cli`或`peerbanhelper-cli-jbr`启动。",
""
],
"suggest": {
"Java": "java/intellij-jbr25"
},
"architecture": {
"64bit": {
"url": "https://github.com/PBH-BTN/PeerBanHelper/releases/download/v9.2.3/PeerBanHelper_9.2.3.zip",
"hash": "ed8a7f4b9e974e15abbd2f353a49180fc7b33a8ac483b7e197778dd05077f2c2"
},
"arm64": {
"url": "https://github.com/PBH-BTN/PeerBanHelper/releases/download/v9.2.3/PeerBanHelper_9.2.3.zip",
"hash": "ed8a7f4b9e974e15abbd2f353a49180fc7b33a8ac483b7e197778dd05077f2c2"
}
},
"extract_dir": "PeerBanHelper",
"pre_install": [
"invoke-RestMethod -Uri \"https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v$version/install4j/icon.ico\" -OutFile \"$dir\\icon.ico\"",
"",
"invoke-RestMethod -Uri \"https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v$version/pkg/portable/1.%20GUI%20Mode.bat\" -OutFile \"$dir\\1. GUI Mode.bat\"",
"invoke-RestMethod -Uri \"https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v$version/pkg/portable/2.%20GUI%20mode%20(silent).bat\" -OutFile \"$dir\\2. GUI mode (silent).bat\"",
"invoke-RestMethod -Uri \"https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v$version/pkg/portable/3.%20Console.bat\" -OutFile \"$dir\\3. Console.bat\"",
Comment on lines +29 to +34
Copy link

@coderabbitai coderabbitai bot Dec 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat bucket/peerbanhelper.json

Repository: ScoopInstaller/Extras

Length of output: 4761


🏁 Script executed:

#!/bin/bash
# Verify that the referenced files exist at the specified GitHub tags
VERSION="9.2.3"

echo "=== Testing icon.ico ==="
curl -sI "https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v${VERSION}/install4j/icon.ico" 2>&1 | head -5

echo ""
echo "=== Testing batch files ==="
for file in "1.%20GUI%20Mode.bat" "2.%20GUI%20mode%20(silent).bat" "3.%20Console.bat"; do
  echo "Testing: $file"
  curl -sI "https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v${VERSION}/pkg/portable/${file}" 2>&1 | head -3
  echo ""
done

Repository: ScoopInstaller/Extras

Length of output: 713


🏁 Script executed:

#!/bin/bash
# Search for similar pre_install patterns in other Scoop manifests
echo "=== Manifests with pre_install blocks that download files ==="
rg -l "pre_install.*invoke-RestMethod|pre_install.*Invoke-WebRequest" bucket/ --type json | head -10

Repository: ScoopInstaller/Extras

Length of output: 126


Consider removing pre_install file downloads or adding hash verification.

The icon.ico and batch files are downloaded from GitHub during installation without hash verification, which is unusual in Scoop Extras manifests. While files are currently accessible, this approach lacks integrity protection and depends on tag persistence. Either include these files in the main archive or provide a way to verify their integrity, such as sourcing them from a release asset with published checksums.

🤖 Prompt for AI Agents
In bucket/peerbanhelper.json around lines 29 to 34, the pre_install currently
downloads icon.ico and several .bat files from GitHub without any integrity
checks; remove these direct invoke-RestMethod downloads and either (a) include
those files inside the main release archive distributed via the manifest so
Scoop fetches them with the existing manifest checksum, or (b) change the
downloads to use a release asset (not raw tag URLs) that has published checksums
and add explicit hash verification entries in the manifest so Scoop can validate
integrity; update the manifest to reference the chosen source and remove the
unsecured raw downloads.

Copy link
Author

@WordlessEcho WordlessEcho Dec 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PeerBanHelper didn't provide these files individual in release. They provide a portable zip with bat and JBR bundle in it causing more 270 MB+ to download.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for manifests that download files from GitHub raw URLs in pre_install
echo "=== Manifests using GitHub raw URLs in pre_install ==="
rg -n "github\.com.*raw.*refs/tags" bucket/ --type json -C 2 | head -50

echo ""
echo "=== Count of manifests with invoke-RestMethod in pre_install ==="
rg -l "pre_install.*invoke-RestMethod|pre_install.*Invoke-WebRequest" bucket/ --type json | wc -l

echo ""
echo "=== Examples of manifests downloading additional files ==="
rg -l "pre_install.*invoke-RestMethod.*OutFile" bucket/ --type json | head -5

Length of output: 1300


🏁 Script executed:

#!/bin/bash
# Check the content of the upstream bat files to see if they could be recreated inline
VERSION="9.2.3"

echo "=== Content of 1. GUI Mode.bat ==="
curl -sL "https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v${VERSION}/pkg/portable/1.%20GUI%20Mode.bat" 2>&1

echo ""
echo "=== Content of 2. GUI mode (silent).bat ==="
curl -sL "https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v${VERSION}/pkg/portable/2.%20GUI%20mode%20(silent).bat" 2>&1

echo ""
echo "=== Content of 3. Console.bat ==="
curl -sL "https://github.com/PBH-BTN/PeerBanHelper/raw/refs/tags/v${VERSION}/pkg/portable/3.%20Console.bat" 2>&1

Length of output: 1588


🏁 Script executed:

#!/bin/bash
# Check what the manifest does with the bat files after downloading
cat bucket/peerbanhelper.json | jq -r '.pre_install' | head -40

Length of output: 1840


🏁 Script executed:

#!/bin/bash
# Check the available release assets for version 9.2.3
echo "=== Release assets for v9.2.3 ==="
gh api repos/PBH-BTN/PeerBanHelper/releases/tags/v9.2.3 --jq '.assets[] | {name: .name, size: .size, download_url: .browser_download_url}'

echo ""
echo "=== Check if portable zip contains the icon ==="
curl -sL "https://github.com/PBH-BTN/PeerBanHelper/releases/download/v9.2.3/PeerBanHelper_9.2.3.zip" -o /tmp/pbh.zip 2>&1
unzip -l /tmp/pbh.zip | grep -E "icon\.ico|\.bat"

Length of output: 3388


@WordlessEcho, I understand the size concern—356 MB is indeed excessive when you only need the JAR. However, downloading files from GitHub raw URLs without hash verification is a security risk and this pattern doesn't exist elsewhere in the Extras bucket.

Since the bat files are simple and have predictable content, I recommend generating them inline in the pre_install script instead of downloading them. This eliminates the security concern while keeping the smaller download size. Here's the approach:

# Generate bat files directly in pre_install
@"
@echo off
title PeerBanHelper (GUI Mode)
start javaw.exe -XX:+UseCompactObjectHeaders --enable-native-access=ALL-UNNAMED -Djdk.attach.allowAttachSelf=true -XX:MaxRAMPercentage=85.0 -XX:+UseZGC -XX:SoftMaxHeapSize=386M -XX:ZUncommitDelay=1 -Xss512k -XX:+UseStringDeduplication -XX:-ShrinkHeapInSteps -Dsun.net.useExclusiveBind=false -Dpbh.release=portable -Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -Dconsole.encoding=UTF-8 -jar `"$dir\PeerBanHelper.jar`"
"@ | Out-File "$dir\gui.bat" -Encoding ascii

For the icon:

  • Either skip it (shortcuts can work without custom icons)
  • Or if the icon is essential, request upstream to include it as a separate release asset with a published checksum

This approach:

  • ✅ Maintains the 67 MB download size benefit
  • ✅ Eliminates unverified file downloads
  • ✅ Keeps full control over the content
  • ✅ Follows Scoop best practices

Would you like help converting the current download-and-modify approach to inline generation?


🧠 Learnings used
Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16378
File: bucket/compactgui.json:20-22
Timestamp: 2025-10-19T13:58:23.389Z
Learning: In the ScoopInstaller/Extras repository, the CompactGUI manifest removed hash verification from the autoupdate block because the hash verification mechanism (scraping SHA-256 from release page HTML) is no longer available in newer CompactGUI releases. GitHub asset digests exist in beta releases but not in v3.8.0, and Scoop doesn't have built-in support for extracting from GitHub API asset digests.

Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16328
File: bucket/winutil.json:0-0
Timestamp: 2025-10-13T09:37:06.093Z
Learning: When reviewing code in Scoop manifests, always verify the actual file content if the diff appears incomplete or unusual, as diff context can be truncated or displayed incorrectly. The pattern `[string[]](...).ForEach{...}` is commonly used in post_uninstall scripts across the Extras repository.

Learnt from: haussmann
Repo: ScoopInstaller/Extras PR: 16863
File: bucket/browseros.json:15-17
Timestamp: 2025-12-21T13:49:44.001Z
Learning: In Scoop manifests, when a URL uses a fragment like `#/dl.7z`, Scoop automatically extracts the archive after download. For nested archives (like BrowserOS), the downloaded installer may contain another archive (e.g., `chrome.7z`) that requires explicit extraction via the installer script using `Expand-7zipArchive`. The installer script should reference the inner archive name, not the outer `dl.7z`.

Learnt from: mokosiy
Repo: ScoopInstaller/Extras PR: 16428
File: bucket/multidrive.json:8-8
Timestamp: 2025-10-27T13:19:16.982Z
Learning: For MultiDrive manifests in the ScoopInstaller/Extras repository: the direct download URL at dl.atola.com causes 403 errors due to Cloudflare Bot Fight Mode blocking the Scoop bot, so GitHub Releases URLs should be used instead (e.g., https://github.com/atola-technology/multidrive/releases/download/...).

Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16341
File: bucket/foxit-pdf-reader.json:47-50
Timestamp: 2025-10-15T11:54:31.320Z
Learning: In bucket/foxit-pdf-reader.json and bucket/foxit-reader.json, the checkver script uses MaximumRedirection 1 (not 0) for Invoke-WebRequest to properly handle Foxit's backend redirect behavior when parsing the Location header for version detection.

Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds in recent versions uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format. This was confirmed by a working 10.0.0 update with valid hash.

Learnt from: SorYoshino
Repo: ScoopInstaller/Extras PR: 16333
File: bucket/potplayer.json:55-64
Timestamp: 2025-10-14T11:15:55.229Z
Learning: In PotPlayer manifests (bucket/potplayer.json), PotPlayer*.ini files (PotPlayer.ini, PotPlayer64.ini, PotPlayerMini.ini, PotPlayerMini64.ini) work correctly with Scoop's hard links and don't need special handling in post_install scripts.

Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format.

Learnt from: SorYoshino
Repo: ScoopInstaller/Extras PR: 16333
File: bucket/potplayer.json:55-64
Timestamp: 2025-10-14T11:15:55.229Z
Learning: In PotPlayer manifests (bucket/potplayer.json), the Model and Engine folders are created at runtime (not included in the installer), so they should only be in the persist list and not in post_install scripts that handle .original directories.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Upstream sometimes change parameters in bat. I believe it is best way to let the upstream maintenance these files.
PBH-BTN/PeerBanHelper@887105a

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@WordlessEcho, thank you for sharing that commit—I can see upstream does update the JVM parameters regularly (like adding -XX:+UseCompactObjectHeaders in that change), and keeping the manifest synchronized with those changes would indeed create ongoing maintenance work.

I understand your reasoning now. Given the constraints:

  • Upstream doesn't publish these files as separate release assets with hashes
  • The alternative (356 MB portable zip) is impractical
  • Upstream actively maintains and updates the JVM parameters
  • The files are sourced from version-tagged URLs (which won't change unexpectedly)

Your approach is a pragmatic compromise. While downloading files without hash verification is unusual in the Extras bucket and doesn't align with Scoop's typical security model, I can see this is a trade-off you're making to balance security, download size, and maintenance burden.

The version-tagged URLs do provide some level of consistency, and users installing from the official ScoopInstaller/Extras bucket already place trust in the repository's review process.

I'll note this for context but won't push further on this point. Thank you for the detailed explanation!


🧠 Learnings used
Learnt from: WordlessEcho
Repo: ScoopInstaller/Extras PR: 15764
File: bucket/peerbanhelper.json:46-59
Timestamp: 2025-12-23T12:36:38.765Z
Learning: In PeerBanHelper Scoop manifest (bucket/peerbanhelper.json), the JBR-specific batch files (gui-jbr.bat, cli-jbr.bat, etc.) that hardcode paths to intellij-jbr25 are intentional optional convenience scripts. PeerBanHelper application itself prompts warnings when not started with JBR, so hardcoded JBR paths in optional batch variants are acceptable.

Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16378
File: bucket/compactgui.json:20-22
Timestamp: 2025-10-19T13:58:23.389Z
Learning: In the ScoopInstaller/Extras repository, the CompactGUI manifest removed hash verification from the autoupdate block because the hash verification mechanism (scraping SHA-256 from release page HTML) is no longer available in newer CompactGUI releases. GitHub asset digests exist in beta releases but not in v3.8.0, and Scoop doesn't have built-in support for extracting from GitHub API asset digests.

Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16328
File: bucket/winutil.json:0-0
Timestamp: 2025-10-13T09:37:06.093Z
Learning: When reviewing code in Scoop manifests, always verify the actual file content if the diff appears incomplete or unusual, as diff context can be truncated or displayed incorrectly. The pattern `[string[]](...).ForEach{...}` is commonly used in post_uninstall scripts across the Extras repository.

Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds in recent versions uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format. This was confirmed by a working 10.0.0 update with valid hash.

Learnt from: SorYoshino
Repo: ScoopInstaller/Extras PR: 16333
File: bucket/potplayer.json:55-64
Timestamp: 2025-10-14T11:15:55.229Z
Learning: In PotPlayer manifests (bucket/potplayer.json), the Model and Engine folders are created at runtime (not included in the installer), so they should only be in the persist list and not in post_install scripts that handle .original directories.

Learnt from: SorYoshino
Repo: ScoopInstaller/Extras PR: 16333
File: bucket/potplayer.json:55-64
Timestamp: 2025-10-14T11:15:55.229Z
Learning: In PotPlayer manifests (bucket/potplayer.json), PotPlayer*.ini files (PotPlayer.ini, PotPlayer64.ini, PotPlayerMini.ini, PotPlayerMini64.ini) work correctly with Scoop's hard links and don't need special handling in post_install scripts.

Learnt from: haussmann
Repo: ScoopInstaller/Extras PR: 16863
File: bucket/browseros.json:15-17
Timestamp: 2025-12-21T13:49:44.001Z
Learning: In Scoop manifests, when a URL uses a fragment like `#/dl.7z`, Scoop automatically extracts the archive after download. For nested archives (like BrowserOS), the downloaded installer may contain another archive (e.g., `chrome.7z`) that requires explicit extraction via the installer script using `Expand-7zipArchive`. The installer script should reference the inner archive name, not the outer `dl.7z`.

Learnt from: Gitoffthelawn
Repo: ScoopInstaller/Extras PR: 16106
File: bucket/czkawka-gui.json:25-25
Timestamp: 2025-09-05T09:41:52.653Z
Learning: For czkawka-gui manifests in Scoop Extras, the correct upstream filename pattern for Windows GUI builds uses "gtk46" (without underscore), not "gtk_46" (with underscore). The autoupdate URL should use "windows_czkawka_gui_gtk46.zip" format.

Learnt from: SorYoshino
Repo: ScoopInstaller/Extras PR: 16333
File: bucket/potplayer.json:55-64
Timestamp: 2025-10-14T11:24:17.524Z
Learning: In PotPlayer manifests (bucket/potplayer.json), the Capture and Playlist folders are created at runtime (after running the application), not included in the installer, so they should only be in the persist list and not in post_install scripts.

Learnt from: o-l-a-v
Repo: ScoopInstaller/Extras PR: 16341
File: bucket/foxit-pdf-reader.json:47-50
Timestamp: 2025-10-15T11:54:31.320Z
Learning: In bucket/foxit-pdf-reader.json and bucket/foxit-reader.json, the checkver script uses MaximumRedirection 1 (not 0) for Invoke-WebRequest to properly handle Foxit's backend redirect behavior when parsing the Location header for version detection.

"",
"Get-ChildItem -Path \"$dir\" -Filter *.bat -File -Recurse | ForEach-Object {",
" $file = $_.FullName",
" $content = Get-Content $file",
" $newContent = $content `",
" -replace '^start\\s+\\./jre/bin/java\\.exe', 'java.exe' `",
" -replace '\\./jre/bin/', '' `",
" -replace 'PeerBanHelper\\.jar', \"$dir\\PeerBanHelper.jar\"",
" Set-Content -Path $file -Value $newContent",
"}",
"",
"Get-ChildItem -Path \"$dir\" -Filter *.bat -File -Recurse | ForEach-Object {",
" $oldFile = $_.FullName",
" $newFile = $oldFile `",
" -replace '1\\.\\s+GUI\\s+Mode\\.bat$', 'gui-jbr.bat' `",
" -replace '2\\.\\s+GUI\\s+mode\\s+\\(silent\\)\\.bat$', 'gui-silent-jbr.bat' `",
" -replace '3\\.\\s+Console\\.bat$', 'cli-jbr.bat'",
" Copy-Item $oldFile $newFile",
" ",
" $content = Get-Content $newFile",
" $newContent = $content `",
" -replace 'java\\.exe', \"$scoopdir/apps/intellij-jbr25/current/bin/java.exe\" `",
" -replace 'javaw\\.exe', \"$scoopdir/apps/intellij-jbr25/current/bin/javaw.exe\"",
" Set-Content -Path $newFile -Value $newContent",
"}"
Comment on lines +46 to +59
Copy link

@coderabbitai coderabbitai bot Dec 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hardcoded JBR path will fail if intellij-jbr25 is not installed.

The JBR batch files hardcode the path $scoopdir/apps/intellij-jbr25/current/bin/java.exe. Since suggest is advisory only (not a hard dependency), users who haven't installed intellij-jbr25 will encounter failures when using the JBR shortcuts/commands.

Consider either:

  1. Adding runtime existence checks in the batch files with user-friendly error messages
  2. Using depends instead of suggest if JBR is required for these scripts
  3. Documenting this limitation more explicitly in the notes
🤖 Prompt for AI Agents
In bucket/peerbanhelper.json around lines 46 to 59, the batch-file generation
hardcodes $scoopdir/apps/intellij-jbr25/current/bin/java(.w).exe which will
break for users who didn't install intellij-jbr25; update the generated .bat
files to either (A) perform a runtime existence check for the JBR path and print
a clear error instructing users to install intellij-jbr25 (or fall back to
system java if present), or (B) make intellij-jbr25 a hard dependency by moving
it from "suggest" to "depends" in the manifest; implement one of these fixes
(runtime check in the .bat is preferred if JBR is optional) and/or add an
explicit note in the manifest notes describing the requirement.

Copy link
Author

@WordlessEcho WordlessEcho Dec 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PeerBanHelper will prompt a warning message if you didn't start with JBR. I provide these bat as a optional way to start.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@WordlessEcho, thank you for the clarification! That makes sense—the application handles the warning when JBR isn't used, and the -jbr suffixed batch files are clearly optional convenience scripts for users who follow the suggest recommendation. The design is clear and appropriate.

🐰✨


✏️ Learnings added
Learnt from: WordlessEcho
Repo: ScoopInstaller/Extras PR: 15764
File: bucket/peerbanhelper.json:46-59
Timestamp: 2025-12-23T12:36:38.765Z
Learning: In PeerBanHelper Scoop manifest (bucket/peerbanhelper.json), the JBR-specific batch files (gui-jbr.bat, cli-jbr.bat, etc.) that hardcode paths to intellij-jbr25 are intentional optional convenience scripts. PeerBanHelper application itself prompts warnings when not started with JBR, so hardcoded JBR paths in optional batch variants are acceptable.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

],
"bin": [
[
"3. Console.bat",
"peerbanhelper-cli"
],
[
"cli-jbr.bat",
"peerbanhelper-cli-jbr"
]
],
"shortcuts": [
[
"1. GUI Mode.bat",
"PeerBanHelper/PeerBanHelper",
"",
"icon.ico"
],
[
"2. GUI mode (silent).bat",
"PeerBanHelper/PeerBanHelper (Silent)",
"",
"icon.ico"
],
[
"gui-jbr.bat",
"PeerBanHelper/PeerBanHelper (JBR)",
"",
"icon.ico"
],
[
"gui-silent-jbr.bat",
"PeerBanHelper/PeerBanHelper (Silent, JBR)",
"",
"icon.ico"
]
],
"persist": "data",
"checkver": {
"github": "https://github.com/PBH-BTN/PeerBanHelper"
},
"autoupdate": {
"architecture": {
"64bit": {
"url": "https://github.com/PBH-BTN/PeerBanHelper/releases/download/v$version/PeerBanHelper_$version.zip"
},
"arm64": {
"url": "https://github.com/PBH-BTN/PeerBanHelper/releases/download/v$version/PeerBanHelper_$version.zip"
}
}
}
}