The export that dies at 30 seconds
An export built into a web request works until the data outgrows the timeout. Then users click the button, wait, and get nothing, with no record that anything was ever tried.
Gebruikers exporteren of verwijderen zelf hun data. De taak loopt af, ook na een herstart.
Gebruikers exporteren of verwijderen zelf hun data. De taak loopt af, ook na een herstart.
1
step to safely accept a request
5
retries per background job
24h
before a download link expires
Zonder een gedeelde basis bouwt elk team deze randgevallen opnieuw — en anders.
An export built into a web request works until the data outgrows the timeout. Then users click the button, wait, and get nothing, with no record that anything was ever tried.
Deletion touches memberships, the user row, and your login provider. A crash mid-way leaves a zombie account that's neither active nor gone.
When privacy processing is invisible, every export request becomes a support ticket. Users need states they can watch, not a spinner.
Het mechanisme van begin tot eind, zoals het in de repository is geïmplementeerd.
The request is accepted safely
The server confirms who's asking from their login, then saves the request, a visible progress run, and the job trigger together in one transaction. Clicking twice still creates just one request.
A background job picks it up
The job is queued right after the save, with a scheduled sweeper as backup, so the page never waits on the job system.
The work runs with visible progress
The export gathers the user's account, memberships, organizations, projects, and notes into one file in storage, updating the progress states as it goes.
Delivery closes the loop
An email delivers a download link that expires after 24 hours. Deletion removes memberships, anonymizes the user, and deletes the login account, and repeats are handled cleanly.
Interactief voorbeeld
Deze rondleiding toont het geïmplementeerde backendcontract zonder account, credentials of providercalls.
Interactief voorbeeld
Stap 1 van 4: Request accepted
Alleen deterministische voorbeelddata. De interactie gebruikt geen account-, provider- of netwerkverbinding.
Kernpunten
Accepting a request saves the request, its progress tracker, and its job trigger together, in one step.
Export and deletion run in the background with retries, so a crash mid-way strands nothing.
Every request shows queued, processing, and completed states instead of a spinner and hope.
Technische garanties
Achter de schermen houden autorisatie, tenantgrenzen en foutafhandeling één duidelijke eigenaar. Zo blijft de snelle ervaring voor gebruikers gekoppeld aan veilig herstel als het misgaat.
De grens hierboven is geen claim maar code. Deze bestanden dragen het contract:
src/features/privacy/server.tssrc/features/privacy/jobs.tssrc/registries/data-exports.tsDeze functies delen contracten en grenzen met deze pagina.
De documentatie beschrijft dezelfde contracten die deze pagina demonstreert.