ADR 0044's step 6b (D44, D46 to D48): a Viewer, and an agent, suggest changes within a shared studyset, which its Owner and Editors accept or decline. A suggestion or report is written as Explore's are, in its writer's own synced space, with kinds of its own (space-suggestion, space-report) and the space's id in feedback_thread's publicationId, so no synced table changes and older apps, skipping kinds they don't know, keep syncing. Where the studyset is private it is sealed with its key, bound to the space; a reply to it is sealed for its thread. Learn's server gathers a space's threads for its members alone (feedback.threadsInSpace, NotFound for anyone else): only threads and replies by members now, decisions only from rows in the space itself, where the engine lets its Owner and Editors alone write; sealed payloads pass in base64 with their key and nonce. The inbox adds the threads its caller decides on or wrote. The module tells a host a person's spaces and each space's members (sharedSpacesOf, membersOfSpaces). No migration: no table changes. In the app, a Viewer's card and note offer Suggest a change: the fields write into the suggestion alone, sent with a message. A shared studyset's menu lists its Suggestions, where its Owner and Editors accept a change as a revision, or a new card or note into the studyset, and decide in the space. A suggestion naming a file that isn't the studyset's, or bringing files of its own, isn't taken. Whats-New: In a studyset shared with you as a viewer, suggest a change to a card or note; its owner and editors find your suggestions under Suggestions in its menu and accept or decline them. Whats-New-De: In einem Lernset, das du nur ansehen darfst, schlägst du Änderungen an Karteikarten und Notizen vor; Besitzer:in und Bearbeiter:innen finden sie im Menü unter „Vorschläge“ und nehmen sie an oder lehnen sie ab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
149 lines
5.2 KiB
Dart
149 lines
5.2 KiB
Dart
/// halkyon_base for a host's own code: its configuration
|
|
/// (`HalkyonBase.configure`), how people authenticate, the account's
|
|
/// deletion and the pruning, email sign-in's helpers, the instance's
|
|
/// basics, people's public profiles and their pages, the instance's register
|
|
/// (ADR 0016), signing in with a password and TOTP and getting back into an
|
|
/// account (ADR 0017), signing in with SimpleLogin and its forwarding page
|
|
/// (ADR 0020), the ways in an operator offers, the operator's assistants
|
|
/// (Halkyon Learn's ADR 0021), people's files (ADR 0043), the spaces people
|
|
/// share (ADR 0044), and the module's models.
|
|
library;
|
|
|
|
export 'src/admission/admission.dart'
|
|
show
|
|
forgetUnapprovedSignUps,
|
|
maxWaitingPasses,
|
|
maxWaitingSignUps,
|
|
unapprovedSignUpLifetime,
|
|
waitingPassLifetime;
|
|
export 'src/admission/sign_up_config.dart';
|
|
export 'src/agent/agents.dart'
|
|
show
|
|
agentSessionLifetime,
|
|
agentSignInMethod,
|
|
agentTokenLapsesAfter,
|
|
agentTokenPrefix,
|
|
forgetLapsedAgentTokens,
|
|
maxAgentsPerPerson;
|
|
export 'src/agent/agents_config.dart';
|
|
export 'src/assistant/assistant_conversation.dart'
|
|
show
|
|
assistantImageMaxBytes,
|
|
assistantQuestionMaxCharacters,
|
|
assistantQuestionMaxImages;
|
|
export 'src/assistant/assistant_forwarding.dart'
|
|
show assistantUsageCounted, maxQuestionsAtOnce, useLlmClient;
|
|
export 'src/assistant/assistant_grants.dart'
|
|
show assistantFiguresMonths, forgetOldAssistantFigures;
|
|
export 'src/assistant/assistants_config.dart';
|
|
export 'src/auth/account.dart';
|
|
export 'src/auth/auth_config.dart';
|
|
export 'src/auth/code_mail.dart';
|
|
export 'src/auth/email.dart';
|
|
export 'src/auth/identified.dart';
|
|
export 'src/auth/offered_ways.dart';
|
|
export 'src/auth/scopes.dart';
|
|
export 'src/common/network.dart';
|
|
export 'src/common/short_code.dart';
|
|
export 'src/files/file_limits.dart'
|
|
show FileLimits, Room, checkRoom, effectiveLimit, fileLimits, roomOf;
|
|
export 'src/files/file_pruning.dart'
|
|
show filePruningGrace, pruneUnreferencedFiles;
|
|
export 'src/files/file_store.dart';
|
|
export 'src/files/stored_files.dart'
|
|
show
|
|
downloadFile,
|
|
fileStoreOf,
|
|
fileUsageOf,
|
|
finishFileUpload,
|
|
startFileUpload;
|
|
export 'src/generated/protocol.dart' hide Protocol;
|
|
export 'src/halkyon_base.dart';
|
|
export 'src/instance/data_location.dart';
|
|
export 'src/instance/privacy_page.dart' show addPrivacyPageRoute, privacyPage;
|
|
export 'src/instance/source_code.dart';
|
|
export 'src/password/account_resets.dart'
|
|
show forgetLapsedResets, resetDelay, resetLapsesAfter;
|
|
export 'src/password/authenticators.dart'
|
|
show
|
|
forgetUnconfirmedAuthenticators,
|
|
maxAuthenticators,
|
|
unconfirmedAuthenticatorLifetime;
|
|
export 'src/password/key_proof.dart'
|
|
show
|
|
KeyProofPurpose,
|
|
PasswordProofPurpose,
|
|
authenticatorDigest,
|
|
canonicalInstanceUrl,
|
|
isAccountSignature,
|
|
keyProofMessage,
|
|
mendLinkDigest,
|
|
newKeysPasswordDigest,
|
|
newPasswordDigest,
|
|
newPhraseDigest,
|
|
passwordIdentity,
|
|
proofKeyDigest,
|
|
publicInstanceUrlOf;
|
|
export 'src/password/password_config.dart';
|
|
export 'src/password/passwords.dart'
|
|
show
|
|
isKeysPassword,
|
|
isKeysSetup,
|
|
isNewPassword,
|
|
isPasswordSetup,
|
|
newPasswordCosts,
|
|
passwordGroup,
|
|
passwordMethod,
|
|
signInChallengeLifetime,
|
|
signsInWithPassword,
|
|
wrappedKeysLength;
|
|
export 'src/profile/handle_checks.dart';
|
|
export 'src/profile/link_verification.dart';
|
|
export 'src/profile/profile_page.dart' show addProfilePageRoute, profilePage;
|
|
export 'src/profile/profile_rules.dart'
|
|
show
|
|
accountDomain,
|
|
avatarPath,
|
|
avatarStorage,
|
|
isHandle,
|
|
maxAvatarBytes,
|
|
operatorAccountDomain,
|
|
profilePageUrl,
|
|
reservedHandles;
|
|
export 'src/profile/profiles.dart';
|
|
export 'src/register/account_register.dart';
|
|
export 'src/register/accounts_mode.dart';
|
|
export 'src/register/deletion_notices.dart'
|
|
show MemberNotifier, deliverDeletionNotices;
|
|
export 'src/register/instance_routes.dart';
|
|
export 'src/register/member_pruning.dart';
|
|
export 'src/register/people.dart' show issueSession;
|
|
export 'src/register/sessions_ended.dart'
|
|
show AccountSessionsEnded, deliverSessionNotices;
|
|
export 'src/shared_space/join_page.dart' show addJoinPageRoute, joinPage;
|
|
export 'src/shared_space/shared_spaces.dart'
|
|
show forgetLapsedSpaceInvitations, membersOfSpaces, sharedSpacesOf;
|
|
export 'src/shared_space/space_grants.dart';
|
|
export 'src/simplelogin/handle_suggestion.dart'
|
|
show handleFromName, handlesToTry, suggestable;
|
|
export 'src/simplelogin/simplelogin.dart' show forgetUnfinishedSimpleLogins;
|
|
export 'src/simplelogin/simplelogin_callback.dart'
|
|
show
|
|
addSimpleLoginCallbackRoute,
|
|
simpleLoginCallbackPath,
|
|
simpleLoginReturns;
|
|
export 'src/simplelogin/simplelogin_config.dart';
|
|
export 'src/srp/srp_group.dart';
|
|
export 'src/srp/srp_math.dart' show numberOf, padded;
|
|
export 'src/srp/srp_server.dart'
|
|
show
|
|
SrpAccepted,
|
|
SrpChallenge,
|
|
SrpRefusal,
|
|
SrpRefused,
|
|
SrpVerification,
|
|
srpChallenge,
|
|
srpVerify;
|
|
export 'src/totp/base32.dart';
|
|
export 'src/totp/recovery_codes.dart';
|
|
export 'src/totp/totp.dart';
|