add bank-bridge - #14607
Open
theshane0314 wants to merge 1 commit into
Open
Conversation
|
New plugin |
theshane0314
force-pushed
the
add-bank-bridge
branch
from
August 2, 2026 03:24
0287a15 to
d81c046
Compare
theshane0314
force-pushed
the
add-bank-bridge
branch
from
August 2, 2026 03:26
d81c046 to
9bec230
Compare
|
This plugin requires a review from a Plugin Hub maintainer. The reviewer will request any additional changes if needed. Internal use only: Reviewer details Maintainer details |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Bank Bridge — serves your bank, inventory, worn equipment and real levels to a gear-planning website over a local-only WebSocket. There is no server, no account, no token and no telemetry; nothing leaves the machine.
Source: https://github.com/theshane0314/bank-bridge-plugin
What it does
Binds a WebSocket to
127.0.0.1, first free port in37767-37776— the same range WikiSync uses, deliberately, so a page can scan one range and find whichever plugin is installed. A page connects and requestsGetBank; it gets back item ids and quantities plus real skill levels. Browsers allow this from anhttps://page because loopback is a potentially trustworthy origin, which is the same mechanism the wiki's DPS calculator already relies on.Security
I've flagged the relevant points myself rather than leave them to be found:
Originis checked against an allowlist (osrs.plaincandle.dev,localhost,127.0.0.1, plus a user config field). MissingOriginis rejected; anything else is closed before a byte is sent.Origin. It could equally read the RuneLite directory, so it isn't an escalation — but it is not claimed as a boundary against local software. The boundary is against websites.ItemContainerChangedhands it. A Gradle taskaccountSafetyCheckfails the build on any reference to those APIs and gatesbuild,check,run,runHarnessandshadowJar; it's tested by planting a deliberate violation and confirming the build breaks.Java-WebSocket, with its transitiveslf4j-apiexcluded so the client's own version is used.Threading
All game reads happen on the client thread inside
ItemContainerChanged/StatChanged/GameTickand are cached as immutable lists behind volatile references.WebSocketManagerholds no reference toClientorClientThread, so a socket request is answered from cache and can never reach — let alone block — the client thread. Sends run on a daemon executor; the disk write is debounced and also off-thread.Testing
./gradlew runHarnessboots the realWebSocketManageragainst a seeded store and drives it with a real WebSocket client — 22 checks covering origin accept/reject/missing, protocol, payload shape, error handling, config gating and port release. Nothing under test is mocked. Verified in-game against a live account, and port fallback confirmed live with WikiSync holding 37767.