De client zegt het zelf: bij een eigen relay wordt de quota-manager genegeerd

De gebruiker wees erop dat de broncode van Trezor Suite lokaal staat, in het
project Trezor onder Repos/trezor-suite. Dat beantwoordde in een half uur wat uit
de serverkant alleen niet te halen was, en het draait de vraag van vanavond om.

Uit een commentaarregel van Trezor zelf, in
suite-common/suite-sync-quota-manager/src/createSuiteSyncQuotaManagerCompositionRoot.ts:
"We only want to use QM for our own relay servers. In case custom URL has been
set, QM is ignored, unless enforceQuotaManager is set (used for e2e tests)."
Die vlag staat standaard op false.

Daarmee is het pakket dat nu draait niet alleen zwaar maar waarschijnlijk kapot
bij ontwerp. Met een eigen relay-URL registreert de cliënt geen eigenaar, en de
relay van Trezor weigert iedereen zonder rij in de limietentabel. Die rij komt er
dus nooit: het enige dat hem zou maken wordt door de cliënt overgeslagen. Niet de
kale Evolu-relay was de gok, maar deze.

Twee dingen die er gratis bij kwamen en die vragen van eerder beantwoorden. Suite
neemt http:// (de e2e-test gebruikt http://10.0.2.2:4000 en :4001), dus TLS is
geen eis en dat raakt het masterplan Bereikbaarheid. En de instellingen staan
onder dev-utils, met twee losse velden voor relay en quota-manager, plus een
bevestiging op het apparaat bij het aanzetten.

Wat er nog echt open is, is geen redenering maar een proef: Suite gebruikt
@evolu/web@3.0.0-next.1 met een eigen patch in .yarn/patches, en de gepubliceerde
relay-image hoeft daar niet bij te passen. Dat is met docker run in minuten te
weerleggen en staat als eerste taak.

De vindplaats zelf is als naslag opgeschreven, met de vijf bestanden die iets
opleverden en twee waarschuwingen: het meeste komt uit suite-native, dus de
mobiele app, en het is een kloon op een moment in de tijd.

