Het ontwerp van de limiter en de pagina, en de limiter is klein
createRelay uit @evolu/nodejs neemt twee terugroepfuncties, isOwnerAllowed en isOwnerWithinQuota, en Trezor doet in createEvoluRelay.ts zelf niets anders. Hun hele quota-manager met Postgres bestaat alleen om de tabel te vullen die die twee raadplegen. Wij vullen ze met eigen logica en bouwen niets na. Weg 1 uit Bereikbaarheid 4b is daarmee veel goedkoper dan daar aangenomen, en dat is wat de keuze van de gebruiker mogelijk maakt. De logica zoals hij hem formuleerde: de eerste eigenaar die zich meldt wint, een schakelaar bepaalt of er nog nieuwe bij mogen, en data is per eigenaar te wissen. Dat laatste doet het relay-proces zelf, aangestuurd met een vlagbestand vanaf de pagina; geen tweede container die langszij in de SQLite schrijft en geen Docker-socket. Twee feiten uit de broncode van Evolu die het ontwerp sturen en die in de naslag staan met bron. De gepubliceerde image zet isOwnerWithinQuota op 1 MB per eigenaar en laat isOwnerAllowed weg, dus een kale relay is niet volledig ongelimiteerd, maar dat plafond geldt ook voor de echte gebruiker. En de relay-URL van de client bevat een pad dat letterlijk wordt overgenomen, wat een goedkope proxy-controle mogelijk maakt; die is bewust niet genomen nu de allowlist er komt. De poorten gaan om: pagina achter app_proxy met de inlog aan, relay op een eigen gepubliceerde poort waar Zoraxy met TLS naartoe wijst. Dat lost open punt 2 op zonder het bezwaar dat daar stond, en het volgt het patroon dat Electrum Gate in deze repo al gebruikt. De pagina volgt hetzelfde ontwerpsysteem, zonder de Google Fonts-verwijzing eruit. Open punt 8 en 2 zijn beslist, fase 5 staat als takenlijst. De gebruiker heeft de oude installatie van de Umbrel gehaald; er wordt niet geupdatet maar opnieuw gebouwd. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -69,6 +69,20 @@ klopt. Suite gebruikt `@evolu/web@3.0.0-next.1` **met een eigen patch** in `.yar
|
||||
in minuten te weerleggen: `docker run --rm -p 4000:4000 docker.io/evoluhq/relay:latest`, Suite ernaartoe
|
||||
wijzen, label maken.
|
||||
|
||||
**4. De relay-URL bevat een pad, en de cliënt gebruikt hem letterlijk.** Toegevoegd 28-08-2026 uit
|
||||
`suite-common/suite-sync/src/relay/relayUrl.test.ts`. Hun eigen standaardwaarden zijn
|
||||
`https://suite-sync.trezor.io/evolu/` en lokaal `http://127.0.0.1:4000/evolu/`: de relay van Trezor hangt
|
||||
dus achter een pad, en een eigen URL wordt overgenomen zoals hij is. De kale Evolu-relay luistert op de
|
||||
wortel; dat is gemeten met `http://10.0.0.11:4000` zonder pad.
|
||||
|
||||
**Dat opent een goedkope toegangscontrole die in geen van de drie wegen van Bereikbaarheid §4b stond:** een
|
||||
onraadbaar pad in de URL, afgedwongen door de reverse proxy die er toch al staat. Geen eigen image, geen
|
||||
regel code.
|
||||
|
||||
**En het verklaart de foutmelding op iOS.** De URL wordt gevalideerd met een `.url()`-regel uit yup
|
||||
(`relayServerSettings.ts`), en die accepteert `ws://` niet. "Enter a valid url" ging dus over het schema en
|
||||
niet over het adres.
|
||||
|
||||
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.
|
||||
|
||||
@@ -287,3 +301,48 @@ Twee waarschuwingen bij die bron. Het meeste hierboven komt uit **`suite-native`
|
||||
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.
|
||||
|
||||
## 8. De uitbreidpunten van de kale relay
|
||||
|
||||
Nagetrokken 28-08-2026 in de broncode van `evoluhq/evolu`, nadat de proef bewees dat de kale relay bruikbaar
|
||||
is. Dit is wat een eigen limiter mogelijk maakt, en het is aanzienlijk minder werk dan **Bereikbaarheid**
|
||||
§4b aannam.
|
||||
|
||||
**Er wordt geen relay nagebouwd; er worden twee functies meegegeven.** `createRelay` uit `@evolu/nodejs`
|
||||
heeft deze vorm:
|
||||
|
||||
```ts
|
||||
createRelay({ port = 443, name, isOwnerAllowed, isOwnerWithinQuota }): Task<Relay, never, RelayDeps>
|
||||
```
|
||||
|
||||
`isOwnerAllowed(ownerId)` beslist of een eigenaar er überhaupt in mag, `isOwnerWithinQuota(ownerId,
|
||||
requiredBytes)` of een schrijfactie past. Beide zijn asynchroon. De opslag wordt intern gemaakt met
|
||||
`createRelaySqliteStorage(deps)({ isOwnerWithinQuota })`, dus SQLite, en `createRelayDeps()` levert de
|
||||
driver.
|
||||
|
||||
**Trezor doet exact dit en niets meer.** Hun `createEvoluRelay.ts` roept de relay aan met die twee
|
||||
functies, en beide kijken in hun limietentabel via `getLimitsForOwner()`. De hele quota-manager plus
|
||||
Postgres bestaat dus alleen om die tabel te vullen. Dat is het bewijs dat ons pakket met dezelfde twee
|
||||
haken hetzelfde kan zonder die machinerie.
|
||||
|
||||
**De gepubliceerde image vult ze zelf al deels in**, en dat is een valstrik om te kennen. In
|
||||
`apps/relay/src/index.ts` staat `isOwnerAllowed` **uitgecommentarieerd** (dus iedereen mag erin) en
|
||||
`isOwnerWithinQuota` op **1 MB per eigenaar**. Dat is geen theorie maar de image die wij draaien:
|
||||
|
||||
- **een kale relay is niet volledig ongelimiteerd.** Er zit een bovengrens op wat één eigenaar kan
|
||||
wegschrijven, en dat dempt misbruik als gratis opslag meer dan gedacht;
|
||||
- **maar 1 MB is ook een plafond voor de échte gebruiker.** Loopt de labelgeschiedenis daar tegenaan, dan
|
||||
stopt het synchroniseren, en dat merk je pas als het gebeurt. Wie zelf een relay bouwt, kiest dat getal
|
||||
dus bewust.
|
||||
|
||||
De relay zet zijn data in een map `data` naast het programma (`mkdirSync` plus `process.chdir`), en dat is
|
||||
het volume `/app/data` uit de image. In de database zitten onder meer `evolu_message` en `evolu_history`, en
|
||||
`ownerId` is een systeemkolom. **Data per eigenaar wissen is daarmee mogelijk maar het is schrijven in
|
||||
andermans schema**, met dezelfde bezwaren als bij Trezor's limietentabel.
|
||||
|
||||
Bronnen, geraadpleegd 28-08-2026:
|
||||
|
||||
- [`packages/nodejs/src/local-first/Relay.ts`](https://raw.githubusercontent.com/evoluhq/evolu/main/packages/nodejs/src/local-first/Relay.ts)
|
||||
- [`apps/relay/src/index.ts`](https://raw.githubusercontent.com/evoluhq/evolu/main/apps/relay/src/index.ts)
|
||||
- [`src/evoluRelay/createEvoluRelay.ts`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/src/evoluRelay/createEvoluRelay.ts) van Trezor
|
||||
- [evolu.dev/docs/relay](https://www.evolu.dev/docs/relay) en [evolu.dev/docs/evolu-server](https://www.evolu.dev/docs/evolu-server)
|
||||
|
||||
Reference in New Issue
Block a user