halkyon/apps/meditate/halkyon_meditate_server/lib/src/meditate_base.dart

100 lines
5.3 KiB
Dart
Raw Normal View History

import 'package:halkyon_base_server/base.dart';
import 'package:halkyon_meditate_server/src/meditate_data.dart';
/// Where this project's source is published, which the instance names
/// unless its operator sets `SOURCE_URL`. Both licences require offering it
/// to the people who use the instance (AGPL-3.0-or-later for the app,
/// SSPL-1.0 for the server).
const upstreamSourceCodeUrl =
'https://code.halkyon.app/project-halkyon/halkyon';
/// The oldest build of the app this server works with (the number after `+`
/// in the app's version); apps below it are asked to update. Raise it in the
/// commit that breaks older apps, to the build of the first that works again.
const minimumAppBuild = 1;
/// How Halkyon Meditate sets halkyon_base up (ADR 0014), the module giving every
/// Halkyon server its sign-in, the account and its deletion, the pruning and
/// the instance's basics: the instance says it serves `meditate` (the app accepts
/// only such an instance; never change it), sign-in mails name the app, and
/// the instance names this project's source. A person's sittings and keys go
/// with them ([deleteMeditateData]). It holds the instance's
/// register, or is a member of the one [accounts] names (ADR 0016; the
/// server reads it from the operator's environment, `ACCOUNT_REGISTER_URL`).
/// The server sets it up before it starts (`server.dart`), and so do its
/// tests.
HalkyonBase meditateBase({AccountsMode accounts = const HoldsRegister()}) =>
HalkyonBase(
app: 'meditate',
appName: 'Halkyon Meditate',
upstreamSourceCodeUrl: upstreamSourceCodeUrl,
minimumAppBuild: minimumAppBuild,
deletePersonData: const [deleteMeditateData],
accounts: accounts,
privacyPagePoints: _privacyPagePoints,
);
/// What the instance's privacy page says of Meditate's data (ADR 0038, D7,
/// D14, D15), where Meditate's server serves the page: what is sealed, and
/// what a dream spoken passes through. Change it with what Meditate keeps
/// or sends.
const List<PrivacyPagePoint> _privacyPagePoints = [
(
english:
'On Halkyon Meditate, your settings, the sittings you keep and the '
'dreams you write down are encrypted on your devices with your key: '
'the instance sees how many there are, their size and when they '
'changed, never what they hold. A device that can’t encrypt keeps '
'none.',
german:
'In Halkyon Meditate werden deine Einstellungen, die Sitzungen, die '
'du aufbewahrst, und die Träume, die du aufschreibst, auf deinen '
'Geräten mit deinem Schlüssel verschlüsselt: Die Instanz sieht, wie '
'viele es sind, wie groß sie sind und wann sie sich änderten, nie, '
'was sie enthalten. Ein Gerät, das nicht verschlüsseln kann, bewahrt '
'keine auf.',
),
(
english:
'Where this instance offers a library of recordings, only people '
'signed in get it. Fetching a recording names no account: your '
'device shows an access the instance signed alike for everyone it '
'gave the library to within the same hour, so beyond the address a '
'request comes from, the instance can’t tell who listens to what. '
'What you listened to, your favourites and the lessons you did are '
'sealed with your key as your sittings are.',
german:
'Wo diese Instanz eine Bibliothek mit Aufnahmen anbietet, bekommen '
'sie nur angemeldete Personen. Eine Aufnahme zu laden nennt kein '
'Konto: Dein Gerät zeigt eine Zugangsberechtigung, die die Instanz '
'allen gleich signiert, denen sie die Bibliothek in derselben Stunde '
'gab. Über die Adresse hinaus, von der eine Anfrage kommt, weiß die '
'Instanz also nicht, wer was hört. Was du gehört hast, deine '
'Favoriten und die Lektionen, die du gemacht hast, werden wie deine '
'Sitzungen mit deinem Schlüssel verschlüsselt.',
),
(
english:
'A dream you speak is written by your device’s own speech '
2026-11-07 23:45:20 +01:00
'recognition. On Android, where a voice input app is installed '
'(FUTO Voice Input, for one), that app listens and hands Meditate '
'the text alone, and it decides whether the sound leaves the device; '
'without one, Meditate asks for recognition on the '
'device, which Android 12 and later offer where the language is '
'installed; otherwise Android’s recogniser may send the sound to '
'Google or the phone’s maker. Apple’s and Windows’ recognisers decide '
'for themselves whether the sound leaves the device. It never reaches '
'the instance.',
german:
'Einen Traum, den du erzählst, schreibt die Spracherkennung deines '
2026-11-07 23:45:20 +01:00
'Geräts auf. Unter Android hört, wo eine Spracheingabe-App '
'installiert ist (etwa FUTO Voice Input), diese App zu und gibt '
'Meditate nur den Text; ob der Ton das Gerät verlässt, entscheidet '
'sie. Ohne eine bittet Meditate um Erkennung auf dem '
'Gerät, die Android ab Version 12 bietet, wo die Sprache installiert '
'ist; sonst kann Androids Spracherkennung den Ton an Google oder den '
'Hersteller des Telefons senden. Die Spracherkennung von Apple und '
'Windows entscheidet selbst, ob der Ton das Gerät verlässt. Bei der '
'Instanz kommt er nie an.',
),
];