Deutsche Fassung weiter unten.
Every tool in this suite is built on the same thing: the addresses WarEra answers. There are more of them than anyone assumed, and until now nobody had counted.
Now somebody has. https://warera.unikhorne.dev/api-explorer
That is what came out. For comparison, the best public list until now held 77, and our own earlier inventory, built by reading the game's code for React hooks, held 244.

The gap between 244 and 322 is the interesting part. The hook search only sees what the client asks for through one particular mechanism. Everything called the plain way is invisible to it, and that includes gameConfig.getGameConfig and country.getAllCountries, both of which run on every single page load.
Candidates came from three places: the code both the live and the test build ship to your browser, and the public list another player keeps.
Then every candidate was asked, without a login, and sorted by the answer. This works because the game distinguishes its refusals properly:
404 and it does not exist.
405 and it exists but only takes writes.
401 and it exists but wants your session.
400 and it exists and wants an input.
200 and it just answers.
That last distinction is the whole trick. Asking for a name nobody has gives a different refusal than asking for a real one you are not allowed to see.
One thing that went wrong is worth repeating, because it would have poisoned the whole list. The first sweep ran four calls a second, the game started answering 429 too many requests, and the sorter counted every one of those as "exists". It cheerfully reported 390 of 419 candidates as real, youtu.be among them. A rate limit means no answer arrived at all. The second sweep waits and asks again.
72 of the 322 answer without any login, and those have a Run button. Each one lists the fields it wants and the values it accepts, which the game itself told us: asked with no input at all it only says an object is missing, but asked with an empty object it names every required field, and for a choice it names the choices.

Put your name in the box at the top first. The page looks you up, and from then on every input below arrives filled in with your own ids: userId, countryId, regionId, muId, partyId, companyId. Most of the list becomes one button press on your own data.
The name is resolved against our own citizen list, the same one the search box on the front page uses. The id that comes back then goes to the game as user.getUserById, one of the procedures in the list you are reading.
Every call you run here leaves your browser for the game directly and never passes through our server. The rate limit lands on you, and no key of ours is anywhere near it.
Procedures that want a login cannot be run here at all. The game hands our pages access-control-allow-origin: *, and a browser will not send cookies to an address that answers that way. The game enforces that, so nobody can reach anyone's private data through this page.
Completeness cannot be proven by knocking on doors. This is everything three sources and a name sweep turned up. A procedure missing from the list may still exist.
The sweep also only tried names that already appear somewhere else, plus a dozen obvious ones. Something called frobnicate.theWidget would still be sitting there, unfound and unbothered.
All of it free, no login: https://warera.unikhorne.dev
Jedes Werkzeug dieser Suite baut auf derselben Sache auf: den Adressen, auf die WarEra antwortet. Es gibt mehr davon, als irgendwer angenommen hatte, und bis jetzt hatte niemand sie gezählt.
Jetzt hat es jemand getan. https://warera.unikhorne.dev/api-explorer
Das ist dabei herausgekommen. Zum Vergleich: Die beste öffentliche Liste enthielt bisher 77, und unsere eigene frühere Bestandsaufnahme enthielt 244. Für sie hatten wir den Code des Spiels nach React-Hooks durchsucht.

Die Lücke zwischen 244 und 322 ist der interessante Teil. Die Hook-Suche sieht nur, was der Client über einen bestimmten Mechanismus abfragt. Alles, was auf dem einfachen Weg aufgerufen wird, bleibt für sie unsichtbar, darunter gameConfig.getGameConfig und country.getAllCountries. Beide laufen bei jedem einzelnen Seitenaufruf.
Die Kandidaten kamen aus drei Quellen: dem Code, den der Live-Build und der Test-Build an deinen Browser ausliefern, und der öffentlichen Liste, die ein anderer Spieler pflegt.
Dann wurde jeder Kandidat ohne Login abgefragt und nach der Antwort sortiert. Das funktioniert, weil das Spiel seine Absagen sauber unterscheidet:
404 heißt, es gibt sie nicht.
405 heißt, es gibt sie, aber sie nimmt nur Schreibzugriffe an.
401 heißt, es gibt sie, aber sie will deine Session.
400 heißt, es gibt sie, und sie will eine Eingabe.
200 heißt, sie antwortet einfach.
Diese letzte Unterscheidung ist der ganze Trick. Fragst du nach einem Namen, den niemand hat, kommt eine andere Absage, als wenn du nach einem echten fragst, den du nicht sehen darfst.
Ein Fehler verdient es, noch einmal erzählt zu werden, weil er die ganze Liste vergiftet hätte. Der erste Durchlauf schickte vier Aufrufe pro Sekunde, das Spiel antwortete irgendwann mit 429 too many requests, und der Sortierer zählte jede dieser Antworten als "existiert". Fröhlich meldete er 390 von 419 Kandidaten als echt, youtu.be eingeschlossen. Ein Rate Limit heißt, dass gar keine Antwort angekommen ist. Der zweite Durchlauf wartet und fragt noch einmal.
72 der 322 antworten ganz ohne Login, und die haben einen AUSFÜHREN-Knopf. Jede listet die Felder auf, die sie will, und die Werte, die sie annimmt. Das hat uns das Spiel selbst verraten: Fragt man ganz ohne Eingabe, sagt es nur, dass ein Objekt fehlt. Fragt man mit einem leeren Objekt, nennt es jedes Pflichtfeld, und bei einer Auswahl nennt es die Möglichkeiten.

Trag zuerst deinen Namen in das Feld oben ein. Die Seite schlägt dich nach, und ab dann kommt jede Eingabe weiter unten schon mit deinen eigenen IDs ausgefüllt: userId, countryId, regionId, muId, partyId, companyId. Der größte Teil der Liste wird so zu einem Knopfdruck auf deine eigenen Daten.
Der Name wird über unsere eigene Bürgerliste aufgelöst, dieselbe, die auch das Suchfeld auf der Startseite nutzt. Die ID, die dabei herauskommt, geht dann als user.getUserById an das Spiel, eine der Prozeduren aus der Liste, die du gerade liest.
Jeder Aufruf, den du hier startest, geht von deinem Browser direkt an das Spiel und läuft nie über unseren Server. Das Rate Limit trifft dich, und kein Schlüssel von uns ist auch nur in der Nähe.
Prozeduren, die einen Login wollen, lassen sich hier überhaupt nicht ausführen. Das Spiel gibt unseren Seiten access-control-allow-origin: * mit, und ein Browser schickt keine Cookies an eine Adresse, die so antwortet. Das setzt das Spiel durch, also kann über diese Seite niemand an die privaten Daten anderer gelangen.
Vollständigkeit lässt sich durch Anklopfen nicht beweisen. Das hier ist alles, was drei Quellen und eine Namenssuche zutage gefördert haben. Eine Prozedur, die in der Liste fehlt, kann trotzdem existieren.
Die Suche hat außerdem nur Namen probiert, die schon irgendwo anders auftauchen, plus ein Dutzend naheliegende. Etwas namens frobnicate.theWidget säße immer noch da, unentdeckt und ungestört.
Alles kostenlos, ohne Login: https://warera.unikhorne.dev
(Uni)Khorne