Tests: niet gedraaid, dit raakt alleen documentatie.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-08-26 07:34:49 +02:00
co-authored by Claude Opus 5
parent 836bc58bd6
commit dc0bb9f0dc
4 changed files with 91 additions and 22 deletions
+65 -8
View File
@@ -30,15 +30,47 @@ Evolu-relay?** Zo ja, dan vervalt vrijwel alles wat dit pakket ingewikkeld maakt
register, geen onderhoudsplicht op een image, geen Postgres, geen wachtwoord, en vooral geen
eigenaarsregistratie, wat nu de blokkade is.
Waarom het plausibel is: Suite is een Evolu-app, Evolu-apps praten met Evolu-relays, en de documentatie van
Evolu zegt zelfs dat een app meerdere relays tegelijk kan gebruiken. Waarom het toch mis kan gaan: de
protocolversie van de Evolu die Suite gebruikt hoeft niet die van de image te zijn, en Trezor kan iets
gewijzigd hebben. **Niet aannemen, meten**: `docker run --rm -p 4000:4000 docker.io/evoluhq/relay:latest`
en Suite ernaartoe wijzen kost minuten.
### Wat de cliëntkant zegt, en dat is beslissend
Wat er níet mee vervalt als het werkt: de quota-manager van Trezor is er voor hún gehoste dienst, en die
willen we sowieso niet. Dat het pakket die nu bevat, is geen fout maar het gevolg van het feit dat deze
laag ontdekt is vóórdat de laag eronder gevonden werd.
Nagelezen in de broncode van Trezor Suite zelf, die lokaal staat; zie §7. Drie bevindingen, en de tweede is
de belangrijkste van dit hele document.
**1. Suite kan naar een eigen relay wijzen, en het zijn twee losse adressen.** In de instellingen onder
**dev-utils** staan een relay-URL en een quota-manager-URL, elk met een eigen opslaan-knop. De e2e-test van
de mobiele app vult ze met `http://10.0.2.2:4000` en `http://10.0.2.2:4001`, dus **`http://` volstaat** en
de poorten zijn precies die van ons. Het aanzetten van de synchronisatie vraagt daarna een bevestiging op
het Trezor-apparaat zelf.
**2. Met een eigen relay-URL negeert Suite de quota-manager volledig.** Letterlijk, uit
`suite-common/suite-sync-quota-manager/src/createSuiteSyncQuotaManagerCompositionRoot.ts`:
```ts
// We only want to use QM for our own relay servers. In case custom URL has been set, QM is ignored,
// unless enforceQuotaManager is set (used for e2e tests with a local relay).
const getIsQuotaManagerEnabled = () =>
deps.getIsUsingTrezorRelay() || selectEnforceQuotaManager(deps.getState());
```
`enforceQuotaManager` staat standaard op `false` en bestaat voor hun eigen e2e-tests.
**Dat is een klem, en hij zit in Trezor's relay en niet in ons pakket.** De cliënt registreert geen eigenaar
zodra je een eigen relay gebruikt, maar de relay van Trezor blijft `isOwnerAllowed()` doen en weigert
iedereen zonder limietenrij (§3). Die rij komt er dus nooit, want het enige dat hem zou maken wordt door de
cliënt overgeslagen. **Trezor's relay is daarmee als zelf-gehoste relay in de kern onbruikbaar**, tenzij je
de rij met de hand in de database zet of de quota-manager buitenom aanroept.
**3. En dat maakt de kale Evolu-relay niet alleen eenvoudiger maar waarschijnlijk de enige die werkt.** Daar
is geen limietentabel en geen eigenaarscontrole, en de cliënt wil sowieso geen quota-manager bij een eigen
relay. De twee kanten passen op elkaar.
**Wat nog steeds gemeten moet worden**, want dit is redeneren uit code en geen proef: of de protocolversie
klopt. Suite gebruikt `@evolu/web@3.0.0-next.1` **met een eigen patch** in `.yarn/patches/`, en
`docker.io/evoluhq/relay:latest` hoeft daar niet bij te passen. Dat is nu het enige echte risico, en het is
in minuten te weerleggen: `docker run --rm -p 4000:4000 docker.io/evoluhq/relay:latest`, Suite ernaartoe
wijzen, label maken.
Dat het huidige pakket de zware variant bevat is geen fout maar het gevolg van de volgorde waarin het
gevonden is: de laag van Trezor was eerder zichtbaar dan de laag eronder.
## 1. Wat het is
@@ -183,3 +215,28 @@ Alles hierboven komt uit deze bestanden, geraadpleegd op 25-08-2026:
Het oorspronkelijke vooronderzoek van 25-08-2026 staat ongewijzigd in
[Vooronderzoek.PLAN.md](../Plannen/Masterplannen/Archief/Vooronderzoek.PLAN.md). Wat daar niet meer klopt,
staat hierboven in §2 en §4.
## 7. De broncode van Trezor Suite staat lokaal
Aangedragen door de gebruiker op 25-08-2026, en het beantwoordde in een half uur wat uit de serverkant
alleen niet te halen was. In een ander project van de gebruiker staat een kloon van de cliënt:
```
D:\HomeGit\Trezor\Repos\trezor-suite
```
Dat is de tegenkant van deze relay, en bij een vraag als "verwacht de cliënt dit eigenlijk wel" is dat de
snelste bron. De plekken die hier iets opleverden:
| Pad | Wat je er vindt |
|-|-|
| `suite-common/suite-sync-quota-manager/src/createSuiteSyncQuotaManagerCompositionRoot.ts` | de regel dat de quota-manager genegeerd wordt bij een eigen relay-URL |
| `suite-native/app/e2e/pageObjects/settingsActions.ts` | hoe je het in de interface instelt, met werkende voorbeeld-URL's op 4000 en 4001 |
| `suite-native/module-settings/src/hooks/useSuiteSyncRelayUrlForm.ts` | het formulier: keuze tussen de standaardserver en een eigen URL |
| `suite-native/suite-sync/src/createSuiteSyncNativeCompositionRoot.ts` | hoe de Evolu-cliënt wordt samengesteld |
| `.yarn/patches/@evolu-web-npm-3.0.0-next.1-*.patch` | dat Trezor de Evolu-cliënt **patcht**, en op welke versie |
Twee waarschuwingen bij die bron. Het meeste hierboven komt uit **`suite-native`**, dus de mobiele app; de
desktopversie kan andere instellingen op een andere plek hebben, en dat is niet nagekeken. En het is een
kloon op een moment in de tijd: bij twijfel de datum van die kloon opzoeken voordat je er een conclusie op
bouwt.